第一次
'''
@Time : 2020/11/21 20:42
@Author : laolao
@FileName: 7.py
'''
import json
import numpy as np
class NewProjectInfo:
'''
新建工程信息表
'''
U01 = "A101" #工程编号
U02 = "石家庄运河桥顶管隧道施工工程" #工程名称
U03 = "石家庄" #工程所在地
U04 = "铁道建设" #设计方
U31 = "甲级" #设计方资质等级
U05 = "铁道建设" #施工方
U32 = "特技总承包" #施工方资质等级
U06 = "铁道建设" #检测方
U33 = "甲级" #检测方资质等级
U07 = "铁道建设" #监理方
U34 = "甲级" #监理方资质等级
U08 = "2300" #隧道长度
U11 = "5.6"#新建顶管埋深
U09 = 0#开挖顶管断面形式
U12 = "{'r':1.8}"#新建顶管尺寸
U13 ="软粘土"#新建工程土层性质
U4 = "{}"#既有邻近地下柔性管线情况11
U5 = "{'U511':0,'U512':2.9,'U52':6,'U53':1,'U54':2.0}"#既有邻近地下刚性管线情况12
U6 = "{'U511':0,'U512':2.9,'U52':6,'U53':1,'U54':2.0}"#既有邻近邻近基础情况13
U7 = "{'U61':1,'U62':3.7,'U63':6}"#特殊工程情况说明
def __init__(self):
'''
前端控件读取的输入输入这里进行修改
'''
# self.U01=
# self.U02=
# self.U03=
# self.U04=
# self.U05=
# self.U06=
# self.U07=
# self.U08=
# self.U09=
# self.U11=
# self.U12=
# self.U13=
# self.U31=
# self.U32=
# self.U33=
# self.U34=
# self.U4=
# self.U5=
# self.U6=
# self.U7=
pass
def calculate_matrix_A(self,matrix):
'''
计算该矩阵M的特征值λ_max和特征向量A
最大特征值对应的特征向量A,并进行归一化
Example:
lao = NewProjectInfo()
a = [
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]
]
b = lao.CalculateMatrix(a)
print(b)
:param matrix:第一行代表列
:return:C.R<0.1 调用返回答案,C.R>=0.1调用返回false
'''
RI = {1:0,2:0,3:0.52,4:0.89,5:1.12,6:1.24,7:1.36,8:1.41,9:1.46}
m= np.array(matrix)
eigenvalue,featurevector = np.linalg.eig(m)
r_max=0
A_id=0
for i in range(len(eigenvalue)):
if r_max < eigenvalue[i]:
r_max = eigenvalue[i]
A_id = i
n = len(matrix)
A = []
# print(r_max)
# print(eigenvalue)
for i in featurevector:
A.append(i[A_id])
# print(A)
CR = (r_max - n)*RI[n] / (n-1)
if CR < 0.1:
# 归一化
x=0
for i in A:
x+=i
A_uniformization = [ ]
for i in A:
A_uniformization.append(i/x)
return A_uniformization
else:
return False
def calculate_matrix_B(self, matrix_group_B,A_uniformization):
'''
Example:
lao = NewProjectInfo()
matrix_group_B = [
[0.33,0.33,0.33],
[0.33,0.33,0.33],
[0.25,0.25,0.25,0.25],
[0.25, 0.25, 0.25, 0.25],
[0.33,0.33,0.33]
]
a = [
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]
]
A = lao.calculate_matrix_A(a)
B = lao.calculate_matrix_B(matrix_group_B,A)
for i in B:
print(i)
:param matrix_group_B: 5组特征向量
:param A_uniformization: calculate_matrix_A计算出来的权重
:return:风险权重
'''
Risk_B=[]
index_a = 0
for Bi in matrix_group_B:
t=[]
for i in Bi:
t.append(i*A_uniformization[index_a])
index_a+=1
Risk_B.append(t)
return Risk_B
def build_risk_type_table(self):
with open("风险类型.csv","w") as f:
pass
if __name__ == '__main__':
pass
第二次
'''
@Time : 2020/11/21 20:42
@Author : laolao
@FileName: 7.py
'''
#-*- coding:utf-8 -*-
import csv
import json
import numpy as np
class NewProjectInfo:
'''
新建工程信息表
'''
U01 = "A101" #工程编号
U02 = "石家庄运河桥顶管隧道施工工程" #工程名称
U03 = "石家庄" #工程所在地
U04 = "铁道建设" #设计方
U31 = "甲级" #设计方资质等级
U05 = "铁道建设" #施工方
U32 = "特技总承包" #施工方资质等级
U06 = "铁道建设" #检测方
U33 = "甲级" #检测方资质等级
U07 = "铁道建设" #监理方
U34 = "甲级" #监理方资质等级
U08 = "2300" #隧道长度
U11 = "5.6"#新建顶管埋深
U09 = 0#开挖顶管断面形式
U12 = "{'r':1.8}"#新建顶管尺寸
U13 ="软粘土"#新建工程土层性质
U4 = "{}"#既有邻近地下柔性管线情况11
U5 = "{'U511':0,'U512':2.9,'U52':6,'U53':1,'U54':2.0}"#既有邻近地下刚性管线情况12
U6 = "{'U511':0,'U512':2.9,'U52':6,'U53':1,'U54':2.0}"#既有邻近邻近基础情况13
U7 = "{'U61':1,'U62':3.7,'U63':6}"#特殊工程情况说明
def __init__(self):
'''
前端控件读取的输入输入这里进行修改
'''
# self.U01=
# self.U02=
# self.U03=
# self.U04=
# self.U05=
# self.U06=
# self.U07=
# self.U08=
# self.U09=
# self.U11=
# self.U12=
# self.U13=
# self.U31=
# self.U32=
# self.U33=
# self.U34=
# self.U4=
# self.U5=
# self.U6=
# self.U7=
pass
def calculate_matrix_A(self,matrix):
'''
计算该矩阵M的特征值λ_max和特征向量A
最大特征值对应的特征向量A,并进行归一化
Example:
lao = NewProjectInfo()
a = [
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]
]
b = lao.CalculateMatrix(a)
print(b)
:param matrix:第一行代表列
:return:C.R<0.1 调用返回答案,C.R>=0.1调用返回false
'''
RI = {1:0,2:0,3:0.52,4:0.89,5:1.12,6:1.24,7:1.36,8:1.41,9:1.46}
m= np.array(matrix)
eigenvalue,featurevector = np.linalg.eig(m)
r_max=0
A_id=0
for i in range(len(eigenvalue)):
if r_max < eigenvalue[i]:
r_max = eigenvalue[i]
A_id = i
n = len(matrix)
A = []
# print(r_max)
# print(eigenvalue)
for i in featurevector:
A.append(i[A_id])
# print(A)
CR = (r_max - n)*RI[n] / (n-1)
if CR < 0.1:
# 归一化
x=0
for i in A:
x+=i
A_uniformization = [ ]
for i in A:
A_uniformization.append(i/x)
return A_uniformization
else:
return False
def calculate_matrix_B(self, matrix_group_B,A_uniformization):
'''
Example:
lao = NewProjectInfo()
matrix_group_B = [
[0.33,0.33,0.33],
[0.33,0.33,0.33],
[0.25,0.25,0.25,0.25],
[0.25, 0.25, 0.25, 0.25],
[0.33,0.33,0.33]
]
a = [
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]
]
A = lao.calculate_matrix_A(a)
B = lao.calculate_matrix_B(matrix_group_B,A)
for i in B:
print(i)
:param matrix_group_B: 5组特征向量
:param A_uniformization: calculate_matrix_A计算出来的权重
:return:风险权重
'''
Risk_B=[]
index_a = 0
for Bi in matrix_group_B:
t=[]
for i in Bi:
t.append(i*A_uniformization[index_a])
index_a+=1
Risk_B.append(t)
return Risk_B
def calculate_waverage_of_risk(self,pointer_table,target_index):
'''
计算各个风险指标的加权平均值
输出概率值和风险类型
Example:
lao = NewProjectInfo()
pointer_table = [
[ 0, 0.2, 0.1, "低风险"],
[ 0.2, 0.4, 0.3, "较低风险"],
[ 0.4, 0.6, 0.5, "中等风险"],
[ 0.6, 0.8, 0.7, "较高风险"],
[ 0.8, 1, 0.9, "高风险"]
]
target_index = [
['低风险','较低风险','中等风险','较高风险','高风险'],
[ 6, 2, 1, 1, 0]
]
risk_value, risk_classification = lao.calculate_waverage_of_risk(pointer_table, target_index)
print("风险分类={}".format(risk_classification))
print("风险值={}".format(risk_value))
:param pointer_table: 对照表
:param target_index: 要计算的一行风险指标
:return: 概率值和风险类型
'''
#归一化
sum=0
for i in target_index[1]:
sum+=i
for i in range(len(target_index[1])):
target_index[1][i]=target_index[1][i]/sum
#查表计算
# print(target_index[0])
# print(target_index[1])
# print(pointer_table)
sum=0
for i in range(len(target_index[0])):
for j in pointer_table:
if target_index[0][i] ==j[3]:
sum+=target_index[1][i]*j[2]
break
for i in pointer_table:
if i[0]<=sum and sum < i[1]:
return sum,i[3]
class File_Processing:
def read_file(self,file):
'''
读文件,文件空返回0
:param file: txt or csv文件
:return: 文件内容
'''
# print(file.split("."))
l = file.split(".")
index = l[-1]
file_name=""
for i in range(len(l)-1):
file_name+=l[i]
# print(file_name,index)
re = []
if index == "txt":
with open(file, 'r') as f:
while True:
t = f.readline()
if t == "":
break
re.append(t[:-2])
if index.upper() == 'CSV':
# print(file)
with open(file, "r", encoding='gb18030') as f:
t = csv.reader(f)
# print(t)
# 建立空字典
for item in t:
# 忽略第一行
if t.line_num == 1:
continue
re.append(item)
if len(re)==0:
return False,False
else:
return file_name,re
def is_number(self,s):
try: # 如果能运行float(s)语句,返回True(字符串s是浮点数)
float(s)
return True
except ValueError: # ValueError为Python的一种标准异常,表示"传入无效的参数"
pass # 如果引发了ValueError这种异常,不做任何事情(pass:不做任何事情,一般用做占位语句)
try:
import unicodedata # 处理ASCii码的包
unicodedata.numeric(s) # 把一个表示数字的字符串转换为浮点数返回的函数
return True
except (TypeError, ValueError):
pass
return False
def read_various_type_table(self, file):
'''
读取csv文件
# Example:
lao = File_Processing()
# re = lao.read_various_type_table("xor_rce.txt")
# re = lao.read_various_type_table(r"C:\Users坂田银时Desktop风险评估软件需求分析与数据库设计相关文档V2.0V2.0CSV配置文件风险等级指标判别表RLV.csv")
re = lao.read_various_type_table(r"C:\Users坂田银时Desktop风险评估软件需求分析与数据库设计相关文档V2.0V2.0CSV配置文件二级风险因子两两判别表R2_U1.CSV")
print(re)
:param file: 文件名
:return: 列表
'''
file_name, re = self.read_file(file)
# print(file_name,re)
if file_name == False:
return False
first_risk = []
for i in re:
# print(i)
k=[]
for j in i[1:]:
if self.is_number(j):
k.append(eval(j))
else:
k.append(j)
first_risk.append(k)
return first_risk
if __name__ == '__main__':
# lao = NewProjectInfo()
# pointer_table = [
# [0, 0.2, 0.1, "低风险"],
# [0.2, 0.4, 0.3, "较低风险"],
# [0.4, 0.6, 0.5, "中等风险"],
# [0.6, 0.8, 0.7, "较高风险"],
# [0.8, 1, 0.9, "高风险"]
# ]
# target_index = [
# ['低风险', '较低风险', '中等风险', '较高风险', '高风险'],
# [6, 2, 1, 1, 0]
# ]
# risk_value, risk_classification = lao.calculate_waverage_of_risk(pointer_table, target_index)
# print("风险分类={}".format(risk_classification))
# print("风险值={}".format(risk_value))
# lao = File_Processing()
# # re = lao.read_various_type_table("xor_rce.txt")
# t1 = lao.read_various_type_table(r"C:\Users坂田银时Desktop风险评估软件需求分析与数据库设计相关文档V2.0V2.0CSV配置文件风险等级指标判别表RLV.csv")
# # r2 = lao.read_various_type_table(r"C:\Users坂田银时Desktop风险评估软件需求分析与数据库设计相关文档V2.0V2.0CSV配置文件二级风险因子两两判别表R2_U1.CSV")
# print(t1)
第三次
'''
@Time : 2020/11/21 20:42
@Author : laolao
@FileName: 7.py
'''
#-*- coding:utf-8 -*-
import csv
import json
import math
from math import sqrt
import numpy as np
U01 = "A101" #工程编号
U02 = "石家庄运河桥顶管隧道施工工程" #工程名称
U03 = "石家庄" #工程所在地
U04 = "铁道建设" #设计方
U05 = "铁道建设" #施工方
U06 = "铁道建设" #检测方
U07 = "铁道建设" #监理方
U08 = "2300" #隧道长度
U09 = 1#开挖顶管断面形式
U31 = "丙级" #设计方资质等级
U32 = "特级" #施工方资质等级
U33 = "甲级" #检测方资质等级
U34 = "甲级" #监理方资质等级
U11 = "5.6"#新建顶管埋深
U12 = '{"r":4.8}'#新建顶管尺寸 '{"a":3.0,"b":2.4}'
U13 ="软黏土"#新建工程土层性质
U4 = '{"U41":2,"U42":3,"U43":5}'#既有邻近地下柔性管线情况11
U5 = '{"U511":0,"U512":2.9,"U52":6,"U53":1,"U54":2.0}'#既有邻近地下刚性管线情况12
U6 = '{"U61":1,"U62":3.7,"U63":6}'#既有邻近邻近基础情况13
U7 = ""#特殊工程情况说明
# 以下为没有提供的参数
U21 =21 #土舱压力
U22 = 2
U23 = 2
class File_Processing:
'''
lao = File_Processing()
# re = lao.read_table_full(r"C:\Users坂田银时Desktop风险评估软件需求分析与数据库设计相关文档V2.0V2.0CSV配置文件风险等级指标判别表RLV.csv")
re = lao.read_table_nofirst_line_nofirst_column(r"C:\Users坂田银时Desktop风险评估软件需求分析与数据库设计相关文档V2.0V2.0CSV配置文件二级风险因子两两判别表R2_U1.CSV")
print(re)
'''
def read_file(self,file):
'''
读文件,文件空返回0
:param file: txt or csv文件
:return: 文件内容
'''
# print(file.split("."))
l = file.split(".")
index = l[-1]
file_name=""
for i in range(len(l)-1):
file_name+=l[i]
# print(file_name,index)
re = []
if index == "txt":
with open(file, 'r') as f:
while True:
t = f.readline()
if t == "":
break
re.append(t[:-2])
if index.upper() == 'CSV':
# print(file)
with open(file, "r", encoding='gb18030') as f:
t = csv.reader(f)
# print(t)
# 建立空字典
for item in t:
# 忽略第一行
# if t.line_num == 1:
# continue
re.append(item)
if len(re)==0:
return False,False
else:
return file_name,re
def is_number(self,s):
try: # 如果能运行float(s)语句,返回True(字符串s是浮点数)
float(s)
return True
except ValueError: # ValueError为Python的一种标准异常,表示"传入无效的参数"
pass # 如果引发了ValueError这种异常,不做任何事情(pass:不做任何事情,一般用做占位语句)
try:
import unicodedata # 处理ASCii码的包
unicodedata.numeric(s) # 把一个表示数字的字符串转换为浮点数返回的函数
return True
except (TypeError, ValueError):
pass
return False
def read_table_full(self, file):
'''
读取csv文件全部
:param file: 文件名
:return: 列表
'''
file_name, re = self.read_file(file)
# print(file_name,re)
if file_name == False:
return False
first_risk = []
for i in re:
# print(i)
k=[]
for j in i:
if self.is_number(j):
k.append(eval(j))
else:
k.append(j)
first_risk.append(k)
return first_risk
def read_table_nofirst_line_nofirst_column(self, file):
'''
读取csv文件
# Example:
:param file: 文件名
:return: 列表
'''
file_name, re = self.read_file(file)
# print(file_name,re)
if file_name == False:
return False
first_risk = []
for i in re[1:]:
# print(i)
k=[]
for j in i[1:]:
if self.is_number(j):
k.append(eval(j))
else:
k.append(j)
first_risk.append(k)
return first_risk
class NewProjectInfo:
'''
新建工程信息表
'''
def __init__(self):
'''
前端控件读取的输入输入这里进行修改
'''
# self.U01=
# self.U02=
# self.U03=
# self.U04=
# self.U05=
# self.U06=
# self.U07=
# self.U08=
# self.U09=
# self.U11=
# self.U12=
# self.U13=
# self.U31=
# self.U32=
# self.U33=
# self.U34=
# self.U4=
# self.U5=
# self.U6=
# self.U7=
pass
def calculate_matrix_A(self,matrix):
'''
计算该矩阵M的特征值λ_max和特征向量A
最大特征值对应的特征向量A,并进行归一化
Example:
lao = NewProjectInfo()
a = [
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]
]
b = lao.CalculateMatrix(a)
print(b)
:param matrix:第一行代表列
:return:C.R<0.1 调用返回答案,C.R>=0.1调用返回false
'''
RI = {1:0,2:0,3:0.52,4:0.89,5:1.12,6:1.24,7:1.36,8:1.41,9:1.46}
m= np.array(matrix)
eigenvalue,featurevector = np.linalg.eig(m)
r_max=0
A_id=0
for i in range(len(eigenvalue)):
if r_max < eigenvalue[i]:
r_max = eigenvalue[i]
A_id = i
n = len(matrix)
A = []
# print(r_max)
# print(eigenvalue)
for i in featurevector:
A.append(i[A_id])
# print(A)
CR = (r_max - n)*RI[n] / (n-1)
if CR < 0.1:
# 归一化
x=0
for i in A:
x+=i
A_uniformization = [ ]
for i in A:
A_uniformization.append(i/x)
return A_uniformization
else:
return False
def calculate_matrix_B(self, matrix_group_B,A_uniformization):
'''
Example:
lao = NewProjectInfo()
matrix_group_B = [
[0.33,0.33,0.33],
[0.33,0.33,0.33],
[0.25,0.25,0.25,0.25],
[0.25, 0.25, 0.25, 0.25],
[0.33,0.33,0.33]
]
a = [
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]
]
A = lao.calculate_matrix_A(a)
B = lao.calculate_matrix_B(matrix_group_B,A)
for i in B:
print(i)
:param matrix_group_B: 5组特征向量
:param A_uniformization: calculate_matrix_A计算出来的权重
:return:风险权重
'''
Risk_B=[]
index_a = 0
for Bi in matrix_group_B:
t=[]
for i in Bi:
t.append(i*A_uniformization[index_a])
index_a+=1
Risk_B.append(t)
return Risk_B
def calculate_waverage_of_risk(self,pointer_table,target_index):
'''
计算各个风险指标的加权平均值
输出概率值和风险类型
Example:
lao = NewProjectInfo()
pointer_table = [
[ 0, 0.2, 0.1, "低风险"],
[ 0.2, 0.4, 0.3, "较低风险"],
[ 0.4, 0.6, 0.5, "中等风险"],
[ 0.6, 0.8, 0.7, "较高风险"],
[ 0.8, 1, 0.9, "高风险"]
]
target_index = [
['低风险','较低风险','中等风险','较高风险','高风险'],
[ 6, 2, 1, 1, 0]
]
risk_value, risk_classification = lao.calculate_waverage_of_risk(pointer_table, target_index)
print("风险分类={}".format(risk_classification))
print("风险值={}".format(risk_value))
:param pointer_table: 对照表
:param target_index: 要计算的一行风险指标
:return: 概率值和风险类型
'''
#归一化
sum=0
for i in target_index[1]:
sum+=i
for i in range(len(target_index[1])):
target_index[1][i]=target_index[1][i]/sum
#查表计算
# print(target_index[0])
# print(target_index[1])
# print(pointer_table)
sum=0
for i in range(len(target_index[0])):
for j in pointer_table:
if target_index[0][i] ==j[3]:
sum+=target_index[1][i]*j[2]
break
for i in pointer_table:
if i[0]<=sum and sum < i[1]:
return sum,i[3]
class Read_Secondary_Risk_Factor_Table:
'''
读"二级风险因子发生概率隶属表"目录下的各种表
'''
dir_path = "C:\Users坂田银时Desktop风险评估软件需求分析与数据库设计相关文档V2.0V2.0CSV配置文件二级风险因子发生概率隶属度表"
lao = File_Processing()
def get_target_index_u11(self, file_name='RP2_U11.CSV'):
global U11
target_index_u11 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u11)
for i in range(1,lens):
# print( target_index_u11[i][0])
if target_index_u11[i][0]<= float(U11) and float(U11) <target_index_u11[i][1]:
return [target_index_u11[0][2:],target_index_u11[i][2:]]
return False
def get_target_index_u12(self,file_name='RP2_U12.CSV'):
global U12,U09
target_index_u12 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u12)
if U09 == 0:
area = json.loads(U12)['r']**2*math.pi
for i in range(1, lens//2):
if target_index_u12[i][0] <= area and area < target_index_u12[i][1]:
return [target_index_u12[0][3:], target_index_u12[i][3:]]
elif U09 ==1:
area = json.loads(U12)['a'] *json.loads(U12)['b']
for i in range(lens//2, lens):
if target_index_u12[i][0] <= area and area < target_index_u12[i][1]:
return [target_index_u12[0][3:], target_index_u12[i][3:]]
else:
return False
def get_target_index_u13(self,file_name='RP2_U13.CSV'):
global U13
target_index_u13 = self.lao.read_table_full(self.dir_path + "\" + file_name)
return [target_index_u13[0][2:],target_index_u13[1][2:]]
def get_target_index_u21(self, file_name='RP2_U21.CSV'):
global U21
target_index_u21 = self.lao.read_table_full(self.dir_path + "\" + file_name)
return [target_index_u21[0][2:],target_index_u21[1][2:]]
def get_target_index_u22(self, file_name='RP2_U22.CSV'):
global U22
target_index_u22 = self.lao.read_table_full(self.dir_path + "\" + file_name)
return [target_index_u22[0][2:], target_index_u22[1][2:]]
def get_target_index_u23(self,file_name='RP2_U23.CSV'):
target_index_u23 = self.lao.read_table_full(self.dir_path + "\" + file_name)
return [target_index_u23[0][2:], target_index_u23[1][2:]]
def get_target_index_u31(self,file_name="RP2_U31.CSV"):
global U31
target_index_u31 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u31)
for l in range(lens):
if U31==target_index_u31[l][0]:
return [target_index_u31[0][1:],target_index_u31[l][1:]]
return False
def get_target_index_u32(self,file_name="RP2_U32.CSV"):
global U32
target_index_u32 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u32)
for l in range(lens):
if U32 == target_index_u32[l][0]:
return [target_index_u32[0][1:],target_index_u32[l][1:]]
return False
def get_target_index_u33(self, file_name="RP2_U33.CSV"):
global U33
target_index_u33 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u33)
for l in range(lens):
if U33 == target_index_u33[l][0]:
return [target_index_u33[0][1:], target_index_u33[l][1:]]
return False
def get_target_index_u34(self,file_name="RP2_U34.CSV"):
global U34
target_index_u34 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u34)
for l in range(lens):
if U34 == target_index_u34[l][0]:
return [target_index_u34[0][1:],target_index_u34[l][1:]]
return False
def get_target_index_u41(self,file_name="RP2_U41.CSV"):
global U4
pass
def get_target_index_u42(self,file_name="RP2_U41.CSV"):
global U4
pass
def get_target_index_u43(self,file_name="RP2_U41.CSV"):
global U4
pass
def get_target_index_u51(self, file_name="RP2_U51.CSV"):
global U5
target_index_u51 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u51)
# print(json.loads(U5))
U51 = sqrt(json.loads(U5)['U511']**2+json.loads(U5)['U512']**2)
# print(U51)
for i in range(1, lens ):
if target_index_u51[i][0] <= U51 and U51 < target_index_u51[i][1]:
return [target_index_u51[0][2:], target_index_u51[i][2:]]
return False
def get_target_index_u52(self, file_name="RP2_U52.CSV"):
global U5
target_index_u52 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u52)
# print(json.loads(U5)['U52'])
for i in range(1, lens):
if target_index_u52[i][0] == json.loads(U5)['U52']:
return [target_index_u52[0][2:], target_index_u52[i][2:]]
return False
def get_target_index_u53(self, file_name="RP2_U53.CSV"):
global U5
target_index_u53 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u53)
# print(json.loads(U5)['U53'])
for i in range(1, lens):
if target_index_u53[i][0] == json.loads(U5)['U53']:
return [target_index_u53[0][2:], target_index_u53[i][2:]]
return False
def get_target_index_u54(self, file_name="RP2_U54.CSV"):
global U5
target_index_u54 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u54)
# print(json.loads(U5)['U54'])
for i in range(1, lens):
if target_index_u54[i][0] == json.loads(U5)['U54']:
return [target_index_u54[0][2:], target_index_u54[i][2:]]
return False
def get_target_index_u61(self, file_name="RP2_U61.CSV"):
global U6
target_index_u61 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u61)
for i in range(1, lens ):
if target_index_u61[i][0] == json.loads(U6)['U61']:
return [target_index_u61[0][2:], target_index_u61[i][2:]]
return False
def get_target_index_u62(self, file_name="RP2_U62.CSV"):
global U6
target_index_u62 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u62)
for i in range(1, lens ):
if target_index_u62[i][0]<= json.loads(U6)['U62'] and json.loads(U6)['U62'] < target_index_u62[i][1]:
return [target_index_u62[0][2:], target_index_u62[i][2:]]
return False
def get_target_index_u63(self, file_name="RP2_U62.CSV"):
pass
if __name__ == '__main__':
laolao = Read_Secondary_Risk_Factor_Table()
# print(U11, laolao.get_target_index_u11())
# print(U12, laolao.get_target_index_u12())
# print(U13, laolao.get_target_index_u13())
# print(U34, laolao.get_target_index_u34())
# print(U31, laolao.get_target_index_u31())
# print(U32, laolao.get_target_index_u32())
# print(U5, laolao.get_target_index_u51())
# print(U5, laolao.get_target_index_u52())
# print(U5, laolao.get_target_index_u53())
# print(U5, laolao.get_target_index_u54())
# print(U6, laolao.get_target_index_u61())
# print(U6, laolao.get_target_index_u62())
# print(U21, laolao.get_target_index_u21())
print(U22, laolao.get_target_index_u22())
print(U23, laolao.get_target_index_u23())
第四次
'''
@Time : 2020/11/21 20:42
@Author : laolao
@FileName: 7.py
'''
#-*- coding:utf-8 -*-
import csv
import json
import math
from math import sqrt
import numpy as np
U01 = "A101" #工程编号
U02 = "石家庄运河桥顶管隧道施工工程" #工程名称
U03 = "石家庄" #工程所在地
U04 = "铁道建设" #设计方
U05 = "铁道建设" #施工方
U06 = "铁道建设" #检测方
U07 = "铁道建设" #监理方
U08 = "2300" #隧道长度
U09 = 0#开挖顶管断面形式
U31 = "丙级" #设计方资质等级
U32 = "特级" #施工方资质等级
U33 = "甲级" #检测方资质等级
U34 = "甲级" #监理方资质等级
U11 = "5.6"#新建顶管埋深
U12 = '{"a":3.0,"b":2.4}'#新建顶管尺寸 '{"r":4.8}'
U13 ="软黏土"#新建工程土层性质
U4 = '{"U41":2,"U42":3,"U43":5}'#既有邻近地下柔性管线情况11
U5 = '{"U511":0,"U512":2.9,"U52":6,"U53":1,"U54":2.0}'#既有邻近地下刚性管线情况12
U6 = '{"U61":1,"U62":3.7,"U63":6}'#既有邻近邻近基础情况13
U7 = ""#特殊工程情况说明
# 以下为没有提供的参数
U21 =21 #土舱压力
U22 = 2
U23 = 2
class File_Processing:
'''
lao = File_Processing()
# re = lao.read_table_full(r"C:\Users坂田银时Desktop风险评估软件需求分析与数据库设计相关文档V2.0V2.0CSV配置文件风险等级指标判别表RLV.csv")
re = lao.read_table_nofirst_line_nofirst_column(r"C:\Users坂田银时Desktop风险评估软件需求分析与数据库设计相关文档V2.0V2.0CSV配置文件二级风险因子两两判别表R2_U1.CSV")
print(re)
'''
def read_file(self,file):
'''
读文件,文件空返回0
:param file: txt or csv文件
:return: 文件内容
'''
# print(file.split("."))
l = file.split(".")
index = l[-1]
file_name=""
for i in range(len(l)-1):
file_name+=l[i]
# print(file_name,index)
re = []
if index == "txt":
with open(file, 'r') as f:
while True:
t = f.readline()
if t == "":
break
re.append(t[:-2])
if index.upper() == 'CSV':
# print(file)
with open(file, "r", encoding='gb18030') as f:
t = csv.reader(f)
# print(t)
# 建立空字典
for item in t:
# 忽略第一行
# if t.line_num == 1:
# continue
re.append(item)
if len(re)==0:
return False,False
else:
return file_name,re
def is_number(self,s):
try: # 如果能运行float(s)语句,返回True(字符串s是浮点数)
float(s)
return True
except ValueError: # ValueError为Python的一种标准异常,表示"传入无效的参数"
pass # 如果引发了ValueError这种异常,不做任何事情(pass:不做任何事情,一般用做占位语句)
try:
import unicodedata # 处理ASCii码的包
unicodedata.numeric(s) # 把一个表示数字的字符串转换为浮点数返回的函数
return True
except (TypeError, ValueError):
pass
return False
def read_table_full(self, file):
'''
读取csv文件全部
:param file: 文件名
:return: 列表
'''
file_name, re = self.read_file(file)
# print(file_name,re)
if file_name == False:
return False
first_risk = []
for i in re:
# print(i)
k=[]
for j in i:
if self.is_number(j):
k.append(eval(j))
else:
k.append(j)
first_risk.append(k)
return first_risk
def read_table_nofirst_line_nofirst_column(self, file):
'''
读取csv文件
# Example:
:param file: 文件名
:return: 列表
'''
file_name, re = self.read_file(file)
# print(file_name,re)
if file_name == False:
return False
first_risk = []
for i in re[1:]:
# print(i)
k=[]
for j in i[1:]:
if self.is_number(j):
k.append(eval(j))
else:
k.append(j)
first_risk.append(k)
return first_risk
class NewProjectInfo:
'''
新建工程信息表
'''
def __init__(self):
'''
前端控件读取的输入输入这里进行修改
'''
# self.U01=
# self.U02=
# self.U03=
# self.U04=
# self.U05=
# self.U06=
# self.U07=
# self.U08=
# self.U09=
# self.U11=
# self.U12=
# self.U13=
# self.U31=
# self.U32=
# self.U33=
# self.U34=
# self.U4=
# self.U5=
# self.U6=
# self.U7=
pass
def calculate_matrix_A(self,matrix):
'''
计算该矩阵M的特征值λ_max和特征向量A
最大特征值对应的特征向量A,并进行归一化
Example:
lao = NewProjectInfo()
a = [
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]
]
b = lao.CalculateMatrix(a)
print(b)
:param matrix:第一行代表列
:return:C.R<0.1 调用返回答案,C.R>=0.1调用返回false
'''
RI = {1:0,2:0,3:0.52,4:0.89,5:1.12,6:1.24,7:1.36,8:1.41,9:1.46}
m= np.array(matrix)
eigenvalue,featurevector = np.linalg.eig(m)
r_max=0
A_id=0
for i in range(len(eigenvalue)):
if r_max < eigenvalue[i]:
r_max = eigenvalue[i]
A_id = i
n = len(matrix)
A = []
# print(r_max)
# print(eigenvalue)
for i in featurevector:
A.append(i[A_id])
# print(A)
CR = (r_max - n)*RI[n] / (n-1)
if CR < 0.1:
# 归一化
x=0
for i in A:
x+=i
A_uniformization = [ ]
for i in A:
A_uniformization.append(i/x)
return A_uniformization
else:
return False
def calculate_matrix_B(self, matrix_group_B,A_uniformization):
'''
Example:
lao = NewProjectInfo()
matrix_group_B = [
[0.33,0.33,0.33],
[0.33,0.33,0.33],
[0.25,0.25,0.25,0.25],
[0.25, 0.25, 0.25, 0.25],
[0.33,0.33,0.33]
]
a = [
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]
]
A = lao.calculate_matrix_A(a)
B = lao.calculate_matrix_B(matrix_group_B,A)
for i in B:
print(i)
:param matrix_group_B: 5组特征向量
:param A_uniformization: calculate_matrix_A计算出来的权重
:return:风险权重
'''
Risk_B=[]
index_a = 0
for Bi in matrix_group_B:
t=[]
for i in Bi:
t.append(i*A_uniformization[index_a])
index_a+=1
Risk_B.append(t)
return Risk_B
def calculate_waverage_of_risk(self,pointer_table,target_index):
'''
计算各个风险指标的加权平均值
输出概率值和风险类型
Example:
lao = NewProjectInfo()
pointer_table = [
[ 0, 0.2, 0.1, "低风险"],
[ 0.2, 0.4, 0.3, "较低风险"],
[ 0.4, 0.6, 0.5, "中等风险"],
[ 0.6, 0.8, 0.7, "较高风险"],
[ 0.8, 1, 0.9, "高风险"]
]
target_index = [
['低风险','较低风险','中等风险','较高风险','高风险'],
[ 6, 2, 1, 1, 0]
]
risk_value, risk_classification = lao.calculate_waverage_of_risk(pointer_table, target_index)
print("风险分类={}".format(risk_classification))
print("风险值={}".format(risk_value))
:param pointer_table: 对照表
:param target_index: 要计算的一行风险指标
:return: 概率值和风险类型
'''
#归一化
sum=0
for i in target_index[1]:
sum+=i
for i in range(len(target_index[1])):
target_index[1][i]=target_index[1][i]/sum
#查表计算
# print(target_index[0])
# print(target_index[1])
# print(pointer_table)
sum=0
for i in range(len(target_index[0])):
for j in pointer_table:
if target_index[0][i] ==j[3]:
sum+=target_index[1][i]*j[2]
break
for i in pointer_table:
if i[0]<=sum and sum < i[1]:
return sum,i[3]
class Read_Secondary_Risk_Factor_Table:
'''
读"二级风险因子发生概率隶属表"目录下的各种表
'''
dir_path = "C:\Users坂田银时Desktop风险评估软件需求分析与数据库设计相关文档V2.0V2.0CSV配置文件二级风险因子发生概率隶属度表"
lao = File_Processing()
def get_target_index_u11(self, file_name='RP2_U11.CSV'):
global U11
target_index_u11 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u11)
for i in range(1,lens):
# print( target_index_u11[i][0])
if target_index_u11[i][0]<= float(U11) and float(U11) <target_index_u11[i][1]:
return [target_index_u11[0][2:],target_index_u11[i][2:]]
return False
def get_target_index_u12(self,file_name='RP2_U12.CSV'):
global U12,U09
target_index_u12 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u12)
if U09 == 1:
for i in range(1, lens//2):
if target_index_u12[i][0] <= json.loads(U12)['r'] and json.loads(U12)['r'] < target_index_u12[i][1]:
return [target_index_u12[0][3:], target_index_u12[i][3:]]
elif U09 ==0:
for i in range(lens//2, lens):
if target_index_u12[i][0] <= json.loads(U12)['b'] and json.loads(U12)['b'] < target_index_u12[i][1]:
return [target_index_u12[0][3:], target_index_u12[i][3:]]
else:
return False
def get_target_index_u13(self,file_name='RP2_U13.CSV'):
global U13
target_index_u13 = self.lao.read_table_full(self.dir_path + "\" + file_name)
return [target_index_u13[0][2:],target_index_u13[1][2:]]
def get_target_index_u21(self, file_name='RP2_U21.CSV'):
global U21
target_index_u21 = self.lao.read_table_full(self.dir_path + "\" + file_name)
return [target_index_u21[0][2:],target_index_u21[1][2:]]
def get_target_index_u22(self, file_name='RP2_U22.CSV'):
global U22
target_index_u22 = self.lao.read_table_full(self.dir_path + "\" + file_name)
return [target_index_u22[0][2:], target_index_u22[1][2:]]
def get_target_index_u23(self,file_name='RP2_U23.CSV'):
target_index_u23 = self.lao.read_table_full(self.dir_path + "\" + file_name)
return [target_index_u23[0][2:], target_index_u23[1][2:]]
def get_target_index_u31(self,file_name="RP2_U31.CSV"):
global U31
target_index_u31 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u31)
for l in range(lens):
if U31==target_index_u31[l][0]:
return [target_index_u31[0][1:],target_index_u31[l][1:]]
return False
def get_target_index_u32(self,file_name="RP2_U32.CSV"):
global U32
target_index_u32 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u32)
for l in range(lens):
if U32 == target_index_u32[l][0]:
return [target_index_u32[0][1:],target_index_u32[l][1:]]
return False
def get_target_index_u33(self, file_name="RP2_U33.CSV"):
global U33
target_index_u33 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u33)
for l in range(lens):
if U33 == target_index_u33[l][0]:
return [target_index_u33[0][1:], target_index_u33[l][1:]]
return False
def get_target_index_u34(self,file_name="RP2_U34.CSV"):
global U34
target_index_u34 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u34)
for l in range(lens):
if U34 == target_index_u34[l][0]:
return [target_index_u34[0][1:],target_index_u34[l][1:]]
return False
def get_target_index_u41(self,file_name="RP2_U41.CSV"):
global U4
pass
def get_target_index_u42(self,file_name="RP2_U41.CSV"):
global U4
pass
def get_target_index_u43(self,file_name="RP2_U41.CSV"):
global U4
pass
def get_target_index_u51(self, file_name="RP2_U51.CSV"):
global U5
target_index_u51 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u51)
# print(json.loads(U5))
U51 = sqrt(json.loads(U5)['U511']**2+json.loads(U5)['U512']**2)
# print(U51)
for i in range(1, lens ):
if target_index_u51[i][0] <= U51 and U51 < target_index_u51[i][1]:
return [target_index_u51[0][2:], target_index_u51[i][2:]]
return False
def get_target_index_u52(self, file_name="RP2_U52.CSV"):
global U5
target_index_u52 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u52)
# print(json.loads(U5)['U52'])
for i in range(1, lens):
if target_index_u52[i][0] == json.loads(U5)['U52']:
return [target_index_u52[0][2:], target_index_u52[i][2:]]
return False
def get_target_index_u53(self, file_name="RP2_U53.CSV"):
global U5
target_index_u53 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u53)
# print(json.loads(U5)['U53'])
for i in range(1, lens):
if target_index_u53[i][0] == json.loads(U5)['U53']:
return [target_index_u53[0][2:], target_index_u53[i][2:]]
return False
def get_target_index_u54(self, file_name="RP2_U54.CSV"):
global U5
target_index_u54 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u54)
# print(json.loads(U5)['U54'])
for i in range(1, lens):
if target_index_u54[i][0] == json.loads(U5)['U54']:
return [target_index_u54[0][2:], target_index_u54[i][2:]]
return False
def get_target_index_u61(self, file_name="RP2_U61.CSV"):
global U6
target_index_u61 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u61)
for i in range(1, lens ):
if target_index_u61[i][0] == json.loads(U6)['U61']:
return [target_index_u61[0][2:], target_index_u61[i][2:]]
return False
def get_target_index_u62(self, file_name="RP2_U62.CSV"):
global U6
target_index_u62 = self.lao.read_table_full(self.dir_path + "\" + file_name)
lens = len(target_index_u62)
for i in range(1, lens ):
if target_index_u62[i][0]<= json.loads(U6)['U62'] and json.loads(U6)['U62'] < target_index_u62[i][1]:
return [target_index_u62[0][2:], target_index_u62[i][2:]]
return False
def get_target_index_u63(self, file_name="RP2_U62.CSV"):
pass
if __name__ == '__main__':
laolao = Read_Secondary_Risk_Factor_Table()
# print(U11, laolao.get_target_index_u11())
print(U12, laolao.get_target_index_u12())
# print(U13, laolao.get_target_index_u13())
# print(U34, laolao.get_target_index_u34())
# print(U31, laolao.get_target_index_u31())
# print(U32, laolao.get_target_index_u32())
# print(U5, laolao.get_target_index_u51())
# print(U5, laolao.get_target_index_u52())
# print(U5, laolao.get_target_index_u53())
# print(U5, laolao.get_target_index_u54())
# print(U6, laolao.get_target_index_u61())
# print(U6, laolao.get_target_index_u62())
# print(U21, laolao.get_target_index_u21())
# print(U22, laolao.get_target_index_u22())
# print(U23, laolao.get_target_index_u23())