世界人口數據的 JSON 檔案
世界人口數據的 JSON 檔案
前言
大綱
世界人口數據的 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') # 儲存地圖檔案
執行結果
參考資料
- 世界人口數據來源1 : World Population Review
- 世界人口數據來源2 : Population - Worldometer
- 世界人口數據來源3 : CSV format - United Nations Population Division
- World map — pygal 2.0.0 documentation
- ISO 3166-1國際標準 : 國家代碼,分為3種,即二位字母代碼(alpha-2)、三位字母代碼(alpha-3)、數字代碼(numeric)。其中,二位字母代碼適用於通常情況,三位字母代碼更接近國家名稱,而數字代碼則適用於非拉丁字母環境中,Taiwan : TW, TWN, 158
特色、摘要,Feature、Summary:
關鍵字、標籤,Keyword、Tag:
- Data-Mining,BigData,Web-Crawler,Json,Data-Science,
留言
張貼留言
Aron阿龍,謝謝您的留言互動!