保存指标图片

import os  
import matplotlib.pyplot as plt  
import numpy as np  
import tensorflow as tf
from scipy.stats import wilcoxon
from scipy.stats import kruskal
from scipy.stats import mannwhitneyu
from scipy.stats import f_oneway
from scipy.stats import ttest_rel
from scipy.stats import ttest_ind
from scipy.stats import chi2_contingency
from scipy.stats import kendalltau  
from scipy.stats import shapiro
from six.moves import xrange  
import math
from scipy.stats.mstats_basic import ttest_1samp
np.set_printoptions(suppress=True)
np.set_printoptions(threshold=np.inf) #输出全部矩阵不带省略号
# 生成数据节点处存在误差,这里函数计算每个分支第一个点的平均值,然后再赋值给第一个点,以便后面计算角度
def manage_data(data):
      data = data.reshape(-1,16,16)
      manage_data = []
      data = data.tolist()
      for i in range(len(data)):
          zhu_x = data[i][0]
          zuo_x = data[i][1]
          you_x = data[i][2]
          zhu_y = data[i][3]
          zuo_y = data[i][4]
          you_y = data[i][5]
          zhu_diam = data[i][6]
          zuo_diam = data[i][7]
          you_diam = data[i][8]
          diam = data[i][9]
          x0_mean = (zhu_x[0] + zuo_x[0] + you_x[0]) / 3.
          y0_mean = (zhu_y[0] + zuo_y[0] + you_y[0]) / 3.
          zhu_x[0] = x0_mean
          zuo_x[0] = x0_mean
          you_x[0] = x0_mean
          zhu_y[0] = y0_mean
          zuo_y[0] = y0_mean
          you_y[0] = y0_mean
          fencha = [zhu_x] + [zuo_x] + [you_x] + [zhu_y] + [zuo_y] + [you_y] + [zhu_diam] + [zuo_diam] + [you_diam] + [diam]
          manage_data.append(fencha)
      manage_data = np.array(manage_data)
      
      return manage_data
def save_imgs(data,path,label):
  #dpi=10,1000x1000 dpi=1,100x100
  for i in range(len(data)):
    zhu_x = data[i][0]
    zuo_x = data[i][1]
    you_x = data[i][2]
    zhu_y = data[i][3]
    zuo_y = data[i][4]
    you_y = data[i][5]
    zhu_diam = data[i][6]
    zuo_diam = data[i][7]
    you_diam= data[i][8]
    fig = plt.figure(figsize=(100,100))
    plt.plot(zhu_x,zhu_y,color='red',linewidth=400*zhu_diam[0])
    plt.plot(zuo_x,zuo_y,color='green',linewidth=400*zuo_diam[0])
    plt.plot(you_x,you_y,color='blue',linewidth=400*you_diam[0])
    plt.xlim(0.,1.)
    plt.ylim(0.,1.)
    plt.xticks(np.arange(0.,1.,0.1))
    plt.yticks(np.arange(0.,1.,0.1))
    fig.set_size_inches(100,100)
    plt.axis("off")
    plt.savefig('C:\\Users\\Administrator\\Desktop\\%s\\%s_%d.jpg' % (path,label,i),dpi=10)
    plt.close()
#     plt.show()
    
# model57,seed(4),1000个样本可以
ori_data = np.load('data/分开分叉与汇聚插值16x16.npy')
# ori_data = np.load('data/model9.npy')
ori_data = ori_data.reshape(-1,16,16)
gen_data = np.load('data/model57.npy')
gen_data = gen_data.reshape(-1,16,16)
np.random.seed(4)
select_part = "zhu"
np.random.shuffle(ori_data)
np.random.shuffle(gen_data)
ori_data = ori_data[0:500,:,:] #选择保存多少数据
gen_data = gen_data[0:500,:,:] #选择保存多少数据
ori_data = manage_data(ori_data)
gen_data = manage_data(gen_data)
# save_imgs(gen_data,"gen","gen")
# save_imgs(ori_data,"ori","ori")
####################################################
# #绘图,观察是否正确
# gen = ori_data
# for i in range(len(gen)):
#     zhu_x = gen[i][0]
#     zuo_x = gen[i][1]
#     you_x = gen[i][2]
#     zhu_y = gen[i][3]
#     zuo_y = gen[i][4]
#     you_y = gen[i][5]
#     zhu_diam = gen[i][6]
#     zuo_diam = gen[i][7]
#     you_diam = gen[i][8]
#     plt.plot(zhu_x, zhu_y, color="red")
#     plt.plot(zuo_x, zuo_y, color="green")
#     plt.plot(you_x, you_y, color="blue")
#     plt.xlim(0,1)
#     plt.ylim(0,1)
#     plt.xticks(np.arange(0,1,0.1))
#     plt.yticks(np.arange(0,1,0.1))
#     plt.show()
##################################################
# 距离计算公式
def get_len(x1,x2,y1,y2):
    diff_x = (x1-x2)**2
    diff_y = (y1-y2)**2
    length = np.sqrt(diff_x+diff_y)
    return length
  
