0% encontró este documento útil (0 votos)
166 vistas11 páginas

Eda en Python Con Colab

El documento detalla un análisis exploratorio de datos (EDA) sobre un conjunto de datos de automóviles extraído de Kaggle, que contiene 11,914 entradas y 16 columnas. Se describen los pasos para cargar librerías, datos, verificar tipos de datos, eliminar columnas irrelevantes, renombrar columnas, eliminar duplicados y valores nulos, así como detectar y manejar valores atípicos. Finalmente, se presentan estadísticas descriptivas y visualizaciones para comprender mejor las características del conjunto de datos.

Cargado por

Helyana Figueroa
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
166 vistas11 páginas

Eda en Python Con Colab

El documento detalla un análisis exploratorio de datos (EDA) sobre un conjunto de datos de automóviles extraído de Kaggle, que contiene 11,914 entradas y 16 columnas. Se describen los pasos para cargar librerías, datos, verificar tipos de datos, eliminar columnas irrelevantes, renombrar columnas, eliminar duplicados y valores nulos, así como detectar y manejar valores atípicos. Finalmente, se presentan estadísticas descriptivas y visualizaciones para comprender mejor las características del conjunto de datos.

Cargado por

Helyana Figueroa
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

TRABAJO FINAL - ANÁLISIS DE DATOS 🪕

keyboard_arrow_down 1. Cargar librerías


Procedimiento: Comenzamos con la carga de las librerías que necesitaremos para este EDA.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt #visualización
from google.colab import files
import seaborn as sns #visualización

keyboard_arrow_down 2. Cargar datos


Procedimiento: se extrajo el conjunto de datos en de autos de Kaggle, el cual está compuesto de 10.000 filas y 10.000 columnas, que
contienen características del automóvil como tipo de combustible y tamaño del motor, transmisión, entre otros.

uploaded = files.upload()

Elegir archivos Ningún archivo seleccionado Upload widget is only available when the cell has been executed in the current browser session. Please rerun this cell to enable.
Saving data.csv to data.csv

data = pd.read_csv("data.csv")
data

Number
Engine Fuel Engine Engine Transmission Vehicle Vehicle highway
Make Model Year Driven_Wheels of Market Category
Type HP Cylinders Type Size Style MPG
Doors

1 premium
Factory Tuner,Luxury,High-
0 BMW Series 2011 unleaded 335.0 6.0 MANUAL rear wheel drive 2.0 Compact Coupe 26
Performance
M (required)

premium
1
1 BMW 2011 unleaded 300.0 6.0 MANUAL rear wheel drive 2.0 Luxury,Performance Compact Convertible 28
Series
(required)

premium
1
2 BMW 2011 unleaded 300.0 6.0 MANUAL rear wheel drive 2.0 Luxury,High-Performance Compact Coupe 28
Series
(required)

premium
1
3 BMW 2011 unleaded 230.0 6.0 MANUAL rear wheel drive 2.0 Luxury,Performance Compact Coupe 28
Series
(required)

premium
1
4 BMW 2011 unleaded 230.0 6.0 MANUAL rear wheel drive 2.0 Luxury Compact Convertible 28
Series
(required)

... ... ... ... ... ... ... ... ... ... ... ... ... ..

premium
4dr
11909 Acura ZDX 2012 unleaded 300.0 6.0 AUTOMATIC all wheel drive 4.0 Crossover,Hatchback,Luxury Midsize 23
Hatchback

data.describe()

Year Engine HP Engine Cylinders Number of Doors highway MPG city mpg Popularity MSRP

count 11914.000000 11845.00000 11884.000000 11908.000000 11914.000000 11914.000000 11914.000000 1.191400e+04

mean 2010.384338 249.38607 5.628829 3.436093 26.637485 19.733255 1554.911197 4.059474e+04

std 7.579740 109.19187 1.780559 0.881315 8.863001 8.987798 1441.855347 6.010910e+04

min 1990.000000 55.00000 0.000000 2.000000 12.000000 7.000000 2.000000 2.000000e+03

25% 2007.000000 170.00000 4.000000 2.000000 22.000000 16.000000 549.000000 2.100000e+04

