此範例處理自動雨量站-雨量觀測資料 O-A0002-001¶
Data Source: CWB opendata
已下載xml或json檔案
from cwbplot import opdata
dfxml = opdata.read_xml("O-A0002-001.xml")
#會回傳pandas dataframe物件
dfjson = opdata.read_json("O-A0002-001.json")
#會回傳pandas dataframe物件
print(list(dfjson))
#header 如 ['time', 'stationId', 'locationName', 'lon', 'lat', 'lon_wgs84', 'lat_wgs84', 'ELEV', 'WDIR', 'WDSD', 'TEMP', 'HUMD', 'PRES', 'H_24R', 'H_FX', 'H_XD', 'H_FXT', 'D_TX', 'D_TXT', 'D_TN', 'D_TNT', 'CITY', 'CITY_SN', 'TOWN', 'TOWN_SN']
若想要全自動化,直接使用api
from cwbplot import opdata
dfjson = opdata.json_api("O-A0002-001","/home/staffid/cwbopdata/readme.api")
#會回傳pandas dataframe物件
#readme.api的內容為您於氣象局開放資料申請的api,我的類似CWB-????????-????-????-????-????????????
#?代表一個位數,可能是數字或英文字母
print(list(dfjson))
#header 如 ['time', 'lat', 'lon', 'locationName', 'stationId', 'ELEV', 'WDIR', 'WDSD', 'TEMP', 'HUMD', 'PRES', 'H_24R', 'H_FX', 'H_XD', 'H_FXT', 'D_TX', 'D_TXT', 'D_TN', 'D_TNT', 'CITY', 'CITY_SN', 'TOWN', 'TOWN_SN']
畫個圖
import matplotlib.pyplot as plt
from cwbplot import cwb_colorbar, opdata
from mpl_toolkits.basemap import Basemap
df = opdata.json_api("O-A0002-001","/home/staffid/cwbopendata/readme.api")
lat = df["lat"].astype(float).values
lon = df["lon"].astype(float).values
rain = df["latest_3days"].astype(float).values
obstime = df["time"]
norian = df[df["latest_3days"].astype(float) < 0.1]
norain_lat = norian["lat"].astype(float).values
norain_lon = norian["lon"].astype(float).values
plt.figure(figsize=(16,12))
m = Basemap(projection='merc',resolution="f",
llcrnrlon=117.5, llcrnrlat=21.5,
urcrnrlon=122.5, urcrnrlat=26)
m.drawcoastlines()
raincb = cwb_colorbar.rain()
m.scatter(norain_lon, norain_lat, marker="x", latlon = True, label="Rainfall small than 0.1" )
sct = m.scatter(lon, lat, c=rain, cmap = raincb["cmap"], norm=raincb["norm"], latlon=True)
cbar = plt.colorbar(sct)
cbar.set_label("Rainfall",size=14)
plt.title("Last 3 days rainfall " + obstime[0],fontsize=18)
plt.legend(loc="upper left",fontsize=14)
plt.savefig("O-A0002-001.png", format='png', bbox_inches='tight', dpi=250)
圖如下