[資料視覺化 Data Visualization]Part6 – 嚴重特殊傳染性肺炎Covid-19感染數地圖

本週真的是漫長的一週,因為疫情的蔓延,我想大家可能都分流或居家上班,並且減少外出與不要的聚會,其實可以反思一下或許我們也可以利用這樣的時間沈靜自身,或是過去沒有時間學習可以因為這樣試著線上學習…等.

至於一些不必要的口水或是訊息,就請忽略,正面看待,同島一命,相信大家會正確的地方進行,多給醫護人員與前線人員加油!

很重要說三次!!!

減少外出與聚會,勤洗手,做好個人衛生!

減少外出與聚會,勤洗手,做好個人衛生!

減少外出與聚會,勤洗手,做好個人衛生!

本來畫地理資訊地圖是要放到後面才說,不過因為現在我就提前說明,之前已經畫完了直條圖折線圖,各位可能覺得就是可以動啊,跟用Excel差不多,不過這次要來挑戰的就是畫一張台灣地圖出來,並且在上面標註台灣各縣市確診數量,相信大家在新聞上也會看到類似的圖卡,我們就來看看如何實現吧!

ps 這次也會用到讀取Excel功能喔!

資料來源: 民視

說明1.

本次我想找到台灣相關區域的案例,第一個想到是去CDC找,結果找很久才看到傳染病統計資料查訊系統 ,他出現的地圖是我們這次要做的,但我要拿的是RawData,於是點選下載,但結果下載長這樣:

CDC-Covid19資料集

並沒有像網頁上面可以標明縣市名稱:

CDC-Covid19網頁

於是乎我又想到可以到政府資料開放平臺去找,然後發現更新時間落在四月,若在疾病管制署資料開放平臺的開放資料及更慘落在2020:

data.gov-Covid19

疾病管制署資料開放平臺-Covid19

最後找到民視製作的部分,我在手動將資料轉成Excel,當然也可以用OCR或爬蟲,不過本次主要說明地圖繪製,如果有比較即時的資料也可以讓我知道啊!

說明2.

由於之前有介紹過pyecharts是由百度所開發,所以不免而言會因為政治因素將台灣列為中國,再來就是有些地方會是簡體字樣,不過我們這邊不討論政治議題,單就資料繪圖進行分享.

開始畫圖吧!

1.目標:

20210521台灣Covid19統計

2.準備Dataset

目前Dataset是由剛剛上面說的民視網頁抓下最新的20210521的各地感染人數

20200521台灣Covid19感染地區統計

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.這樣就畫完摟!

台灣Covid-19染疫狀況

 

按照往例寫在後頭:

身為一個IT與企業人,取之網路用之網路,也想為社會上盡一些力量,做點CSR(企業社會責任 Corporate Social Responsibility),透過我小小的力量,藉此拋磚引玉,我整理了相關視覺化資料簡報(目前約一百多頁)與怎麼畫圖表的程式碼都已經寫成Step by Step的Jupyter Notebook教學文件,有些會陸續在Blog說明,但若各位賢達也想給予鼓勵做些公益,歡迎到任何慈善公益團體捐款(E.g 罕見疾病、脊髓損傷、唐寶寶、愛貓愛狗…etc,比較小型的公益團體),讓愛心可以分散力量發揮出去,並且透過留言聯繫我,提供捐款證明,我將此份文件無償提供給您參考(文件會陸續更新,以當下最新版本提供).

ps 給醫護鼓勵打氣也可以啊~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *