3.7 训练场
首先我们需要下载一个 Excel 文件:
链接:https://pan.baidu.com/s/1gkEEH1yVA1RdaXTrFbw3ww?pwd=rm9t
提取码:rm9t
下载完成之后,把该文件和我们的代码放到同一个文件夹下,这一操作我们在之前的博客中已经反复说到,这里就不再进行演示
3.7.1 找到一班(名字后面跟的数字表示班级),获取班级将其男生1000米跑,成绩绘制线形图
import numpy as np import pandas as pd # 获取1班数据 df = pd.read_excel('./分数汇总.xlsx', sheet_name = 0) # 获取1班的名字 cnt = df['姓名'].str[3:].astype(np.int16) == 1 df2 = df[cnt] s = df2['男1000米跑分数'] # 把 Series 数据转为 DataFrame # 重置行索引,0、1、2、3...... score = s.reset_index()[['男1000米跑分数']] # 绘图 score.plot()
绘图虽然绘制出来了,但是报错一大堆,这是因为有中文的原因,我们接着继续处理:
接下来的处理方法涉及 matplotlib,属于超纲内容,可以不进行模拟,安装 matplotlib 见博文matplotlib的安装教程以及简单调用
这是字体需要导包:import matplotlib.pyplot as plt
import numpy as np import pandas as pd import matplotlib.pyplot as plt # 获取1班数据 df = pd.read_excel('./分数汇总.xlsx', sheet_name = 0) # 获取1班的名字 cnt = df['姓名'].str[3:].astype(np.int16) == 1 df2 = df[cnt] s = df2['男1000米跑分数'] # 把 Series 数据转为 DataFrame # 重置行索引,0、1、2、3...... score = s.reset_index()[['男1000米跑分数']] # 把字体设置为楷体(你的电脑上需有这个字体才能进行设置) plt.rcParams['font.family'] = 'STKaiti' # 调整字体大小 plt.rcParams['font.size'] = 18 # 绘图 score.plot()
3.7.2 对各项体侧指标进行分箱操作:不及格(0~59)、及格(60~69)、中等(70~79)、良好(80~89)、优秀(90~100)
columns = df.columns for col in columns: if col.endswith('分数'): df[col] = pd.cut(df[col], bins = [0, 60, 70, 80, 90, 101], labels = ['不及格', '及格', '中等', '良好', '优秀'], right = False) df2 = pd.read_excel('./分数汇总.xlsx', sheet_name = 1) columns = df2.columns for col in columns: if col.endswith('分数'): df2[col] = pd.cut(df2[col], bins = [0, 60, 70, 80, 90, 101], labels = ['不及格', '及格', '中等', '良好', '优秀'], right = False)
3.7.3 绘制全校男生1000米跑和男跳远的条形图(分箱操作后统计各个成绩水平数量)
# 获取男1000米跑分数的数据 s1 = df['男1000米跑分数'].value_counts() s1.sort_index() # 获取男跳远分数的数据 s2 = df['男跳远分数'].value_counts() s2.sort_index() # 合并成为一个新的 DataFrame df3 = pd.DataFrame({'男1000米跑分数':s1, '男跳远分数':s2}) # 绘图 df3.plot.bar()
3.7.4 绘制全校女生50米跑和女仰卧的饼图(分箱操作后统计各个成绩水平的数量)
# 获取女50米跑分数的数据 s3 = df2['女50米跑分数'].value_counts() s3 = s3.sort_index() # 获取女仰卧分数的数据 s4 = df2['女仰卧分数'].value_counts() s4 = s3.sort_index() # 合并数据 df4 = pd.DataFrame({'女50米跑分数':s3, '女仰卧分数':s4}) df4.plot.pie(subplots = True)
更改一下我们的图像尺寸:
# 获取女50米跑分数的数据 s3 = df2['女50米跑分数'].value_counts() s3 = s3.sort_index() # 获取女仰卧分数的数据 s4 = df2['女仰卧分数'].value_counts() s4 = s3.sort_index() # 合并数据 df4 = pd.DataFrame({'女50米跑分数':s3, '女仰卧分数':s4}) df4.plot.pie(subplots = True, figsize = (16, 16))
显示各部分的百分比:
# 获取女50米跑分数的数据 s3 = df2['女50米跑分数'].value_counts() s3 = s3.sort_index() # 获取女仰卧分数的数据 s4 = df2['女仰卧分数'].value_counts() s4 = s3.sort_index() # 合并数据 df4 = pd.DataFrame({'女50米跑分数':s3, '女仰卧分数':s4}) # 显示百分比,百分比保留两位小数 df4.plot.pie(subplots = True, figsize = (16, 16), autopct = '%0.2f%%')
3.7.5 绘制男跳远、女跳远的堆叠条形图(分箱操作后统计各个成绩水平的数量)
# 获取男跳远分数的数据 s5 = df['男跳远分数'].value_counts() s5 = s5.sort_index() # 获取女跳远分数的数据 s6 = df2['女跳远分数'].value_counts() s6 = s6.sort_index() # 数据合并 df5 = pd.DataFrame({'男跳远分数':s5, '女跳远分数':s6}) # 绘制堆叠条形图 df5.plot.bar(stacked = True)
总结:pandas库的亮点
- 一个快速、高效的DataFrame对象,用于数据操作和综合索引;
- 用于在内存数据结构和不同格式之间读写数据的工具:CSV和文本文件、Microsoft Excel、SQL数据库和快速HDF 5格式;
- 智能数据对齐和丢失数据的综合处理:在计算中获得基于标签的自动对齐,并轻松地将凌乱的数据操作为有序的形式;
- 数据集的灵活调整和旋转;
- 基于智能标签的切片、花式索引和大型数据集的子集;
- 可以从数据结构中插入和删除列,以实现大小可变;
- 通过在强大的引擎中聚合或转换数据,允许对数据集进行拆分应用组合操作;
- 数据集的高性能合并和连接;
- 层次轴索引提供了在低维数据结构中处理高维数据的直观方法;
- 时间序列-功能:日期范围生成和频率转换、移动窗口统计、移动窗口线性回归、日期转换和滞后。甚至在不丢失数据的情况下创建特定领域的时间偏移和加入时间序列;
- 对性能进行了高度优化,用Cython或C编写了关键代码路径。
- Python与pandas在广泛的学术和商业领域中使用,包括金融,神经科学,经济学,统计学,广告,网络分析,等等
- 学到这里,体会一会pandas库的亮点,如果对哪些还不熟悉,请对之前知识点再次进行复习。