# 余弦定理计算角度公式,c夹在a,b中间
def cal_angle(a,b,c):
    cos_angle = (a**2+b**2-c**2)/(2*a*b)
    angle = np.arccos(cos_angle)
    angle = math.degrees(angle)
    return angle
  
# 得到管径值,管径在第一个值
def get_diam(fencha):
  zhu_diam = fencha[6][0]
  zuo_diam = fencha[7][0]
  you_diam = fencha[8][0]
  
  return zhu_diam, zuo_diam, you_diam

# 计算端点长度
def get_duandian_len(zhu_x,zhu_y,zuo_x,zuo_y,you_x,you_y):
    #主分支头尾坐标
    zhu_x_tou = zhu_x[0]
    zhu_y_tou = zhu_y[0]
    zhu_x_wei = zhu_x[-1]
    zhu_y_wei = zhu_y[-1]
    #左分支头尾坐标
    zuo_x_tou = zuo_x[0]
    zuo_y_tou = zuo_y[0]
    zuo_x_wei = zuo_x[-1]
    zuo_y_wei = zuo_y[-1]
    #右分支头尾坐标
    you_x_tou = you_x[0]
    you_y_tou = you_y[0]
    you_x_wei = you_x[-1]
    you_y_wei = you_y[-1]
    #主分支端点长
    zhu_duan_len = get_len(zhu_x_tou,zhu_x_wei,zhu_y_tou,zhu_y_wei)
    #左分支端点长
    zuo_duan_len = get_len(zuo_x_tou,zuo_x_wei,zuo_y_tou,zuo_y_wei)
    #右分支端点长
    you_duan_len = get_len(you_x_tou,you_x_wei,you_y_tou,you_y_wei)
    return zhu_duan_len,zuo_duan_len,you_duan_len
  
#计算分支总长度
def get_total_len(zhu_x,zhu_y,zuo_x,zuo_y,you_x,you_y):
    zhu_lin_list = []
    zuo_lin_list = []
    you_lin_list = []
    for i in range(1,len(zhu_x)):
        zhu_lin_len = get_len(zhu_x[i-1],zhu_x[i],zhu_y[i-1],zhu_y[i])
        zhu_lin_list.append(zhu_lin_len)
    for i in range(1,len(zuo_x)):
        zuo_lin_len = get_len(zuo_x[i-1],zuo_x[i],zuo_y[i-1],zuo_y[i])
        zuo_lin_list.append(zuo_lin_len)
    for i in range(1, len(you_x)):
        you_lin_len = get_len(you_x[i-1],you_x[i],you_y[i-1],you_y[i])
        you_lin_list.append(you_lin_len)
    zhu_total_len = 0
    for file in zhu_lin_list:
        zhu_total_len += file
    zuo_total_len = 0
    for file in zuo_lin_list:
        zuo_total_len += file
    you_total_len = 0
    for file in you_lin_list:
        you_total_len += file
    return zhu_total_len,zuo_total_len,you_total_len
# #############################################################
# #测试函数正确性
# zhu_x = [0,1,2,3,3,3,3,3] #理论上端点长5,总长度7,本身是一个两条直角边为3,4的直角三角形
# zhu_y = [0,0,0,0,1,2,3,4]
# zhu_duan_len,zuo_duan_len,you_duan_len = get_duandian_len(zhu_x,zhu_y,zhu_x,zhu_y,zhu_x,zhu_y)
# zhu_total_len,zuo_total_len,you_total_len = get_total_len(zhu_x,zhu_y,zhu_x,zhu_y,zhu_x,zhu_y)
# print(zhu_duan_len,zuo_total_len)
# print(zhu_total_len,zuo_total_len)
# ################################################################
# 计算卷曲度
def get_juanqu(zhu_duan_len,zuo_duan_len,you_duan_len,zhu_total_len,zuo_total_len,you_total_len):
    zhu_juanqu = zhu_total_len / zhu_duan_len
    zuo_juanqu = zuo_total_len / zuo_duan_len
    you_juanqu = you_total_len / you_duan_len
#     print(zhu_total_len)
#     print(zhu_duan_len)
#     print(zhu_juanqu)
    return zhu_juanqu,zuo_juanqu,you_juanqu
  
