1. 程式人生 > >用Python分析國民生產總值

用Python分析國民生產總值

  今天學習Python的matplotlib,書上的一道例題感覺寫的很好(黃紅梅的Python資料分析與應用),就是

利用matplotlib的各種圖來對2000-2017年季度生產總值進行分析,這道題確實是學習用圖分析資料的一道經典

題,於是我根據書上的程式碼和自己的理解在jupyter上敲了一下,並做了總結,貼在下面,方便後序的學習和使用

 

1 首先把資料檔案導進來,然後大概瞭解資料檔案裡面有啥內容,這是檔案的連結,有需要的朋友可以下載來學習使用

https://files.cnblogs.com/files/henuliulei/%E5%9B%BD%E6%B0%91%E7%BB%8F%E6%B5%8E%E6%A0%B8%E7%AE%97%E5%AD%A3%E5%BA%A6%E6%95%B0%E6%8D%AE.zip

然後再繪製散點圖,下面是以第一季度繪製的,程式碼如下

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'#設定中文顯示,否則可能無法顯示中文或者是各種字元錯亂
plt.rcParams['axes.unicode_minus']=False
data=np.load("D:/國民經濟核算季度資料.npz")#載入資料
print(data)#這時的data是資料物件
print(data.keys())#該資料物件是個字典,所以先獲取他的key值
print(data['columns'])#看一下key值裡面有什麼,


print(data['values'])#看一下value值裡面有什麼,
name=data['columns']
values=data['values']
plt.figure(figsize=(8,7))
plt.scatter(values[:,0],values[:,2],marker='o')#以資料的第零列做x軸,第三列做y軸,來描繪散點圖
plt.xlabel('年份');
plt.ylabel('生產總值(億元)');
plt.ylim((0,225000))
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)#此時取得值都是第一季度的

plt.title('2000-2017年季度生產總值散點圖')
plt.savefig('D:/2000-2017年季度生產總值散點圖.png')#注意要先儲存再show
plt.show()#下面是得到的結果

可以很清晰看出資料裡面大致是啥東西。

2: 再如下面是分析的第一二三產業的的國民生產總值,程式碼如下

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'#設定中文顯示,否則可能無法顯示中文或者是各種字元錯亂
plt.rcParams['axes.unicode_minus']=False
data=np.load("D:/國民經濟核算季度資料.npz")#載入資料
plt.figure(figsize=(8,7))
plt.scatter(values[:,0],values[:,3],marker='o',c='red')#下面三類是繪製的第一二三產業的增加值
plt.scatter(values[:,0],values[:,4],marker='D',c='blue')
plt.scatter(values[:,0],values[:,5],marker='v',c='yellow')
plt.xlabel('年份');
plt.ylabel('生產總值(億元)');
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)#此時取得值都是第一季度的
plt.title('2000-2017年季度生產總值散點圖')
plt.legend(['第一產業','第二產業','第三產業'])
plt.savefig('D:/2000-2017年季度生產總值散點圖.png')#注意要先儲存再show
plt.show()

其實畫圖並不是目的,真正的目的是通過這些圖來進行資料分析,獲取我們要找到的東西

比如上面的圖我們可以得到:第一季度增長平緩,第三季度呈現指數增長,第二季度每年會根據季度呈現指數增長。總體來看,我國近18年的各個產業都在持續增長中,

並且第二和第三產業的增長幅度比較大,18年增長了400%以上。這些結論性的東西才是我們最終的目的。

3 下面是折現圖分析第一季度

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'#設定中文顯示,否則可能無法顯示中文或者是各種字元錯亂
plt.rcParams['axes.unicode_minus']=False
data=np.load("D:/國民經濟核算季度資料.npz")#載入資料
plt.figure(figsize=(8,7))
plt.plot(values[:,0],values[:,2],color='r',linestyle='--')
plt.xlabel('年份');
plt.ylabel('生產總值(億元)');
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)#此時取得值都是第一季度的
plt.title('2000-2017年季度生產總值折現圖')
plt.savefig('D:/2000-2017年季度生產總值散點圖.png')#注意要先儲存再show
plt.show()

 

 散點圖可以反映x和y軸(特性)的相關關係

