一足丢、數(shù)據(jù)下載和查看
使用python中urllib.request模塊中的urlretrieve函數(shù)下載此文件
from urllib.request import urlretrieve
urlretrieve('https://hub.jovian.ml/wp-content/uploads/2020/09/italy-covid-daywise.csv',
'italy-covid-daywise.csv')
import pandas as pd
covid_df = pd.read_csv('italy-covid-daywise.csv')
#covid_df.info() 基本信息 covid_df.describe() 基本統(tǒng)計(jì)信息描述
#covid_df.columns表頭信息 covid_df.shape 行數(shù)和列數(shù)
##獲取表中的date和new_cases列
cases_df = covid_df[['date', 'new_cases']]
##covid_df.loc[243] 獲取第243行 covid_df.loc[108:113] 獲取108到113行
二菱父、分析數(shù)據(jù)
問(wèn):在意大利尘奏,與Covid-19相關(guān)的報(bào)告病例和死亡總數(shù)是多少惜姐?死亡率是多少把曼?
total_cases = covid_df.new_cases.sum()
total_deaths = covid_df.new_deaths.sum()
print('報(bào)告病例是 {} 和死亡人數(shù)是 {}.'.format(int(total_cases), int(total_deaths)))
#死亡率是報(bào)告的死亡人數(shù)與報(bào)告的病例數(shù)之比
death_rate = covid_df.new_deaths.sum() / covid_df.new_cases.sum()
print("死亡率是 {:.2f} %.".format(death_rate*100))
問(wèn):哪些天病例超過(guò)了1000?
high_cases_df = covid_df[covid_df.new_cases > 1000]
問(wèn):排序找出案例數(shù)和死亡人數(shù)最多的日子摄乒?
covid_df.sort_values('new_cases', ascending=False).head(10)
covid_df.sort_values('new_deaths', ascending=False).head(10)
看起來(lái)三月的最后兩個(gè)星期的每日病例數(shù)最多悠反,而在新病例中,似乎每日死亡人數(shù)在高峰后約一周就達(dá)到高峰缺狠。
問(wèn):數(shù)據(jù)中是否有異常數(shù)據(jù)问慎?如何處理萍摊?
covid_df.sort_values('new_cases').head(10)
微信截圖_20210301134701.png
通過(guò)排序我們發(fā)現(xiàn)第172行數(shù)據(jù)有異常挤茄,新案例數(shù)為負(fù)數(shù),我們可以通過(guò)這幾種方法處理異常數(shù)據(jù):1.替換為0冰木;2.將其替換為整個(gè)列的平均值穷劈;3.將其替換為上一個(gè)和下一個(gè)日期的平均值;4.完全舍棄該行踊沸。
這里采用第三種方法歇终,替換為上下列的平均值。
covid_df.at[172, 'new_cases'] = (covid_df.at[171, 'new_cases'] + covid_df.at[173, 'new_cases'])/2
三逼龟、處理日期
通過(guò)covid_df.date看出date的數(shù)據(jù)類型是object,pandas不好分析评凝,使用pd.to_datetime方法將其轉(zhuǎn)化數(shù)據(jù)類型datetime64。增加年月日周末這四列腺律。
covid_df['date'] = pd.to_datetime(covid_df.date)
covid_df['year'] = pd.DatetimeIndex(covid_df.date).year
covid_df['month'] = pd.DatetimeIndex(covid_df.date).month
covid_df['day'] = pd.DatetimeIndex(covid_df.date).day
covid_df['weekday'] = pd.DatetimeIndex(covid_df.date).weekday
看下5月份的總體指標(biāo)奕短。然后使用該sum方法匯總每個(gè)選定列的值。
covid_df[covid_df.month == 5][['new_cases', 'new_deaths', 'new_tests']].sum()
一個(gè)簡(jiǎn)單的例子:
看下周日?qǐng)?bào)告的病例數(shù)是否高于每天報(bào)告的平均病例數(shù)匀钧。
covid_df.new_cases.mean()
#1096.6149193548388
covid_df[covid_df.weekday == 6].new_cases.mean()
#1247.2571428571428
與其他日子相比翎碑,星期天似乎有更多的病例報(bào)告。
四之斯、分組和匯總
我們按月創(chuàng)建一個(gè)組,用sum日杈,mean進(jìn)行匯總他們。
covid_month_df = covid_df.groupby('month')[['new_cases', 'new_deaths', 'new_tests']].sum()
covid_month_mean_df = covid_df.groupby('month')[['new_cases', 'new_deaths', 'new_tests']].mean()