計算兩列的相關性
使用Pandas
中的corr()函式計算DataFrame中特定的兩列之間相關係數。
def corr_analys(input_file_path, col_1, col_2, output_pic_path, sheet_name='Sheet1'):
'''
# ######################################
# 計算兩列之間的相關係數(Pearson相關係數)
# 列印輸出計算結果
# 並繪製相關性熱圖
# 輸入資料建議先歸一化處理
# ######################################
Parameters
----------
input_file_path : 包含要計算的列的檔案,這裡是excel檔案
col_1, col_2 : 要計算的兩列
output_pic_path :生成的相關性熱圖儲存的路徑,圖片名稱是日期
sheet_name : 指定具體的excel工作表
'''
df = pd.read_excel(input_file_path, sheet_name=sheet_name)
subset = df[[col_1, col_2]]
corr_coefficient = subset[col_1].corr(subset[col_2])
print('Correlation coefficient between {} and {} : {:.7f}'.format(col_1, col_2, corr_coefficient))
corr_matrix = subset.corr()
plt.figure(figsize=(8, 6))
# 顯示中文,防止亂碼
plt.rcParams['font.family'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 使用sns中的heatmap()函式講計算出來的相關係數轉化為熱力圖
sns.heatmap(corr_matrix, cmap='coolwarm', annot=True, fmt='.2f')
plt.title('Correlation Heatmap between {} and {}'.format(col_1, col_2))
plt.xlabel(col_2)
plt.ylabel(col_1)
current_time = datetime.datetime.now()
file_time = current_time.strftime("%Y%m%d%H%M%S") + '.png'
output_file_path = output_pic_path + 'Corr_' + file_time
# 檢查目錄是否存在,如果不存在則建立
output_dir = os.path.dirname(output_pic_path)
if not os.path.exists(output_dir):
os.makedirs(output_dir)
plt.savefig(output_file_path)
plt.close()
print('Correlation coefficient completed')
return output_file_path
def call_corr():
input_file_path = '../n.xlsx'
output_pic_path = './cor/'
col_1 = 'xxxx'
col_2 = 'xxxx'
output_file_path = corr_analys(input_file_path, col_1, col_2, output_pic_path)
print('Hotmap saved to {}'.format(output_file_path))
關鍵的程式碼其實就是
corr_coefficient = subset[col_1].corr(subset[col_2])
這裡corr()預設是使用Pearson方法,如果需要使用Spearman方法或者Kendall方法,需要在執行計算式顯式指定。
例如下面是一個計算Spearman相關係數的函式介面:
def corr_analys_spearman(input_file_path, col_1, col_2, output_pic_path, sheet_name='Sheet1'):
# 計算斯皮爾曼相關係數
df = pd.read_excel(input_file_path, sheet_name=sheet_name)
subset = df[[col_1, col_2]]
corr_coefficient = subset[col_1].corr(subset[col_2], method='spearman')
print('Spearman correlation coefficient between {} and {} : {:.7f}'.format(col_1, col_2, corr_coefficient))
關鍵是在corr中顯示的指定method='spearman'
Reference
不錯的網站:極客筆記
https://deepinout.com/pandas/pandas-tutorials/t_how-to-get-the-correlation-between-two-columns-in-pandas.html