返回文章列表

電子商務資料探索與分析實務

本文以 AwesomeShop 電子商務專案為例,示範如何使用 Python 和 Pandas 進行資料探索與分析,涵蓋資料載入、檢查、探索性分析、時間序列分析和評論分析等關鍵步驟,並搭配程式碼範例和圖表說明,提供實務操作。

資料分析 電子商務

Pandas 與 Matplotlib 是 Python 資料分析的常用工具,本文將示範如何運用這些工具對電子商務資料進行探索性分析。首先,我們會使用 Pandas 載入資料集,並檢查資料結構、資料型別和缺失值。接著,我們會探索類別變數,例如市場、產品類別和顧客評價,並使用條形圖視覺化其分佈。然後,我們會分析評分分佈、時間趨勢以及評論長度,以深入瞭解顧客行為和產品表現。最後,我們會使用相關矩陣和熱力圖來研究數值變數之間的相關性,例如評分、有用投票數和總投票數,找出潛在的關聯。

資料探索與分析:AwesomeShop 電子商務專案

載入資料集

首先,我們需要將資料集讀取到 pandas DataFrame 中,以便有效地處理資料。

import pandas as pd

# 定義檔案路徑
file_path = '../Datasets/amazon_books_Data.csv'

# 載入資料集
df = pd.read_csv(file_path)

# 顯示 DataFrame 的前幾行
print(df.head())

內容解密:

  1. import pandas as pd:匯入 pandas 函式庫並將其別名設為 pd,以便後續使用。
  2. file_path = '../Datasets/amazon_books_Data.csv':指定資料集檔案的路徑。
  3. df = pd.read_csv(file_path):使用 pd.read_csv() 函式讀取 CSV 檔案並將其儲存在 DataFrame df 中。
  4. print(df.head()):顯示 DataFrame 的前幾行(預設為前 5 行),以便初步檢查資料。

檢查資料

接下來,我們需要檢查資料的結構和內容,包括列名、資料型別和缺失值。

# 檢查資料的結構和內容
print(df.info())
print(df.describe())

內容解密:

  1. print(df.info()):顯示 DataFrame 的簡要資訊,包括列名、資料型別和非缺失值的數量。
  2. print(df.describe()):計算並顯示數值列的匯總統計資訊,包括均值、中位數、最小值、最大值和四分位數。

探索類別變數

分析類別變數(如 marketplaceproduct_categorysentiment)的唯一值和頻率。

# 分析類別變數的唯一值和頻率
print(df['marketplace'].value_counts())
print(df['product_category'].value_counts())
print(df['sentiment'].value_counts())

# 使用條形圖視覺化類別變數的分佈
import matplotlib.pyplot as plt

df['marketplace'].value_counts().plot(kind='bar')
plt.title('Marketplace Distribution')
plt.show()

df['product_category'].value_counts().plot(kind='bar')
plt.title('Product Category Distribution')
plt.show()

df['sentiment'].value_counts().plot(kind='bar')
plt.title('Sentiment Distribution')
plt.show()

內容解密:

  1. print(df['column_name'].value_counts()):計算並顯示指定類別列的唯一值和頻率。
  2. 使用 matplotlib 函式庫繪製條形圖,以視覺化類別變數的分佈。

評分分佈

繪製直方圖或條形圖以視覺化 star_rating 的分佈。

# 繪製 star_rating 的直方圖
df['star_rating'].plot.hist(bins=5, figsize=(8,6))
plt.title('Star Rating Distribution')
plt.xlabel('Star Rating')
plt.ylabel('Frequency')
plt.show()

內容解密:

  1. df['star_rating'].plot.hist():繪製 star_rating 的直方圖,以展示評分的分佈情況。

時間分析

分析 review_date 列的時間趨勢、季節性或模式。

# 將 review_date 列轉換為 datetime 型別
df['review_date'] = pd.to_datetime(df['review_date'])

# 按月份統計評論數量
df['review_month'] = df['review_date'].dt.month
df['review_month'].value_counts().sort_index().plot(kind='bar')
plt.title('Monthly Review Count')
plt.xlabel('Month')
plt.ylabel('Count')
plt.show()

內容解密:

  1. pd.to_datetime():將 review_date 列轉換為 datetime 型別,以便進行時間相關的分析。
  2. 按月份統計評論數量並繪製條形圖,以展示時間趨勢。

評論長度分析

分析 review_body 的長度,以瞭解評論中提供的資訊量。

# 計算 review_body 的長度
df['review_length'] = df['review_body'].apply(len)

# 計算評論長度的匯總統計資訊
print(df['review_length'].describe())

內容解密:

  1. df['review_body'].apply(len):計算每個評論的長度(字元數)。
  2. print(df['review_length'].describe()):計算並顯示評論長度的匯總統計資訊。

相關性分析

使用相關矩陣或散點圖來調查數值變數之間的相關性。

# 計算數值變數之間的相關矩陣
corr_matrix = df[['star_rating', 'helpful_votes', 'total_votes']].corr()
print(corr_matrix)

# 繪製相關矩陣的熱力圖
import seaborn as sns

sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', square=True)
plt.title('Correlation Matrix')
plt.show()

