iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0
自我挑戰組

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

Day 18|開始進入資料分析:用 Pandas 整理爬蟲資料

  • 分享至 

  • xImage
  •  

前面 17 天主要都在學 Python、HTTP、Requests、BeautifulSoup,以及實際把網站資料抓下來。

到目前為止,我已經可以做到:

網站
↓
Requests
↓
BeautifulSoup
↓
抓取資料
↓
清理資料
↓
處理錯誤
↓
Retry
↓
取得結構化資料

但如果今天要開始分析 1000 筆甚至更多資料,只使用 List 和 Dictionary 會變得比較麻煩。

例如之前的資料是:

[
{
"title": "...",
"price": 51.77,
"stock": 22,
"rating": 3
},
...
]

如果資料越來越多,想要:

找出最高價格
計算平均價格
篩選評分
排序
統計資料
找出缺失值

就會需要寫很多程式。

所以從今天開始,我要正式進入 Pandas 資料分析。

一、什麼是 Pandas?

Pandas 是 Python 很常使用的資料分析套件。

如果把資料分析想成處理 Excel:

Excel
↓
表格
↓
欄位
↓
資料列
↓
篩選
↓
排序
↓
統計

Pandas 就可以在 Python 裡完成類似的事情。

其中最重要的資料結構叫做:

DataFrame

可以把它想成一張可以用 Python 操作的表格。

例如:

title price stock rating

Book A 51.77 22 3
Book B 35.02 10 5
Book C 17.46 35 4

這就是 DataFrame 很適合處理的資料。

二、先在 Colab 安裝/匯入 Pandas

Google Colab 通常已經有 Pandas,所以不需要另外安裝。

直接:

import pandas as pd

這裡的:

pd

是 Pandas 常見的縮寫。

所以之後看到:

pd.DataFrame()

就知道是在使用 Pandas。

三、建立第一個 DataFrame

先自己建立一些書籍資料。

import pandas as pd

books = [
{
"title": "Book A",
"price": 51.77,
"stock": 22,
"rating": 3
},
{
"title": "Book B",
"price": 35.02,
"stock": 10,
"rating": 5
},
{
"title": "Book C",
"price": 17.46,
"stock": 35,
"rating": 4
}
]

df = pd.DataFrame(books)

print(df)

會得到類似:

title  price  stock  rating

0 Book A 51.77 22 3
1 Book B 35.02 10 5
2 Book C 17.46 35 4

這就是 DataFrame。

四、DataFrame 的基本概念

現在可以把它想成一個表格。

         欄位
          ↓

title price stock rating
↓ ↓ ↓ ↓
Book A 51.77 22 3
Book B 35.02 10 5
Book C 17.46 35 4
↑
資料列

每一個欄位都有自己的資料。

例如:

df["price"]

就是取得 price 欄位。

print(df["price"])

可能會得到:

0 51.77
1 35.02
2 17.46
Name: price, dtype: float64
五、查看資料前幾筆

如果之後真的有 1000 筆資料,不可能全部 print() 出來。

所以可以使用:

df.head()

例如:

print(df.head())

預設會顯示前 5 筆資料。

也可以:

df.head(3)

只看前 3 筆。

六、查看最後幾筆資料

相反地,如果想看最後幾筆:

df.tail()

例如:

print(df.tail())

這對檢查爬蟲資料很方便。

例如:

前面資料正常嗎?
最後一頁資料有沒有成功抓到?

都可以快速確認。

七、查看資料有幾列、幾欄

這個功能我覺得在爬蟲很實用。

print(df.shape)

例如:

(1000, 4)

代表:

1000 列
4 個欄位

也就是:

1000 筆書籍資料
4 個資料欄位
八、查看欄位名稱

可以使用:

print(df.columns)

例如:

Index(['title', 'price', 'stock', 'rating'], dtype='object')

也可以:

print(df.columns.tolist())

結果會比較容易閱讀:

['title', 'price', 'stock', 'rating']
九、查看資料型態

前面有特別提到資料清理。

現在可以使用 Pandas 直接查看:

print(df.dtypes)

可能會看到:

title object
price float64
stock int64
rating int64

這裡就可以確認:

title
→ 文字

price
→ 浮點數

stock
→ 整數

rating
→ 整數

這也是為什麼 Day 15 要把價格從:

£51.77

整理成:

51.77

如果沒有整理好,之後 Pandas 可能會把價格當成文字。

十、開始做真正的資料分析

現在資料已經進入 DataFrame。

例如我要找出平均價格:

average_price = df["price"].mean()

print("平均價格:", average_price)

這裡的:

.mean()

就是計算平均值。