# 计算角度
def get_angle(zhu_x, zhu_y, zuo_x, zuo_y, you_x, you_y):
  # 假设节点处的点都为a,zhu_a,zuo_a,you_a它们x,y坐标点都相等,然后
  # 后面一个点都为b,zhu_b,zuo_b,you_b,它们的值不相等
  # zhu_zuo_angle = zhu_ab,zuo_ab,zhu_zuo_b
  # zhu_you_angle = zhu_ab,you_ab,zhu_you_b
  # zuo_you_angle = zuo_ab,you_ab,zuo_you_b 
  # 主分支上两个点
  zhu_x_a = zhu_x[0]
  zhu_y_a = zhu_y[0]
  zhu_x_b = zhu_x[1]
  zhu_y_b = zhu_y[1]
  # 左分支上两个点
  zuo_x_a = zuo_x[0]
  zuo_y_a = zuo_y[0]
  zuo_x_b = zuo_x[1]
  zuo_y_b = zuo_y[1]
  # 右分支上两个点
  you_x_a = you_x[0]
  you_y_a = you_y[0]
  you_x_b = you_x[1]
  you_y_b = you_y[1]
  # zhu_x_a, zuo_x_a, you_x_a应该相等
  # 每个分支端点长度
  zhu_ab_len = get_len(zhu_x_a,zhu_x_b,zhu_y_a,zhu_y_b)
  zuo_ab_len = get_len(zuo_x_a,zuo_x_b,zuo_y_a,zuo_y_b)
  you_ab_len = get_len(you_x_a,you_x_b,you_y_a,you_y_b)
  zhu_zuo_len = get_len(zhu_x_b,zuo_x_b,zhu_y_b,zuo_y_b)
  zhu_you_len = get_len(zhu_x_b,you_x_b,zhu_y_b,you_y_b)
  zuo_you_len = get_len(zuo_x_b,you_x_b,zuo_y_b,you_y_b)
  zhu_zuo_angle = cal_angle(zhu_ab_len,zuo_ab_len,zhu_zuo_len)
  zhu_you_angle = cal_angle(zhu_ab_len,you_ab_len,zhu_you_len)
  zuo_you_angle = cal_angle(zuo_ab_len,you_ab_len,zuo_you_len)
  
  # 三个角度有可能其中为nan,加在一块zong_angle也就是nan,在这里不做处理后面再进行处理
  zong_angle = zhu_zuo_angle + zhu_you_angle + zuo_you_angle
  
  return zhu_zuo_angle,zhu_you_angle,zuo_you_angle,zong_angle

# 得到管径比
def get_diam_ratio(zhu_diam, zuo_diam, you_diam):
  # 管径可能为0
  if zuo_diam == 0:
    zuo_diam = 1
  if you_diam == 0:
    you_diam = 1
  zhu_zuo_diam_ratio = zhu_diam / zuo_diam
  zhu_you_diam_ratio = zhu_diam / you_diam
  zuo_you_diam_ratio = zuo_diam / you_diam
  return  zhu_zuo_diam_ratio, zhu_you_diam_ratio, zuo_you_diam_ratio

# 得到长度比
def get_len_ratio(zhu_total_len, zuo_total_len, you_total_len):
  zhu_zuo_len_ratio = zhu_total_len / zuo_total_len
  zhu_you_len_ratio = zhu_total_len / you_total_len
  zuo_you_len_ratio = zuo_total_len / you_total_len
  
  return zhu_zuo_len_ratio, zhu_you_len_ratio, zuo_you_len_ratio

# 打印数据
def printList(data_list):
  data_list = sorted(data_list)
#   data_list = np.array(data_list)
  print(data_list)
    
