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")
'''