Data analysis

練習專案一:復刻兩百個國家、兩百年、四分鐘


復刻目標:Hans Rosling’s 200 Countries, 200 Years, 4 Minutes

專案說明:描述了隨人均GDP上升,各國的平均壽命也在不斷提升。
如何復刻 Hans Rosling’s 200 Countries, 200 Years, 4 Minutes

  • 資料需求。
    • X 軸: 人均 GDP
    • Y 軸: 預期壽命。
    • 顏色: 洲別。
    • 氣泡大小:人口數。
    • 時間軸: 年份。
  • 視覺化需求。
    • 概念驗證:matplotlib
    • 成品:plotly.express

資料

  • 人均GDP:ddf–datapoints–gdp_pcap–by–country–time
  • 預期壽命:ddf–datapoints–lex–by–country–time
  • 洲別:ddf–datapoints–pop–by–country–time
  • 人口數:ddf–entities–geo–country
  • 資料來源:Gapminder 提供,主要用於描述和分析全球的社會、經濟、環境等多方面統計數據。
    • Systema Globalis
    • Fast Track <- 這次使用的資料
    • World Development Indicators

SQL plotting資料表名對照

  • country_name :國家名稱
  • continent :洲別
  • dt_yaer :年
  • gdp_per_capita :平均GDP
  • life_expectancy :平均壽命
  • population :人口數

虛擬資料表

CREATE VIEW plotting AS
SELECT g.name AS country_name, 
       g.world_4region AS continent,
       gpc.time as dt_yaer,
       gpc.gdp_pcap AS gdp_per_capita,
       le.lex AS life_expectancy,
       p.pop AS population
 FROM gdp_per_capita gpc 
 JOIN geography g 
   ON g.country = gpc.country 
 JOIN life_expectancy le 
   ON le.country = gpc.country AND 
      le.time  = gpc.time 
 JOIN population p 
   ON p.country = gpc.country AND 
      p.time = gpc.time 
 WHERE gpc.time < 2024;

創建環境

Conda

conda create -n gapminder_clone python=3.12
conda install pandas
conda install matplotlib

matplotlib


ani.save()出現錯誤

>>> ani.save("animation.gif", fps=10)
MovieWriter ffmpeg unavailable; using Pillow instead.

解決方法:安裝 ffmpeg

conda install ffmpeg

參考資料:https://blog.csdn.net/weixin_50569998/article/details/108811466


成品


  • 使用 plotly.express 來完成
px.scatter(
    df,                               # 數據來源的 DataFrame
    x="gdp_per_capita",               # 設定 x 軸數據(人均 GDP)
    y="life_expectancy",              # 設定 y 軸數據(平均壽命)
    animation_frame="dt_year",        # 設定動畫的時間維度(年份)
    animation_group="country_name",   # 指定動畫中不同國家的數據追蹤
    size="population",                # 設定氣泡大小對應人口數量
    color="continent",                # 以洲別來區分顏色
    hover_name="country_name",        # 滑鼠懸停時顯示國家名稱
    size_max=100,                     # 設定氣泡的最大大小
    range_x=[500, 100000],            # 設定 x 軸的範圍(GDP 人均值範圍)
    range_y=[20, 90],                 # 設定 y 軸的範圍(預期壽命範圍)
    log_x=True,                       # 使 x 軸(GDP)以對數尺度顯示
    title="Gapminder Clone 1800-2023" # 設定圖表標題
)
  • 成品:上傳Github後就可以呈現了

  • 成品:使用 Power BI 來完成。
    • 為了達成 X 軸刻度顯示比較明顯, “log_x=True” 的效果 PowerBI 使用 “對數刻度” 來呈現。

注意:Power BI 只支援 正數 轉換為對數,因此數據不能包含 0 或負數,否則會導致錯誤,所以 X 軸最小值要設定大於1才能使用 。



Markdown 嵌入html檔安全性

VS Code 預覽無法顯示網頁。
  • 原因:預設任何外部資源,開頭必須是 https,如果是 http,則在文件預覽的時候,將會無法顯示。

  • 如果想要調整,步驟如下:

    • 按下 F1。
    • 輸入 >markdown change preview security setting。
    • 選擇符合自己需求的選項。
    • security

建立environment.yml

目的:重現專案環境用

  • 課堂上預設是conda-forge,但是我在安裝未指定下載頻道所以這裡改為預設。

    name: gapminder_clone
    channels:
      - Default Channels:默認頻道  
    dependencies:
      - python=3.12.8
      - pandas=2.2.3 
      - matplotlib=3.9.2 
      - plotly=5.24.1 
    
    • 這邊使用conda list | findstr $module_name (windows Anaconda Prompt)

    • conda install numpy

      • 不指定頻道,會使用 Conda 的 默認頻道(Default Channels)。
      • 默認頻道的套件通常是由 Anaconda 官方維護,穩定性較高,但更新速度可能較慢。
    • conda install -c conda-forge numpy

      • 明確指定從 conda-forge 頻道安裝套件。
      • 這個方式會直接從 conda-forge 獲取 numpy 模組。
  • conda內建environment.yml產生方法:conda env export > [檔案名稱.yml]

    • 相較於課堂上教學的更為完整
    • 若無設定路徑為命令字元當下目錄,有需要也可以指定位置。
    conda env export > environment.yml
    conda env export > C:\Users\Steve\anaconda3\envs\anaconda_practise_myenv\environment.yml
    

撰寫 README.md

如何重現
  • 安裝 Miniconda
  • 依據 environment.yml 建立環境:conda env create -f environment.yml
  • 將 data/ 資料夾中的四個 CSV 檔案置放於工作目錄中的 data/ 資料夾。
  • 啟動環境並執行 python create_gapminder_db.py 就能在 data/ 資料夾中建立 gapminder.db
  • 啟動環境並執行 python plot_with_px.py 就能生成 gapminder_clone.html

Github

  • 新增一個 Repository,.gitignore 選 Python,授權不選或者選 MIT/BSD License
  • 手動將專案資料夾中的檔案與資料夾(必須要用拖移無法用選取)上傳。
  • Settings -> Pages -> Deploy from a branch -> main -> Save
  • Settings -> Pages -> Enforce HTTPS

專案亮點

  • 有別於坊間範例所使用 gapminder 資料集(精簡版僅涵蓋 1952-2007,五年為時間間隔),這個專案從 gapminder.org 取得詳細資料集。
  • 建立了檢視表關聯多個原始資料集。
  • 以 matplotlib 進行概念驗證。
  • 以 plotly.express 做出成品。
  • 成品能夠以 GitHub Page 網址直接訪問。
  • 可以重現(Reproducible)。