全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1919 2
2020-10-13
热图通常用于可视化事件的发生或密度。有一些Python库或GIS软件/工具可用于创建热图,例如QGIS,ArcGIS,Google Table Fusion等。不幸的是,本文不会讨论如何使用这些软件/工具创建热图,但更多内容除此之外,我们将编写自己的代码以使用Python公共库从头开始在Python 3中创建热图。

将在Python中创建热图的算法是内核密度估计(KDE)。

导入库实际上,Python中有一些库可用于创建热图,例如Scikit-learn或Seaborn。但是我们将只使用一些库,例如matplotlib,numpy和math。因此,我们从导入这三个库开始。
复制代码
要创建热图,我们需要一个包含x,y坐标的点数据集。在这里,我们为x和y创建两个列表。数据集图可参见图1。

复制代码
50CE3040-BA60-4340-9785-27779AF98343.png

网格大小和半径
使用KDE创建热图时,我们需要指定内核形状的带​​宽或半径以及输出网格的大小。对于这种情况,我使用半径10 m和栅格大小1 m。稍后,您可以更改这些参数以查看它们如何影响热图结果。
复制代码
获取X,Y最小值/最大值以构建网格
要构建网格,我们使用网格。因此,我们需要找到x,y的最小值和最大值以生成x和y的序列号。然后,这些序列号将用于构建网格。为了包括所有具有更大空间的数据集覆盖范围,我用半径减去x,y最小值,然后将其相加为x,y最大值。

复制代码
计算网格中心点
构造完网格后。接下来,我们计算每个网格的中心点。这可以通过将x网格和y网格坐标与网格大小的一半相加来完成。稍后将使用中心点来计算每个网格到数据集点的距离。

复制代码
核密度估计函数
为了计算点密度或强度,我们使用了一个称为kde_quartic的函数。我们正在使用四次核形状,这就是为什么它在函数名称中使用“四次”项的原因。此函数有两个参数:点距离(d)和核半径(h)。

复制代码
计算每个网格的密度值
这是这篇文章中最难的部分。计算每个网格的密度值。我们通过三个循环来执行此操作。第一个循环用于网格数据列表或网格。这些网格的每个中心点的第二个循环,以及计算中心点到每个数据集点的距离的第三个循环。使用距离,然后使用之前已定义的kde_quartic函数计算每个网格的密度值。它将返回到数据点每个距离的密度值。在这里,我们仅考虑在内核半径内具有一定距离的点。我们不考虑核半径之外的点,而是将密度值设置为0。然后,我们将网格的所有密度值求和,以获得各个网格的总密度值。然后,将总密度值存储在一个列表中,该列表为称为强度列表。

intensity_list=[]
for j in range(len(xc)):
    intensity_row=[]
    for k in range(len(xc[0])):
        kde_value_list=[]
        for i in range(len(x)):
            #CALCULATE DISTANCE
            d=math.sqrt((xc[j][k]-x)**2+(yc[j][k]-y)**2)
            if d<=h:
                p=kde_quartic(d,h)
            else:
                p=0
            kde_value_list.append(p)
        #总和所有强度值
        p_total=sum(kde_value_list)
        intensity_row.append(p_total)
    intensity_list.append(intensity_row)

最后一部分,我们使用matplotlib彩色网格可视化结果。我们还添加了一个颜色条以查看强度值。热图结果如图2所示。
复制代码

4F02D4B5-137F-454b-A674-83939F2FA6BC.png





完整的代码段可以在下面找到。
复制代码


这就是使用KDE从头开始在Python中创建热图的所有方法。还有其他可用的内核形状,例如高斯,三重,Epanechnikov,三角等。请随意添加这些内核形状并修改代码。尝试通过更改一些参数(例如半径和栅格大小)进行实验,并探索结果。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-10-13 15:56:25
感谢分享。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-11-16 15:04:00
棒    
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群