本週真的是漫長的一週,因為疫情的蔓延,我想大家可能都分流或居家上班,並且減少外出與不要的聚會,其實可以反思一下或許我們也可以利用這樣的時間沈靜自身,或是過去沒有時間學習可以因為這樣試著線上學習…等.
至於一些不必要的口水或是訊息,就請忽略,正面看待,同島一命,相信大家會正確的地方進行,多給醫護人員與前線人員加油!
很重要說三次!!!
減少外出與聚會,勤洗手,做好個人衛生!
減少外出與聚會,勤洗手,做好個人衛生!
減少外出與聚會,勤洗手,做好個人衛生!
本來畫地理資訊地圖是要放到後面才說,不過因為現在我就提前說明,之前已經畫完了直條圖與折線圖,各位可能覺得就是可以動啊,跟用Excel差不多,不過這次要來挑戰的就是畫一張台灣地圖出來,並且在上面標註台灣各縣市確診數量,相信大家在新聞上也會看到類似的圖卡,我們就來看看如何實現吧!
ps 這次也會用到讀取Excel功能喔!
資料來源: 民視
說明1.
本次我想找到台灣相關區域的案例,第一個想到是去CDC找,結果找很久才看到傳染病統計資料查訊系統 ,他出現的地圖是我們這次要做的,但我要拿的是RawData,於是點選下載,但結果下載長這樣:
並沒有像網頁上面可以標明縣市名稱:
於是乎我又想到可以到政府資料開放平臺去找,然後發現更新時間落在四月,若在疾病管制署資料開放平臺的開放資料及更慘落在2020:
最後找到民視製作的部分,我在手動將資料轉成Excel,當然也可以用OCR或爬蟲,不過本次主要說明地圖繪製,如果有比較即時的資料也可以讓我知道啊!
說明2.
由於之前有介紹過pyecharts是由百度所開發,所以不免而言會因為政治因素將台灣列為中國,再來就是有些地方會是簡體字樣,不過我們這邊不討論政治議題,單就資料繪圖進行分享.
開始畫圖吧!
1.目標:
2.準備Dataset
目前Dataset是由剛剛上面說的民視網頁抓下最新的20210521的各地感染人數
3.安裝額外套件
1 2 |
pip install pandas #處理數據用 pip install openpyxl #處理Excel用 |
4.引入套件
1 2 3 4 5 |
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.抓取地圖資訊
1 2 |
ssl._create_default_https_context = ssl._create_unverified_context register_url("https://echarts-maps.github.io/echarts-china-cities-js") |
6.讀取dataset與整理資料
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#讀取剛剛的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.由於本身地圖會是簡體,我們要轉換成繁體
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
NAME_MAP_DATA = { # "本來值": "欲變更的值" "连江县": "連江縣", "中国属钓鱼岛": "釣魚台", "金门县":"金門縣", "澎湖县":"澎湖縣", "基隆市":"基隆市", "新北市":"新北市", "台北市": "台北市", "桃园市": "桃園市", "新竹县":"新竹市", "新竹市":"新竹縣", "苗栗县":"苗栗縣", "南投县":"南投縣", "台中市":"台中市", "彰化县":"彰化縣", "云林县":"雲林縣", "嘉义市":"嘉義市", "嘉义县":"嘉義縣", "台南县":"台南市", "高雄县":"高雄市", "屏东县":"屏東縣", "台东县":"台東縣", "花莲县":"花蓮縣", "宜兰县":"宜蘭縣", } |
8.畫地圖摟!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#基本上跟之前畫直線圖與折現圖一樣,就不特別說明 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 給醫護鼓勵打氣也可以啊~