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())
內容解密:
import pandas as pd:匯入 pandas 函式庫並將其別名設為pd,以便後續使用。file_path = '../Datasets/amazon_books_Data.csv':指定資料集檔案的路徑。df = pd.read_csv(file_path):使用pd.read_csv()函式讀取 CSV 檔案並將其儲存在 DataFramedf中。print(df.head()):顯示 DataFrame 的前幾行(預設為前 5 行),以便初步檢查資料。
檢查資料
接下來,我們需要檢查資料的結構和內容,包括列名、資料型別和缺失值。
# 檢查資料的結構和內容
print(df.info())
print(df.describe())
內容解密:
print(df.info()):顯示 DataFrame 的簡要資訊,包括列名、資料型別和非缺失值的數量。print(df.describe()):計算並顯示數值列的匯總統計資訊,包括均值、中位數、最小值、最大值和四分位數。
探索類別變數
分析類別變數(如 marketplace、product_category 和 sentiment)的唯一值和頻率。
# 分析類別變數的唯一值和頻率
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()
內容解密:
print(df['column_name'].value_counts()):計算並顯示指定類別列的唯一值和頻率。- 使用
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()
內容解密:
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()
內容解密:
pd.to_datetime():將review_date列轉換為 datetime 型別,以便進行時間相關的分析。- 按月份統計評論數量並繪製條形圖,以展示時間趨勢。
評論長度分析
分析 review_body 的長度,以瞭解評論中提供的資訊量。
# 計算 review_body 的長度
df['review_length'] = df['review_body'].apply(len)
# 計算評論長度的匯總統計資訊
print(df['review_length'].describe())
內容解密:
df['review_body'].apply(len):計算每個評論的長度(字元數)。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()
內容解密:
df[['column_names']].corr():計算指定數值列之間的相關矩陣。- 使用
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())
#### 內容解密:
df.columns用於顯示 DataFrame 中的所有欄位名稱,幫助我們瞭解資料集的結構。df.dtypes用於檢查每個欄位的資料型態,確保資料被正確解讀。df.isnull().sum()用於統計每個欄位中的缺失值數量,幫助我們識別需要處理的資料問題。
步驟3:計算摘要統計資料
對於數值型欄位,我們可以計算其摘要統計資料以瞭解其分佈和範圍。
篩選數值型欄位並計算摘要統計資料
numeric_columns = ['star_rating', 'helpful_votes', 'total_votes']
print(df[numeric_columns].describe())
#### 內容解密:
df[numeric_columns].describe()用於計算所選數值型欄位的摘要統計資料,包括計數、平均值、標準差、最小值、25百分位數、中位數、75百分位數和最大值。- 這些統計資料幫助我們快速瞭解數值型欄位的分佈特徵。
步驟4:探索類別變數
對於類別型欄位,我們需要探索其分佈以瞭解不同類別的出現頻率。
探索類別變數的分佈
categorical_columns = ['market_place', 'product_category', 'vine', 'verified_purchase']
for column in categorical_columns:
print(f"\n{column} 的分佈:")
print(df[column].value_counts())
#### 內容解密:
df[column].value_counts()用於統計指定類別型欄位中每個類別的出現次數。- 透過瞭解類別變數的分佈,我們可以識別主要的類別及其相對比例。
此圖示說明瞭機器學習流程中的關鍵步驟,從資料載入到後續的分析或建模,每一步驟都至關重要。
使用 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}")
程式碼解說
- 選擇分類別變數:首先,我們選定了需要分析的分類別變數欄位,包括
market_place、product_category和Sentiment_books。 - 計算唯一值和值計數:對於每個分類別變數,我們使用
unique()方法取得其所有唯一值,並使用value_counts()方法統計每個唯一值的出現次數。 - 輸出結果:最後,將每個欄位的唯一值和值計數結果列印預出來,以便觀察和分析。
結果分析
透過上述程式碼,我們得到了以下輸出結果:
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()
程式碼解說
- 匯入必要的函式庫:使用
matplotlib.pyplot進行資料視覺化。 - 繪製直方圖:利用
plt.hist()方法繪製星級評分的直方圖,並設定bins=5以對應 1 至 5 星的評分割槽間。 - 設定圖表屬性:為直方圖新增標題、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())
程式碼解說
- 日期格式轉換:使用
pd.to_datetime()將review_date欄位轉換為 datetime 格式,以便進行日期相關操作。 - 提取年、月、日資訊:分別從
review_date中提取年、月、日,並存入新的欄位中。 - 統計評論數量:使用
value_counts()方法統計每個年份、月份和日期的評論數量,並按索引排序輸出結果。
結果分析
結果顯示,所有評論均發生在 2015 年 8 月 31 日,表明資料的時間範圍非常集中。
步驟 7:評論長度分析
最後,我們將分析評論內容的長度,以瞭解評論中提供資訊的詳細程度。
評論長度分析的程式碼範例
# 計算每條評論的長度
df['review_length'] = df['review_body'].str.len()
# 輸出評論長度的描述性統計結果
print(df['review_length'].describe())
程式碼解說
- 計算評論長度:透過對
review_body欄位中的字串長度進行統計,計算每條評論的長度,並將結果存入review_length欄位。 - 描述性統計分析:使用
describe()方法輸出review_length的描述性統計結果,包括平均值、中位數、最大值等指標。
結果預期
透過上述分析,我們可以獲得有關評論長度的統計資訊,從而瞭解評論內容的詳細程度和資訊量。
使用 Copilot 進行機器學習分析
在前面的步驟中,我們已經瞭解瞭如何使用 Copilot 來分析評論資料的日期分佈。現在,我們將進一步探討如何進行評論長度分析和相關性分析。
評論長度分析
首先,讓我們來分析評論的長度。我們使用以下程式碼來計算每個評論的長度並提供描述性統計資料:
# Step 7: 評論長度分析
# 計算每個評論的長度
df['review_length'] = df['review_body'].str.len()
# 計算評論長度的描述性統計資料
print(df['review_length'].describe())
內容解密:
df['review_length'] = df['review_body'].str.len():這行程式碼建立了一個新的欄位review_length,用於儲存每個評論的字元數。str.len()函式計算每個字串的長度。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_rating、helpful_votes 和 total_votes 之間的相關係數:
# Step 8: 相關性分析
# 計算相關係數矩陣
correlation_matrix = df[['star_rating', 'helpful_votes', 'total_votes']].corr()
# 輸出相關係數矩陣
print(correlation_matrix)
內容解密:
df[['star_rating', 'helpful_votes', 'total_votes']].corr():這行程式碼選取了star_rating、helpful_votes和total_votes這三個欄位,並計算它們之間的相關係數矩陣。corr()函式用於計算資料框中各欄位之間的相關係數。print(correlation_matrix):這行程式碼輸出相關係數矩陣,讓我們瞭解這三個變數之間的線性關係。
透過相關性分析,我們可以瞭解不同變數之間的相互關係,從而進一步探索資料的內在結構和規律。未來,我們還可以考慮對評論內容進行文字分析,或是使用機器學習模型來預測評分的變化趨勢。
未來方向
根據目前的分析結果,我們可以考慮以下幾個方向進行進一步的研究:
- 視覺化評論長度:透過繪製直方圖或密度圖來視覺化評論長度的分佈,以更直觀地瞭解評論長度的變化。
- 文字分析:對評論內容進行文字分析,例如提取關鍵字、情緒分析等,以瞭解消費者對產品的看法和意見。
- 機器學習預測:利用機器學習模型來預測產品的評分或銷量,根據歷史資料和相關變數之間的關係。
這些方向將有助於我們更深入地瞭解消費者行為和市場趨勢,並為業務決策提供資料支援。