資料分析中,視覺化扮演著重要角色,能有效地理解資料分佈和趨勢。本文使用 Python 的 Seaborn 和 Pandas 函式庫,對 Amazon 產品評論資料進行視覺化分析。首先,我們利用 countplot 函式繪製星級評分分佈長條圖,清晰地呈現各星級的評論數量。接著,將評論日期轉換為 datetime 格式後,使用 histplot 函式繪製評論日期直方圖,觀察時間趨勢。進一步分析評論內容,計算每條評論的長度並統計正面和負面評論的數量,最後計算平均評論長度,提供更全面的資料洞察。
評價資料的視覺化分析與評論內容探勘
在資料分析過程中,視覺化是理解資料分佈和特徵的重要步驟。本文將透過直方圖和長條圖來呈現星級評價(star_rating)的分佈,並進一步分析評論日期(review_date)的時間趨勢,最後探討評論內容(review_body)的長度和情感分析。
星級評價分佈視覺化
為了理解星級評價的分佈情況,我們使用 Seaborn 的 countplot() 函式建立了一個長條圖,用於展示各個星級評價的數量。
程式碼實作:
import matplotlib.pyplot as plt
import seaborn as sns
# 設定圖形大小
plt.figure(figsize=(8, 6))
# 繪製星級評價分佈圖
sns.countplot(x='star_rating', data=df)
plt.title('星級評價分佈')
plt.xlabel('星級評價')
plt.ylabel('數量')
# 顯示圖形
plt.show()
#### 內容解密:
- 使用
sns.countplot()函式根據star_rating欄位繪製長條圖,x 軸代表星級評價(1 至 5 星),y 軸代表對應的評論數量。 - 透過設定
figsize引數調整圖形大小,以提高可讀性。 - 新增標題和軸標籤,使得圖形更具可讀性和上下文關聯性。
時間趨勢分析
接下來,我們分析評論日期欄位的時間趨勢,以瞭解評論在時間上的分佈情況。
程式碼實作:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# 將 'review_date' 轉換為 datetime 格式
df['review_date'] = pd.to_datetime(df['review_date'])
# 設定圖形大小
plt.figure(figsize=(12, 6))
# 繪製評論日期的直方圖
sns.histplot(df['review_date'], bins=30, kde=False, color='blue')
plt.title('評論日期分佈')
plt.xlabel('評論日期')
plt.ylabel('評論數量')
# 調整 x 軸標籤旋轉角度並調整佈局
plt.xticks(rotation=45)
plt.tight_layout()
# 顯示圖形
plt.show()
#### 內容解密:
- 使用
pd.to_datetime()將review_date欄位轉換為 datetime 格式,以確保時間分析的準確性。 - 利用
sns.histplot()繪製評論日期的直方圖,透過設定bins引數來控制區間數量,並設定顏色為藍色。 - 調整 x 軸標籤的旋轉角度和圖形佈局,以提高圖形的清晰度。
評論內容分析
在觀察到評論主要集中在兩個日期後,我們進一步分析評論內容的長度和情感傾向。
程式碼實作:
# 計算每條評論的長度
df['review_length'] = df['review_body'].apply(len)
# 統計正面和負面評論的數量
sentiment_counts = df['sentiments'].value_counts()
# 顯示情感統計結果
print("情感統計:")
print(sentiment_counts)
# 計算平均評論長度
average_review_length = df['review_length'].mean()
print(f"\n平均評論長度:{average_review_length:.2f} 字元")
# 顯示 DataFrame 的前幾行以驗證結果
df.head()
#### 內容解密:
- 使用
apply(len)方法計算每條評論的字元數量,並將結果儲存在新的review_length欄位中。 - 利用
value_counts()方法統計sentiments欄位中不同情感類別的數量,以瞭解評論的整體情感傾向。 - 計算並顯示平均評論長度,以量化評論內容的詳細程度。
- 顯示 DataFrame 的前幾行,以驗證新欄位的新增和計算結果的正確性。
資料探索與ChatGPT的協作分析
資料探索的過程與結果
在資料探索的過程中,我們利用ChatGPT進行了多項分析,包括評論長度的計算、情感分析以及相關性研究。這些分析幫助我們深入瞭解資料集的特性與內在聯絡。
評論長度與情感分析
首先,我們執行了評論長度的計算和情感分析的程式碼。結果顯示,資料集中包含398條正面評價和102條負面評價,平均評論長度約為243.75個字元。
程式碼解析
評論長度計算與情感分析程式碼
# 計算評論長度並進行情感分析
df['review_length'] = df['review_body'].apply(len)
sentiment_counts = df['sentiments'].value_counts()
average_review_length = df['review_length'].mean()
print(sentiment_counts)
print(f"平均評論長度:{average_review_length} 個字元")
內容解密:
df['review_body'].apply(len):此行程式碼計算每個評論的字元長度,並將結果儲存在新的review_length欄位中。df['sentiments'].value_counts():此函式統計sentiments欄位中不同情感類別(正面或負面)的出現次數。df['review_length'].mean():計算所有評論的平均長度,以字元為單位。
相關性研究
接著,我們進行了相關性研究,以瞭解資料集中數值變數之間的關係,特別是star_rating、helpful_votes和total_votes之間的相關性。
相關性研究的程式碼與解說
import matplotlib.pyplot as plt
import seaborn as sns
# 計算相關性矩陣
correlation_matrix = df[['star_rating', 'helpful_votes', 'total_votes']].corr()
# 繪製相關性熱力圖
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('數值變數的相關性矩陣')
plt.show()
內容解密:
df[['star_rating', 'helpful_votes', 'total_votes']].corr():此行程式碼計算選定數值欄位之間的相關係數,生成相關性矩陣。sns.heatmap():利用Seaborn函式庫中的heatmap函式繪製相關性矩陣的熱力圖。annot=True引數為熱力圖的每個單元格新增數值註解,而cmap='coolwarm'則設定了顏色對映方案,從藍色(負相關)到紅色(正相關)。- 相關性解釋:熱力圖顯示了變數之間的相關性,範圍從-1到1。其中,接近1的值表示強烈的正相關,接近-1的值表示強烈的負相關,而接近0的值則表示變數之間沒有顯著的相關性。
分析結果與未來方向
透過上述分析,我們獲得了對資料集的初步瞭解,包括情感分佈和評論長度等資訊。相關性研究進一步揭示了資料集中不同數值變數之間的關係。這些見解為後續的資料分析和模型建立提供了重要的參考依據。
未來,我們可以根據這些初步發現進一步探索資料集的其他方面,例如進行更深入的文字分析或建立預測模型,以挖掘資料中更多的價值。
使用 ChatGPT 進行資料探索
在前面的章節中,我們探討瞭如何使用 ChatGPT-3.5 進行初步的資料探索。現在,我們將進一步瞭解如何利用 ChatGPT-4o 進行更深入的分析。
使用 ChatGPT-4o 探索 Amazon 評論資料集
ChatGPT 的高階版本具備程式碼解譯器,可以透過 ChatGPT-4o 和 ChatGPT 4 存取。為了進行更全面的分析,我們將使用 GPT-4o,並一次性獲得完整的程式碼。
提示(Prompt)
我們設計了以下提示,以引導 ChatGPT 對 Amazon 產品評論資料集進行全面的統計和視覺化分析:
我想使用各種統計和視覺化技術(TAG 1.1)對所附的 Amazon 產品評論資料集(PIC 2.3)進行深入探索。分析應包括以下步驟(TAG 1.2):
1. 資料載入:將資料集載入 pandas DataFrame。
2. 資料檢查:檢查缺失資料、瞭解資料型別並檢查前幾個條目。
3. 統計摘要:計算數值資料的摘要統計資訊。
4. 分類別分析:使用計數和視覺化分析分類別變數。
5. 評分分佈:建立直方圖或條形圖以視覺化星級評分的分佈。
6. 時間趨勢:根據評論日期檢查時間趨勢。
7. 評論文字分析:分析評論文字的長度和情感。
8. 相關性研究:評估數值變數之間的相關性。
作為一名資料分析師,我希望能夠發現可行的見解(PIC 2.1),因此請提供詳細的程式碼。
ChatGPT 的回應
ChatGPT 根據我們的提示,逐步完成了資料探索的各個步驟,並生成了相關的圖表。
資料載入與檢查
首先,ChatGPT 將資料集載入 pandas DataFrame,並檢查了缺失資料、資料型別和前幾個條目。結果顯示,資料集包含 500 個條目和 15 列,沒有缺失資料。
統計摘要
接下來,ChatGPT 計算了數值資料的摘要統計資訊,包括平均值、標準差、最小值和最大值等。
詳細分析結果
以下是各個步驟的詳細結果和發現:
統計摘要
- 星級評分:平均值 = 0.796,標準差 = 0.403,最小值 = 0,最大值 = 1
- 有幫助的投票數:平均值 = 0.764,標準差 = 2.843,最小值 = 0,最大值 = 36
- 總投票數:平均值 = 1.068,標準差 = 3.698,最小值 = 0,最大值 = 47
分類別分析
根據評論數量,排名前列的類別包括:
- Grocery:100 篇評論
- Digital_Ebook_Purchase:100 篇評論
- Jewelry:100 篇評論
- PC:100 篇評論
- Books:100 篇評論
評分分佈
ChatGPT 生成了星級評分分佈的直方圖,如下所示: 此圖示展示了星級評分的分佈情況。
時間趨勢
透過分析評論日期,ChatGPT 生成了每月評論數量的 此圖示顯示了評論數量隨時間的變化趨勢。
評論文字分析
ChatGPT 分析了評論文字的長度和情感,結果如下:
評論長度分佈: 此圖示展示了評論長度的分佈情況。
評論情感分佈: 此圖示顯示了評論的情感傾向。
相關性研究
最後,ChatGPT 評估了數值變數之間的相關性,並生成了相關矩陣的熱力圖:
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title 評論資料視覺化分析與內容探勘
package "自然語言處理流程" {
package "文本預處理" {
component [分詞 Tokenization] as token
component [詞性標註 POS Tagging] as pos
component [命名實體識別 NER] as ner
}
package "特徵提取" {
component [詞嵌入 Word Embedding] as embed
component [TF-IDF] as tfidf
component [詞袋模型 BoW] as bow
}
package "模型層" {
component [BERT/GPT] as transformer
component [LSTM/RNN] as rnn
component [分類器] as classifier
}
}
token --> pos : 序列標註
pos --> ner : 實體抽取
token --> embed : 向量化
embed --> transformer : 上下文編碼
transformer --> classifier : 任務輸出
note right of transformer
預訓練語言模型
捕捉語義關係
end note
@enduml
此圖示展示了數值變數之間的相關性。
程式碼範例與解析
以下是用於上述分析的 Python 程式碼範例:
import pandas as pd
import matplotlib.pyplot as plt
# 載入資料集
df = pd.read_csv('amazon_reviews.csv')
# 資料檢查
print(df.head())
print(df.info())
# 統計摘要
print(df.describe())
# 分類別分析
category_counts = df['product_category'].value_counts()
print(category_counts)
# 評分分佈
plt.hist(df['star_rating'], bins=5)
plt.title('星級評分分佈')
plt.show()
# 時間趨勢
df['review_date'] = pd.to_datetime(df['review_date'])
df['month'] = df['review_date'].dt.month
monthly_reviews = df['month'].value_counts().sort_index()
plt.bar(monthly_reviews.index, monthly_reviews.values)
plt.title('每月評論數量')
plt.show()
# 評論文字分析
df['review_length'] = df['review_body'].apply(len)
plt.hist(df['review_length'], bins=50)
plt.title('評論長度分佈')
plt.show()
sentiment_counts = df['sentiments'].value_counts()
plt.bar(sentiment_counts.index, sentiment_counts.values)
plt.title('評論情感分佈')
plt.show()
# 相關性研究
corr_matrix = df[['star_rating', 'helpful_votes', 'total_votes']].corr()
plt.imshow(corr_matrix, cmap='hot', interpolation='nearest')
plt.title('相關矩陣')
plt.show()
內容解密:
- 資料載入與檢查:首先,我們使用
pd.read_csv將資料集載入 DataFrame,並使用head()和info()方法檢查資料的基本資訊。 - 統計摘要:使用
describe()方法計算數值欄位的統計摘要資訊。 - 分類別分析:透過
value_counts()方法統計各類別的評論數量。 - 評分分佈:使用
matplotlib的hist()方法繪製星級評分的直方圖。 - 時間趨勢:將
review_date轉換為日期格式,並提取月份資訊,使用value_counts()統計每月評論數量並繪製條形圖。 - 評論文字分析:計算每條評論的長度並繪製長度分佈直方圖,同時統計評論的情感傾向並繪製條形圖。
- 相關性研究:計算數值變數之間的相關矩陣,並使用熱力圖展示相關性。
透過這些步驟,我們能夠全面地瞭解 Amazon 產品評論資料集中的關鍵資訊和趨勢,為業務決策提供有價值的參考。
使用 ChatGPT 進行分類別模型建立
簡介
在前一章中,我們利用 ChatGPT 進行了 Amazon 書籍評論的資料探索,本章將探討監督式學習中的分類別技術。我們將繼續利用 ChatGPT 的能力,增強對監督式學習技術的理解和應用,尤其是在客戶評論的背景下。
在電子商務領域,客戶反饋對於制定業務策略和產品改進至關重要。正如比爾·蓋茨所說:「您的最不滿意的客戶是您最大的學習來源。」客戶的情感往往埋藏在大量的產品評論中。然而,手動審查這些包含各種屬性的評論,如產品 ID、標題、文字、評分和有用投票,是一項艱鉅且通常難以管理的任務。
本章將重點放在將客戶評論分為兩類別:正面和負面。我們將利用從 ChatGPT 中獲得的見解來處理和分析客戶評論資料。
商業問題
在電子商務專案中,瞭解客戶反饋有助於識別影響客戶購買決策的關鍵因素,從而制定有針對性的行銷策略。此外,它還允許最佳化使用者經驗和網站設計,以提高提供更好的服務和產品給客戶的可能性。
問題與資料領域
在本文中,我們旨在使用 Amazon 產品評論資料集建立客戶評論情感分析的分類別模型。利用 ChatGPT 的能力,我們將生成 Python 程式碼來構建分類別模型,為讀者提供一個處理資料集和理解分類別技術的實用方法。此外,我們還將探索有效的提示技術,以引導 ChatGPT 提供量身定製的程式碼片段和見解,用於資料分類別任務。
資料集概述
Amazon 產品評論資料集包含各種產品及其對應評論的資訊。透過利用此資料集,我們可以進行各種分析,包括情感分析、客戶反饋趨勢分析和產品評分分析。最終目標是訓練一個能夠準確將評論分類別為正面或負面情感的分類別模型,從而增強電子商務平台及相關行業的決策過程和客戶滿意度。
資料集中的特徵包括:
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(字串):評論的情感(正面或負面)。
review_body 和 review_headline 中的文字資料對於自然語言處理任務(包括情感分析)尤其有價值。為了簡化目的,我們排除了中立情感類別,重點關注建立分類別模型和提示技術。
# 以下是一個簡單的 Python 程式碼範例,用於載入資料集並進行基本的情感分析
import pandas as pd
# 載入資料集
df = pd.read_csv('amazon_product_reviews.csv')
# 檢視資料集的前幾行
print(df.head())
# 統計正面和負面評論的數量
print(df['Sentiments'].value_counts())
內容解密:
這段程式碼首先載入必要的 pandas 函式庫,然後使用 read_csv 函式載入 Amazon 產品評論資料集。接著,它使用 head 方法檢視資料集的前幾行,以瞭解資料的基本結構。最後,使用 value_counts 方法統計資料集中正面和負面評論的數量,以初步瞭解資料的情感分佈情況。
分類別模型的建立
在建立分類別模型之前,我們需要對資料進行預處理,包括處理缺失值、轉換類別變數等。然後,我們可以使用機器學習演算法(如邏輯迴歸、隨機森林等)來訓練模型。
# 以下是一個簡單的 Python 程式碼範例,用於建立邏輯迴歸分類別模型
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 將資料分為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(df['review_body'], df['Sentiments'], test_size=0.2, random_state=42)
# 使用 TF-IDF 向量化文字資料
vectorizer = TfidfVectorizer()
X_train_vectorized = vectorizer.fit_transform(X_train)
X_test_vectorized = vectorizer.transform(X_test)
# 建立邏輯迴歸模型
model = LogisticRegression()
model.fit(X_train_vectorized, y_train)
# 預測測試集的情感
y_pred = model.predict(X_test_vectorized)
# 評估模型的準確度
accuracy = accuracy_score(y_test, y_pred)
print(f'模型的準確度:{accuracy:.3f}')
內容解密:
這段程式碼首先使用 train_test_split 函式將資料分為訓練集和測試集。然後,使用 TfidfVectorizer 將文字資料向量化,以便輸入到機器學習模型中。接著,建立一個邏輯迴歸模型,並使用訓練集進行訓練。最後,使用測試集評估模型的準確度,並印出結果。