2019年12月9日 星期一

[ pyecharts ] 善用開放式資料,讀取果菜市場交易資料,製作統計圖表

近兩年來南開科技大學執行教育部「南投百香果資源永續之煉銀網平台」,用百香果故鄉南投縣埔里鎮合成里為題設計一系列Python程式設計教材百香果USR之Python程式設計教材」,其中有一篇文章"用Python來撰寫顯示今天百香果市場交易情形的程式",介紹如何使用requests以及json套件來取得當日百香果市場交易情形,其程式如下:
import requests
import json
r = requests.get('http://data.coa.gov.tw/Service/OpenData/FromM/FarmTransData.aspx')
text = json.loads(r.text)
for row in text:
    if '百香果' in row['作物名稱']:
        print ('交易日期:'+row['交易日期'])
        print ('作物名稱:'+row['作物名稱'])
        print ('市場名稱:'+row['市場名稱'])
        print ('平均價:'+str(row['平均價']))
        print ('交易量:'+str(row['交易量']))

2019年11月16曾介紹pyecharts套件的使用,在"初體驗! 使用pyecharts以水果交易行情為例"文章中,僅9行程式就能畫出台北一和台北二果菜場的交易,其程式如下:
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType

bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))

bar.add_xaxis(["椪柑", "蘋果 富士進口", "番石榴 珍珠芭", "香蕉", "木瓜 網室紅肉", "甜橙 柳橙", "火龍果 紅肉"])
bar.add_yaxis("台北一", [29.3, 51.5, 40.3, 21.6, 24.0, 61.5, 34.2])
bar.add_yaxis("台北二", [32.3, 51.4, 53.7, 24.7, 42.3, 23.4, 35.9])
bar.set_global_opts(title_opts=opts.TitleOpts(title="平均價", subtitle="元"))

bar.render()

從以上兩篇文章的程式即可以組合新的程式,程式技巧利用三個變數,分別來儲存X軸資料(作物名稱以及市場名場)以及兩個Y軸的資料(平均價和交易量),本範例的農作物改用玫瑰,其程式(黃底字是有改變的地方)如下:

import requests
import json
r = requests.get('http://data.coa.gov.tw/Service/OpenData/FromM/FarmTransData.aspx')
text = json.loads(r.text)
xaxis=[]
yaxis1=[]
yaxis2=[]
for row in text:
    if '玫瑰' in row['作物名稱']:
        print ('交易日期:'+row['交易日期'])
        print ('作物名稱:'+row['作物名稱'])
        print ('市場名稱:'+row['市場名稱'])
        print ('平均價:'+str(row['平均價']))
        print ('交易量:'+str(row['交易量']))
        xaxis.append(row['作物名稱']+row['市場名稱'])
        yaxis1.append(row['平均價'])
        yaxis2.append(row['交易量'])

from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType

bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))

bar.add_xaxis(xaxis)
bar.add_yaxis("平均價", yaxis1)
bar.add_yaxis("交易量", yaxis2)
bar.set_global_opts(title_opts=opts.TitleOpts(title="平均價", subtitle="元"))

bar.render()

執行結果:


沒有留言:

張貼留言