Python高考报考迁移图,各省考生“最想去哪”

Stella981
• 阅读 468

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:小dull鸟

2020年高考已经落下帷幕,各地高考成绩近期陆续出来了,各大网站也都被各类高考信息刷屏,小编凑巧发现百度推出了“高考搜索大数据”网页,吸引了上亿人次浏览。

Python高考报考迁移图,各省考生“最想去哪”

其中有一个高考报考迁移图很有意思,如下图所示:

Python高考报考迁移图,各省考生“最想去哪”

第一步:整理数据

通过浏览器自带抓包工具得到数据接口:

https://voice.baidu.com/api/commonkvapi?aid=gaokao&data={"migration.list":{"descId":6}}&=

返回的为json格式数据

Python高考报考迁移图,各省考生“最想去哪”

Python高考报考迁移图,各省考生“最想去哪”

接下来我们需要用python模拟爬取数据,原数据如上图,最后要把数据整理成字典格式,字典的键为省份,字典的值为该省考生最想去的前十个省份,格式如下:

{'青海': ['青海', '北京', '陕西', '江苏', '四川', '湖北', '上海', '甘肃', '山东', '重庆']}

实现这一过程的python代码如下:

import requestsimport jsonurl='https://voice.baidu.com/api/commonkvapi?aid=gaokao&data={"migration.list":{"descId":6}}&='header = { 'User-Agent': 'Mozilla/5.0(Windows NT 6.1; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0'}response = requests.get(url, headers=header)results=json.loads(response.text)['data']['migration.list']dict={}for i in results: top_10=[] province=i['province'] for m in i['list'][2]['list'][:10]: top_10.append(m['name']) dict[province]=top_10print(dict)

第二步:用pyecharts画出迁徙图

本次用的是0.5.11版本的pyecharts

画迁徙图的公式为:

from pyecharts import GeoLines, Stylestyle = Style()geo_style = style.add()citylines = GeoLines("2020年全国高考报考迁徙图", **style.init_style)citylines.add("迁徙图",[('北京','海南'),('北京','黑龙江'),('北京','西藏')],**geo_style)citylines.render()

把上面这段代码记住,以后需要画迁徙图直接往里面套就行了,下面给大家详细介绍一下参数作用:

1.style是图表初始化配置,例如图像大小、背景颜色、标题位置等;

2.style的add参数介绍:

is stack:是否堆积is convert:x,y轴是否交换is_legend_show:是否显示图例legend_orient:图列方向,有'horizontal'(默认水平显示),'vertical'(垂直)可选legend_pos:图例位置,有'left', 'center'(默认), 'right'可选legend_text_size/color:图例名称字体大小/颜色is_x/yaxis_show:是否显示x/y轴x/yaxis_interval:x/y轴标签的显示间隔x/yaxis_min/max:x/y轴刻度最小值/最大值x/yaxis_label_textsize/textcolor:x/y轴标签字体大小/颜色xaxis_rotate:x轴标签旋转角度is_splitline_show:是否显示网格线is_label_show:是否显示标签label_pos:标签的位置,有'top'(默认), 'left', 'right', 'bottom','inside','outside'可选label_text_color/size:标签字体颜色/大小is_random:是否随机排列颜色列表label_color:自定义标签颜色mark_point/line:标记点/线,默认有'min', 'max', 'average'可选。可自定义标记点线,具体格式如:[{'coord': [x, y], 'name': '目标标记点'}],记住格式是一个列表mark_point/line_symbol:标记点/线图形,默认为'pin'(点),有'circle'(圆形), 'rect'(正方形), 'roundRect'(圆角正方形), 'triangle'(三角形), 'diamond'(菱形), 'pin'(点), 'arrow'(箭头)可选mark_point/line_symbolsize:标记点/线图形大小mark_point/line_textcolor:标记点/线字体颜色

3.citylines表示定义1个迁徙图对象,可以添加标题以及初始化图标样式;

4.citylines.add可以添加标签、路线图以及图形样式

公式代码生成图形如下:

Python高考报考迁移图,各省考生“最想去哪”

很基础的图形,没有任何样式。

套上述公式完成本次迁徙图,代码如下:

from pyecharts import GeoLines, Stylestyle = Style(    title_color="#fff", title_pos="center", width=1200, height=900, background_color="#08192D")geo_style = style.add( legend_orient="vertical", legend_pos="left", legend_top = "center", legend_text_color="#fff", is_label_show=True, line_curve=0.2, line_opacity=0.6, geo_effect_symbol="plane", geo_effect_symbolsize=8, label_pos="right", label_formatter="{b}", label_text_color="#eee", symbol_size = 0.2, label_text_size=8, label_color=['#24936E','#6A4C9C','#0089A7','#BEC23F','#D0104C'])citylines = GeoLines("2020年全国高考报考迁徙图", **style.init_style)for city in list(dict.keys()): line_=[] for i in dict[city]: line_.append(tuple((city,i))) citylines.add("{0}".format(city),line_,**geo_style)citylines.render()

生成结果如下:

Python高考报考迁移图,各省考生“最想去哪”

看起来有点乱,不过可以通过点击左边标签选择显示单个省份,以河南为例:

Python高考报考迁移图,各省考生“最想去哪”

通过分析,发现各地的考生想留在本省的居多,最后,我还想对这些迁徙图的目的地省市的出现次数进行排名,代码如下:

re_list=[]for city in list(dict.keys()): re_list+=dict[city]re_dict={}for i in list(set(re_list)): re_dict[i]=re_list.count(i)attr=sorted(re_dict.items(),key=lambda k:k[1],reverse=True)chart = Bar("最受喜爱省份排名", **style.init_style)chart.add("", [i[0] for i in attr], [i[1] for i in attr], is_stack=True,xaxis_rotate=45)chart.render('最受喜爱省份排名.html')

图形如下:

Python高考报考迁移图,各省考生“最想去哪”

通过上图我们可以看出,考生们一般偏爱东南沿海等发达城市,毕竟大城市好大学比较多,而且能够得到更多的见识。

Python高考报考迁移图,各省考生“最想去哪”

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
浅梦一笑 浅梦一笑
2年前
2021软件开发专业的前景怎么样?是否还热门!
2021年的高考今天结束了,不少的家长和高三考生开始关注大学专业和规划以后从事的工作岗位。毕竟一旦高考分数揭晓,留给家长和考生谋划志愿的时间就不多了,所以早作规划,未雨绸缪是非常必要的。今天小编想跟网友们交流一下对软件开发的一些想法,供所有想从事软件开发工作的毕业生、职场人士,想进行软件开发的企业、个人进行参考。2021高考毕业后,从事软件开发工作到底还有没
待兔 待兔
3年前
2020软件开发专业的毕业前景怎么样?从事软件开发工作还有前途吗?
2020年的高考刚结束,不少的家长和高三考生开始关注大学专业和规划以后从事的工作岗位。毕竟一旦高考分数揭晓,留给家长和考生谋划志愿的时间就不多了,所以早作规划,未雨绸缪是非常必要的。今天小编想跟网友们交流一下对软件开发的一些想法,供所有想从事软件开发工作的毕业生、职场人士,想进行软件开发的企业、个人进行参考。2020高考毕业后,从事软件开发工作到底还有没有前
Stella981 Stella981
2年前
Python 开发:制作一个简易的点菜系统(附源码)
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理以下文章来源于海唤鱼杂记客栈,作者:海唤鱼杂记客栈!PythonGUI编程:制作一个简易的点菜系统(附源码)(https://oscimg.oschina.net/oscnet/up7f6390bf0f7f63953f8c28
Stella981 Stella981
2年前
Python数据可视化:折线图、柱状图、饼图代码
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。作者:godweiyang来源:算法码上来Python爬虫、数据分析、网站开发等案例教程视频免费在线观看https://space.bilibili.com/523606542!(https://oscimg.oschi
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
Python爬取网易云音乐辑的图片、专辑名和专辑出版时间
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。作者:阿里波特来源:CSDNPython爬虫、数据分析、网站开发等案例教程视频免费在线观看https://space.bilibili.com/523606542!(https://oscimg.oschina.net/
Stella981 Stella981
2年前
Python列表去重的方式有很多,了解它们,进行性能的对比
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理以下文章来源于Python实用宝典,作者Python实用宝典!(https://oscimg.oschina.net/oscnet/up0647b4a837d357255bd6f04110912d68.jpg)前言列表
Stella981 Stella981
2年前
Python js逆向 爬取X天下数据,好好看,好好学
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。之前讲过execjs这个库可以在python中运行js代码,这将极大的帮助我们解决逆向问题,找到加密位置不会重写怎么办、js代码太复杂怎么办,用execjs秒杀它。本次的受害者aHR0cHM6Ly9wYXNz
Stella981 Stella981
2年前
Python 分析电影《南方车站的聚会》
前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者:程序员野客PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://note.youdao.com/noteshare?id3054cce4add8a909e784ad934f95