2021-002 🇹🇼臺灣竟沒在人類發展指數 (HDI) !我們來找🐷莉亞

人類發展指數 Human Development Index (HDI) 是聯合國綜合評估:健康壽命、知識教育、生活水準,用來評估一個國家發展水準,因為這個指數比GDP只看經濟情況更吻合人民生活舒適度,我們也很想知道臺灣在世界舞臺上,發展處於哪個位置。

搜尋一下就發現這個聯合國資料網址,裡面有相對完整的各國HDI比較,赫然發現Taiwan臺灣不在裡面,是怎樣,我們親切可愛的臺灣不住人類嗎?好吧!與其憤世忌俗起來,不如我們就親自動手把臺灣加入這個人類發展指數的數據空間。

Human Development Index (HDI).csv
71.47 KB

🧮主計處 怎麼說?

關鍵字找一下「臺灣 HDI」可以很開心的發現,臺灣其實在人類發展領域,可以算資優生之一,讓我們放心的繼續來彰顯可愛臺灣人的幸福威力吧:

因為我們希望製作一次數據動圖之後,每年都會全自動更新,所以需要勤勞的找到這個原始資料網址:

人類發展指數.xls
48.64 KB
人類發展指數.ods
16.22 KB
apt-get install python3
pip3 install pandas
pip3 install xlrd
17.4s
Bash in Julia
using Pkg;Pkg.add(["PyCall","DataFrames","CSV"]);
using PyCall,DataFrames,CSV
20.6s
Julia
function read_excel(str_in,str_out) 
  pd=PyCall.pyimport("pandas")
  df_pandas=pd.read_excel(str_in)
  df_julia=DataFrame()
  for str_column in df_pandas.columns
    ary=df_pandas[str_column].values
    if typeof(ary)==Array{PyObject,1}
      df_julia[Symbol(str_column)]=pystr.(ary)
    else
      df_julia[Symbol(str_column)]=ary
    end
  end
  CSV.write(str_out,df_julia)
end
str_in=
人類發展指數.xls
str_out="/results/臺灣人類發展指數hdi.csv"
read_excel(str_in,str_out)
2.8s
Julia

🐷莉亞 Julia 資料前處理為_年_國家_HDI數值

to_flo=x->try parse(Float64,x) catch e 0 end
function 🐷莉亞julia資料前處理臺灣hdi轉為_年_hdi數值(str_in,str_out)
  df=CSV.read(str_in)
  names!(df,[Symbol("x$i") for i in 1:size(df,2)])
  df=df[[:x1,:x3,:x5,:x7,:x9]]
  ary_result=[]
  for row in eachrow(df)
    if (int_年=to_flo(row.x1)) <=0 continue end
    flo_hdi=0
    [flo_hdi=to_flo(x) for x in [row.x3,row.x5,row.x7,row.x9] if to_flo(x)>0]
    push!(ary_result,(int_年,flo_hdi))
  end
  df=DataFrame(ary_result[9:end])
  names!(df,[:Years,:Taiwan])
  nan_to_zero(ary)=map(x->isnan(x) ? zero(x) : x,ary)
  df[:Years]=nan_to_zero(df[:,:Years]) #years如果有Nan全部換為0
  df[:Years]=convert.(Int64,df[:,:Years]) #Float to Int
  CSV.write(str_out,df)
end
str_in=
臺灣人類發展指數hdi.csv
str_out="/results/🐷莉亞julia資料前處理臺灣hdi轉為_年_hdi數值.csv"
🐷莉亞julia資料前處理臺灣hdi轉為_年_hdi數值(str_in,str_out)
4.1s
Julia

🇺🇳聯合國 資料前處理為_年_國家_HDI數值

不要以為聯合國的CSV資料很乾淨結構化,其實用 Python 以及用 Julia 都會出現讀取錯誤,沒那麼簡單處理啊,哈哈哈,硬是要給我們數據分析師表演舞臺這樣。

Python 解析聯合國CSV會有錯誤訊息:Error tokenizing data. 而Julia 解析聯合國CSV照樣有錯誤訊息:Julia process crashed unexpectedly. 所以我們能做的就只有一行一行讀取出來,自己手動程式碼慢慢拆解該CSV了。

#使用 Python Pandas 解析聯合國HDI CSV會出現錯誤訊息,代表格式有異常 (Julia也異常)
import pandas as pd
try:
  df=pd.read_csv(
Human Development Index (HDI).csv
)
except Exception as e:
  print(e)
2.0s
Python

人生就是這樣,碰到髒資料OOXX,最終我們還是得平心靜氣「來喔🐷,動手弄乾淨」。

using CSV,DataFrames
function 讀取每一列CSV用逗點隔開_清除年份是空字串(str_in,str_out)
  ary_csv每一列資料=readlines(open(str_in))
  ary_result=[]
  for str_一列資料 in ary_csv每一列資料
    str_一列資料=replace(str_一列資料,[' ','\"']=>"")
    ary_用逗點隔開一列=split(str_一列資料,",")
    if length(ary_用逗點隔開一列)==62
      push!(ary_result,ary_用逗點隔開一列)
    end
  end
  df_欄位數量一致但仍然包含許多空字串尚未清除=DataFrame(ary_result)
  df_清資料空字串年份=DataFrame()
  for row in eachrow(df_欄位數量一致但仍然包含許多空字串尚未清除)
    if length(row.x1)>=4
      push!(df_清資料空字串年份,row)
    end
  end
  CSV.write(str_out, df_清資料空字串年份)
end
str_in=
Human Development Index (HDI).csv
str_out="/results/讀取每一列CSV用逗點隔開_清除年份是空字串.csv"
讀取每一列CSV用逗點隔開_清除年份是空字串(str_in,str_out)
1.0s
Julia

挑選幾個國家來比較HDI多年變化吧

function 只挑選數據動圖要展示的國家hdi(str_in,str_out,ary_國家列表)
  df=CSV.read(str_in)
  df=df[2:end,:] #去除HDI排行榜
  names!(df,Symbol.(convert(Array,df[1,:]))) #欄位名稱改為國家名稱
  df=df[10:end,:] #刪除1997之前的rows
  df=df[Symbol.(ary_國家列表)] #只選擇少數國家展示
  names!(df,Symbol.(vcat(["Years"],names(df)[2:end]))) #把第一個欄位名稱改Years
  CSV.write(str_out,df)
end 
str_in=
讀取每一列CSV用逗點隔開_清除年份是空字串.csv
str_out="/results/只挑選數據動圖要展示的國家hdi.csv"
ary_國家列表=["Country","Norway","Singapore","UnitedStates","Spain","France","Italy","Japan","China"]
只挑選數據動圖要展示的國家hdi(str_in,str_out,ary_國家列表)
0.4s
Julia

是不是清資料乾淨到一個很爽的境界!

最後把臺灣合併到聯合國HDI,耶!大功告成~

function 合併聯合國與臺灣hdi(str_in1,str_in2,str_out)
  df1=CSV.read(str_in1)
  df2=CSV.read(str_in2)
  df=leftjoin(df1,df2,on=:Years)
  CSV.write(str_out,df)
end 
str_in1=
只挑選數據動圖要展示的國家hdi.csv
str_in2=
🐷莉亞julia資料前處理臺灣hdi轉為_年_hdi數值.csv
str_out="/results/合併聯合國與臺灣hdi.csv"
合併聯合國與臺灣hdi(str_in1,str_in2,str_out)
0.2s
Julia

哈哈哈,接下去我們就可以在下一篇分享當中,將這個「合併臺灣與聯合國HDI」的試算表,轉化為「美學驚嘆」的網頁數據動圖嘍。

Runtimes (2)