数据可视化:世界银行数据(1960-2017)
數據可視化:世界銀行數據(1960-2017)
我選擇并下載了數據集The World Bank Data by Indicators 1960-2017用于這次的作業,并選擇 Jupyter Notebooks (Python) 作為我的可視化工具。
這個數據集十分龐大,但卻很結構化(以表格的形式組織),并且這個數據集包含超過20個被清洗過的數據集。我選擇了climate-change和health這兩個數據集作為探索性分析所用的數據。如今,Python為使用者提供了很多優秀的計算和可視化的工具,例如NumPy、Pandas、Matplotlib和Pyecharts。
1. 二氧化碳排放量
在文件climate-change.csv中包含了世界各國從1960年至2014年的各種溫室氣體的排放量。
為了探究二氧化碳這種溫室氣體的排放情況,我決定先將世界主要國家的二氧化碳排放量進行可視化。
首先,先對數據進行選擇和清洗,例如:選擇國家、修改或剔除明顯錯誤的數據:
import pandas as pd import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = Falseraw_data = pd.read_csv('climate-change.csv') dismiss_years = [1960, 1970, 1980, 1990]# 中國數據 China_CO2_emission_data = raw_data.loc[raw_data['Country Name'] == 'China',['Country Name', 'Year', 'CO2 emissions (kt)']] China_CO2_emission_data = China_CO2_emission_data.loc[China_CO2_emission_data['CO2 emissions (kt)'] != 0] for year in dismiss_years:China_CO2_emission_data = China_CO2_emission_data.loc[China_CO2_emission_data['Year'] != year] China_CO2_emission_data.sort_values('Year', inplace=True)# 美國數據 US_CO2_emission_data = raw_data.loc[raw_data['Country Name'] == 'United States',['Country Name', 'Year', 'CO2 emissions (kt)']] US_CO2_emission_data = US_CO2_emission_data.loc[US_CO2_emission_data['CO2 emissions (kt)'] != 0] for year in dismiss_years:US_CO2_emission_data = US_CO2_emission_data.loc[US_CO2_emission_data['Year'] != year] US_CO2_emission_data.sort_values('Year', inplace=True)# 印度數據 India_CO2_emission_data = raw_data.loc[raw_data['Country Name'] == 'India',['Country Name', 'Year', 'CO2 emissions (kt)']] India_CO2_emission_data = India_CO2_emission_data.loc[India_CO2_emission_data['CO2 emissions (kt)'] != 0] for year in dismiss_years:India_CO2_emission_data = India_CO2_emission_data.loc[India_CO2_emission_data['Year'] != year] India_CO2_emission_data.sort_values('Year', inplace=True)# 日本數據 Japan_CO2_emission_data = raw_data.loc[raw_data['Country Name'] == 'Japan',['Country Name', 'Year', 'CO2 emissions (kt)']] Japan_CO2_emission_data = Japan_CO2_emission_data.loc[Japan_CO2_emission_data['CO2 emissions (kt)'] != 0] for year in dismiss_years:Japan_CO2_emission_data = Japan_CO2_emission_data.loc[Japan_CO2_emission_data['Year'] != year] Japan_CO2_emission_data.sort_values('Year', inplace=True)# 英國數據 UK_CO2_emission_data = raw_data.loc[raw_data['Country Name'] == 'United Kingdom',['Country Name', 'Year', 'CO2 emissions (kt)']] UK_CO2_emission_data = UK_CO2_emission_data.loc[UK_CO2_emission_data['CO2 emissions (kt)'] != 0] for year in dismiss_years:UK_CO2_emission_data = UK_CO2_emission_data.loc[UK_CO2_emission_data['Year'] != year] UK_CO2_emission_data.sort_values('Year', inplace=True)# 法國數據 France_CO2_emission_data = raw_data.loc[raw_data['Country Name'] == 'France',['Country Name', 'Year', 'CO2 emissions (kt)']] France_CO2_emission_data = France_CO2_emission_data.loc[France_CO2_emission_data['CO2 emissions (kt)'] != 0] for year in dismiss_years:France_CO2_emission_data = France_CO2_emission_data.loc[France_CO2_emission_data['Year'] != year] France_CO2_emission_data.sort_values('Year', inplace=True)# 俄羅斯數據 Russia_CO2_emission_data = raw_data.loc[raw_data['Country Name'] == 'Russian Federation',['Country Name', 'Year', 'CO2 emissions (kt)']] Russia_CO2_emission_data = Russia_CO2_emission_data.loc[Russia_CO2_emission_data['CO2 emissions (kt)'] != 0] for year in dismiss_years:Russia_CO2_emission_data = Russia_CO2_emission_data.loc[Russia_CO2_emission_data['Year'] != year] Russia_CO2_emission_data.sort_values('Year', inplace=True)# 德國數據 Germany_CO2_emission_data = raw_data.loc[raw_data['Country Name'] == 'Germany',['Country Name', 'Year', 'CO2 emissions (kt)']] Germany_CO2_emission_data = Germany_CO2_emission_data.loc[Germany_CO2_emission_data['CO2 emissions (kt)'] != 0] for year in dismiss_years:Germany_CO2_emission_data = Germany_CO2_emission_data.loc[Germany_CO2_emission_data['Year'] != year] Germany_CO2_emission_data.sort_values('Year', inplace=True)然后,對世界主要國家的二氧化碳排放量進行可視化:
plt.close('all') plt.figure(figsize=(10.0, 8.0))China_line = plt.plot(China_CO2_emission_data.loc[:,['Year']],China_CO2_emission_data.loc[:,['CO2 emissions (kt)']],lw=2, ls='-', color='red', label='中國')US_line = plt.plot(US_CO2_emission_data.loc[:,['Year']],US_CO2_emission_data.loc[:,['CO2 emissions (kt)']],lw=2, ls='-', color='blue', label='美國')India_line = plt.plot(India_CO2_emission_data.loc[:,['Year']],India_CO2_emission_data.loc[:,['CO2 emissions (kt)']],lw=2, ls='-', color='green', label='印度')Russia_line = plt.plot(Russia_CO2_emission_data.loc[:,['Year']],Russia_CO2_emission_data.loc[:,['CO2 emissions (kt)']],lw=2, ls='-', color='pink', label='俄羅斯')Japan_line = plt.plot(Japan_CO2_emission_data.loc[:,['Year']],Japan_CO2_emission_data.loc[:,['CO2 emissions (kt)']],lw=2, ls='-', color='purple', label='日本')Germany_line = plt.plot(Germany_CO2_emission_data.loc[:,['Year']],Germany_CO2_emission_data.loc[:,['CO2 emissions (kt)']],lw=2, ls='-', color='black', label='德國')UK_line = plt.plot(UK_CO2_emission_data.loc[:,['Year']],UK_CO2_emission_data.loc[:,['CO2 emissions (kt)']],lw=2, ls='-', color='brown', label='英國')France_line = plt.plot(France_CO2_emission_data.loc[:,['Year']],France_CO2_emission_data.loc[:,['CO2 emissions (kt)']],lw=2, ls='-', color='orange', label='法國')# 從1961年到2014年 plt.title('世界主要國家的二氧化碳排放量') plt.xlabel('年份') plt.ylabel('二氧化碳排放量/kt') plt.xlim(1960, 2015) plt.ylim(0, 1.2e7) plt.grid(which='major', axis='both', color='black', linestyle='--', alpha=0.2) plt.legend(loc='upper left')plt.savefig('img1.jpg') plt.show()可視化結果:
可以發現,有的西方國家的二氧化碳排放量比較穩定,有的西方國家的二氧化碳排放量在上世紀逐漸增長,到了本世紀開始趨于穩定;除日本外的大部分亞洲國家的二氧化碳排放量一直在增長,尤其是到了本世紀開始加速增長。
中國的二氧化碳排放量從2000年以后開始快速增長。截至2014年,中國已成為二氧化碳排放量的第一大國,其排放量是第二名——美國的將近兩倍。但從2012年開始,中國的二氧化碳排放量的增速開始顯著放緩。
經濟的增長是否就意味著二氧化碳排放量的增加?
由于數據集中沒有反映經濟狀況的一個很重要指標——GDP,所以我另外從世界銀行的官網上下載到了世界各國從1960年至2019年的GDP數據集。
經過對數據的選擇與清洗,將世界主要國家的二氧化碳排放量和GDP在同一張圖里進行可視化:
import pandas as pd import matplotlib.pyplot as plt import numpy as npplt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = Falseraw_emission_data = pd.read_csv('climate-change.csv') dismiss_years = [1960, 1970, 1980, 1990]raw_gdp_data = pd.read_csv('gdp.csv') raw_gdp_data = raw_gdp_data.drop(['Country Code', 'Indicator Name', 'Indicator Code', '1960', '2015', '2016', '2017', '2018', '2019', '2020'], axis=1)# 中國數據 China_gdp_data = raw_gdp_data.loc[raw_gdp_data['Country Name']=='China'].drop(['Country Name'], axis=1)# 美國數據 US_gdp_data = raw_gdp_data.loc[raw_gdp_data['Country Name']=='United States'].drop(['Country Name'], axis=1)# 印度數據 India_gdp_data = raw_gdp_data.loc[raw_gdp_data['Country Name']=='India'].drop(['Country Name'], axis=1)# 日本數據 Japan_gdp_data = raw_gdp_data.loc[raw_gdp_data['Country Name']=='Japan'].drop(['Country Name'], axis=1)years = np.arange(1961, 2015)# 中國數據 China_CO2_emission_data = raw_emission_data.loc[raw_emission_data['Country Name'] == 'China',['Country Name', 'Year', 'CO2 emissions (kt)']] China_CO2_emission_data = China_CO2_emission_data.loc[China_CO2_emission_data['CO2 emissions (kt)'] != 0] for year in dismiss_years:China_CO2_emission_data = China_CO2_emission_data.loc[China_CO2_emission_data['Year'] != year] China_CO2_emission_data.sort_values('Year', inplace=True)# 美國數據 US_CO2_emission_data = raw_emission_data.loc[raw_emission_data['Country Name'] == 'United States',['Country Name', 'Year', 'CO2 emissions (kt)']] US_CO2_emission_data = US_CO2_emission_data.loc[US_CO2_emission_data['CO2 emissions (kt)'] != 0] for year in dismiss_years:US_CO2_emission_data = US_CO2_emission_data.loc[US_CO2_emission_data['Year'] != year] US_CO2_emission_data.sort_values('Year', inplace=True)# 印度數據 India_CO2_emission_data = raw_emission_data.loc[raw_emission_data['Country Name'] == 'India',['Country Name', 'Year', 'CO2 emissions (kt)']] India_CO2_emission_data = India_CO2_emission_data.loc[India_CO2_emission_data['CO2 emissions (kt)'] != 0] for year in dismiss_years:India_CO2_emission_data = India_CO2_emission_data.loc[India_CO2_emission_data['Year'] != year] India_CO2_emission_data.sort_values('Year', inplace=True)# 日本數據 Japan_CO2_emission_data = raw_emission_data.loc[raw_emission_data['Country Name'] == 'Japan',['Country Name', 'Year', 'CO2 emissions (kt)']] Japan_CO2_emission_data = Japan_CO2_emission_data.loc[Japan_CO2_emission_data['CO2 emissions (kt)'] != 0] for year in dismiss_years:Japan_CO2_emission_data = Japan_CO2_emission_data.loc[Japan_CO2_emission_data['Year'] != year] Japan_CO2_emission_data.sort_values('Year', inplace=True)plt.close('all')fig = plt.figure(figsize=(10.0, 8.0))ax1 = fig.add_subplot(111)China_CO2_emission_line = ax1.plot(China_CO2_emission_data.loc[:,['Year']],China_CO2_emission_data.loc[:,['CO2 emissions (kt)']],lw=2, ls='-', color='red', label='中國二氧化碳排放')US_CO2_emission_line = ax1.plot(US_CO2_emission_data.loc[:,['Year']],US_CO2_emission_data.loc[:,['CO2 emissions (kt)']],lw=2, ls='-', color='blue', label='美國二氧化碳排放')India_CO2_emission_line = ax1.plot(India_CO2_emission_data.loc[:,['Year']],India_CO2_emission_data.loc[:,['CO2 emissions (kt)']],lw=2, ls='-', color='green', label='印度二氧化碳排放')Japan_CO2_emission_line = ax1.plot(Japan_CO2_emission_data.loc[:,['Year']],Japan_CO2_emission_data.loc[:,['CO2 emissions (kt)']],lw=2, ls='-', color='purple', label='日本二氧化碳排放')ax1.set_xlabel('年份') ax1.set_xlim(1960, 2015) ax1.set_ylabel('二氧化碳排放量/kt') ax1.set_ylim(0, 1.6e7)ax1.grid(which='major', axis='both', color='black', linestyle='--', alpha=0.2) ax1.legend(loc='upper left')ax2 = ax1.twinx()China_gdp_line = ax2.plot(years,China_gdp_data.values.reshape(China_gdp_data.shape[1]),lw=1, ls='--', color='red', label='中國GDP')US_gdp_line = ax2.plot(years,US_gdp_data.values.reshape(US_gdp_data.shape[1]),lw=1, ls='--', color='blue', label='美國GDP')India_gdp_line = ax2.plot(years,India_gdp_data.values.reshape(India_gdp_data.shape[1]),lw=1, ls='--', color='green', label='印度GDP')Japan_gdp_line = ax2.plot(years,Japan_gdp_data.values.reshape(Japan_gdp_data.shape[1]),lw=1, ls='--', color='purple', label='日本GDP')ax2.set_ylabel('GDP/美元') ax2.set_ylim(0, 2.0e13)ax2.grid(which='major', axis='both', color='black', linestyle='--', alpha=0.2) ax2.legend(loc='upper left', bbox_to_anchor=(0.25,1))# 從1961年到2014年 plt.title('世界主要國家的二氧化碳排放量和GDP')plt.savefig('img2.jpg') plt.show()可視化結果:
可以發現,中國與印度的二氧化碳排放量和GDP都在同時顯著地增長;而美國與日本的二氧化碳排放量雖然維持在比較穩定的水平,但GDP仍在顯著地增長。
結合歷史,我對此的解釋是:進入本世紀以后,由于西方國家的勞動力成本不斷增加,西方國家的大部分工業生產轉移到了擁有廉價勞動力和資源的亞洲國家;而污染程度較小的服務業和高新技術產業逐漸成為了西方國家的經濟支柱,這樣就造成了“發展中國家依靠有環境污染的工業發展經濟,而發達國家依靠服務業和高新技術產業發展經濟”的現象。
2. 中國人口
在文件health.csv中包含了中國從1960年至2017年的男性和女性人口數量。
為了探究中國人口數量的增長情況,我對數據進行了清洗和可視化:
import pandas as pd import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = Falseraw_data = pd.read_csv('health.csv') change_years = [1970, 1980, 1990]# 中國人口數據 China_population_data = raw_data.loc[raw_data['Country Name'] == 'China',['Year', 'Population, female', 'Population, male']] China_population_data = China_population_data.loc[China_population_data['Year'] != 1960]for year in change_years:pre_year_data = China_population_data.loc[China_population_data['Year'] == year-1, ['Population, female', 'Population, male']].valuesnext_year_data = China_population_data.loc[China_population_data['Year'] == year+1, ['Population, female', 'Population, male']].valuesChina_population_data.loc[China_population_data['Year'] == year, ['Population, female', 'Population, male']] = (pre_year_data+next_year_data)/2China_population_data.sort_values("Year", inplace=True)plt.close('all') plt.figure(figsize=(10.0, 8.0))years = China_population_data.loc[:, ['Year']].values.reshape(China_population_data.shape[0]) China_male_population = China_population_data.loc[:, ['Population, male']].values.reshape(China_population_data.shape[0]) China_female_population = China_population_data.loc[:, ['Population, female']].values.reshape(China_population_data.shape[0])width = 0.8 male_bar = plt.bar(years, China_male_population, width, color='royalblue', label='男性') female_bar = plt.bar(years, China_female_population, width, bottom=China_male_population, color='hotpink', label='女性')# 數據從1961年至2017年 plt.title('中國人口數量') plt.xlabel('年份') plt.ylabel('人口數量') plt.grid(which='major', axis='both', color='black', linestyle='--', alpha=0.2) plt.legend(loc='upper left')plt.savefig('img3.jpg') plt.show()可視化結果:
從圖中不難看出,中國人口數量的增長存在著兩個明顯的轉折點:一個在1970年至1980年之間,另一個在1990年至2000年之間。
通過查閱資料得知,政府在第四個五年計劃(從1970年至1975年)中提出“一個不少,兩個正好,三個多了”的口號;從1995年起,政府提倡“晚婚晚育、少生優生”;兩個政策的時間與圖中兩個轉折點的時間比較吻合。可見,計劃生育政策對中國人口數量產生了巨大的影響。
3. 世界各國人口
在文件health.csv中包含了世界各國從1960年至2017年的人口數量。
為了將世界各國人口情況更好地展示出來,我先利用直方圖統計了一下2017年世界各國人口數量的情況:
import pandas as pd import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = Falseraw_data = pd.read_csv('health.csv') country_codes = pd.read_csv('country code.csv')case = [] for code in raw_data['Country Code'].values:case.extend([code in country_codes.values])population_data = raw_data.loc[case].loc[raw_data['Year'] == 2017,['Population, total']] population_data = population_data.loc[population_data['Population, total']!=0]plt.hist(population_data.values, bins=10, edgecolor="black", facecolor="royalblue")plt.title('2017年世界各國人口數量直方圖') plt.xlabel('人口數量') plt.ylabel('頻數') plt.grid(which='major', axis='both', color='black', linestyle='--', alpha=0.2)plt.savefig('img6.jpg') plt.show()統計結果:
可以發現,絕大部分國家的人口數量低于2億人(超過200個國家)。而且,最少的人口數量(瑙魯共和國,13649人)與最多的人口數量(中國,1386395000人)之間的差距超過十萬倍(世界各國人口數量之間的差距極為懸殊)。
接著,我將前30個人口數量最多的國家與剩余的人口數量進行可視化:
import pandas as pd import matplotlib.pyplot as plt import numpy as npplt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = Falseraw_data = pd.read_csv('health.csv') country_codes = pd.read_csv('country code.csv')case = [] for code in raw_data['Country Code'].values:case.extend([code in country_codes.values])population_data = raw_data.loc[case].loc[raw_data['Year'] == 2017,['Country Name', 'Population, total']] population_data = population_data.loc[population_data['Population, total']!=0] population_data.sort_values('Population, total', ascending=False, inplace=True)plt.close('all') plt.figure(figsize=(15.0, 10.0))width = 0.8number = 30country_names = population_data.loc[:, ['Country Name']].values.reshape(population_data.shape[0])[0:number] country_populations = population_data.loc[:, ['Population, total']].values.reshape(population_data.shape[0])[0:number]country_names = np.append(country_names, 'Other countries') other_population = np.sum(population_data.loc[:, ['Population, total']].values.reshape(population_data.shape[0])[number:-1]) country_populations = np.append(country_populations, other_population)plt.barh(np.flipud(country_names), np.flipud(country_populations), width, color='royalblue')plt.gca().xaxis.set_ticks_position('top') plt.xticks(fontname='Arial', fontsize=10) plt.yticks(fontname='Arial', fontsize=10)plt.title('2017年世界主要國家的人口數量') plt.grid(which='major', axis='both', color='black', linestyle='--', alpha=0.2)plt.savefig('img4.jpg') plt.show()可視化結果:
可以看出,人口數量最多的兩個國家:中國和印度,都擁有超過13億人,而人口數量第三多的國家:美國,擁有不到4億人,且與前兩者的差距超過四倍。不難想象,人口數量更少的國家與前兩者的差距還會進一步地增大。
數據的極端懸殊性不利于數據的可視化(后面會講到如何解決)。
以上的條形圖雖然能直觀地對比前30個國家之間的人口數量,但各個國家的人口數量占世界人口數量的比重就不是那么直觀了。所以,我又將數據可視化成一個餅圖(為了更好的可視化效果,我選取了前10個國家):
import pandas as pd import matplotlib.pyplot as plt import numpy as npplt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = Falseraw_data = pd.read_csv('health.csv') country_codes = pd.read_csv('country code.csv')case = [] for code in raw_data['Country Code'].values:case.extend([code in country_codes.values])population_data = raw_data.loc[case].loc[raw_data['Year'] == 2017,['Country Name', 'Population, total']] population_data = population_data.loc[population_data['Population, total']!=0] population_data.sort_values('Population, total', ascending=False, inplace=True)plt.close('all') plt.figure(figsize=(10.0, 10.0))number = 10country_names = population_data.loc[:, ['Country Name']].values.reshape(population_data.shape[0])[0:number] country_populations = population_data.loc[:, ['Population, total']].values.reshape(population_data.shape[0])[0:number]country_names = np.append(country_names, 'Other countries') other_population = np.sum(population_data.loc[:, ['Population, total']].values.reshape(population_data.shape[0])[number:-1]) country_populations = np.append(country_populations, other_population)colors = ['red', 'orange', 'royalblue', 'chocolate', 'green', 'gold', 'tomato', 'darkgreen', 'blue', 'peru', 'lightgray']explode = np.zeros(country_names.shape[0]) explode[0] = 0.1 explode[1] = 0.1patches, labels, percents = plt.pie(country_populations,colors=colors,labels=country_names,explode=explode,autopct='%1.1f%%',shadow=True)for label in labels:label.set_fontname('Arial')label.set_fontsize(12)for percent in percents:percent.set_fontname('Arial')percent.set_fontsize(10)plt.title('2017年世界主要國家的人口數量占比')plt.savefig('img5.jpg') plt.show()可視化結果:
這樣就可以很直觀地看出各個國家的人口數量占世界人口數量的比重。其中,中國和印度的人口數量都超過世界人口數量的1/6,二者總人口數量超過世界人口數量的1/3。
最后,我使用Pyecharts將世界各國的人口用顏色在地圖上表示出來(代碼A):
但效果并不好:除了中國和印度為紅色,其他國家大多為藍綠色或綠色。
這正是由于數據過于極端而造成的:在顏色條上,中國和印度位于頂部,而其他國家則“擁擠”在底部,使得國家之間的顏色差距很小,中間的顏色并沒有得到很好的利用。
于是想到,如果將人口數量取對數,則各個國家的數據差距就會極大地減小。
以下兩張圖展示的是將世界各國的人口數量取對數的前后對比(代碼B):
原數據:
取對數:
可以發現,取對數后,各國的數據之間的差距明顯變得平滑。于是,我將取對數后的世界各國的人口數量進行可視化:
這樣的可視化的效果比之前好很多。
但我覺得還有明顯不足的地方:地圖大部分為紅色、橙色、黃色等顏色,而藍色和綠色占地圖極少部分。
經過分析,發現其原因為:大部分幅員遼闊的國家往往人口數量也眾多,所以這些國家的顏色往往為黃色、橙色或紅色,這也使得地圖看上去幾乎全是黃色、橙色或紅色。
改進的方法是,取前幾十個國家的數據作為顏色條的分布,后面的國家的顏色則取為最小數據所對應的顏色。雖然后面的國家的顏色會變為一樣,但實際上他們的數量級往往在104~106之間(即人口數量為幾萬至幾百萬之間),相較于人口幾千萬甚至上億的國家來說分別不是很大,故具有一定的合理性。
可視化效果:
經過反復比較,最終確定取前150個國家的數據作為顏色條的分布。這樣,地圖的可視化效果由進一步得到了提高。
代碼A:
from pyecharts.charts import Map,Geo from pyecharts import options as opts import pandas as pd import numpy as np import mathraw_data = pd.read_csv('health.csv') country_codes = pd.read_csv('country code.csv')case = [] for code in raw_data['Country Code'].values:case.extend([code in country_codes.values])population_data = raw_data.loc[case].loc[raw_data['Year'] == 2017,['Country Name', 'Population, total']] population_data = population_data.loc[population_data['Population, total']!=0] population_data.sort_values('Population, total', ascending=False, inplace=True)number = -1country_names = population_data.loc[:, ['Country Name']].values.reshape(population_data.shape[0])[0:number].tolist() country_populations = population_data.loc[:, ['Population, total']].values.reshape(population_data.shape[0])[0:number].tolist()country_names[country_names.index('Russian Federation')] = 'Russia' country_names[country_names.index('Egypt, Arab Rep.')] = 'Egypt' country_names[country_names.index('Congo, Dem. Rep.')] = 'Dem. Rep. Congo' country_names[country_names.index('Iran, Islamic Rep.')] = 'Iran'country_names[country_names.index('Czech Republic')] = 'Czech Rep.' country_names[country_names.index('Slovak Republic')] = 'Slovakia' country_names[country_names.index('Yemen, Rep.')] = 'Yemen' country_names[country_names.index('Korea, Rep.')] = 'Korea' country_names[country_names.index('Korea, Dem. People’s Rep.')] = 'Dem. Rep. Korea' country_names[country_names.index('Kyrgyz Republic')] = 'Kyrgyzstan' country_names[country_names.index('Bosnia and Herzegovina')] = 'Bosnia and Herz.' country_names[country_names.index('Macedonia, FYR')] = 'Macedonia' country_names[country_names.index('South Sudan')] = 'S. Sudan' country_names[country_names.index('Central African Republic')] = 'Central African Rep.' country_names[country_names.index('Congo, Rep.')] = 'Congo' country_names[country_names.index('Venezuela, RB')] = 'Venezuela' country_names[country_names.index('Dominican Republic')] = 'Dominican Rep.' country_names[country_names.index('Syrian Arab Republic')] = 'Syria' country_names[country_names.index('Equatorial Guinea')] = 'Eq. Guinea' country_names[country_names.index("Cote d'Ivoire")] = "C?te d'Ivoire"data = zip(country_names, country_populations)m = (Map().add('', data, maptype='world', is_map_symbol_show = False).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title=''),visualmap_opts=opts.VisualMapOpts(max_=country_populations[0])) )m.render('World.html')# -----------------------------第1次改進-----------------------------number = -1country_names = population_data.loc[:, ['Country Name']].values.reshape(population_data.shape[0])[0:number].tolist() country_populations = np.log10(population_data.loc[:, ['Population, total']].values.reshape(population_data.shape[0])[0:number]).tolist()country_names[country_names.index('Russian Federation')] = 'Russia' country_names[country_names.index('Egypt, Arab Rep.')] = 'Egypt' country_names[country_names.index('Congo, Dem. Rep.')] = 'Dem. Rep. Congo' country_names[country_names.index('Iran, Islamic Rep.')] = 'Iran'country_names[country_names.index('Czech Republic')] = 'Czech Rep.' country_names[country_names.index('Slovak Republic')] = 'Slovakia' country_names[country_names.index('Yemen, Rep.')] = 'Yemen' country_names[country_names.index('Korea, Rep.')] = 'Korea' country_names[country_names.index('Korea, Dem. People’s Rep.')] = 'Dem. Rep. Korea' country_names[country_names.index('Kyrgyz Republic')] = 'Kyrgyzstan' country_names[country_names.index('Bosnia and Herzegovina')] = 'Bosnia and Herz.' country_names[country_names.index('Macedonia, FYR')] = 'Macedonia' country_names[country_names.index('South Sudan')] = 'S. Sudan' country_names[country_names.index('Central African Republic')] = 'Central African Rep.' country_names[country_names.index('Congo, Rep.')] = 'Congo' country_names[country_names.index('Venezuela, RB')] = 'Venezuela' country_names[country_names.index('Dominican Republic')] = 'Dominican Rep.' country_names[country_names.index('Syrian Arab Republic')] = 'Syria' country_names[country_names.index('Equatorial Guinea')] = 'Eq. Guinea' country_names[country_names.index("Cote d'Ivoire")] = "C?te d'Ivoire"data = zip(country_names, country_populations)m = (Map().add('', data, maptype='world', is_map_symbol_show = False).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title=''),visualmap_opts=opts.VisualMapOpts(max_=country_populations[0], min_=country_populations[-1])) )m.render('World_improved_v1.html')# -----------------------------第2次改進-----------------------------number = -1country_names = population_data.loc[:, ['Country Name']].values.reshape(population_data.shape[0])[0:number].tolist() country_populations = np.log10(population_data.loc[:, ['Population, total']].values.reshape(population_data.shape[0])[0:number]).tolist()country_names[country_names.index('Russian Federation')] = 'Russia' country_names[country_names.index('Egypt, Arab Rep.')] = 'Egypt' country_names[country_names.index('Congo, Dem. Rep.')] = 'Dem. Rep. Congo' country_names[country_names.index('Iran, Islamic Rep.')] = 'Iran'country_names[country_names.index('Czech Republic')] = 'Czech Rep.' country_names[country_names.index('Slovak Republic')] = 'Slovakia' country_names[country_names.index('Yemen, Rep.')] = 'Yemen' country_names[country_names.index('Korea, Rep.')] = 'Korea' country_names[country_names.index('Korea, Dem. People’s Rep.')] = 'Dem. Rep. Korea' country_names[country_names.index('Kyrgyz Republic')] = 'Kyrgyzstan' country_names[country_names.index('Bosnia and Herzegovina')] = 'Bosnia and Herz.' country_names[country_names.index('Macedonia, FYR')] = 'Macedonia' country_names[country_names.index('South Sudan')] = 'S. Sudan' country_names[country_names.index('Central African Republic')] = 'Central African Rep.' country_names[country_names.index('Congo, Rep.')] = 'Congo' country_names[country_names.index('Venezuela, RB')] = 'Venezuela' country_names[country_names.index('Dominican Republic')] = 'Dominican Rep.' country_names[country_names.index('Syrian Arab Republic')] = 'Syria' country_names[country_names.index('Equatorial Guinea')] = 'Eq. Guinea' country_names[country_names.index("Cote d'Ivoire")] = "C?te d'Ivoire"data = zip(country_names, country_populations)m = (Map().add('', data, maptype='world', is_map_symbol_show = False).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title=''),visualmap_opts=opts.VisualMapOpts(max_=country_populations[0], min_=country_populations[150])) )m.render('World_improved_v2.html')代碼B:
import pandas as pd import matplotlib.pyplot as plt import numpy as npplt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = Falseraw_data = pd.read_csv('health.csv') country_codes = pd.read_csv('country code.csv')case = [] for code in raw_data['Country Code'].values:case.extend([code in country_codes.values])population_data = raw_data.loc[case].loc[raw_data['Year'] == 2017,['Country Name', 'Population, total']] population_data = population_data.loc[population_data['Population, total']!=0] population_data.sort_values('Population, total', ascending=False, inplace=True)plt.close('all')# number = 100 # plt.figure(figsize=(15.0, 30.0))number = -1 plt.figure(figsize=(15.0, 40.0))width = 0.8country_names = population_data.loc[:, ['Country Name']].values.reshape(population_data.shape[0])[0:number] country_populations = population_data.loc[:, ['Population, total']].values.reshape(population_data.shape[0])[0:number]country_names = np.append(country_names, 'Other countries') other_population = np.sum(population_data.loc[:, ['Population, total']].values.reshape(population_data.shape[0])[number:-1]) country_populations = np.append(country_populations, other_population)plt.barh(np.flipud(country_names), np.flipud(country_populations), width, color='royalblue')plt.gca().xaxis.set_ticks_position('top') plt.xticks(fontname='Arial', fontsize=12) plt.yticks(fontname='Arial', fontsize=12)plt.title('2017年世界主要國家的人口數量') plt.grid(which='major', axis='both', color='black', linestyle='--', alpha=0.2)plt.savefig('img7_1.jpg') plt.show()plt.close('all')# number = 100 # plt.figure(figsize=(15.0, 30.0))number = -1 plt.figure(figsize=(15.0, 40.0))width = 0.8country_names = population_data.loc[:, ['Country Name']].values.reshape(population_data.shape[0])[0:number] country_populations = population_data.loc[:, ['Population, total']].values.reshape(population_data.shape[0])[0:number]country_names = np.append(country_names, 'Other countries') other_population = np.sum(population_data.loc[:, ['Population, total']].values.reshape(population_data.shape[0])[number:-1]) country_populations = np.append(country_populations, other_population) country_populations = np.log10(country_populations)plt.barh(np.flipud(country_names), np.flipud(country_populations), width, color='royalblue')plt.gca().xaxis.set_ticks_position('top') plt.xticks(fontname='Arial', fontsize=12) plt.yticks(fontname='Arial', fontsize=12)plt.title('2017年世界主要國家的人口數量級') plt.grid(which='major', axis='both', color='black', linestyle='--', alpha=0.2)plt.savefig('img7_2.jpg') plt.show()總結
以上是生活随笔為你收集整理的数据可视化:世界银行数据(1960-2017)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCore黑苹果引导开机声音与图形
- 下一篇: 游侠原创:安全狗“服云”深度评测!