Está en la página 1de 20

16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [ ]: #En un notebook desarrolle un modelo o modelos que permita predecir el nivel de presión sonora a escala en decibelio
#En cada caso debe colocar la forma en la que se recuperan los datos, análisis exploratorio de los datos, transforma
#de datos si fuera el caso, selección del conjunto de entrenamiento y prueba, evaluación del modelo o modelos
#desarrollados y conclusión sobre el mejor modelo elegido

In [ ]: #importar las librerias


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

Recuperación de datos

In [ ]: #datos=pd.read_csv('airfoil_self_noise.dat')
columnas = ['Frecuencia',
'AnguloDeAtaque',
'LongitudDeLaCuerda',
'VelocidadDeFlujoLibre',
'EspesorDeDesplazamiento',
'NivelDePresion']

datos = pd.read_csv('airfoil_self_noise.dat', sep='\t', names=columnas)

In [ ]: datos.head()

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 1/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [5]: datos.tail()

Out[5]:
Frecuencia AnguloDeAtaque LongitudDeLaCuerda VelocidadDeFlujoLibre EspesorDeDesplazamiento NivelDePresion

1498 2500 15.6 0.1016 39.6 0.052849 110.264

1499 3150 15.6 0.1016 39.6 0.052849 109.254

1500 4000 15.6 0.1016 39.6 0.052849 106.604

1501 5000 15.6 0.1016 39.6 0.052849 106.224

1502 6300 15.6 0.1016 39.6 0.052849 104.204

In [6]: type(datos)

Out[6]: pandas.core.frame.DataFrame

In [7]: datos.info()

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 1503 entries, 0 to 1502

Data columns (total 6 columns):

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 Frecuencia 1503 non-null int64

1 AnguloDeAtaque 1503 non-null float64

2 LongitudDeLaCuerda 1503 non-null float64

3 VelocidadDeFlujoLibre 1503 non-null float64

4 EspesorDeDesplazamiento 1503 non-null float64

5 NivelDePresion 1503 non-null float64

dtypes: float64(5), int64(1)

memory usage: 70.6 KB

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 2/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [8]: datos.describe()

Out[8]:
Frecuencia AnguloDeAtaque LongitudDeLaCuerda VelocidadDeFlujoLibre EspesorDeDesplazamiento NivelDePresion

count 1503.000000 1503.000000 1503.000000 1503.000000 1503.000000 1503.000000

mean 2886.380572 6.782302 0.136548 50.860745 0.011140 124.835943

std 3152.573137 5.918128 0.093541 15.572784 0.013150 6.898657

min 200.000000 0.000000 0.025400 31.700000 0.000401 103.380000

25% 800.000000 2.000000 0.050800 39.600000 0.002535 120.191000

50% 1600.000000 5.400000 0.101600 39.600000 0.004957 125.721000

75% 4000.000000 9.900000 0.228600 71.300000 0.015576 129.995500

max 20000.000000 22.200000 0.304800 71.300000 0.058411 140.987000

In [9]: datos.columns

Out[9]: Index(['Frecuencia', 'AnguloDeAtaque', 'LongitudDeLaCuerda',

'VelocidadDeFlujoLibre', 'EspesorDeDesplazamiento', 'NivelDePresion'],

dtype='object')

Análisis de Datos Exploratorio

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 3/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [10]: sns.pairplot(datos)

Out[10]: <seaborn.axisgrid.PairGrid at 0x21d45850fd0>

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 4/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 5/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [11]: sns.displot(datos['NivelDePresion'])

Out[11]: <seaborn.axisgrid.FacetGrid at 0x21d48342d60>

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 6/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 7/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [12]: sns.histplot(datos['NivelDePresion'],bins=30)

Out[12]: <AxesSubplot:xlabel='NivelDePresion', ylabel='Count'>

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 8/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [13]: datos.corr()

Out[13]:
Frecuencia AnguloDeAtaque LongitudDeLaCuerda VelocidadDeFlujoLibre EspesorDeDesplazamiento NivelDePresion

Frecuencia 1.000000 -0.272765 -0.003661 0.133664 -0.230107 -0.390711

AnguloDeAtaque -0.272765 1.000000 -0.504868 0.058760 0.753394 -0.156108

LongitudDeLaCuerda -0.003661 -0.504868 1.000000 0.003787 -0.220842 -0.236162

VelocidadDeFlujoLibre 0.133664 0.058760 0.003787 1.000000 -0.003974 0.125103

EspesorDeDesplazamiento -0.230107 0.753394 -0.220842 -0.003974 1.000000 -0.312670

NivelDePresion -0.390711 -0.156108 -0.236162 0.125103 -0.312670 1.000000

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 9/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [14]: sns.heatmap(datos.corr(),annot=True)

Out[14]: <AxesSubplot:>

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 10/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

Entrenando el Modelo de Regresión Lineal

arreglos X e y

In [18]: X = datos[['Frecuencia', 'AnguloDeAtaque', 'LongitudDeLaCuerda',


'VelocidadDeFlujoLibre', 'EspesorDeDesplazamiento']]
y = datos['NivelDePresion']

Dividir datos de entrenamiento y prueba

