数据来源:BlankerL
截止日期:4/10
json数据转 csv

import json
import time
import csvfile = open('DXYArea-TimeSeries.json','r',encoding='utf-8')infos = json.load(file)
with open('data.csv','a',newline='') as f:writer = csv.DictWriter(f,fieldnames=['updateTime','provinceName', 'currentConfirmedCount','confirmedCount','suspectedCount','curedCount','deadCount','locationId','statisticsData','countryName','countryEnglishName'])writer.writeheader()for info in infos:result = dict()result["updateTime"] =  time.strftime("%Y-%m-%d",time.localtime(int(str(info.get("updateTime"))[:-3])))result["provinceName"] = info.get("provinceName")result["currentConfirmedCount"] = info.get("currentConfirmedCount")result["confirmedCount"] = info.get("confirmedCount")result["suspectedCount"] = info.get("confirmedCount")result["curedCount"] = info.get("curedCount")result["deadCount"] = info.get("deadCount")result["locationId"] = info.get("locationId")result["statisticsData"] = info.get("statisticsData")result["countryName"] = info.get("countryName")result["countryEnglishName"] = info.get("countryEnglishName")writer.writerow(result)

数据拆分中国和世界两部分

import pandas as pd
import matplotlib.pyplot as plt
import numpy as npfilename = r'C:\Users\liuhao\Desktop\新建文件夹\DXY-COVID-19-Data-master\json\data.csv'
data = pd.read_csv(filename, sep=',',encoding='utf-8',header=0)
test = data.copy()test['updateTime'] = test['updateTime'].map(lambda x:x[5:])
# 去掉年份,方便坐标轴数据展示china = test[test['countryName'] == '中国']
chn_province = china[china['locationId'] != 951001]
chn_province = chn_province.sort_values(['provinceName','confirmedCount','updateTime'],ascending=False)
chn_province_unique = chn_province.drop_duplicates(subset=['provinceName','updateTime'],keep='first',inplace=False)
# 发现采集数据时写入了同一地区当天的不同时间点的数据
# 将数据排序后,去重,保留一天内的最大值
chn_province_unique['currentConfirmedCount'] = chn_province_unique['confirmedCount'] - chn_province_unique['curedCount'] - chn_province_unique['deadCount']
# 这一列部分数据缺失,计算填充def func(x):s = x.replace('省','')s = s.replace('市','')s = s.replace('自治区','')s = s.replace('壮族','')s = s.replace('回族','')s = s.replace('维吾尔','')return s
chn_province_unique['provinceName'] = chn_province_unique['provinceName'].map(func)
# 对城市名清洗,因为地图Map默认不支持这样的后缀world = test.drop(chn_province.index.values)
world = world.sort_values(['provinceName','confirmedCount','updateTime'],ascending=False)
world_unique = world.drop_duplicates(subset=['provinceName','updateTime'],keep='first',inplace=False)
world_unique['currentConfirmedCount'] = world_unique['confirmedCount'] - world_unique['curedCount'] - world_unique['deadCount']world_unique.to_csv(r'C:\Users\liuhao\Desktop\新建文件夹\DXY-COVID-19-Data-master\json\world.csv',sep=',',index=0,encoding='utf-8-sig')
chn_province_unique.to_csv(r'C:\Users\liuhao\Desktop\新建文件夹\DXY-COVID-19-Data-master\json\chn_province.csv',sep=',',index=0,encoding='utf-8-sig')

观察数据发现有些地区的时间序列不全,补全完整的时间,地区序列

import pandas as pd
import numpy as npfilename = r'C:\Users\liuhao\Desktop\新建文件夹\DXY-COVID-19-Data-master\json\chn_province.csv'
data = pd.read_csv(filename, sep=',',header=0)
test = data.copy()def fill_data(test):"""这里填充用的遍历循环,数据量大的话有些慢,但没有找到更好的方法"""time_series = list(set(test['updateTime'].tolist()))city_series = set(test['provinceName'].tolist())# 遍历每个时间点中未采集到的地区,加入到数据集中for i in time_series:c = test['provinceName'][test['updateTime'] == i].values.tolist()diff = list(city_series.difference(set(c)))for j in diff:new = pd.DataFrame({'updateTime':[i],'provinceName':[j]})test = test.append(new,ignore_index=False)test.sort_values(by=['provinceName','updateTime'],ascending=False,inplace=True)# 降序排列partfilled = test[test['updateTime']=='01-22'].fillna(0)# 将各地区最早时间点填充为0 test[test['updateTime']=='01-22'] = partfilled# 这里过渡一下,试着直接填充,结果不行test.fillna(method = 'bfill',inplace=True)# 向后填充,即填充前一天的数据return testtest.to_csv(r'C:\Users\liuhao\Desktop\新建文件夹\DXY-COVID-19-Data-master\json\chn_province_new.csv',index=0,encoding='utf-8-sig')

pyecharts画图

import pandas as pd
import numpy as np
from pyecharts.charts import Map,Line,Bar,Timeline
import pyecharts.options as optsfilename = r'C:\Users\liuhao\Desktop\新建文件夹\DXY-COVID-19-Data-master\json\chn_province_new.csv'
data = pd.read_csv(filename, sep=',',header=0)test = data.copy()
test.sort_values(by='updateTime',ascending=True,inplace=True)def day_data(data):return test[[ 'provinceName', 'currentConfirmedCount', 'confirmedCount','curedCount', 'deadCount']][test['updateTime'] == data]
def city_data(city):return test[[ 'updateTime','provinceName', 'currentConfirmedCount', 'confirmedCount','curedCount', 'deadCount']][test['provinceName'] == city]data_series = test['updateTime'].unique()
city_series = test['provinceName'].unique()tl = Timeline(init_opts=opts.InitOpts(width="1400px", height="800px"))
for i in data_series:dta = day_data(i)dta1 = dta[dta['provinceName'] != '湖北'].sort_values(by = 'currentConfirmedCount',ascending=True)# 这里去掉了湖北的数据,湖北的数据跟其他地区数据不在一个数量级上,加入后图表不成比例bar = Bar().add_xaxis(dta1['provinceName'].to_list())bar.add_yaxis('现存确诊',dta1['currentConfirmedCount'].to_list(),stack="stack1")bar.add_yaxis('治愈数',dta1['curedCount'].to_list(), stack="stack1")bar.add_yaxis('死亡数',dta1['deadCount'].to_list(), stack="stack1")bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))bar.set_global_opts(xaxis_opts=opts.AxisOpts(is_show=False),title_opts=opts.TitleOpts("{0}".format(i)))bar.reversal_axis()tl.add(bar, "{0}".format(i))
tl.render('timeline_bar_reversal.html')tl1 = Timeline(init_opts=opts.InitOpts(width="1400px", height="800px"))
for i in city_series:dta = city_data(i)x_data = dta['updateTime'].sort_values(ascending=True).to_list()line = Line().add_xaxis(xaxis_data=x_data)line.add_yaxis(series_name = '现存确诊数',y_axis=dta['currentConfirmedCount'].to_list(),label_opts=opts.LabelOpts(is_show=False))line.add_yaxis(series_name = '累计确诊数',y_axis=dta['confirmedCount'].to_list(),label_opts=opts.LabelOpts(is_show=False))line.add_yaxis(series_name = '治愈数',y_axis=dta['curedCount'].to_list(),label_opts=opts.LabelOpts(is_show=False))line.add_yaxis(series_name = '死亡数',y_axis=dta['deadCount'].to_list(),label_opts=opts.LabelOpts(is_show=False))line.set_global_opts(title_opts=opts.TitleOpts(title="{0}疫情图".format(i)),tooltip_opts=opts.TooltipOpts(trigger="axis"),yaxis_opts=opts.AxisOpts(type_="value",axistick_opts=opts.AxisTickOpts(is_show=True),splitline_opts=opts.SplitLineOpts(is_show=True),),xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),)tl1.add(line, "{0}".format(i))
tl1.render('timeline_city.html')tl2 = Timeline(init_opts=opts.InitOpts(width="1400px", height="800px"))
for i in data_series:day_dta = day_data(i)province = day_dta['provinceName'].to_list()data_paire = [list(z) for z in zip(province,day_dta['confirmedCount'])]data_paire1 = [list(z) for z in zip(province,day_dta['currentConfirmedCount'])]map = Map()map.add('累计确诊',data_paire,'china',is_map_symbol_show=False)map.add('现存确诊',data_paire1,'china',is_map_symbol_show=False)map.set_global_opts(tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a}:{c}"),visualmap_opts=opts.VisualMapOpts(max_=1000000, is_piecewise=True,pieces=[{"max": 0, "min": 0, "label": "0"},{"max": 100, "min": 0, "label": "0-100"},{"max": 500, "min": 100, "label": "100-500"},{"max": 1000, "min": 500, "label": "500-1000"},{"max": 2000, "min": 1000, "label": "1000-2000"},{"max": 1000000, "min": 2000, "label": ">2000"},],is_calculable=True,range_color=["lightskyblue", "yellow", "orangered"],),)tl2.add(map,'{0}'.format(i))
tl2.render('timeline_map.html')

本来想在地图中能像折线图中一样,悬浮提示文本显示该点的所有系列数据。但是 Map 中 TooltipOpts.formatter怎么设置都不对,字符串不行,回调函数写的不对也没用。
(ps:希望有人能指点一下)




更新

关于TooltipOpts.formatter自定义提示框已经找到解决办法,详情参考 pyecharts 维护人员的文章:

pyecharts 之 JsCode 的妙用

python:疫情数据可视化相关推荐

  1. Python 疫情数据可视化(爬虫+数据可视化)(Jupyter环境)

    目录 1 项目背景 2 项目目标 3 项目分析 3.1数据获取 3.1.1分析网站 3.1.2找到数据所在url 3.1.3获取数据 3.1.4解析数据 3.1.5保存数据 3.2数据可视化 3.2. ...

  2. 毕业设计-基于Python爬虫的疫情数据可视化系统

    基于Python爬虫的疫情数据可视化系统 采用ECharts+Flask+Requests架构: 源码加3105088663

  3. 基于python數據分析的疫情数据可视化系统

    文章目录 前言 1 课题背景 2 实现效果 2.1 整体界面展示 2.2 收集數據 3 實現過程 3.1 爬取疫情數據: 3.1.1 導包 3.1.2 實例化csv 3.1.3 防反爬 3.1.4 爬 ...

  4. mac mongodb可视化工具_github项目推荐|2019 冠状病毒疫情爬虫。疫情数据可视化

    ncov_2019_spider 2019 冠状病毒疫情爬虫.疫情数据可视化. 项目背景 疫情数据分析 数据来源 丁香医生,从1.24号开始采集入库,所以工程包含了24号后的数据. 数据展示 技术栈 ...

  5. 数据分析---疫情数据可视化(地图)

    数据分析---疫情数据可视化(地图) 安装pyecharts库 爬取所需要的数据(网上直接爬取数据) 绘制全国地图 绘制省份地图(以湖北省为例) 在全国地图上加入湖北省数据 导入数据(本地导入数据) ...

  6. pyecharts实践--2019-nCoV疫情数据可视化地图(实时更新)

    2019-nCoV疫情数据可视化地图效果如下: 获取数据(本文数据获取自腾讯的疫情实时追踪) 腾讯的疫情实时追踪网页: 点击查看. 这里我使用的是Google,追踪得到的数据如下图: 双击左边的 ge ...

  7. 疫情数据可视化-湖北省疫情可视化软件设计大赛作品

    湖北省疫情监测中心(疫情数据可视化)目录 前言 一.数据可视化 二.疫情可视化 湖北省疫情监测中心 ① 主要框架 ② 数据爬取 ③ 疫情可视化模块(疫情监测模块) ④ 便民信息可视化模块(检测信息模块 ...

  8. 【数据可视化】基于Dash制作的疫情数据可视化APP(Dash入门必读,附可运行源码)

    基于Dash制作的疫情数据可视化APP 在此之前,我写过一篇博客<基于Streamlit制作的时间序列数据分析APP>.Streamlit的优点是上手简单.能在短时间内快速构建具有一定交互 ...

  9. python做数据可视化视频_如何制作数据可视化视频?

    超干货!超多鲜为人知的宝藏可视化工具! 那些酷炫的可视化视频是怎么制作的?数据控结合具体案例为你一一揭秘! !!建议先码后看!跟着数据控轻松学会可视化! 1 堪比科幻电影!这样的数据大屏太酷啦!Eas ...

  10. python与excel做数据可视化-用Python进行数据可视化的10种方法

    原标题:用Python进行数据可视化的10种方法 2015-11-19 关于转载授权 大数据文摘作品,欢迎个人转发朋友圈,自媒体.媒体.机构转载务必申请授权,后台留言"机构名称+转载&quo ...

最新文章

  1. JavaScript: 设置Cookie
  2. 在虚拟机装一个linux系统
  3. 南通大学python期末考试试卷_模拟试卷C
  4. 获取hdfs_收好!Hadoop-HDFS读写原理的超详细教程
  5. UITextView详解
  6. 阿里影业、IMAX股价飙涨!2021年中国电影总票房已突破100亿元人民币
  7. 【Flink】Flink Distributed Cache 分布式缓存
  8. 移动web-使一个盒子水平垂直居中的六种方法
  9. 发布Flask项目到服务器
  10. flv.js构建及下载
  11. 征信不好的看过来:征信黑名单能洗白吗?
  12. Windows 2016 服务器安全配置
  13. 由矩阵运算来看初等矩阵的左乘右乘所影响到矩阵的行列变换的本质
  14. 发现IGame中又一个大坑
  15. 洛谷 P1941 飞扬的小鸟
  16. 算法项目开展的数据准备及标注规范
  17. Semantic Ui 之 容器 container
  18. 项目申请PPT经验总结
  19. 字符串拼接这个隐藏大坑,我表示不服~
  20. Android记录20-获取缓存大小和清除缓存功能

热门文章

  1. chrome与12306
  2. 人脸识别(基于阿里云)
  3. 红外线测速仪 简易实现
  4. 家庭记账本开发记录(6)
  5. 魔塔之拯救白娘子~我的第一个VB6+DX8做的小游戏源码~4读写ini文件
  6. matlab字符串表示方法,MATLAB字符和字符串
  7. java webservice配置文件_webservice配置文件
  8. nandflash yaffs2 oob
  9. 讲一讲短线指标运用方法 有机会大家可以试
  10. Ytu oj 折半查找