用python计算10x10数据各项指标

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
np.set_printoptions(suppress=True)
np.set_printoptions(threshold=np.inf) #输出全部矩阵不带省略号

def select_axis(data):
      gen_data = []
      for i in range(len(data)):
          threshold = 0.97
          zhu_x = []
          zhu_y = []
          for j in range(len(data[i][0])):
            if data[i][0][j] < threshold and data[i][3][j] < threshold:
              zhu_x.append(data[i][0][j])
              zhu_y.append(data[i][3][j])
              
          zuo_x = []
          zuo_y = []
          for j in range(len(data[i][1])):
            if data[i][1][j] < threshold and data[i][4][j] < threshold:
              zuo_x.append(data[i][1][j])
              zuo_y.append(data[i][4][j])
          
          you_x = []
          you_y = []
          for j in range(len(data[i][2])):
            if data[i][2][j] < threshold and data[i][5][j] < threshold:
              you_x.append(data[i][2][j])
              you_y.append(data[i][5][j])
          zhu_diam = [data[i][6][0]]
          zuo_diam = [data[i][7][0]]
          you_diam = [data[i][8][0]]
          
          if len(zhu_x) == len(zhu_y) and len(zuo_x) == len(zuo_y) and len(you_x) == len(you_y):
            #将每个分支第一个点,取平均,分别再赋给第一个坐标
            mean_x_0 = (zhu_x[0] + zuo_x[0] + you_x[0]) / 3
            mean_y_0 = (zhu_y[0] + zuo_y[0] + you_y[0]) / 3
            zhu_x[0] = mean_x_0
            zuo_x[0] = mean_x_0
            you_x[0] = mean_x_0 
            zhu_y[0] = mean_y_0
            zuo_y[0] = mean_y_0
            you_y[0] = mean_y_0
            zhu_xy = zhu_x + zhu_y
            zuo_xy = zuo_x + zuo_y
            you_xy = you_x + you_y
            
            zhu = zhu_xy + zhu_diam
            zuo = zuo_xy + zuo_diam
            you = you_xy + you_diam
            fencha = [zhu] + [zuo] + [you]
            gen_data.append(fencha)
      return gen_data
    
ori_data = np.load('data/data_10x10.npy')
gen_data = np.load('data/data_10x10.npy')
ori_data = ori_data[0:3000,:,:] #选择保存多少数据
gen_data = gen_data[3000:6000,:,:] #选择保存多少数据
ori_data = ori_data.reshape(-1,10,10)
gen_data = gen_data.reshape(-1,10,10)
ori_axis = select_axis(ori_data)
gen_axis = select_axis(gen_data)
####################################################
#绘图,观察是否正确
# gen = ori_axis
# for i in range(len(gen)):
#     zhu = gen[i][0]
#     zuo = gen[i][1]
#     you = gen[i][2]
#     zhu_diam = [zhu[-1]]
#     zuo_diam = [zuo[-1]]
#     you_diam = [you[-1]]
#     zhu_x = zhu[0:len(zhu)//2]
#     zuo_x = zuo[0:len(zuo)//2]
#     you_x = you[0:len(you)//2]
#     zhu_y = zhu[len(zhu)//2:(len(zhu)-1)]
#     zuo_y = zuo[len(zuo)//2:(len(zuo)-1)]
#     you_y = you[len(you)//2:(len(you)-1)]
#     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.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
  
#余弦定理计算角度公式
def cal_angle(a,b,c):
    cos_angle = (a**2+b**2-c**2)/(2*a*b)
    angle = np.arccos(cos_angle)
    angle = angle*180/np.pi
    return angle
  
#计算端点长度
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)):
        #相邻点大小相差1e-5可以认为他们是插入点,距离为0
        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
    return zhu_juanqu,zuo_juanqu,you_juanqu
 
#计算角度
def get_angle(zhu_x,zhu_y,zuo_x,zuo_y,you_x,you_y):
    #主分支上两个尾部点
    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_b,zhu_x_a,zhu_y_b,zhu_y_a)
    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)
    if zhu_ab_len > 0 and zuo_ab_len > 0 and you_ab_len > 0 and zhu_zuo_len > 0 and zhu_you_len > 0 and zuo_you_len > 0 :
      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)
      zong_angle = zhu_zuo_angle + zhu_you_angle + zuo_you_angle
      return zhu_zuo_angle,zhu_you_angle,zuo_you_angle,zong_angle
    else:
      return 0
   
