從一開始認識 Python 的基本語法,到後來學習 Requests、BeautifulSoup、Pandas、SQLite 和 Matplotlib,每個階段都有不同的練習內容。剛開始大多是在學習單一功能,例如讀取資料、解析 HTML 或製作圖表,而到了後面,則開始嘗試把這些技術整合成一個完整的專題。
因此,今天除了整理這 30 天學到的內容,也會回顧 Day 29 完成的書籍爬蟲與價格分析系統,整理整個專題的執行流程,並思考未來還有哪些可以改進的地方。
一、30 天學習內容回顧
這次的學習主題是「Python 爬蟲與資料分析實戰:從網路資料到資訊視覺化」,目標是從 Python 基礎開始,逐步完成資料取得、清理、儲存、分析和視覺化。
30 天的內容可以分成以下幾個階段。
第一階段:Python 基礎與程式設計
Day 1~Day 6 主要學習 Python 的基本語法,包括變數、資料型態、List、Dictionary、條件判斷、迴圈、函式、模組和例外處理。
這些內容是後續實作的基礎。例如,在爬蟲程式中會使用迴圈處理多筆資料,使用函式整理重複的程式邏輯,也會透過例外處理避免程式因為錯誤而直接中斷。
第二階段:網頁爬蟲與 HTML 解析
Day 7~Day 17 開始接觸 HTTP、Requests、HTML、BeautifulSoup、CSS Selector、分頁爬取、資料驗證、請求間隔和重試機制。
這個階段讓我了解,網站上的資料並不是直接就能拿來分析,而是需要先發送請求取得 HTML,再從網頁結構中找到需要的資訊。
例如,書名可以從標題標籤取得,價格可以從指定的 CSS Selector 擷取,而多頁資料則可以透過尋找下一頁的連結持續爬取。
第三階段:Pandas 資料清理與分析
Day 18~Day 22 開始使用 Pandas 操作 DataFrame,練習缺失值處理、重複資料移除、資料轉換、分組統計和欄位新增。
這個階段讓我發現,取得資料並不代表工作已經完成。原始資料可能有缺失值、格式不一致或重複紀錄,因此需要先整理,才能讓後續的統計結果更可靠。
第四階段:SQLite 資料庫
Day 23~Day 25 學習 SQLite 和 SQL,包含建立資料表、插入資料、查詢、篩選、排序和分組統計。
透過資料庫,可以把爬取到的資料保存起來,不必每次都從頭整理,也能利用 SQL 查詢需要的資訊。
第五階段:資料視覺化與專題整合
Day 26~Day 30 將重點放在 Matplotlib、圖表美化、資料分析報表和完整專題整合。
這個階段不只是學習如何畫圖,而是把前面取得和整理好的資料轉換成容易理解的分析結果,最後再將整個流程整理成一個完整的作品。
二、最終專題:書籍爬蟲與價格分析系統
這次的最終專題使用 Books to Scrape 作為練習網站,目標是透過 Python 自動取得書籍資料,再進行整理、儲存和分析。
系統主要包含以下功能:
自動取得網站上的書籍資料。
擷取書名、價格、評分、庫存狀態和網址。
清理重複或不符合條件的資料。
使用 Pandas 計算價格和評分的統計結果。
使用 SQLite 儲存資料。
使用 SQL 查詢書籍數量和平均價格。
使用 Matplotlib 製作書籍評分與價格分析圖表。
將清理後的資料、統計結果和圖表匯出保存。
這個專題的重點不是建立大型系統,而是實際練習一個完整的資料處理流程,了解不同工具如何互相配合。
三、完整資料分析流程
整個專題可以分成六個主要步驟。
第一步:取得網頁資料
使用 Requests 發送 HTTP 請求,取得網站回傳的 HTML。
第二步:解析網頁內容
使用 BeautifulSoup 找到書籍區塊,擷取書名、價格、評分和其他欄位。
第三步:清理資料
使用 Pandas 移除重複資料、處理缺失值,並確保價格和評分可以進行數值運算。
第四步:儲存資料
將整理後的資料寫入 SQLite,讓資料可以透過 SQL 查詢。
第五步:進行統計分析
使用 Pandas 或 SQL 計算書籍總數、平均價格、最高價格、最低價格,以及不同評分的書籍數量。
第六步:製作視覺化報表
使用 Matplotlib 將統計結果製作成長條圖和直方圖,並將分析結果儲存成圖片。
這六個步驟串起來,就是這次專題最重要的成果。
四、最終程式整合測試
以下提供一段可以在 Google Colab 執行的程式,用來檢查 Day 29 建立的資料是否已經儲存成功,並重新讀取資料庫進行分析。
這段程式不會重新爬取網站,而是直接讀取 Day 29 建立的 books_analysis.db。
import sqlite3
import pandas as pd
import matplotlib.pyplot as plt
conn = sqlite3.connect("books_analysis.db")
df = pd.read_sql_query(
"SELECT * FROM books",
conn
)
conn.close()
print("資料筆數:", len(df))
print("\n前五筆資料:")
print(df.head())
print("\n書籍總數:", len(df))
print("平均價格:", round(df["price"].mean(), 2))
print("最高價格:", df["price"].max())
print("最低價格:", df["price"].min())
rating_counts = df["rating"].value_counts().sort_index()
plt.figure(figsize=(8, 5))
bars = plt.bar(
rating_counts.index,
rating_counts.values,
color="steelblue"
)
plt.bar_label(bars)
plt.title("Number of Books by Rating")
plt.xlabel("Rating")
plt.ylabel("Number of Books")
plt.xticks([1, 2, 3, 4, 5])
plt.tight_layout()
plt.show()
執行後,可以看到資料庫中的書籍筆數、部分資料、價格統計,以及不同評分的書籍數量圖表。
要注意的是,這段程式需要先執行 Day 29 的爬蟲與資料庫程式。如果 Google Colab 已經重設執行環境,必須重新執行 Day 29,或先將之前下載的 books_analysis.db 上傳到目前的 Colab 工作環境。
如果只想確認資料庫是否存在,也可以先執行:
import os
print(os.path.exists("books_analysis.db"))
如果結果是 True,代表目前的工作目錄中存在這個資料庫檔案;如果是 False,就需要重新建立或上傳資料庫。
五、這次專題還有哪些可以改進的地方?
雖然這次已經完成基本的爬蟲與資料分析流程,但仍有一些可以繼續改進的地方。
第一,可以增加更完整的錯誤處理。例如,網站連線失敗時,除了顯示錯誤訊息,也可以記錄失敗的網址,方便後續重新處理。
第二,可以改善資料庫設計。目前的專題主要將書籍資料放在一張資料表中,如果未來需要管理作者、出版社、分類或價格歷史,就可以考慮建立多張資料表,並設計適當的關聯。
第三,可以增加更多分析內容。例如,分析不同評分的價格分布、找出價格最高的書籍,或依照價格區間統計書籍數量。
第四,可以進一步改善視覺化報表。除了單張圖表,也可以將多張圖放在同一個畫面,加入分析摘要,讓使用者更容易掌握重點。
第五,可以將目前在 Google Colab 執行的程式整理成更有結構的 Python 專案。如果未來要讓其他人使用,也可以進一步製作網頁介面,讓使用者直接查看資料和分析結果。
這些功能不一定要在 30 天內全部完成,但可以作為未來繼續學習和改進專題的方向。
六、30 天學習心得
這 30 天最大的收穫,是讓我對 Python 爬蟲與資料分析有了比較完整的認識。
一開始接觸 Python 時,主要是在學習基本語法和簡單的資料操作。後來開始接觸網頁爬蟲,才知道如何從網站取得資料;再透過 Pandas 整理資料、SQLite 儲存資料,以及 Matplotlib 製作圖表,逐步把不同的技術連接起來。
實作過程中也發現,程式不一定每次都能直接執行成功。有時候會遇到資料格式不一致、找不到 HTML 標籤,或是資料庫檔案不存在等問題。這些狀況讓我更了解,除了學會語法之外,也需要學會檢查資料、閱讀錯誤訊息和逐步除錯。
另外,我也發現資料分析不是單純計算數字,而是要先確認資料品質,再選擇適合的分析方法,最後將結果清楚地呈現出來。
透過這次的學習,我不敢說自己已經完全熟悉所有技術,但至少已經有能力把學過的內容組合起來,完成一個基本的資料分析專題。未來如果遇到新的資料來源或分析需求,也比較知道應該從哪個步驟開始。
七、30 天之後的學習方向
完成這次鐵人賽後,接下來可以繼續深入幾個方向。
進階爬蟲: 學習 API 資料取得、分頁處理,以及更完整的錯誤處理。
資料分析: 深入學習 Pandas、資料探索和統計分析。
資料庫: 練習更完整的 SQL 查詢、資料表關聯和資料庫設計。
資料視覺化: 學習更多 Matplotlib 功能,或進一步接觸互動式圖表。
專題應用: 嘗試將資料分析流程延伸成網頁應用,讓使用者可以查看和操作分析結果。
之後也可以換成其他主題,例如商品價格比較、公開資料分析或股票歷史資料分析,繼續練習相同的資料處理流程。
結語:30 天鐵人賽正式完成
這次的「Python 爬蟲與資料分析實戰:從網路資料到資訊視覺化」終於來到最後一天。
回顧這 30 天,從 Python 基礎、網頁爬蟲、資料清理,到資料庫、統計分析和視覺化,我逐步完成了從取得資料到呈現結果的練習,也透過最後的整合專題,實際應用前面學過的內容。
對我來說,這次學習最重要的不是記住多少個函式,而是開始理解如何將不同的工具組合起來,解決一個完整的問題。
30 天的結束不代表學習停止,而是有了一個可以繼續延伸的基礎。接下來,我希望能透過更多實際專題,持續累積 Python 程式設計、資料處理和分析的經驗。
以上就是這次 30 天 Python 爬蟲與資料分析學習的完整紀錄,正式收尾!