数据分析实战—热力图

11,277 阅读2分钟

前言

  提供的数据:数据

一、什么是热力图?

  热力图通过颜色的深浅来表示数据的分布。

  示例图中规定了颜色越浅则数值越大,那么我们可以一眼就分辨出数据的分布情况,非常方便。

二、绘制热力图

  针对数据提出要求:绘制E地区4月份订单量的热力图,横轴以天为单位,纵轴以小时为单位

  1. 加载必要的包
import pandas as pd
import numpy as np
import seaborn as sns #绘制热力图使用
import matplotlib.pyplot as plt
  1. 加载数据
path='../data/数据.csv'
f=open(path)
data=pd.read_csv(f)
  1. 提取地点和时间
E_data=data[data['地点']=='E']
E_data['支付时间'] = pd.to_datetime(E_data['支付时间'])
month_data=E_data[E_data['支付时间'].dt.month==4]
  1. 分组计算订单量
order_quantity_group=month_data.groupby([month_data['支付时间'].dt.day,month_data['支付时间'].dt.hour]).size()

  以天和小时为分组依据分组,size()函数表示数据个数,即为订单量。结果如下:

  由结果可以看出,索引中是我们给出的分组依据,分别是“支付时间的月份”和“小时”,格式是元组类型。

  1. 新建一个矩阵

  热力图根据矩阵绘制,所以在绘制热力图之前首先把所求数据排列为合适的矩阵。

m=list(map(list,zip(*list(order_quantity_group.index))))  #分离元组,包含天和小时数据
#新建一个矩阵
new_array=np.zeros((30,24))    #30代表天数,24代表小时
for i,j in zip(m[0],m[1]):  #m[0]是月份,m[1]是小时
    new_array[i-1][j]=order_quantity_group[(i,j)]
  1. 绘制热力图
sns.heatmap(new_array.T, annot=True,xticklabels= range(1,32), yticklabels= True,  cmap="YlGnBu") #绘制热力图。
plt.title('第4月订单量热力图') #加标题
plt.xlabel("日期") #X轴标签
plt.ylabel("小时") #Y轴标签
plt.show()
f.close()

  sns.heatmap为绘制热力图函数。

  • 第一个参数为矩阵数据,由于要求规定横轴是天,纵轴是小时,因此需要做一个转置。
  • annot参数代表是否在图形中显示数据,若为True,则显示数据,否则只显示颜色。
  • xticklabels和yticklabels是一组参数,如果为True,则绘制数据框的列名称。 如果为False,不会添加列名,如果列表类型数据,则将这些替代为x轴标签。
  • cmap可以设置颜色

  由图可以看出,E地区销售量集中在中旬,且在一天当中集中在下午。

三、其它问题

数据

python画图 中文字体不显示的问题

数据分析实战—柱状图

数据分析实战—折线图

数据分析实战—饼状图

数据分析实战—气泡图

数据分析实战—热力图

参考

matplotlib官方资料

seaborn官方资料