当你拥有地域相关数据时,首先想到的制作工具是什么呢?Echarts、basemap(后期更新)、pyecharts、matplotlib、seaborn等等?不过今天我们先以pyecharts实现。
1.pyecharts 介绍
pyecharts用于生成Echarts图标的类库,Echarts是百度开源的一个数据可视化JS库
pyecharts 相关基础可参考 用python做数据可视化之pyecharts基础
pyecharts 官方文档可参考 pyecharts中文文档
2.地图底图下载
自从 v0.3.2 开始,为了缩减项目本身的体积以及维持 pyecharts 项目的轻量化运行,pyecharts 将不再自带地图 js 文件。如用户需要用到地图图表,可自行安装对应的地图文件包。下面介绍如何安装。
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
- 全球国家地图: echarts-countries-pypkg (1.9MB): 世界地图和 213 个国家,包括中国地图-
- 中国省级地图: echarts-china-provinces-pypkg (730KB):23 个省,5 个自治区
- 中国市级地图: echarts-china-cities-pypkg (3.8MB):370 个中国城市
- 中国县区级地图: echarts-china-counties-pypkg (4.1MB):2882 个中国县·区
- 中国区域地图: echarts-china-misc-pypkg (148KB):11 个中国区域地图,比如华南、华北。
3. pandas 相关知识点概述
- merge默认按相同字段合并,且取两个都有的。
import pandas as pd df1=pd.DataFrame({'name':['kate','herz','catherine','sally'], 'age':[25,28,39,35]}) df2=pd.DataFrame({'name':['kate','herz','sally'], 'score':[70,60,90]}) # 1.merge默认按相同字段合并,且取两个都有的。 pd.merge(df1,df2) # 2. 当左右连接字段不相同时,使用left_on,right_on pd.merge(df1,df2,left_on="name",right_on='call_name') # 3. 合并后,删除重复的列 pd.merge(df1,df2,left_on='name',right_on='call_name').drop('name',axis=1) # 4.参数how的使用 1).默认:inner 内连接,取交集 2).outer 外连接,取并集,并用nan填充” pd.merge(df1,df2,on='name',how='inner') df3=pd.DataFrame({'name':['kate','herz','sally','cristin'], 'score':[70,60,90,30]}) pd.merge(df1,df3,on='name',how='outer')
- set_index 可以设置单索引和复合索引。
DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False) # append添加新索引,drop为False,inplace为True时,索引将会还原为列
- reset_index可以还原索引,从新变为默认的整型索引
DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=”) # level控制了具体要还原的那个等级的索引 # drop为False则索引列会被还原为普通列,否则会丢失
- loc、iloc、ix 区别
# 如果你知道column names 和index,且两者都很好输入,可以选择 .loc df.loc[0, 'a'] df.loc[0:3, ['a', 'b']] df.loc[[1, 5], ['b', 'c']] # iloc 使得我们可以对column使用slice(切片)的方法对数据进行选取。 df.iloc[1,1] df.iloc[0:3, [0,1]] df.iloc[[0, 3, 5], 0:2] # ix 的功能就更强大了,它允许我们混合使用下标和名称进行选取
4.数据处理
- 整理全国部分城市2009-2018年平均房价数据anjuekefangjia.csv
5.实例展示
数据文件读取
df = pd.read_csv(csv文件)
local = df.set_value(index)
- 1.全国部分城市2009-2018平均房价极坐标图
from pyecharts import Polar radius = [u"2009年", u"2010年", u"2011年", u"2012年", u"2013年",u"2014年",u"2015年",u"2016年",u"2017年",u"2018年"] # polar = Polar(u"2009-2018部分城市房价变化趋势", width=1200, height=1100) polar = Polar( width=1200, height=1100) for name in df.city_name: if len(local.ix[name][2:])<5: continue polar.add(name, local.ix[name][2:], radius_data=radius, type='barRadius', is_stack=True) polar.render()
-
效果展示
-
- 全国部分城市2018年平均房价热力图
from pyecharts import Map map = Map("", width=1200, height=600) map.add("2018年全国主要城市房价均值", df.province, df.price, maptype='china',visual_text_color='#000',is_visualmap=True, is_label_show=True) map.render()
-
效果展示
- 3.全国部分城市2009-2018房价均值趋势折线图
from pyecharts import Line attr = [u"2009年", u"2010年", u"2011年", u"2012年",u"2013年", u"2014年",u"2015年",u"2016年",u"2017年",u"2018年"] line = Line(u"全国部分城市房价变化趋势",height=1000,width = 1200) for name in df.city_name: if len(local.ix[name][2:]) < 10: continue line.add(name, attr,local.ix[name][2:], mark_point=["max", "min"], mark_line=["average"], yaxis_formatter="元/m²") line.render()
-
效果展示