import pandas as pd
df = pd.read_csv("cars.csv")
df
df.dtypes
df.describe()
import pandas as pd
df = pd.read_csv('cars.csv')
#Media
df['price_usd'].mean()
#Mediana
#Grafico en pandas de un histograma de frecuencia
df['price_usd'].plot.hist(bins=20) #bins da los intervalos de valores en los que se trazará el diagrama
import seaborn as sns
#distribution plot para hacer un histograma con las marcas de carros
sns.displot(df, x='price_usd', hue='manufacturer_name') #hue crea un histograma por cada una de las categorías de manufactorer_name
#Histograma, de barras apiladadf con el tipo de combustible que necesitan
sns.displot(df, x='price_usd', hue='engine_type', multiple='stack')
df.groupby('engine_type').count()
Q7_df = df[(df['manufacturer_name'] == 'Audi') & (df['model_name'] == 'Q7')]
sns.histplot(Q7_df, x='price_usd', hue='year_produced')
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('cars.csv')
df['price_usd'].std()
#Rango = valor max - valor min
rango = df['price_usd'].max() - df['price_usd'].min()
rango
#Quartiles
median = df['price_usd'].median()
Q1 = df['price_usd'].quantile(q=0.25) #toma el primer 25% de todos los datos
Q3 = df['price_usd'].quantile(q=0.75)
min_val = df['price_usd'].quantile(q=0)
max_val = df['price_usd'].quantile(q=1)
print(min_val, Q1, median, Q3, max_val)
iqr = Q3 - Q1
iqr
minlimit = Q1 - 1.5*iqr
maxlimit = Q3 + 1.3*iqr
print(minlimit, maxlimit)
sns.histplot(df['price_usd'])
sns.boxplot(df['price_usd'])
sns.boxplot(x='engine_fuel', y='price_usd', data=df)
import pandas as pd
import seaborn as sns
iris = sns.load_dataset('iris')
iris.head()
sns.scatterplot(data=iris, x='sepal_length', y='petal_length', hue='species')
sns.jointplot(data=iris, x='sepal_length', y='petal_length', hue='species')
sns.boxplot(data=iris, x='species', y='sepal_length')
sns.barplot(data=iris, x='species', y='sepal_length')
import timeit #para medir el tiempo de ejecución de los modelos
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets, linear_model #datasets para descargar un modelo y linear_model para hacer una regresión lineal
X, y = datasets.load_diabetes(return_X_y=True) #carga el dataset
raw = X[:, None, 2] #transformación en las dimensiones para que se ajuste al formato de entrada del preprocesamiento
#reglas de escalamiento lineal, aplicamos max-min
max_raw = max(raw)
#raw = datos crudos
min_raw = min(raw)
scaled = (2*raw - max_raw - min_raw)/(max_raw - min_raw)
# es importante tener una noción de los datos originales antes y después de escalarlos:
fig, axs = plt.subplots(2, 1, sharex=True)
axs[0].hist(raw)
axs[1].hist(scaled)
# modelos para entrenamiento
def train_raw():
linear_model.LinearRegression().fit(raw, y)
def train_scaled():
linear_model.LinearRegression().fit(scaled, y)
raw_time = timeit.timeit(train_raw, number=100) #repite la ejecución del código 100 veces y sobre eso calcula el tiempo
scaled_time = timeit.timeit(train_scaled, number=100)
print(f'train raw: {raw_time}')
print(f'train scaled: {scaled_time}')
df = pd.read_csv('cars.csv')
# Acá se puede apreciar como la distribución está fuertemente sesgada
df.price_usd.hist()
# Transformación con tanh(x)
# Esta línea toma la columna y le aplica a toda una función matemática
p = 10000
df.price_usd.apply(lambda x: np.tanh(x/p)).hist()
import pandas as pd
df = pd.read_csv('cars.csv')
pd.get_dummies(df['engine_type'])
import sklearn.preprocessing as preprocessing
encoder = preprocessing.OneHotEncoder(handle_unknown='ignore')
encoder.fit(df[['engine_type']].values)
encoder.transform([['gasoline'],['diesel'], ['aceite']]).toarray()
encoder.fit(df[['year_produced']].values)
encoder.transform([[2016], [2009], [190]]).toarray()
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import StandardScaler
iris = sns.load_dataset('iris')
sns.pairplot(iris, hue='species') #este gráfico no sirve si hay demasiadas variables
iris.columns
scaler = StandardScaler()
scaled = scaler.fit_transform(
iris[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]
)
scaled.T
covariance_matrix = np.cov(scaled.T)
covariance_matrix
# Mapa de calor de la matriz de covarianza
plt.figure(figsize=(10,10))
sns.set(font_scale=1.5)
hm = sns.heatmap(covariance_matrix,
cbar=True,
annot=True,
square=True,
fmt='.2f',
annot_kws={'size': 12},
yticklabels=['sepal_length', 'sepal_width', 'petal_length', 'petal_width'],
xticklabels=['sepal_length', 'sepal_width', 'petal_length', 'petal_width'])