In [19]: from sklearn.model_selection import train_test_split

In [20]: X_train, X_test, y_train, y_test = train_test_split(X,


y,
test_size=0.3,
random_state=50)

Crear y Entrenar el Modelo

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 11/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [21]: from sklearn.linear_model import LinearRegression


lm = LinearRegression()
lm.fit(X_train,y_train)

Out[21]: ▾ LinearRegression
LinearRegression()

Evaluación del Modelo

In [22]: # imprime el interceptor


print("Beta 0 =",lm.intercept_)

Beta 0 = 133.42275287577456

In [23]: X.columns

Out[23]: Index(['Frecuencia', 'AnguloDeAtaque', 'LongitudDeLaCuerda',

'VelocidadDeFlujoLibre', 'EspesorDeDesplazamiento'],

dtype='object')

In [24]: lm.coef_

Out[24]: array([-1.27074275e-03, -4.92657276e-01, -3.63405069e+01, 9.33080236e-02,

-1.23542078e+02])

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 12/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [25]: coeff_df = pd.DataFrame(lm.coef_,index=X.columns,columns=['Coeficiente'])


coeff_df

Out[25]:
Coeficiente

Frecuencia -0.001271

AnguloDeAtaque -0.492657

LongitudDeLaCuerda -36.340507

VelocidadDeFlujoLibre 0.093308

EspesorDeDesplazamiento -123.542078

Predicciones de nuestro modelo


In [26]: X_test.head()

Out[26]:
Frecuencia AnguloDeAtaque LongitudDeLaCuerda VelocidadDeFlujoLibre EspesorDeDesplazamiento

914 3150 15.4 0.0508 39.6 0.028259

959 2500 19.7 0.0508 39.6 0.036484

1010 4000 4.8 0.0254 71.3 0.000849

49 250 0.0 0.3048 31.7 0.003313

1317 8000 3.3 0.1016 55.5 0.002211

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 13/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [27]: predictions = lm.predict(X_test)


predictions

Out[27]: array([120.1906785 , 117.88213847, 131.59999828, 124.57709213,

122.84429016, 127.48052377, 114.15288263, 113.07275129,

127.38655778, 119.45519668, 124.55981656, 120.3950623 ,

123.41928375, 118.57569199, 126.15844333, 129.45445637,

131.98111373, 122.14774273, 124.41747709, 125.35651298,

123.55045957, 130.54009865, 123.99818066, 118.83488211,

131.47513457, 137.12144282, 123.81824777, 131.4218037 ,

125.24245181, 120.58512854, 126.2955933 , 124.53816767,

125.15594936, 132.12940703, 124.21702908, 124.47840222,

126.6565184 , 121.33742683, 123.18419634, 123.5136989 ,

128.85081844, 132.66417972, 126.72235947, 126.88424784,

119.70147066, 132.63234403, 125.00788755, 116.56729385,

127.49409786, 125.71215615, 127.2446465 , 125.14322378,

131.56924127, 127.81159606, 124.97214251, 121.85249623,

133.06905988, 123.49878082, 131.4254287 , 119.14518602,

116.18783885, 132.21436592, 127.9409657 , 126.10701826,

127.3121875 , 131.95501855, 122.09206654, 127.97827408,

125.90514314, 129.19073529, 126.41800428, 116.12253389,

129.94824931, 133.41758885, 126.87535624, 125.80840302,

124 22048198 128 40795286 124 63970442 126 24657687

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 14/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [28]: plt.scatter(y_test,predictions)

Out[28]: <matplotlib.collections.PathCollection at 0x21d4bcacac0>

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 15/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [29]: sns.displot((y_test-predictions),bins=30);

Evaluación del modelo

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 16/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [30]: from sklearn import metrics


print('MAE:', metrics.mean_absolute_error(y_test, predictions))
print('MSE:', metrics.mean_squared_error(y_test, predictions))
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, predictions)))

MAE: 3.7994983691780955

MSE: 23.62962570747061

RMSE: 4.861031341955183

Residuales

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 17/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [31]: sns.displot((y_test-predictions),bins=50,kde=True);

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 18/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

Conclusiones

In [32]: coeff_df = pd.DataFrame(lm.coef_,X.columns,columns=['Coeficiente'])


coeff_df

Out[32]:
Coeficiente

Frecuencia -0.001271

AnguloDeAtaque -0.492657

LongitudDeLaCuerda -36.340507

VelocidadDeFlujoLibre 0.093308

EspesorDeDesplazamiento -123.542078

Se escogió el modelo de Regresion Lineal porque para la prediccion de datos de la presión esta en base a otras entradas, dando como
resultado que la carateristica de velocidad de flujo libre es la que tiene mayor impacto para el aumento de la presion sonora y el espesor de
desplazamiento en el que tiene menor impacto para el aumento de la presion sonora

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 19/20


16/9/22, 13:01 AGUERO_PREDICCION DEL NIVEL DE PRESION - Jupyter Notebook

In [ ]:

localhost:8888/notebooks/Downloads/AGUERO_PREDICCION DEL NIVEL DE PRESION.ipynb 20/20

También podría gustarte