<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
資料來源:population_data.json,
先看一下資料長啥樣
[ { "Country Name": "Arab World", "Country Code": "ARB", "Year": "1960", "Value": "96388069" }, { "Country Name": "Arab World", "Country Code": "ARB", "Year": "1961", "Value": "98882541.4" }, 省略。。。。 ]
'''這個檔案實際上就是一個很長的Python列表,其中每個元素都是一個包含四個鍵的字典:
國家名、國別碼、年份以及表示人口數量的值。
我們只關心每個國家2010年的人口數量,因此我們首先編寫一個列印這些資訊的程式:'''
import json #將資料載入到一個列表中 filename= 'population_data.json' with open(filename) as f : pop_data = json.load(f) #列印每個國家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(): print(country_name + ":" + str(population)) rab World:357868000 Caribbean small states:6880000 East Asia & Pacific (all income levels):2201536674 East Asia & Pacific (developing only):1961558757 Euro area:331766000 Europe & Central Asia (all income levels):890424544 Europe & Central Asia (developing only):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設定世界地圖的樣式 ''' 在這個地圖中,根據人口將國家分組雖然很有效,但預設的顏色設定很難看。例如,在這裡,Pygal選擇了鮮豔的粉色 和綠色基色。下面使用Pygal樣式設定指令來調整顏色。我們也讓Pygal使用一種基色,但將指定該基色,並讓三個分組 的顏色差別更大 ''' ###根據人口數量將國家分組 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屬性 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')
以上就是python資料視覺化繪製世界人口地圖的詳細內容,更多關於python繪製世界人口地圖的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45