1. # coding: utf-8
2.
3. # 在本次实验中我们分析 2018-06-28到2022-11-28中国每个月的进出口差额(亿美元),大城市失业率(%),消费平零售总额(亿人民币)这三组数据之间的关联
4.
5. # 首先我们导入包和数据,并输出数据
6.
7. # In[1]:
8.
9.
10. import numpy as np
11. import pandas as pd
12. import matplotlib.pyplot as plt
13. import seaborn as sns
14. from sklearn.preprocessing import StandardScaler
15. import statsmodels.formula.api as smf
16.
17. #读取工作簿和工作簿中的工作表
18.
19. spss=pd.read_excel('经济数据分析.xls')
20. print(spss)
21.
22.
23. # 输出数据信息
24.
25. # In[2]:
26.
27.
28. spss.info()
29. data=spss.copy()
30.
31.
32. # 以时间为索引进行描述性统计
33.
34. # In[3]:
35.
36.
37. spss.set_index('month',inplace=True)
38. data.drop('month',axis=1,inplace=True)
39. data.describe()
40.
41.
42. # 我们制作2018-06-28到2022-11-28的三项数据的折线图,以便直观的观察三者的变化
43.
44. # In[4]:
45.
46.
47. import matplotlib
48. #Sequence diagram of eight variables
49. column = data.columns.tolist()
50. fig = plt.figure(figsize=(12,3), dpi=128)
51. for i in range(3):
52. matplotlib.rcParams['font.sans-serif'] = ['KaiTi']
53. plt.subplot(1,3, i + 1)
54. sns.lineplot(data=spss[column[i]],lw=1)
55. plt.ylabel(column[i], fontsize=12)
56. plt.tight_layout()
57. plt.show()
58.
59.
60. # 我们观察到这些数据的变化有着类似的的趋势
61.
62. # 我们继续绘制三个数据的箱线图
63.
64. # In[5]:
65.
66.
67. #boxplot
68. column = data.columns.tolist()
69. fig = plt.figure(figsize=(12,3), dpi=128)
70. for i in range(3):
71. plt.subplot(1,3, i + 1)
72. sns.boxplot(data=data[column[i]], orient="v",width=0.5)
73. plt.ylabel(column[i], fontsize=12)
74. plt.tight_layout()
75. plt.show()
76.
77.
78. # 画核密度图
79.
80. # In[6]:
81.
82.
83.
84. column = data.columns.tolist()
85. fig = plt.figure(figsize=(12,3), dpi=128)
86. for i in range(3):
87. plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
88. plt.subplot(1,3, i + 1)
89. sns.kdeplot(data=data[column[i]],color='blue',shade= True)
90. plt.ylabel(column[i], fontsize=12)
91. plt.tight_layout()
92. plt.show()
93.
94.
95. # 从箱线图和核密度图可以看出数据的分布都还比较集中,没有很多异常点。
96.
97. # 下面画所有变量两两之间的散点图
98.
99. # In[7]:
100.
101.
102. sns.pairplot(data[column],diag_kind='kde')
103. plt.savefig('Scatter plot.jpg',dpi=256)
104.
105.
106. # 可以看到,几乎所有变量之间都有线性关系,人口有点像二次抛物线。
107. #
108. # 画皮尔逊相关系数热力图
109.
110. # In[8]:
111.
112.
113. #Pearson's correlation coefficient heatmap
114. corr = plt.figure(figsize = (10,10),dpi=128)
115. corr= sns.heatmap(data[column].corr(),annot=True,square=True)
116. plt.xticks(rotation=40)
117.
118.
119. # 很多X之间都存在的高的相关性,经典的最小二乘线性模型可能存在着严重的多重共线性。
120.
121. # 进行线性回归分析
122.
123. # In[9]:
124.
125.
126. import statsmodels.formula.api as smf
127. all_columns = "+".join(data.columns[1:])
128. print('x is :'+all_columns)
129. formula = '进出口差额亿美元~' + all_columns
130. print('The regression equation is :'+formula)
131.
132.
133. # In[10]:
134.
135.
136. results = smf.ols(formula, data=data).fit()
137. results.summary()
138.
139.
140. # 可以看到整体的拟合优度为100。在0.05的显著性水平下,人口和消费,还有净出口税收都对进出口差额亿美元的变动具有显著性的影响。