內容解密:

  1. df[['column_names']].corr():計算指定數值列之間的相關矩陣。
  2. 使用 seaborn 函式庫繪製相關矩陣的熱力圖,以視覺化變數之間的相關性。

其他探索性分析

根據具體的專案需求或在探索過程中觀察到的有趣模式,進行額外的分析。

使用Copilot進行機器學習的實務操作

步驟1:載入資料集

首先,我們需要載入資料集以進行後續的分析與處理。在這個範例中,我們將使用一個包含客戶評論的資料集。

載入必要的函式庫

import pandas as pd

載入資料集

# 假設資料集檔案名稱為 "reviews.csv"
df = pd.read_csv("reviews.csv")

顯示資料集的前幾行

print(df.head())

步驟2:檢查資料

在進行分析之前,我們需要檢查資料的完整性與正確性。

檢查欄位名稱

print("欄位名稱:")
print(df.columns)

檢查每個欄位的資料型態

print("\n資料型態:")
print(df.dtypes)

檢查是否有缺失值

print("\n缺失值:")
print(df.isnull().sum())

#### 內容解密:

  1. df.columns 用於顯示 DataFrame 中的所有欄位名稱,幫助我們瞭解資料集的結構。
  2. df.dtypes 用於檢查每個欄位的資料型態,確保資料被正確解讀。
  3. df.isnull().sum() 用於統計每個欄位中的缺失值數量,幫助我們識別需要處理的資料問題。

步驟3:計算摘要統計資料

對於數值型欄位,我們可以計算其摘要統計資料以瞭解其分佈和範圍。

篩選數值型欄位並計算摘要統計資料

numeric_columns = ['star_rating', 'helpful_votes', 'total_votes']
print(df[numeric_columns].describe())

#### 內容解密:

  1. df[numeric_columns].describe() 用於計算所選數值型欄位的摘要統計資料,包括計數、平均值、標準差、最小值、25百分位數、中位數、75百分位數和最大值。
  2. 這些統計資料幫助我們快速瞭解數值型欄位的分佈特徵。

步驟4:探索類別變數

對於類別型欄位,我們需要探索其分佈以瞭解不同類別的出現頻率。

探索類別變數的分佈

categorical_columns = ['market_place', 'product_category', 'vine', 'verified_purchase']
for column in categorical_columns:
    print(f"\n{column} 的分佈:")
    print(df[column].value_counts())

#### 內容解密:

  1. df[column].value_counts() 用於統計指定類別型欄位中每個類別的出現次數。
  2. 透過瞭解類別變數的分佈,我們可以識別主要的類別及其相對比例。

此圖示說明瞭機器學習流程中的關鍵步驟,從資料載入到後續的分析或建模,每一步驟都至關重要。

使用 Copilot 進行機器學習分析的完整流程

步驟 4:探索分類別變數

在進行資料分析時,瞭解分類別變數的分佈狀況至關重要。分類別變數如市場、產品類別和情感分析結果,能夠提供有關資料特性的重要資訊。

分析分類別變數的程式碼範例

# 分析分類別變數
categorical_cols = ['market_place', 'product_category', 'Sentiment_books']
for col in categorical_cols:
    unique_values = df[col].unique()
    value_counts = df[col].value_counts()
    print(f"\n{col} 的唯一值:\n{unique_values}\n")
    print(f"{col} 的值計數:\n{value_counts}")

程式碼解說

  1. 選擇分類別變數:首先,我們選定了需要分析的分類別變數欄位,包括 market_placeproduct_categorySentiment_books
  2. 計算唯一值和值計數:對於每個分類別變數,我們使用 unique() 方法取得其所有唯一值,並使用 value_counts() 方法統計每個唯一值的出現次數。
  3. 輸出結果:最後,將每個欄位的唯一值和值計數結果列印預出來,以便觀察和分析。

結果分析

透過上述程式碼,我們得到了以下輸出結果:

  • market_place 唯一值為 ["US"],且全部 100 筆資料均來自 “US”。
  • product_category 唯一值為 ["Books"],表示所有評論均與書籍相關。
  • Sentiment_books 的情感分析結果顯示,正面評價(positive)有 84 筆,負面評價(negative)有 16 筆。

步驟 5:星級評分的分佈

接下來,我們將視覺化星級評分的分佈,以瞭解評論的整體情感傾向。

繪製星級評分直方圖的程式碼範例

import matplotlib.pyplot as plt

# 繪製星級評分的直方圖
plt.hist(df['star_rating'], bins=5, edgecolor='black')
plt.xlabel('星級評分')
plt.ylabel('頻率')
plt.title('星級評分分佈')
plt.show()

程式碼解說

  1. 匯入必要的函式庫:使用 matplotlib.pyplot 進行資料視覺化。
  2. 繪製直方圖:利用 plt.hist() 方法繪製星級評分的直方圖,並設定 bins=5 以對應 1 至 5 星的評分割槽間。
  3. 設定圖表屬性:為直方圖新增標題、x 軸標籤和 y 軸標籤,以便更直觀地理解圖表內容。

結果分析

