返回文章列表

二元與類別資料探索與相關性分析

本文探討二元與類別資料的探索方法,包括眾數、期望值、長條圖和圓餅圖等,並深入研究相關性分析及其在資料科學中的重要性,涵蓋相關係數計算、相關性矩陣視覺化以及穩健相關性分析等內容。此外,文章也介紹了散佈圖、六邊形分箱圖和等高線圖等視覺化工具,用於探索多變數之間的關係,提供程式碼範例和詳細解析,幫助讀者理解和應用這

資料分析 資料視覺化

類別資料的探索通常從計算比例或百分比開始,例如統計航班延誤原因的比例。除了比例之外,眾數和期望值也是重要的統計量,分別代表出現次數最多的類別和根據機率的加權平均值。長條圖和圓餅圖則提供了視覺化的方式來呈現類別資料的分佈。在處理數值資料時,可以透過分箱將其轉換為類別資料,以便於分析和發現特徵之間的關係。相關性分析則是用於理解變數之間關係的重要工具,透過計算相關係數可以量化變數之間的線性關係強度和方向。相關性矩陣和熱圖則提供了視覺化多變數相關性的方法,方便識別變數之間的關聯性。除了 Pearson 相關係數外,Spearman’s rho 和 Kendall’s tau 等根據排名的相關係數也適用於處理離群值和非線性關係。散佈圖是視覺化兩個變數之間關係的常用方法,而六邊形分箱圖和等高線圖則適用於處理大量資料點的情況,可以更清晰地展現變數之間的關係模式。

探索二元與類別資料

對於類別資料,簡單的比例或百分比能夠清晰地說明資料的特徵。

探索類別資料的關鍵術語

眾數(Mode)

資料集中出現次數最多的類別或值。

期望值(Expected Value)

當類別可以與數值對應時,根據類別出現的機率計算出的平均值。

長條圖(Bar Charts)

將每個類別的頻率或比例繪製成長條圖,用於顯示單一類別變數的分佈。

圓餅圖(Pie Charts)

將每個類別的頻率或比例繪製成圓餅圖中的扇形區域。

瞭解二元與類別資料

要總結一個二元變數或具有少數類別的類別變數相對容易,只需計算1的比例或重要類別的比例。例如,下表顯示了自2010年以來達拉斯/沃思堡機場(Dallas/Fort Worth Airport)延誤航班的百分比。延誤被分為航空公司控制因素、空中交通管制(ATC)系統延誤、天氣、安全或到達延誤。

表1-6:達拉斯/沃思堡機場延誤原因百分比

原因百分比
航空公司(Carrier)23.02
空中交通管制(ATC)30.40
天氣(Weather)4.03
安全(Security)0.12
到達延誤(Inbound)42.43

長條圖與圓餅圖

長條圖是一種常見的視覺化工具,用於顯示單一類別變數。類別列在x軸上,頻率或比例在y軸上。下圖顯示了達拉斯/沃思堡機場每年因不同原因導致的航班延誤,使用R函式barplot生成:

barplot(as.matrix(dfw) / 6, cex.axis=0.8, cex.names=0.7,
        xlab='Cause of delay', ylab='Count')

pandas同樣支援資料框架的長條圖:

ax = dfw.transpose().plot.bar(figsize=(4, 4), legend=False)
ax.set_xlabel('Cause of delay')
ax.set_ylabel('Count')

圖1-5:達拉斯/沃思堡機場航班延誤原因長條圖

數值資料作為類別資料

在前面的章節中,我們討論了根據資料分箱的頻率表,這隱含地將數值資料轉換為有序因子。在這個意義上,長條圖和直方圖是相似的,除了長條圖中的x軸代表不同類別,而直方圖中的x軸代表單一變數的數值。將數值資料轉換為類別資料是資料分析中的一個重要步驟,因為它減少了資料的複雜性和大小,有助於發現特徵之間的關係。

眾數與期望值

眾數是資料中出現次數最多的值或值們(在出現並列情況時)。例如,達拉斯/沃思堡機場延誤的主要原因是“Inbound”。眾數是類別資料的一個簡單總結統計量,通常不適用於數值資料。

