Tengo un script de Python que crea una lista de listas de tiempo de actividad del servidor y datos de rendimiento, donde cada sublista (o 'fila') contiene las estadísticas de un clúster en particular. Por ejemplo, bien formateado se parece a esto:
------- ------------- ------------ ---------- -------------------
Cluster %Availability Requests/Sec Errors/Sec %Memory_Utilization
------- ------------- ------------ ---------- -------------------
ams-a 98.099 1012 678 91
bos-a 98.099 1111 12 91
bos-b 55.123 1513 576 22
lax-a 99.110 988 10 89
pdx-a 98.123 1121 11 90
ord-b 75.005 1301 123 100
sjc-a 99.020 1000 10 88
...(so on)...
Entonces, en forma de lista, podría verse así:
[[ams-a,98.099,1012,678,91],[bos-a,98.099,1111,12,91],...]
Mi pregunta:
- ¿Cuál es la mejor manera de determinar los valores atípicos en cada columna? ¿O los valores atípicos no son necesariamente la mejor manera de atacar el problema de encontrar 'maldad'?
En los datos anteriores, definitivamente me gustaría saber sobre bos-b y ord-b, así como ams-a, ya que su tasa de error es muy alta, pero los otros pueden descartarse. Dependiendo de la columna, dado que más alto no es necesariamente peor ni más bajo, estoy tratando de encontrar la forma más eficiente de hacerlo. Parece que numpy se menciona mucho para este tipo de cosas, pero no estoy seguro de por dónde empezar (lamentablemente, soy más administrador de sistemas que estadístico ...). Cuando pregunté en Stack Overflow, alguien mencionó el uso de la función scoperpercentile de numpy y arrojó algo por encima del percentil 99. ¿Parece una buena idea?
(Publicación cruzada de stackoverflow, aquí: /programming/4606288 )