Está en la página 1de 50

Smart Maintenance y Mantenimiento Predictivo

Luca Fumagalli
luca1.fumagalli@polimi.it
Lemmings L.T.D.
Caso de Estudio

Prof. Luca Fumagalli


Eng. Maira Callupe Arias
Eng. Domenico Nucera
Contenidos

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

Productos para la industria Productos para la construcción

Extrusiones personalizadas Extrusiones personalizadas

Extrusiones Industriales con


aire comprimido

Extrusiones para el sector


transporte (autos, camiones, trenes,
barcos, bicicletas, etc.)

Extrusiones para muebles


6
Lemmings L.T.D.
Planta. Principal planta del grupo localizada en Italia

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

La máquina experimenta diferentes niveles de estrés a lo largo de su ciclo de trabajo.


Nuestro objetivo es intentar identificar y detectar estos niveles, para lo cual las actividades
a realizar son las siguientes:

1. Garantizar la calidad de los datos


2. Ejecutar el análisis de componentes principales
3. Ejecutar la Detección de Estados por medio del Análisis de Agrupamiento

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.

• pd es el “alias” con el que


importamos la librería pandas. Cada
vez que utilicemos una función
accederemos a ella con la forma:
pd.función

10
1. Antes de empezar

El archivo correspondiente a este caso de estudio es titulado “lemming_data.csv” que está


incluido en la carpeta compartida llamada “Mantenimiento Inteligente - Archivos para
Tutoriales de Ejercicio”. Necesitamos importar estos datos desde nuestro directorio de
Google Drive, para lo cual importaremos el módulo de Google Colab.

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

Utilizando los métodos .shape() y .describe()podemos


obtener información básica sobre las señales presentes en el • .shape es un método de pandas
conjunto de datos. Dos piezas de información saltan a la vista: que devuelve la “forma” del
dataframe en términos de filas y
columnas.
• La velocidad angular parece presentar valores faltantes.
• .describe() es un método de
• Existe un orden de magnitud entre el percentil 75 y el máximo pandas que genera una tabla con
valor de ambas señales de temperatura, lo cual podría indicar estadísticas útiles sobre un dataframe.
la presencia de valores atípicos. • .T transpone una matriz (también
llamada vector o arreglo).

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.

Esto significa que la columna correspondiente a la


velocidad angular tenía 12 valores faltantes, los
cuales fueron eliminados. Ahora el dataframe
contiene solo muestras con valores válidos para todas
las señales.
14
2. Limpieza de Datos
II. Valores Atípicos

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.

Como mencionamos anteriormente en la cápsula, esta actividad siempre se beneficiara del


conocimiento de dominio acerca del sistema físico del cual los valores de las señales se
originan. Debido a que para este caso no contamos con este conocimiento y nuestra
intención es hacer uso del modelo Caja Negra para la Detección de Estado (Análisis de
Agrupamiento), utilizaremos los umbrales 3-sigma para poder identificar los valores
atípicos.

Procederemos a trazar el gráfico de las señales de temperatura marcando los umbrales


superior e inferior. De esta forma podremos inspeccionar visualmente si hay algún valor que
se encuentra fuera de los umbrales.

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

Luego trazamos la señal incluyendo ambos umbrales.

• .plot() es una función que traza y


versus x como líneas.
• .axhline() es una función que
añade una línea horizontal.

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.

Para hacer esto, modificaremos el dataframe df de tal


forma que incluya solamente las filas en las cuales las
entradas de la señal 'temperature1'están por • Esta serie booleana tiene 2958
debajo del umbral superior. entradas, de las cuales podemos
estimar que 2948 son TRUE mientras
que 10 son FALSE (basándonos en el
gráfico de la diapositiva 10)
• Observa que pese a tener 2958
entradas, los índices del dataframe
original han sido preservados. Por
ejemplo, la entrada número 2958 tiene
el índice 2969.

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.

• .plot() es una función que traza y


versus x como líneas.
• .axhline() es una función que
añade una línea horizontal.

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

Luego trazamos la señal incluyendo ambos umbrales.

• .plot() es una función que traza y


versus x como líneas.
• .axhline() es una función que
añade una línea horizontal.

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.

Para hacer esto, modificaremos el dataframe df de tal