期望值是一種特殊的類別資料,其中類別代表或可以對映到同一尺度上的離散值。例如,一家雲端技術的行銷人員提供兩種服務水平,一種價格為每月300美元,另一種為每月50美元。行銷人員透過免費網路研討會產生潛在客戶,並估計5%的參與者會註冊300美元的服務,15%會註冊50美元的服務,80%不會註冊任何服務。這些資料可以用一個單一的“期望值”來總結,這是一種加權平均值,其中權重是機率。

期望值的計算方法如下:

  1. 將每個結果乘以其發生機率。
  2. 將這些值相加。

在雲端服務示例中,網路研討會參與者的期望值為每月22.50美元,計算如下:

EV = 0.05 * 300 + 0.15 * 50 + 0.80 * 0
   = 15 + 7.5 + 0
   = 22.5

程式碼示例:計算期望值

# 定義機率與對應的值
probabilities = [0.05, 0.15, 0.80]
values = [300, 50, 0]

# 計算期望值
expected_value = sum(p * v for p, v in zip(probabilities, values))

print(f"期望值:{expected_value}")

內容解密:

此程式碼示例展示瞭如何計算期望值。首先,我們定義了不同結果的機率和對應的值。然後,使用列表推導式和zip函式將機率與對應的值相乘,最後使用sum函式將這些乘積相加得到期望值。這種方法清晰簡潔,易於理解和實作。

期望值是一種加權平均值,它結合了未來的預期和機率權重,通常根據主觀判斷。期望值是商業評估和資本預算中的一個基本概念。

相關性分析在資料科學中的重要性

在資料科學和分析領域中,相關性分析是一項基礎且重要的工具,用於理解不同變數之間的關係。無論是在預測模型建立、風險評估或是資料探索階段,相關性分析都能提供關鍵的洞察。

相關性的基本概念

兩個變數之間的相關性描述了它們之間的線性關係程度。當兩個變數趨於一起增加或減少時,它們被認為是正相關;反之,如果一個變數增加而另一個減少,則它們是負相關。相關係數是用於量化這種關係的指標,其值介於-1(完全負相關)和+1(完全正相關)之間。

相關係數的計算

皮爾森相關係數是最常用的相關係數之一,其計算公式為:

r = ∑(xi - x̄)(yi - ȳ) / ((n - 1) * sx * sy)

其中,xi 和 yi 分別是變數 X 和 Y 的第 i 個觀測值,x̄ 和 ȳ 分別是 X 和 Y 的平均值,sx 和 sy 分別是 X 和 Y 的標準差,n 是樣本大小。

程式碼範例:計算相關係數

import numpy as np

# 定義兩個變數
v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])

# 計算平均值
mean_v1 = np.mean(v1)
mean_v2 = np.mean(v2)

# 計算標準差
std_v1 = np.std(v1, ddof=1)
std_v2 = np.std(v2, ddof=1)

# 計算相關係數
r = np.sum((v1 - mean_v1) * (v2 - mean_v2)) / ((len(v1) - 1) * std_v1 * std_v2)

print("相關係數:", r)

內容解密:

  • 首先,我們使用 NumPy 函式庫來處理陣列運算。
  • 定義兩個範例變數 v1v2
  • 計算 v1v2 的平均值和標準差,注意在計算標準差時使用 ddof=1 以符合樣本標準差的計算。
  • 使用皮爾森相關係數公式計算 v1v2 之間的相關係數。
  • 最後輸出相關係數。

相關性矩陣與視覺化

在多變數分析中,相關性矩陣是一種用於展示多個變數之間相關性的表格。矩陣中的每個元素代表了對應的兩個變數之間的相關係數。

程式碼範例:繪製相關性矩陣熱圖

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# 假設 etfs 是一個包含 ETF 回報率的 DataFrame
etfs = pd.DataFrame(np.random.randn(100, 5), columns=['ETF1', 'ETF2', 'ETF3', 'ETF4', 'ETF5'])

# 計算相關性矩陣
corr_matrix = etfs.corr()

