iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0
自我挑戰組

Python 爬蟲與資料分析實戰:從網路資料到資訊視覺化系列 第 30 篇

Day 30|Python 爬蟲與資料分析實戰:最終成果展示與 30 天學習總結

  • 分享至 

  • xImage
  •  

從一開始認識 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

連接 Day 29 建立的 SQLite 資料庫

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 爬蟲與資料分析學習的完整紀錄,正式收尾!


上一篇
Day 29|整合專題實作:使用 Python 爬蟲建立書籍價格分析系統
系列文
Python 爬蟲與資料分析實戰:從網路資料到資訊視覺化 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言