Python 的資料分析能力在處理複雜資料關係時至關重要。本文示範如何使用 Python 計算變數之間的相關係數,並使用熱力圖進行視覺化,以更直觀地理解資料集中的變數關係。同時也探討瞭如何將這些技術應用於情感分析,藉由分析評論資料的情感分數分佈及與其他變數的關係,深入挖掘資料的潛在價值。最後,文章介紹瞭如何使用 GitHub Copilot Chat 輔助進行迴歸分析,以預測股票價格,並提供實作練習和參考資源,引導讀者進一步探索和應用。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
import re
from collections import Counter
# 讀取資料 (範例程式碼,請替換成您的實際資料)
data = {'star_rating': [5, 4, 3, 2, 1, 5, 4, 3, 2, 1],
'helpful_votes': [10, 8, 6, 4, 2, 12, 10, 8, 6, 4],
'total_votes': [20, 16, 12, 8, 4, 24, 20, 16, 12, 8],
'review_body': ['good product', 'not bad', 'average', 'poor', 'terrible',
'excellent product', 'great', 'ok', 'disappointing', 'awful']}
df = pd.DataFrame(data)
# 計算相關係數矩陣
correlation_matrix = df[['star_rating', 'helpful_votes', 'total_votes']].corr()
# 繪製熱力圖
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', center=0)
plt.title('Correlation Matrix Heatmap')
plt.show()
# 情感分析 (範例程式碼,請替換成您的實際情感分析方法)
df['sentiment_score'] = df['star_rating'] * 0.2 - 0.1
# 繪製情感分數分佈直方圖
plt.hist(df['sentiment_score'], bins=20, edgecolor='black')
plt.title('情感分數分佈直方圖')
plt.xlabel('情感分數')
plt.ylabel('頻率')
plt.show()
# 文字預處理
stemmer = PorterStemmer()
def preprocess_text(text):
text = text.lower()
text = re.sub(r'[^\w\s]', '', text)
text = ' '.join([stemmer.stem(word) for word in text.split() if word not in stopwords.words('english')])
return text
df['review_body_clean'] = df['review_body'].apply(preprocess_text)
# 計算評論長度
df['review_length'] = df['review_body_clean'].apply(len)
# 繪製情感分數與評論長度的散點圖
plt.scatter(df['review_length'], df['sentiment_score'])
plt.title('情感分數與評論長度的關係')
plt.xlabel('評論長度')
plt.ylabel('情感分數')
plt.show()
# 檢查資料型別
print(df.dtypes)
相關係數分析與視覺化
在資料分析過程中,相關係數矩陣是用來衡量變數之間線性關係的重要工具。本章節將探討如何計算並視覺化變數之間的相關性,以理解資料集中的變數如何相互影響。
步驟8:相關性分析
首先,我們需要計算資料集中特定變數之間的相關係數矩陣。以下程式碼示範如何實作這一步驟:
# 步驟8:相關性分析
# 計算相關係數矩陣
correlation_matrix = df[['star_rating', 'helpful_votes', 'total_votes']].corr()
# 輸出相關係數矩陣
print(correlation_matrix)
內容解密:
df[['star_rating', 'helpful_votes', 'total_votes']]:選取資料集中star_rating、helpful_votes和total_votes三個欄位進行相關性分析。.corr():計算選定欄位之間的相關係數矩陣。print(correlation_matrix):輸出相關係數矩陣以供檢視。
執行上述程式碼後,我們得到以下輸出結果:
star_rating helpful_votes total_votes
star_rating 1.000000 -0.324371 -0.517002
helpful_votes -0.324371 1.000000 0.659612
total_votes -0.517002 0.659612 1.000000
相關係數解讀
star_rating和helpful_votes之間的相關係數為 -0.324371,表示兩者之間存在弱負相關關係,意味著當星級評分增加時,獲得的正面評價票數可能會略微減少。star_rating和total_votes之間的相關係數為 -0.517002,顯示兩者之間存在中等程度的負相關,表明星級評分越高,總投票數越少。helpful_votes和total_votes之間的相關係數為 0.659612,顯示兩者之間存在中等程度的正相關,意味著當正面評價票數增加時,總投票數也會增加。
步驟8.1:使用熱力圖視覺化相關係數矩陣
為了更直觀地呈現變數之間的相關性,我們可以使用熱力圖進行視覺化。以下是使用 seaborn 函式庫建立熱力圖的程式碼:
# 步驟8.1:使用熱力圖視覺化相關係數矩陣
import seaborn as sns
import matplotlib.pyplot as plt
# 繪製熱力圖
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', center=0)
plt.title('Correlation Matrix Heatmap')
plt.show()
內容解密:
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', center=0):使用seaborn的heatmap函式繪製相關係數矩陣的熱力圖。引數annot=True表示在圖上顯示相關係數的值;cmap='coolwarm'設定顏色對映為冷暖色系;center=0確保顏色以零為中心進行對映。plt.title('Correlation Matrix Heatmap'):為熱力圖新增標題。plt.show():顯示繪製的熱力圖。
圖表解讀
此圖示展示了三個變數(total_votes、helpful_votes 和 star_rating)之間的相關性。顏色越接近紅色表示正相關,越接近藍色表示負相關,而白色則表示無顯著相關性。
進一步的探索性分析
除了上述分析外,還可以進行額外的探索性分析,例如:
- 文字預處理:對評論內容進行清理和正規化,例如轉換為小寫、移除標點符號、移除停用詞等。
- 詞頻分析:統計評論中詞語的出現頻率,以識別常見的主題或詞彙。
以下程式碼示範瞭如何進行文字預處理和詞頻分析:
# 步驟10:文字預處理
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
import re
# 初始化 PorterStemmer 物件
stemmer = PorterStemmer()
# 定義文字預處理函式
def preprocess_text(text):
# 轉換為小寫
text = text.lower()
# 移除標點符號
text = re.sub(r'[^\w\s]', '', text)
# 移除停用詞並進行詞幹提取
text = ' '.join([stemmer.stem(word) for word in text.split() if word not in stopwords.words('english')])
return text
# 對 review_body 欄位進行預處理
df['review_body_clean'] = df['review_body'].apply(preprocess_text)
# 步驟11:詞頻分析
from collections import Counter
# 統計評論中詞語的頻率
word_freq = Counter(' '.join(df['review_body_clean']).split())
內容解密:
preprocess_text函式對輸入文字進行預處理,包括轉換大小寫、移除標點符號和停用詞,並進行詞幹提取。- 將預處理後的文字儲存於新的欄位
review_body_clean中。 - 使用
Counter對所有評論的詞語進行頻率統計。
這些額外的分析步驟能夠幫助我們更深入地理解資料集中的文字特徵和潛在模式。
分析評論資料的情感傾向與分佈
在前一步驟中,我們計算了評論的平均情感分數,結果顯示整體情感傾向為正向。現在,我們將進一步視覺化情感分數的分佈,並分析其與其他變數之間的關係。
步驟1:視覺化情感分數分佈
為了更直觀地瞭解情感分數的分佈,我們將使用直方圖來呈現。
import matplotlib.pyplot as plt
# 繪製情感分數的直方圖
plt.hist(df['sentiment_score'], bins=20, edgecolor='black')
plt.title('情感分數分佈直方圖')
plt.xlabel('情感分數')
plt.ylabel('頻率')
plt.show()
內容解密:
import matplotlib.pyplot as plt:匯入matplotlib函式庫,用於繪製圖表。plt.hist(df['sentiment_score'], bins=20, edgecolor='black'):繪製sentiment_score的直方圖,將資料分成 20 個區間,並設定邊框顏色為黑色。plt.title()、plt.xlabel()、plt.ylabel():分別設定圖表的標題、X 軸標籤和 Y 軸標籤。plt.show():顯示繪製好的圖表。
步驟2:分析情感分數與其他變數的關係
接下來,我們將分析情感分數與星級評分和評論長度之間的關係。
分析情感分數與星級評分的關係
# 繪製情感分數與星級評分的散點圖
plt.scatter(df['star_rating'], df['sentiment_score'])
plt.title('情感分數與星級評分的關係')
plt.xlabel('星級評分')
plt.ylabel('情感分數')
plt.show()
內容解密:
plt.scatter(df['star_rating'], df['sentiment_score']):繪製星級評分和情感分數的散點圖,用於觀察兩者之間的相關性。- 其他部分與前一步驟相同,用於設定圖表標題和標籤。
分析情感分數與評論長度的關係
首先,我們需要計算評論長度:
# 計算評論長度
df['review_length'] = df['review_body_clean'].apply(len)
然後,繪製散點圖:
# 繪製情感分數與評論長度的散點圖
plt.scatter(df['review_length'], df['sentiment_score'])
plt.title('情感分數與評論長度的關係')
plt.xlabel('評論長度')
plt.ylabel('情感分數')
plt.show()
內容解密:
df['review_length'] = df['review_body_clean'].apply(len):計算每條評論的長度,並將結果儲存在新的列review_length中。plt.scatter(df['review_length'], df['sentiment_score']):繪製評論長度和情感分數的散點圖,用於觀察兩者之間的相關性。
結果解讀
透過上述步驟,我們可以觀察到:
- 情感分數的分佈情況,瞭解大多數評論的情感傾向。
- 情感分數與星級評分之間的關係,通常正向情感分數較高的評論會伴隨較高的星級評分。
- 情感分數與評論長度之間的關係,有些研究表明較長的評論可能包含更豐富的情感資訊。
後續步驟建議
- 進一步分析:可以考慮分析不同星級評分的評論在情感分數上的差異,或者研究不同長度的評論在情感表達上的特點。
- 模型最佳化:根據分析結果,可以進一步最佳化情感分析模型,例如透過調整預處理步驟或使用更先進的情感分析工具。
透過這些步驟,我們能夠更全面地理解評論資料的特徵,並為進一步的分析和應用提供有價值的參考。
迴歸分析與 GitHub Copilot Chat 的應用
第 17 章回顧與重點整理
在前一章中,我們探討瞭如何使用 GitHub Copilot 和 ChatGPT 進行情感分析,並對兩者的使用經驗進行了比較。本章將延續前一章的內容,進一步探討如何使用 Copilot Chat 進行迴歸分析。
重點回顧:情感分析視覺化
在進行情感分析時,我們使用了直方圖和散點圖來視覺化情感分數的分佈和與其他變數之間的關係。以下是相關的程式碼範例:
import matplotlib.pyplot as plt
# 繪製情感分數直方圖
plt.figure(figsize=(8, 6))
plt.hist(df['sentiment_score'], bins=20, color='skyblue')
plt.title('情感分數分佈')
plt.xlabel('情感分數')
plt.ylabel('頻率')
plt.show()
# 繪製情感分數與星級評分的散點圖
plt.figure(figsize=(8, 6))
plt.scatter(df['sentiment_score'], df['star_rating'], alpha=0.5, color='skyblue')
plt.title('情感分數 vs 星級評分')
plt.xlabel('情感分數')
plt.ylabel('星級評分')
plt.show()
# 繪製情感分數與評論長度的散點圖
plt.figure(figsize=(8, 6))
plt.scatter(df['sentiment_score'], df['review_length'], alpha=0.5, color='skyblue')
plt.title('情感分數 vs 評論長度')
plt.xlabel('情感分數')
plt.ylabel('評論長度')
plt.show()
程式碼解析
直方圖繪製:使用
matplotlib函式庫繪製情感分數的直方圖,以瞭解其分佈情況。內容解密:
plt.hist()用於繪製直方圖,其中df['sentiment_score']是情感分數的資料,bins=20表示將資料分成 20 個區間,color='skyblue'設定顏色為天藍色。plt.title(),plt.xlabel(), 和plt.ylabel()分別用於設定圖表的標題、X 軸標籤和 Y 軸標籤。
散點圖繪製:使用散點圖來觀察情感分數與星級評分和評論長度之間的關係。
內容解密:
plt.scatter()用於繪製散點圖,其中df['sentiment_score']是 X 軸資料,df['star_rating']或df['review_length']是 Y 軸資料,alpha=0.5設定透明度以便觀察重疊點,color='skyblue'設定顏色。- 同樣使用
plt.title(),plt.xlabel(), 和plt.ylabel()來設定圖表的標題和軸標籤。
使用 Copilot Chat 進行迴歸分析
本章將使用 Apple 資料集來預測股票價格,並探討技術分析在股票市場中的應用。技術分析主要透過統計歷史交易活動(如價格變動、交易量和時間)來預測未來的價格走勢。
股票市場與迴歸分析簡介
股票代表公司所有權的一部分,其價格波動主要受供需關係影響。投資者通常希望低買高賣,但預測股票價格的走勢極具挑戰性。基本面分析和技術分析是兩種主要的分析方法,用於理解影響股票價格的因素。
- 基本面分析關注影響公司價值和營運的基本因素,如宏觀經濟環境、行業狀況、公司管理和競爭對手等。
- 技術分析則透過分析歷史交易資料來預測未來的價格走勢。
作業與實作練習
請根據提供的波士頓房價資料集(https://www.kaggle.com/datasets/vikrishnan/boston-house-prices),嘗試進行類別似的迴歸分析場景,並回答以下問題:
- 房價預測:根據房屋特徵(如大小、位置和臥室數量)預測房價。
- 特徵重要性:哪些特徵對房價影響最大?
- 房價趨勢:特定區域的房價如何隨時間變化?
解答與參考資源
在下一章中,我們將進一步探討如何使用 Copilot Chat 進行股票價格預測,並深入瞭解技術分析在投資決策中的應用。
使用 Copilot Chat 進行迴歸分析
迴歸分析是一種統計方法,用於研究資料中因變數(目標變數)與自變數(預測變數)之間的關係。這種方法主要用於預測、時間序列建模以及找出變數之間的因果關係。例如,降雨量與土壤侵蝕之間的關係,或者薪水與工作經驗年限之間的關係。
資料集概覽
本資料集包含蘋果公司(AAPL)10 年的股票資料。這些資料可用於建立有用的價格預測演算法,以幫助投資者做出明智的投資決策。
關於這個資料集,我們可以得出以下結論:
- 資料來自 25 個交易所的彙總。
- 資料每週更新。
- 資料集包含 AAPL 的 1 分鐘、5 分鐘、30 分鐘和 1 小時線圖(開盤價/最高價/最低價/收盤價/成交量)。
- 包含盤後交易資料。價格已調整以反映股票分割和股息。資料集可在 https://www.kaggle.com/datasets/tarunpaparaju/apple-aapl-historical-stock-data 下載。
探索資料集
為了更好地說明迴歸分析方法,我們需要為目標變數找到合適的預測變數。資料集中記錄了多個直接與股票相關的元素。在一個時間單位內(通常是一天,也可以是一週或一個月)的價格變動情況,可以用五個關鍵的交易指標來描述。
這五個指標分別是:
- 開盤價:某個交易日的起始價格
- 收盤價:當天的最終價格
- 最高價:當天股票交易的最高價格
- 最低價:當天股票交易的最低價格
- 成交量:市場在當天收盤前交易的股票總數
提示策略
在本章中,我們將使用 TAG(任務-動作-指導)提示模式來幫助構建我們的專案。具體來說:
- 任務:對蘋果股票歷史價值進行迴歸分析
- 動作:指示 AI 助手告訴我們下一步該怎麼做
- 指導:描述資料集的內容
初始提示
我正在進行一個迴歸專案,以使用蘋果歷史股票資料集預測股票價格。這將幫助投資者做出明智的買賣股票的決定。工作流程包括載入資料集、探索其內容、分割資料集、建立迴歸模型並評估其效能。但我想一步一步來學習。讓我們從載入資料集開始。我將資料集儲存在 `<file path>`。以下是資料集的結構:
* 開盤價:某個交易日的起始價格
* 收盤價:當天的最終價格
* 最高價:當天股票交易的最高價格
* 最低價:當天股票交易的最低價格
* 成交量:市場在當天收盤前交易的股票總數
Copilot 回應
import pandas as pd
# 將 <file-path> 替換為你的資料集路徑
file_path = "<file-path>"
# 載入資料集
df = pd.read_csv(file_path)
# 顯示資料集的前幾行
print(df.head())
執行上述程式碼後,你應該會看到資料集的前幾行被印出。這將為你提供對資料的初步瞭解。
輸出結果
Date Close/Last Volume Open High Low
0 02/28/2020 $273.36 106721200 $257.26 $278.41 $256.37
1 02/27/2020 $273.52 80151380 $281.1 $286 $272.96
2 02/26/2020 $292.65 49678430 $286.53 $297.88 $286.5
3 02/25/2020 $288.08 57668360 $300.95 $302.53 $286.13
4 02/24/2020 $298.18 55548830 $297.26 $304.18 $289.23
程式碼解密:
import pandas as pd:匯入 pandas 函式庫並賦予別名pd,用於資料處理。file_path = "<file-path>":設定資料集檔案的路徑,需替換<file-path>為實際路徑。df = pd.read_csv(file_path):使用pd.read_csv方法讀取指定路徑的 CSV 檔案,並將資料儲存於 DataFramedf中。print(df.head()):輸出 DataFrame 的前幾行(預設為5行),用於初步檢查資料內容。
下一步:檢查資料型別
接下來,我們將檢查資料的型別,以確保其適合進行迴歸分析。
檢查資料型別。
Copilot 回應及程式碼實作
請根據 Copilot 的回應實作檢查資料型別的程式碼,以確保所有欄位的資料型別正確無誤。
程式碼實作與結果解讀
待補充程式碼及輸出結果,並對結果進行詳細解說。
# 請在此處補充檢查資料型別的程式碼,例如:
print(df.dtypes)
程式碼解密:
print(df.dtypes):輸出 DataFrame 中各欄位的資料型別,用於確認資料是否正確載入及型別是否符合預期。