当前位置:   article > 正文

Pandas数据分析30——时间序列分析案例_时间序列案例分析数据集

时间序列案例分析数据集

参考书目:《深入浅出Pandas:利用Python进行数据处理与分析》


同样在我们熟悉了pandas的各种基础用法后,进行一些案例分析。本次分析的案例是一些时间序列数据的,要观察变化情况。有两个案例,一个是中国经济发展变化情况,一个是各国新冠疫情确诊和死亡人数变化数据。数据集都是网络上的,直接按照下面的代码读取网站文件就可以获取。

首先导入包

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. plt.rcParams ['font.sans-serif'] ='SimHei' #显示中文
  5. plt.rcParams ['axes.unicode_minus']=False #显示负号

 中国经济发展分析

读取数据

  1. df=pd.read_csv('https://www.gairuo.com/file/data/dataset/GDP-China.csv')
  2. df.head()

 画出国内生产总值的时间变化图

df.set_index('年份').国内生产总值.plot(figsize=(7,2))

 三个产业的时间变化图

df.set_index('年份').loc[:,'第一产业增加值':'第三产业增加值'].plot(figsize=(7,2))

 

 第一产业占GDP的比例变化

  1. #第一产业占比越来越低
  2. df.assign(rate=df.第一产业增加值/df.国内生产总值).set_index('年份').rate.plot(figsize=(7,2))

 可以看到第一产业农业的占比越来越低。

画出2000年前和2000后的的GDP总和

  1. #2000后GDP多
  2. df.groupby(df.年份>=2000).sum().rename(index={True:'2000后',False:'2000前'}).国内生产总值.plot.pie(figsize=(2,2))
  3. plt.tight_layout()

 

2000后GDP远多于2000前的GDP

计算每五年的GPD 的和

  1. #每五年GDP和
  2. df.groupby(pd.cut(df.年份,bins=[i for i in range(1952,2018,5)],right=False)).sum().国内生产总值.sort_values(ascending=False)

 以上代码基本都是一行完成,还是很简洁的。

 


各国新冠疫情分析

读取数据

  1. df=pd.read_csv('https://www.gairuo.com/file/data/dataset/countries-aggregated.csv')
  2. df.head()

 画出中国确诊人数的时间变化图

  1. #中国确诊人数
  2. df.loc[df.Country=='China'].set_index('Date').Confirmed.plot(figsize=(7,2))

 #中国新增确诊趋势图

  1. #中国新增确诊趋势
  2. df.loc[df.Country=='China'].set_index('Date').assign(new=lambda x:x.Confirmed.diff()).new.plot(figsize=(7,2))

 #找出病例在1w以上的国家死亡率排名前十的国家,

链式法则编码,下面代码其实只有一行

  1. ( df.loc[df.Date==df.Date.max()] #看最新的日期
  2. .loc[df.Confirmed>10000] #确认1w以上
  3. .assign(rate=lambda x:x.Deaths/x.Confirmed) #死亡率
  4. .sort_values('rate',ascending=False) #排序
  5. .set_index('Country') #国家做索引
  6. .head(10) #前十
  7. .rate
  8. .sort_values(ascending=False) #为了画图排序
  9. .plot.barh()
  10. )

 #中美确诊人数发展

  1. (df.loc[df.Country.isin(['China','US']),['Country','Date','Confirmed']]
  2. .groupby(['Country','Date']) #分组
  3. .mean() #聚合
  4. .unstack() #展开
  5. .T
  6. .droplevel(0) #删除第一层索引
  7. .plot()
  8. )

 #中美死亡率对比

  1. #死亡率对比
  2. (df.loc[(df.Country.isin(['China','US']))&(df.Date==df.Date.max())]
  3. .assign(rate=df.Deaths/df.Confirmed) #死亡率
  4. .set_index('Country')
  5. .rate
  6. .plot
  7. .bar()
  8. )

中美每日死亡率对比

  1. (df.loc[(df.Country.isin(['China','US']))]
  2. .assign(rate=df.Deaths/df.Confirmed) #死亡率
  3. .groupby(['Country','Date'])
  4. .max()
  5. .rate
  6. .unstack()
  7. .T
  8. .plot(title='中美每日死亡率对比')
  9. )

 以上的代码基本都是使用了链式编码,都是一行就解决了数据处理到可视化的过程,很方便简洁。当然前提需要对pandas的基础函数要熟悉,可以多看看我之前的文章,不然可能看不懂......

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/234373
推荐阅读
相关标签
  

闽ICP备14008679号