from scipy import stats
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
# 生成帕累托分布数据
data1 = stats.lomax(c=14).rvs(size=500)
print(data1)
fig = plt.figure(figsize=(10, 8))
plt.subplot(2, 2, 1)
sns.distplot(data1)
# 进行boxcox变换
conv_data1 = stats.boxcox(data1)[0]
plt.subplot(2, 2, 2)
sns.distplot(conv_data1)
# QQ图对比
plt.subplot(2, 2, 3)
stats.probplot(data1, plot=plt)
plt.subplot(2, 2, 4)
stats.probplot(conv_data1, plot=plt)
plt.close()
# 测试指数分布进行boxcox变换
state = np.random.RandomState(20)
data2 = state.exponential(size=500)
conv_data2 = stats.boxcox(data2)[0] # 数据是返回值的第一个分量
plt.figure(figsize=(10, 8))
plt.subplot(2, 2, 1)
stats.probplot(data2, dist='norm', plot=plt)
plt.subplot(2, 2, 2)
stats.probplot(conv_data2, dist='norm', plot=plt)
plt.subplot(2, 2, 3)
sns.distplot(data2)
plt.subplot(2, 2, 4)
sns.distplot(conv_data2)
plt.show()