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

文章推薦指數: 80 %
投票人數:10人

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

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

http://hdr.undp.org/en/indicators/137506HumanDevelopmentIndex(HDI).csv71.47KB🧮主計處怎麼說?關鍵字找一下「臺灣HDI」可以很開心的發現,臺灣其實在人類發展領域,可以算資優生之一,讓我們放心的繼續來彰顯可愛臺灣人的幸福威力吧:https://www.stat.gov.tw/public/Data/02416246DBUFBVDH.pdf因為我們希望製作一次數據動圖之後,每年都會全自動更新,所以需要勤勞的找到這個原始資料網址:https://www.stat.gov.tw/ct.asp?xItem=33332&CtNode=6020&mp=4人類發展指數.xls48.64KB人類發展指數.ods16.22KBapt-getinstallpython3pip3installpandaspip3installxlrd17.4sBashinJulia→usingPkg;Pkg.add(["PyCall","DataFrames","CSV"]);usingPyCall,DataFrames,CSV20.6sJulia→functionread_excel(str_in,str_out)pd=PyCall.pyimport("pandas")df_pandas=pd.read_excel(str_in)df_julia=DataFrame()forstr_columnindf_pandas.columnsary=df_pandas[str_column].valuesiftypeof(ary)==Array{PyObject,1}df_julia[Symbol(str_column)]=pystr.(ary)elsedf_julia[Symbol(str_column)]=aryendendCSV.write(str_out,df_julia)endstr_in=人類發展指數.xlsstr_out="/results/臺灣人類發展指數hdi.csv"read_excel(str_in,str_out)2.8sJulia→🐷莉亞Julia資料前處理為_年_國家_HDI數值to_flo=x->tryparse(Float64,x)catche0endfunction🐷莉亞julia資料前處理臺灣hdi轉為_年_hdi數值(str_in,str_out)df=CSV.read(str_in)names!(df,[Symbol("x$i")foriin1:size(df,2)])df=df[[:x1,:x3,:x5,:x7,:x9]]ary_result=[]forrowineachrow(df)if(int_年=to_flo(row.x1))<=0continueendflo_hdi=0[flo_hdi=to_flo(x)forxin[row.x3,row.x5,row.x7,row.x9]ifto_flo(x)>0]push!(ary_result,(int_年,flo_hdi))enddf=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全部換為0df[:Years]=convert.(Int64,df[:,:Years])#FloattoIntCSV.write(str_out,df)endstr_in=臺灣人類發展指數hdi.csvstr_out="/results/🐷莉亞julia資料前處理臺灣hdi轉為_年_hdi數值.csv"🐷莉亞julia資料前處理臺灣hdi轉為_年_hdi數值(str_in,str_out)4.1sJulia→🇺🇳聯合國資料前處理為_年_國家_HDI數值不要以為聯合國的CSV資料很乾淨結構化,其實用Python以及用Julia都會出現讀取錯誤,沒那麼簡單處理啊,哈哈哈,硬是要給我們數據分析師表演舞臺這樣。

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

#使用PythonPandas解析聯合國HDICSV會出現錯誤訊息,代表格式有異常(Julia也異常)importpandasaspdtry:df=pd.read_csv(HumanDevelopmentIndex(HDI).csv)exceptExceptionase:print(e)2.0sPython→ 人生就是這樣,碰到髒資料OOXX,最終我們還是得平心靜氣「來喔🐷,動手弄乾淨」。

usingCSV,DataFramesfunction讀取每一列CSV用逗點隔開_清除年份是空字串(str_in,str_out)ary_csv每一列資料=readlines(open(str_in))ary_result=[]forstr_一列資料inary_csv每一列資料str_一列資料=replace(str_一列資料,['','\"']=>"")ary_用逗點隔開一列=split(str_一列資料,",")iflength(ary_用逗點隔開一列)==62push!(ary_result,ary_用逗點隔開一列)endenddf_欄位數量一致但仍然包含許多空字串尚未清除=DataFrame(ary_result)df_清資料空字串年份=DataFrame()forrowineachrow(df_欄位數量一致但仍然包含許多空字串尚未清除)iflength(row.x1)>=4push!(df_清資料空字串年份,row)endendCSV.write(str_out,df_清資料空字串年份)endstr_in=HumanDevelopmentIndex(HDI).csvstr_out="/results/讀取每一列CSV用逗點隔開_清除年份是空字串.csv"讀取每一列CSV用逗點隔開_清除年份是空字串(str_in,str_out)1.0sJulia→挑選幾個國家來比較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之前的rowsdf=df[Symbol.(ary_國家列表)]#只選擇少數國家展示names!(df,Symbol.(vcat(["Years"],names(df)[2:end])))#把第一個欄位名稱改YearsCSV.write(str_out,df)endstr_in=讀取每一列CSV用逗點隔開_清除年份是空字串.csvstr_out="/results/只挑選數據動圖要展示的國家hdi.csv"ary_國家列表=["Country","Norway","Singapore","UnitedStates","Spain","France","Italy","Japan","China"]只挑選數據動圖要展示的國家hdi(str_in,str_out,ary_國家列表)0.4sJulia→是不是清資料乾淨到一個很爽的境界!最後把臺灣合併到聯合國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)endstr_in1=只挑選數據動圖要展示的國家hdi.csvstr_in2=🐷莉亞julia資料前處理臺灣hdi轉為_年_hdi數值.csvstr_out="/results/合併聯合國與臺灣hdi.csv"合併聯合國與臺灣hdi(str_in1,str_in2,str_out)0.2sJulia→哈哈哈,接下去我們就可以在下一篇分享當中,將這個「合併臺灣與聯合國HDI」的試算表,轉化為「美學驚嘆」的網頁數據動圖嘍。

Runtimes(2)



請為這篇文章評分?