Python项目实战

  • Python项目实战--目录
  • Python项目实战 —— 02. 疫情前后全国人口流动可视化大屏
    • 一、背景
    • 二、数据分析
      • 2.1 数据处理
      • 2.2 画图
      • 2.3 展示
    • 三、可视化大屏
      • 备注:read_json

Python项目实战–目录

Python项目实战 —— 02. 疫情前后全国人口流动可视化大屏

大家可以关注知乎或微信公众号的share16,我们也会同步更新此文章。

一、背景

   人口的流动性是造成新型冠状传染病毒在全国范围内扩散的重要驱动因素,很多用于评估传染病毒的感染速率和扩散规模的预测模型均基于人流数据展开,此次因病毒传染而封城和春节期间取消春节活动等措施更是说明了限制人口流动是抑制病毒传播的重要途径。
   春节前的人口大迁徙无疑加速了本次疫情的时空传播速率,而春节后全国范围内的人口回流仍然会对疫情的防控带来巨大的挑战。可以说,深刻认识春节后人口回流的迁徙特征和规律,将对此次疫情的防控起到非常积极的作用。数据时间为2019-11-30和2020-02-20,分别是疫情前和疫情开始第一个春节。

   点此下载数据集

二、数据分析

2.1 数据处理

① 疫情前各省人口流动情况——柱形图/地图;广东湖北流动最大的前五个省份飞行图(依据广东是人口流动最大省份、湖北是第一个封城的省份);
② 疫情后各省人口流动情况——柱形图/地图;广东湖北流动最大的前五个省份飞行图(依据广东是人口流动最大省份、湖北是第一个封城的省份);
③ 疫情前后湖北各城市人口流动情况;

import pandas as pd
from pyecharts.charts import *
import pyecharts.options as optsdf1 = pd.read_csv('/XXXXXX/2019-11-30.csv')
df1_1 = df1.groupby(['startProvince']).realIdx.sum().round(1)
df1_2 = df1.groupby(['endProvince']).realIdx.sum().round(1)
df1_3 = pd.merge(df1_1,df1_2,how='left',left_index=True,right_index=True).sort_values('realIdx_x',ascending=False)
df2_1 = df1.groupby(['startProvince','endProvince']).realIdx.sum().round(1).reset_index()
df2_1['r'] = df2_1.groupby(['startProvince'])['realIdx'].rank(method='first',ascending=False)
ls1_city = list(df2_1.query("startProvince in ['广东'] & startProvince!=endProvince & \
realIdx>0 & r<=6").set_index(['startProvince','endProvince']).index)
ls2_city = list(df2_1.query("startProvince in ['湖北'] & startProvince!=endProvince & \
realIdx>0 & r<=6").set_index(['startProvince','endProvince']).index)df2 = pd.read_csv('/XXXXXX/2020-02-20.csv')
df3_1 = df2.groupby(['startProvince']).realIdx.sum().round(1)
df3_2 = df2.groupby(['endProvince']).realIdx.sum().round(1)
df3_3 = pd.merge(df3_1,df3_2,how='left',left_index=True,right_index=True).sort_values('realIdx_x',ascending=False)
df4_1 = df2.groupby(['startProvince','endProvince']).realIdx.sum().round(1).reset_index()
df4_1['r'] = df4_1.groupby(['startProvince'])['realIdx'].rank(method='first',ascending=False)
ls3_city = list(df4_1.query("startProvince in ['广东'] & startProvince!=endProvince & \
realIdx>0 & r<=6").set_index(['startProvince','endProvince']).index)
ls4_city = list(df4_1.query("startProvince in ['湖北'] & startProvince!=endProvince & \
realIdx>0 & r<=6").set_index(['startProvince','endProvince']).index)hb1 = df1[df1.startProvince=='湖北'].groupby(['startCity']).realIdx.sum()
hb2 = df2[df2.startProvince=='湖北'].groupby(['startCity']).realIdx.sum()
hb = pd.merge(hb1,hb2,left_index=True,right_index=True)
hb['cha'] = hb.realIdx_x-hb.realIdx_y
hb.sort_values('cha',ascending=False,inplace=True)

2.2 画图

