返回文章列表

亞馬遜商品評論資料集探索分析

本文利用 Python 和相關函式庫,深入探索亞馬遜商品評論資料集。從資料載入、清洗、探索性資料分析到視覺化呈現,逐步揭示資料的特性與潛在價值。過程中使用了 Pandas 進行資料處理、Matplotlib 和 Seaborn

資料分析 Python

資料分析在電商領域扮演著至關重要的角色,亞馬遜商品評論資料集蘊含著豐富的客戶回饋資訊。本文將運用 Python 的 Pandas、Matplotlib 和 Seaborn 等函式庫,系統性地探索這個資料集,從資料載入、初步檢視到統計分析和視覺化呈現,逐步剖析資料的內涵,挖掘潛在的商業價值。首先,我們會使用 Pandas 讀取 CSV 格式的資料集,並檢查資料的完整性和各欄位的資料型別。接著,針對數值欄位,例如星級評分、有用票數和總票數,計算其描述性統計量,例如平均值、標準差、四分位數等,以瞭解資料的分佈特性。

資料探索與分析:Amazon 商品評論資料集

在電子商務的背景下,深入理解客戶的反饋和評論對於企業制定策略和改進產品至關重要。本章將透過系統性的方法來探索 Amazon 商品評論資料集,從資料載入到深入分析,逐步揭露資料中的洞察。

步驟一:載入資料集

首先,我們需要將 Amazon 商品評論資料集載入到 pandas DataFrame 中。pandas 是 Python 中一個強大的資料操作函式庫,能夠方便地進行資料處理。

import pandas as pd

# 載入資料集
def load_dataset(file_path):
    try:
        data = pd.read_csv(file_path)
        return data
    except Exception as e:
        print(f"載入資料失敗:{e}")

# 使用範例
file_path = 'amazon_product_reviews.csv'  # 假設資料集檔案名稱
df = load_dataset(file_path)
print(df.head())  # 顯示前幾筆資料

內容解密:

  1. import pandas as pd:匯入 pandas 函式庫並簡寫為 pd,方便後續使用。
  2. load_dataset 函式:定義一個函式用於載入指定路徑的 CSV 檔案。
  3. pd.read_csv(file_path):使用 pandas 的 read_csv 方法讀取 CSV 檔案。
  4. try-except 區塊:用於捕捉並處理可能發生的錯誤,例如檔案路徑錯誤或檔案格式不正確。
  5. df.head():顯示 DataFrame 的前幾筆資料,用於初步檢查資料內容。

步驟二:檢查資料

接下來,我們需要檢查資料的完整性、資料型別以及是否存在缺失值。

def inspect_data(df):
    # 檢查資料前幾行
    print(df.head())
    # 檢查資料型別
    print(df.dtypes)
    # 檢查缺失值
    print(df.isnull().sum())

# 使用範例
inspect_data(df)

內容解密:

  1. df.head():顯示 DataFrame 的前幾筆資料,幫助瞭解資料的基本結構。
  2. df.dtypes:檢查每列資料的資料型別,確保資料型別符合預期。
  3. df.isnull().sum():統計每列的缺失值數量,幫助識別需要處理的缺失資料。

步驟三:計算數值資料的摘要統計

為了了解數值資料的分佈情況,我們需要計算平均值、中位數、最小值、最大值和四分位數等統計指標。

def summary_statistics(df):
    # 計算數值欄位的摘要統計
    numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns
    print(df[numeric_cols].describe())

# 使用範例
summary_statistics(df)

內容解密:

  1. df.select_dtypes(include=['int64', 'float64']).columns:篩選出數值型別的欄位。
  2. df[numeric_cols].describe():計算並顯示數值欄位的摘要統計資訊,包括計數、平均值、標準差、最小值、四分位數和最大值。

步驟四:分析類別變數

對於類別變數,如市場、產品類別和情感傾向,我們將檢查不同類別的數量並使用視覺化工具進行展示。

import matplotlib.pyplot as plt

def categorical_analysis(df, column):
    # 分析類別變數
    category_counts = df[column].value_counts()
    print(category_counts)
    # 繪製長條圖
    plt.figure(figsize=(10,6))
    category_counts.plot(kind='bar')
    plt.title(f'{column} 分佈')
    plt.xlabel(column)
    plt.ylabel('計數')
    plt.show()