#计算主分支与左右分支的长度比
def get_ratio(zhu_total_len,zuo_total_len,you_total_len):
    zhu_zuo_ratio = zhu_total_len / zuo_total_len
    zhu_you_ratio = zhu_total_len / you_total_len
    return zhu_zuo_ratio,zhu_you_ratio
 
def calculate(data):
#     data = data.reshape(-1,3,60)
#     data = data[:,:,0:60]
    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_zuo_ratio_list = []
    zhu_you_ratio_list = []
    zhu_juanqu_list = []
    zuo_juanqu_list  = []
    you_juanqu_list = []
    zhu_zuo_angle_list = []
    zhu_you_angle_list = []
    zuo_you_angle_list = []
    zong_angle_list = []
    for i in range(0,len(data)):
        zhu = data[i][0]
        zuo = data[i][1]
        you = data[i][2]
        zhu_diam = [zhu[-1]]
        zuo_diam = [zuo[-1]]
        you_diam = [you[-1]]
        zhu_x = zhu[0:len(zhu)//2]
        zuo_x = zuo[0:len(zuo)//2]
        you_x = you[0:len(you)//2]
        zhu_y = zhu[len(zhu)//2:(len(zhu)-1)]
        zuo_y = zuo[len(zuo)//2:(len(zuo)-1)]
        you_y = you[len(you)//2:(len(you)-1)]
        #计算每个分支管径
        zhu_diam_list.append(zhu_diam[0])
        zuo_diam_list.append(zuo_diam[0])
        you_diam_list.append(you_diam[0])
        #计算每个分叉分支端点长度
        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)
        zuo_duan_len_list.append(zuo_duan_len)
        you_duan_len_list.append(you_duan_len)
        #计算每个分叉分支总长度
        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)
        zuo_total_len_list.append(zuo_total_len)
        you_total_len_list.append(you_total_len)
        #计算主分支与左右分支长度比
        zhu_zuo_ratio,zhu_you_ratio = get_ratio(zhu_total_len,zuo_total_len,you_total_len)
        zhu_zuo_ratio_list.append(zhu_zuo_ratio)
        zhu_you_ratio_list.append(zhu_you_ratio)
        #计算每个分叉分支卷曲度
        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)
        zuo_juanqu_list.append(zuo_juanqu)
        you_juanqu_list.append(you_juanqu)
        #计算每个分叉分支角度
        zeros = get_angle(zhu_x,zhu_y,zuo_x,zuo_y,you_x,you_y)
        if zeros == 0:
          continue
        else:
          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)
            zhu_you_angle_list.append(zhu_you_angle)
            zuo_you_angle_list.append(zuo_you_angle)
            zong_angle_list.append(zong_angle)
    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
    return diam_list, duan_len_list, total_len_list, juanqu_list, angle_list
  
#得到原始数据和生成数据的各项指标列表,由于zong_angle为nan时,有跳出循环的操作,可能导致angle_list长度不同,这对于后面计算各项检验有影响,需要处理这个角度,其他都没事
ori_diam_list, ori_duan_len_list, ori_total_len_list, ori_juanqu_list, ori_angle_list = calculate(ori_axis)
gen_diam_list, gen_duan_len_list, gen_total_len_list, gen_juanqu_list, gen_angle_list = calculate(gen_axis)

##############################################################################
# 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_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_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_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_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)
       
    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_list_var,data_duan_len_list_var,data_total_len_list_var,data_juanqu_list_var,data_angle_list_var,data_diam_list_std,data_duan_len_list_std,data_total_len_list_std,data_juanqu_list_std,data_angle_list_std
def culculate_diam_list(ori_diam_list,gen_diam_list):
    # 计算管径是否符合
    # 正态性检验
    ori_diam_zt_stat,ori_diam_zt_p = shapiro(ori_diam_list)
    gen_diam_zt_stat,gen_diam_zt_p = shapiro(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 ori_diam_zt_stat,ori_diam_zt_p,gen_diam_zt_stat,gen_diam_zt_p,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):
    #计算端点长度是否符合
    #正态性检验
    ori_duan_len_zt_stat,ori_duan_len_zt_p = shapiro(ori_duan_len_list)
    gen_duan_len_zt_stat,gen_duan_len_zt_p = shapiro(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 ori_duan_len_zt_stat,ori_duan_len_zt_p,gen_duan_len_zt_stat,gen_duan_len_zt_p,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):
    #计算总长度长度是否符合
    #正态性检验
    ori_total_len_zt_stat,ori_total_len_zt_p = shapiro(ori_total_len_list)
    gen_total_len_zt_stat,gen_total_len_zt_p = shapiro(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 ori_total_len_zt_stat,ori_total_len_zt_p,gen_total_len_zt_stat,gen_total_len_zt_p,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):
    #计算卷曲度是否符合
    #正态性检验
    ori_juanqu_zt_stat,ori_juanqu_zt_p = shapiro(ori_juanqu_list)
    gen_juanqu_zt_stat,gen_juanqu_zt_p = shapiro(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 ori_juanqu_zt_stat,ori_juanqu_zt_p,gen_juanqu_zt_stat,gen_juanqu_zt_p,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):
    # 使他们长度相等
    ori_angle_list_len = len(ori_angle_list)
    gen_angle_list_len = len(gen_angle_list)
    if ori_angle_list_len >= gen_angle_list_len:
      ori_angle_list = ori_angle_list[0:gen_angle_list_len]
    else:
      gen_angle_list = gen_angle_list[0:ori_angle_list_len]
    #计算角度是否符合
    #正态性检验
    ori_angle_zt_stat,ori_angle_zt_p = shapiro(ori_angle_list)
    gen_angle_zt_stat,gen_angle_zt_p = shapiro(gen_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 ori_angle_zt_stat,ori_angle_zt_p,gen_angle_zt_stat,gen_angle_zt_p,ttest_angle_stat,ttest_angle_p,man_angle_stat,man_angle_p,wil_angle_stat,wil_angle_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_list_var,ori_duan_len_list_var,ori_total_len_list_var,ori_juanqu_list_var,ori_angle_list_var,ori_diam_list_std,ori_duan_len_list_std,ori_total_len_list_std,ori_juanqu_list_std,ori_angle_list_std = calculate_param(ori_diam_list,ori_duan_len_list,ori_total_len_list,ori_juanqu_list,ori_angle_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_list_var,gen_duan_len_list_var,gen_total_len_list_var,gen_juanqu_list_var,gen_angle_list_var,gen_diam_list_std,gen_duan_len_list_std,gen_total_len_list_std,gen_juanqu_list_std,gen_angle_list_std = calculate_param(gen_diam_list,gen_duan_len_list,gen_total_len_list,gen_juanqu_list,gen_angle_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\n")
# 计算原始数据与生成数据是否符合各项统计性检验
# 各项指标正态性检验都不符合, 这里不再打印
ori_diam_zt_stat,ori_diam_zt_p,gen_diam_zt_stat,gen_diam_zt_p,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("原始数据正态性检验:%f" % ori_diam_zt_p,"生成数据正态性检验:%f" % gen_diam_zt_p)
print("T检验:%f" % ttest_diam_p)
print("曼-惠特尼U检验:%f" % man_diam_p)
print("威尔科克森符号秩检验:%f" % wil_diam_p)
print("\n")
ori_duan_len_zt_stat,ori_duan_len_zt_p,gen_duan_len_zt_stat,gen_duan_len_zt_p,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("原始数据正态性检验:%f" % ori_duan_len_zt_p,"生成数据正态性检验:%f" % gen_duan_len_zt_p)
print("T检验:%f" % ttest_duan_len_p)
print("曼-惠特尼U检验:%f" % man_duan_len_p)
print("威尔科克森符号秩检验:%f" % wil_duan_len_p)
print("\n")
ori_total_len_zt_stat,ori_total_len_zt_p,gen_total_len_zt_stat,gen_total_len_zt_p,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("原始数据正态性检验:%f" % ori_total_len_zt_p,"生成数据正态性检验:%f" % gen_total_len_zt_p)
print("T检验:%f" % ttest_total_len_p)
print("曼-惠特尼U检验:%f" % man_total_len_p)
print("威尔科克森符号秩检验:%f" % wil_total_len_p)
print("\n")
ori_juanqu_zt_stat,ori_juanqu_zt_p,gen_juanqu_zt_stat,gen_juanqu_zt_p,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("原始数据正态性检验:%f" % ori_juanqu_zt_p,"生成数据正态性检验:%f" % gen_juanqu_zt_p)
print("T检验:%f" % ttest_juanqu_p)
print("曼-惠特尼U检验:%f" % man_juanqu_p)
print("威尔科克森符号秩检验:%f" % wil_juanqu_p)
print("\n")
ori_angle_zt_stat,ori_angle_zt_p,gen_angle_zt_stat,gen_angle_zt_p,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("原始数据正态性检验:%f" % ori_angle_zt_p,"生成数据正态性检验:%f" % gen_angle_zt_p)
print("T检验:%f" % ttest_angle_p)
print("曼-惠特尼U检验:%f" % man_angle_p)
print("威尔科克森符号秩检验:%f" % wil_angle_p)
   

猜你喜欢

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