作为数据科学的新手,刚刚开始了解我可以用大量数据和一些编程来做些什么的可能性,有些部分非常令人满意,有些部分让我感到有点头晕目眩。

有很多次我开始着手解决某事,尝试某事,或写某事却被卡住了。可怕地,千丝万缕,我什至不知道从哪里开始卡住的水平。这是不可避免的,当我发现自己处于这些情况时,我正在建立一个可靠的资源工具箱。

乌龟无助地旋转Gif,图片来源:Giphy

但它的另一面非常棒。任何时候我开始做某事并且它确实做到了我的意图,这是非常有益的。即使它是基本的东西,我也喜欢推动障碍并找到我创建的解决方案 - 这是我将自己定位为进入数据科学和技术职业的一个重要原因。

所以!当我想为一个项目绘制一个数据集,对我所知道的工具的笨拙感到沮丧,自学如何使用新的地图库,并制作了一张准确表达我想要的精美地图时,我非常高兴和我自己。请允许我与其他 python 初学者分享 Folium,因为它是一种使用映射技术的宽容且易于访问的方式。它看起来也很漂亮,默认情况下是交互式的,让我觉得我毫不费力地提升了我的数据可视化水平。


开始之前

Folium确实有一些警告。我正在使用的数据集是一个提供西雅图附近金县出售房屋的数据。该数据集已经有纬度和经度列,这使得该数据的映射方面非常自然。从我从Folium 文档收集的所有内容中,您需要经纬度对才能使用他们的地图,因此其他位置数据将在一开始就提出数据清理挑战。

此外,Folium 只能在一定程度上运行良好 - 在我的系统上,它不会处理和映射我试图通过它的所有 21,000 行 pandas 数据帧(公平)。在玩弄它之后,大约 1000 行似乎是我的最佳选择,而且如果有的话,再多的也不会那么好用。在我的数据集中,我专注于 1000 个最昂贵的房屋,以此来缩小我的数据子集(并作为我正在从事的项目的一部分回答其他问题),所以我将展示那个子集。

因此,通过使用可访问的位置数据定位较小的数据集,为 Folium 的成功做好准备,然后进入那里玩耍!

在此处跟随我的代码:https://github.com/lindseyberlin/Blog_FoliumMaps


一切都在哪里?

也许那里有神奇的人,他们可以看一对经/长对并确切地知道它在哪里,或者看两对并知道它们之间的关系,但我不是这样的人。当我处理这些数据时,我有一些初步的问题。所有这些房子都在同一个街区吗?他们真的分散了吗?有没有明显的集群?只有一种方法可以找出答案——让那些经纬对对我有用!

[比较图 - matplotlib 的底图与 Folium](https://res.cloudinary.com/practicaldev/image/fetch/s--nQT7YVUY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:// /thepracticaldev.s3.amazonaws.com/i/dbx9c4ce1smogk42qd2o.jpeg)

我创建的介绍性 Folium 地图在地图背景上提供了一个散点图。代码中最复杂的部分是 for 循环,它将每一行映射为地图上自己的点。第二个最困难的部分是在我的数据集上使用平均函数来获得纬度和经度列的平均值,我将地图集中在其中。

这个基本配置回答了上述问题——我可以清楚地看到每栋房子的销售地点,以及每栋房子的间距。万岁!但我最初的成功让我想知道我还能用 Folium 做什么,所以我更深入了一点。


添加意义层

从基本地图开始,我采取了三个额外的步骤来使我的地图更加复杂,并确保它传达的意义不仅仅是我数据集中的房屋位置。

笔记!这些只是屏幕截图——我在 python 中创建的实际地图是交互式的。查看我在上面链接的github repo以了解我的意思。

[第一层:Folium map with pop-up text](https://res.cloudinary.com/practicaldev/image/fetch/s--HOrycbRA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/ https://thepracticaldev.s3.amazonaws.com/i/vhpim8869mdc9ec4txhw.jpeg)

首先,我添加了弹出文本,其中显示了房子的确切纬度和经度以及它的销售价格。添加弹出文本有点复杂,但仍然很简单 - 我在 for 循环中添加了代码,因此它将创建特定于每行数据的弹出文本。我使用 .format 对文本进行了格式化,但也可以使用 f 字符串。现在我的地图提供了更多细节!

[第二层:圆的半径大小反映价格的Folium map](https://res.cloudinary.com/practicaldev/image/fetch/s--EUNgOCnw--/c_limit%2Cf_auto%2Cfl_progressive% 2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/d643kihmgzir8go0k48l.jpeg)

接下来,我更改了每个点的大小,以对应每个房屋的售价。这涉及根据该行的价格更改每个点的半径。十分简单!

[第三层:具有反映价格桶的圆形颜色的叶图](https://res.cloudinary.com/practicaldev/image/fetch/s--fTM-U4LJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto %2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ciy9v7knghos9vp0hu2w.jpeg)

最后,我更改了每个点的颜色以对应不同的价格桶,以便最昂贵的房屋显示为明亮、令人讨厌的粉红色,而最便宜的房屋(在原始数据集中的 1000 个最昂贵的房屋中)是温柔的绿色。这涉及基于仍然在 for 循环中的那些成本桶集成 if/elif/else 语句,以更改每个点的颜色。到目前为止,它比其他任何东西都要复杂一些,但仍然很简单。


其他选项

[支线任务:反映家庭集中度的叶热图](https://res.cloudinary.com/practicaldev/image/fetch/s--gpS9ZuX3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880 /https://thepracticaldev.s3.amazonaws.com/i/mkv9jyc6jqqdcifvswzd.jpeg)

检查此类数据的另一种简单方法是添加热图,而不是在地图中添加点。这以不同的方式传达数据的集中度,如果您想探索集中度而不是数据集中每一行的详细信息,这很有用。

有几十种其他方式您可以在 Folium 中映射事物,并且可能有更好的方式可以回答我最初提出的问题。玩它,看看你发现了什么!如果您有任何有用的 Folium 提示或技巧,或者最好用地图回答的问题,请分享!


实用教程:

用于地图、热图和时间分析的 Folium

使用 Folium 创建交互式犯罪地图

Cover 图像来自使用 Folium的 Python 空间可视化和分析。来自GIPHY的旋转龟 GIF。所有其他图像都是我使用 Folium 创建的屏幕截图 - 请参阅我的 GitHub 存储库此处
Logo

华为、百度、京东云现已入驻,来创建你的专属开发者社区吧!

更多推荐