本案例的核心是「探索性資料分析 (Exploratory Data Analysis, EDA)」,目標是從原始數據中找出規律與洞察。我們將大量運用 pandas 進行資料處理,並結合 matplotlib 與 seaborn 進行視覺化。
1. 環境設定:中文字型
核心概念: matplotlib 或 seaborn 套件預設並未包含中文字型,若直接繪圖,圖表中的中文(如標題、座標軸標籤)將會顯示為無法辨識的方塊亂碼(暱稱為豆腐)。因此,繪製中文圖表前的第一步,就是手動安裝並設定字型。
本案例應用重點:
!wget ...: 我們在 Colab 中使用wget這個指令,從網路上下載一個開源的思源黑體字型檔 (.otf檔),並將其存放在系統的字型路徑中。import matplotlib.font_manager as fm: 引入字型管理器,用來讀取我們剛下載的字型檔。plt.rcParams['font.family'] = ...: 這是最關鍵的一步,透過rcParams(runtime configuration parameters) 這個設定,我們明確地告知matplotlib:「接下來所有的圖表,請一律使用我們剛剛指定的那個中文字型來繪製。」
2. 載入數據
files.upload(): 執行這行程式碼時,Colab 會在您的瀏覽器中跳出一個檔案上傳的對話視窗,讓您可以從本機電腦選擇要上傳的檔案uploaded = ...: 當您選擇檔案並完成上傳後,files.upload()會回傳一個 Python 字典 (dictionary),裡面包含了您上傳的檔案資訊(檔名作為key,檔案內容作為value)。這個字典會被存放在uploaded這個變數中。try: ... except Exception as e: ...:這是一個錯誤處理的結構。try:: 程式會嘗試執行try區塊內的所有程式碼。except Exception as e:: 如果在try的過程中,發生任何錯誤(例如,上傳的檔案不是 CSV 格式、檔案已損毀等),程式不會因此崩潰,而是會跳到except區塊,執行裡面的程式碼來處理這個例外狀況。
file_name = next(iter(uploaded)):因為uploaded是一個字典,我們需要從中取出檔名。iter(uploaded)會建立一個字典鍵(也就是檔名)的迭代器。next(...)則會從這個迭代器中取出第一個項目。由於我們一次只上傳一個檔案,所以這樣就能成功取得該檔案的檔名。
如果使用本地端的編輯器執行Python腳本(例如Spyder,VSCode),只要設定好工作目錄,就可以直接使用pandas read_csv() 方法載入數據集。upload()是用在當你使用colab環境時。
3. Pandas DataFrame – 資料的載入與檢視
核心概念: pandas 的 DataFrame 是我們進行資料分析的基礎結構,就像一張功能強大的電子表格。
本案例應用重點:
pd.read_csv(): 從 Colab 環境中讀取上傳的 CSV 檔案,並將其轉換成一個 DataFrame。df.info()與df.head(): 這是資料分析的第一步。.info()用來快速檢視資料的整體狀況(欄位名稱、資料型態、是否有缺失值),.head()則是用來預覽資料的前幾行,確保資料載入正確。
4. Pandas – 時間序列資料處理
核心概念: 在分析社群貼文這類具有時間性的資料時,正確地處理時間欄位至關重要。
本案例應用重點:
pd.to_datetime(): Colab 讀取 CSV 時,日期時間會被當作一般的文字字串。我們必須使用pd.to_datetime()這個函式,將其轉換為 Python 認得的「時間物件」,這樣才能進行後續的時間排序或分析。
5. Pandas – 資料的計算、篩選與轉換
核心概念: 我們需要對原始資料進行加工,才能得到我們想分析的指標。
本案例應用重點:
df['New Column'] = ...: 建立一個新的欄位。例如,我們將多個互動指標相加,建立了一個Total Interactions欄位。.sum():axis=0(預設) 代表「沿著橫向 (列)」進行計算。它會沿著列的方向進行加總,也就是將每個欄的數值加起來。你可以想像成把表格「垂直」地加起來,得到每一欄的總和。我們用這個方法來計算每一篇貼文(每一列)的總’瀏覽次數’和總’觸及人數’,和每一篇貼文的各種互動指標的總數(‘按讚數’、’分享’、’留言數’、’珍藏次數’)df[...]: 使用方括號來選取特定的欄位(例如df['Likes'])或多個欄位(例如df[['Likes', 'Shares']])進行後續計算。
.sum(axis=1): 它會沿著欄的方向進行加總,也就是將每個列的數值加起來。你可以想像成把表格「水平」地加起來,得到每一列的總和。
6. Pandas – GroupBy 資料分組與彙總
核心概念: groupby 是 pandas 中最強大、最核心的功能之一,它能將資料根據指定的欄位進行「分組」,然後對各組分別進行計算。
本案例應用重點:
df.groupby('貼文類型'): 這是本案例的分析關鍵。我們根據「貼文類型 」這一欄將所有資料分成數個群組(例如 IG 圖像、IG 輪播等)。
你也可以參考「Python資料處理 (Data Processing)」”pandas篇”
7. Matplotlib & Seaborn – 資料視覺化
核心概念: 將分析完的數字轉換成圖表,才能讓人一目了然地看出結論。
本案例應用重點:
plt.figure(figsize=(10, 6))整句話的意思就是:「請幫我準備一張新的畫布,設定它的寬度為 10 英寸,高度為 6 英寸,接下來我要在這上面畫圖。」sns.barplot(): 我們主要使用seaborn這個基於matplotlib的進階繪圖函式庫。barplot用於繪製長條圖,並且可以透過hue參數,輕鬆繪製出比較不同類別的「分組長條圖」。plt.title()/plt.xlabel()/plt.ylabel(): 這些matplotlib的基本函式,用來為我們的圖表加上標題與 X/Y 軸的說明,讓圖表更具可讀性。plt.xticks(rotation=45): 當 X 軸的標籤文字過長時,可能會互相重疊而難以閱讀。這個函式可以將 X 軸的標籤旋轉 45 度,讓它們錯開顯示。plt.tight_layout(): 自動調整圖表的邊距,確保圖表上的所有元素(如標題、標籤)都能完整顯示,不會被裁切掉。plt.grid(True, axis='y'): 為圖表加上格線,axis='y'代表只顯示水平格線,這有助於讀者更精確地對照 Y 軸的數值。plt.legend(title='...'): 在使用hue參數繪製分組圖表時,這個函式會顯示圖例來說明不同顏色代表的類別,並可以為圖例設定一個標題。plt.show(): 這是顯示圖表的最後一個指令。前面所有的plt或sns函式都只是在「畫布」上設定與繪製圖形,直到呼叫plt.show(),圖表才會被真正地渲染並顯示出來。fig, axs = plt.subplots(...): 當需要在一張大畫布上同時呈現多張圖表時,這個函式非常有用。plt.subplots(1, 2, ...)代表建立一個包含「1 列、2 欄」的子圖網格。它會回傳兩個物件:fig代表整個大畫布,而axs則是一個包含各個子圖(可以透過axs[0],axs[1]來存取)的陣列,讓我們可以在指定的位置上分別繪圖。
你也可以參考「Python資料視覺化 (Data Visualization)」”長條圖&圓餅圖”、”matplotlib”、”seaborn”
總結來說,這個案例的學習路徑是:
讀取資料 -> 時間格式轉換 -> 計算新指標 -> groupby 分組計算 -> matplotlib/seaborn 繪製圖表。