# part显示测哪一部分,如果为zhu,则测主分支的各项指标.(zhu,zuo,you,all)
def calculate(data, part="zhu"):
    # 管径列表
    zhu_diam_list = []
    zuo_diam_list = []
    you_diam_list = []
    # 端点长度列表
    zhu_duan_len_list = []
    zuo_duan_len_list = []
    you_duan_len_list = []
    # 总长度列表
    zhu_total_len_list = []
    zuo_total_len_list = []
    you_total_len_list = []
    # 卷曲度列表
    zhu_juanqu_list = []
    zuo_juanqu_list  = []
    you_juanqu_list = []
    # 角度列表  zhu代表zhu_zuo,you代表zhu_you,zuo代表zuo_you
    zhu_zuo_angle_list = []
    zhu_you_angle_list = []
    zuo_you_angle_list = []
    # 管径比列表
    zhu_zuo_diam_ratio_list = []
    zhu_you_diam_ratio_list = []
    zuo_you_diam_ratio_list = []
    # 长度比列表
    zhu_zuo_len_ratio_list = []
    zhu_you_len_ratio_list = []
    zuo_you_len_ratio_list = []
    
    for i in range(0,len(data)):
        zhu_x = data[i][0]
        zuo_x = data[i][1]
        you_x = data[i][2]
        zhu_y = data[i][3]
        zuo_y = data[i][4]
        you_y = data[i][5]
        zhu_diam = data[i][6]
        zuo_diam = data[i][7]
        you_diam = data[i][8]
        
          
        # 计算每个分支管径
        # data[i]代表一个分叉矩阵10x10
        zhu_diam, zuo_diam, you_diam = get_diam(data[i])
        zhu_diam_list.append((zhu_diam,i))
        zuo_diam_list.append((zuo_diam,i))
        you_diam_list.append((you_diam,i))
        
        # 计算每个分叉分支端点长度
        zhu_duan_len,zuo_duan_len,you_duan_len = get_duandian_len(zhu_x,zhu_y,zuo_x,zuo_y,you_x,you_y)
        zhu_duan_len_list.append((zhu_duan_len,i))
        zuo_duan_len_list.append((zuo_duan_len,i))
        you_duan_len_list.append((you_duan_len,i))
        
        # 计算每个分叉分支总长度
        zhu_total_len,zuo_total_len,you_total_len = get_total_len(zhu_x,zhu_y,zuo_x,zuo_y,you_x,you_y)
        zhu_total_len_list.append((zhu_total_len,i))
        zuo_total_len_list.append((zuo_total_len,i))
        you_total_len_list.append((you_total_len,i))
        
        # 计算每个分叉分支卷曲度
        zhu_juanqu,zuo_juanqu,you_juanqu = get_juanqu(zhu_duan_len,zuo_duan_len,you_duan_len,zhu_total_len,zuo_total_len,you_total_len)
        zhu_juanqu_list.append((zhu_juanqu,i))
        zuo_juanqu_list.append((zuo_juanqu,i))
        you_juanqu_list.append((you_juanqu,i))
        
        
        # 计算每个分叉分支管径比
        zhu_zuo_diam_ratio, zhu_you_diam_ratio, zuo_you_diam_ratio = get_diam_ratio(zhu_diam, zuo_diam, you_diam)
        zhu_zuo_diam_ratio_list.append((zhu_zuo_diam_ratio,i))
        zhu_you_diam_ratio_list.append((zhu_you_diam_ratio,i))
        zuo_you_diam_ratio_list.append((zuo_you_diam_ratio,i))
        
        # 计算每个分叉分支长度比
        zhu_zuo_len_ratio, zhu_you_len_ratio, zuo_you_len_ratio = get_len_ratio(zhu_total_len, zuo_total_len, you_total_len)
        zhu_zuo_len_ratio_list.append((zhu_zuo_len_ratio,i))
        zhu_you_len_ratio_list.append((zhu_you_len_ratio,i))
        zuo_you_len_ratio_list.append((zuo_you_len_ratio,i))
        
        # 计算每个分叉分支角度
        zhu_zuo_angle,zhu_you_angle,zuo_you_angle,zong_angle = get_angle(zhu_x, zhu_y, zuo_x, zuo_y, you_x, you_y)
        if math.isnan(zong_angle):
          continue
        else:
          zhu_zuo_angle_list.append((zhu_zuo_angle,i))
          zhu_you_angle_list.append((zhu_you_angle,i))
          zuo_you_angle_list.append((zuo_you_angle,i))
    # 一共七项指标
    # 混合管径值
    diam_list = zhu_diam_list + zuo_diam_list + you_diam_list
    # 混合端点长度
    duan_len_list = zhu_duan_len_list + zuo_duan_len_list + you_duan_len_list
    # 混合总长度
    total_len_list = zhu_total_len_list + zuo_total_len_list + you_total_len_list
    # 混合卷曲度
    juanqu_list = zhu_juanqu_list + zuo_juanqu_list + you_juanqu_list
    # 混合角度
    angle_list = zhu_zuo_angle_list + zhu_you_angle_list + zuo_you_angle_list
    # 混合管径比
    diam_ratio_list = zhu_zuo_diam_ratio_list + zhu_you_diam_ratio_list + zuo_you_diam_ratio_list
    # 混合长度比
    len_ratio_list = zhu_zuo_len_ratio_list + zhu_you_len_ratio_list + zuo_you_len_ratio_list
    
#     print("**********************************************************************")
#     printList(zuo_you_len_ratio_list)
    
    # 分别返回各项指标
    if part == "zhu":
      return zhu_diam_list, zhu_duan_len_list, zhu_total_len_list, zhu_juanqu_list,zhu_zuo_angle_list,zhu_zuo_diam_ratio_list,zhu_zuo_len_ratio_list
    if part == "zuo":
      return zuo_diam_list, zuo_duan_len_list, zuo_total_len_list, zuo_juanqu_list,zhu_you_angle_list,zhu_you_diam_ratio_list,zhu_you_len_ratio_list
    if part == "you":
      return you_diam_list, you_duan_len_list, you_total_len_list, you_juanqu_list,zuo_you_angle_list,zuo_you_diam_ratio_list,zuo_you_len_ratio_list
    if part == "all":
      return diam_list, duan_len_list, total_len_list, juanqu_list,angle_list,diam_ratio_list,len_ratio_list
    
    
