连续特征分布直方图,并正太化,代码实现

import pandas as pd, numpy as np, warnings
pd.set_option('display.max_columns', 100)
pd.set_option('display.width', 230)
import seaborn as sns
from scipy import stats, integrate
import matplotlib.pyplot as plt
from scipy.stats import shapiro, kstest
from scipy.stats import norm, skew

warnings.filterwarnings("ignore", category=DeprecationWarning)

注:本文案例所选取的特征列本身长尾很严重,所以效果看着不是很好。需要的可以自取文中方法用之

tttdata['display_nums_yesterday'].describe()

在这里插入图片描述

分布直方图

sns.distplot(tttdata['display_nums_yesterday'], hist=True)

在这里插入图片描述

判断是否符合正太分布

# pvalue > 0.05,不拒绝原假设。因此上面的数据服从正态分布。且一般情况下, 
# stats.kstest(df[‘value’], ‘norm’, (u, std))一条语句就得到p值的结果。
print('display_nums_yesterday : ', kstest(tttdata['display_nums_yesterday'], 'norm', (u, std))[1])

# display_nums_yesterday :  0.0

箱线图剔除异常值

https://blog.csdn.net/qq_42363032/article/details/116696592

正态化的方法

标准化

# 标准化缩放
def standar(data, column):
    mean = data[column].mean()
    std = data[column].std()
    print('列:{},均值:{},标准差:{}'.format(column, mean, std))
    data[column] = data[column].apply(lambda x: (x-mean)/std)
    return data, mean, std

data, mean, std = standar(tttdata, 'display_nums_yesterday')

sns.distplot(data['display_nums_yesterday'], hist=True)
print(kstest(data['display_nums_yesterday'], 'norm', (u, std))[1])

在这里插入图片描述

取对数

# 取对数
tttdata['display_nums_yesterday'] = tttdata['display_nums_yesterday'].apply(lambda x: np.log(x))
sns.distplot(tttdata['display_nums_yesterday'], hist=True)
print(kstest(tttdata['display_nums_yesterday'], 'norm', (u, std))[1])

在这里插入图片描述

tttdata['display_nums_yesterday'] = tttdata['display_nums_yesterday'].apply(lambda x: np.log(1+x))
sns.distplot(tttdata['display_nums_yesterday'], hist=True)
print(kstest(tttdata['display_nums_yesterday'], 'norm', (u, std))[1])

在这里插入图片描述

开平方

# 开平方
tttdata['display_nums_yesterday'] = tttdata['display_nums_yesterday'].apply(lambda x: np.sqrt(x))
sns.distplot(tttdata['display_nums_yesterday'], hist=True)
print(kstest(tttdata['display_nums_yesterday'], 'norm', (u, std))[1])

在这里插入图片描述

取倒数

# 取倒数
tttdata['display_nums_yesterday'] = tttdata['display_nums_yesterday'].apply(lambda x: 1/x)
sns.distplot(tttdata['display_nums_yesterday'], hist=True)
print(kstest(tttdata['display_nums_yesterday'], 'norm', (u, std))[1])

在这里插入图片描述

平方根后取倒数

# 平方根后取倒数
tttdata['display_nums_yesterday'] = tttdata['display_nums_yesterday'].apply(lambda x: 1/np.sqrt(x))
sns.distplot(tttdata['display_nums_yesterday'], hist=True)
print(kstest(tttdata['display_nums_yesterday'], 'norm', (u, std))[1])

在这里插入图片描述

平方根反正弦变换

# 平方根反正弦变换
tttdata['display_nums_yesterday'] = tttdata['display_nums_yesterday'].apply(lambda x: np.arcsin(np.sqrt(x)))
sns.distplot(tttdata['display_nums_yesterday'], hist=True)
print(kstest(tttdata['display_nums_yesterday'], 'norm', (u, std))[1])

在这里插入图片描述

Box-Cox变换

# Box-Cox变换
tttdata['display_nums_yesterday'], lambda_=stats.boxcox(tttdata['display_nums_yesterday'])
sns.distplot(tttdata['display_nums_yesterday'], hist=True)
print(kstest(tttdata['display_nums_yesterday'], 'norm', (u, std))[1])

在这里插入图片描述

注:本文案例所选取的特征列本身长尾很严重,所以效果看着不是很好。需要的可以自取文中方法用之




参考:

https://blog.csdn.net/weixin_43899514/article/details/115215980

https://blog.csdn.net/lamusique/article/details/96495077

https://blog.csdn.net/qq_40587575/article/details/84349900

boxcox变换:https://www.it610.com/article/1274721947090960384.htm

猜你喜欢

转载自blog.csdn.net/qq_42363032/article/details/121560565