Pandas 数据分析,高中体测练习
分析体测成绩
需求:
体侧成绩转变成分数
开卷考试
excel完成可以
一个手输入
进一步,画图,分布,体重正常,肥胖,偏瘦比例,绘制饼图
男生跑步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