Análisis de los datos obtenidos

Uso de ipython para el análsis y muestra de los datos obtenidos durante la producción. Los datos analizados son del día 04 de Agosto del 2015


In [1]:
#Importamos las librerías utilizadas
import numpy as np
import pandas as pd
import seaborn as sns

In [2]:
#Mostramos las versiones usadas de cada librerías
print ("Numpy v{}".format(np.__version__))
print ("Pandas v{}".format(pd.__version__))
print ("Seaborn v{}".format(sns.__version__))


Numpy v1.9.2
Pandas v0.16.2
Seaborn v0.6.0

In [3]:
#Abrimos el fichero csv con los datos de la muestra
datos = pd.read_csv('861524.CSV')

In [4]:
%pylab inline


Populating the interactive namespace from numpy and matplotlib

In [23]:
#Mostramos un resumen de los datos obtenidoss
datos_filtrados = datos[(datos['Diametro X'] >= 0.9) & (datos['Diametro Y'] >= 0.9)]
datos_filtrados.describe()
#datos.describe().loc['mean',['Diametro X [mm]', 'Diametro Y [mm]']]


Out[23]:
Tmp Husillo Tmp Nozzle Diametro X Diametro Y MARCHA PARO RPM EXTR RPM TRAC
count 4693.000000 4693.000000 4693.000000 4693.000000 4693 4693 4693.000000 4693.000000
mean 63.457085 138.641999 1.780347 1.741993 1 1 1.595781 3.308580
std 0.604741 8.109865 0.327920 0.319514 0 0 0.512877 1.198329
min 62.200000 126.300000 0.908651 0.908291 True True 0.000000 0.000000
25% 63.000000 132.500000 1.539494 1.505929 1 1 1.000000 2.219072
50% 63.500000 134.400000 1.757422 1.712803 1 1 2.000000 2.516944
75% 63.900000 150.000000 2.055639 2.023115 1 1 2.000000 4.899920
max 65.400000 153.400000 2.606193 2.586273 True True 3.000000 4.899920

In [24]:
#Almacenamos en una lista las columnas del fichero con las que vamos a trabajar
columns = ['time','Diametro X', 'Diametro Y', 'RPM TRAC']

In [26]:
#Mostramos en varias gráficas la información obtenida tras el ensayo
datos_filtrados[columns].plot(subplots=True, figsize=(20,20))


Out[26]:
array([<matplotlib.axes._subplots.AxesSubplot object at 0x158F0BD0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x15908550>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x1591F8D0>], dtype=object)

Representamos ambos diámetros en la misma gráfica


In [8]:
datos.ix[:, "Diametro X":"Diametro Y"].plot(figsize=(16,3),ylim=(1.4,2)).hlines([1.85,1.65],0,3500,colors='r')


Out[8]:
<matplotlib.collections.LineCollection at 0xfb80ff0>

In [22]:
rolling_mean = pd.rolling_mean(datos['Diametro X'], 50)
rolling_std = pd.rolling_std(datos['Diametro X'], 50)
rolling_mean.plot(figsize=(12,6))
# plt.fill_between(ratio, y1=rolling_mean+rolling_std, y2=rolling_mean-rolling_std, alpha=0.5)
datos['Diametro X'].plot(figsize=(12,6), alpha=0.6, ylim=(1,2))


Out[22]:
<matplotlib.axes._subplots.AxesSubplot at 0x141f0d10>

In [9]:
datos.ix[:, "Diametro X":"Diametro Y"].boxplot(return_type='axes')


Out[9]:
<matplotlib.axes._subplots.AxesSubplot at 0xfeadd50>

Mostramos la representación gráfica de la media de las muestras


In [10]:
pd.rolling_mean(datos[columns], 50).plot(subplots=True, figsize=(12,12))


Out[10]:
array([<matplotlib.axes._subplots.AxesSubplot object at 0x0FEB8F70>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x130351F0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x1305E570>], dtype=object)

Comparativa de Diametro X frente a Diametro Y para ver el ratio del filamento


In [11]:
plt.scatter(x=datos['Diametro X'], y=datos['Diametro Y'], marker='.')


Out[11]:
<matplotlib.collections.PathCollection at 0x13102370>

Filtrado de datos

Las muestras tomadas $d_x >= 0.9$ or $d_y >= 0.9$ las asumimos como error del sensor, por ello las filtramos de las muestras tomadas.


In [12]:
datos_filtrados = datos[(datos['Diametro X'] >= 0.9) & (datos['Diametro Y'] >= 0.9)]

Representación de X/Y


In [13]:
plt.scatter(x=datos_filtrados['Diametro X'], y=datos_filtrados['Diametro Y'], marker='.')


Out[13]:
<matplotlib.collections.PathCollection at 0x1348fab0>

Analizamos datos del ratio


In [14]:
ratio = datos_filtrados['Diametro X']/datos_filtrados['Diametro Y']
ratio.describe()


Out[14]:
count    4693.000000
mean        1.029416
std         0.131786
min         0.626300
25%         0.964014
50%         1.013712
75%         1.077346
max         2.377936
dtype: float64

In [15]:
rolling_mean = pd.rolling_mean(ratio, 50)
rolling_std = pd.rolling_std(ratio, 50)
rolling_mean.plot(figsize=(12,6))
# plt.fill_between(ratio, y1=rolling_mean+rolling_std, y2=rolling_mean-rolling_std, alpha=0.5)
ratio.plot(figsize=(12,6), alpha=0.6, ylim=(0.5,1.5))


Out[15]:
<matplotlib.axes._subplots.AxesSubplot at 0x134e1290>

Límites de calidad

Calculamos el número de veces que traspasamos unos límites de calidad. $Th^+ = 1.85$ and $Th^- = 1.65$


In [16]:
Th_u = 1.85
Th_d = 1.65

In [17]:
data_violations = datos[(datos['Diametro X'] > Th_u) | (datos['Diametro X'] < Th_d) |
                       (datos['Diametro Y'] > Th_u) | (datos['Diametro Y'] < Th_d)]

In [18]:
data_violations.describe()


Out[18]:
Tmp Husillo Tmp Nozzle Diametro X Diametro Y MARCHA PARO RPM EXTR RPM TRAC
count 6472.000000 6472.000000 6472.000000 6472.000000 6472 6472 6472.000000 6472.000000
mean 63.770535 137.465219 1.203757 1.141036 1 1 1.648640 2.934034
std 0.924330 7.771843 0.872177 0.870261 0 0 0.526974 1.104066
min 62.200000 126.300000 0.014000 0.000342 True True 0.000000 0.000000
25% 63.000000 132.300000 0.014000 0.000342 1 1 1.000000 2.219072
50% 63.500000 133.300000 1.505085 1.459957 1 1 2.000000 2.219072
75% 64.300000 142.200000 1.963880 1.908185 1 1 2.000000 3.708432
max 65.900000 153.400000 2.961760 2.586273 True True 3.000000 4.899920

In [19]:
data_violations.plot(subplots=True, figsize=(12,12))


Out[19]:
array([<matplotlib.axes._subplots.AxesSubplot object at 0x134F2250>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x13528AB0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x13567C70>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x1358C810>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x13C5A090>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x13C7A1B0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x13CA3490>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x13CAC150>], dtype=object)

In [ ]: