疫情数据可视化01---中国疫情时间序列数据整理(截至7月30号)
2020-07-31 10:37
615 查看
中国疫情时间序列数据整理
数据来自Github By canghailan;参考和鲸社区(kesci)数据集 COVID-19 of China from 21 by WXK
## 导入库 import warnings warnings.filterwarnings('ignore') import pandas as pd
解决问题1: 如何读入 243 天的文件
分析: 每个文件都是用日期命名的,则考虑是否有时间的相关 类 ,直接处理日期
参考: Python 生成日期列表
只需要修改原函数的 print 为 return 即可 原因如下 print出来的东西没有类型 Nonetype 只能显示,不能处理,这里return会的是List数据类型,后面可以直接根据索引生成文件名
## 生成时间序列 后面加 .CSV 用于读取数据 import datetime def create_assist_date(datestart = None,dateend = None): # 创建日期辅助表 if datestart is None: datestart = '2016-01-01' if dateend is None: dateend = datetime.datetime.now().strftime('%Y-%m-%d') # 转为日期格式 datestart=datetime.datetime.strptime(datestart,'%Y-%m-%d') dateend=datetime.datetime.strptime(dateend,'%Y-%m-%d') date_list = [] date_list.append(datestart.strftime('%Y-%m-%d')) while datestart<dateend: # 日期叠加一天 datestart+=datetime.timedelta(days=+1) # 日期转字符串存入列表 date_list.append(datestart.strftime('%Y-%m-%d')) return date_list ## 调用函数,生成时间文件名列表 time_list = list(create_assist_date("2019-12-01","2020-07-30")) ## 分别为 起始日期和终止日期
## i = 0 data_temp = {} ## 声明空间,用 “[]” 时候会报错,因为先声明空列表,后用0索引复制 无效 for item in time_list: data_temp[i] = pd.read_csv(item+".csv") data_temp[i] = data_temp[i][data_temp[i]["country"]=="中国"] i=i+1 data_1 = pd.concat(data_temp , ignore_index=1) ## 相同字段的表首尾相接,重排index data_1.drop_duplicates(subset=["date","country","province","city"], keep='first', inplace=True) data_1.to_csv("中国省市疫情数据-总.csv",encoding='utf_8_sig') ## 不加encoding 有时候会出现中文乱码
## 查看 print( "data_temp 变量的 数据类型为:",type(data_temp), "\ndata_temp 键值为:",data_temp.keys(), )
data_temp 变量的 数据类型为: <class 'dict'> data_temp 键值为: dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242])
解决问题2:整理成时序数据,每行为一个省,每列为一个日期,四个表,分表表示 [confirmed],[suspected] ,[cured],[dead]
分析:
参考:pandas中DataFrame 数据合并,连接(merge,join,concat)
借助 pandas 的 pd.merge合并每日数据,key为省份和城市,这样就可以合成 矩阵数据集,及每行为城市,每列为日期,疑似、确诊、治愈、死亡 各做一个表
## 使用举例 a = pd.DataFrame({'key1': ['2019', '2020', '2021', '2022'], 'key2': ['10', '11', '12', '13'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']}) b = pd.DataFrame({'key1': ['2019', '2020', '2021', '2023'], 'key2': ['10', '11', '12', '13'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}) c = [a,b] result = a.merge(c[1], how='outer', on=['key1', 'key2']) result
key1 | key2 | A | B | C | D | |
---|---|---|---|---|---|---|
0 | 2019 | 10 | A0 | B0 | C0 | D0 |
1 | 2020 | 11 | A1 | B1 | C1 | D1 |
2 | 2021 | 12 | A2 | B2 | C2 | D2 |
3 | 2022 | 13 | A3 | B3 | NaN | NaN |
4 | 2023 | 13 | NaN | NaN | C3 | D3 |
for need_key in ["confirmed","suspected","cured","dead"]: data_temp = {} ## 声明空间,用 “[]” 时候会报错,搞不懂为什么,最后生成的都是列表类型 i = 0 for item in time_list: data_temp[i] = pd.read_csv(item+".csv") data_temp[i] = data_temp[i][data_temp[i]["country"]=="中国"] temp = data_temp[i] temp = temp[["country","province",need_key]] temp.rename(columns={ need_key :time_list[i] },inplace=True) # while i > 0 if i == 0: data_2_province = temp else: data_2_province = data_2_province.merge(temp, how='outer', on=['country','province']) data_2_province.drop_duplicates(subset=["country","province"], keep='first', inplace=True) ### 重要,否则内存 迅速增长,电脑内存瞬间99% 直接卡死 ## subset必须设置,如果选择none(即全列作为匹配值),同样占满内存 i=i+1 data_2_province.reset_index(drop=True, inplace=True) data_2_province.to_csv("1_"+ str(need_key) + ".csv",encoding='utf_8_sig')
data_2_province.head(15).T
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
country | 中国 | 中国 | 中国 | 中国 | 中国 | 中国 | 中国 | 中国 | 中国 | 中国 | 中国 | 中国 | 中国 | 中国 | 中国 |
province | NaN | 湖北省 | 广东省 | 北京市 | 吉林省 | 上海市 | 浙江省 | 安徽省 | 江西省 | 山东省 | 广西壮族自治区 | 海南省 | 四川省 | 贵州省 | 云南省 |
2019-12-01 | 0 | 0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2019-12-02 | 0 | 0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2019-12-03 | 0 | 0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2020-07-26 | 4659 | 4512 | 8 | 9 | 2 | 7 | 1 | 6 | 1 | 7 | 2 | 6 | 3 | 2 | 2 |
2020-07-27 | 4663 | 4512 | 8 | 9 | 2 | 7 | 1 | 6 | 1 | 7 | 2 | 6 | 3 | 2 | 2 |
2020-07-28 | 4664 | 4512 | 8 | 9 | 2 | 7 | 1 | 6 | 1 | 7 | 2 | 6 | 3 | 2 | 2 |
2020-07-29 | 4665 | 4512 | 8 | 9 | 2 | 7 | 1 | 6 | 1 | 7 | 2 | 6 | 3 | 2 | 2 |
2020-07-30 | 4665 | 4512 | 8 | 9 | 2 | 7 | 1 | 6 | 1 | 7 | 2 | 6 | 3 | 2 | 2 |
245 rows × 15 columns
用到的其他参考:
- python——修改Dataframe列名的两种方法
- Pandas之drop_duplicates:去除重复项
- pandas 之 to_csv 保存数据出现中文乱码问题及解决办法
- Pandas DataFrame的index重新排列
源数据文件均可在GitHub和和鲸社区找到,文首已经当好地址,如果如果需要整理之前的源数据文件以及整理之后的数据文件,可在评论区留下 邮箱 。
附: 在vscode中,优雅的显示csv文件:
原始 样式
启动插件1
启动插件1后效果:
启动插件2
启动插件2后效果:
相关文章推荐
- 数据可视化软件_Tableau | Chapter14入门最终章【回归分析和时间序列分析】
- 使用R进行数据可视化套路之-散点图、图形分隔、时间序列
- 最简洁的Python时间序列可视化:数据科学分析价格趋势,预测价格,探索价格
- 使用Highcharts和InfluxDB可视化时间序列数据
- 手把手教你使用Dygraphs可视化时间序列数据(附代码、链接)
- 时间序列预测基础教程系列(5)_Python中数据可视化方法汇总
- Python实现新冠肺炎疫情数据采集与分析可视化【一篇迟到的文章,武汉加油,中国加油,神州大地终会迎来春暖花开的日子】
- MetricGraphics.js – 时间序列数据的可视化
- python 中国疫情历史数据可视化
- lucene底层数据结构——底层filter bitset原理,时间序列数据压缩将同一时间数据压缩为一行
- [好书推荐]《WEB+DB PRESS 中文版 01》UI设计+Web支付+数据可视化
- 时间序列分析:ts/mts基础数据类型
- python--时间序列数据分析(学习笔记)
- SQL Server数据类型,其中的日期有范围datetime:旧版本的日期时间类型,范围1753-01-01 to 9999-12-31,精确到3.33毫秒
- 学习笔记(01):Python数据殿堂:数据分析与数据可视化-数据科学概述
- pands 时间序列 之日期和时间数据类型及工具
- 时间序列数据的存储和计算 - 概述
- Keras之MLPR:利用MLPR算法(1to1+【Input(1)→8(relu)→O(mse)】)实现根据历史航空旅客数量数据集(时间序列数据)预测下月乘客数量问题
- R语言-时间序列函数整理
- python|jupyter|pandas|4.3转换与处理时间序列数据