文章目录
源数据:
; fetch_data函数
def fetch_data(file):
df=pd.read_csv(file)# 用pd.read_csv读取csv文件
#由于美国等国数据是按二级行政区划提供的,需按国家进行汇总,并且去掉了Lat,Long两列
result=df.groupby(['Country/Region']).sum().drop(['Lat','Long'],axis=1).stack()
# 重新定义索引
result=result.reset_index()
result.columns=['Country','date','value']
result['date_']=pd.to_datetime(result.date)#生成时间索引
result=result.sort_values(by='date_',axis=0,ascending=True)#按时间排序
result=result.replace('\*','',regex=True)#有些国家名字中有*,去掉国名中的*
return result
ef fetch_data(file):
df=pd.read_csv(file)# 用pd.read_csv读取csv文件
调入文件语句,通过参数的方法调入我们准备的文件,具体的调入操作在下面,这里我们写的是这个对文件进行预处理操作的函数,具体的处理操作见下面操作
result=df.groupby(['Country/Region']).sum().drop(['Lat','Long'],axis=1).stack()
groupby:
df.groupby([‘Country/Region’]) :通过列’countr/region’分组,创建一个groupby对象
.sum() 对分组后的数据进行求和运算
axis:表示分组轴的方向,0是按行,1是按列—-原文axis=1
.drop(‘lat’,’long’) 删除对应指定列
.stack() 对groupby数组进行堆叠
结合本文:
这句函数是对3个数据进行初步的处理,分别是对应Excel:confine,death,recover
先将对应数据按’countr/region’分组,创建一个groupby对象,接着进行求和,这样就是就可以得到一个国家记录的每一天的患病or死亡or康复总和
在求和的数据上在进行删除lat,long这2列,具体调出Excel查看,再调用stack将处理好的数据进行堆叠,堆叠出来的结果就是将数据按日期分开,同一日期中所有的数据,这样处理数据方便后面进行处理
详细解释链接: https://blog.csdn.net/weixin_44330492/article/details/100126774
result=result.reset_index()
result.columns=['Country','date','value']
这2句的代码就是通过调用reset_index()重新索引,
我们在重新赋值索引名为country date value
知识点:pandas 中的 reset_index()
数据清洗时,会将带空值的行删除,此时DataFrame或Series类型的数据不再是连续的索引,可以使用reset_index()重置索引。
.columns 设置列标签
result['date_']=pd.to_datetime(result.date)#生成时间索引
这里会再创建出一列出来数据是来自date中的数据
生成时间索引,原本中的数据不是时间格式的数据,是一种文本数据,我们将这些数据转化为时间类型是数据,
就是本来只是一串文字,我们把改成为时间类型的数据,他就具有时间的属性了
pandas中的sort_values()函数原理类似于SQL中的order by,
可以将数据集依照某个字段中的数据进行排序,该函数即可根据指定列数据也可根据指定行的数据排序。
本题通过时间排序
.sort_values(by=”,axis=0,ascending=True)
by:指定的列名
axis:若axis=0或’index’,则按照指定列中数据大小排序;
若axis=1或’columns’,则按照指定索引中数据大小排序,默认axis=0
ascending:是否按指定列的数组升序排列, 默认为True,即升序排列
result=result.sort_values(by='date_',axis=0,ascending=True)
sort_values :这个方法啊,他和sql中的order by 命令类似哈,他是用来排序用的,那他排序中通过by:”名字”,这个参数来判断这个数据是通过什么来排序的,本文是通过时间这个索引来排序的,那是按时间是什么属性来排序的呢?这里是安装时间的数据大小来排序的,这里也可以看出我们前一句通过to_datetime来将数据改成为时间类型的数据的意义,没有定义类型我们怎么比较大小
result=result.replace('\*','',regex=True)#有些国家名字中有*,去掉国名中的*
replace:替换函数。result.replace(‘‘,”,regex=True)’ ‘用”(空替换)
意义这里的意思就是去掉国家后面带 的避免 号带来的影响。
draw_data函数
def draw_data(df, label, color):
print(df)
fig = px.choropleth(df,
locations='Country',
locationmode='country name',
animation_frame='date',
color='value',
color_continuous_scale=[[0, 'White'], [1, color]],
labels={'value': label},
range_color=[df.value.min(), df.value.max()])
fig.show()
resample函数解释
def resample(df, period):
country_list = df.Country.drop_duplicates()
temp = df.copy()
result = pd.DataFrame()
for i in country_list:
r_temp = temp.loc[temp.Country == i]
r_temp = r_temp.drop_duplicates(['date_'])
"""
将数据中的列转化为行索引,如:
a b c
0 1 ....
1 4 ....
2 7 ....
3 9 ....
进行行索引转化set_index('a')后为:
a b c
1 ....
4 ....
7 ....
9 ....
"""
r_temp = r_temp.set_index('date_')
r_temp = r_temp.resample(period).asfreq().dropna()
r_temp = r_temp.reset_index()
result = pd.concat([result, r_temp])
return result.sort_values(by='date_', axis=0, ascending=True)
Original: https://blog.csdn.net/qq_45803800/article/details/124258694
Author: SSS迪
Title: 代码深度解析
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/754473/
转载文章受原作者版权保护。转载请注明原作者出处!