# 0509 ### 球星收入作業 https://colab.research.google.com/drive/11I7-NYVEK_p56rXbGU8S4u_cbUSc3Pbi ``` !wget -O TaipeiSansTCBeta-Regular.ttf https://drive.google.com/uc?id=1eGAsTN1HBpJAkeVM57_C7ccp7hbgSz3_&export=download import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.font_manager import fontManager # 改style要在改font之前 # plt.style.use('seaborn') fontManager.addfont('TaipeiSansTCBeta-Regular.ttf') mpl.rc('font', family='Taipei Sans TC Beta') ``` ``` import pandas as pd import numpy as np import matplotlib.pyplot as plt dfIncome = pd.read_excel('/content/drive/MyDrive/__DataSet/001_Income_test.xlsx') dfIncome 讀取參考檔案 ``` ### 計算吉尼係數的作法(一) ``` dfLorenz=dfIncome[:] se=dfLorenz['Income'].sort_values() #家戶收入 incomes=[0] #戶數累積百分比 cumulativePercentage=[0] #所得累積百分比 cumulativeSum=[0] #戶數 n=se.count() #全體總收入 sum=se.sum() #暫存變數 cum=0 pr=0 for _income in se: incomes.append(_income) pr+=1 cum+=_income cumulativePercentage.append(pr/n) cumulativeSum.append(cum/sum) #計算曲線下的面積 #用integral代表面積 integral=0 print("x軸:",cumulativePercentage) print("y軸:",cumulativeSum) for i in range(1,n+1): #計算圖中梯型的面積 #梯型面積計算公式:(上底+下底)*高*2 #程式碼為 (cumulativeSum[i-1]+cumulativeSum[i])*(1/n)/2 #說明: #(cumulativeSum[i-1]+cumulativeSum[i])==>(上底+下底) #(1/n(戶數))==>高 integral+= (cumulativeSum[i-1]+cumulativeSum[i])*(1/n)/2 #畫出10個梯型給同學參考 # x = x[i]到x[i] , y = 0到y[i] plt.plot([cumulativePercentage[i],cumulativePercentage[i]],[0,cumulativeSum[i]]) #第一種算法的吉尼係數 #下圖為一個正方形大小為1*1,要計算的地方只有期中的一半 = 0.5 #一半的正方形-每個不同顏色梯形面積總和/一半的正方形(可參照標準吉尼係數公式) gini=(0.5-integral)/0.5 print(f'第一種算法的吉尼係數={gini:.4f}') #繪製全部人收入都一樣的情況 plt.plot([0,1],[0,1]) #繪製散佈圖 plt.plot(cumulativePercentage,cumulativeSum) #plt.scatter(x=cumulativePercentage,y=cumulativeSum,s=0.1) plt.xlabel(u'戶數累積百分比') #x座標說明 plt.ylabel(u'所得累積百分比') #y座標說明 plt.axis('square') plt.xlim(0,1) plt.ylim(0,1) print('羅倫茲曲線(Lorenz curve)') plt.show() x軸: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0] y軸: [0, 0.01, 0.03, 0.06, 0.1, 0.15, 0.21, 0.29, 0.4, 0.6, 1.0] 第一種算法的吉尼係數=0.5300 羅倫茲曲線(Lorenz curve) ``` ![](https://i.imgur.com/5xKZAQ0.jpg) ### 計算吉尼係數的作法(二) ``` #第二種為積分,利用積分算出上方圖每個不同顏色梯形面積總和,再套入標準吉尼係數公式 gini=(0.5-np.trapz(x=cumulativePercentage,y=cumulativeSum))/0.5 print(f'第二種算法的吉尼係數={gini:.4f}') 第二種算法的吉尼係數=0.5300 ``` ### 計算吉尼係數的作法(三) ``` avg=0 s=0 #========請看圖1 for i in range(1,n+1): s+=incomes[i] #收入平均 avg=s/n s1=(n+1)*s #=========================== #==========請看圖2 s=0 for i in range(1,n+1): s+=(n-i+1)*incomes[i] s2=2*s #================= #============原圖g公式 g=(2/(n*(n-1))) * (s1-s2) #=========原圖G(Y)公式 gini=g/(2*avg) print(f'第三種算法的吉尼係數={gini:.4f}') 第三種算法的吉尼係數=0.5889 ``` ![](https://i.imgur.com/8ID6tzh.jpg) ``` 用excel製作羅倫茲曲線還有計算吉尼斯係數在應用到程式裡面 ``` #### 心得 ``` excel不熟練要多加練習,老師上課速度好快會有點追不上,所以自己要加強練習才會熟練 ```
{"metaMigratedAt":"2023-06-17T00:32:45.708Z","metaMigratedFrom":"Content","title":"0509","breaks":true,"contributors":"[{\"id\":\"4dfebb48-62e3-4093-b22e-bde00bb0bc86\",\"add\":2828,\"del\":2}]"}
Expand menu