資料轉換在數據分析中十分重要,主要原因為:確保數據滿足正態分布的假設、減少數據偏斜和異常值的影響、讓數據符合模型的特定假設、並調整變數間的尺度差異。這四個主要原因凸顯了資料轉換在確保有效數據分析上的關鍵作用。本文主要介紹如何進行資料變數轉換,細節說明參照如下。

1.         python進行資料變數轉換

例子:假設我們正在研究人們在社交媒體上發表的貼文數量,原始的數據有可能非常偏斜:大部分的人可能只有少數的貼文,但也有一部分人可能有非常非常多的貼文(可能是部落格寫手、網紅等)。原始的貼文數量分佈可能會非常的偏斜,不接近常態分佈,這時你就可以透過對數轉換來改變資料的分佈。

# 導入需要的Python庫。

import numpy as np

import matplotlib.pyplot as plt

from scipy.stats import kstest, norm

# 假設我們有一個偏斜的貼文數量分佈。

post_counts = [10, 20, 30, 50, 60, 70, 1000, 2000, 3000]

# 執行對數變換。

log_post_counts = np.log(post_counts)

# 我們先算一下轉換前的ks值

mu = np.mean(post_counts)

sigma = np.std(post_counts)

D, p = kstest(post_counts, ‘norm’, args=(mu, sigma))

original_ks = f’KS-Value: {D:.5f}’

# 然後我們再算一下轉換後的ks值

mu_log = np.mean(log_post_counts)

sigma_log = np.std(log_post_counts)

D_log, p_log = kstest(log_post_counts, ‘norm’, args=(mu_log, sigma_log))

log_ks = f’KS-Value: {D_log:.5f}’

# 繪製原始的偏斜分佈和變換後的分佈,建立一个新的圖形窗口,並指定其大小為寬12英寸和高6英寸。

plt.figure(figsize=(12, 6))

# 建立一個1行2列的子圖,然後在第一個子圖上繪制。

plt.subplot(1, 2, 1)

plt.hist(post_counts, bins=30, color=’orange’, edgecolor=’black’)

plt.title(f’Original Skewed Distribution\n{original_ks}’)

# 在第二個子圖上繪制。

plt.subplot(1, 2, 2)

plt.hist(log_post_counts, bins=30, color=’orange’, edgecolor=’black’)

plt.title(f’Log Transformed Distribution\n{log_ks}’)

plt.tight_layout()

plt.show()

#執行後得到下圖前(左)後(右)資料的轉換。

第一個圖(左側)顯示的是原始的貼文數量分佈,其中大部分的數值通常都集中在一個較小的範圍內,而較大的數值則較少。

第二個圖(右側)顯示的是對原始數據進行對數轉換後的分佈。可以看到,經過對數轉換之後,原先高度偏斜的分佈變得更接近常態分佈。

我們可觀察到轉換之後的數據KS值的變化情況。從結果來看,對數轉換後的分佈的KS值明顯變小,說明對數轉換後的數據更接近常態分佈。使用對數轉換將原始數據的偏斜分佈改變為一個更平均、接近常態分佈的形狀,這樣可以使得我們的數據更適合進行統計分析。

以上為Python 解決非常態問題 – 資料變數轉換的方法介紹,若您覺得有幫助的話,再請幫我們留個好評,謝謝您的觀看,我們下次見。