因为服务业作业需要用到疫情数据,所以重新找了一些数据处理步骤
数据来源
Github,DXY-COVID-19-Data
霍普金斯大学,Covid Data
Github数据处理 导入数据并筛选国内数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import pandas as pddata_1 = pd.read_csv('DXYArea.csv' ) indexNames = data_1[data_1["provinceName" ]=="中国" ].index data_1.drop(indexNames, inplace=True ) 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()函数
按不同省份划分数据集:
1 2 3 4 5 6 7 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列表中返回
处理时间数据:
1 2 3 4 5 6 7 8 9 10 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里提到有一些地区的数据存在错误,作者解释道可能是丁香医生工作人员在录入数据时出现错误,但是由于爬虫仅爬取数据所以未对数据进行修正。但是从后续结果看,这些错误不太影响整体结果。
如何确定每天的最后一条数据?因为时间序列的操作没整明白,就用了原始的操作,即切割字符串,根据字符串比较,选出最大的字符串后汇编成一列,然后根据挑选出的数据左联,得出每天最后一条数据的数据集,并添加日新增的数据列
按省份处理数据
1 2 3 4 5 6 7 8 9 10 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
这一步根据传入的不同省市,输出处理好的数据
清洗和汇总每个省份的日新增数据
1 2 3 4 5 def pro_process_1 (data ): data = data.groupby("updateTime" )["province_currentConfirmedCount" ].sum ().reset_index() data_1 = times(data) return data_1
这一步是将数据集中的数据转换成只有时间和日新增确诊的数据表,以存储为csv格式进行后续的图表绘制等操作。
整体步骤
1 2 3 4 datas = split_pro(data_2) guangzhou = pro_process(datas,"广东省" ) guangzhou = pro_process_1(guangzhou) guangzhou.to_csv("guangzhou.csv" ,index=False )
如果需要获取全国的日新增数据,只需要对data_2进行时间处理,然后进行新增数据计算并汇总时间数据即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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.to_csv("test_3.csv" ,index=False )
霍普金斯大学数据处理 这个数据集就很清晰,不用做太多工作,直接筛选出新增数据和时间戳就行了。