p1 = Geo()
p1.add_schema(maptype='china',is_roam=False)
p1.add('出发地',list(df1_1.to_dict().items()),type_='effectScatter',symbol_size=5,label_opts=opts.LabelOpts(is_show=False))
p1.add('目的地',list(df1_2.to_dict().items()),type_='heatmap',is_large=True,blur_size=16,point_size=16) #当图表数据量大时可设置为True、光晕大小、点的大小
p1.add('从广东出发的top5',ls1_city,type_='lines',symbol_size=5,label_opts=opts.LabelOpts(is_show=False))
p1.add('从湖北出发的top5',ls2_city,type_='lines',symbol_size=5,label_opts=opts.LabelOpts(is_show=False))
p1.set_global_opts(title_opts=opts.TitleOpts('疫情前'),visualmap_opts=opts.VisualMapOpts(range_text=['realIdx分组'],is_piecewise=True,pieces=[{'min':180,'color':'#080177'},{'min':93,'max':180,'color':'#1203B3'},{'min':52,'max':93,'color':'#2106fa'},{'min':36,'max':52,'color':'#7C69FD'},{'min':0,'max':36,'color':'#D4CDFE'}]))p2 = Bar()
p2.add_xaxis(list(df1_3.to_dict()['realIdx_x'].keys()))
p2.add_yaxis('出发地',list(df1_3.to_dict()['realIdx_x'].values()),label_opts=opts.LabelOpts(is_show=False))
p2.add_yaxis('目的地',list(df1_3.to_dict()['realIdx_y'].values()),label_opts=opts.LabelOpts(is_show=False))
p2.set_global_opts(title_opts=opts.TitleOpts('2019-11-30各省份人口流动指数'),legend_opts=opts.LegendOpts(pos_right='right'),datazoom_opts=opts.DataZoomOpts())p3 = Bar()
p3.add_xaxis(list(df3_3.to_dict()['realIdx_x'].keys()))
p3.add_yaxis('出发地',list(df3_3.to_dict()['realIdx_x'].values()),label_opts=opts.LabelOpts(is_show=False))
p3.add_yaxis('目的地',list(df3_3.to_dict()['realIdx_y'].values()),label_opts=opts.LabelOpts(is_show=False))
p3.set_global_opts(title_opts=opts.TitleOpts('2020-02-20各省份人口流动指数'),legend_opts=opts.LegendOpts(pos_right='right'),datazoom_opts=opts.DataZoomOpts())p4 = Geo()
p4.add_schema(maptype='china',is_roam=False)
p4.add('出发地',list(df3_1.to_dict().items()),type_='effectScatter',symbol_size=5,label_opts=opts.LabelOpts(is_show=False))
p4.add('目的地',list(df3_2.to_dict().items()),type_='heatmap',is_large=True,blur_size=16,point_size=16) #当图表数据量大时可设置为True、光晕大小、点的大小
p4.add('从广东出发的top5',ls3_city,type_='lines',symbol_size=5,label_opts=opts.LabelOpts(is_show=False))
p4.add('从湖北出发的top5',ls4_city,type_='lines',symbol_size=5,label_opts=opts.LabelOpts(is_show=False))
p4.set_global_opts(title_opts=opts.TitleOpts('疫情后'),visualmap_opts=opts.VisualMapOpts(range_text=['realIdx分组'],is_piecewise=True,pieces=[{'min':45,'color':'#080177'},{'min':20,'max':45,'color':'#1203B3'},{'min':8,'max':20,'color':'#2106fa'},{'min':4,'max':8,'color':'#7C69FD'},{'min':0,'max':4,'color':'#D4CDFE'}]))
b = Bar()
b.add_xaxis(list(hb.index))
b.add_yaxis('疫情前',list(hb.realIdx_x.round(1)),label_opts=opts.LabelOpts(is_show=False))
b.add_yaxis('疫情后',list(hb.realIdx_y.round(1)),label_opts=opts.LabelOpts(is_show=False))
b.extend_axis(yaxis=opts.AxisOpts(name='cha',position='right'))
b.extend_axis(yaxis=opts.AxisOpts(name='realIdx',position='left'))
l = Line()
l.add_xaxis(list(hb.index))
l.add_yaxis('cha',list(hb.cha.round(1)),yaxis_index=1,label_opts=opts.LabelOpts(is_show=False))
b.overlap(l)
b.set_global_opts(title_opts=opts.TitleOpts('疫情前后,湖北各城市人口流动情况',pos_left='center'),legend_opts=opts.LegendOpts(pos_top='10%',pos_right='20%'))p = Page(layout=Page.DraggablePageLayout)
p.add(p2,p1,p3,p4,b)
p.render('hh.html')
p.render_notebook()

2.3 展示

p.save_resize_html(source='hh.html',cfg_file='/xxxxxx/chart_config.json',dest='/xxxxxx/chart.html')

三、可视化大屏



备注:read_json

''' 市.json:可从原数据源下载 '''
a = pd.read_json('/XXXXXX/市.json',orient='index')
ls = []
for i in range(len(a.loc['features',0])):m = a.loc['features',0][i]['attributes']ls.append((m['省'],m['省代码'],m['市'],m['市代码']))
pd.DataFrame(ls).head()

谢谢大家

