pandas、numpy、matplotlib.pyplot、seaborn。fontManager 的角色。plt.rcParams['font.family'] 讓整份 notebook 共用同一個字型。我正在使用 Google Colab,請幫我寫一段 Python 環境初始化程式碼,包含:
1) 匯入 pandas、numpy、matplotlib.pyplot、seaborn,並用慣例別名。
2) 下載 ChocolateClassicalSans-Regular.ttf 到 /usr/share/fonts/truetype/chocolateclassicalsans/ 並註冊給 matplotlib.fontManager。
3) 將 plt.rcParams['font.family'] 設為該中文字型,確保後續圖表能顯示中文。
4) 在設定完成後印出「✅ 中文字型設定完成!」,若失敗印出錯誤訊息。
5) 最後用一張含有中文標題的測試圖(例如 plt.title("測試中文"))驗證是否成功。
請用註解標示每個 step,並說明為什麼要這樣做。
!pip list | grep -E "pandas|matplotlib|seaborn" 確認套件存在plt.title("測試中文") 的空白圖驗證顯示正常Glyph XXXX missing from current font,表示字型沒被成功載入;這時先檢查 fm.fontManager.addfont(...) 是否執行過,再重新 plt.rcParams['font.family']=...。
import matplotlib.font_manager as fm
import matplotlib.pyplot as plt
# step1: 取得中文字型檔並設定字型管理員(fontManager),以利 Matplotlib 正常顯示圖表中的中文
!mkdir -p /usr/share/fonts/truetype/chocolateclassicalsans/
!wget -O /usr/share/fonts/truetype/chocolateclassicalsans/ChocolateClassicalSans-Regular.ttf "https://github.com/google/fonts/raw/main/ofl/chocolateclassicalsans/ChocolateClassicalSans-Regular.ttf"
try:
my_font = '/usr/share/fonts/truetype/chocolateclassicalsans/ChocolateClassicalSans-Regular.ttf'
fm.fontManager.addfont(my_font) # Add my_font to the font manager
font_prop = fm.FontProperties(fname=my_font)
plt.rcParams['font.family'] = font_prop.get_name()
print("✅ 中文字型設定完成!")
except Exception as e:
print(f"🚨 中文字型設定失敗:{e}")
pd.read_csv() 讀檔,並以 head()、info()、describe() 做初步健檢。isna().sum()、duplicated().sum() 找出資料清理的優先順位。我有一個名為 ig_2025.csv 的檔案(已上傳到 Colab)。請用 pandas 幫我完成以下初步探索,並在每一步印出結果:
1) 用 pd.read_csv('ig_2025.csv') 讀入並命名為 df。
2) 顯示 df.shape、df.head(5)、df.info()、df.describe(include='all')。
3) 列出每一欄的缺值數量 (isna().sum()) 以及重複列數 (duplicated().sum())。
4) 將欄位分成三類印出:類別型欄位、數值型欄位、日期型欄位(若有)。
5) 用一段文字說明:若我想做「比例分析 / 類別比較 / 時序趨勢 / 數值分布 / 異常值偵測 / 雙變數關聯」分別建議使用哪些欄位。
請加上繁體中文註解。
df.head() 親眼看資料,再決定要不要接受 AI 給你的欄位分類。尤其是被存成字串的日期欄(例:"2025-03-12"),要記得用 pd.to_datetime() 轉型,後面畫折線圖才會順。
value_counts() 統計類別欄位的出現頻率。plt.pie() 繪製圓餅圖,設定 labels、autopct、startangle。使用 df(來自 ig_2025.csv),請用 matplotlib 畫一張 Pie Chart 呈現「貼文類型 (post_type)」的占比。要求: 1) 先用 df['post_type'].value_counts() 取出數量並印出。 2) 若類別數超過 5 個,將小於 3% 的合併為「其他」。 3) 圖表標題為「2025 IG 貼文類型占比」,每一塊顯示百分比 (autopct='%1.1f%%')。 4) 使用柔和色盤(例如 seaborn 的 pastel)。 5) 在圖下方加一段繁體中文結論,指出最大占比的類別與比例。 請以繁體中文註解每個步驟,並提醒「何時不該用 pie chart」。
groupby() + mean()/sum()/count() 聚合,再用 plt.bar() 或 sns.barplot() 繪圖。sort_values)以加強敘事。ax.bar_label) 提升可讀性。用 df(來自 ig_2025.csv)畫一張 Bar Chart 比較「不同貼文類型 (post_type) 的平均按讚數 (likes)」。要求:
1) 用 groupby('post_type')['likes'].mean().sort_values(ascending=False) 取得結果。
2) 用 seaborn 的 barplot 繪圖,X 軸為類別、Y 軸為平均讚數。
3) 在每根柱子上加上數值標籤(保留整數)。
4) 標題「2025 各類貼文平均讚數比較」,Y 軸標籤「平均按讚數」。
5) 旋轉 X 軸文字 30 度避免重疊。
6) 加一段繁體中文結論:最受歡迎的貼文類型是哪一類,其平均讚數是第二名的幾倍。
請用繁體中文註解,並提醒「bar chart 的 Y 軸為何必須從 0 開始」。
pd.to_datetime() 轉型並以 set_index('date').resample('W') 做週彙總。plt.plot() 或 sns.lineplot() 畫趨勢,處理多序列 (hue=)。用 df(來自 ig_2025.csv)畫一張 Line Chart 呈現「2025 年每週貼文數量的趨勢」。要求:
1) 將 df['date'] 用 pd.to_datetime 轉為時間型別。
2) 以週為單位聚合:df.set_index('date').resample('W').size()。
3) 用 matplotlib 畫折線圖,加上標題「2025 每週貼文量趨勢」與 X/Y 軸中文標籤。
4) 疊加一條 4 週移動平均 (rolling(4).mean()) 作為趨勢線,並以虛線呈現。
5) 標出全年最高峰週與最低谷週(用 annotate 加文字箭頭)。
6) 最後用繁體中文解讀:整體趨勢、峰谷原因推測、對下半年內容策略的建議。
請加繁體中文註解。
plt.scatter() 或 sns.scatterplot() 畫出雙變數散佈點。hue(顏色)與 size(點大小)把第三、第四個變數編進同一張圖。sns.regplot 或 lmplot 加上迴歸線,並解讀 df.corr() 的 Pearson 係數。alpha、hexbin、或抽樣解決。用 df(來自 ig_2025.csv)畫一張 Scatter Plot 探討「按讚數 (likes) 與留言數 (comments) 的關聯」。要求: 1) 先用 df[['likes','comments']].corr() 計算 Pearson 相關係數並印出。 2) 用 seaborn 的 scatterplot 繪圖:X=likes、Y=comments;用 hue=post_type 以顏色區分類型,alpha=0.5 降低 overplotting。 3) 疊加一條全體資料的迴歸線(sns.regplot,scatter=False),並在標題旁邊註明 r 值。 4) 若 likes 右偏嚴重,請再產生一張同時對 X、Y 取 log 軸的版本作對照。 5) 用 annotate 標出 1–2 個明顯離群點(例如 likes 最高但 comments 極低者)。 6) 標題「按讚數 vs 留言數關聯(依貼文類型著色)」,加上中文軸標籤與圖例。 7) 最後用繁體中文總結:整體相關強度與方向、哪一類貼文表現最突出、是否有離群點值得進一步探討。 請以繁體中文註解每個步驟,並提醒「相關 ≠ 因果」。
corr(),對相關強度有數值依據alpha 或抽樣處理 overplottinghue 第三變數,看是否有子群sns.kdeplot 密度圖或 plt.hexbin() 會比硬畫 scatter 清楚得多。
plt.hist() 或 sns.histplot(),並調整 bins。np.log1p() 再畫。用 df(來自 ig_2025.csv)畫 Histogram 呈現「每則貼文按讚數 (likes) 的分布」。要求: 1) 先用 df['likes'].describe() 印出基本統計。 2) 用 seaborn 的 histplot 繪圖,bins=30,並疊加 KDE 曲線。 3) 用紅色虛線標出平均數、用綠色虛線標出中位數。 4) 若資料右偏明顯,再多畫一張「log1p(likes)」的直方圖並列比較。 5) 標題「2025 IG 貼文按讚數分布」。 6) 最後用繁體中文描述:偏態方向、是否有極端值、平均數與中位數哪個比較能代表典型貼文。 請加繁體中文註解。
bins 數量非常敏感,不同 bins 會說出不同故事。實務上建議至少畫 2 個版本對照,再決定最能呈現真相的版本放進簡報。
sns.boxplot(x=類別, y=數值) 快速做分組比較。sns.stripplot / swarmplot 顯示原始點,避免被盒鬚圖過度抽象化。用 df(來自 ig_2025.csv)畫一張 Boxplot,比較「不同貼文類型 (post_type) 的按讚數 (likes) 分布」。要求:
1) 用 seaborn 的 boxplot,X 軸為 post_type,Y 軸為 likes。
2) 疊上半透明的 stripplot,alpha=0.3,讓原始點可見。
3) 若 likes 右偏嚴重,將 Y 軸改為 log scale (plt.yscale('log'))。
4) 在圖中用文字標註每一組的樣本數 n=...。
5) 標題「各類貼文按讚數分布比較」。
6) 請用繁體中文總結:哪一類中位數最高?哪一類變異最大?離群值是否集中?
請加繁體中文註解,並於結尾比較 boxplot 與 violin plot 的差異。
| 圖形 | 回答的問題 | 最佳情境 | 要避免的陷阱 |
|---|---|---|---|
| Pie | 占比(part-to-whole) | 類別 ≤ 5、差異大 | 類別多、不互斥、想比較兩時期 |
| Bar | 類別比較 | 排名、分組統計 | Y 軸不從 0、類別過多未排序 |
| Line | 時間趨勢 | 連續時間、多序列 | 把類別連成線、粒度太細 |
| Histogram | 單一數值分布 | 看偏態、雙峰 | bins 沒試過、不處理極端值 |
| Boxplot | 分組分布 + 離群 | 多組比較、找異常 | 忽略雙峰、樣本差異大 |
| Scatter | 雙變數關聯(相關性) | 兩個連續數值、找群聚/離群 | 誤把相關當因果、overplotting、非線性時硬用 r |
請幫我把前面六張圖(pie、bar、line、histogram、boxplot、scatter)整理成一份「2025 IG 資料 EDA 小報告」。要求: 1) 用 matplotlib 的 subplots(3,3) 將六張圖配置在同一張 figure,剩餘格子放文字結論。 2) 每張子圖都有中文標題與軸標籤,整體使用一致的色盤。 3) 在空白格用 ax.text() 寫出 6 條重點結論(每條一句、對應一張圖)。 4) 最後輸出為 'ig_2025_eda.png',解析度 150 dpi。 5) 在 notebook 印出完整的敘事段落(繁體中文,約 150-200 字),作為研究所報告的摘要。 請加繁體中文註解,並提醒整體色彩一致性與視覺層級。