美文网首页
Python 数据可视化:地理信息可视化及扩展应用

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

作者: you的日常 | 来源:发表于2020-12-05 16:06 被阅读0次

    在上一课中,我们已经介绍过使用 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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/mylebktx.html