# 使用範例
categorical_analysis(df, 'marketplace')

內容解密:

  1. df[column].value_counts():統計指定欄位中不同類別的出現次數。
  2. plt.figure(figsize=(10,6)):建立一個新的圖形視窗,並設定大小。
  3. category_counts.plot(kind='bar'):繪製長條圖以視覺化類別變數的分佈。
  4. plt.title, plt.xlabel, plt.ylabel:設定圖表的標題和軸標籤。

步驟五:評分分佈視覺化

使用直方圖或長條圖來視覺化星級評分的分佈,以瞭解評論者的整體意見。

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

# 使用範例
rating_distribution(df)

內容解密:

  1. df['star_rating'].hist(bins=5, edgecolor='black'):繪製星級評分的直方圖,劃分為 5 個區間,並設定直方圖邊緣顏色。

步驟六:時間趨勢分析

分析評論日期中的趨勢、季節性或其他時間模式,以瞭解情感或產品人氣如何隨時間變化。

def temporal_analysis(df):
    # 將 review_date 轉換為 datetime 格式
    df['review_date'] = pd.to_datetime(df['review_date'])
    # 按月份統計評論數量
    monthly_reviews = df.resample('M', on='review_date').size()
    # 繪製時間序列圖
    plt.figure(figsize=(10,6))
    monthly_reviews.plot()
    plt.title('每月評論數量')
    plt.xlabel('日期')
    plt.ylabel('評論數量')
    plt.show()

# 使用範例
temporal_analysis(df)

內容解密:

  1. pd.to_datetime(df['review_date']):將評論日期轉換為 datetime 格式,以便進行時間序列分析。
  2. df.resample('M', on='review_date').size():按月份重新取樣並統計評論數量。

使用免費版 ChatGPT 探索亞馬遜評論資料集

資料載入與初步檢視

首先,我們需要載入亞馬遜產品評論資料集。該資料集包含以下欄位:

  • marketplace(字串):產品銷售的地區。
  • customer_id(字串):客戶的唯一識別碼。
  • review_id(字串):評論的唯一識別碼。
  • product_id(字串):產品的唯一識別碼。
  • product_parent(字串):父產品的識別碼。
  • product_title(字串):被評論產品的標題。
  • product_category(字串):產品的類別。
  • star_rating(整數):產品的評分,範圍從1到5。
  • helpful_votes(整數):評論收到的有用票數。
  • total_votes(整數):評論收到的總票數。
  • review_headline(字串):評論的標題。
  • review_body(字串):評論的內容。
  • review_date(字串):評論的日期。
  • sentiments(字串):評論的情感(正面或負面)。

步驟1:資料載入

我們的目標是將資料集載入 pandas DataFrame。以下是具體步驟:

  1. 掛載 Google Drive:連線到存放資料集的 Google Drive。
  2. 載入資料集:將資料集檔案讀入 pandas DataFrame。

詳細程式碼說明:

  1. 掛載 Google Drive

    • from google.colab import drive:從 google.colab 套件匯入 drive 模組,用於與 Google Drive 互動。
    • drive.mount('/content/drive'):將 Google Drive 掛載到指定路徑(本例中為 /content/drive)。執行後需按照指示授權並輸入存取碼。
  2. 載入資料集

    • import pandas as pd:匯入 pandas 函式庫並簡稱為 pd,用於資料操作。
    • file_path = '/content/drive/My Drive/Chapter05/amazon_product_review_data.csv':定義 Google Drive 中 CSV 檔案的路徑。
    • df = pd.read_csv(file_path):使用 pd.read_csv() 函式讀取 CSV 檔案到名為 df 的 DataFrame 中。

程式碼片段:

# 掛載 Google Drive 以存取資料集
from google.colab import drive
drive.mount('/content/drive')

# 匯入 pandas 進行資料操作
import pandas as pd

# 定義 Google Drive 中的檔案路徑
file_path = '/content/drive/My Drive/Chapter05/amazon_product_review_data.csv'

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

