5.1.0 要点
-
Python基本操作
print()
函数
-
Pandas程序包
-
数据序列的基本运算
.add() # 加 .sub() # 减 .mul() # 乘 .div() # 除 .pow() # 指数
-
数据序列的差分与平移:一阶差分
.diff(1)
,数据平移.shift(1)
-
-
Matplotlib程序包
- 绘制折线图:
plt.plot()
- 绘制折线图:
5.1.1 题目
根据国家统计局公布的《中国统计年鉴2021》(点击打开),查询中国1978-2020年(按当年价格计算)国内生产总值(GDP),以及国内生产总值指数(1978年=100),然后计算并画图展示:
- 1978-2020年实际国内生产总值(1978年=100);
- 1979-2020年每年实际国内生产总值的增长率;
- 中国1979-2020年实际国内生产总值的平均增长率,以及对应的标准差。
操作提示
1.收集数据:《中国统计年鉴2021》表3-1,表3-5,手动输入excel文件
2.计算实际GDP公式:(按当年价格计算的)国内生产总值/国内生产总值指数(1978=100)*100
3.计算实际GDP增长率公式:(当年实际GDP-上年实际GDP)/上年实际GDP*100
5.1.2 代码
# 导入程序包
import pandas as pd
import matplotlib.pyplot as plt
import ssl
# 禁用SSL证书校验
ssl._create_default_https_context = ssl._create_unverified_context
# 导入数据(在线数据)
df = pd.read_excel(r'https://cdn.seit2019.xyz/data/econometrics/GDP.xlsx')
# 展示数据
print(df, "\n")
# 定义数据序列
gdp = df["国内生产总值(当年价格,亿元)"]
gdp_index = df["GDP指数(1978=100)"]
# 计算实际GDP
# .div()序列相除
real_gdp = gdp.div(gdp_index.div(100))
print("实际GDP序列:")
print(real_gdp, "\n")
# 计算实际GDP增长率
# .diff(1)一阶差分
# .shift(1)行数据向下平移一格,滞后一阶
real_gdp_added = real_gdp.diff(1)
real_gdp_shift = real_gdp.shift(1)
growth = real_gdp_added.div(real_gdp_shift)
print("实际GDP增长率:")
print(growth, "\n")
# 计算平均增长率和标准差
growth_mean = growth.mean()
growth_std = growth.std()
print("平均增长率为:")
print(growth_mean.round(5), "\n")
print("平均增长率的标准差为:")
print(growth_std.round(5), "\n")
# 绘图:设置绘图格式,支持汉字
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 绘图:定义变量
x = df["年度"]
y1 = gdp.div(10000)
y2 = real_gdp.div(10000)
y3 = growth
# 绘图:名义GDP
plt.plot(x, y1, c='blue')
plt.title('中国1978-2021年名义GDP(单位:万亿元)', fontsize='xx-large', fontweight='bold')
plt.show()
# 绘图:实际GDP
plt.plot(x, y2, c='green')
plt.title('中国1978-2021实际GDP(1978=100,单位:万亿元)', fontsize='xx-large', fontweight='bold')
plt.show()
# 绘图:实际GDP增长率
plt.plot(x, y3, c='black')
plt.title('中国1978-2021年实际GDP增长率', fontsize='xx-large', fontweight='bold')
plt.show()
5.1.3 代码解析
导入程序包
import pandas as pd
import matplotlib.pyplot as plt
说明:
pandas
:Python数据处理最常用的程序包matplotlib
:Python绘图常用程序包import pandas as pd
:表示将pandas程序包导入,并简化命名为:pd
import matplotlib.pyplot as plt
:表示将matplotlib
程序包中的pyplot
模块导入,并简化命名为:plt
- 上述程序包导入和简化命名方式,是Python编程通用的方式。为了便于代码阅读和分享,建议保持不变。
导入数据
df = pd.read_excel(r'https://cdn.seit2019.xyz/data/econometrics/GDP.xlsx')
说明:
- 功能:调用
pandas
程序包中的read_excel()
函数,将链接中数据导入,并命名为变量df
- 变量
df
中,数据以DataFrame格式存储数据。 - DataFrame是pandas支持的表格型数据格式,类似excel。
- 关于DataFrame,详情参考:Pandas 数据结构 – DataFrame
- 为了便于教程分享,这里采用在线数据。
- 详细的数据导入与导出,请参考:2.2 Python数据导入与导出
展示数据
print(df, "\n")
运行结果:
说明:
- 功能:显示名称为
df
的变量,然后回车,换行。 print()
是python显示输出函数,可以将变量,数据,运行结果等以文本的方式显示在程序运行窗口。”\n"
:表示回车、换行,其功能是:将前后两次显示的结果以空行隔开。
定义数据序列
gdp = df["国内生产总值(当年价格,亿元)"]
gdp_index = df["GDP指数(1978=100)"]
说明:
- 将变量
df
中名称为“国内生产总值(当年价格,亿元)”
的列,赋值给变量gdp
- 将变量
df
中名称为“GDP指数(1978=100)”
的列,赋值给变量gdp_index
计算实际GDP
real_gdp = gdp.div(gdp_index.div(100))
print("实际GDP序列:")
print(real_gdp, "\n")
运行结果:
说明:
.div()
:序列除以()中的变量或数值。pandas
中常用序列计算:加.add()
,减.sub()
,乘.mul()
,除.div()
,指数幂.pow()
- 更多序列计算,请参考:pandas 求值计算
gdp_index.div(100)
:gdp_index
序列除以100
计算实际GDP增长率
real_gdp_added = real_gdp.diff(1)
real_gdp_shift = real_gdp.shift(1)
growth = real_gdp_added.div(real_gdp_shift)
print("实际GDP增长率:")
print(growth, "\n")
运行结果:
说明:
.diff(1)
:对序列进行一阶差分.shift(1)
:将行数据向下平移一格,即滞后一阶
计算平均增长率和标准差
growth_mean = growth.mean()
growth_std = growth.std()
print("平均增长率为:")
print(growth_mean.round(5), "\n")
print("平均增长率的标准差为:")
print(growth_std.round(5), "\n")
运行结果:
说明:
.mean()
:计算序列的均值.std()
:计算序列的标准差.round(5)
:变量取值保留小数点后5位
绘图:设置绘图格式,支持汉字
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
说明:
Matplotlib
默认不支持中文。- 如果需要在图形中显示中文字符,请在绘图前加入上述代码。
绘图:定义变量
x = df["年度"]
y1 = gdp.div(10000)
y2 = real_gdp.div(10000)
y3 = growth
说明:名义GDP和实际GDP除以10000,将原单位“亿元”转换为“万亿元”。
绘图:名义GDP
plt.plot(x, y1, c='blue')
plt.title('中国1978-2021年名义GDP(单位:万亿元)', fontsize='xx-large', fontweight='bold')
plt.show()
运行结果:
说明:
plt.plot()
:调用plt
中plot()
函数,绘制折线图c='blue'
:设置折线颜色为蓝色plt.title()
:调用plt
中title()
函数,设置图形的标题fontsize='xx-large'
:设置标题字号。其他字号:'large'
,'x-large'
fontweight='bold'
:设置标题字号加粗
绘图:实际GDP
plt.plot(x, y2, c='green')
plt.title('中国1978-2021实际GDP(1978=100,单位:万亿元)', fontsize='xx-large', fontweight='bold')
plt.show()
运行结果:
说明:
plt.plot()
:调用plt
中plot()
函数,绘制折线图c='green'
:设置折线颜色为绿色plt.title()
:调用plt
中title()
函数,设置图形的标题fontsize='xx-large'
:设置标题字号。其他字号:'large'
,'x-large'
fontweight='bold'
:设置标题字号加粗
绘图:实际GDP增长率
plt.plot(x, y3, c='black')
plt.title('中国1978-2021年实际GDP增长率', fontsize='xx-large', fontweight='bold')
plt.show()
运行结果:
说明:
plt.plot()
:调用plt
中plot()
函数,绘制折线图c='black'
:设置折线颜色为黑色plt.title()
:调用plt
中title()
函数,设置图形的标题fontsize='xx-large'
:设置标题字号。其他字号:'large'
,'x-large'
fontweight='bold'
:设置标题字号加粗