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