Python 数据可视化:地理信息可视化及扩展应用

2020-12-05  本文已影响0人  you的日常

在上一课中,我们已经介绍过使用 Plotly 实现地理信息可视化的方法。但是,那个工具对我们不是很友好,特别是由于某种不可抗力的存在,可能根本无法调试。

不过,pyecharts 的确在地理信息可视化上做得不错——如果仅做国内地图,特别推荐使用,还是通过示例来说明吧。

首先,要安装地图文件,安装方法如下:

$ pip install echarts-countries-pypkg         # 全球国家地图
$ pip install echarts-china-provinces-pypkg   # 中国省级地图
$ pip install echarts-china-cities-pypkg      # 中国市级地图
$ pip install echarts-china-counties-pypkg    # 中国县区地图
$ pip install echarts-china-misc-pypkg        # 中国区域地图

不仅可以安装上述官方提供的地图文件,还能够自己制作个性化的地图扩展,具体请点击这里参阅

注意:上述文件安装完毕,要重新启动 jupyter notebook。

5.2.1 地图上的散点图

有了上述基础,就可以进行地理信息可视化了(以下示例的数据源,请点击这里查看)。

import pandas as pd
from pyecharts import Geo

df = pd.read_csv("/Users/qiwsir/Documents/Codes/DataSet/pm25/pm2.csv")
city = df['CITY_NAME']
value = df['Exposed days']

geo = Geo("主要城市空气质量", "pm2.5", title_color = "#666666", title_pos = "center", 
          width=800, height=600, background_color = "#404a59")
geo.add("PM2.5", city, value, visual_range=[0, 300], visual_text_color='#fff', symbol_size=16, is_visualmap=True)
geo

image

实现上述效果的类是 Geo,默认情况下绘制散点图,此外可以实现 type='effectScatter'(闪耀的散点图)和 type='heatmap'(热图)。

此图也是动态交互的,通过左侧图例选择不同数值范围,相应地会显示该范围内的数据。

如果按照前面所述安装了各种地图文件,还可以在 geo.add 方法中规定地理范围。

df.sample(3)

RANK CITY_ID CITY_NAME Exposed days
115 127 97 阜新 91
40 45 88 丹东 49
71 79 55 吕梁 69

在 pyecharts 地图中认可的城市名称都如同上述结果显示的那样,例如“阜新”,不要写成“阜新市”。

js = pd.read_csv("/Users/qiwsir/Documents/Codes/DataSet/jiangsu/city_population.csv")
js_cities = [name[:-1] for name in js.name]
js_cities

# out
['南京', '无锡', '徐州', '常州', '苏州', '南通', '连云港', '淮安', '盐城', '扬州', '镇江', '泰州', '宿迁']

下面就绘制江苏省的空气质量分布图。

jspm = df[df['CITY_NAME'].isin(js_cities)]

geo = Geo(
    "江苏城市空气质量",
    "",
    title_color="#202020",
    title_pos="center",
    width=800,
    height=600,
    background_color="#666666",
)

geo.add(
    "",
    jspm['CITY_NAME'],
    jspm['Exposed days'],
    maptype="江苏",
    type="effectScatter",
    is_random=True,
    effect_scale=5,
    is_legend_show=False,
)
geo

输出结果:

image

这里的 geo.add 参数与前面的不同,导致了展示效果的差异。

5.2.2 地图上的热图

一直以来,房价都是人们关注的话题,下面就用可视化的方式研究一下近十年(2009—2018 年)全国部分城市平均房价(数据源:https://github.com/qiwsir/DataSet/tree/master/house)。

hp = pd.read_csv("/Users/qiwsir/Documents/Codes/DataSet/house/houseprice.csv")
hp['mean'] = hp.mean(axis=1)
hp.drop(index=46, inplace=True)    # 有城市在默认安装的地图文件中没有,将其删除
geo = Geo("主要城市房产均价", "", title_color='#111111', width=800, height=600)
geo.add('PRICE', hp['city_name'], hp['mean'], 
        visual_range=[2000, 40000], symbol_size=20, 
        is_visualmap=True, type="heatmap")
geo

输出结果:

image

在热图查看房价的基础上,为了更准确查看某些城市的房价走向,可以使用折线图看看趋势,例如下列几个城市。

some_cities = hp[hp['city_name'].isin(['上海', '苏州', "北京", "南京", '杭州', '广州'])]

from pyecharts import Line
years = ['2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018']
line = Line('选择几个城市的房价', width=800, height=600)
for city in some_cities['city_name']:
    line.add(city, years, some_cities[some_cities['city_name']==city][years].values[0])
line

image
上一篇下一篇

猜你喜欢

热点阅读