赞
踩
参考书目:《深入浅出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的基础函数要熟悉,可以多看看我之前的文章,不然可能看不懂......
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。