本週真的是漫長的一週,因為疫情的蔓延,我想大家可能都分流或居家上班,並且減少外出與不要的聚會,其實可以反思一下或許我們也可以利用這樣的時間沈靜自身,或是過去沒有時間學習可以因為這樣試著線上學習…等.
至於一些不必要的口水或是訊息,就請忽略,正面看待,同島一命,相信大家會正確的地方進行,多給醫護人員與前線人員加油!
很重要說三次!!!
減少外出與聚會,勤洗手,做好個人衛生!
減少外出與聚會,勤洗手,做好個人衛生!
減少外出與聚會,勤洗手,做好個人衛生!
本來畫地理資訊地圖是要放到後面才說,不過因為現在我就提前說明,之前已經畫完了直條圖與折線圖,各位可能覺得就是可以動啊,跟用Excel差不多,不過這次要來挑戰的就是畫一張台灣地圖出來,並且在上面標註台灣各縣市確診數量,相信大家在新聞上也會看到類似的圖卡,我們就來看看如何實現吧!
ps 這次也會用到讀取Excel功能喔!
資料來源: 民視
說明1.
本次我想找到台灣相關區域的案例,第一個想到是去CDC找,結果找很久才看到傳染病統計資料查訊系統 ,他出現的地圖是我們這次要做的,但我要拿的是RawData,於是點選下載,但結果下載長這樣:
並沒有像網頁上面可以標明縣市名稱:
於是乎我又想到可以到政府資料開放平臺去找,然後發現更新時間落在四月,若在疾病管制署資料開放平臺的開放資料及更慘落在2020:
最後找到民視製作的部分,我在手動將資料轉成Excel,當然也可以用OCR或爬蟲,不過本次主要說明地圖繪製,如果有比較即時的資料也可以讓我知道啊!
說明2.
由於之前有介紹過pyecharts是由百度所開發,所以不免而言會因為政治因素將台灣列為中國,再來就是有些地方會是簡體字樣,不過我們這邊不討論政治議題,單就資料繪圖進行分享.
開始畫圖吧!
1.目標:
2.準備Dataset
目前Dataset是由剛剛上面說的民視網頁抓下最新的20210521的各地感染人數
3.安裝額外套件
pip install pandas #處理數據用 pip install openpyxl #處理Excel用
4.引入套件
import ssl #SSL連接使用 import pandas as pd #讀取Excel整理資料用 import pyecharts.options as opts from pyecharts.charts import Map #此次要用地圖 from pyecharts.datasets import register_url #抓地圖資訊
5.抓取地圖資訊
ssl._create_default_https_context = ssl._create_unverified_context
register_url("https://echarts-maps.github.io/echarts-china-cities-js")
6.讀取dataset與整理資料
#讀取剛剛的Excel,這就看您的Dataset放哪邊就設定哪邊,另外usercols表示每個cols上的第一個欄位
data = pd.read_excel(
"./dataset/UseFile/20210521全台Covid19感染數統計.xlsx",
usecols=["縣市","本土案例數"]
)
#因為剛有看到2.dataset部分,有些縣市我故意沒有填寫,這部分通常在處理資料稱為缺失值,所以要處理它,
#透過Fillna將它補成0
new_data = (data.fillna(value=0))
#將Dataset處理成pychart可以吃的樣子.
####
#[['連江縣', 0.0], ['釣魚台', 0.0], ['金門縣', 0.0], ['澎湖縣', 0.0], ['基隆市', 33.0], ['新北市', 916.0], ['台北市', 746.0], ['桃園市', 127.0], ['新竹市', 6.0], ['新竹縣', 2.0], ['苗栗縣', 1.0], ['南投縣', 2.0], ['台中市', 20.0], ['彰化縣', 73.0], ['雲林縣', 3.0], ['嘉義市', 0.0], ['嘉義縣', 0.0], ['台南市', 3.0], ['高雄市', 16.0], ['屏東縣', 1.0], ['台東縣', 0.0], ['花蓮縣', 0.0], ['宜蘭縣', 31.0]]
####
MAP_DATA=[]
for i in range(len(data)):
raw_data = []
raw_data.append(new_data['縣市'][i])
raw_data.append(new_data['本土案例數'][i])
MAP_DATA.append(raw_data)
7.由於本身地圖會是簡體,我們要轉換成繁體
NAME_MAP_DATA = {
# "本來值": "欲變更的值"
"连江县": "連江縣",
"中国属钓鱼岛": "釣魚台",
"金门县":"金門縣",
"澎湖县":"澎湖縣",
"基隆市":"基隆市",
"新北市":"新北市",
"台北市": "台北市",
"桃园市": "桃園市",
"新竹县":"新竹市",
"新竹市":"新竹縣",
"苗栗县":"苗栗縣",
"南投县":"南投縣",
"台中市":"台中市",
"彰化县":"彰化縣",
"云林县":"雲林縣",
"嘉义市":"嘉義市",
"嘉义县":"嘉義縣",
"台南县":"台南市",
"高雄县":"高雄市",
"屏东县":"屏東縣",
"台东县":"台東縣",
"花莲县":"花蓮縣",
"宜兰县":"宜蘭縣",
}
8.畫地圖摟!
#基本上跟之前畫直線圖與折現圖一樣,就不特別說明
map=(
Map(init_opts=opts.InitOpts(width="800px", height="800px"))
.add(
series_name="台灣Covid-19染疫狀況",
maptype="台湾", #這邊要注意,選擇地圖區域,有些地方要用簡體
data_pair=MAP_DATA, #主要將每個疫區的資料放入
name_map=NAME_MAP_DATA, #剛剛簡繁轉換的資料
is_map_symbol_show=False, #把小點關掉比較好看
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="台灣Covid-19染疫狀況",
subtitle="20210521統計",
),
tooltip_opts=opts.TooltipOpts(
trigger="item", formatter="{b}<br/>{c} 例"
),
#這邊主要將數字轉換成顏色,用顏色深淺角度來模擬數量,可以看到台北市、新北市就比較深色,因為感染人數較多
visualmap_opts=opts.VisualMapOpts(
min_=0,
max_=1000,
range_text=["High", "Low"],
is_calculable=True,
range_color=["lavenderblush", "lightpink", "hotpink", "deeppink", "mediumvioletred"],
),
)
)
map.render_notebook()
9.這樣就畫完摟!
按照往例寫在後頭:
身為一個IT與企業人,取之網路用之網路,也想為社會上盡一些力量,做點CSR(企業社會責任 Corporate Social Responsibility),透過我小小的力量,藉此拋磚引玉,我整理了相關視覺化資料簡報(目前約一百多頁)與怎麼畫圖表的程式碼都已經寫成Step by Step的Jupyter Notebook教學文件,有些會陸續在Blog說明,但若各位賢達也想給予鼓勵做些公益,歡迎到任何慈善公益團體捐款(E.g 罕見疾病、脊髓損傷、唐寶寶、愛貓愛狗…etc,比較小型的公益團體),讓愛心可以分散力量發揮出去,並且透過留言聯繫我,提供捐款證明,我將此份文件無償提供給您參考(文件會陸續更新,以當下最新版本提供).
ps 給醫護鼓勵打氣也可以啊~