forma que incluya solamente las filas en las cuales las
entradas de la señal 'temperature2'están por
• Esta serie booleana tiene 2948
debajo del umbral superior. entradas, de las cuales podemos
estimar que 2944 son TRUE mientras
que 4 son FALSE (basándonos en el
gráfico de la diapositiva 15)
• Observa que pese a tener 2948
entradas, los índices del dataframe
original han sido preservados. Por
ejemplo, la entrada número 2948 tiene
el índice 2969.

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.

• .plot() es una función que traza y


versus x como líneas.
• .axhline() es una función que
añade una línea horizontal.

25
2. Limpieza de Datos
III. Conclusión

Los valores anómalos de temperatura serán reportados


después de nuestro análisis, ya que éstos posiblemente se
originaron debido a errores en el sistema de Adquisición de
Datos. Proveer este tipo de retroalimentación podría
mejorar la adquisición de datos de nuestra solución de
Mantenimiento Inteligente.

Después de la limpieza vemos que df tiene 2944


muestras. La estrategia empleada para eliminar valores
faltantes y atípicos nos llevó a perder solamente 26
muestras. Esta es una cantidad tolerable de pérdida de
datos, por lo que no es necesario manipular más los datos
rellenando éstos valores, por ejemplo, a través de
interpolación.

26
3. Análisis de
Componentes
Principales

27
3. Análisis de Comp. Principales

El siguiente paso es realizar un análisis de componentes principales sobre el conjunto de


datos.

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

Ejecutamos el método describe() para visualizar las estadísticas de


df_reducido. Como puedes ver, las marcas de tiempo han sido
eliminadas. De la misma forma, medias que tienden a 0 y desviaciones típicas
iguales a 1 nos indican que los datos han sido normalizados.

• 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

Imprimimos los porcentajes de varianza explicada por cada componente


principal de una forma más clara:

• Los corchetes [] se usan para


acceder a elementos dentro de
pct_varianza_ex
utilizando sus respectivos
índices.

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.

• len() es una función que calcula el número


