前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python】用pyecharts绘制我国人口分布和迁移地图

【Python】用pyecharts绘制我国人口分布和迁移地图

作者头像
阿黎逸阳
发布2021-03-10 11:19:08
3.8K0
发布2021-03-10 11:19:08
举报
文章被收录于专栏:阿黎逸阳的代码

一直很好奇我国人口分布和迁移情况,所以想用Python分析一下。

由于我国省份较多,把数据放在地图上展示会更加清晰,故本文用Python中的pyecharts库进行人口分布和迁移绘图展示。

pyecharts的地图数据主要来源于两个模块,一是Map,二是Geo。

Map模块主要实现“世界”、“国家”、“省”、“县市”等行政地图的显示,而Geo主要实现热力图等功能地图的显示。

本文致力于让大家学会用Python在地图上进行数据展示。

本文目录

  1. 安装pyecharts库
  2. Geo和Map模块主要函数
  3. 用Geo模块绘制人口分布图 3.1 导入我国各省人口数据 3.2 在地图上展示各省人口数据涟漪图 3.3 在地图上展示各省人口数据热力图
  4. 用Map模块绘制人口分布图
  5. 全国各省人口流入广东动态轨迹图 5.1 导入我国各省人口迁移数据 5.2 绘制人口流入广东动态轨迹图

一、安装pyecharts库

首先在cmd中安装pyecharts库,语句如下:

代码语言:javascript
复制
pip3 install pyecharts

如果安装成功会出现如下结果:

二、Geo和Map模块主要函数

[1] render():通过render函数将制作完成的图表输出为html文件,可在括号中传递输出地址参数,将html文件保存到自定义的位置。

[2] add_schema():控制地图类型,设置背景和边界颜色等。

[3] add():添加图表名称、传入数据、选择图类型等。

[4] set_series_opts():系列配置项,可配置文字样式、标签样式等。

[5] set_gloal_opts():全局配置项,可配置标题、动画、颜色等。

[6] render_notebook():在notebook中显示制作完成的图表。

[7] add_coordinate():新增一个坐标点。

[8] add_coordinate_json():以json形式新增多个坐标点。

[9] get_coordinate():根据地点查询对应坐标。

三、用Geo模块绘制人口分布图

由于各省人口数量不均匀,可在地图上展示各省人口数量,分析我国人口相对较多和较少的省份是哪些。

1 导入我国各省人口数据

首先导入我国各省人口数据,代码如下:

代码语言:javascript
复制
import os
import pandas as pd
#导入库

os.chdir(r'F:\公众号\12.人口数据')
#设置文件数据存放目录
date = pd.read_csv('各省人口数.csv', encoding='GBK')
#导入数据

:数据来源中国统计年鉴,如需本文数据实现该代码,可到年鉴中自行下载,也可在公众号中回复“人口分布”免费获取。

展示前几行数据如下:

2 在地图上展示各省人口数据涟漪图

根据省份和人口数据,设置图表类型为ChartType.EFFECT_SCATTER,生成涟漪图,具体代码如下:

代码语言:javascript
复制
from pyecharts.charts import Map
from pyecharts.charts import Geo
from pyecharts import options as opts
from pyecharts.globals import ChartType
#导入库

geo = Geo()
geo.add_schema(maptype='china', itemstyle_opts=opts.ItemStyleOpts(color='r', border_color='#FFFFFF'))
#设置地图类型,背景和边界颜色
geo.add("geo", date[['省份','人口数(万)']].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(
        is_piecewise=True,
        pieces=[
            {"min":0, "max":1000, "label":"0-1000万", "color":"white"},
            {"min":1001, "max":3000, "label":"1001-3000万", "color":"cyan"},
            {"min":3001, "max":5000, "label":"3001-5000万", "color":"green"},
            {"min":5001, "max":8000, "label":"5001-8000万", "color":"yellow"},
            {"min":8001, "max":12000, "label":"8001-12000万", "color":"blue"}
        ]
    ),
    title_opts=opts.TitleOpts(title="全国各省人口分布"),
)
#全局配置项,设置动画、颜色、标题等
geo.render("各省人口数3.html")
#把制作完成的图表输出为html文件

得到结果:

图一 全国各省人口(万)分布

如果想直接在notbook中展示地图数据,可把geo.render()函数换成geo.render_notebook()即可。

由图一知,如果把中国地图看成一只公鸡,人口相对较多的地方主要集中在鸡胸和鸡肚子区域。

3 在地图上展示各省人口数据热力图

根据省份和人口数据,在地图上展示相应数据,设置图表类型为ChartType.HEATMAP,生成热力图,具体代码如下:

代码语言:javascript
复制
#人口分布热力图
import os
import pandas as pd
from pyecharts.charts import Map
from pyecharts.charts import Geo
from pyecharts import options as opts
from pyecharts.globals import ChartType
#导入库

