2021年7月27日 星期二

用Python爬出南投百香果生產成本以及報酬

農產品生產成本調查資料:https://data.coa.gov.tw/open_detail.aspx?id=lowkVAjACbtM
從上方這篇文章中的公式如下:
農家賺款 = 家族勞動報酬+自家土地地租+自有 資金資本利息
家族勞動報酬 = 損益 + 自家人工費
損益 = 粗收益 - 生產費用總計(第二種生產費)
粗收益 = 主產物價值 + 副產物價值 
第二種生產費 = 第一種生產費 + 地租 + 利息
第一種生產費 = 直接成本 + 間接成本 - 副產物價值

經由程式計算取得下列資訊:
  第二種成本 (35) : 2412.9058
  第一種成本 (34) : 1849.5991
   農家賺款 (33) : 1050746.6948
  家族勞動報酬(32) : 1034704.7943
  損   益 (31) : 921067.9429
  粗 收 益 (30) : 1721640.2956

1.首先要先瞭解資料的結構。
資料介接:https://data.coa.gov.tw/Service/OpenData/TransService.aspx?UnitId=lowkVAjACbtM
2.爬蟲基本程式架構,從上圖可以看出,取出"百香果"的Key是"PRODUCTION",程式設計如下:

1
2
3
4
5
6
7
import requests
import json
r = requests.get('https://data.coa.gov.tw/Service/OpenData/TransService.aspx?UnitId=lowkVAjACbtM')
text = json.loads(r.text)
for row in text:
    if '百香果' in row['PRODUCTNAME']:
        print (row)

執行結果:

3.雜亂的JSON格式,我們取出兩個重要的KEY,一個是'PRICE',另一個是'COSTITEM',設計程式如下:

1
2
3
4
5
6
7
import requests
import json
r = requests.get('https://data.coa.gov.tw/Service/OpenData/TransService.aspx?UnitId=lowkVAjACbtM')
text = json.loads(r.text)
for row in text:
    if '百香果' in row['PRODUCTNAME']:
        print (row['COSTITEM'],':', row['PRICE'])

執行結果:

4.居然發現成本資料有重複現象,重複部份在上圖反白部份,仔細檢查原始資料。



5.發現"COUNTYNAME",一個有標示"南投縣",一個是空字串,因此過濾程式如下:
1
2
3
4
5
6
7
8
import requests
import json
r = requests.get('https://data.coa.gov.tw/Service/OpenData/TransService.aspx?UnitId=lowkVAjACbtM')
text = json.loads(r.text)
for row in text:
    if '百香果' in row['PRODUCTNAME']:
        if row['COUNTYNAME'] == '南投縣':
            print (row['COSTITEM'],':', row['PRICE'])土

執行結果:

6.依照文章內的公式,只留幾個重要的資訊,其程式如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import requests
import json
r = requests.get('https://data.coa.gov.tw/Service/OpenData/TransService.aspx?UnitId=lowkVAjACbtM')
text = json.loads(r.text)
for row in text:
    if '百香果' in row['PRODUCTNAME']:
        if row['COUNTYNAME'] == '南投縣':
            if row['COSTITEM'] in ['   農家賺款 (33)',
                                   '  家族勞動報酬(32)',
                                   '  損   益 (31)',
                                   '  粗 收 益 (30)',
                                   '  第二種成本 (35)',
                                   '  第一種成本 (34)']:
                print (row['COSTITEM'],':', row['PRICE'])

執行結果:


沒有留言:

張貼留言