数据挖掘之频率分布直方图(Python+Excel)

前言

最近接到一个任务,来绘制一组数据的频率分布直方图。直方图是高中就学习过的知识,但是在科研、数据分析中仍然占有很高的地位。一开始我认为这个只需要用Excel就可以轻松实现,但是对Excel的绘图不熟悉,折腾了半天才用Python实现。
本次实验中对数据预处理和绘图的经历有一定的借鉴意义。因此记录下来。

数据预处理

不同于其他插图,直方图只需要一列数据即可。表示的是这一列数据中各个数据出现的频率分布。
实验用的数据是微博数据,经过处理后得到了一系列微博用户的轨迹数据。
如图sum2是轨迹的数量,line是轨迹编号。(本文展示的为随机构建数据,与真实结果不一致)
数据挖掘之频率分布直方图(Python+Excel)_第1张图片
因为是不同用户的轨迹,因此有重复需要通过arcgis的汇总功能,以line为key,对sum2求和。Python的group_by函数也可以实现这个功能。

最终得到了轨迹的数量;绘制轨迹数的直方图,能够分析研究区域内轨迹被用户访问的频率。如果有一些访问频率过低的轨迹,那就属于无效数据,需要进行区分。

绘制直方图

1,Excel绘制
数据导出为excel表格格式。选中一列数据,然后插入直方图。
数据挖掘之频率分布直方图(Python+Excel)_第2张图片
初始化的图下标不是很合适。可以点击x轴,选择“设置坐标轴”菜单。在箱宽度中可以设置箱的宽度,即直方图的组距。
数据挖掘之频率分布直方图(Python+Excel)_第3张图片
下图为调好的图
数据挖掘之频率分布直方图(Python+Excel)_第4张图片
2,Python实现

Python则可以利用matplotlib库实现绘制。下面附上代码;其中a为list元素。如a=[1,2,3,4,5,6,7]


from matplotlib import pyplot as plt

# 计算组数
d = 800 # 组距
num_bins = int((max(a) - min(a)) // d)
print(max(a), min(a), max(a) - min(a))
print(num_bins)
# 设置图形大小
plt.figure(figsize=(20, 13), dpi=80)
# 绘制直方图
plt.hist(a, num_bins)
# 设置x轴的刻度
plt.xticks(range(int(min(a)), int(max(a)) + d, d))
plt.grid()
plt.show()

此外在使用Python时遇到了一个问题,去除list中值为0的元素。
如果使用for循环遍历,则可能出现去除残余的现象,这是因为每次用remove删除值为0的元素时,list的下一个元素就会前移,而指针向后移导致遗漏。

for i in range(a):
	if(i==0):
		a.remove(i)

正确的方法如下:

import pandas as pd
df=pd.read_csv("data.csv",encoding='utf-8')    #读取date文件
a=df['FREQUENCY'].tolist()
while 0 in a:
    a.remove(0)

新开通了本人的公众号,欢迎关注:燕南路GISer ,专注GIS干货分享,不定期更新。
主要兴趣:GIS、时空数据挖掘、python、机器学习深度学习
提问、求资源等都可在公众号后台留言
CSDN的部分内容会重写再搬迁到公众号,欢迎关注!
在这里插入图片描述

你可能感兴趣的:(Python,数据挖掘,python,数据分析)