找最高價格
print(df["price"].max())
找最低價格
print(df["price"].min())
計算價格總和
print(df["price"].sum())
計算書籍數量
print(df["title"].count())

所以基本統計可以變成:

print("平均價格:", df["price"].mean())
print("最高價格:", df["price"].max())
print("最低價格:", df["price"].min())
print("總價格:", df["price"].sum())

這比自己用 for 迴圈處理方便很多。

十一、篩選資料

這是 Pandas 很重要的功能。

例如我只想看價格大於 40 的書:

expensive_books = df[df["price"] > 40]

print(expensive_books)

它會把符合條件的資料列出來。

概念上就是:

所有書
↓
price > 40 ?
↓
是 → 保留
否 → 排除
十二、篩選高評分書籍

例如只想看評分 4 分以上:

high_rating = df[df["rating"] >= 4]

print(high_rating)

這樣就可以快速找出高評分資料。

十三、同時使用兩個條件

例如:

「價格小於 30,而且評分至少 4 分」

可以寫:

result = df[
(df["price"] < 30) &
(df["rating"] >= 4)
]

print(result)

這裡:

&

代表「而且」。

所以:

price < 30
+
rating >= 4

兩個條件都符合才會留下來。

十四、排序資料

假設我想按照價格由低到高排序:

sorted_df = df.sort_values(
"price"
)

print(sorted_df)

如果想從高到低:

sorted_df = df.sort_values(
"price",
ascending=False
)

print(sorted_df)

這樣就可以很快找到價格最高的書。

十五、把前幾天的爬蟲接進 Pandas

這才是今天最重要的實作。

前面我們已經有:

all_books

而且裡面有很多 Dictionary:

[
{
"title": "...",
"price": 51.77,
"stock": 22,
"rating": 3
},
...
]

所以現在只需要:

df = pd.DataFrame(all_books)

就可以把爬蟲資料轉成 DataFrame。

完整來看:

import pandas as pd

df = pd.DataFrame(all_books)

print(df.head())
print(df.shape)
print(df.dtypes)

這就是:

爬蟲
↓
all_books
↓
Pandas DataFrame
↓
資料分析
十六、直接分析爬蟲資料

例如:

print("資料筆數:", len(df))

print(
"平均價格:",
df["price"].mean()
)

print(
"最高價格:",
df["price"].max()
)

print(
"最低價格:",
df["price"].min()
)

print(
"平均評分:",
df["rating"].mean()
)

如果前面的爬蟲成功抓到 1000 本書,就可以直接對這 1000 筆資料進行分析。

十七、查看整體統計資訊

Pandas 還提供一個很方便的功能:

print(df.describe())

它會自動整理數值欄位的統計資訊,例如:

         price        stock       rating

count ...
mean ...
std ...
min ...
25% ...
50% ...
75% ...
max ...

這裡可以快速看到:

資料筆數
平均值
標準差
最小值
四分位數
最大值

目前可能還不需要完全理解每一個統計量,但先知道 describe() 可以快速查看資料的基本統計就很有用。

十八、今天的完整實作

如果把今天學到的內容整理成一個小流程:

import pandas as pd

將爬蟲資料轉成 DataFrame

df = pd.DataFrame(all_books)

查看前 5 筆

print(df.head())

查看資料大小

print("資料大小:", df.shape)

查看資料型態

print(df.dtypes)

平均價格

print(
"平均價格:",
df["price"].mean()
)

最高價格

print(
"最高價格:",
df["price"].max()
)

最低價格

print(
"最低價格:",
df["price"].min()
)

平均評分

print(
"平均評分:",
df["rating"].mean()
)

找出價格低於 20 的書

cheap_books = df[
df["price"] < 20
]

print(cheap_books)

按照價格由高到低排序

sorted_books = df.sort_values(
"price",
ascending=False
)

print(sorted_books.head())

這時候已經不是單純「爬蟲」了,而是開始完成:

爬蟲 → 資料清理 → 資料分析

十九、今天的實作流程

今天最大的變化就是加入 Pandas:

網站
↓
Requests
↓
BeautifulSoup
↓
抓取資料
↓
資料清理
↓
List + Dictionary
↓
Pandas DataFrame
↓
篩選
↓
排序
↓
統計

之前如果要分析資料,可能要自己寫很多 for 迴圈。

現在 Pandas 可以直接使用:

.mean()
.max()
.min()
.sum()
.sort_values()

來處理大量資料。


上一篇
Day 17|讓爬蟲更可靠:Retry 重試機制與錯誤處理
系列文
Python 爬蟲與資料分析實戰:從網路資料到資訊視覺化 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言