Best Python code snippet using tempest_python
zabbixotrs.py
Source:zabbixotrs.py
1#!/usr/bin/python2# -*- coding: utf-8 -*-3"""4Created on Mon Out 22 10:57:32 20185@author: Heberson Aguiar <hebersonaguiar@gmail.com>6"""7from zabbix_api import ZabbixAPI8from pyotrs import Client, Article, Ticket, DynamicField9from mysql.connector import Error10import mysql.connector11import time12import sys13reload(sys)14sys.setdefaultencoding('utf8')15ZBX_SERVER = "http://x.x.x.x/zabbix"16ZBX_USER = sys.argv[1]17ZBX_PASS = sys.argv[2] 18OTRS_SERVER = "http://x.x.x.x"19OTRS_USER = sys.argv[3]20OTRS_PASS = sys.argv[4]21OTRS_DB_NAME = "otrs"22OTRS_DB_USER = sys.argv[5]23OTRS_DB_PASS = sys.argv[6]24OTRS_DB_SERVER = "x.x.x.x"25QUEUE = "9 - Gestão de Liberação::Infraestrutura"26STATE = "Registrada"27PRIORITY = "3 normal"28CUSTOMERUSER = "heberson.aguiar"29SERVICE = "Problema::2 - Sustentação::2.2 - Itens de Hardware::2.2.2 - Servidores virtuais::2.2.2.1 - Investigar"30SLA = "2 - Sustentação::0::NA"31TYPE = "Problema"32def getTriggers(ZBX_SERVER, ZBX_USER, ZBX_PASS):33 zapi = ZabbixAPI(server=ZBX_SERVER)34 zapi.login(ZBX_USER, ZBX_PASS)35 triggers = zapi.trigger.get ({36 "output": ["description", "lastchange", "triggerid", "priority"],37 "selectHosts": ["hostid", "host"],38 "selectLastEvent": ["eventid", "acknowledged", "objectid", "clock", "ns"],39 "sortfield" : "lastchange",40 "monitored": "true",41 "only_true": "true",42 "maintenance": "false",43 "expandDescription": True,44 "filter":{"value":1}45 })46 triggerid = []47 for y in triggers:48 nome_host = y["hosts"][0]["host"]49 severity = int(y["priority"])50 triggerid.append(y["triggerid"])51 52 idade = time.time() - float(y["lastchange"])53 pegadia = "{0.tm_yday}".format(time.gmtime(idade))54 dia = int(pegadia) - 155 duracao = "dias {0.tm_hour} horas {0.tm_min} minutos".format(time.gmtime(idade))56 ultima_alteracao = time.strftime("%d/%m/%Y %H:%M:%S", time.localtime(float(y["lastchange"])))57 58 return triggerid59def getHostGroup(ZBX_SERVER, ZBX_USER, ZBX_PASS, HOST):60 zapi = ZabbixAPI(server=ZBX_SERVER)61 zapi.login(ZBX_USER, ZBX_PASS)62 hostinfo = zapi.host.get({"filter":{"host":HOST},"output":"hostid", "selectGroups": "extend", "selectParentTemplates": ["templateid","name"]})[0]63 host_group_list = []64 for x in hostinfo["groups"]:65 host_group_list.append(x["name"])66 hostgroup = str(host_group_list)67 68 return hostgroup69def getTriggersDB(OTRS_DB_NAME, OTRS_DB_USER, OTRS_DB_PASS, OTRS_DB_SERVER):70 connection = mysql.connector.connect(host=OTRS_DB_SERVER,71 database=OTRS_DB_NAME,72 user=OTRS_DB_USER,73 password=OTRS_DB_PASS)74 query = "SELECT \75 TB2.value_text AS triggerid \76 FROM dynamic_field TB1 \77 INNER JOIN dynamic_field_value TB2 ON TB2.field_id = TB1.id \78 INNER JOIN ticket TB3 ON TB3.id = TB2.object_id \79 WHERE TB1.name = 'TriggerID' AND TB1.valid_id = 1 AND TB3.ticket_state_id = 12 AND TB2.value_text;"80 rows = []81 cursor = connection.cursor()82 cursor.execute(query)83 result = cursor.fetchall()84 for row in result:85 rows.append(row[0])86 return rows87def getTriggersAndTicketDB(OTRS_DB_NAME, OTRS_DB_USER, OTRS_DB_PASS, OTRS_DB_SERVER):88 connection = mysql.connector.connect(host=OTRS_DB_SERVER,89 database=OTRS_DB_NAME,90 user=OTRS_DB_USER,91 password=OTRS_DB_PASS)92 query = "SELECT \93 TB2.value_text AS triggerid, \94 TB3.id AS ticketid \95 FROM dynamic_field TB1 \96 INNER JOIN dynamic_field_value TB2 ON TB2.field_id = TB1.id \97 INNER JOIN ticket TB3 ON TB3.id = TB2.object_id \98 WHERE TB1.name = 'TriggerID' AND TB1.valid_id = 1 AND TB3.ticket_state_id = 12 AND TB2.value_text;"99 rows = []100 cursor = connection.cursor()101 cursor.execute(query)102 result = cursor.fetchall()103 for row in result:104 rows.append(row[0])105 return rows106def buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE ,SLA, TYPE, HOSTGROUP):107 client = Client(OTRS_SERVER, OTRS_USER, OTRS_PASS)108 client.session_create()109 new_ticket = Ticket.create_basic(Title=""+ DESCRIPTION +"",110 Queue="" + QUEUE + "",111 State=u"" + STATE + "",112 Priority=u"" + PRIORITY + "",113 SLA="" + SLA + "",114 Type="" + TYPE + "",115 Service="" + SERVICE + "",116 CustomerUser="" + CUSTOMERUSER + "")117 first_article = Article({"Subject": "Server " + HOST + " Down" , "Body": "Host: " + HOST + " Trigger ID: " + TRIGGERID +" Severity: " + SEVERITY + " HostGroup: " + HOSTGROUP + " Descricao: " + DESCRIPTION })118 dynamic_field = DynamicField("TriggerID", value="" + TRIGGERID + "")119 client.ticket_create(new_ticket, first_article, None ,dynamic_fields=[dynamic_field])120 return "Ticket Build"121def getHostGroupTrigger(HOST, TRIGGERID, SEVERITY, HOSTGROUP, DESCRIPTION):122 list_groups = getHostGroup(ZBX_SERVER, ZBX_USER, ZBX_PASS, HOST)123 if 'ICS/CORREIO' in str(list_groups) or 'SS/MAIL' in str(list_groups) or 'SS/MAIL/SMTP' in str(list_groups):124 SERVICE = "Problema::2 - Sustentação::2.1- Itens organizacionais::2.1.2 - Caixas postais de correio eletrônico::2.1.2.1 - Investigar"125 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)126 elif 'SS/AUTHENTICATION/AD' in str(list_groups):127 SERVICE = "Problema::2 - Sustentação::2.1- Itens organizacionais::2.1.3 - DomÃnios (LDAP)::2.1.3.1 - Investigar"128 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)129 elif 'Virtualização' in str(list_groups) or 'ICS/SRV-FISICOS' in str(list_groups) or 'Virtualizacao::Vmware' in str(list_groups) or 'CLOUD/HYPERVISOR/VMWARE' in str(list_groups) or 'ICS/VIRTUALIZACAO' in str(list_groups) or 'CLOUD/BAREMETAL' in str(list_groups):130 SERVICE = "Problema::2 - Sustentação::2.2 - Itens de Hardware::2.2.1 - Servidores fÃsicos::2.2.1.1 - Investigar"131 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)132 elif 'NETWORKS/ROUTER' in str(list_groups) or 'NETWORKS/ROUTER/EXTERNAL' in str(list_groups) or 'ICS/ROTEADORES' in str(list_groups):133 SERVICE = "Problema::2 - Sustentação::2.2 - Itens de Hardware::2.2.10 - Roteadores::2.2.10.1 - Investigar"134 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)135 elif 'ICS/LINKS-INTERNET' in str(list_groups) or 'URL/SSL' in str(list_groups) or 'URL/INTERNAL' in str(list_groups) or 'URL/EXTERNAL' in str(list_groups):136 SERVICE = "Problema::2 - Sustentação::2.2 - Itens de Hardware::2.2.11 - Links com a Internet::2.2.11.1 - Investigar"137 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)138 elif 'SECURITY' in str(list_groups) or 'ICS/FIREWALL' in str(list_groups):139 SERVICE = "Problema::2 - Sustentação::2.2 - Itens de Hardware::2.2.13 - Sistemas ou Hardwares de Segurança da Informação::2.2.13.1 - Investigar"140 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)141 elif 'ICS/ATIVOS-WIFI' in str(list_groups) or 'NETWORKS/ACCESS-POINT' in str(list_groups):142 SERVICE = "Problema::2 - Sustentação::2.2 - Itens de Hardware::2.2.14 - Ativos ou Passivos de rede e WiFi::2.2.14.1 - Investigar"143 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)144 elif 'Voip' in str(list_groups):145 SERVICE = "Problema::2 - Sustentação::2.2 - Itens de Hardware::2.2.15 - Telefonia IP (apenas hardware)::2.2.15.1 - Investigar"146 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)147 elif 'ICS/SRV-VIRTUAIS' in str(list_groups) or 'CLOUD/VMS' in str(list_groups) or 'Maquinas Virtuais Srv085' in str(list_groups) or 'SO/LINUX' in str(list_groups) or 'SO/WINDOWS' in str(list_groups) or 'Windows servers' in str(list_groups):148 SERVICE = "Problema::2 - Sustentação::2.2 - Itens de Hardware::2.2.2 - Servidores virtuais::2.2.2.1 - Investigar"149 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)150 elif 'Storage' in str(list_groups) or 'ICS/STORAGES' in str(list_groups) or 'CLOUD/STORAGE' in str(list_groups):151 SERVICE = "Problema::2 - Sustentação::2.2 - Itens de Hardware::2.2.6 - Storages corporativos::2.2.6.1 - Investigar"152 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)153 elif 'CLOUD/BACKUP' in str(list_groups):154 SERVICE = "Problema::2 - Sustentação::2.2 - Itens de Hardware::2.2.7 - Sistema de backup::2.2.7.1 - Investigar"155 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)156 elif 'Switches' in str(list_groups) or 'NETWORKS/SWITCH/ACCESS' in str(list_groups) or 'NETWORKS/SWITCH/CORE' in str(list_groups) or 'NETWORKS/SWITCH/DISTRIBUTION' in str(list_groups) or 'ICS/GERENCIA-INFRA' in str(list_groups) or 'ICS/GERENCIA-SERVICOS' in str(list_groups) or 'ICS/SWITCHES' in str(list_groups) or 'Newave' in str(list_groups):157 SERVICE = "Problema::2 - Sustentação::2.2 - Itens de Hardware::2.2.8 - Switches::2.2.8.1 - Investigar"158 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)159 elif 'DATABASES/MSSQL' in str(list_groups) or 'DATABASES/MYSQL' in str(list_groups) or 'ICS/SGBD' in str(list_groups) or 'DATABASES' in str(list_groups) or 'DATABASES/SQLSERVER' in str(list_groups):160 SERVICE = "Problema::2 - Sustentação::2.3 - Itens de Software::2.3.1 - Gerenciador de banco de dados::2.3.1.1 - Investigar"161 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)162 elif 'ICS/CONTROLE-COD-MALICIOSOS' in str(list_groups):163 SERVICE = "Problema::2 - Sustentação::2.3 - Itens de Software::2.3.13 - Sistema centralizado de controle de código malicioso::2.3.13.1 - Investigar"164 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)165 elif 'SS/APPLICATION/APACHE' in str(list_groups) or 'SS/APPLICATION/HTTP' in str(list_groups) or 'SS/FTP' in str(list_groups) or 'Servidor de Arquivos' in str(list_groups) or 'ICS/SRV-SITES' in str(list_groups):166 SERVICE = "Problema::2 - Sustentação::2.3 - Itens de Software::2.3.2 - Servidor WEB (IIS, Apache, outros)::2.3.2.1 - Investigar"167 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)168 elif 'ZBX/MONITOR' in str(list_groups) or 'ZBX/SERVER' in str(list_groups) or 'ICS/MONITORAMENTO' in str(list_groups):169 SERVICE = "Problema::2 - Sustentação::2.3 - Itens de Software::2.3.6 - Sistema centralizado de monitoramento de infraestrutura de TI::2.3.6.1 - Investigar"170 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)171 elif 'ICS/SRV-SISTEMAS' in str(list_groups) or 'ICS/SISTEMAS' in str(list_groups) or 'Sistema' in str(list_groups) or 'SRV204::Websites' in str(list_groups) or 'SRV209::Websites' in str(list_groups) or 'SEI - PROD' in str(list_groups) or 'QlikView' in str(list_groups):172 SERVICE = "Problema::2 - Sustentação::2.4 - Serviços de TI Disponibilizados::2.4.1 - Sistemas aplicativos::2.4.1.1 - Investigar"173 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)174 elif 'ICS/SITES' in str(list_groups) or 'Websites' in str(list_groups) or 'Portal Homologacao' in str(list_groups) or 'Websites::Produção' in str(list_groups) or 'Portal Producao' in str(list_groups):175 SERVICE = "Problema::2 - Sustentação::2.4 - Serviços de TI Disponibilizados::2.4.2 - Sites WEB (Internet, intranet e extranets)::2.4.2.1 - Investigar"176 buildTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, HOST, TRIGGERID, SEVERITY, DESCRIPTION, QUEUE, STATE, PRIORITY, CUSTOMERUSER, SERVICE, SLA, TYPE, HOSTGROUP)177 else:178 print "NENHUM GRUPO ENCONTRADO"179def closeTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, ZBX_SERVER, ZBX_USER, ZBX_PASS):180 181 zapi = ZabbixAPI(server=ZBX_SERVER)182 zapi.login(ZBX_USER, ZBX_PASS)183 client = Client(OTRS_SERVER, OTRS_USER, OTRS_PASS)184 client.session_create()185 connection = mysql.connector.connect(host=OTRS_DB_SERVER,186 database=OTRS_DB_NAME,187 user=OTRS_DB_USER,188 password=OTRS_DB_PASS)189 query = "SELECT \190 TB2.value_text AS triggerid, \191 TB3.id AS ticketid \192 FROM dynamic_field TB1 \193 INNER JOIN dynamic_field_value TB2 ON TB2.field_id = TB1.id \194 INNER JOIN ticket TB3 ON TB3.id = TB2.object_id \195 WHERE TB1.name = 'TriggerID' AND TB1.valid_id = 1 AND TB3.ticket_state_id = 12 AND TB2.value_text;"196 cursor = connection.cursor()197 cursor.execute(query)198 result = cursor.fetchall()199 for row in result:200 TRIGGERID = row[0]201 TICKETID = str(row[1])202 TICKETINT = int(row[1])203 triggers = zapi.trigger.get ({204 "output": ["description", "lastchange", "triggerid", "priority", "status", "state"],205 "selectHosts": ["hostid", "host"],206 "selectLastEvent": ["eventid", "acknowledged", "objectid", "clock", "ns", "state"],207 "sortfield" : "priority",208 "sortorder": "DESC",209 "selectDependencies": True,210 "monitored": "true",211 "only_true": "true",212 "maintenance": "false",213 "expandDescription": True,214 "skipDependent": "1",215 "filter":{216 "value":0,217 "triggerid": ""+ TRIGGERID +""}218 })219 for x in triggers:220 HOST = x["hosts"][0]["host"]221 severity = int(x["priority"])222 status = x["status"]223 triggerid = x["triggerid"]224 state = x["state"]225 if TRIGGERID == 0 and TICKETINT == 0:226 print "Nenhum chamado para ser fechado"227 else:228 # print "Chamado com Trigger ID: " + TRIGGERID + " Ticket ID: " + TICKETID + " Sera Fechado"229 client = Client(OTRS_SERVER, OTRS_USER, OTRS_PASS)230 client.session_create()231 article = Article({"Subject": "Chamado Fechado" , "Body": "Problema com Servidor "+ HOST +" e Trigger ID: "+ TRIGGERID +" resolvido!"})232 client.ticket_update(TICKETINT, article, attachments=None, dynamic_fields=None, State=u"Concluido")233def createTicket(ZBX_SERVER, ZBX_USER, ZBX_PASS):234 triggerszabbix = getTriggers(ZBX_SERVER, ZBX_USER, ZBX_PASS)235 triggersotrs = getTriggersDB(OTRS_DB_NAME, OTRS_DB_USER, OTRS_DB_PASS, OTRS_DB_SERVER)236 difftriggers = list(set(triggerszabbix) - set(triggersotrs))237 for TRIGGERID in difftriggers:238 if not TRIGGERID:239 print "Lista vazia"240 else:241 zapi = ZabbixAPI(server=ZBX_SERVER)242 zapi.login(ZBX_USER, ZBX_PASS)243 triggers = zapi.trigger.get ({244 "output": ["description", "lastchange", "triggerid", "priority"],245 "selectHosts": ["hostid", "host"],246 "selectLastEvent": ["eventid", "acknowledged", "objectid", "clock", "ns"],247 "sortfield" : "lastchange",248 "selectGroups": ["groupid", "name"],249 "monitored": "true",250 "only_true": "true",251 "maintenance": "false",252 "expandDescription": True,253 "filter":{254 "value":1,255 "triggerid": ""+ TRIGGERID +""}256 })257 for y in triggers:258 HOST = y["hosts"][0]["host"]259 severity = int(y["priority"])260 TRIGGERID = y["triggerid"]261 DESCRIPTION = y["description"]262 HOSTGROUP = y["groups"][0]["name"]263 if severity == 0:264 SEVERITY = "Not Classified"265 elif severity == 1:266 SEVERITY = "Information"267 elif severity == 2:268 SEVERITY = "Warning"269 getHostGroupTrigger(HOST, TRIGGERID, SEVERITY, HOSTGROUP, DESCRIPTION)270 elif severity == 3:271 SEVERITY = "Average"272 getHostGroupTrigger(HOST, TRIGGERID, SEVERITY, HOSTGROUP, DESCRIPTION)273 elif severity == 4:274 SEVERITY = "High"275 getHostGroupTrigger(HOST, TRIGGERID, SEVERITY, HOSTGROUP, DESCRIPTION)276 elif severity == 5: 277 SEVERITY = "Disaster"278 getHostGroupTrigger(HOST, TRIGGERID, SEVERITY, HOSTGROUP, DESCRIPTION)279 else:280 print "Unknown Severity"281 return "Chamado criado com sucesso!"282closeTicket(OTRS_SERVER, OTRS_USER, OTRS_PASS, ZBX_SERVER, ZBX_USER, ZBX_PASS)...
advance_d_PostHocTest.py
Source:advance_d_PostHocTest.py
1#!/usr/bin/env python32# -*- coding: utf-8 -*-3"""4Created on Tue Oct 23 20:21:58 20185@author: shenwanxiang6"""7import numpy as np8import itertools9import math10from scipy.stats import ttest_ind11import pandas as pd12from utils.pandastool import ParseDFtypes, isCategory, isSeries13from utils.modelbase import ModelBase14import coloredlogs,logging15coloredlogs.install()16# 误差åæ¹17def MSE(list_groups,list_total):18 sse=SSE(list_groups)19 mse=sse/(len(list_total)-1*len(list_groups))*1.0 20 return mse 21#sum of squares within group error,also know as random error 22def SSE(list_groups): 23 sse=024 for group in list_groups:25 se=SE(group)26 sse+=se27 return sse28#one within group error,also know as random error29def SE(group):30 se=031 mean1=np.mean(group)32 for i in group:33 error=i-mean134 se+=error**235 return se36 37def Combination(list_groups):38 combination= []39 for i in range(1,len(list_groups)+1):40 iter = itertools.combinations(list_groups,i)41 combination.append(list(iter))42 #éè¦æé¤ç¬¬ä¸ä¸ªåæåä¸ä¸ª43 return combination[1:-1][0]44#LSD(least significant difference)æå°æ¾èå·®å¼45def LSD(list_groups,list_total,sample1,sample2,a=0.05):46 mean1=np.mean(sample1)47 mean2=np.mean(sample2)48 distance=mean1-mean249 #print("distance:",distance)50 #tæ£éªçèªç±åº¦51 #df=len(list_total)-1*len(list_groups)52 mse=MSE(list_groups,list_total)53 #print("MSE:",mse)54 55 56 #t_value=stats.t(df).isf(a/2)57 #p = 1 - stats.t.cdf(t_value, df=df)58 59 t_value,p = ttest_ind(sample1,sample2)60 61 lsd=t_value*math.sqrt(mse*(1.0/len(sample1)+1.0/len(sample2)))62 63 res = [mean1,mean2, distance, lsd, p]64 return pd.DataFrame(res, index=['(I)å¹³åå¼', '(J)å¹³åå¼','å·®å¼(I-J)','LSDç»è®¡é','På¼'])65def Multiple_test(list_groups,list_total):66 #print("multiple test----------------------------------------------")67 combination=Combination(list_groups)68 69 a = []70 for pair in combination:71 a.append(LSD(list_groups,list_total,pair[0],pair[1]))72 73 return a74 75class PostHocTest(ModelBase):76 """77 äºåæ£éªï¼ç¨äºåæå®ç±»æ°æ®ä¸å®éæ°æ®ä¹é´çå
³ç³»æ
åµ78 ä¾å¦ç 究人åæ³ç¥éä¸ç»å¦ç(æ¬ç§ä»¥ä¸,æ¬ç§,æ¬ç§ä»¥ä¸,tsy)çæºåå¹³åå¼æ¯å¦ææ¾èå·®å¼.79 æ¯å¦åææ¾ç¤ºä¸ç»å¦çæºåï¼tsxï¼æçææ¾çå·®å¼,é£å
·ä½æ¯æ¬ç§ä»¥ä¸ä¸æ¬ç§è¿ä¸¤ç»ä¹é´,80 è¿æ¯æ¬ç§ä»¥ä¸ä¸æ¬ç§ä»¥ä¸ä¸¤ç»ä¹é´çå·®å¼;å³å
·ä½ä¸¤ä¸¤ç»å«ä¹é´çå·®å¼å¯¹æ¯,å称为äºåæ£éª; 81 è¿åä¸ä¸ªdataframeï¼å¨âresultâå
³é®åä¸82 83 84 æ¹æ³85 -------86 get_info : 87 è·å该模åçä¿¡æ¯ï¼ è¿åä¸ä¸ªåå
¸ï¼å
å«âidâåânameâ, 'description','limited'å
³é®å88 å«ä¹åå«ä¸ºï¼æ¨¡åçid, 模åçå称ï¼æ¨¡åçæè¿°ï¼æ¨¡åçéç¨èå´89 run: 90 åæ°91 ----------92 dfx: pandas DataFrame93 éè¦æ¯åçæ°æ®é½æ¯æ°ååæ°æ®ï¼ä¸è½æ¯å符串æè
object94 95 tsy: pandas Series96 éè¦ä¸åçæ°æ®é½æ¯åç±»åæ°æ®97 98 99 è¿åç»æ100 ---------- 101 è¿åä¸ä¸ªåå
¸ï¼å¸¦æâresultâå
³é®åï¼å
¶å¼ä¸ºæç
§tsyåç»çåå¼ãp-å¼ççç³»æ°ç»æçdataframe102 """103 104 105 106 def __init__(self, 107 model_id = None, 108 model_limiation = None,109 ):110 111 self._id_ = model_id112 self._limitation_ = model_limiation113 114 115 def get_info(self):116 117 return {'id': self._id, 118 'name': self._name, 119 'description': self._description,120 'limited':self._limitation121 }122 123 124 def run(self, 125 dfx, 126 tsy): 127 128 129 msg = {}130 131 tsy = tsy.reset_index(drop=True)132 dfx = dfx.reset_index(drop=True) 133 134 xl = len(dfx)135 yl = len(tsy)136 if xl != yl:137 logging.error('the length of input X:%s is not equal the length of Y: %s ! ' % (xl,yl))138 msg['error'] = 'the length of input X:%s is not equal the length of Y: %s ! ' % (xl,yl)139 return {'result':pd.DataFrame(), 'msg':msg}140 141 142 if not isSeries(tsy) or not isCategory(tsy):143 logging.error('input tsy is not a pandas Series or not a category data!')144 msg['error'] = 'input tsy is not a pandas Series or not a category data!'145 146 return {'result':pd.DataFrame(), 'msg':msg}147 148 149 150 else:151 152 x_numer_cols, x_cate_cols = ParseDFtypes(dfx)153 if x_numer_cols ==[]:154 logging.error('All input dfx are no numeric columns, Please check your input dfx data!')155 msg['error'] = 'All input dfx are no numeric columns, Please check your input dfx data!'156 return {'result':pd.DataFrame(), 'msg':msg}157 158 159 else:160 161 if x_cate_cols != []:162 logging.warning('input dfx has non-numeric columns: %s, will ignore these columns!' % x_cate_cols)163 164 msg['warning'] = 'input dfx has non-numeric columns: %s, will ignore these columns!' % x_cate_cols165 166 167 168 169 res = []170 for i in x_numer_cols:171 tsx = dfx[i]172 lg = list(tsy.unique())173 list_groups = [tsx[tsy==i].tolist() for i in lg]174 list_total = tsx.tolist()175 a = Multiple_test(list_groups,list_total) 176 dfr = pd.concat(a,axis=1).T177 dfr.index = [(i[0]+'(I)', i[1] + '(J)') for i in Combination(lg)]178 179 dfr['åæ项'] = i180 181 dfrr = dfr.reset_index().set_index(['åæ项','index'])182 183 res.append(dfrr)184 185 dfres = pd.concat(res)186 187 return {'result':dfres, 'msg':msg}188 189 190if __name__ == '__main__':191 192 #读åæ°æ®193 from dataset import load_MedExp194 195 196 df =load_MedExp()197 testdata = load_MedExp()198 dfx = df[['med','age','idp']]199 200 tsy = df.health201 #tsy = tsy[tsy.isin(['good', 'excellent'])]202 203 204 #ç±»çåå§å205 O = PostHocTest()206 #æå°è¯¥ç±»æè¿°çä¿¡æ¯207 print(O.get_info().get('description'))208 209 #æ§è¡è¿ç®ï¼ä¼ å
¥tsxãtsyåæ°210 dict_res = O.run(dfx,tsy)211 212 #è·åè¿åçåå
¸...
advance_d_PostHocTest.md
Source:advance_d_PostHocTest.md
1#!/usr/bin/env python32# -*- coding: utf-8 -*-3"""4Created on Tue Oct 23 20:21:58 20185@author: shenwanxiang6"""7import numpy as np8import itertools9import math10from scipy.stats import ttest_ind11import pandas as pd12from utils.pandastool import ParseDFtypes, isCategory, isSeries13from utils.modelbase import ModelBase14import coloredlogs,logging15coloredlogs.install()16# 误差åæ¹17def MSE(list_groups,list_total):18 sse=SSE(list_groups)19 mse=sse/(len(list_total)-1*len(list_groups))*1.0 20 return mse 21#sum of squares within group error,also know as random error 22def SSE(list_groups): 23 sse=024 for group in list_groups:25 se=SE(group)26 sse+=se27 return sse28#one within group error,also know as random error29def SE(group):30 se=031 mean1=np.mean(group)32 for i in group:33 error=i-mean134 se+=error**235 return se36 37def Combination(list_groups):38 combination= []39 for i in range(1,len(list_groups)+1):40 iter = itertools.combinations(list_groups,i)41 combination.append(list(iter))42 #éè¦æé¤ç¬¬ä¸ä¸ªåæåä¸ä¸ª43 return combination[1:-1][0]44#LSD(least significant difference)æå°æ¾èå·®å¼45def LSD(list_groups,list_total,sample1,sample2,a=0.05):46 mean1=np.mean(sample1)47 mean2=np.mean(sample2)48 distance=mean1-mean249 #print("distance:",distance)50 #tæ£éªçèªç±åº¦51 #df=len(list_total)-1*len(list_groups)52 mse=MSE(list_groups,list_total)53 #print("MSE:",mse)54 55 56 #t_value=stats.t(df).isf(a/2)57 #p = 1 - stats.t.cdf(t_value, df=df)58 59 t_value,p = ttest_ind(sample1,sample2)60 61 lsd=t_value*math.sqrt(mse*(1.0/len(sample1)+1.0/len(sample2)))62 63 res = [mean1,mean2, distance, lsd, p]64 return pd.DataFrame(res, index=['(I)å¹³åå¼', '(J)å¹³åå¼','å·®å¼(I-J)','LSDç»è®¡é','På¼'])65def Multiple_test(list_groups,list_total):66 #print("multiple test----------------------------------------------")67 combination=Combination(list_groups)68 69 a = []70 for pair in combination:71 a.append(LSD(list_groups,list_total,pair[0],pair[1]))72 73 return a74 75class PostHocTest(ModelBase):76 """77 äºåæ£éªï¼ç¨äºåæå®ç±»æ°æ®ä¸å®éæ°æ®ä¹é´çå
³ç³»æ
åµ78 ä¾å¦ç 究人åæ³ç¥éä¸ç»å¦ç(æ¬ç§ä»¥ä¸,æ¬ç§,æ¬ç§ä»¥ä¸,tsy)çæºåå¹³åå¼æ¯å¦ææ¾èå·®å¼.79 æ¯å¦åææ¾ç¤ºä¸ç»å¦çæºåï¼tsxï¼æçææ¾çå·®å¼,é£å
·ä½æ¯æ¬ç§ä»¥ä¸ä¸æ¬ç§è¿ä¸¤ç»ä¹é´,80 è¿æ¯æ¬ç§ä»¥ä¸ä¸æ¬ç§ä»¥ä¸ä¸¤ç»ä¹é´çå·®å¼;å³å
·ä½ä¸¤ä¸¤ç»å«ä¹é´çå·®å¼å¯¹æ¯,å称为äºåæ£éª; 81 è¿åä¸ä¸ªdataframeï¼å¨âresultâå
³é®åä¸82 83 84 æ¹æ³85 -------86 get_info : 87 è·å该模åçä¿¡æ¯ï¼ è¿åä¸ä¸ªåå
¸ï¼å
å«âidâåânameâ, 'description','limited'å
³é®å88 å«ä¹åå«ä¸ºï¼æ¨¡åçid, 模åçå称ï¼æ¨¡åçæè¿°ï¼æ¨¡åçéç¨èå´89 run: 90 åæ°91 ----------92 dfx: pandas DataFrame93 éè¦æ¯åçæ°æ®é½æ¯æ°ååæ°æ®ï¼ä¸è½æ¯å符串æè
object94 95 tsy: pandas Series96 éè¦ä¸åçæ°æ®é½æ¯åç±»åæ°æ®97 98 99 è¿åç»æ100 ---------- 101 è¿åä¸ä¸ªåå
¸ï¼å¸¦æâresultâå
³é®åï¼å
¶å¼ä¸ºæç
§tsyåç»çåå¼ãp-å¼ççç³»æ°ç»æçdataframe102 """103 104 105 106 def __init__(self, 107 model_id = None, 108 model_limiation = None,109 ):110 111 self._id_ = model_id112 self._limitation_ = model_limiation113 114 115 def get_info(self):116 117 return {'id': self._id, 118 'name': self._name, 119 'description': self._description,120 'limited':self._limitation121 }122 123 124 def run(self, 125 dfx, 126 tsy): 127 128 129 msg = {}130 131 tsy = tsy.reset_index(drop=True)132 dfx = dfx.reset_index(drop=True) 133 134 xl = len(dfx)135 yl = len(tsy)136 if xl != yl:137 logging.error('the length of input X:%s is not equal the length of Y: %s ! ' % (xl,yl))138 msg['error'] = 'the length of input X:%s is not equal the length of Y: %s ! ' % (xl,yl)139 return {'result':pd.DataFrame(), 'msg':msg}140 141 142 if not isSeries(tsy) or not isCategory(tsy):143 logging.error('input tsy is not a pandas Series or not a category data!')144 msg['error'] = 'input tsy is not a pandas Series or not a category data!'145 146 return {'result':pd.DataFrame(), 'msg':msg}147 148 149 150 else:151 152 x_numer_cols, x_cate_cols = ParseDFtypes(dfx)153 if x_numer_cols ==[]:154 logging.error('All input dfx are no numeric columns, Please check your input dfx data!')155 msg['error'] = 'All input dfx are no numeric columns, Please check your input dfx data!'156 return {'result':pd.DataFrame(), 'msg':msg}157 158 159 else:160 161 if x_cate_cols != []:162 logging.warning('input dfx has non-numeric columns: %s, will ignore these columns!' % x_cate_cols)163 164 msg['warning'] = 'input dfx has non-numeric columns: %s, will ignore these columns!' % x_cate_cols165 166 167 168 169 res = []170 for i in x_numer_cols:171 tsx = dfx[i]172 lg = list(tsy.unique())173 list_groups = [tsx[tsy==i].tolist() for i in lg]174 list_total = tsx.tolist()175 a = Multiple_test(list_groups,list_total) 176 dfr = pd.concat(a,axis=1).T177 dfr.index = [(i[0]+'(I)', i[1] + '(J)') for i in Combination(lg)]178 179 dfr['åæ项'] = i180 181 dfrr = dfr.reset_index().set_index(['åæ项','index'])182 183 res.append(dfrr)184 185 dfres = pd.concat(res)186 187 return {'result':dfres, 'msg':msg}188 189 190if __name__ == '__main__':191 192 #读åæ°æ®193 from dataset import load_MedExp194 195 196 df =load_MedExp()197 testdata = load_MedExp()198 dfx = df[['med','age','idp']]199 200 tsy = df.health201 #tsy = tsy[tsy.isin(['good', 'excellent'])]202 203 204 #ç±»çåå§å205 O = PostHocTest()206 #æå°è¯¥ç±»æè¿°çä¿¡æ¯207 print(O.get_info().get('description'))208 209 #æ§è¡è¿ç®ï¼ä¼ å
¥tsxãtsyåæ°210 dict_res = O.run(dfx,tsy)211 212 #è·åè¿åçåå
¸...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!