#通过改变part,来分别计算每个分支的指标
ori_diam_list, ori_duan_len_list, ori_total_len_list, ori_juanqu_list, ori_angle_list, ori_diam_ratio_list, ori_len_ratio_list = calculate(ori_data,part=select_part)
gen_diam_list, gen_duan_len_list, gen_total_len_list, gen_juanqu_list, gen_angle_list, gen_diam_ratio_list, gen_len_ratio_list = calculate(gen_data,part=select_part)
def show_imgs(data,data_list,model):
  # 对指标进行排序,然后保存
  data_list = sorted(data_list)
  for i in range(len(data_list)):
      metrics = data_list[i][0]
      print(metrics)
      index = data_list[i][1]
      zhu_x = data[index][0]
      zuo_x = data[index][1]
      you_x = data[index][2]
      zhu_y = data[index][3]
      zuo_y = data[index][4]
      you_y = data[index][5]
      zhu_diam = data[index][6]
      zuo_diam = data[index][7]
      you_diam = data[index][8]
      fig = plt.figure(figsize=(100,100))
      plt.plot(zhu_x,zhu_y,color='red',linewidth=400*zhu_diam[0])
      plt.plot(zuo_x,zuo_y,color='green',linewidth=400*zuo_diam[0])
      plt.plot(you_x,you_y,color='blue',linewidth=400*you_diam[0])
      plt.xlim(0.,1.)
      plt.ylim(0.,1.)
      plt.xticks(np.arange(0.,1.,0.1))
      plt.yticks(np.arange(0.,1.,0.1))
      fig.set_size_inches(100,100)
      plt.axis("off")
      plt.savefig('C:\\Users\\Administrator\\Desktop\\可视化各指标分叉\\主左长度比\\gen\\%s_%.5f.jpg' % (model,metrics),dpi=10)
      plt.close()
show_imgs(gen_data,gen_diam_ratio_list,'gen')
# show_imgs(ori_data,ori_len_ratio_list,'ori')

