实验1 学生成绩数据的预处理、探索性分析和可视化
1. 有60名学生的两门课程成绩的数据文件(文件名分别为ReportCard1和ReporCard2),分别记录着学生的学号、性别以及不同课程的成绩。请将数据读入Pandas数据框,并做如下处理:
1)将两个数据文件按学号合并为一个数据文件,得到包含所有课程成绩的数据文件。
2)计算每个同学的各门课程的总成绩和平均成绩。
3)将数据按总成绩的降序排序。
4)按性别分别计算各门课程的平均成绩。
5)按优、良、中、及格和不及格,对平均成绩进行分组。
6)按性别统计优、良、中、及格和不及格的人数。
7)生成性别的虚拟自变量。
8)绘制总成绩的直方图。
9)绘制平均成绩的优、良、中、及格和不及格的饼图。
10)绘制总成绩和数学(math)成绩的散点图。
参考例子:
北京空气质量
派生虚拟自变量
一、将两个数据文件按学号合并为一个数据文件,得到包含所有课程成绩的数据文件。
1. 导入实验所需要的库包
import pandas as pd |
效果:导包操作成功!
2. 文件修改列名操作
file_path_1 = fr'../data/ReportCard1.txt' |
效果:对比前后两个表格的表头字段!
核心代码是:dataframe.columns = new_columns,注意分隔符是“\t”!
3. 文件查看字段类型操作
核心代码是:dataframe.dtypes
4. 文件查看基本信息操作
核心代码是:dataframe.describe()
5. 文件合并和保存操作
# 检验两个文件是否含有关联字段(学号) |
核心代码是:pd.merge(df_1,df_2,on=‘关联字段’,how=“关联方式”)
二、计算每个同学的各门课程的总成绩和平均成绩。
1. 检验数据是否重复操作
# 读取数据源 |
核心代码是:dataframe[‘字段’].duplicated.any()
2. 检验每列缺失值操作
# 探索性分析每列缺失值情况 |
核心代码是:missing_ratio = missing_count / total_count
3. 检验每行缺失值操作
# 探索性分析每行缺失率
|
核心代码是:missing_rate = missing_count / df.shape[1]
4. 填充缺失值操作
# 根据业务要求:字段没有缺失率到达 60% ,仍可以保留数据 |
核心代码是:dataframe.fillna(0.0,inplace=True)
5. 总成绩和平均值计算
# 因为之前验证过不会重复学号,因此每行就是一个类别,axis = 1 行求值 |
核心思路:多列操作
三、将数据按总成绩的降序排序。
# 由于需要赋值新对象 |
核心代码:多列操作dataframe.sort_values(by=‘排序字段’,ascending=True/False)
四、按性别分别计算各门课程的平均成绩。
# 按照性别分组,保留两位小数 |
核心思路:分组后聚合
五、按优、良、中、及格和不及格,对平均成绩进行分组。
# 自定义区间分组可以用 cut 函数
|
核心代码:cut(自定义区间字段,自定义区间,自定义区间标签)
六、按性别统计优、良、中、及格和不及格的人数。
1. 方法一:运用透视表
# 按性别和等级分组,并计算每个组的人数 |
核心代码:dataframe.pivot(index=,columns=,values=,aggfunc=聚合操作,fill_value=0)
2. 方法二:运用size()
# 方法二: size() 方法可以计算每组的个数,可以生成没有数据的等级 |
核心思路:生成长表函数,但0的字段也出现
3. 方法三:运用 unstack()
# 方法三:unstack 方法,可以将多级索引转化为dataframe的二维形态 |
核心思路:长表比较堆叠,所以(unstack)不要堆叠,变成宽表!
七、生成性别的虚拟自变量。
# 虚拟自变量,相当于将类别转化为 0,1这类数字,类似于热编码 |
核心代码:dataframe.join(pd.get_dummies(dataframe[‘虚拟自变量字段’]))
八、绘制总成绩的直方图。
import matplotlib.pyplot as plt |
九、绘制平均成绩的优、良、中、及格和不及格的饼图。
import matplotlib.pyplot as plt |
十、绘制总成绩和数学(math)成绩的散点图。
import matplotlib.pyplot as plt
plt.ylabel('Total Scores') |
附录:数据集
数据集:ReportCard1.txt
xh sex poli chi math
92103 2.00 NA NA NA
92239 2.00 40.00 63.00 44.00
92142 2.00 NaN 70.00 59.00
92223 1.00 56.00 91.00 65.50
92144 1.00 59.00 79.00 34.00
92217 2.00 60.00 82.50 76.50
92111 1.00 61.00 86.00 74.00
92146 1.00 61.00 69.00 45.00
92234 1.00 66.00 79.00 55.50
92113 1.00 70.00 85.00 66.00
92126 1.00 70.00 92.00 56.00
92211 2.00 71.00 73.00 69.00
92226 1.00 73.00 77.00 52.50
92141 2.00 73.00 82.00 41.50
92203 2.00 74.00 93.00 84.50
92220 2.00 74.00 81.50 59.50
92145 1.00 74.00 84.50 30.50
92228 1.00 76.00 82.00 45.50
92128 2.00 76.00 93.00 45.00
92140 2.00 76.00 73.00 39.50
92227 1.00 77.00 87.00 44.50
92134 2.00 77.00 91.00 47.50
92202 1.00 78.00 89.00 83.50
92221 2.00 79.00 83.00 47.00
92236 1.00 79.00 76.00 34.00
92122 1.00 80.00 88.50 63.50
92205 2.00 81.00 79.00 84.00
92112 2.00 81.00 75.50 76.50
92213 1.00 82.00 76.00 65.00
92105 1.00 82.00 85.00 79.50
92124 1.00 82.00 76.00 61.00
92207 2.00 83.00 91.00 70.50
92215 1.00 83.00 80.50 62.50
92229 2.00 83.00 72.00 44.50
92231 2.00 83.00 84.00 38.50
92117 1.00 83.00 91.00 80.50
92212 1.00 84.00 85.00 61.50
92224 2.00 84.00 72.00 66.50
92108 2.00 84.00 90.00 69.50
92116 2.00 84.00 87.00 67.50
92115 1.00 85.00 91.00 72.50
92206 2.00 86.00 86.00 77.50
92214 1.00 86.00 86.00 62.00
92216 1.00 87.00 74.50 69.50
92218 1.00 87.00 72.00 70.00
92225 1.00 87.00 83.00 44.50
92127 2.00 87.00 97.00 52.00
92204 2.00 88.00 81.00 87.50
92106 2.00 88.00 88.00 78.00
92125 2.00 88.00 80.00 53.50
92232 2.00 89.00 67.00 51.50
92104 2.00 89.00 97.00 69.50
92129 2.00 89.00 90.00 50.00
92209 2.00 90.00 91.00 70.50
92120 1.00 90.00 84.00 55.00
92208 1.00 91.00 88.00 63.00
92135 1.00 91.00 77.00 47.00
92110 1.00 92.00 94.00 71.00
92102 1.00 94.00 97.00 86.50
92101 2.00 96.00 96.00 87.50
数据集:ReportCard2.txt
xh fore phy che geo his
92146 20.00 49.00 32.00 32.00 51.00
92239 21.00 54.00 26.00 26.00 55.00
92142 22.00 68.00 26.00 26.00 63.00
92141 28.00 69.00 43.00 43.00 74.00
92236 28.00 63.00 36.00 36.00 52.00
92232 30.00 60.00 43.00 61.50 79.00
92134 31.00 67.00 41.00 72.50 77.00
92145 33.00 64.00 34.00 34.00 71.00
92144 34.00 57.00 37.00 37.00 76.00
92217 35.00 81.00 60.00 70.50 74.00
92127 38.00 76.00 47.00 79.00 84.00
92209 39.00 89.00 53.00 68.50 81.00
92226 39.00 81.00 44.00 78.00 73.00
92126 40.00 66.00 56.00 70.50 91.00
92206 40.00 92.00 60.00 57.00 76.00
92140 41.00 62.00 48.00 54.50 56.00
92124 42.00 80.00 50.00 60.00 87.00
92211 42.00 95.00 61.00 76.50 76.00
92112 43.00 78.00 83.00 78.00 91.00
92135 44.00 58.00 44.00 62.00 80.00
92122 44.00 75.00 70.00 61.50 66.00
92117 44.00 89.00 56.00 55.00 62.00
92220 45.00 82.00 64.00 63.00 72.00
92225 46.00 80.00 48.00 64.50 80.00
92229 48.00 50.00 55.00 54.00 96.00
92208 48.00 75.00 54.00 76.00 95.00
92108 50.00 80.00 60.00 86.50 94.00
92203 50.00 89.00 72.00 82.50 92.00
92214 50.00 73.00 65.00 63.50 81.00
92120 50.00 82.00 60.00 67.50 81.00
92216 50.00 83.00 47.00 65.00 72.00
92221 51.00 70.00 52.00 77.50 93.00
92111 51.00 74.00 61.00 76.00 91.00
92129 52.00 71.00 53.00 58.00 74.00
92116 52.00 82.00 60.00 79.00 71.00
92224 52.00 70.00 43.00 55.00 69.00
92215 54.00 60.00 55.00 66.50 94.00
92227 56.00 51.00 44.00 65.00 86.00
92234 57.00 52.00 57.00 41.00 65.00
92105 60.00 88.00 66.00 72.50 98.00
92125 60.00 78.00 51.00 69.00 94.00
92204 60.00 84.00 63.00 79.00 92.00
92205 60.00 91.00 64.00 81.00 92.00
92212 60.00 78.00 41.00 74.00 91.00
92228 60.00 62.00 48.00 51.50 77.00
92106 60.00 90.00 70.00 81.50 77.00
92213 60.00 75.00 60.00 78.00 76.00
92207 60.00 84.00 64.00 81.50 62.00
92231 60.00 76.00 46.00 65.50 49.00
92102 61.00 93.00 64.00 79.50 95.00
92113 63.00 86.00 65.00 64.00 84.00
92115 63.00 70.00 50.00 65.00 82.00
92110 65.00 78.00 62.00 83.00 87.00
92128 65.00 68.00 60.00 64.50 73.00
92218 65.00 72.00 49.00 62.00 68.00
92103 66.00 98.00 79.00 89.00 81.00
92223 68.00 77.00 39.00 54.50 63.00
92101 72.00 93.00 65.00 76.00 92.00
92202 81.00 91.00 77.00 81.00 93.00
92104 86.00 83.00 62.00 83.00 94.00
“若有理解思路疏漏,感谢大佬批评指正!”