R语言数据探索和分析5-学生成绩可视化分析

该篇文章介绍了如何使用R语言生成50名学生的学号和成绩,包括正态分布的数学、英语和统计学成绩。然后将数据存储为CSV文件,读取并进行数据分析,如计算平均值、标准差,找出最高分和最低分学生,计算总分并排序,以及绘制各类成绩的直方图、箱线图、评分分布饼图和多类条形图以展示成绩分布情况。
摘要由CSDN通过智能技术生成

#1.生成50名学生的学号

# 2. 生成符合正态分布的成绩,范围在指定区间内

set.seed(122)  # 为了可重复性
math_scores <- round(rnorm(50, mean=70, sd=15))
math_scores <- ifelse(math_scores < 40, 40, ifelse(math_scores > 100, 100, math_scores))

english_scores <- round(rnorm(50, mean=75, sd=15))
english_scores <- ifelse(english_scores < 50, 50, ifelse(english_scores > 100, 100, english_scores))

statistics_scores <- round(rnorm(50, mean=70, sd=15))
statistics_scores <- ifelse(statistics_scores < 40, 40, ifelse(statistics_scores > 100, 100, statistics_scores))
math_scores <- round(rnorm(50, mean=70, sd=15))
math_scores <- ifelse(math_scores < 40, 40, ifelse(math_scores > 100, 100, math_scores))

english_scores <- round(rnorm(50, mean=75, sd=15))
english_scores <- ifelse(english_scores < 50, 50, ifelse(english_scores > 100, 100, english_scores))

statistics_scores <- round(rnorm(50, mean=70, sd=15))
statistics_scores <- ifelse(statistics_scores < 40, 40, ifelse(statistics_scores > 100, 100, statistics_scores))

# 3. 将生成的数据组合成一个数据框,并保存到CSV文件

scores_df <- data.frame(StudentID=student_ids, Math=math_scores, English=english_scores, Statistics=statistics_scores)
write.csv(scores_df, "data.csv", row.names = FALSE)

# 4. 从CSV文件读取数据,并计算各科成绩的均值和标准差

完整代码

完整代码加结果分析

scores_df <- read.csv("2109014101score.csv")
mean_scores <- colMeans(scores_df[, c("Math", "English", "Statistics")])
mean_scores
std_dev_scores <- sapply(scores_df[, c("Math", "English", "Statistics")], sd)
std_dev_scores

# 5. 计算各科成绩的最高分、最低分,并找到对应的学生学号

max_scores <- apply(scores_df[, c("Math", "English", "Statistics")], 2, max)
min_scores <- apply(scores_df[, c("Math", "English", "Statistics")], 2, min)

max_score_students <- scores_df[scores_df$Math == max_scores['Math'] | 
                                  scores_df$English == max_scores['English'] | 
                                  scores_df$Statistics == max_scores['Statistics'], ]
max_score_students
min_score_students <- scores_df[scores_df$Math == min_scores['Math'] | 
                                  scores_df$English == min_scores['English'] | 
                                  scores_df$Statistics == min_scores['Statistics'], ]
min_score_students

# 6. 计算每位学生的总分,并按总分高低排序学号

scores_df$Total <- rowSums(scores_df[, c("Math", "English", "Statistics")])
sorted_students <- scores_df %>% arrange(desc(Total)) %>% select(StudentID)
sorted_students

# 7. 画出总分及各科成绩的直方图和箱图

par(mfrow=c(2, 2))
hist(scores_df$Math, main="数学成绩分布", xlab="分数", col="blue")
hist(scores_df$English, main="英语成绩分布", xlab="分数", col="green")
hist(scores_df$Statistics, main="统计学成绩分布", xlab="分数", col="red")
hist(scores_df$Total, main="总分分布", xlab="总分", col="purple")

boxplot(scores_df$Math, scores_df$English, scores_df$Statistics, 
        names=c("数学", "英语", "统计学"), main="各科成绩箱线图")


# 8. 将成绩转化为五级评分制,并绘制相应的图表
 

# 定义成绩等级标签
grades <- c("不及格", "及格", "中等", "良好", "优秀")

# 定义转换成绩为等级的函数
convert_to_grade <- function(score, lower_limits=c(60, 70, 80, 90)) {
  sum(score >= lower_limits) + 1
}

# 应用函数并转换成绩为等级
scores_df$MathGrade <- factor(sapply(scores_df$Math, convert_to_grade), levels=1:5, labels=grades)
scores_df$EnglishGrade <- factor(sapply(scores_df$English, convert_to_grade), levels=1:5, labels=grades)
scores_df$StatisticsGrade <- factor(sapply(scores_df$Statistics, convert_to_grade), levels=1:5, labels=grades)


# 绘制饼图
par(mfrow=c(1, 3))
pie(table(scores_df$MathGrade), main="数学成绩")
pie(table(scores_df$EnglishGrade), main="英语成绩")
pie(table(scores_df$StatisticsGrade), main="统计学成绩")

# 绘制群集条形图
barplot(rbind(table(scores_df$MathGrade), table(scores_df$EnglishGrade), table(scores_df$StatisticsGrade)), 
        beside=TRUE, legend.text=TRUE, args.legend=list(x="topright"), 
        main="各科成绩群集条形图")

# 绘制堆积条形图
barplot(rbind(table(scores_df$MathGrade), table(scores_df$EnglishGrade), table(scores_df$StatisticsGrade)), 
        beside=FALSE, legend.text=TRUE, args.legend=list(x="topright"), 
        main="各科成绩堆积条形图")

# 绘制百分比堆积条形图
barplot(prop.table(rbind(table(scores_df$MathGrade), table(scores_df$EnglishGrade), table(scores_df$StatisticsGrade)), 
                   margin=1), legend.text=TRUE, args.legend=list(x="topright"), 
        main="各科成绩百分比堆积条形图")

完整代码

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值