從生成的直方圖中,我們可以觀察到星級評分的分佈狀況,從而瞭解整體評論的情感傾向。

步驟 6:時間序列分析

為了進一步探索資料的時間特性,我們將對評論日期進行分析。

時間序列分析的程式碼範例

# 將 review_date 轉換為 datetime 格式
df['review_date'] = pd.to_datetime(df['review_date'])

# 分別提取年、月、日資訊到新的欄位
df['year'] = df['review_date'].dt.year
df['month'] = df['review_date'].dt.month
df['day'] = df['review_date'].dt.day

# 統計各年份、月份和日期的評論數量
print(df['year'].value_counts().sort_index())
print(df['month'].value_counts().sort_index())
print(df['day'].value_counts().sort_index())

程式碼解說

  1. 日期格式轉換:使用 pd.to_datetime()review_date 欄位轉換為 datetime 格式,以便進行日期相關操作。
  2. 提取年、月、日資訊:分別從 review_date 中提取年、月、日,並存入新的欄位中。
  3. 統計評論數量:使用 value_counts() 方法統計每個年份、月份和日期的評論數量,並按索引排序輸出結果。

結果分析

結果顯示,所有評論均發生在 2015 年 8 月 31 日,表明資料的時間範圍非常集中。

步驟 7:評論長度分析

最後,我們將分析評論內容的長度,以瞭解評論中提供資訊的詳細程度。

評論長度分析的程式碼範例

# 計算每條評論的長度
df['review_length'] = df['review_body'].str.len()

# 輸出評論長度的描述性統計結果
print(df['review_length'].describe())

程式碼解說

  1. 計算評論長度:透過對 review_body 欄位中的字串長度進行統計,計算每條評論的長度,並將結果存入 review_length 欄位。
  2. 描述性統計分析:使用 describe() 方法輸出 review_length 的描述性統計結果,包括平均值、中位數、最大值等指標。

結果預期

透過上述分析,我們可以獲得有關評論長度的統計資訊,從而瞭解評論內容的詳細程度和資訊量。

使用 Copilot 進行機器學習分析

在前面的步驟中,我們已經瞭解瞭如何使用 Copilot 來分析評論資料的日期分佈。現在,我們將進一步探討如何進行評論長度分析和相關性分析。

評論長度分析

首先,讓我們來分析評論的長度。我們使用以下程式碼來計算每個評論的長度並提供描述性統計資料:

# Step 7: 評論長度分析
# 計算每個評論的長度
df['review_length'] = df['review_body'].str.len()
# 計算評論長度的描述性統計資料
print(df['review_length'].describe())

內容解密:

  1. df['review_length'] = df['review_body'].str.len():這行程式碼建立了一個新的欄位 review_length,用於儲存每個評論的字元數。str.len() 函式計算每個字串的長度。
  2. print(df['review_length'].describe()):這行程式碼輸出 review_length 欄位的描述性統計資料,包括計數、平均值、標準差、最小值、25% 百分位數、中位數、75% 百分位數和最大值。

執行上述程式碼後,我們得到以下輸出:

count    100.000000
mean     253.190000
std      420.934403
min        6.000000
25%       36.000000
50%      104.500000
75%      269.750000
max     2685.000000
Name: review_length, dtype: float64

這個輸出結果告訴我們,資料集中有 100 個評論,平均每個評論的長度約為 253 個字元。標準差約為 421,表明評論長度的變化很大。最短的評論只有 6 個字元,而最長的評論則有 2685 個字元。

相關性分析

接下來,我們要進行相關性分析,以瞭解不同變數之間的關係。我們使用以下程式碼來計算 star_ratinghelpful_votestotal_votes 之間的相關係數:

# Step 8: 相關性分析
# 計算相關係數矩陣
correlation_matrix = df[['star_rating', 'helpful_votes', 'total_votes']].corr()
# 輸出相關係數矩陣
print(correlation_matrix)

內容解密:

  1. df[['star_rating', 'helpful_votes', 'total_votes']].corr():這行程式碼選取了 star_ratinghelpful_votestotal_votes 這三個欄位,並計算它們之間的相關係數矩陣。corr() 函式用於計算資料框中各欄位之間的相關係數。
  2. print(correlation_matrix):這行程式碼輸出相關係數矩陣,讓我們瞭解這三個變數之間的線性關係。

透過相關性分析,我們可以瞭解不同變數之間的相互關係,從而進一步探索資料的內在結構和規律。未來,我們還可以考慮對評論內容進行文字分析,或是使用機器學習模型來預測評分的變化趨勢。

未來方向

根據目前的分析結果,我們可以考慮以下幾個方向進行進一步的研究:

  1. 視覺化評論長度:透過繪製直方圖或密度圖來視覺化評論長度的分佈,以更直觀地瞭解評論長度的變化。
  2. 文字分析:對評論內容進行文字分析,例如提取關鍵字、情緒分析等,以瞭解消費者對產品的看法和意見。
  3. 機器學習預測:利用機器學習模型來預測產品的評分或銷量,根據歷史資料和相關變數之間的關係。

這些方向將有助於我們更深入地瞭解消費者行為和市場趨勢,並為業務決策提供資料支援。