os.chdir(r'F:\公众号\12.人口数据')
#设置文件数据存放目录
date = pd.read_csv('各省人口数.csv', encoding='GBK')
#导入数据
geo = Geo()
geo.add_schema(maptype='china', itemstyle_opts=opts.ItemStyleOpts(color='r', border_color='#FFFFFF'), label_opts=opts.LabelOpts(is_show=True))
#设置地图类型,背景和边界颜色
geo.add("", date[['省份','人口数(万)']].values.tolist(), type_=ChartType.HEATMAP)
#添加图表类型,传入数据等
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
#系列配置项,忽略标签
geo.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(),
    title_opts=opts.TitleOpts(title="全国各省人口分布热力图",subtitle="数据来源:中国统计年鉴(万人)",pos_right="center",pos_top="5%"),
)
#全局配置项,设置动画、颜色、标题等
geo.render("各省人口数热力图.html")
#把制作完成的图表输出为html文件
#geo.render_notebook()# 显示地图

得到结果:

图二 全国各省人口分布热力图

四、用Map模块绘制人口分布图

用Map模块绘制人口分布图,代码和Geo模块绘图类似,具体代码如下:

代码语言:javascript
复制
#map地图
import os
import pandas as pd
from pyecharts.charts import Map
from pyecharts.charts import Geo
from pyecharts import options as opts
from pyecharts.globals import ChartType

os.chdir(r'F:\公众号\12.人口数据')
date = pd.read_csv('各省人口数.csv', encoding='GBK')
map = Map()
map.add("", date[['省份','人口数(万)']].values.tolist(), "china")
map.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(
        is_piecewise=True,
        pieces=[
            {"min":0, "max":1000, "label":"0-1000万", "color":"white"},
            {"min":1001, "max":3000, "label":"1001-3000万", "color":"cyan"},
            {"min":3001, "max":5000, "label":"3001-5000万", "color":"green"},
            {"min":5001, "max":8000, "label":"5001-8000万", "color":"yellow"},
            {"min":8001, "max":12000, "label":"8001-12000万", "color":"blue"}
        ]
    ),
    title_opts=opts.TitleOpts(title="全国各省人口分布",subtitle="数据来源:中国统计年鉴(万人)",pos_right="center",pos_top="5%"),
)
#全局配置项,设置动画、颜色、标题等
map.render("各省人口数map.html")

得到结果:

图三 全国各省人口分布

五、全国各省人口流入广东动态轨迹图

1 导入我国各省人口迁移数据

首先导入我国各省人口迁移数据,代码如下:

代码语言:javascript
复制
import os
import pandas as pd
#导入库

os.chdir(r'F:\公众号\12.人口数据')
#设置文件数据存放目录
date = pd.read_csv('人口迁移数据.csv', encoding='GBK')
#导入数据

:数据来源中国统计年鉴,如需本文数据实现该代码,可到年鉴中自行下载,也可在公众号中回复“人口分布”免费获取。

展示前几行数据如下:

2 绘制人口流入广东动态轨迹图

由于全国人口迁移数据较多,全部绘制在地图上会比较混乱。所以本文挑选了人口流入广东的数据进行绘图展示,具体代码如下:

代码语言:javascript
复制
#mdate = date[date['count']>100000]
sdate = date[date['to']=='广东']
#挑选人口流入地为广州
CurrentConfig.ONLINE_HOST = 'F:/公众号/12.人口数据/pyecharts-assets-master/assets/'
#设置pyecharts-assets-master下载路径
c = (
    Geo()
    .add_schema(
        maptype="china",
        itemstyle_opts=opts.ItemStyleOpts(color="#323c48", border_color="white"),
        label_opts=opts.LabelOpts(is_show=True)
    )
    #设置地图类型,背景和边界颜色
    .add(
        "",
        sdate[['from','count']].values.tolist(),
        type_=ChartType.EFFECT_SCATTER,
        color="white",
    )
    #添加图表类型,点的颜色等
    .add(
        "",
        sdate[['from','to']].values.tolist(),
        type_=ChartType.LINES,
        effect_opts=opts.EffectOpts(
            symbol=SymbolType.ARROW, symbol_size=6, color="white"  
        ),
        linestyle_opts=opts.LineStyleOpts(curve=0.2),  # 轨迹线弯曲度
    )
    #添加图表类型,符号类型、大小、颜色等
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    #系列配置项,忽略标签
    .set_global_opts(
         visualmap_opts=opts.VisualMapOpts(
        is_piecewise=True,
        pieces=[
            {"min":0, "max":1000, "label":"0-1000", "color":"white"},
            {"min":1001, "max":5000, "label":"1001-5000", "color":"cyan"},
            {"min":5001, "max":10000, "label":"5001-10000", "color":"green"},
            {"min":10001, "max":50000, "label":"10001-50000", "color":"yellow"},
            {"min":50001, "max":100000, "label":"50001-100000", "color":"blue"},
            {"min":100001, "max":500000, "label":"100001-5000000", "color":"blue"}         
        ]
    ),
    title_opts=opts.TitleOpts(title="流入广东人口分布",pos_right="center",pos_top="5%")
    )
    #全局配置项,设置动画、颜色、标题等
    .render("流入广东人口分布.html")
    #把制作完成的图表输出为html文件
)

得到结果:

图四 流入广东人口分布

由图四知,流入广东人口最多的省份是广西、湖南、四川,流入人口相对较多的省份和地理位置也有一定的关系。

至此,在Python中用Geo和Map模块绘图已全部讲解完毕,感兴趣的同学可以自己实现一遍

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿黎逸阳的代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档