python实现非正态分布转正态分布(BoxCox转换)
功能:将一维非正态分布数据转化为正态分布
输入:xlsx文件含有"患者密度(人/10万人)"一列
输出:将"患者密度(人/10万人)"一列转换为正态分布,并输出
实现代码:
1 | import pandas as pd |
2 | import matplotlib.pyplot as plt |
3 | import seaborn as sns |
4 | import matplotlib |
5 | from scipy import stats |
6 | import warnings |
7 | warnings.filterwarnings("ignore") |
8 | |
9 | def Box_Cox(file,sheet_name): |
10 | df1 = pd.read_excel(file,sheet_name) |
11 | print(df1["患者密度(人/10万人)"]) |
12 | sns.distplot(df1["患者密度(人/10万人)"],color = "#D86457") |
13 | matplotlib.rcParams['font.sans-serif'] = ['SimHei'] |
14 | matplotlib.rcParams['axes.unicode_minus'] = False |
15 | plt.show() |
16 | |
17 | fig = plt.figure() |
18 | ax = fig.add_subplot(111) |
19 | stats.boxcox_normplot(df1["患者密度(人/10万人)"], -20, 20,plot = ax) |
20 | plt.axvline(x = stats.boxcox_normmax(df1["患者密度(人/10万人)"]),color = "#D86457") |
21 | plt.show() |
22 | |
23 | print(stats.boxcox_normmax(df1["患者密度(人/10万人)"])) |
24 | x = stats.boxcox(df1["患者密度(人/10万人)"],stats.boxcox_normmax(df1["患者密度(人/10万人)"])) |
25 | sns.distplot(x,color = "#D86457") |
26 | plt.show() |
27 | |
28 | df=pd.DataFrame(x,columns=['转换']) |
29 | print(df) |
30 | |
31 | if __name__=='__main__': |
32 | Box_Cox("F:\医学大数据课题\论文终稿修改\实验\差异性分析.xlsx",sheet_name='人口密度分组') |
实现效果:
喜欢记得点赞,在看,加关注(数据杂坛),将持续更新!