Pandas 数据分析,高中体测练习
分析体测成绩
需求:
体侧成绩转变成分数
进一步,画图,分布,体重正常,肥胖,偏瘦比例,绘制饼图
男生跑步1000成绩,不及格,及格,中等,良好,优秀,柱状图绘制
导包、读取文件
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt
%matplotlib inline
data = pd.read_excel('18级高一体测成绩汇总.xls')
data
班级 | 性别 | 姓名 | 1000米 | 50米 | 跳远 | 体前屈 | 引体 | 肺活量 | 身高 | 体重 | BMI | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 男 | 高孜阳0611 | 4'13 | 8.88 | 195 | 12 | 1 | 2785 | 170 | 72.6 | NaN |
1 | 1 | 男 | 郝少杰1013 | 4'16 | 7.70 | 225 | 11 | 7 | 3133 | 174 | 52.7 | NaN |
2 | 1 | 男 | 郝梓烨0619 | 4'09 | 8.45 | 218 | 14 | 1 | 3901 | 169 | 46.5 | NaN |
3 | 1 | 男 | 何弘源1010 | 4'21 | 8.05 | 206 | 13 | 1 | 4946 | 183 | 79.7 | NaN |
4 | 1 | 男 | 刘硕鹏1212 | 3'44 | 7.52 | 210 | 13 | 9 | 3538 | 171 | 54.7 | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
488 | 17 | 男 | 张乔楠0311 | 4'23 | 8.27 | 208 | 10 | 0 | 4647 | 176 | 69.5 | NaN |
489 | 17 | 男 | 郭泽森0333 | 5'19 | 9.55 | 210 | 15 | 6 | 7042 | 177 | 76 | NaN |
490 | 17 | 男 | 陈子龙061X | 3'25 | 7.5 | 252 | 13 | 13 | 5755 | 181 | 65 | NaN |
491 | 17 | 男 | 王丹龙0636 | 4'39 | 7.81 | 208 | 14 | 11 | 5688 | 172 | 51.7 | NaN |
492 | 17 | 男 | 王玉涵0636 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# 清洗数据
cond = data['班级'] != '班级' # 把有班级那一行的数据给删除
data = data[cond] # 得到新的数据
data[:45]
班级 | 性别 | 姓名 | 1000米 | 50米 | 跳远 | 体前屈 | 引体 | 肺活量 | 身高 | 体重 | BMI | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 男 | 高孜阳0611 | 4'13 | 8.88 | 195 | 12 | 1 | 2785 | 170 | 72.6 | NaN |
1 | 1 | 男 | 郝少杰1013 | 4'16 | 7.70 | 225 | 11 | 7 | 3133 | 174 | 52.7 | NaN |
2 | 1 | 男 | 郝梓烨0619 | 4'09 | 8.45 | 218 | 14 | 1 | 3901 | 169 | 46.5 | NaN |
3 | 1 | 男 | 何弘源1010 | 4'21 | 8.05 | 206 | 13 | 1 | 4946 | 183 | 79.7 | NaN |
4 | 1 | 男 | 刘硕鹏1212 | 3'44 | 7.52 | 210 | 13 | 9 | 3538 | 171 | 54.7 | NaN |
5 | 1 | 男 | 刘运硕0314 | 3'49 | 7.94 | 190 | 20 | 7 | 3970 | 175 | 66.4 | NaN |
6 | 1 | 男 | 吕晓瑶0314 | 3'54 | 7.75 | 186 | 11 | 7 | 3710 | 173 | 53.9 | NaN |
7 | 1 | 男 | 米孜聪0636 | 4'3 | 8.06 | 195 | 3 | 1 | 5578 | 178 | 83.1 | NaN |
8 | 1 | 男 | 聂浩然2719 | 4'01 | 7.75 | 220 | 15 | 10 | 3821 | 175 | 66.5 | NaN |
9 | 1 | 男 | 牛苗嘉1211 | 4'12 | 7.38 | 245 | 17 | 11 | 4423 | 167 | 53.9 | NaN |
10 | 1 | 男 | 牛砚哲2813 | 4 | 7.82 | 219 | 13 | 11 | 4031 | 173 | 57.4 | NaN |
11 | 1 | 男 | 齐子涵185x | 4'13 | 7.37 | 228 | 9 | 15 | 4354 | 163 | 54.6 | NaN |
12 | 1 | 男 | 乔一甲0616 | 3'45 | 7.66 | 202 | 7 | 3 | 2238 | 179 | 61.1 | NaN |
13 | 1 | 男 | 任晓波0311 | 3'46 | 7.66 | 245 | 3 | 7 | 4811 | 177 | 63.9 | NaN |
14 | 1 | 男 | 戎小龙2633 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NaN | NaN |
15 | 1 | 男 | 桑淳熙0616 | 3'57 | 7.60 | 192 | 7 | 5 | 4147 | 174 | 59.2 | NaN |
16 | 1 | 男 | 田晓龙2411 | 4'18 | 8.14 | 210 | 8 | 4 | 4241 | 179 | 61.9 | NaN |
17 | 1 | 男 | 田玉聪2716 | 3'32 | 7.20 | 255 | 22 | 12 | 5324 | 183 | 63.4 | NaN |
18 | 1 | 男 | 王晨宇0613 | 3'56 | 8.15 | 207 | 13 | 12 | 4363 | 173 | 60.5 | NaN |
19 | 1 | 男 | 王家梁0630 | 3'47 | 8.15 | 202 | 13 | 16 | 5364 | 174 | 56 | NaN |
20 | 1 | 男 | 王乐天3331 | 3'53 | 7.85 | 210 | 3 | 7 | 3445 | 177 | 56.9 | NaN |
21 | 1 | 男 | 王一钊1213 | 3'57 | 7.85 | 220 | 9 | 2 | 5670 | 177 | 55.5 | NaN |
22 | 1 | 男 | 王子天0634 | 3'42 | 7.23 | 212 | 12 | 15 | 5709 | 185 | 72.3 | NaN |
23 | 1 | 男 | 王子鑫0012 | 4'3 | 7.68 | 218 | 15 | 3 | 4780 | 177 | 83.7 | NaN |
24 | 1 | 男 | 未晓锟1214 | 4'14 | 8.30 | 206 | 15 | 1 | 3358 | 173 | 46.6 | NaN |
25 | 1 | 男 | 张国瑞033x | 4'04 | 8.15 | 205 | 9 | 5 | 3494 | 169 | 48.3 | NaN |
26 | 1 | 男 | 张皓天0632 | 4'04 | 7.55 | 190 | 12 | 5 | 3286 | 169 | 50.1 | NaN |
27 | 1 | 男 | 张泽地0310 | 4'02 | 7.55 | 240 | 5 | 12 | 4483 | 171 | 58.4 | NaN |
28 | 1 | 男 | 张智贤0318 | 3'57 | 7.89 | 220 | 9 | 11 | 4254 | 166 | 54.8 | NaN |
29 | 1 | 男 | 赵博翰101x | 4'16 | 8.19 | 212 | 27 | 7 | 3498 | 169 | 68 | NaN |
30 | 1 | 男 | 赵泽凯0311 | 4'01 | 7.89 | 213 | 5 | 11 | 4322 | 174 | 55.9 | NaN |
31 | 1 | 男 | 赵泽宇0616 | 4'08 | 8.21 | 208 | 19 | 20 | 3917 | 166 | 51.9 | NaN |
32 | 1 | 男 | 左晶川1217 | 4'06 | 8.71 | 206 | 11 | 4 | 3970 | 172 | 47.8 | NaN |
34 | 2 | 男 | 贾和0633 | 4'22 | 7.97 | 215 | 9 | 9 | 3865 | 175 | 58.7 | NaN |
35 | 2 | 男 | 李森0636 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NaN | NaN |
36 | 2 | 男 | 李一帆1812 | 4'46 | 8.79 | 172 | 7 | 1 | 4750 | 174 | 88.6 | NaN |
37 | 2 | 男 | 李子阳0618 | 4'01 | 7.37 | 210 | 2 | 7 | 4714 | 182 | 62.5 | NaN |
38 | 2 | 男 | 吕星繁0312 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NaN | NaN |
39 | 2 | 男 | 赵凌云105x | 4'13 | 7.77 | 208 | 8 | 7 | 4327 | 173 | 56 | NaN |
40 | 2 | 男 | 赵鹏悦2612 | 4'27 | 8.8 | 185 | 10 | 5 | 4745 | 164 | 74.8 | NaN |
42 | 3 | 男 | 宫诚博0612 | 3'43 | 6.89 | 276 | 16 | 12 | 5212 | 1.84 | 73.1 | NaN |
43 | 3 | 男 | 郭亚浩181X | 4'04 | 7.25 | 240 | 13 | 8 | 4756 | 1.76 | 72 | NaN |
44 | 3 | 男 | 郝晓辰0013 | 3'38 | 7.36 | 246 | 22 | 11 | 4433 | 1.84 | 62.5 | NaN |
45 | 3 | 男 | 李国玺2310 | 4'19 | 8.17 | 220 | 18 | 1 | 4438 | 1.74 | 72.2 | NaN |
46 | 3 | 男 | 李一帆1218 | 4'08 | 7.8 | 227 | 15 | 1 | 6033 | 1.77 | 85.6 | NaN |
data.fillna(0, inplace=True) # 没有参加体侧的同学分数都填充成0
# 没有空数据了
data.isnull().any() #查询是否还有空数据
班级 False
性别 False
姓名 False
1000米 False
50米 False
跳远 False
体前屈 False
引体 False
肺活量 False
身高 False
体重 False
BMI False
dtype: bool
data.head()
班级 | 性别 | 姓名 | 1000米 | 50米 | 跳远 | 体前屈 | 引体 | 肺活量 | 身高 | 体重 | BMI | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 男 | 高孜阳0611 | 4'13 | 8.88 | 195.0 | 12 | 1 | 2785 | 170.0 | 72.6 | 0.0 |
1 | 1 | 男 | 郝少杰1013 | 4'16 | 7.70 | 225.0 | 11 | 7 | 3133 | 174.0 | 52.7 | 0.0 |
2 | 1 | 男 | 郝梓烨0619 | 4'09 | 8.45 | 218.0 | 14 | 1 | 3901 | 169.0 | 46.5 | 0.0 |
3 | 1 | 男 | 何弘源1010 | 4'21 | 8.05 | 206.0 | 13 | 1 | 4946 | 183.0 | 79.7 | 0.0 |
4 | 1 | 男 | 刘硕鹏1212 | 3'44 | 7.52 | 210.0 | 13 | 9 | 3538 | 171.0 | 54.7 | 0.0 |
把数据中的 4'13 转换成 小数
def convert(x):
if isinstance(x, str):
minute, second = x.split("'")
minute = int(minute)
second = int(second)
return minute + second / 100.0
else:
return x
data['1000米'] = data['1000米'].map(convert) # 映射
data.head()
班级 性别 姓名 1000米 50米 跳远 体前屈 引体 肺活量 身高 体重 BMI 0 1 男 高孜阳0611 4.13 8.88 195.0 12 1 2785 170.0 72.6 0.0 1 1 男 郝少杰1013 4.16 7.70 225.0 11 7 3133 174.0 52.7 0.0 2 1 男 郝梓烨0619 4.09 8.45 218.0 14 1 3901 169.0 46.5 0.0 3 1 男 何弘源1010 4.21 8.05 206.0 13 1 4946 183.0 79.7 0.0 4 1 男 刘硕鹏1212 3.44 7.52 210.0 13 9 3538 171.0 54.7 0.0
加载体侧成绩评分表
score = pd.read_excel('体侧成绩评分表.xls', header = [0,1])
score
男肺活量 女肺活量 男50米跑 女50米跑 男体前屈 ... 女跳远 男引体 女仰卧 男1000 女800 成绩 分数 成绩 分数 成绩 分数 成绩 分数 成绩 分数 ... 成绩 分数 成绩 分数 成绩 分数 成绩 分数 成绩 分数 0 4540 100 3150 100 7.1 100 7.8 100 23.6 100 ... 204 100 16.0 100 53 100 3'30" 100 3'24" 100 1 4420 95 3100 95 7.2 95 7.9 95 21.5 95 ... 198 95 15.0 95 51 95 3'35" 95 3'30" 95 2 4300 90 3050 90 7.3 90 8.0 90 19.4 90 ... 192 90 14.0 90 49 90 3'40" 90 3'36" 90 3 4050 85 2900 85 7.4 85 8.3 85 17.2 85 ... 185 85 13.0 85 46 85 3'47" 85 3'43" 85 4 3800 80