python对数据列表进行正态分布检验,结果写入excel

最近刚入门python,欢迎大家多多指教!
最近接到老师的一个项目,要求对一些医疗数据进行分析

现在编写一个allfunction.py函数文件,使得获取excel的数据后,可以对数据进行数据分析。

from xlrd import open_workbook
from xlutils.copy import copy
import xlrd
import xlwt
from pandas.core.frame import DataFrame
from datetime import date, datetime
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
from xlutils.copy import copy

# 绘图大致判断其是否符合正态分布
def drawing(list,drawfilename):
    c = {"HR_SCORE_CHANGE": list}  
    datas = DataFrame(c)
    print(datas)

    fig = plt.figure(figsize = (10,6))
    ax2 = fig.add_subplot(1,1,1)
    datas.hist(bins=50,ax = ax2)
    datas.plot(kind = 'kde', secondary_y=True,ax = ax2)
    plt.grid()
    plt.savefig(drawfilename + "描绘正态分布直方图.png")  # 保存图片
    #plt.show()
    plt.cla()
    plt.clf()
    plt.close()

#list为分析的列表,string为excel中的添加的总标题名
def analyselist(list,string):
    # .kstest方法:KS检验,参数分别是:待检验的数据,检验方法(这里设置成norm正态分布),均值与标准差
    # 结果返回两个值:statistic → D值,pvalue → P值,p值大于0.05,为正态分布
    df = pd.DataFrame(list, columns=['value'])
    u = df['value'].mean()  # 计算均值
    std = df['value'].std()  # 计算标准差
    result = stats.kstest(df['value'], 'norm', (u, std))

    #数据记入至excel表
    r_xls = open_workbook("Summary of analysis results.xls") # 读取excel文件
    rows_old = r_xls.sheets()[0].nrows # 获取已有的行数
    excel = copy(r_xls) # 将xlrd的对象转化为xlwt的对象
    table = excel.get_sheet(0) # 获取要操作的sheet
    #print (rows_old)
    #对excel表追加一行内容

    table.write_merge(1 + rows_old, 1 + rows_old, 0, 6, string) #合并0至6列的单元格,写入string
    title = ["最大值", "最小值", "平均值", "方差", "标准差", "变异系数", "pvalue"]
    # 写入"最大值", "最小值", "平均值", "方差", "标准差", "变异系数", "pvalue"标题

    for i in range(0, len(title)):
        table.write(2 + rows_old, i, title[i])

        table.write(3 + rows_old, 0, str(np.max(list)))
        table.write(3 + rows_old, 1, str(np.min(list)))
        table.write(3 + rows_old, 2, str(format(np.mean(list),'.4f')))
        table.write(3 + rows_old, 3, str(format(np.var(list),'.4f')))
        table.write(3 + rows_old, 4, str(format(np.std(list), '.4f')))
        table.write(3 + rows_old, 5, str(format((np.std(list, ddof=1)/np.mean(list)), '.4f')))
        table.write(3 + rows_old, 6, result[1])

    if float(result[1])> 0.05:
        table.write_merge(4 + rows_old, 4 + rows_old, 0, 6, "输出结果pvalue>0.05,接受其符合正态分布的假设!")
    else:
        table.write_merge(4, 4, 0, 6, "输出结果pvalue<0.05,不接受其符合正态分布的假设!")

    excel.save("Summary of analysis results.xls") # 保存并覆盖文件

结果如下:
在这里插入图片描述
在这里插入图片描述
代码借鉴了很多CSDN博主和博客园上发表的文章,涉及较多,没有一一记录,在这里向他们表示感谢,初学python很多东西不是特别熟练,欢迎大家多多交流
其实使用pandas写入excel更为方便
例如:要使用pandas 筛选出客户姓名以大写字母J 开头的那些行

#!/usr/bin/env python3
import pandas as pd
import sys
input_file = sys.argv[1]
output_file = sys.argv[2]
data_frame = pd.read_excel(input_file, 'january_2013', index_col=None)
data_frame_value_matches_pattern = data_frame[data_frame['Customer Name'].str.startswith("J")]
writer = pd.ExcelWriter(output_file)
data_frame_value_matches_pattern.to_excel(writer, sheet_name='jan_13_output',index=False)
writer.save()
Excel文档提取数据然后用Python数据进行正态分布拟合的过程可以分为以下几个步骤: 1. **读取Excel文档**:首先需要使用Python读取Excel文件中的数据,可以使用`pandas`库中的`read_excel`函数来实现这一点。 2. **提取数据**:通过`pandas`库可以轻松地提取出需要的数据列。如果需要对某列数据进行正态分布拟合,就直接提取该列。 3. **进行正态分布拟合**:使用`scipy`库中的`stats`模块可以对提取的数据进行正态分布的拟合。具体操作是使用`stats.norm`中的`fit`方法来找到最佳拟合参数,即均值(mean)和标准差(std)。 4. **可视化**:为了更直观地看到数据正态分布情况,可以使用`matplotlib`库绘制数据的直方图,并将正态分布曲线画在上面进行对比。 以下是一个简单的代码示例: ```python import pandas as pd from scipy import stats import matplotlib.pyplot as plt # 读取Excel文档 df = pd.read_excel('data.xlsx') # 假设我们要提取名为"data"的列 data = df['data'] # 进行正态分布拟合,得到均值和标准差 mean, std = stats.norm.fit(data) # 绘制数据的直方图 count, bins, ignored = plt.hist(data, bins=30, density=True, alpha=0.6, color='g') # 绘制正态分布曲线 xmin, xmax = plt.xlim() x = np.linspace(xmin, xmax, 100) p = stats.norm.pdf(x, mean, std) plt.plot(x, p, 'k', linewidth=2) title = "Fit results: mu = %.2f, std = %.2f" % (mean, std) plt.title(title) plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值