世界人口數據的 JSON 檔案

世界人口數據的 JSON 檔案

前言

利用下載的世界人口的 JSON檔案,使用模組 pygal.maps.world 繪製世界地圖 ,點擊該國家會產生該國家人口註記。

大綱

世界人口數據的 JSON 檔案

世界人口有3個數據來源,因為可直接下載JSON檔案,所以本篇採用 World Population ReviewJSON數據直接下載 ,往下滾動到 2021 World Population ...處 : 

JSON檔案格式

直接使用 Chrome 瀏覽如下:

我們將採用相關欄位的鍵(key):值(value),內容如下:

  • "cca2": "US" =>二位字母國家代碼。
  • "name": "United States"=> 國家名稱。
  • "pop2020": "331002.651"=>人口數,單位千人。

範例 pythonPopulation-1.py : 篩選JSON檔案之2020年的人口數據,其中程式碼第12行 : 將字串轉浮點float,單位: 千人 * 1000 = 個人,再將浮點轉為為整數int。

# pythonPopulation-1.py
import json

fileName = 'population2020-WorldPopulationReview.json'
with open(fileName) as fileObj:
    getDatas = json.load(fileObj)   # 讀json檔案

for getData in getDatas:
    if getData["pop2020"] != None :  # 篩選2020年的人口數據
        countryName = getData["name"]   # 國家名稱
        countryCode = getData["cca2"]   # 國家代碼
        population = int(float(getData["pop2021"])* 1000) # 將字串轉為整數,單位: 人
        print('國家代碼 =', countryCode,
              ',國家名稱 =', countryName,
              ',人口數 =', population , "人")
    else:
        print(getData["name"], " 2020年沒有人口資料")

執行結果

國家代碼 = CN ,國家名稱 = China ,人口數 = 1444216107 人
國家代碼 = IN ,國家名稱 = India ,人口數 = 1393409038 人
國家代碼 = US ,國家名稱 = United States ,人口數 = 332915073 人
...........

國碼國名資訊模組 pygal.maps.world

此模組 pygal.maps.world 會產生相對國家名稱的二位國家代碼,請參考 這裡。安裝如下:

pip install pygal.maps.world

範例 pythonPopulation-2.py : 列出所有二位國家代碼與相對的國家名稱。

# pythonPopulation-2.py
from pygal.maps.world import COUNTRIES

for countryCode in sorted(COUNTRIES.keys()):
    print("國家代碼 :", countryCode, "  國家名稱 = ", COUNTRIES[countryCode])

執行結果

國家代碼 : ad 國家名稱 = Andorra
國家代碼 : ae 國家名稱 = United Arab Emirates
國家代碼 : af 國家名稱 = Afghanistan
...........

範例 pythonPopulation-3.py : 比較國家名稱,如果有不同處,會輸出 "名稱不吻合"。國碼資訊模組 pygal.maps.world與我們的人口檔案的國家名稱可能不同,以此程式來做檢視比較。

# pythonPopulation-3.py
import json
from pygal.maps.world import COUNTRIES

def getCountryCode(countryName):
    '''輸入國家名稱回傳國家代碼'''
    for dictCode, dictName in COUNTRIES.items():    # 搜尋國家與國家代碼字典
        if dictName == countryName:
            return dictCode                         # 如果找到則回傳國家代碼
    return None                                     # 找不到則回傳None

fileName = 'population2020-WorldPopulationReview.json'
with open(fileName) as fileNameObj:
    getDatas = json.load(fileNameObj)                     # 讀取人口數據json檔案

for getData in getDatas:
    if getData["pop2020"] != None :  # 篩選2020年的數據
        countryName = getData['name']       # 國家名稱
        countryCode = getCountryCode(countryName)
        population = int(float(getData['pop2020'])) # 人口數       
        if countryCode != None:
            print(countryCode, ":", population)     # 國家名稱相符
        else:
            print(countryName," 名稱不吻合:")       # 國家名稱不吻合

執行結果

ng : 206139
bd : 164689
Russia 名稱不吻合:
mx : 128932
...........

繪製世界地圖

模組 pygal.maps.world 主要功能其實是繪製世界地圖,首先,建立地圖物件 worldMapObj = pygal.maps.world.World()   # 建立世界地圖物件,有了物件後,可利用其物件屬性  title ,新增地圖標題名稱 worldMapObj.title = '台灣 世界地圖'  # 世界地圖標題,然後使用物件方法 add() 新增標記 worldMapObj.add('Taiwan',['tw']) # 標記台灣,最後將呈現的圖檔輸出為檔案  worldMapObj.render_to_file('output-pythonPopulation-4.svg')      # 儲存地圖檔案。

範例 pythonPopulation-4.py : 繪製世界地圖,標記台灣。

# pythonPopulation-4.py
import pygal.maps.world

worldMapObj = pygal.maps.world.World()         # 建立世界地圖物件
worldMapObj.title = '台灣 世界地圖'         # 世界地圖標題
worldMapObj.add('Taiwan',['tw'])                # 標記台灣
worldMapObj.render_to_file('output-pythonPopulation-4.svg')      # 儲存地圖檔案

執行結果

五大洲區域地圖和部分國家

範例 pythonPopulation-5.py : 繪製世界地圖,使用不同顏色區分五大洲區域,並標示區域內的幾個國家。

# pythonPopulation-5.py
import pygal.maps.world

