简介
? 概况
Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。
✨ 特性
简洁的 API 设计,使用如丝滑般流畅,支持链式调用
囊括了 30+ 种常见图表,应有尽有
支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
可轻松集成至 Flask,Django 等主流 Web 框架
高度灵活的配置项,可轻松搭配出精美的图表
详细的文档和示例,帮助开发者更快的上手项目
多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持
今天一起学习用pyecharts的Geo模块画热力图
首先我们要先安装今天用到必要的地图库:
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 #中国大区地图
安装完后就可以开始绘图了。
这里我们要导入numpy,pandas包对数据进行预处理,为了从mysql数据库获取数据还需导入pymsql包,最后就是今天的主角pyecharts的Geo了。
接下来就是对数据预处理的步骤了,首先从数据库中导入数据(数据来源拉勾网的python职位信息),再把data中‘address’属性的值提取出来存入data1中,然后使用numpy的array函数把data1转化为数组形式存入data2中,接下来用tolist函数把data2转化为python的列表形式存入data3中,这时我们就可以把data3用set函数转变成集 了。至此,数据预处理第一步完成了。
import pandas as pdaimport numpy as npimport pymysqlfrom pyecharts import Geoconn = pymysql.connect(host = '127.0.0.1',user = 'root',passwd = 'root',db = 'lagou')sql = 'select * from lagou'data = pda.read_sql(sql,conn)data1 = data["address"]data2 = np.array(data1) #数组data3 = data2.tolist() #列表set=set(data3) #集
结果如下:
{'包头', '郑州', '西安', '南昌', '清远', '杭州', '大连', '阳江', '深圳', '贵阳', '烟台', '厦门', '太原', '广州', '东莞', '莆田', '泰安', '泉州', '哈尔滨', '重庆', '北京', '合肥', '深圳', '长春', '青岛', '宁波', '武汉', '北京', '宿州', '长沙', '济南', '上海', '东营', '佛山', '南京', '湖州', '福州', '无锡', '珠海', '淄博', '昆明', '天津', '临沂', '苏州', '成都', '惠州', '石家庄', '南宁', '唐山'}
第二步,这时我们就可以把第一步获得的集用来计数了。通过遍历set来获得计数后的字典:
dict={}for item in set: dict.update({item:data3.count(item)})
结果如下:
{ '贵阳': 3, '宁波': 1, '长沙': 21, '湖州': 3, '临沂': 2, '唐山': 2, '青岛': 7, '太原': 3, '大连': 2, '南宁': 6, '泉州': 1, '烟台': 3, '东莞': 7, '昆明': 7, '福州': 6, '阳江': 1, '泰安': 1, '包头': 1, '南京': 34, '合肥': 7, '上海': 253, '西安': 38, '郑州': 10, '长春': 1, '重庆': 5, '杭州': 89, '哈尔滨': 1, '深圳': 223, '天津': 9, '石家庄': 4, '东营': 1, '无锡': 5, '淄博': 1, '成都': 57, '佛山': 3, '苏州': 20, '南昌': 4, '清远': 1, '厦门': 9, '珠海': 5, '广州': 78, '武汉': 44, '莆田': 1, '宿州': 1, '济南': 11, '惠州': 1, '北京': 421}
获得字典后就可以开始绘图了。
从字典中获取两个属性:
keys = list(dict.keys())values = list(dict.values())
keys是城市名,values是数量。
开始绘图。
geo = Geo("国内计算机语言人才需求热力图", "python", title_color="#fff", title_pos="center", width=2000, height=1000,background_color='#212121') # 背景geo.add("计算机人才需求热力图", keys, values, visual_range=[0, 5], type='effectScatter', visual_text_color="#fff", symbol_size=15,is_visualmap=True, is_roam=True) # type有scatter, effectScatter, heatmap三种模式可选,可根据自己的需求选择对应的图表模式geo.render(path="国内python计算机语言人才需求热力图.html")
这里的"国内计算机语言人才需求热力图"是主标题文本,支持换行;"python"是副标题文本,支持换行;width画布宽度,默认为 800(px);height:画布高度,默认为 400(px);title_pos标题距离左侧距离,默认为’left’,有’auto’, ‘left’, ‘right’,‘center’可选,也可为百分比或整数;title_color主标题文本颜色,默认为 ‘#000’;background_color画布背景颜色,默认为 ‘#fff’。
在add函数中,visual_range表示图例条范围;type表示图类型,默认"scatter";visual_text_color表示图例条颜色;symbol_size表示标记的大小,默认12;is_visualmap表示显示图例条,默认True.
完整代码:
import pandas as pdaimport numpy as npimport pymysqlfrom pyecharts import Geoconn = pymysql.connect(host = '127.0.0.1',user = 'root',passwd = 'root',db = 'lagou')sql = 'select * from lagou'data = pda.read_sql(sql,conn)data1 = data["address"]data2 = np.array(data1) #数组data3 = data2.tolist() #列表set=set(data3) #集dict={}for item in set: dict.update({item:data3.count(item)})keys = list(dict.keys())values = list(dict.values())geo = Geo("国内计算机语言人才需求热力图", "python", title_color="#fff", title_pos="center", width=2000, height=1000,background_color='#212121') # 背景geo.add("计算机人才需求热力图", keys, values, visual_range=[0, 5], type='effectScatter', visual_text_color="#fff", symbol_size=15,is_visualmap=True, is_roam=True) # type有scatter, effectScatter, heatmap三种模式可选,可根据自己的需求选择对应的图表模式geo.render(path="国内python计算机语言人才需求热力图.html")
最终效果:
END