對於一些標簽和特征來說,分布不一定符合正態分布,而在實際的運算過程中則需要數據能夠符合正態分布
因此我們需要對特征進行log變化,使得數據在一定程度上可以符合正態分布
進行log變化,就是對數據使用np.log(data+1) 加上1的目的是為了防止數據等於0,而不能進行log變化
代碼:
第一步:導入數據
第二步:對收入特征做直方圖,同時標出中位數所在的位置,即均值
第三步:對收入特征做log變化,使用np.log(data+1)
第四步:對log收入特征做直方圖,標出中位數線的位置,即均值
結論:我們可以發現變化后的特征在一定程度上更加接近正態分布
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 第一步導入數據 ffc_survey_df = pd.read_csv('datasets/fcc_2016_coder_survey_subset.csv', encoding='utf-8') # 第二步對數據的收入做直方圖 fig, ax = plt.subplots() ffc_survey_df['Income'].hist(color='#A9C5D3', bins=30) plt.axvline(ffc_survey_df['Income'].quantile(), color='r', label='Binary line') plt.legend(fontsize=18, loc='best') ax.set_xlabel('Income', fontsize=12) ax.set_ylabel('Frequency', fontsize=12) ax.set_title('Income_hist', fontsize=12) plt.show()
# 第三步:對收入的數據進行log變化 ffc_survey_df['log_income'] = np.log(ffc_survey_df['Income'].values+1) print(ffc_survey_df[['Income', 'log_income']].head())
log前后的數據
# 第四步:對log變化后的數據畫出直方圖 fig, ax = plt.subplots() ffc_survey_df['log_income'].hist(color='#A9C5D3', bins=30) plt.axvline(ffc_survey_df['log_income'].quantile(), color='r', label='Binary line') plt.legend(fontsize=18, loc='best') ax.set_xlabel('log_Income', fontsize=12) ax.set_ylabel('Frequency', fontsize=12) ax.set_title('Income_hist', fontsize=12) plt.show()