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

6 months ago
  1. import pandas as pd
  2. from scipy.stats import pearsonr, spearmanr
  3. from flask import Flask, request, jsonify
  4. app = Flask(__name__)
  5. ## 方差分析
  6. def run_Pearson(data, alpha, miss_value):
  7. # 将JSON数据转换为DataFrame
  8. df = pd.DataFrame(data)
  9. if miss_value == '用均值替代':
  10. # 处理缺失值:用均值替代
  11. df.fillna(df.mean(), inplace=True)
  12. elif miss_value == '用中位数替代':
  13. # 处理缺失值 - 用中位数替代
  14. df.fillna(df.median(), inplace=True)
  15. elif miss_value == '忽略缺失值':
  16. # 处理缺失值 - 忽略缺失值
  17. df.dropna(inplace=True)
  18. # 计算描述性统计
  19. desc_stats = df.describe()
  20. # 计算Pearson相关系数矩阵和p值表
  21. corr_matrix = df.corr(method='pearson')
  22. p_values = df.corr(method=lambda x, y: pearsonr(x, y)[1]) # 使用lambda函数计算p值
  23. # 显著性水平
  24. alpha = alpha
  25. # 构建返回的结果字典
  26. result = {
  27. "描述性统计": desc_stats.to_dict(),
  28. "相关系数矩阵": corr_matrix.to_dict(),
  29. "P值表 (显著性水平={})".format(alpha): p_values.to_dict()
  30. }
  31. # 将结果返回为JSON格式
  32. return jsonify(result)
  33. def run_Spearman(data, alpha, miss_value):
  34. # 将JSON数据转换为DataFrame
  35. df = pd.DataFrame(data)
  36. if miss_value == '用均值替代':
  37. # 处理缺失值:用均值替代
  38. df.fillna(df.mean(), inplace=True)
  39. elif miss_value == '用中位数替代':
  40. # 处理缺失值 - 用中位数替代
  41. df.fillna(df.median(), inplace=True)
  42. elif miss_value == '忽略缺失值':
  43. # 处理缺失值 - 忽略缺失值
  44. df.dropna(inplace=True)
  45. # 计算描述性统计
  46. desc_stats = df.describe()
  47. # 计算Spearman相关系数矩阵和p值表
  48. corr_matrix, p_values = spearmanr(df, nan_policy='omit')
  49. # 将相关系数矩阵和p值表转换为数据框
  50. corr_df = pd.DataFrame(corr_matrix, columns=df.columns,
  51. index=df.columns)
  52. p_values_df = pd.DataFrame(p_values, columns=df.columns,
  53. index=df.columns)
  54. # 显著性水平
  55. # alpha = alpha
  56. # 构建返回的结果字典
  57. result = {
  58. "描述性统计": desc_stats.to_dict(),
  59. "相关系数矩阵": corr_df.to_dict(),
  60. "P值表 (显著性水平={})".format(alpha): p_values_df.to_dict()
  61. }
  62. # 将结果返回为JSON格式
  63. return jsonify(result)
  64. @app.route("/relAna/", methods=["POST"])
  65. def get_cookie():
  66. # 获取 POST 请求中的 JSON 数据
  67. global data
  68. new_data = request.json
  69. print(new_data)
  70. ana_way = new_data['ana_way']
  71. if ana_way == 'Pearson':
  72. data = run_Pearson(new_data['data'], new_data['ace_level'], new_data['miss_value'])
  73. elif ana_way == 'Spearman':
  74. data = run_Spearman(new_data['data'], new_data['ace_level'], new_data['miss_value'])
  75. return data
  76. if __name__ == '__main__':
  77. app.run(port=9902, debug=False, host='0.0.0.0') # 启动服务