You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.0 KiB
92 lines
3.0 KiB
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') # 启动服务
|