Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Luca Fumagalli
luca1.fumagalli@polimi.it
Lemmings L.T.D.
Caso de Estudio
0. Introducción
o Introducción de la compañía Lemmings L.T.D.
1. Antes de Empezar
o Consideraciones previas al análisis
2. Limpieza de Datos
o Preparando los datos para pasos posteriores
3. Análisis de Componentes Principales
o Describiendo el conjunto de datos en términos de nuevas variables no
relacionadas entre sí
4. Análisis de Agrupamiento
o Agrupando el conjunto de datos en grupos que representan diferentes
estados y condiciones de la máquina
5. Ahora es tu turno
3
0. Introducción
4
Lemmings L.T.D.
Lemmings es una compañía que realiza extrusiones y barras de aluminio aleado para
múltiples usos en la construcción y en sectores industriales. Todas las fases del proceso de
producción son administradas internamente.
Dentro del proceso de producción, la máquina principal es una prensa para la extrusión del
aluminio. La prensa tiene un sistema de aceite que cuenta con diferentes bombas para
impulsar aceite (aceite usado en la prensa) así como otras bombas utilizadas para el sistema
de refrigerado de la prensa.
Las bombas son, por lo tanto, consideradas componentes cruciales dentro de las
actividades de mantenimiento. Una de las bombas del sistema de refrigerado es analizada
en este caso.
5
Lemmings L.T.D.
Rango de Productos
4 líneas de extrusión
• Prensa 1: 2,200 t
• Prensa 2: 2,780 t
• Prensa 3: 3,150 t
• Prensa 4: 6,050 t
(LÍNEA PRINCIPAL)
7
Lemmings L.T.D.
Tenemos los datos registrados por los sensores de una máquina durante una hora de
producción. Las siguientes señales son muestreadas cada segundo:
• Presión
• Temperatura (2 señales)
• Velocidad angular del eje
De esta forma sabremos si los datos registrados por la máquina pueden ser divididos en
distintos estados representativos de los diferentes niveles de estrés.
8
1. Antes de empezar
9
1. Antes de empezar
Lo primero que tenemos que hacer siempre, incluso antes de cargar los datos, es importar
las librerías necesarias para realizar el análisis de datos.
Necesitamos del módulo pandas para cargar y trabajar con datos tabulares. También
importaremos matplotlib y numpy para poder trazar gráficos y trabajar con matrices y
arreglos multidimensionales.
10
1. Antes de empezar
Una vez montada nuestra unidad de Drive podremos leer los datos contenidos en el archivo
lemming_data.csv utilizando pandas. Ahora sí podemos empezar a inspeccionar las
muestras.
• pd.read_csv es una función de
pandas que lee archivos del tipo .csv
y los carga en un dataframe.
• df es el nombre que le damos a
dicho dataframe.
11
2. Limpieza de datos
12
2. Limpieza de Datos
13
2. Limpieza de Datos
I. Valores Faltantes
• .dropna es un función de pandas
Empezaremos por eliminar los valores faltantes del que elimina valores faltantes.
dataframe. Es decir, eliminaremos del dataframe las • axis es el parámetro que determina
si se eliminarán filas o columnas que
filas que contengan valores NaN. contienen valores faltantes. 0
eliminará filas, mientras que 1
Después de esto utilizamos nuevamente el método eliminará las columnas.
.shape y podemos ver que ahora el dataframe
tiene 2958 entradas, el mismo número de entradas
registradas originalmente por el sensor de velocidad
angular.
Después de haber eliminado todos los valores faltantes, revisaremos los datos en búsqueda
de valores atípicos eventuales. Para esto nos concentramos en los dos sensores de
temperatura.
15
2. Limpieza de Datos
• signal_to_check es una variable
II. Valores Atípicos – 1era señal de temperatura arbitraria donde almacenaremos el
string 'temperature1'
• Los corchetes [] son operadores de
indexación usados para acceder a
elementos dentro del dataframe.
Empezamos por calcular los umbrales superior e inferior: • .mean() es un método que calcula
la media sobre el objeto indexado. En
este caso, df[signal_to_check]
• .std() es un método que calcula la
desviación estándar sobre el objeto
indexado. En este caso,
df[signal_to_check]
• Para comprender mejor la indexación
del tipo df[], observa el resultado de
imprimir df[signal_to_check]:
16
2. Limpieza de Datos
II. Valores Atípicos – 1era señal de temperatura
17
2. Limpieza de Datos
• Para comprender mejor la comparación
II. Valores Atípicos – 1era señal de temperatura df[signal_to_check] <
limite_superior , observa el
resultado de imprimirla:
Debido a que la señal 'temperature1'
presenta ciertos valores atípicos por encima del umbral
tomamos la decisión de eliminarlos.
18
2. Limpieza de Datos
II. Valores Atípicos – 1era señal de temperatura
• Tanto el dataframe df como la serie booleana tienen el mismo número de entradas, 2958.
• df[ df[signal_to_check] < limite_superior ] hace uso de los corchetes para acceder
solamente a las filas del dataframe cuyos índices en la serie booleana corresponden a un valor TRUE. Por
ejemplo: el índice 2969 de la serie booleana es TRUE, por lo tanto el índice 2969 de df será accedido.
• df = df[ df[signal_to_check] < limite_superior ] modifica df igualándolo a las filas
accedidas a través de la serie booleana.
• Para comprender mejor el efecto de esta operación sobre df, observa el resultado de imprimir la forma y
describir el dataframe:
• Han sido eliminadas de df 10 filas cuyos valores en la columna correspondiente a la señal 'temperature1’
fueron identificados como atípicos debido a que estaban por encima del umbral superior.
19
2. Limpieza de Datos
II. Valores Atípicos – 1era señal de temperatura
Una vez eliminados los valores atípicos del dataframe podemos trazar la señal nuevamente.
20
2. Limpieza de Datos
• signal_to_check es una variable
II. Valores Atípicos – 2da señal de temperatura arbitraria donde almacenaremos el
string 'temperature2'
• Los corchetes [] son operadores de
Repetimos el mismo procedimiento con la segunda señal de indexación usados para acceder a
temperatura 'temperature2’. elementos dentro del dataframe.
• .mean() es un método que calcula
Nuevamente empezamos por calcular los umbrales superior e la media sobre el objeto indexado. En
este caso, df[signal_to_check]
inferior: • .std() es un método que calcula la
desviación estándar sobre el objeto
indexado. En este caso,
df[signal_to_check]
• Para comprender mejor la indexación
del tipo df[], observa el resultado de
imprimir df[signal_to_check]:
21
2. Limpieza de Datos
II. Valores Atípicos – 2da señal de temperatura
22
2. Limpieza de Datos
• Para comprender mejor la comparación
II. Valores Atípicos – 2da señal de temperatura df[signal_to_check] <
limite_superior , observa el
resultado de imprimirla:
Debido a que la señal 'temperature2'
presenta ciertos valores atípicos por encima del umbral
tomamos la decisión de eliminarlos.
23
2. Limpieza de Datos
II. Valores Atípicos – 2da señal de temperatura
• Tanto el dataframe df como la serie booleana tienen el mismo número de entradas, 2948.
• df[ df[signal_to_check] < limite_superior ] hace uso de los corchetes para acceder
solamente a las filas del dataframe cuyos índices en la serie booleana corresponden a un valor TRUE. Por
ejemplo: el índice 2969 de la serie booleana es TRUE, por lo tanto el índice 2969 de df será accedido.
• df = df[ df[signal_to_check] < limite_superior ] modifica df igualándolo a las filas
accedidas a través de la serie booleana.
• Para comprender mejor el efecto de esta operación sobre df, observa el resultado de imprimir la forma y
describir el dataframe:
• Han sido eliminadas de df 4 filas cuyos valores en la columna correspondiente a la señal 'temperature2’
fueron identificados como atípicos debido a que estaban por encima del umbral superior.
24
2. Limpieza de Datos
II. Valores Atípicos – 2da señal de temperatura
Una vez eliminados los valores atípicos del dataframe podemos trazar la señal nuevamente.
25
2. Limpieza de Datos
III. Conclusión
26
3. Análisis de
Componentes
Principales
27
3. Análisis de Comp. Principales
Para esto necesitamos una porción del dataframe que consista solamente de las señales
físicas que queremos analizar sin incluir las marcas de tiempo.
Crearemos una lista con los nombres de las columnas físicas, de tal forma que obtendremos
una porción reducida del dataframe al seleccionar solamente estas columnas. Luego
procederemos con la normalización de datos.
28
3. Análisis de Comp. Principales
• El código de esta sección sigue una lógica
similar al de la diapositiva 9
• columnas_senales_físicas es una
Empezamos por obtener un dataframe que variable arbitraria donde almacenaremos una
contenga solo las señales físicas. Este dataframe lista compuesta de 4 strings.
será llamado df_reducido. • Para visualizarla mejor observa el resultado
de imprimir
columnas_senales_fisicas:
Luego normalizaremos los datos a través de una
sencilla operación aritmética utilizando los métodos
.mean() y .std()sobre las columnas del
dataframe df_reducido. • Para comprender mejor la indexación del tipo
df[], observa el resultado de imprimir
df[columnas_senales_fisicas]:
29
3. Análisis de Comp. Principales
• df_reducido es el nuevo
dataframe que inicialmente
contenía las 4 columnas de
df[columnas_senales_
fisicas], y que luego de
ejecutar la normalización a
través de operaciones
aritméticas contiene los datos
normalizados
correspondientes a las 4
columnas.
30
3. Análisis de Comp. Principales
• PCA() es una clase que
contiene atributos y métodos
Para ejecutar el análisis de componentes principales o PCA
relacionados al análisis de
necesitamos importar el módulo apropiado de la librería componentes principales
sklearn. • pca es un objeto creado a
partir de la clase PCA() que
almacenará información para
Luego instanciamos el objeto pca , y dejamos que éste
atributos y realizará acciones a
ejecute el análisis PCA sobre el conjunto de datos través de métodos. Puede ser
df_reducido. Esto se consigue a través de la función considerado un “analizador de
.fit que “ajusta” el “analizador de PCA” al conjunto de PCA”.
• .fit es un método que
datos.
entrena o “ajusta” un modelo
(en este caso pca) a los datos
provistos como argumento (en
este caso df_reducido)
• “instanciar” significa crear un
objeto partiendo de una clase
31
3. Análisis de Comp. Principales • .explained_variance_ es un atributo que
determina la varianza explicada por cada componente
principal identificado
• varianza_ex es una variable arbitraria donde
Ahora visualizaremos los resultados del
almacenaremos la varianza explicada por cada componente
PCA. • Para visualizarla mejor observa el resultado de imprimir
varianza_ex:
Obtenemos la proporción de varianza
explicada por cada componente
principal y lo convertimos a porcentaje • El bucle for recorre los 4 elementos de varianza_ex
a través de operaciones aritméticas. de tal forma que en cada iteración la variable e asume el
valor de un elemento y realiza la operación aritmética
correspondiente para obtener los porcentajes.
• pct_varianza_ex es una variable arbitraria donde
almacenamos el porcentaje de la varianza explicada por
cada componente
• Para visualizarla mejor observa el resultado de imprimir
pct_varianza_ex:
32
3. Análisis de Comp. Principales
33
3. Análisis de Comp. Principales
Al trazar los porcentajes en un gráfico de barras podemos ver que los dos primeros
componentes principales explican la gran mayoría de la varianza en los datos, mientras
que los componentes restantes se atribuyen una proporción insignificante de explicación
de la varianza.
34
3. Análisis de Comp. Principales
• .columns devuelve las etiquetas de las columnas
del dataframe
• .components devuelve los vectores principales
Adicionalmente inspeccionamos el peso que tiene cada de la matriz de covarianza, es decir, los pesos de cada
señal sobre cada uno de los dos componentes principales. señal física sobre cada componente principal
Esto revela que las 4 señales tienen un impacto • zip() es una función que recorre dos elementos
iterables creando pares.
significativo sobre los dos primeros componentes • Para visualizar mejor estos pares observa esta tabla
principales. que representa los pares creados entre el elemento
df_reducido.columns (4 filas) y el elemento
pca.components_ (4 filas y 4 columnas)
feature_name component_weight
df_reducido.columns pca.components_
pressure -0.605 -0.556 -0.271 -0.502 1st, index [0]
temperature1 -0.329 -0.422 0.687 0.493 2nd, index [1]
temperature2 0.000 -0.290 -0.669 0.684 3rd, index [2]
shaft_rotation_speed -0.726 0.655 -0.085 0.195 4th, index [3]
feature_name component_weight
df_reducido.columns pca.components_
pressure -0.605 -0.556 -0.271 -0.502 1st, index [0]
temperature1 -0.329 -0.422 0.687 0.493 2nd, index [1]
temperature2 0.000 -0.290 -0.669 0.684 3rd, index [2]
shaft_rotation_speed -0.726 0.655 -0.085 0.195 4th, index [3]
• pca.components_[0] accede a los elementos
de la primera fila
35
3. Análisis de
Agrupamiento
36
4. Análisis de Agrupamiento • La función .fit() calcula vectores sobre los cuales
podemos proyectar nuestros datos. Cada fila de
El análisis PCA nos ha permitido identificar dos componentes pca.components_ (tabla de diapositiva 32)
con alto nivel de caracterización. Tomaremos estos dos corresponde a un vector sobre el cual los datos
pueden ser proyectados. Es decir, cada vector es un
componentes como datos de entrada para ejecutar la Detección componente principal.
de Estados a través de un análisis de agrupamiento. • La función .transform ejecuta esta proyección, es
decir, cada fila del dataframe será proyectada sobre el
Utilizando la función .transform podemos proyectar el espacio vectorial aprendido a través de la función
.fit. El resultado será una matriz con el mismo
dataframe sobre el espacio vectorial generado como resultado número de filas y columnas que el dataframe, a
del análisis PCA. De esta forma, podemos añadir las dos menos que se especifiquen los componentes
columnas correspondientes a los 2 primeros componentes deseados al llamar a la clase PCA().
principales a nuestro dataframe df. • La notación [:,0] dentro de
datos_transformados hace que se acceda a
todas las filas de la matriz pero solo la columna con
índice 0, es decir, la columna correspondiente al
primer componente principal.
• La notación [:,0] hace que se acceda a la columna
correspondiente al segundo componente principal.
• Ambas columnas son añadidas a df bajo los nombres
'componente1' y 'componente2'
respectivamente.
37
4. Análisis de Agrupamiento
38
4. Análisis de Agrupamiento
• range(2,7) crea una secuencia de números del 2 al
6 (2, 3, 4, 5, 6), que representan los posibles números
Comenzaremos por definir el número deseado de de grupos que queremos generar aplicando el algoritmo
centroides, o grupos, utilizando un bucle for. K-medias.
• Para comprender mejor el uso del bucle for, observa
Nos planteamos un número hipotético de el resultado de imprimir rango_grupos
centroides en el rango de 2 a 6.
39
4. Análisis de Agrupamiento
40
4. Análisis de Agrupamiento
42
4. Análisis de Agrupamiento
Para visualizar los resultados del análisis de agrupamiento trazaremos gráficos donde los
grupos generados y las muestras correspondientes a cada uno de ellos serán representados
con distintos colores. Para esto declaramos una matriz con múltiples códigos hexadecimales
de colores. Empezamos por trazar los gráficos de las señales originales registradas por la
máquina.
43
4. Análisis de Agrupamiento
I. Gráfico de Dispersión de la 1era señal de temperatura
44
4. Análisis de Agrupamiento
II. Gráfico de Dispersión de la 2da señal de temperatura
45
4. Análisis de Agrupamiento
III. Gráfico de Dispersión de la señal de presión
46
4. Análisis de Agrupamiento
IV. Gráfico de Dispersión de la velocidad angular del eje
47
4. Análisis de Agrupamiento
Todos los gráficos muestran diferentes valores estacionarios en colores diferentes, lo cual
sugiere que la Detección de Estados fue un éxito y representa efectivamente las condiciones
de la máquina.
Finalmente, trazamos un gráfico de dispersión de los dos primeros componentes
principales. Con esto veremos que efectivamente las muestras están distribuidas en cuatro
regiones distintas.
48
5. Ahora es tu turno
49
Envia tu cuaderno antes del 30 de Julio
50