worldMapObj = pygal.maps.world.World()                         # 建立世界地圖物件
worldMapObj.title = ' Asia, Europe, Africa, and North America' # 世界地圖標題
worldMapObj.add('Asia亞洲',['tw', 'cn', 'jp', 'th'])            # 標記Asia亞洲
worldMapObj.add('Europe歐洲',['fr', 'de', 'it'])                # 標記Europe歐洲
worldMapObj.add('Africa非洲',['eg', 'ug', 'ng'])                # 標記Africa非洲
worldMapObj.add('North America北美洲',['ca', 'us', 'mx'])       # 標記America北美洲
worldMapObj.add('Mid-South America中南美洲',['cr', 'co', 'br', 'ar']) # 標記Mid-South America中南美洲
worldMapObj.add('Australia澳洲',['au', 'nz'])             # 標記Australia澳洲
worldMapObj.render_to_file('output-pythonPopulation-5.svg')    # 儲存地圖檔案

執行結果

讓地圖呈現數據

可以在 add() 方法中加入第2個參數 鍵:值 = 國家代碼:人口數 。

範例 pythonPopulation-6.py : 讓地圖呈現數據,國家代碼:人口數。

# pythonPopulation-6.py
import pygal.maps.world

worldMapObj = pygal.maps.world.World()                # 建立世界地圖物件
worldMapObj.title = 'Populations in China/Japan/Thailand'   # 世界地圖標題
worldMapObj.add('Asia',{'tw':23816775,
                        'cn':1262645000,
                        'jp':126870000,
                        'th':63155029})       # 標記人口資訊
worldMapObj.render_to_file('output-pythonPopulation-6.svg') # 儲存地圖檔案

繪製世界人口資訊的地圖

首先,我們創建一個字典 dictData{} 將 countryCode國家代碼:population人口 的資料存入字典中,然後使用 add() 方法 帶入世界地圖中。

範例 pythonPopulation-7.py : 繪製世界地圖,將 countryCode國家代碼:population人口 的資料存入字典中,然後使用 add() 方法 帶入世界地圖中。

# pythonPopulation-7.py
import json
import pygal.maps.world
from pygal.maps.world import COUNTRIES

def getCountryCode(countryName):
    '''輸入國家名稱回傳國家代碼'''
    for dictCode, dictName in COUNTRIES.items():    # 搜尋國家與國家代碼字典
        if dictName == countryName:
            return dictCode                         # 如果找到則回傳國家代碼
    return None                                     # 找不到則回傳None

fileName = 'population2020-WorldPopulationReview.json'
with open(fileName) as fileNameObj:
    getDatas = json.load(fileNameObj)            # 讀取人口數據json檔案

dictData = {}                                       # 定義地圖使用的字典
for getData in getDatas:
    if getData['pop2020'] != None:                   # 篩選2020年的數據
        countryName = getData['name']       # 國家名稱
        countryCode = getCountryCode(countryName)
        population = int(float(getData["pop2020"])* 1000) # 將字串轉為整數,單位: 人
        if countryCode != None:
            dictData[countryCode] = population      # 代碼:人口數據加入字典

worldMap = pygal.maps.world.World()
worldMap.title = "World Population in 2020"
worldMap.add('Year 2020', dictData)
worldMap.render_to_file('output-pythonPopulation-7.svg')   # 儲存地圖檔案

範例 pythonPopulation-8.py : 繪製世界地圖,依據1億人口數做分類,將 countryCode國家代碼:population人口 的資料存入字典中,然後使用 add() 方法 帶入世界地圖中。

# pythonPopulation-8.py
import json
import pygal.maps.world
from pygal.maps.world import COUNTRIES

def getCountryCode(countryName):
    '''輸入國家名稱回傳國家代碼'''
    for dictCode, dictName in COUNTRIES.items():    # 搜尋國家與國家代碼字典
        if dictName == countryName:
            return dictCode                         # 如果找到則回傳國家代碼
    return None                                     # 找不到則回傳None

fileName = 'population2020-WorldPopulationReview.json'
with open(fileName) as fileNameObj:
    getDatas = json.load(fileNameObj)            # 讀取人口數據json檔案

dictData = {}                                       # 定義地圖使用的字典
for getData in getDatas:
    if getData['pop2020'] != None:                   # 篩選2020年的數據
        countryName = getData['name']       # 國家名稱
        countryCode = getCountryCode(countryName)
        population = int(float(getData["pop2020"])* 1000) # 將字串轉為整數,單位: 人
        if countryCode != None:
            dictData[countryCode] = population      # 代碼:人口數據加入字典

dict1, dict2 = {}, {}                               # 定義人口數分級的字典
for code, population in dictData.items():
    if population > 100000000:
        dict1[code] = population                    # 人口數大於1000000000
    else:
        dict2[code] = population                    # 人口數小於1000000000

worldMapObj = pygal.maps.world.World()
worldMapObj.title = "2020 世界人口地圖"
worldMapObj.add('Over 1,000,000,000', dict1)
worldMapObj.add('Under 1,000,000,000', dict2)
worldMapObj.render_to_file('output-pythonPopulation-8.svg')              # 儲存地圖檔案

執行結果



參考資料



特色、摘要,Feature、Summary:

關鍵字、標籤,Keyword、Tag:

  • Data-Mining,BigData,Web-Crawler,Json,Data-Science,

留言

這個網誌中的熱門文章

Ubuntu 常用指令、分類與簡介

iptables的觀念與使用

網路設定必要參數IP、netmask(遮罩)、Gateway(閘道)、DNS

了解、分析登錄檔 - log

Python 與SQLite 資料庫

Blogger文章排版範本

Pandas 模組

如何撰寫Shell Script

查詢指令或設定 -Linux 線上手冊 - man

下載網頁使用 requests 模組