import pandas as pd from scipy.stats import pearsonr, spearmanr from flask import Flask, request, jsonify app = Flask(__name__) ## 方差分析 def run_Pearson(data, alpha, miss_value): # 将JSON数据转换为DataFrame df = pd.DataFrame(data) if miss_value == '用均值替代': # 处理缺失值:用均值替代 df.fillna(df.mean(), inplace=True) elif miss_value == '用中位数替代': # 处理缺失值 - 用中位数替代 df.fillna(df.median(), inplace=True) elif miss_value == '忽略缺失值': # 处理缺失值 - 忽略缺失值 df.dropna(inplace=True) # 计算描述性统计 desc_stats = df.describe() # 计算Pearson相关系数矩阵和p值表 corr_matrix = df.corr(method='pearson') p_values = df.corr(method=lambda x, y: pearsonr(x, y)[1]) # 使用lambda函数计算p值 # 显著性水平 alpha = alpha # 构建返回的结果字典 result = { "描述性统计": desc_stats.to_dict(), "相关系数矩阵": corr_matrix.to_dict(), "P值表 (显著性水平={})".format(alpha): p_values.to_dict() } # 将结果返回为JSON格式 return jsonify(result) def run_Spearman(data, alpha, miss_value): # 将JSON数据转换为DataFrame df = pd.DataFrame(data) if miss_value == '用均值替代': # 处理缺失值:用均值替代 df.fillna(df.mean(), inplace=True) elif miss_value == '用中位数替代': # 处理缺失值 - 用中位数替代 df.fillna(df.median(), inplace=True) elif miss_value == '忽略缺失值': # 处理缺失值 - 忽略缺失值 df.dropna(inplace=True) # 计算描述性统计 desc_stats = df.describe() # 计算Spearman相关系数矩阵和p值表 corr_matrix, p_values = spearmanr(df, nan_policy='omit') # 将相关系数矩阵和p值表转换为数据框 corr_df = pd.DataFrame(corr_matrix, columns=df.columns, index=df.columns) p_values_df = pd.DataFrame(p_values, columns=df.columns, index=df.columns) # 显著性水平 # alpha = alpha # 构建返回的结果字典 result = { "描述性统计": desc_stats.to_dict(), "相关系数矩阵": corr_df.to_dict(), "P值表 (显著性水平={})".format(alpha): p_values_df.to_dict() } # 将结果返回为JSON格式 return jsonify(result) @app.route("/relAna/", methods=["POST"]) def get_cookie(): # 获取 POST 请求中的 JSON 数据 global data new_data = request.json print(new_data) ana_way = new_data['ana_way'] if ana_way == 'Pearson': data = run_Pearson(new_data['data'], new_data['ace_level'], new_data['miss_value']) elif ana_way == 'Spearman': data = run_Spearman(new_data['data'], new_data['ace_level'], new_data['miss_value']) return data if __name__ == '__main__': app.run(port=9902, debug=False, host='0.0.0.0') # 启动服务