代码深度解析

文章目录

源数据:

代码深度解析

; 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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球