# 顯示 DataFrame 的前幾行以驗證資料
df.head()

內容解密:

  1. from google.colab import drive:這行程式碼是為了在 Google Colab 環境中掛載 Google Drive,以便能夠存取儲存在 Drive 中的資料集。
  2. drive.mount('/content/drive'):執行此行後,會出現授權提示,需要按照提示完成授權流程,以允許 Google Colab 存取你的 Google Drive。
  3. import pandas as pd:匯入 pandas 函式庫,它是 Python 中一個非常強大的資料分析工具,用於資料的操作和分析。
  4. file_path = '/content/drive/My Drive/Chapter05/amazon_product_review_data.csv':指定了資料集在 Google Drive 中的具體路徑,需根據實際存放位置進行調整。
  5. df = pd.read_csv(file_path):使用 pandas 的 read_csv 方法將指定路徑的 CSV 檔案讀取到 DataFrame 中,方便後續的資料分析和處理。
  6. df.head():用於顯示 DataFrame 的前幾行,預設是前5行,用於初步檢查資料是否正確載入。

後續步驟

成功載入資料後,下一步是檢查資料的完整性、瞭解資料型別,並對數值型資料進行統計摘要。接著,我們會進行類別變數分析、評分分佈視覺化、時間趨勢分析、評論文字分析和相關性研究等步驟。這些步驟將有助於我們深入瞭解亞馬遜評論資料集的特性和隱含的商業洞察。

資料檢視與統計分析

在進行資料分析時,資料檢視和統計分析是至關重要的步驟。透過這些步驟,我們可以瞭解資料的基本結構、內容,以及數值資料的統計特性。

資料檢視

首先,我們需要對載入的資料集進行檢視,以瞭解其基本資訊、資料型別和內容。這包括檢查資料是否存在缺失值、瞭解各欄位的資料型別,以及檢視資料的前幾筆記錄以掌握資料的大致結構。

程式碼範例

# 檢查資料是否存在缺失值以及各欄位的資料型別
df.info()
# 顯示資料的前幾筆記錄
df.head()

內容解密:

  1. df.info() 方法:提供 DataFrame 的簡要摘要,包括每個欄位的非空值數量和資料型別。透過這個方法,我們可以快速瞭解資料的整體狀況和欄位的資料型別是否正確。

  2. df.head() 方法:顯示 DataFrame 的前幾筆記錄,讓我們能夠直觀地瞭解各欄位的值和資料的結構。

資料檢視結果分析

根據 df.info()df.head() 的輸出結果,我們可以得出以下結論:

  1. 基本資訊

    • 資料集包含 500 筆記錄和 15 個欄位。
    • 資料型別包括數值 (int64) 和類別 (object) 型別。
    • 所有欄位均無缺失值。
  2. 欄位詳情

    • market_placecustomer_idreview_idproduct_idproduct_parentproduct_titleproduct_categoryverified_purchasereview_headlinereview_bodyreview_datesentiments 等欄位均為 object(字串)型別,這與預期相符。
    • star_ratinghelpful_votestotal_votes 正確地被識別為 int64(整數)型別。
  3. 初始資料預覽

    • df.head() 輸出結果讓我們得以一窺資料的結構和內容,包括 market_placecustomer_idstar_rating 等欄位的值。

統計摘要

接下來,我們將計算數值欄位(star_ratinghelpful_votestotal_votes)的統計摘要,以進一步瞭解這些數值資料的特性。

程式碼範例

# 計算數值欄位的統計摘要
summary_stats = df[['star_rating', 'helpful_votes', 'total_votes']].describe()
# 顯示統計摘要結果
print(summary_stats)

內容解密:

  1. describe() 方法:計算數值欄位的統計摘要,包括計數、平均值、標準差、最小值、25%、50% 和 75% 百分位數以及最大值。

  2. 選擇特定欄位:透過 df[['star_rating', 'helpful_votes', 'total_votes']],我們可以限定輸出只包含我們感興趣的數值欄位。

下一步

根據上述分析結果,資料集看起來是乾淨的,沒有缺失值。下一步,我們可以進一步探索資料的其他導向,或是根據這些統計摘要結果進行更深入的分析。