Python项目实战 —— 02. 疫情前后全国人口流动可视化大屏相关推荐

  1. 不到 100 行 Python 代码教你做出精美炫酷的可视化大屏

    作者 |俊欣 来源 |关于数据分析与可视化 "碳达峰.碳中和"是2021年政府在不断强调与非常重视的事儿,那什么是"碳达峰".什么又是"碳中和&quo ...

  2. 超简单,用Python Pyecharts制作可视化大屏

    经常有小伙伴问,如何制作数据可视化大屏? 今天主要详细讲一下Pyecharts制作可视化大屏. 注意,本文由于篇幅问题不会放置全部代码,会在提供文末全部代码的下载. ECharts是由百度开源的基于J ...

  3. Python机器学习---Pyecharts制作可视化大屏

    文章目录 Pyecharts可视化 Map世界地图 柱状图.饼图 Pyecharts组合图表 ECharts是由百度开源的基于JS的商业级数据图表库,有很多现成的图表类型和实例,而Pyecharts则 ...

  4. Python项目实战 —— 01. 疾病预测结构化数据

    Python项目实战 Python项目实战--目录 Python项目实战 -- 01. 疾病预测结构化数据 一.背景 二.解题思路 三.数据分析 3.1 数据清洗 3.2 数据分析 3.2.1 相关系 ...

  5. Python项目实战:数据可视化与股票数据分析-关东升-专题视频课程

    Python项目实战:数据可视化与股票数据分析-333人已学习 课程介绍         本视频内容包括使用Matplotlib绘制图表.MySQL数据库.Python访问数据库和Lambda表达式. ...

  6. Python项目实战:开发PetStore宠物商店项目-关东升-专题视频课程

    Python项目实战:开发PetStore宠物商店项目-487人已学习 课程介绍         课程内容包括项目分析与设计过程.数据库设计过程.项目敏捷开发.MySQL数据库.Python访问数据库 ...

  7. keras中文文档_【DL项目实战02】图像识别分类——Keras框架+卷积神经网络CNN(使用VGGNet)

    版权声明:小博主水平有限,希望大家多多指导. 目录: [使用传统DNN] BG大龍:[DL项目实战02]图像分类--Keras框架+使用传统神经网络DNN​zhuanlan.zhihu.com [使用 ...

  8. Python项目实战 —— 04. 淘宝用户行为分析

    Python项目实战 Python项目实战--目录 Python项目实战 -- 04. 淘宝用户行为分析 一.背景 二.解题思路 三.数据分析 3.1 数据清洗 3.2 数据分析 3.2.1 用户整体 ...

  9. Python项目实战:使用PySpark对大数据进行分析

    Python项目实战:使用PySpark对大数据进行分析 大数据,顾名思义就是大量的数据,一般这些数据都是PB级以上.PB是数据存储容量的单位,它等于2的50次方个字节,或者在数值上大约等于1000个 ...

最新文章

  1. 进程和程序的主要区别是
  2. HashMap、Hashtable、ConcurrentHashMap的原理与区别
  3. 文档生成工具Sandcastle Help File Builder
  4. VIM学习笔记 配置文件(vimrc)
  5. C++模板函数/类示例
  6. php编程 之php基础 表单
  7. 偏见:人工智能辅助决策的隐患
  8. [JSMind]使用JSMind操作生成的思维导图
  9. 松花江等三流域禁渔效果不理想 跨界水域成管理盲区
  10. php根据两点经纬度计算距离
  11. Arduino连接HC05蓝牙模块
  12. VC++使用管道重定向进程输入输出(附源码)
  13. 图形化开发(五)032-Three.js之光照——PointLight 点光源、SpotLight 聚光灯光源、实现聚光灯阴影、HemisphereLight室外光源
  14. mysql字符串索引与数字索引_×××数字和字符串数字的索引使用情况
  15. 章文嵩将离职,曾是阿里开源“赶集人”,投身开源 20 年
  16. 我国的社保到底是多交好,还是少交好?
  17. 羊毛党 青龙-阿东和非阿东脚本仓库大全
  18. mysql怎么打开命令行_怎么在命令行打开mysql?
  19. MATLAB身份证号码定位检测识别GUI
  20. Hdu 4193 Non-negative Partial Sums (数据结构_单调队列)

热门文章

  1. 百度O2O两条腿:百度地图和百度糯米
  2. vue+python把woff字体文件中的字体全部读取出来
  3. 4个基本不等式的公式高中_高中4个基本不等式的公式
  4. 搭建树莓派流媒体服务器支持HTTP-FLV播放
  5. “纯C”实现——扫雷游戏(递归实现展开功能)
  6. ipad做win10扩展屏的方法-Splashtop Wired XDisplay
  7. 51单片机中断与定时器计数器,基于普中科技HC6800-ESV2.0
  8. SpringBoot JSON 整合
  9. html怎么制作一个歌单,如何制作属于自己的个性歌单 | Listen1
  10. 在Windows上打造出自己的Linux开发环境