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 filamento de bq el día 20 de Julio del 2015


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

In [29]:
#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 [30]:
#Abrimos el fichero csv con los datos de la muestra
datos = pd.read_csv('prueba2.CSV')

In [31]:
%pylab inline


Populating the interactive namespace from numpy and matplotlib

In [32]:
#Mostramos un resumen de los datos obtenidoss
datos.describe()
#datos.describe().loc['mean',['Diametro X [mm]', 'Diametro Y [mm]']]


Out[32]:
time Tmp Husillo Tmp Nozzle Diametro X Diametro Y MARCHA PARO RPM EXTR RPM TRAC
count 10431.000000 10431.000000 10431.000000 10431.000000 10431.000000 10431 10431 10431.000000 10431.000000
mean 5216.000000 63.877423 136.501802 1.323938 1.280825 1 1 1.917937 3.604937
std 3011.314663 1.110978 7.508007 0.636085 0.644004 0 0 0.281714 1.410438
min 1.000000 58.800000 88.700000 0.014000 0.000342 True True 0.000000 0.000000
25% 2608.500000 63.400000 137.500000 1.367446 1.333533 1 1 2.000000 3.814816
50% 5216.000000 63.900000 138.100000 1.573904 1.540408 1 1 2.000000 3.814816
75% 7823.500000 64.300000 138.600000 1.700073 1.666831 1 1 2.000000 4.410560
max 10431.000000 67.800000 140.300000 2.697952 2.333427 True True 2.000000 4.410560

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

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


Out[34]:
array([<matplotlib.axes._subplots.AxesSubplot object at 0x13B653D0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x13DCBB70>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x13DF2F70>], dtype=object)

Representamos ambos diámetros en la misma gráfica


In [47]:
datos.ix[:, "Diametro X":"Diametro Y"].plot(figsize=(16,3),ylim=(1.5,2)).hlines([1.85,1.65],20000,10000colors='r')


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-47-3bf1071bea93> in <module>()
----> 1 datos.ix[:, "Diametro X":"Diametro Y"].plot(figsize=(16,3),ylim=(1.5,2)).hlines([1.85,1.65],colors='r')

TypeError: hlines() missing 2 required positional arguments: 'xmin' and 'xmax'

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


Out[36]:
<matplotlib.axes._subplots.AxesSubplot at 0x144d23b0>

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


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


Out[37]:
array([<matplotlib.axes._subplots.AxesSubplot object at 0x144D97F0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x14485350>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x14845FB0>], dtype=object)

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


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


Out[38]:
<matplotlib.collections.PathCollection at 0x148b5230>

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 [39]:
datos_filtrados = datos[(datos['Diametro X'] >= 0.9) & (datos['Diametro Y'] >= 0.9)]

Representación de X/Y


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


Out[40]:
<matplotlib.collections.PathCollection at 0x1498ce90>

Analizamos datos del ratio


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


Out[41]:
count    8396.000000
mean        1.019693
std         0.070343
min         0.684334
25%         0.977376
50%         1.014736
75%         1.054927
max         1.762375
dtype: float64

In [42]:
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[42]:
<matplotlib.axes._subplots.AxesSubplot at 0x14890650>

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 [43]:
Th_u = 1.85
Th_d = 1.65

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

In [45]:
data_violations.describe()


Out[45]:
time Tmp Husillo Tmp Nozzle Diametro X Diametro Y MARCHA PARO RPM EXTR RPM TRAC
count 8823.000000 8823.000000 8823.000000 8823.000000 8823.000000 8823 8823 8823.000000 8823.000000
mean 4896.742151 63.943489 136.200317 1.247052 1.198454 1 1 1.929842 3.535221
std 2976.793199 1.183662 8.122307 0.662917 0.667693 0 0 0.264582 1.518911
min 1.000000 58.800000 88.700000 0.014000 0.000342 True True 0.000000 0.000000
25% 2212.500000 63.500000 137.500000 1.287157 1.241589 1 1 2.000000 3.814816
50% 4841.000000 63.900000 138.100000 1.528024 1.494436 1 1 2.000000 4.410560
75% 7347.500000 64.400000 138.600000 1.642723 1.609366 1 1 2.000000 4.410560
max 10431.000000 67.800000 140.300000 2.697952 2.333427 True True 2.000000 4.410560

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


Out[46]:
array([<matplotlib.axes._subplots.AxesSubplot object at 0x149A5A70>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x14C96A70>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x14A7C9B0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x14A74070>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x14CBF350>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x14CDE7D0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x14E66990>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x14E701D0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x14EBA070>], dtype=object)

In [ ]: