频数分析

【问题描述】

对DataFrame中指定列数据进行频数分析。

【示例10-8】

本例使用的Excel文件的完整路径为“D:/Samples/ch10/05 频数分析/消费情况.xlsx”。该文件打开后如图10-5所示,是不同地区的消费情况。要求用“燃料”数据进行频数分析。

Document Image

图10-5 不同地区的消费情况

  • 编写下面的代码:
code.python
# 导入必要的库
import pandas as pd
# 读取Excel文件中的数据,使用openpyxl引擎
data = pd.read_excel('D:/Samples/ch10/05 频数分析/消费情况.xlsx', engine='openpyxl')
# 选取“燃料”变量进行排序
fuel_sorted = data['燃料'].sort_values()
# 使用qcut函数将数据分成8个箱子
fuel_cut = pd.qcut(fuel_sorted, 8)
# 对每个箱子中的值进行频数计数
frequency = fuel_cut.value_counts(sort=False)
# 打印每个区间的编号、起点和终点值以及对应的频数
for i in range(len(frequency)):
    print("区间{}:{} - {},频数为{}".format(i+1, fuel_cut.unique()[i].left, fuel_cut.unique()[i].right, frequency.iloc[i]))

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,在IDLE Shell窗口输出频数分析结果。

code.python
>>> == RESTART: D:/Samples/1.py =
区间1:5.699 - 8.46,频数为4
区间2:8.46 - 8.98,频数为3
区间3:8.98 - 10.94,频数为3
区间4:10.94 - 12.2,频数为3
区间5:12.2 - 12.72,频数为3
区间6:12.72 - 13.72,频数为3
区间7:13.72 - 16.96,频数为3
区间8:16.96 - 18.37,频数为3

可见,数据排序后从小到大等间隔分为8个区间,统计落在每个区间的数据个数,即频数。

【知识点扩展】

频数分析首先将数据从小到大进行排序,然后将整个区间等间隔分为指定个数的小区间,并统计落在每个区间的数据个数,即频数。如果用频数指定条形的高度,可以绘制直方图。