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

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


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

首先导入包

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

 中国经济发展分析

读取数据

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

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

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

 三个产业的时间变化图

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

 

 第一产业占GDP的比例变化

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

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

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

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

 

2000后GDP远多于2000前的GDP

计算每五年的GPD 的和

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

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

 


各国新冠疫情分析

读取数据

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

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

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

 #中国新增确诊趋势图

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

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

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

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

 #中美确诊人数发展

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

 #中美死亡率对比

#死亡率对比
(df.loc[(df.Country.isin(['China','US']))&(df.Date==df.Date.max())]
 .assign(rate=df.Deaths/df.Confirmed)    #死亡率
 .set_index('Country')
 .rate
 .plot
 .bar()
)

中美每日死亡率对比

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

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

  • 2
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阡之尘埃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值