# 繪製熱圖
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', square=True)
plt.title('ETF 回報率相關性矩陣')
plt.show()

內容解密:

  • 首先,我們建立一個隨機的 DataFrame etfs 來模擬 ETF 回報率資料。
  • 使用 corr() 方法計算 etfs 的相關性矩陣。
  • 利用 Seaborn 的 heatmap() 函式繪製相關性矩陣的熱圖。
  • 設定 annot=True 以在熱圖上顯示相關係數的值。
  • 使用 cmap='coolwarm' 設定顏色對映,以直觀地表示正負相關。

穩健相關性分析

傳統的相關係數對離群值敏感,因此在實際應用中可能需要使用穩健的相關性估計方法。例如,在 R 語言中,可以使用 covRob() 函式來計算穩健的相關性估計。

相關性分析的限制與挑戰

雖然相關性分析是一種強大的工具,但它也有其限制和挑戰。例如,相關性並不意味著因果關係,而且在非線性關係的情況下,傳統的相關係數可能無法準確捕捉變數之間的關係。因此,在進行相關性分析時,需要結合專業知識和資料視覺化等多種方法,以獲得更全面的理解。

隨著大資料和機器學習技術的發展,相關性分析在資料科學領域中的應用將更加廣泛和深入。未來,我們可以期待看到更多創新性的相關性分析方法和工具,以應對日益複雜的資料挑戰。

探索多變數之間的關係

在單變數分析中,我們會計算平均值和變異數等統計量來瞭解單一變數的特性。相關分析(correlation analysis)則是重要的二元分析方法,用於比較兩個變數之間的關係。在本文中,我們將介紹額外的統計量和視覺化方法,以探索多個變數之間的關係。

相關係數的替代方案

統計學家早已提出其他型別的相關係數,例如Spearman’s rho和Kendall’s tau。這些相關係數根據資料的排名,因此對離群值具有穩健性,並且可以處理某些型別的非線性關係。然而,在探索性分析中,資料科學家通常可以堅持使用Pearson’s相關係數及其穩健的替代方案。根據排名的估計方法的吸引力主要在於較小的資料集和特定的假設檢定。

散佈圖

視覺化兩個測量資料變數之間關係的標準方法是使用散佈圖。x軸代表一個變數,y軸代表另一個變數,圖上的每個點代表一筆記錄。圖1-7顯示了ATT和Verizon每日回報率之間的相關性。在R中,可以使用以下命令生成此圖:

plot(telecom$T, telecom$VZ, xlab='ATT (T)', ylab='Verizon (VZ)')

在Python中,可以使用pandas的scatter方法生成相同的圖:

ax = telecom.plot.scatter(x='T', y='VZ', figsize=(4, 4), marker='$\u25EF$')
ax.set_xlabel('ATT (T)')
ax.set_ylabel('Verizon (VZ)')
ax.axhline(0, color='grey', lw=1)
ax.axvline(0, color='grey', lw=1)

程式碼解析:

  • plot.scatter用於建立散佈圖。
  • xy引數指定了要繪製的變數。
  • figsize引數控制圖形的大小。
  • marker引數指定了資料點的形狀。
  • axhlineaxvline用於在圖上新增水平和垂直線。

回報率之間具有正相關關係;大多數日子裡,股票同時上漲或下跌(右上和左下象限)。很少有日子裡,一支股票大幅下跌而另一支股票上漲,反之亦然(右下和左上象限)。

六邊形分箱圖和等高線圖

當資料集包含數十萬或數百萬筆記錄時,散佈圖會變得過於密集,因此需要不同的視覺化方法。為了說明這一點,請考慮包含華盛頓州金縣住宅物業稅評估值的資料集kc_tax。為了關注資料的主要部分,我們使用subset函式剔除非常昂貴和非常小或大的住宅:

kc_tax0 <- subset(kc_tax, TaxAssessedValue < 750000 &
                  SqFtTotLiving > 100 &
                  SqFtTotLiving < 3500)
nrow(kc_tax0)

在pandas中,我們可以按如下方式過濾資料集:

kc_tax0 = kc_tax.loc[(kc_tax.TaxAssessedValue < 750000) &
                     (kc_tax.SqFtTotLiving > 100) &
                     (kc_tax.SqFtTotLiving < 3500), :]
kc_tax0.shape

程式碼解析:

  • subset函式用於根據條件篩選資料。
  • nrow函式傳回篩選後資料的行數。
  • loc方法用於根據條件篩選資料。
  • shape屬性傳回篩選後資料的形狀。

圖1-8是已完成平方英尺與稅評估值之間關係的六邊形分箱圖。我們將記錄分組到六邊形箱中,並繪製具有顏色的六邊形,以指示該箱中的記錄數量。在此圖表中,平方英尺與稅評估值之間的正相關關係非常明顯。一個有趣的特點是,在主帶上方隱約可見額外的帶,表明具有與主帶相同平方英尺但稅評估值更高的房屋。

圖1-8由強大的R包ggplot2生成。ggplot2是Hadley Wickham開發的用於先進探索性視覺分析的新型軟體函式庫之一。

ggplot(kc_tax0, (aes(x=SqFtTotLiving, y=TaxAssessedValue))) +
  stat_binhex(color='white') +
  theme_bw() +
  scale_fill_gradient(low='white', high='black') +
  labs(x='Finished Square Feet', y='Tax-Assessed Value')

在Python中,可以使用pandas資料框方法hexbin輕鬆生成六邊形分箱圖:

ax = kc_tax0.plot.hexbin(x='SqFtTotLiving', y='TaxAssessedValue',
                         gridsize=30, sharex=False, figsize=(5, 4))
ax.set_xlabel('Finished Square Feet')
ax.set_ylabel('Tax-Assessed Value')

程式碼解析:

  • ggplot函式初始化一個ggplot物件。
  • aes函式指定了x和y變數。
  • stat_binhex函式建立六邊形分箱圖。
  • theme_bw函式設定圖形的背景為黑白。
  • scale_fill_gradient函式設定顏色的梯度。
  • labs函式設定x和y軸的標籤。
  • plot.hexbin方法建立六邊形分箱圖。
  • gridsize引數控制六邊形網格的大小。

等高線圖

圖1-9使用疊加在散佈圖上的等高線來視覺化兩個數字變數之間的關係。等高線本質上是兩個變數的地形圖;每個等高線帶代表特定的點密度,當接近“峰值”時密度增加。此圖顯示了一個與圖1-8相似的故事:在主要峰值的“北”方向有一個次要峰值。此圖也是使用ggplot2生成的,使用內建的geom_density2d函式:

ggplot(kc_tax0, aes(SqFtTotLiving, TaxAssessedValue)) +
  theme_bw() +
  geom_point(alpha=0.1) +
  geom_density2d(color='white') +
  labs(x='Finished Square Feet', y='Tax-Assessed Value')

Python中的seaborn kdeplot函式可以建立等高線圖:

ax = sns.kdeplot(kc_tax0.SqFtTotLiving, kc_tax0.TaxAssessedValue, ax=ax)
ax.set_xlabel('Finished Square Feet')
ax.set_ylabel('Tax-Assessed Value')

程式碼解析:

  • geom_point函式建立散佈圖。
  • alpha引數控制點的透明度。
  • geom_density2d函式建立等高線圖。
  • kdeplot函式建立等高線圖。

重點整理

  • 相關係數衡量兩個成對變數之間的關聯程度。
  • 當v1的高值與v2的高值相關聯時,v1和v2呈正相關。
  • 當v1的高值與v2的低值相關聯時,v1和v2呈負相關。
  • 相關係數是一個標準化的指標,因此它始終在–1(完全負相關)到+1(完全正相關)之間變化。
  • 相關係數為零表示沒有相關性,但要注意隨機排列的資料會產生正負相關係數值。

多變數分析

除了相關分析外,還有多種方法可用於探索多個變數之間的關係,包括列聯表、六邊形分箱、等高線圖和小提琴圖等視覺化工具。這些工具可以幫助我們更深入地瞭解複雜資料集中的變數之間的關係。