school = 'platzi'
print(school) # Incluir la variable declarada anteriormente.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# agrega librerías que necesites
import urllib.request as Req
import plotly.express as px
import plotly.graph_objects as go
# import plotly.offline as pyo # Esta comentada esta libreria ya que Deepnote no soporta la misma
# pyo.init_notebook_mode()
print(f'''
Se agregaron las librerias de visualizacion de plotly ya que al permitir interaccion con los datos
son mas de mi agrado y de los que visualizaran por primera vez este proyecto.
''')
'''
En caso de correr este programa en un entorno web como GitHub, DeepNote, etc, puede optar por comentar las lineas
de este bloque que se marcaran con un '#' al final para que al correr este bloque tome directamente los
archivos.csv de los archivos cargados a esta carpeta.
'''
url_wine_red = r'https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv' #
url_wine_white = r'https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv' #
Req.urlretrieve(url_wine_red, r'winequality-red.csv') #
archivo_red = r'winequality-red.csv'
Req.urlretrieve(url_wine_white, r'winequality-white.csv') #
archivo_white = r'winequality-white.csv'
red = pd.read_csv(archivo_red, delimiter=';')
white = pd.read_csv(archivo_white, delimiter=';')
# Esta variable la creamos para darle un efecto de gradiente a nuestros DataFrames
# cm = sns.color_palette('blend:white,green', as_cmap=True)
# Pero en lo personal no me gusto, por lo cual opte por usar 'coolwarm' directamente.
## usar 'coolwarm' u otra escala de color presente en la documentacion: https://matplotlib.org/stable/tutorials/colors/colormaps.html
red.head().style.background_gradient(cmap = 'coolwarm', axis=None)
white.head().style.background_gradient(cmap = 'coolwarm', axis=None)
red['category']='red'
white['category']='white'
white.head().style.background_gradient(cmap = 'coolwarm', axis=None)
# total_wine = red.append(white, ignore_index=True)
# la funcion .append esta en desuso y la nueva funcion para esto es pd.concat, por esto no se uso.
df = pd.concat([red, white]).reset_index(drop=True)
df.head().style.background_gradient(cmap = 'coolwarm', axis=None)
df.shape
df.info()
df.describe().style.background_gradient(cmap = 'coolwarm', axis=None)
quality = df['quality']
quality
quality.value_counts()
# fig = px.bar(x=df.value_counts('quality').index, y=df.value_counts('quality'))
fig = px.bar(x=quality.value_counts().index,
y=quality.value_counts(),
color=quality.value_counts(),
color_continuous_scale='Rainbow',
opacity=0.8)
fig.update_layout(title = 'Cantidad de cada valor de calidad agrupados',
font = dict(family = 'verdana', size = 16, color = 'white'),
template = 'plotly_dark',
height = 500,
width = 1000,
xaxis_title="Calidad del vino",
yaxis_title="Cantidad")
fig.show()
# Aqui luego de un par de busquedas logre encontrar que tenemos dos alternativas para hacer esto:
# df['quality_category'] = df['quality'].apply(lambda x: 'High' if x >= 7 else ('Medium' if x >= 5 else 'Poor'))
# df.tail()
################################################################
df['quality_category'] = np.select([df.quality>=7,
df.quality<=4],
['High', 'Poor'],
default="Medium")
df.tail().style.background_gradient(cmap = 'coolwarm', axis=None)
df.quality_category = df['quality_category'].astype('category')
df.info()
fig = px.bar(x=df.value_counts('quality_category').index,
y=df.value_counts('quality_category'),
color_continuous_scale='Rainbow',
color=df.value_counts('quality_category'),
opacity=0.8)
fig.update_layout(title = 'Cantidad de cada valor de calidad agrupados',
font = dict(family = 'verdana', size = 16, color = 'white'),
template = 'plotly_dark',
height = 500,
width = 1000,
xaxis={'categoryorder':'category descending'},
xaxis_title="Calidad del vino",
yaxis_title="Cantidad")
fig.show()
df.describe().style.background_gradient(cmap = 'coolwarm', axis=None)
fig = px.violin(df,
x='quality_category',
y='volatile acidity',
color = 'quality_category',
box=True,
points="all",
hover_data=df.columns,
color_discrete_sequence=['rgb(175, 100, 88)', '#479B55', '#FA0087'])
fig.update_layout(title = 'Grafica para determinar outliers',
font = dict(family = 'verdana', size = 16, color = 'white'),
template = 'plotly_dark',
height = 500,
width = 900,
legend_bgcolor='rgb(117, 112, 179)')
fig.show()
### 3. Elimina los outliers de ser necesario en la siguiente celda.
print('''No es necesario eliminar los outliers, es mejor aplicar otras tecnicas para que no afecten
nuestras conclusiones, en caso de requerirse.''')
df.corr(method ='pearson').style.background_gradient(cmap = 'coolwarm', axis=None)
# Por defecto usa el metodo de 'pearson' si se deja en blanco dentro
df.corr(method ='kendall').style.background_gradient(cmap = 'coolwarm', axis=None)
df.corr(method ='spearman').style.background_gradient(cmap = 'coolwarm', axis=None)
fig1 = px.imshow(df.corr(),
color_continuous_scale='Portland')
fig1.update_layout(title = 'Heatmaps de correlacion de nuestro dataset por metodo Pearson',
font = dict(family = 'verdana', size = 16, color = 'white'),
template = 'plotly_dark',
height = 750,
width = 900)
fig1.show()
df.corr()[['quality']].sort_values(by='quality',ascending=False).style.background_gradient(cmap = 'coolwarm',axis=None)
g = sns.pairplot(df,
height=1.5,
corner=True,
hue='quality',
kind='scatter',
palette='Set2')
g.fig.set_size_inches(16,8)
# g.set(xlim=(0, 18))
g.fig.suptitle('Graficas de todas las variables comparadas con todas las demas variables')
plt.show()
fig1 = px.scatter(df,
x='citric acid', y='alcohol',
color = 'quality_category',
color_discrete_sequence=['rgb(175, 100, 88)', '#479B55', '#FA0087'],
marginal_x='box',
marginal_y='box',
opacity=0.8)
fig1.update_layout(title='Grafica Acido citrico/Alcohol',
font = dict(family = 'verdana', size = 16, color = 'white'),
template = 'plotly_dark',
height = 500,
width = 900,
legend_bgcolor='rgb(117, 112, 179)')
fig1.show()
columns_corr_high = ['quality','alcohol','citric acid','chlorides','volatile acidity','density']
g = sns.pairplot(df[columns_corr_high],
height=1.5,
corner=True,
hue='quality',
kind='scatter',
palette='Set2')
g.fig.set_size_inches(16,8)
# g.set(xlim=(0, 18))
g.fig.suptitle('Graficas de correlaciones que dieron > 0.00 con respecto a quality')
plt.show()
fig1 = px.violin(df,
x='quality_category',
y='alcohol',
color = 'quality_category',
box=True,
points="all",
hover_data=df.columns,
color_discrete_sequence=['rgb(175, 100, 88)', '#479B55', '#FA0087'])
fig1.update_layout(title = 'Grafica de violin para determionar efecto de la variable Alcohol en la calidad',
font = dict(family = 'verdana', size = 16, color = 'white'),
template = 'plotly_dark',
height = 500,
width = 900,
legend_bgcolor='rgb(117, 112, 179)')
fig1.show()
fig2 = px.violin(df,
x='quality_category',
y='citric acid',
color = 'quality_category',
box=True,
points="all",
hover_data=df.columns,
color_discrete_sequence=['rgb(175, 100, 88)', '#479B55', '#FA0087'])
fig2.update_layout(title = 'Grafica de violin para determionar efecto de la variable Acido citrico en la calidad',
font = dict(family = 'verdana', size = 16, color = 'white'),
template = 'plotly_dark',
height = 500,
width = 950,
legend_bgcolor='rgb(117, 112, 179)')
fig2.show()
fig1 = px.bar(df,
x='quality_category',
y='alcohol',
color='quality_category',
color_discrete_sequence=['rgb(175, 100, 88)', '#479B55', '#FA0087'],
barmode='overlay',
opacity=0.8)
fig1.update_layout(title = 'Grafica de barras para determionar efecto de la variable Alcohol en la calidad',
font = dict(family = 'verdana', size = 16, color = 'white'),
template = 'plotly_dark',
height = 500,
width = 850,
xaxis={'categoryorder':'category descending'},
legend_bgcolor='rgb(117, 112, 179)',
xaxis_title="Calidad",
yaxis_title='Alcohol')
fig1.update_yaxes(ticksuffix = ' grados alcohol')
fig1.update_xaxes(ticksuffix = ' "Calidad del vino"')
fig1.show()
fig2 = px.bar(df,
x='quality_category',
y='citric acid',
color='quality_category',
color_discrete_sequence=['rgb(175, 100, 88)', '#479B55', '#FA0087'],
barmode='overlay',
opacity=0.8)
fig2.update_layout(title = 'Grafica de barras para determionar efecto de la variable Acido citrico en la calidad',
font = dict(family = 'verdana', size = 16, color = 'white'),
template = 'plotly_dark',
height = 600,
width = 1000,
xaxis={'categoryorder':'category descending'},
legend_bgcolor='rgb(117, 112, 179),
xaxis_title="Calidad",
yaxis_title='Acido citrico')
fig2.show()