##############################################################################
# print(len(ori_diam_list),len(gen_diam_list))
# print(len(ori_duan_len_list),len(gen_duan_len_list))
# print(len(ori_juanqu_list),len(gen_juanqu_list))
# print(len(ori_diam_list),len(gen_diam_list))
# print(len(ori_diam_ratio_list),len(gen_diam_ratio_list))
# print(len(ori_angle_list),len(gen_angle_list))
'''
###############################################################################
def calculate_param(data_diam_list, data_duan_len_list, data_total_len_list, data_juanqu_list, data_angle_list, data_diam_ratio_list, data_len_ratio_list):
    #计算各项指标平均值
    data_diam_list_mean = np.mean(data_diam_list)
    data_duan_len_list_mean = np.mean(data_duan_len_list)
    data_total_len_list_mean = np.mean(data_total_len_list)
    data_juanqu_list_mean = np.mean(data_juanqu_list)
    data_angle_list_mean = np.mean(data_angle_list)
    data_diam_ratio_list_mean = np.mean(data_diam_ratio_list)
    data_len_ratio_list_mean = np.mean(data_len_ratio_list)
    
    #计算各项指标方差
    data_diam_list_var = np.var(data_diam_list)
    data_duan_len_list_var = np.var(data_duan_len_list)
    data_total_len_list_var = np.var(data_total_len_list)
    data_juanqu_list_var = np.var(data_juanqu_list)
    data_angle_list_var = np.var(data_angle_list)
    data_diam_ratio_list_var = np.var(data_diam_ratio_list)
    data_len_ratio_list_var = np.var(data_len_ratio_list)
    
    #计算各项指标标准差
    data_diam_list_std = np.std(data_diam_list,ddof=1)
    data_duan_len_list_std = np.std(data_duan_len_list,ddof=1)
    data_total_len_list_std = np.std(data_total_len_list,ddof=1)
    data_juanqu_list_std = np.std(data_juanqu_list,ddof=1)
    data_angle_list_std = np.std(data_angle_list,ddof=1)
    data_diam_ratio_list_std = np.std(data_diam_ratio_list,ddof=1)
    data_len_ratio_list_std = np.std(data_len_ratio_list,ddof=1)
       
    return data_diam_list_mean, data_duan_len_list_mean, data_total_len_list_mean, data_juanqu_list_mean, data_angle_list_mean, data_diam_ratio_list_mean, data_len_ratio_list_mean,\
    data_diam_list_var, data_duan_len_list_var, data_total_len_list_var, data_juanqu_list_var, data_angle_list_var, data_diam_ratio_list_var, data_len_ratio_list_var,\
    data_diam_list_std, data_duan_len_list_std, data_total_len_list_std, data_juanqu_list_std, data_angle_list_std, data_diam_ratio_list_std, data_len_ratio_list_std
def culculate_diam_list(ori_diam_list,gen_diam_list):
    # 计算管径是否符合
    # T检验
    ttest_diam_stat,ttest_diam_p = ttest_ind(ori_diam_list,gen_diam_list)
    # 曼-惠特尼U检验
    man_diam_stat, man_diam_p = mannwhitneyu(ori_diam_list,gen_diam_list)
    # 威尔科克森符号秩检验
    wil_diam_stat, wil_diam_p = wilcoxon(ori_diam_list,gen_diam_list)
    
    return ttest_diam_stat, ttest_diam_p, man_diam_stat, man_diam_p, wil_diam_stat, wil_diam_p
       
def calculate_duan_len_test(ori_duan_len_list,gen_duan_len_list):
    #计算端点长度是否符合
    #T检验
    ttest_duan_len_stat,ttest_duan_len_p = ttest_ind(ori_duan_len_list,gen_duan_len_list)
    #曼-惠特尼U检验
    man_duan_len_stat,man_duan_len_p = mannwhitneyu(ori_duan_len_list,gen_duan_len_list)
    #威尔科克森符号秩检验
    wil_duan_len_stat,wil_duan_len_p = wilcoxon(ori_duan_len_list,gen_duan_len_list)
    
    return ttest_duan_len_stat, ttest_duan_len_p, man_duan_len_stat, man_duan_len_p, wil_duan_len_stat, wil_duan_len_p
       
def calculate_total_len_test(ori_total_len_list,gen_total_len_list):
    #计算总长度是否符合
    #T检验
    ttest_total_len_stat,ttest_total_len_p = ttest_ind(ori_total_len_list,gen_total_len_list)
    #曼-惠特尼U检验
    man_total_len_stat,man_total_len_p = mannwhitneyu(ori_total_len_list,gen_total_len_list)
    #威尔科克森符号秩检验
    wil_total_len_stat,wil_total_len_p = wilcoxon(ori_total_len_list,gen_total_len_list)
    return ttest_total_len_stat, ttest_total_len_p, man_total_len_stat, man_total_len_p, wil_total_len_stat, wil_total_len_p
   
   
def calculate_juanqu_test(ori_juanqu_list,gen_juanqu_list):
    #计算卷曲度是否符合
    #T检验
    ttest_juanqu_stat,ttest_juanqu_p = ttest_ind(ori_juanqu_list,gen_juanqu_list)
    #曼-惠特尼U检验
    man_juanqu_stat,man_juanqu_p = mannwhitneyu(ori_juanqu_list,gen_juanqu_list)
    #威尔科克森符号秩检验
    wil_juanqu_stat,wil_juanqu_p = wilcoxon(ori_juanqu_list,gen_juanqu_list)
    
    return ttest_juanqu_stat, ttest_juanqu_p, man_juanqu_stat, man_juanqu_p, wil_juanqu_stat, wil_juanqu_p

def calculate_angle_test(ori_angle_list,gen_angle_list):
    # 使角度列表长度相等,因为之前角度为nan时直接跳出循环了
    if len(ori_angle_list) > len(gen_angle_list):
      ori_angle_list = ori_angle_list[0:len(gen_angle_list)]
    else:
      gen_angle_list = gen_angle_list[0:len(ori_angle_list)]
    # 计算角度是否符合
    # T检验
    ttest_angle_stat,ttest_angle_p = ttest_ind(ori_angle_list,gen_angle_list)
    # 曼-惠特尼U检验
    man_angle_stat,man_angle_p = mannwhitneyu(ori_angle_list,gen_angle_list)
    # 威尔科克森符号秩检验
    wil_angle_stat,wil_angle_p = wilcoxon(ori_angle_list,gen_angle_list)
    
    return ttest_angle_stat, ttest_angle_p, man_angle_stat, man_angle_p, wil_angle_stat, wil_angle_p
  
def calculate_diam_ratio_test(ori_diam_ratio_list,gen_diam_ratio_list):
    # 计算管径比是否符合
    # T检验
    ttest_diam_ratio_stat,ttest_diam_ratio_p = ttest_ind(ori_diam_ratio_list,gen_diam_ratio_list)
    # 曼-惠特尼U检验
    man_diam_ratio_stat,man_diam_ratio_p = mannwhitneyu(ori_diam_ratio_list,gen_diam_ratio_list)
    # 威尔科克森符号秩检验
    wil_diam_ratio_stat,wil_diam_ratio_p = wilcoxon(ori_diam_ratio_list,gen_diam_ratio_list)
    
    return ttest_diam_ratio_stat, ttest_diam_ratio_p, man_diam_ratio_stat, man_diam_ratio_p, wil_diam_ratio_stat, wil_diam_ratio_p
  
def calculate_len_ratio_test(ori_len_ratio_list,gen_len_ratio_list):
    # 计算管径比是否符合
    # T检验
    ttest_len_ratio_stat,ttest_len_ratio_p = ttest_ind(ori_len_ratio_list,gen_len_ratio_list)
    # 曼-惠特尼U检验
    man_len_ratio_stat,man_len_ratio_p = mannwhitneyu(ori_len_ratio_list,gen_len_ratio_list)
    # 威尔科克森符号秩检验
    wil_len_ratio_stat,wil_len_ratio_p = wilcoxon(ori_len_ratio_list,gen_len_ratio_list)
    
    return ttest_len_ratio_stat, ttest_len_ratio_p, man_len_ratio_stat, man_len_ratio_p, wil_len_ratio_stat, wil_len_ratio_p     
       
#计算原始数据与生成数据各项指标的平均值,方差,标准差
ori_diam_list_mean,ori_duan_len_list_mean,ori_total_len_list_mean,ori_juanqu_list_mean,ori_angle_list_mean, ori_diam_ratio_list_mean, ori_len_ratio_list_mean,ori_diam_list_var,ori_duan_len_list_var,ori_total_len_list_var,ori_juanqu_list_var,ori_angle_list_var, ori_diam_ratio_list_var, ori_len_ratio_list_var,ori_diam_list_std,ori_duan_len_list_std,ori_total_len_list_std,ori_juanqu_list_std ,ori_angle_list_std, ori_diam_ratio_list_std, ori_len_ratio_list_std = \
calculate_param(ori_diam_list,ori_duan_len_list,ori_total_len_list,ori_juanqu_list, ori_angle_list, ori_diam_ratio_list, ori_len_ratio_list)

gen_diam_list_mean,gen_duan_len_list_mean,gen_total_len_list_mean,gen_juanqu_list_mean,gen_angle_list_mean, gen_diam_ratio_list_mean, gen_len_ratio_list_mean,gen_diam_list_var,gen_duan_len_list_var,gen_total_len_list_var,gen_juanqu_list_var,gen_angle_list_var, gen_diam_ratio_list_var, gen_len_ratio_list_var,gen_diam_list_std, gen_duan_len_list_std,gen_total_len_list_std,gen_juanqu_list_std ,gen_angle_list_std, gen_diam_ratio_list_std, gen_len_ratio_list_std = \
calculate_param(gen_diam_list,gen_duan_len_list,gen_total_len_list,gen_juanqu_list, gen_angle_list, gen_diam_ratio_list, gen_len_ratio_list)
print("----------管径----------")
print("原始数据平均值:%f" % ori_diam_list_mean,"生成数据平均值:%f" % gen_diam_list_mean)
print("原始数据方差:%f" % ori_diam_list_var,"生成数据方差:%f" % gen_diam_list_var)
print("原始数据标准差:%f" % ori_diam_list_std,"生成数据标准差:%f" % gen_diam_list_std)
print("\n")
print("----------端点长度----------")
print("原始数据平均值:%f" % ori_duan_len_list_mean,"生成数据平均值:%f" % gen_duan_len_list_mean)
print("原始数据方差:%f" % ori_duan_len_list_var,"生成数据方差:%f" % gen_duan_len_list_var)
print("原始数据标准差:%f" % ori_duan_len_list_std,"生成数据标准差:%f" % gen_duan_len_list_std)
print("\n")
print("----------总长度----------")
print("原始数据平均值:%f" % ori_total_len_list_mean,"生成数据平均值:%f" % gen_total_len_list_mean)
print("原始数据方差:%f" % ori_total_len_list_var,"生成数据方差:%f" % gen_total_len_list_var)
print("原始数据标准差:%f" % ori_total_len_list_std,"生成数据标准差:%f" % gen_total_len_list_std)
print("\n")
print("----------卷曲度----------")
print("原始数据平均值:%f" % ori_juanqu_list_mean,"生成数据平均值:%f" % gen_juanqu_list_mean)
print("原始数据方差:%f" % ori_juanqu_list_var,"生成数据标准差:%f" % gen_juanqu_list_var)
print("原始数据标准差:%f" % ori_juanqu_list_std,"生成数据标准差:%f" % gen_juanqu_list_std)
print("\n")
print("----------角度----------")
print("原始数据平均值:%f" % ori_angle_list_mean,"生成数据平均值:%f" % gen_angle_list_mean)
print("原始数据方差:%f" % ori_angle_list_var,"生成数据标准差:%f" % gen_angle_list_var)
print("原始数据标准差:%f" % ori_angle_list_std,"生成数据标准差:%f" % gen_angle_list_std)
print("\n")
print("----------管径比----------")
print("原始数据平均值:%f" % ori_diam_ratio_list_mean,"生成数据平均值:%f" % gen_diam_ratio_list_mean)
print("原始数据方差:%f" % ori_diam_ratio_list_var,"生成数据标准差:%f" % gen_diam_ratio_list_var)
print("原始数据标准差:%f" % ori_diam_ratio_list_std,"生成数据标准差:%f" % gen_diam_ratio_list_std)
print("\n")
print("----------长度比----------")
print("原始数据平均值:%f" % ori_len_ratio_list_mean,"生成数据平均值:%f" % gen_len_ratio_list_mean)
print("原始数据方差:%f" % ori_len_ratio_list_var,"生成数据标准差:%f" % gen_len_ratio_list_var)
print("原始数据标准差:%f" % ori_len_ratio_list_std,"生成数据标准差:%f" % gen_len_ratio_list_std)
  
print("\n\n")
# 计算原始数据与生成数据是否符合各项统计性检验
# 各项指标正态性检验都不符合, 这里不再打印
ttest_diam_stat, ttest_diam_p, man_diam_stat, man_diam_p, wil_diam_stat, wil_diam_p= culculate_diam_list(ori_diam_list,gen_diam_list)
print("----------管径统计性检验----------")
print("T检验:%f" % ttest_diam_p)
print("曼-惠特尼U检验:%f" % man_diam_p)
print("威尔科克森符号秩检验:%f" % wil_diam_p)
print("\n")
ttest_duan_len_stat, ttest_duan_len_p, man_duan_len_stat, man_duan_len_p, wil_duan_len_stat, wil_duan_len_p = calculate_duan_len_test(ori_duan_len_list,gen_duan_len_list)
print("----------端点长度统计性检验----------")
print("T检验:%f" % ttest_duan_len_p)
print("曼-惠特尼U检验:%f" % man_duan_len_p)
print("威尔科克森符号秩检验:%f" % wil_duan_len_p)
print("\n")
ttest_total_len_stat, ttest_total_len_p, man_total_len_stat, man_total_len_p, wil_total_len_stat, wil_total_len_p = calculate_total_len_test(ori_total_len_list,gen_total_len_list)
print("----------总长度统计性检验----------")
print("T检验:%f" % ttest_total_len_p)
print("曼-惠特尼U检验:%f" % man_total_len_p)
print("威尔科克森符号秩检验:%f" % wil_total_len_p)
print("\n")
ttest_juanqu_stat, ttest_juanqu_p, man_juanqu_stat, man_juanqu_p, wil_juanqu_stat, wil_juanqu_p = calculate_juanqu_test(ori_juanqu_list,gen_juanqu_list)
print("----------卷曲度统计性检验----------")
print("T检验:%f" % ttest_juanqu_p)
print("曼-惠特尼U检验:%f" % man_juanqu_p)
print("威尔科克森符号秩检验:%f" % wil_juanqu_p)
print("\n")
ttest_angle_stat, ttest_angle_p, man_angle_stat, man_angle_p, wil_angle_stat, wil_angle_p = calculate_angle_test(ori_angle_list,gen_angle_list)
print("----------角度统计性检验----------")
print("T检验:%f" % ttest_angle_p)
print("曼-惠特尼U检验:%f" % man_angle_p)
print("威尔科克森符号秩检验:%f" % wil_angle_p)
print("\n")
ttest_diam_ratio_stat, ttest_diam_ratio_p, man_diam_ratio_stat, man_diam_ratio_p, wil_diam_ratio_stat, wil_diam_ratio_p = calculate_diam_ratio_test(ori_diam_ratio_list,gen_diam_ratio_list)
print("----------管径比统计性检验----------")
print("T检验:%f" % ttest_diam_ratio_p)
print("曼-惠特尼U检验:%f" % man_diam_ratio_p)
print("威尔科克森符号秩检验:%f" % wil_diam_ratio_p)
print("\n")
ttest_len_ratio_stat, ttest_len_ratio_p, man_len_ratio_stat, man_len_ratio_p, wil_len_ratio_stat, wil_len_ratio_p = calculate_len_ratio_test(ori_len_ratio_list,gen_len_ratio_list)
print("----------长度比统计性检验----------")
print("T检验:%f" % ttest_len_ratio_p)
print("曼-惠特尼U检验:%f" % man_len_ratio_p)
print("威尔科克森符号秩检验:%f" % wil_len_ratio_p)
print("\n")
'''

猜你喜欢

转载自blog.csdn.net/qq_38826019/article/details/83047492