50% 2015.000000 227.00000 6.000000 4.000000 26.000000 18.000000 1385.000000 2.999500e+04

75% 2016.000000 300.00000 6.000000 4.000000 30.000000 22.000000 2009.000000 4.223125e+04

max 2017.000000 1001.00000 16.000000 4.000000 354.000000 137.000000 5657.000000 2.065902e+06


keyboard_arrow_down 3. Comprobar los tipos de datos
Procedimiento: para poder avanzar es necesario saber con qué tipos de datos trabajaremos, así como las columnas y registros generales, de
manera que podamos aplicar funciones y métodos a fines.

data.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 11914 entries, 0 to 11913
Data columns (total 16 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Make 11914 non-null object
1 Model 11914 non-null object
2 Year 11914 non-null int64
3 Engine Fuel Type 11911 non-null object
4 Engine HP 11845 non-null float64
5 Engine Cylinders 11884 non-null float64
6 Transmission Type 11914 non-null object
7 Driven_Wheels 11914 non-null object
8 Number of Doors 11908 non-null float64
9 Market Category 8172 non-null object
10 Vehicle Size 11914 non-null object
11 Vehicle Style 11914 non-null object
12 highway MPG 11914 non-null int64
13 city mpg 11914 non-null int64
14 Popularity 11914 non-null int64
15 MSRP 11914 non-null int64
dtypes: float64(3), int64(5), object(8)
memory usage: 1.5+ MB

keyboard_arrow_down 4. Eliminar columnas irrelevantes


Procedimiento: comenzamos con la depuración, y este caso utilizamos el método .drop para eliminar columnas que no ocuparemos en el
análisis.

data = data.drop(['Engine Fuel Type', 'Transmission Type', 'Driven_Wheels', 'Number of Doors', 'Market Category', 'Vehicle Size', 'Vehicle Style', 'Popular
data.head(5)

Make Model Year Engine HP Engine Cylinders highway MPG city mpg MSRP

0 BMW 1 Series M 2011 335.0 6.0 26 19 46135

1 BMW 1 Series 2011 300.0 6.0 28 19 40650

2 BMW 1 Series 2011 300.0 6.0 28 20 36350

3 BMW 1 Series 2011 230.0 6.0 28 18 29450

4 BMW 1 Series 2011 230.0 6.0 28 18 34500

print(data.shape)

(11914, 8)

keyboard_arrow_down 5. Cambiar nombre de las columnas (mejora legibilidad de los datos)


Procedimiento: siguiendo con la limpieza de los datos, procedemos a renombrar algunas columnas con el método .rename para tener un
ambiente de trabajo más práctico.

data = data.rename(columns={'Engine HP': 'HP', 'Engine Cylinders' : 'Cylinders', 'Number of Doors' : 'Doors', 'highway MPG': 'MPG', 'MSRP': 'Precio'})
data.head(5)
Make Model Year HP Cylinders MPG city mpg Precio

0 BMW 1 Series M 2011 335.0 6.0 26 19 46135

1 BMW 1 Series 2011 300.0 6.0 28 19 40650

2 BMW 1 Series 2011 300.0 6.0 28 20 36350

3 BMW 1 Series 2011 230.0 6.0 28 18 29450

4 BMW 1 Series 2011 230.0 6.0 28 18 34500

keyboard_arrow_down 6. Soltar filas duplicadas


Procedimiento: las filas duplicadas no nos permiten tener una visión totalmente clara de los datos. Por lo tanto, las identificamos y
eliminamos.

# Número total de filas y columnas


data.shape

(11914, 8)

duplicate_rows_data = data[data.duplicated()]
print('number of duplicate rows: ', duplicate_rows_data.shape)

number of duplicate rows: (1016, 8)

#Número total de filas


data.count()

Make 11914
Model 11914
Year 11914
HP 11845
Cylinders 11884
MPG 11914
city mpg 11914
Precio 11914
dtype: int64

#Eliminando los datos duplicados


data =data.drop_duplicates()
data.head()

Make Model Year HP Cylinders MPG city mpg Precio

0 BMW 1 Series M 2011 335.0 6.0 26 19 46135

1 BMW 1 Series 2011 300.0 6.0 28 19 40650

2 BMW 1 Series 2011 300.0 6.0 28 20 36350

3 BMW 1 Series 2011 230.0 6.0 28 18 29450

4 BMW 1 Series 2011 230.0 6.0 28 18 34500

#Número de filas después de eliminar los duplicados


data.count()

Make 10898
Model 10898
Year 10898
HP 10829
Cylinders 10868
MPG 10898
city mpg 10898
Precio 10898
dtype: int64

keyboard_arrow_down 7. Descartar valores faltantes o nulos


Procedimiento: asimismo, los valores nulos o “nan” son vacíos que no aportan, sino más bien entorpecen el análisis, así que los
identificamos y los eliminamos.
print(data.isnull().sum())

Make 0
Model 0
Year 0
HP 69
Cylinders 30
MPG 0
city mpg 0
Precio 0
dtype: int64

#Eliminando valores faltantes


data = data.dropna()
data.count()

Make 10800
Model 10800
Year 10800
HP 10800
Cylinders 10800
MPG 10800
city mpg 10800
Precio 10800
dtype: int64

#Ahora nos queda así...


print(data.isnull().sum())

Make 0
Model 0
Year 0
HP 0
Cylinders 0
MPG 0
city mpg 0
Precio 0
dtype: int64

keyboard_arrow_down 8. Detección de valores atípicos


Procedimiento: siguiendo con el proceso de depuración, verificamos si tenemos outliers dentro de cada entidad a través de diagramas de
bigote con Malplotlib y realizamos posteriormente algunos cálculos estadísticos para eliminarlos, como se puede observar en los siguientes
gráficos.

plt.boxplot(data['Year'], vert = False)


plt.show()

plt.boxplot(data['HP'], vert = False)


plt.show()
plt.boxplot(data['Cylinders'], vert = False)
plt.show()

plt.boxplot(data['MPG'], vert = False)


plt.show()

plt.boxplot(data['city mpg'], vert = False)


plt.show()

plt.boxplot(data['Precio'], vert = False)


plt.show()
Q1 = data.quantile(0.25)
Q3 = data.quantile(0.75)
IRQ = Q3 -Q1
print(IRQ)

Year 9.0
HP 129.0
Cylinders 2.0
MPG 8.0
city mpg 6.0
Precio 21305.0
dtype: float64

data = data[~((data < (Q1 - 1.5 * IRQ)) | (data > (Q3+ 1.5 * IRQ))).any(axis = 1)]
data.shape

/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:1: FutureWarning: Automatic reindexing on DataFrame vs Series comparisons is deprecated an


"""Entry point for launching an IPython kernel.
(9171, 8)

Q1 = data['Precio'].quantile(0.25)
print('Primer Cuartil', Q1)

Primer Cuartil 22102.5

Q3 = data['Precio'].quantile(0.75)
print('Tercer Cuartil', Q3)

Tercer Cuartil 39777.5

IQR = Q3 - Q1
print('Rango Intercuartil', IQR)

Rango Intercuartil 17675.0

BI_Calculado = (Q1 - 1.5 * IQR)


print('Bigote Inferior Calculado \n', BI_Calculado)

Bigote Inferior Calculado


-4410.0

BS_Calculado = (Q3 + 1.5 * IQR)


print('Bigote Superior Calculado \n', BS_Calculado)

Bigote Superior Calculado


66290.0

ubica_outliers = (data['Precio'] < BI_Calculado) | (data['Precio'] > BS_Calculado)


print('\n Ubicacion de Outliers\n', ubica_outliers)

Ubicacion de Outliers
0 False
1 False
2 False
3 False
4 False
...
11909 False
11910 False
11911 False
11912 False
11913 False
Name: Precio, Length: 9171, dtype: bool

outliers = data[ubica_outliers]
print('\n Lista de Outliers \n', outliers)

Lista de Outliers
Make Model Year HP Cylinders MPG \
475 Alfa Romeo 4C 2015 237.0 4.0 34
506 BMW 5 Series Gran Turismo 2015 445.0 8.0 24
508 BMW 5 Series Gran Turismo 2015 445.0 8.0 25
510 BMW 5 Series Gran Turismo 2016 445.0 8.0 24
514 BMW 5 Series Gran Turismo 2017 445.0 8.0 24
... ... ... ... ... ... ...
11859 GMC Yukon XL 2017 420.0 8.0 20
11868 GMC Yukon 2015 420.0 8.0 21
11871 GMC Yukon 2016 420.0 8.0 21
11875 GMC Yukon 2017 420.0 8.0 20
11902 BMW Z4 2016 335.0 6.0 24

city mpg Precio


475 24 68400
506 16 71400
508 16 69100
510 16 72500
514 15 72500
... ... ...
11859 14 71665
11868 14 67520
11871 15 68325
11875 15 68965
11902 17 66350

[165 rows x 8 columns]

outliers_ordenados = outliers.sort_values('Precio')
outliers_ordenados

Make Model Year HP Cylinders MPG city mpg Precio

737 Porsche 718 Cayman 2017 350.0 4.0 26 20 66300

529 BMW 5 Series 2016 443.0 8.0 25 17 66300

4341 Ford Expedition 2017 365.0 6.0 20 15 66347

7953 Infiniti QX80 2016 400.0 8.0 19 13 66350

7952 Infiniti QX80 2015 400.0 8.0 20 14 66350

... ... ... ... ... ... ... ... ...

4292 Lotus Exige 2009 257.0 4.0 26 20 74995

10021 Cadillac STS-V 2007 469.0 8.0 19 12 75010

3027 Chevrolet Corvette 2017 460.0 8.0 25 16 75195

2388 Porsche Cayman 2015 340.0 6.0 26 19 75200

2391 Porsche Cayman 2016 340.0 6.0 26 19 75200

165 rows × 8 columns

#quitando outliers
ubica_sin_out = (data['Precio'] >= BI_Calculado) & (data['Precio'] <= BS_Calculado)
sin_outliers = data[ubica_sin_out]
sin_outliers
Make Model Year HP Cylinders MPG city mpg Precio

0 BMW 1 Series M 2011 335.0 6.0 26 19 46135

1 BMW 1 Series 2011 300.0 6.0 28 19 40650

2 BMW 1 Series 2011 300.0 6.0 28 20 36350

3 BMW 1 Series 2011 230.0 6.0 28 18 29450

4 BMW 1 Series 2011 230.0 6.0 28 18 34500

... ... ... ... ... ... ... ... ...

11909 Acura ZDX 2012 300.0 6.0 23 16 46120

11910 Acura ZDX 2012 300.0 6.0 23 16 56670

11911 Acura ZDX 2012 300.0 6.0 23 16 50620

11912 Acura ZDX 2013 300.0 6.0 23 16 50920

11913 Lincoln Zephyr 2006 221.0 6.0 26 17 28995

9006 rows × 8 columns

plt.title('sin_outliers')
plt.boxplot(sin_outliers['Precio'], vert = False)
plt.show()

9. Graficar distintas características entre si (dispersión), contra frecuencia


keyboard_arrow_down (histograma).
Procedimiento: finalmente, culminamos el proceso de análisis con los gráficos adecuados para la muestra. En este caso, se aplicó el
histograma y el gráfico de dispersión con Matplotlib.

#Histograma
data.Model.value_counts().nlargest(40).plot(kind='bar', figsize=(20,10))
plt.title('Número de Autos por Modelo')
plt.ylabel('number of cars')
plt.ylabel('1.995 - 2.015');
#Histograma
data.Make.value_counts().nlargest(40).plot(kind='bar', figsize=(20,10))
plt.title('Número de Autos por Marca')
plt.ylabel('number of cars')
plt.ylabel('1.995 - 2.015');
fig, ax = plt.subplots(figsize=(20, 10))
ax.scatter(x = data['Precio'], y = data['Make'])
plt.xlabel("Precio")
plt.ylabel("Make")

plt.show()

fig, ax = plt.subplots(figsize=(20, 10))


ax.scatter(x = data['Precio'], y = data['Year'])
plt.xlabel("Precio")
plt.ylabel("Año")

plt.show()
plt.figure(figsize=(20,15))
c=sin_outliers.corr()
sns.heatmap(c, cmap='BrBG', annot=True)

<matplotlib.axes._subplots.AxesSubplot at 0x7f3afbcda2d0>

También podría gustarte