脚本分析应用
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

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') # 启动服务