而繪製折線圖可以瞭解特性之間的趨勢關係

4點線圖(其實就是改變marker)

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
data=np.load("D:/國民經濟核算季度資料.npz")#載入資料
plt.figure(figsize=(8,7))
plt.plot(values[:,0],values[:,2],color='r',linestyle='--',marker='s')#plot繪製點線圖
plt.xlabel('年份',fontsize=10);
plt.ylabel('生產總值(億元)',fontsize=20);
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2007年各季度國民生產總值點線圖')
plt.savefig('D:/a4.png')
plt.show()

有時可能預設的圖片字型大小可能不符合要求,只需要用fontsize去改變大小即可

5:下面繪製2000-2017年各產業季度生產總值折線圖

plt.plot(values[:,0],values[:,3],'bs-')#第三個引數的含義是顏色blue點的形狀正方形線的型別是實線-
plt.plot(values[:,0],values[:,4],'ro-.')
plt.plot(values[:,0],values[:,5],'gh--')
plt.xlabel('年份',fontsize=15);
plt.ylabel('生產總值(億元)',fontsize=20);
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2007年各季度國民生產總值折線圖')
plt.legend(['第一季度','第二季度','第三季度'])
plt.savefig('D:/a4.png')
plt.show()

 

同時把三條線加到同一張圖片上,同時每個圖片設定各自的屬性(顏色,點的形狀,線性)

注意要先繪製圖形,再新增圖例(先plot再legend)否則圖列顯示不出來。同理應該先儲存再show()

6:下面是直方圖

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
data=np.load("D:/國民經濟核算季度資料.npz")#載入資料
plt.figure(figsize=(8,7))
name=data['columns']
values=data['values']
plt.bar(range(3),values[-1,3:6],width=0.5)#-1指的是最後一行2017,第一個引數是下標位置,第二個是對應的y值,後一個是寬度,預設為0.8,還可以自己設定顏色
plt.xlabel('年份',fontsize=15);
plt.ylabel('生產總值(億元)',fontsize=20);
plt.xticks(range(3),['第一產業','第二產業','第三產業'])
plt.title('2017年第一季度國民生產總值直方圖')

plt.savefig('D:/a4.png')
plt.show()

呼叫plt.bar方法獲取直方圖,

直方圖容易分析數字佔比關係

7:下面是餅圖的使用

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
data=np.load("D:/國民經濟核算季度資料.npz")#載入資料
plt.figure(figsize=(8,7))
name=data['columns']
values=data['values']
label=['第一產業','第二產業','第三產業']
explode=[0.1,0.5,0.03]#設定指定項距離圓心的距離為N 倍的半徑
plt.pie(values[-1,3:6],explode=explode,labels=label,autopct='%1.1f%%')
plt.title('2017年第一季度各產業國民生產總值直方圖')
plt.savefig('D:/a4.png')
plt.show()

 

 通過explode改變每份圖距離圓心的距離,該距離為半徑的指定倍數,也可以通過radius=數值來設定半徑的大小

餅圖可以方便看出佔比

8:下面介紹箱線圖的使用

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
data=np.load("D:/國民經濟核算季度資料.npz")#載入資料
plt.figure(figsize=(8,7))
name=data['columns']
values=data['values']
label=['第一產業','第二產業','第三產業']
gdp=(list(values[:,3]),list(values[:,4]),list(values[:,5]))
plt.boxplot(gdp,notch=True,labels=label,meanline=True)#第一個引數是資料,第二個引數是是否帶有缺口,第三個引數是標籤,第四個引數是是否帶有均值線
plt.title('2017年第一季度各產業國民生產總值箱線圖')
plt.savefig('D:/a4.png')
plt.show()

 

可以看出第一產業某個季度有異常值,第三季度增速大,而且資料前半部分相對密集。
總結:通過matplotlib對國民生產總值分析,可以讓我們更快的瞭解對其中繪圖方法的使用的瞭解
。且無論是哪種繪圖方法都不要忘記對最種的結果進行分析,獲取我們所要的結論。