本文主要是給大家介紹了python大數據可視化制作全球人口地形圖的實例詳細說明,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家盡可能發展,盡早漲薪
序言
信息來源:population_data.json,
先看看數據信息長什么樣
[ { "CountryName":"ArabWorld", "CountryCode":"ARB", "Year":"1960", "Value":"96388069" }, { "CountryName":"ArabWorld", "CountryCode":"ARB", "Year":"1961", "Value":"98882541.4" }, 省去。。。 ]
'''這一個文檔實際上是1個比較長的Python目錄,在其中各個原素是一個包括4個鍵的詞典:
國家名、所在國碼、年代及其表明人口總數數值。
大家只關注各個國家2010年人口總數,所以我們最先撰寫1個打印出這些數據的流程:'''
importjson #將數據加載到了一個頁面上 filename='population_data.json' withopen(filename)asf: pop_data=json.load(f) #打印出各個國家2010年人口總數 forpop_dicinpop_data: ifpop_dic["Year"]=='2010': country_name=pop_dic['CountryName'] population=int(float(pop_dic['Value']))#population_data.json中的每一個鍵合值全是字符串數組。為處理這種人口統計,我們應該將表明人口總數的字符串數組轉化為數字值,因此大家應用函數公式int(): print(country_name+":"+str(population)) rabWorld:357868000 Caribbeansmallstates:6880000 EastAsia&Pacific(allincomelevels):2201536674 EastAsia&Pacific(developingonly):1961558757 Euroarea:331766000 Europe&CentralAsia(allincomelevels):890424544 Europe&CentralAsia(developingonly):405204000
獲得兩個字母的所在國碼
'''制作地圖前,還要處理數據信息存有的最后的問題。Pygal里的地圖設計專用工具規定數據信息為特殊的文件格式:用所在國碼表明我國,及其用數字表示人口總數。處理自然地理政冶數據信息時,常常需要使用好多個規范化所在國碼集。
population_data.json其中包含是指三個英文字母的所在國碼,但Pygal應用兩個字母的所在國碼。我們應該想盡辦法依據國家名獲得兩個字母的所在國碼。
Pygal所使用的所在國碼存放在控制模塊i18n(internationalization的簡稱)中。
詞典COUNTRIES蘊含的鍵合值分別是兩個字母的所在國碼和國家名。
要檢查這種所在國碼,可以從控制模塊i18n中導進這一個詞典,直接打印其鍵合值:'''
from pygal_maps_world.i18n import COUNTRIES for country_code in sorted(COUNTRIES.keys()): print(country_code,COUNTRIES[country_code]) ad Andorra ae United Arab Emirates af Afghanistan al Albania
為獲取國別碼,我們將編寫一個函數,它在COUNTRIES中查找并返回國別碼。
我們將這個函數放在一個名為country_codes的模塊中,以便能夠在可視化程序中導入它:
from pygal_maps_world.i18n import COUNTRIES def get_country_code(country_name): #根據指定的國家,返回Pygal使用的兩個字母的國別碼 for code,name in COUNTRIES.items(): if name==country_name: return code #如果沒有找到指定的國家,就返回None return None #打印每個國家2010年的人口數量 for pop_dic in pop_data: if pop_dic["Year"]=='2010': country_name=pop_dic['Country Name'] population=int(float(pop_dic['Value']))#population_data.json中的每個鍵和值都是字符串。為處理這些人口數據,我們需要將表示人口數量的字符串轉換為數字值,為此我們使用函數int(): code=get_country_code(country_name) if code: print(code+":"+str(population)) else: print('error-'+":"+str(population)) error-:357868000 error-:6880000 error-:2201536674 error-:1961558757 error-:331766000
導致顯示錯誤消息的原因有兩個。首先,并非所有人口數量對應的都是國家,有些人口數量對應的是地區(阿拉伯世界)和經濟類群(所有收入水平)。
其次,有些統計數據使用了不同的完整國家名(如Yemen,Rep.,而不是Yemen)。當前,我們將忽略導致錯誤的數據,看看根據成功恢復了的數據制作出的地圖是什么樣的。
制作世界地圖
import pygal_maps_world.maps#創建了一個Worldmap實例,并設置了該地圖的的title屬性 wm=pygal_maps_world.maps.World() wm.title='North,Central,and South America' ''' 方法add(),它接受一個標簽和一個列表,其中后者包含我們要突出的國家的國別碼。每次調用add()都將為指定的國家 選擇一種新顏色,并在圖表左邊顯示該顏色和指定的標簽。我們要以同一種顏色顯示整個北美地區,因此第一次調用add() 時,在傳遞給它的列表中包含'ca'、'mx'和'us',以同時突出加拿大、墨西哥和美國。接下來,對中美和南美國家做同樣 的處理。 ''' wm.add('North America',['ca','mx','us']) wm.add('Central America',['bz','cr','gt','hn','ni','pa','sv']) wm.add('South America',['ar','bo','br','cl','co','ec','gf', 'gy','pe','py','sr','uy','ve']) '''
方法render_to_file()創建一個包含該圖表的.svg文件,你可以在瀏覽器中打開它。輸出是一幅以不同顏色突出北美、
中美和南美的地圖
'''
wm.render_to_file('americas.svg')
繪制完整的世界人口地圖
'''要呈現其他國家的人口數量,需要將前面處理的數據轉換為Pygal要求的字典格式:鍵為兩個字母的國別碼,值為人口數量。
為此,在world_population.py中添加如下代碼:
import json #將數據加載到一個列表中 filename='population_data.json' with open(filename)as f: pop_data=json.load(f) def get_country_code(country_name): #根據指定的國家,返回Pygal使用的兩個字母的國別碼 for code,name in COUNTRIES.items(): if name==country_name: return code #如果沒有找到指定的國家,就返回None return None #創建一個包含人口數量是字典 cc_populations={} #打印每個國家2010年的人口數量 for pop_dic in pop_data: if pop_dic["Year"]=='2010': country_name=pop_dic['Country Name'] population=int(float(pop_dic['Value']))#population_data.json中的每個鍵和值都是字符串。為處理這些人口數據,我們需要將表示人口數量的字符串轉換為數字值,為此我們使用函數int(): code=get_country_code(country_name) if code: cc_populations[code]=population import pygal_maps_world.maps#創建了一個Worldmap實例,并設置了該地圖的的title屬性 wm=pygal_maps_world.maps.World() wm.title='world population in 2010,by country' wm.add('2010',cc_populations) wm.render_to_file('world_population.svg') 根據人口數量將國家分組 import json #將數據加載到一個列表中 filename='population_data.json' with open(filename)as f: pop_data=json.load(f) def get_country_code(country_name): #根據指定的國家,返回Pygal使用的兩個字母的國別碼 for code,name in COUNTRIES.items(): if name==country_name: return code #如果沒有找到指定的國家,就返回None return None #創建一個包含人口數量是字典 cc_populations={} #打印每個國家2010年的人口數量 for pop_dic in pop_data: if pop_dic["Year"]=='2010': country_name=pop_dic['Country Name'] population=int(float(pop_dic['Value']))#population_data.json中的每個鍵和值都是字符串。為處理這些人口數據,我們需要將表示人口數量的字符串轉換為數字值,為此我們使用函數int(): code=get_country_code(country_name) if code: cc_populations[code]=population ###根據人口數量將國家分3組 cc_pop_1,cc_pop_2,cc_pop_3={},{},{} for cc,pop in cc_populations.items(): if pop<10000000: cc_pop_1[cc]=pop elif pop<1000000000: cc_pop_2[cc]=pop else: cc_pop_3[cc]=pop import pygal_maps_world.maps#創建了一個Worldmap實例,并設置了該地圖的的title屬性 wm=pygal_maps_world.maps.World() wm.title='world population in 2010,by country' wm.add('0-10m',cc_pop_1) wm.add('10m-1bn',cc_pop_2) wm.add('>1bn',cc_pop_3) wm.render_to_file('world_population.svg')
依據Pygal設定游戲地圖的款式
在這個圖中,依據人口總數將我國分類雖然比較合理有效,但默認顏色調整好難看。比如,在這兒,Pygal選了鮮亮的粉色和綠色基本色。
下邊應用Pygal款式設定命令來調節色調。大家也讓Pygal應用一類基本色,但將特定該基本色,然后讓3個分類顏色區別更高
###依據Pygal設定游戲地圖的款式
'''
在這個圖中,依據人口總數將我國分類雖然比較合理有效,但默認顏色調整好難看。比如,在這兒,Pygal選了鮮亮的粉紅色
的綠色基本色。下邊應用Pygal款式設定命令來調節色調。大家也讓Pygal應用一類基本色,但將特定該基本色,然后讓3個分類
顏色區別更高
''' ###依據人口總數將我國分類 importjson #將數據加載到了一個頁面上 filename='population_data.json' with open(filename)as f: pop_data=json.load(f) def get_country_code(country_name): #根據指定的國家,返回Pygal使用的兩個字母的國別碼 for code,name in COUNTRIES.items(): if name==country_name: return code #如果沒有找到指定的國家,就返回None return None #創建一個包含人口數量是字典 cc_populations={} #打印每個國家2010年的人口數量 for pop_dic in pop_data: if pop_dic["Year"]=='2010': country_name=pop_dic['Country Name'] population=int(float(pop_dic['Value']))#population_data.json中的每個鍵和值都是字符串。為處理這些人口數據,我們需要將表示人口數量的字符串轉換為數字值,為此我們使用函數int(): code=get_country_code(country_name) if code: cc_populations[code]=population ###根據人口數量將國家分3組 cc_pop_1,cc_pop_2,cc_pop_3={},{},{} for cc,pop in cc_populations.items(): if pop<10000000: cc_pop_1[cc]=pop elif pop<1000000000: cc_pop_2[cc]=pop else: cc_pop_3[cc]=pop import pygal_maps_world.maps#創建了一個Worldmap實例,并設置了該地圖的的title屬性 from pygal.style import RotateStyle from pygal.style import LightColorizedStyle#加亮顏色主題 wm_style=RotateStyle('#336699',base_style=LightColorizedStyle) wm=pygal_maps_world.maps.World(style=wm_style) wm.title='world population in 2010,by country' wm.add('2010',cc_populations) wm.add('0-10m',cc_pop_1) wm.add('10m-1bn',cc_pop_2) wm.add('>1bn',cc_pop_3) wm.render_to_file('world_population.svg')
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家帶來幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129086.html
摘要:俗話說,不會使用工具來完成任務的都是進化不完全的表現,大數據時代,可視化已經深深鉆進我們的生活,使用可視化工具也變的相當普遍,今天我們來總結下當下可視化工具都有哪些。是一個地圖庫,主要面向數據可視化用戶。 俗話說,不會使用工具來完成任務的都是進化不完全的表現,大數據時代,可視化已經深深鉆進我們的生活,使用可視化工具也變的相當普遍,今天我們來總結下當下可視化工具都有哪些。 showImg...
摘要:水文分析實戰教程河流平均比降計算本章導讀河流比降指的是河流任意兩端點間的高程差與兩點間的水平距離之比值,簡單的概括為單位河長內的落差,其單位一般都是。讀者可以參考水文分析實戰教程河流提取與河網分級的做法去提取。 ArcGIS水文分析實戰教程(10)河流平均比降計算 本章導讀:河流比降指的是河流任意兩端點間的高程差與兩點間的水平距離之比值,簡單的概括為單位河長內的落差,其單位一般都是‰ ...
摘要:基于此,我爬取了淘寶上多條月餅的銷售數據,為大家展示了一幅漂亮的可視化大屏,解決大家心目中的問題。模塊的安裝與配置這次爬取淘寶,采用的是最簡單的方式控制瀏覽器進行自動化操作,中途只需要掃碼登陸一次,即可完成整個數據的爬取。 ...
由于項目的需要,一直苦于將多層數據集累加起來做成一個呈堆積狀的三維圖,有點類似于地形圖(實則熱力圖),但又不是地形圖。 背景 先說說項目背景,本菜雞是搞故障診斷的,所以免不了用上一些統計學的知識,看過之前我的Blog的都會發現, T 2 ...
摘要:這些功能和詞匯聽起來非常復雜,似乎對業務人員要求很高,但像網易有數這樣的敏捷可視化分析工具不僅具備這樣的能力,而且易學易用,業務人員只需簡單拖拽,就能輕松制作出兼具敏捷分析與精美展示的報告。 歡迎訪問網易云社區,了解更多網易技術產品運營經驗。 在回答小企業是否需要數據分析這個問題之前,不妨先想想下面兩個問題: 你在電腦上建過表格嗎? 你基于表格中的數據畫過柱形圖、餅狀圖、折線圖嗎? 可...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02