Python大数据分析7:案例-看看我国各省的GDP

地图绘制也是一种有效的可视化方法,它可以直观的将数据内容通过文本和颜色等不同方式展示在地图上,形成一种有效的呈现方式。

Python地图有很多库可以使用,我们这次使用的是著名的pyecharts,它可以更方便的实现地图的绘制。

为此,我们首先还是需要在设置上导入pyecharts库,具体过程同前面所述一致。

我们先绘制一个简单的地图看看。

from pyecharts.charts import Geo

geo = Geo()

geo.add_schema(maptype=”china”)

geo.render()

首先导入Geo类型,这个类型就是绘制地图的关键类型。创建它的变量后,调用add_schema方法指定地图类型为中国,即可render绘制。

此时会在当前项目中生成一个render.html文件,可以右击选择“在浏览器打开”,选择合适的浏览器即可看到结果。

之所以在浏览器才能查看结果,是因为这个是利用网页方式提供绘图功能。

这个地图已经可以显示动态效果,比如停留某个身份可以变亮,

滚动鼠标滑轮还能缩放地图。

好了,我们接下来准备数据。关于各省的GDP数据,可以考虑使用中国国家统计局的官方数据。在地区数据中,可以选择分省年度数据。

在地区数据中,可以选择全部地区。

此时登录即可免费下载,可以选择CSV格式。

下载数据的格式比较多,因此建议大家首先先简单处理下,将无关的一些格式信息去除。比如这里的头三行,

还有最后几行,都可以删除,形成标准的二维数据表格。

我们首先还是利用DataFrame读取下数据。

# coding:utf-8

import pandas as pd

frame = pd.read_csv(‘C:\\temp\\分省年度数据.csv’, encoding=’GBK’)

print(frame)

这里显示的是10年的数据。

我们读取其中最近一年2019年的数据,这里要注意一个问题,那就是pyecharts绘制地图需要一个二维列表结构的数据,因此我们需要读取地区和年份后,通过tolist方法转换为对应的格式:

print(frame[[‘地区’, ‘2019年’]].values.tolist())

现在就可以将其绘制在地图上:

# coding:utf-8
import pandas as pd
from pyecharts.charts import Geo

frame = pd.read_csv('C:\\temp\\分省年度数据.csv', encoding='GBK')
geo = Geo()
geo.add_schema(maptype="china")
geo.add("", frame[['地区', '2019年']].values.tolist())
geo.render()

这里的add函数就是增加数据,第一个参数表示图表名称,我们留空,第二个就是数据内容。这其实是把刚才的两段内容结合在了一起,但是报错了。什么错误呢?其实很简单,地区名称对应不上,原因在于pyecharts中对部分省份的标注与国家统计局不一致,比如“广西壮族自治区”应该改为“广西省”等等。

这里其实只需修改三个省份数据即可。大家可以自行根据错误提示进行修改,这也说明数据分析之前数据整理是非常必要的环节。

再次运行下,就可以在生成的网页中看到结果,

也可以刷新下这个网页来看。中心点大约是省会的位置。

这个网页具有较强的交互性,移动和悬浮鼠标都可以看到不同的变化。

默认情况下,地图上显示的数据内容过多。我们可以酌情去除。

from pyecharts import options as opts

geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

geo.render()

这个设置就是表示将当前标签上的数据内容不予显示。这里不要忘记导入options类型,在pyecharts中,图表的一切皆通过options来修饰调整。

但是这时无法看出这些不同数据的直观特点,因此我们可以通过添加颜色来标注数据的大小:

geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=110000))

geo.render()

这里面的max_参数就表示最大值。

由于这些数据分布并不平均,甚至可以自己来定义不同的颜色区间:

geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(
    is_piecewise=True,
    pieces=[
        {"min": 0, "max": 10000, "label": "1", "color": "blue"},
        {"min": 10001, "max": 20000, "label": "2", "color": "cyan"},
        {"min": 20001, "max": 50000, "label": "5", "color": "green"},
        {"min": 50001, "max": 80000, "label": "8", "color": "yellow"},
        {"min": 80001, "max": 100000, "label": "10", "color": "orange"},
        {"min": 100001, "max": 200000, "label": "20", "color": "red"}
    ]
))
geo.render()

这里看起来复杂,其实很简单,就是设定了is_piecewise属性表述分段,同时通过pieces属性后面的字典数据给出了每个段的上下限、标签和颜色。

显然这样更为灵活和定制化。

默认的外观比较简单,我们可以来看下。

比如对于点的形状,就可以通过设置来改变:

geo.add(“”, frame[[‘地区’, ‘2019年’]].values.tolist(), type_=ChartType.EFFECT_SCATTER)

geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=110000))

geo.render()

这里的add函数增加了type说明。

这个点会自动呈现变化的动态效果。

甚至可以在add函数中增加颜色样式,设置地图的色彩:

geo.add_schema(maptype=”china”, itemstyle_opts=opts.ItemStyleOpts(color=”#DD0000″, border_color=”#FFFFFF”))

这里面color表示地图背景色,而border_color表示边的颜色。

效果呈现出火热的中国红。大家可能会注意到这里的颜色很奇怪,这其实是计算机表示颜色的一种简单有效方法,

里面有三个部分,每个部分最小为00,最大为FF,这是十六进制的最大值,分别对应红绿蓝,所以边框三色全满,就是白色,而地图背景色绿蓝皆为无,红色淡了一些,形成略浅一些的中国红。大家可以自己大胆的调配看看效果。

也可以使用Map来填充

# coding:utf-8
import pandas as pd
from pyecharts.charts import Map
from pyecharts import options as opts

frame = pd.read_csv('C:\\temp\\分省年度数据2.csv', encoding='GBK')
map = Map()
map.add("", frame[['地区', '2019年']].values.tolist(), "china")
map.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=110000))
map.render()

这里使用了Map类型,基本用法差不多,主要区别在于add中第三个参数指定地图位置。

该类型使用颜色填充的方式,而不是点的方式,来显示不同数据的情况。

这里要注意一个细节,就是数据需要整理下,Map使用的中国各省份和Geo不一样,需要将全部的省、市、自治区等去掉。于是这里我们保存为“分省年度数据2.csv”文件。

发表评论

邮箱地址不会被公开。 必填项已用*标注