本案例可以直观地看出,我国人口在各省之间的流动特点,并据此了解各省之间的相关性。
一、数据源简介本次学习使用的数据为1985至1990年(好久远呀)的人口迁移数据。数据样式如下:
 
其中from 为流出省份,to为流入省份,count为人口数量。
二、数据展示1、展示流出流入数据方向在实际研究中,我们为了观察主要特征,往往采取抓大放小的措施。在这里也是一样,对于count较小的数据,不作为我们本次的研究对象。此次查看的数据为迁移次数大于80000的记录,所以导入方式如下:
【脚本】
data = pd.read_csv(r'D:\population.csv', encoding='GBK')
# 将大于8万的数据转成list以备地图上展示
result = data[data['count']>80000][['from', 'to']].values.tolist()
geo = Geo()
geo.add_schema(maptype='china')
# 将result数据显示在地图上,并确定了线型为曲线
geo.add('1985~1990人口迁移图', result,
        type_=ChartType.LINES,
        linestyle_opts=opts.LineStyleOpts(curve=0.2))
# 不显示标签
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.render()
【结果】
 
2、展示流入人口总量【脚本】
# 以流入省分组汇总流入人口量
result2 = data[['count']].groupby(data['to']).sum()
result2 = result2.reset_index()
result2 = result2.values.tolist()
# 以热点图的方式将数据载入地图
geo.add('', result2, type_=ChartType.HEATMAP)
geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=1300000))
【结果】
 
【特别说明】
数据在按流入城市groupby后,索引即变为“to”列了,但索引是不能通过values.tolist()方式转为二维列表的,为此,需要增加一个reset_index()将索引列转为普通数值列。
3、使用网络图揭秘不同省份之间的关系网络图有两个关键元素,一个是“节点”,一个是“边”。
其中“边”需要是字典格式,分别给出边的起点和终点,形如:
[{'source': '天津', 'target': '北京'},{'source': '河北', 'target': '北京'}……

“节点”也字典格式,分别给出节点的名称和大小,形如:
[{'count': 665526, 'name': '上海'}, {'count': 250264, 'name': '云南'}……
【脚本】
# 整理边的格式
data = data[data['count'] > 50000]
links = data[['from', 'to']].rename(columns={'from':'source', 'to':'target'}).to_dict(orient='records')
# 整理节点的格式
result3 = data[['count']].groupby(data['to']).sum()
result3['name'= result3.index
result3 = result3.rename(columns={'count':'size'})
nodes = result3.to_dict(orient='records')
# 画图
graph = Graph()
graph.add('',nodes, links)
graph.render()【结果】
 
三、总结本节学习了Geo()的线条设置,并学习了网络图的绘制。此外,还学习了DataFrame转为list和dict数据类型的方法。