zoukankan      html  css  js  c++  java
  • 项目日志

    第一次

    '''
    @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())
  • 相关阅读:
    数据结构(四十)平衡二叉树(AVL树)
    数据结构(三十九)二叉排序树
    数据结构(三十八)静态查找表(顺序查找、二分查找、插值查找、斐波那契查找、线性索引查找)
    数据结构(三十七)查找的基本概念
    数据结构(三十六)关键路径
    数据结构(三十五)拓扑排序
    数据结构(三十四)最短路径(Dijkstra、Floyd)
    数据结构(三十三)最小生成树(Prim、Kruskal)
    字符串匹配算法之KMP
    最长公共子序列(Longest common subsequence)
  • 原文地址:https://www.cnblogs.com/chrysanthemum/p/14017778.html
Copyright © 2011-2022 走看看