Table of Contents
因为服务业作业需要用到疫情数据,所以重新找了一些数据处理步骤
数据来源
-
Github,DXY-COVID-19-Data
-
霍普金斯大学,Covid Data
Github数据处理
导入数据并筛选国内数据
import pandas as pd#读取所有数据作为data_1data_1 = pd.read_csv('DXYArea.csv')#删除provinceName是中国的数据行indexNames = data_1[data_1["provinceName"]=="中国"].index# Delete these row indexes from dataFramedata_1.drop(indexNames, inplace=True)#筛选countryName是中国的数据data_2 = data_1[data_1["countryName"]=="中国"]#筛选特定行save_series = ["provinceName","provinceEnglishName","province_confirmedCount","province_curedCount","province_deadCount","updateTime"]data_2 = data_2[save_series]data_2.head(2)#删除同一天中的相同时间节点数据data_2.drop_duplicates(inplace=True)其中批量删除行用到的操作是:先获取有指定值的行的索引数据,然后使用drop()函数drop掉指定索引的行,删除重复行使用的是drop_duplicates()函数
按不同省份划分数据集:
# 按省划分数据集def split_pro(data): datas = [] province_list = data["provinceName"].unique() for province in province_list: datas.append(data[data["provinceName"]==province]) return datas首先确定好“provinceName”列的不重复值,然后根据这些数据对数据集进行划分,并将所有省份的数据集存储在datas列表中返回
处理时间数据:
#对每个省份分别处理时间数据def time_process(data): datas = pd.merge(data, pd.DataFrame(data['updateTime'].str.split(' ',expand=True)), how='left', left_index=True, right_index=True) datas = datas.groupby(0)[1].agg('max').reset_index() datas["updateTime"] = datas[0] +" "+ datas[1] datas.drop([0,1],axis=1,inplace=True) data = datas.merge(data,how='inner',on='updateTime') #添加每日新增数据 data["province_currentConfirmedCount"] = data["province_confirmedCount"] - data["province_curedCount"] - data["province_deadCount"] return data这步操作的原因是,源数据中是按照市级单位抓取的数据,但是这里只需要用到省级数据,所以只需要保留每天最后一条数据中的省级数据列。这里其实有个遗留问题就是,如何确定数据正确,因为issues里提到有一些地区的数据存在错误,作者解释道可能是丁香医生工作人员在录入数据时出现错误,但是由于爬虫仅爬取数据所以未对数据进行修正。但是从后续结果看,这些错误不太影响整体结果。
如何确定每天的最后一条数据?因为时间序列的操作没整明白,就用了原始的操作,即切割字符串,根据字符串比较,选出最大的字符串后汇编成一列,然后根据挑选出的数据左联,得出每天最后一条数据的数据集,并添加日新增的数据列
按省份处理数据
#处理省份数据def pro_process(datas,name): datas_1 = [] for i in datas: i = time_process(i) datas_1.append(i) for j in datas_1: if(j["provinceName"].unique() == name): res = j return res这一步根据传入的不同省市,输出处理好的数据
清洗和汇总每个省份的日新增数据
#处理具体省份具体数据def pro_process_1(data): data = data.groupby("updateTime")["province_currentConfirmedCount"].sum().reset_index() data_1 = times(data) return data_1这一步是将数据集中的数据转换成只有时间和日新增确诊的数据表,以存储为csv格式进行后续的图表绘制等操作。
整体步骤
datas = split_pro(data_2)guangzhou = pro_process(datas,"广东省")guangzhou = pro_process_1(guangzhou)guangzhou.to_csv("guangzhou.csv",index=False)如果需要获取全国的日新增数据,只需要对data_2进行时间处理,然后进行新增数据计算并汇总时间数据即可
#处理时间数据def times(data): data_1 = pd.merge(data, pd.DataFrame(data["updateTime"].str.split(' ',expand=True)), how='left', left_index=True, right_index=True) data_1 = data_1.groupby(0)[1].agg('max').reset_index() data_1["updateTime"] = data_1[0] +" "+ data_1[1] data_1.drop([0,1],axis=1,inplace=True) #获取每天最后一条日期的数据并存储 data_1 = data_1.merge(data,how='inner',on='updateTime') return data_1
datas_1 = []for i in datas: i = time_process(i) datas_1.append(i)test = pd.concat(datas_1)test_1 = test.groupby("updateTime")["province_currentConfirmedCount"].sum().reset_index()test_2 = times(test_1)#因为对每个省的数据汇总后会有当天时间重合的部分,所以需要去除test_3 = test_2[test_2["updateTime"].str.startswith("2020")]#将test_3转换成csv文件并存储在本地test_3.to_csv("test_3.csv",index=False)霍普金斯大学数据处理
这个数据集就很清晰,不用做太多工作,直接筛选出新增数据和时间戳就行了。