de elementos dentro de un objeto
• range() es una función que devuelve una
secuencia de números
• .bar() es una función que crea un gráfico de
barras. Su primer parámetro es el número de
coordinadas, el cual en este caso es dado por
range(len(pct_varianza_ex) que es
igual a 4. Su segundo parámetro es la altura de
las barras, el cual en este caso es dado por los 4
elementos de (pct_varianza_ex)

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

La estrategia que adoptaremos para la Detección de Estados está basada en un análisis de


agrupamiento, ya que no tenemos conocimiento a priori sobre los estados de la máquina.

Un método efectivo consiste en combinar el agrupamiento basado en K-medias con la


evaluación del coeficiente de silueta. Ejecutaremos varias iteraciones del algoritmo K-
medias cada una con un número distinto de centroides. Evaluaremos cada solución de
agrupamiento a través del coeficiente de silueta y escogeremos el que tenga el valor más
alto.

Empezamos por importar los módulos necesarios de sklearn:

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.

Como mencionamos anteriormente, trabajaremos


solamente con los datos correspondientes a los dos
primeros componentes principales. • cols_componentes_principales es una
variable arbitraria donde almacenamos los strings
'componente1' y 'componente2'
• df[cols_componentes_principales] accede
a las dos columnas con los encabezados
'componente1' y 'componente2' dentro de
df, creando df_agrupamiento
• df_agrupamiento es un nuevo dataframe que
contiene solamente las columnas 'componente1' y
'componente2'

39
4. Análisis de Agrupamiento

Utilizaremos otro bucle for para poder


ejecutar la siguiente serie de acciones
sobre cada uno de los posibles números
de grupo:

1. Declaramos el objeto km que puede ser


considerado el “agrupador”.
2. Ejecutamos el algoritmo K-medias
llamando la función .fit.
3. Calculamos el coeficiente de silueta.
4. Guardamos las etiquetas obtenidas del
agrupamiento (a qué grupo pertenece
cada entrada) en el dataframe df

40
4. Análisis de Agrupamiento

• Observa que toda la sección de código pertenece al bucle for


• numero_grupos asumirá los valores 2, 3, 4, 5 y 6 en cada
iteración del bucle for
• Kmeans() es una clase que contiene atributos y métodos
relacionados al algoritmo K-medias. Su primer parámetro es el
número de grupos deseado, en este caso los valores asumidos
por numero_grupos, y su segundo parámetro
random_state=0 permite que obtengamos los mismos
valores aleatorios cada vez que ejecutemos el código.
• km es un objeto creado a partir de Kmeans() que almacenará
información para atributos y realizará acciones a través de
métodos. Puede ser considerado un “agrupador”.
• .fit es un método que entrena o “ajusta” un modelo (en
este caso km) a los datos provistos como argumento (en este
caso df_agrupamiento)
• silhouette_score calcula el coeficiente de silueta para
todas las muestras en el dataframe. Su primer parámetro es el
conjunto de datos, en este caso df_agrupamiento, y su
segundo parámetro corresponde a las etiquetas predichas para
cada muestra. astype(np.int)indica que las etiquetas son
números enteros, en este caso del 2 al 6.
41
4. Análisis de Agrupamiento

Observando el resultado de imprimir los


coeficientes de silueta, podemos ver que el
agrupamiento K-means con 4 centroides
resultando en 4 grupos es la mejor opción.

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

Trazamos un gráfico de dispersión de la señal 'temperature1'


donde colorearemos las muestras en base a las etiquetas generadas y
almacenadas después de ejecutar el algoritmo K-medias.

• scatter() genera un gráfico de dispersión. Su


primer parámetro corresponde al eje de la ‘x’, en este
caso la columna 'timestamp' su segundo parámetro
corresponde al eje de la ‘y’, en este caso la columna
'temperature1' . Su tercer parámetro corresponde
a la escala, en este caso s=2 indica el tamaño del
marcador. Su cuarto parámetro corresponde al color, en
este caso las etiquetas generadas al agrupar los datos en
4 grupos almacenadas en df['kmeans_4']

44
4. Análisis de Agrupamiento
II. Gráfico de Dispersión de la 2da señal de temperatura

Trazamos un gráfico de dispersión de la señal 'temperature2'


donde colorearemos las muestras en base a las etiquetas generadas y
almacenadas después de ejecutar el algoritmo K-medias.

• scatter() genera un gráfico de dispersión. Su


primer parámetro corresponde al eje de la ‘x’, en este
caso la columna 'timestamp' su segundo parámetro
corresponde al eje de la ‘y’, en este caso la columna
'temperature2' . Su tercer parámetro corresponde
a la escala, en este caso s=2 indica el tamaño del
marcador. Su cuarto parámetro corresponde al color, en
este caso las etiquetas generadas al agrupar los datos en
4 grupos almacenadas en df['kmeans_4']

45
4. Análisis de Agrupamiento
III. Gráfico de Dispersión de la señal de presión

Trazamos un gráfico de dispersión de la señal 'pressure' donde


colorearemos las muestras en base a las etiquetas generadas y
almacenadas después de ejecutar el algoritmo K-medias.

• scatter() genera un gráfico de dispersión. Su


primer parámetro corresponde al eje de la ‘x’, en este
caso la columna 'timestamp' su segundo parámetro
corresponde al eje de la ‘y’, en este caso la columna
'pressure' . Su tercer parámetro corresponde a la
escala, en este caso s=2 indica el tamaño del marcador.
Su cuarto parámetro corresponde al color, en este caso
las etiquetas generadas al agrupar los datos en 4 grupos
almacenadas en df['kmeans_4']

46
4. Análisis de Agrupamiento
IV. Gráfico de Dispersión de la velocidad angular del eje

Trazamos un gráfico de dispersión de la señal 'shaft_rotation_speed'


donde colorearemos las muestras en base a las etiquetas generadas y
almacenadas después de ejecutar el algoritmo K-medias.

• scatter() genera un gráfico de dispersión. Su


primer parámetro corresponde al eje de la ‘x’, en este
caso la columna 'timestamp' su segundo parámetro
corresponde al eje de la ‘y’, en este caso la columna
'shaft_rotation_speed' . Su tercer parámetro
corresponde a la escala, en este caso s=2 indica el
tamaño del marcador. Su cuarto parámetro corresponde
al color, en este caso las etiquetas generadas al agrupar
los datos en 4 grupos almacenadas en
df['kmeans_4']

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

También podría gustarte