資料探索與 ChatGPT 的應用

在資料科學的領域中,資料探索是一項至關重要的步驟。它涉及對資料集進行深入的分析,以瞭解其結構、內容和特性。ChatGPT 作為一個先進的語言模型,可以協助我們完成這項任務。

步驟 3:數值變數分析

首先,我們需要對資料集中的數值變數進行分析。這些變數包括 star_ratinghelpful_votestotal_votes。我們使用 Pandas 的 describe() 函式來取得這些變數的摘要統計資訊。

程式碼範例:

import pandas as pd

# 假設 df 是我們的資料集
print(df[['star_rating', 'helpful_votes', 'total_votes']].describe())

內容解密:

  1. df[['star_rating', 'helpful_votes', 'total_votes']]:選取資料集中的 star_ratinghelpful_votestotal_votes 三個數值變數。
  2. .describe():計算並顯示這些變數的摘要統計資訊,包括計數、平均值、標準差、最小值、25% 百分位數、中位數、75% 百分位數和最大值。

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

          star_rating  helpful_votes  total_votes
count   500.000000    500.000000   500.000000
mean      0.796000      0.764000     1.068000
std       0.403373      2.843321     3.698477
min       0.000000      0.000000     0.000000
25%       1.000000      0.000000     0.000000
50%       1.000000      0.000000     0.000000
75%       1.000000      1.000000     1.000000
max       1.000000     36.000000    47.000000

分析結果

根據摘要統計資訊,我們可以對這些數值變數進行深入的分析。

  1. star_rating

    • 平均值(Mean):0.796
    • 標準差(Standard Deviation):0.403
    • 最小值(Min):0,最大值(Max):1
    • 這表明大多數評論的星級評分是正面的(接近1),且變異性不大。
  2. helpful_votes

    • 平均值:0.764
    • 標準差:2.843
    • 最小值:0,最大值:36
    • 這顯示平均而言,評論獲得的幫助票數不多,但存在一定的變異性,有些評論獲得了大量的幫助票。
  3. total_votes

    • 平均值:1.068
    • 標準差:3.698
    • 最小值:0,最大值:47
    • 這表明平均而言,每篇評論收到的總票數(包括幫助和非幫助票)略多於1,且存在一定的變異性。

下一步:分類別變數分析

接下來,我們將對分類別變數進行分析,包括 market_placeproduct_categoryverified_purchasesentiments。我們將使用計數和視覺化的方法來瞭解這些變數的分佈特性。

程式碼範例:

import matplotlib.pyplot as plt
import seaborn as sns

# 設定 matplotlib 圖形和軸
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(14, 10))
axes = axes.flatten()

# 對 'market_place' 繪製計數圖
sns.countplot(x='market_place', data=df, ax=axes[0])
axes[0].set_title('各市場評論分佈')

# 對 'product_category' 繪製計數圖
sns.countplot(x='product_category', data=df, ax=axes[1])
axes[1].set_title('各產品類別評論分佈')
axes[1].tick_params(axis='x', rotation=90)

# 對 'verified_purchase' 繪製計數圖
sns.countplot(x='verified_purchase', data=df, ax=axes[2])
axes[2].set_title('驗證購買評論分佈')

# 對 'sentiments' 繪製計數圖
sns.countplot(x='sentiments', data=df, ax=axes[3])
axes[3].set_title('評論情感分佈')

# 調整佈局
plt.tight_layout()
plt.show()

內容解密:

  1. sns.countplot():用於繪製分類別變數的計數圖,顯示每個類別的頻率。
  2. axes[i].set_title():為每個子圖設定標題。
  3. plt.tight_layout():自動調整子圖間距,以避免標題或標籤重疊。

分類別變數視覺化結果

透過視覺化,我們發現所有評論都來自單一市場,各產品類別的評論數量均等,但正面和負面評論的分佈存在不平衡,驗證購買的評論分佈也存在一定程度的不平衡。

評級分佈分析

下一步,我們將進一步分析評級的分佈,以更深入地瞭解評論資料的特性。

此圖示為分類別變數視覺化的結果,呈現了不同分類別變數的分佈情況,有助於我們快速理解資料的特性。