• 【matplotlib 实战】--热力图


    热力图,是一种通过对色块着色来显示数据的统计图表。
    它通过使用颜色编码来表示数据的值,并在二维平面上呈现出来。
    热力图通常用于显示大量数据点的密度、热点区域和趋势。

    绘图时,一般较大的值由较深的颜色表示,较小的值由较浅的颜色表示;较大的值由偏暖的颜色表示,较小的值由较冷的颜色表示,等等。

    热力图适合用于查看总体的情况、发现异常值、显示多个变量之间的差异,以及检测它们之间是否存在任何相关性。

    1. 主要元素

    热力图的主要元素如下:

    1. 矩形块:每个矩形块都有一个对应的位置。表示某种属性、频率、密度等。
    2. 颜色映射:通常使用渐变色带来表示数值的大小或密度。常见的颜色映射包括从冷色调(如蓝色)到热色调(如红色)的渐变,表示数值从低到高的变化。
    3. 热力密度:通过颜色的深浅来表示数据的密度或频率。较浅的颜色表示较低的密度或频率,而较深的颜色表示较高的密度或频率。
    4. 坐标轴:热力图通常在二维平面上显示,因此会有两个坐标轴,分别表示水平和垂直方向上的位置。

    2. 适用的场景

    热力图适用于以下分析场景:

    • 数据密度分析:显示数据点的密度分布情况。它可以帮助用户观察数据的聚集区域和稀疏区域,从而揭示数据的分布模式和趋势。
    • 热点区域识别:识别数据中的热点区域,即数据密度较高的区域。对于发现热门地区、热门产品或热门事件等具有重要意义。
    • 趋势分析:通过观察颜色的变化,可以分析数据在不同区域或时间段的变化趋势。
    • 空间数据分析:在地理信息系统(GIS)和位置数据分析中,可以显示地理空间上的数据分布和密度,帮助用户理解地理区域的特征和差异。
    • 网站流量分析:显示用户在网页上的点击热度和浏览热度。这有助于优化网站布局、改进用户体验和提高转化率。

    3. 不适用的场景

    热力图在以下分析场景中可能不适用:

    • 无序数据:对于无序的数据,热力图可能无法提供有意义的分析结果。
    • 数据缺失:如果数据中存在大量缺失值或空白区域,可能无法准确地反映数据的密度和分布情况。
    • 多个并行路径:通常用于展示单一维度的数据分布情况。如果需要同时比较多个维度或路径的数据,热力图可能不是最合适的选择。

    4. 分析实战

    本次分析今年上半年南京主要的几个区二手房的成交数量情况。

    4.1. 数据来源

    数据来自链家网南京地区的二手房成交的页面。
    整理好的数据可以从下面的地址下载:
    https://databook.top/lianjia/nj

    各个区的二手房交易数据已经整理成csv格式。

    import os
    
    df_dict = {}
    #数据解压的地址
    fp = "d:/share/data/南京二手房交易"
    for f in os.listdir(fp):
        df = pd.read_csv(os.path.join(fp, f))
        df_dict[f] = df
    
    df_dict  #合并所有区的数据
    

    4.2. 数据清理

    清理数据的主要几个步骤:

    1. dealDate列转换为 日期(datetime)格式
    2. 按周统计的交易数量
    3. 统计结果保存到新的字典中(df_stat),取日期最近的10条
    df_stat = {}
    
    for k, df in df_dict.items():
        df["dealDate"] = pd.to_datetime(df["dealDate"])
        # 最近10周的交易量
        week_sum = df.resample("W", on="dealDate").name.count()
        week_sum = week_sum.sort_index(ascending=False)
    
        df_stat[k.replace(".csv", "")] = week_sum.head(10)
    
    df_stat
    

    4.3. 分析结果可视化

    更加各个区的成交数量绘制最近10周的交易热力图。

    x_labels = []
    y_labels = df_stat.keys() # Y周的标签
    data = []
    for _, v in df_stat.items():
        if len(x_labels) == 0: # X轴的日期标签
            x_labels = v.index.strftime("%Y-%m-%d").tolist()
            x_labels.reverse()
    
        v = v.sort_index()
        data.append(v.tolist())
    
    plt.xticks(ticks=np.arange(len(x_labels)), 
               labels=x_labels,
               rotation=45)
    plt.yticks(ticks=np.arange(len(y_labels)), 
               labels=y_labels)
    
    plt.imshow(data, cmap=plt.cm.hot_r)
    plt.colorbar()
    plt.show()
    

    image.png

    从热力图中可以看出,江宁区浦口区的成交数量明显多于其他区,尤其是江宁区
    其次是鼓楼区秦淮区稍好一些(可能和这2个区学区房比较多有关),而溧水区六合区明显交易量不行。

  • 相关阅读:
    《009.SpringBoot之汽车租赁系统》
    持续集成部署-k8s-数据持久化-NFS安装与使用
    C Primer Plus(6) 中文版 第6章 C控制语句:循环 6.13 关键概念 6.14 本章小结
    04_RabbitMQ支持消息的模式
    .NET Core + ELK 搭建可视化日志分析平台(下)
    <Linux>进程地址空间
    基于Java毕业设计法律知识分享平台源码+系统+mysql+lw文档+部署软件
    极客玩物 | 新手小白家用洗衣机选购指南:双十一必备攻略
    PyTorch使用Tricks:学习率衰减 !!
    Vue源码解析-简单实现真实DOM转虚拟DOM,虚拟DOM转真实DOM(二)
  • 原文地址:https://www.cnblogs.com/wang_yb/p/17786291.html