---
# System prepended metadata

title: 0509

---

# 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不熟練要多加練習，老師上課速度好快會有點追不上，所以自己要加強練習才會熟練
```

