如何将Pandas数据转换为7×24数组并基于plt.imshow()绘制热力图
从DataFrame统计到热力图生成步骤
1. 统计同一天同一小时的访问次数
通过Pandas的分组功能,直接从原始数据生成带访问次数的DataFrame:
import pandas as pd # 原始访问数据 visits = [ (1,13), (2,1), (1,13), (1,13), (2,18), (5,3), (6,1), (5,3), (1,2), (2,16), (2,16), (2,18), (4,7) ] visits_df = pd.DataFrame(visits, columns=['day','hour']) # 分组统计访问次数 count_df = visits_df.groupby(['day', 'hour']).size().reset_index(name='count')
groupby(['day','hour'])将数据按日期和小时分组,size()统计每组的记录数(即访问次数),reset_index()把分组索引转为普通列,name='count'指定计数列的名称,最终得到的count_df和你预期的expected_df结构完全一致。
2. 生成7×24的热力图数组
创建一个7行(对应一周7天)、24列(对应一天24小时)的全0数组,再将统计结果填充到对应位置:
import numpy as np # 初始化7×24的全0数组 heatmap_array = np.zeros((7, 24), dtype=int) # 遍历统计结果填充数组 for _, row in count_df.iterrows(): # 数组索引从0开始,日期和小时需减1转换为索引 day_idx = row['day'] - 1 hour_idx = row['hour'] - 1 heatmap_array[day_idx, hour_idx] = row['count']
3. 使用plt.imshow绘制热力图
用Matplotlib绘制热力图,并添加必要的标签提升可读性:
import matplotlib.pyplot as plt # 绘制热力图,选择合适的配色方案 plt.imshow(heatmap_array, cmap='YlOrRd', aspect='auto') # 添加颜色条和轴标签 plt.colorbar(label='访问次数') plt.yticks(ticks=np.arange(7), labels=['Day1', 'Day2', 'Day3', 'Day4', 'Day5', 'Day6', 'Day7']) plt.xticks(ticks=np.arange(24), labels=[str(h+1) for h in range(24)]) plt.xlabel('小时') plt.ylabel('星期') plt.title('每日各时段访问热力图') plt.show()
内容的提问来源于stack exchange,提问作者Sergio
相关产品推荐
相关产品推荐

