# -*- coding: utf-8 -*-
"""DatasetsWineReviews.ipynb

Automatically generated by Colaboratory.

Original file is located at
    https://colab.research.google.com/drive/11xfAptUAJEH-Xj9iHV-f_MaZKD9tnoHZ

Enlace a archivo guardado en drive
"""

from google.colab import drive
drive.mount("/content/drive")
import pandas as pd
import numpy as np

"""Carga del dataset"""

datos = pd.read_csv("/content/drive/MyDrive/Colab Notebooks/Datasets Kaggle/winemag-data_first150k.csv", index_col=0)
datos.head(5)

"""Informacion del datasets En vscode para mostrar los datos prodriamos hacerlo con un print(datos.shape)
Nos indica el # de filas, y el # de columnas


"""

datos.shape

datos.info()

datos.describe()

datos.price.describe()

datos.index

datos.columns

columnas = datos.columns
columnas

type(columnas)

datos.tail(3)

"""Obtencion de valores"""

datos.country

datos['province']

"""Obtener datos mediante un indice - iloc Tomariamos toda la fila ":", y la columna 1"""

datos.iloc[:,1]

"""Aqui tendriamos las 3 primeras filas, y la columna descripcion"""

datos.iloc[:3,1]

"""Para determinar que fila queremos ver, y la columna """

datos.iloc[[2,4,10],0]

"""Para poder ver los ultimos valores de la fila, y ver toda la columnas"""

datos.iloc[-6:]

"""Mostrar datos por indices, en este caso el 4 y el nombre del pais en esta caso"""

datos.loc[4,"country"]

"""Obtener datos por el intervalo que hemos"""

datos.loc[1:5,["country", "points"]]

"""Indicamos que el indice sera el pais y mostramos los 3 primeros"""

# datos = datos.set_index(["country"])
datos.head(3)

"""Como filtrar y seleccionar"""

datos.country == "US"

"""Para obtener el datasets con la condicion filtrada en vez del true o false usamos"""

datos.loc[datos.country=="US"]

"""Podemos crear un datasets que se llame datos filtrados"""

datos_filtrados = datos[(datos.points > 90)&(datos.country=="US")]
datos_filtrados.head(5)

"""Obtener valores con isin, para que vea si esta incluido tanto US Y France"""

datos.loc[datos.country.isin(["US","France"])]

"""Buscar datos que no tengan nulos"""

datos.loc[datos.price.notnull()]

"""Obtener datos que son nulos"""

datos.loc[datos.price.isnull()]

"""Asignar valores con una columna nueva"""

datos["Nueva Colummna"] = datos["price"]*3
datos[["price","Nueva Colummna"]]

"""Obtener la media de alguna columna"""

datos.price.mean()

"""Buscar cuantos nulos hay por cada columna"""

columnas_nulos = datos.columns[datos.isnull().any()]
datos[columnas_nulos].isnull().sum()

"""Obtener cuantos nulos hay"""

datos.isnull().sum()

"""Obtener datos sin nulos"""

datos_sin_nulos = datos.dropna(how="any")
datos_sin_nulos.isnull().sum()

datos.shape

datos_sin_nulos.shape

"""Obtener valores unicos"""

datos.country.unique()

"""Ver cuantas veces se repite un valor dentro la misma columna"""

datos.country.value_counts()

"""Para obtener la media o mediana de los puntos"""

media_puntos= datos.points.mean()
mediana_puntos =datos.points.median()

media_puntos

mediana_puntos

"""Ver que tan cerca esta los valores de su media"""

datos.points.map(lambda punto: punto - media_puntos)

"""Agrupaciones, en este caso por paises y la suma de puntos"""

agrupados = datos.groupby("country").points.count()
agrupados

"""Obtener el precio minimo por pais"""

agrupados = datos.groupby("country").price.min()
agrupados

"""Devolver un resumen estadistico con un minimo y un maximo"""

datos.groupby(["country", "points"]).price.agg([min,max])

"""Ordenar los datos por puntos"""

datos.sort_values(by="points", ascending=True)

"""Ver el tipo de dato que tenemos por columna"""

datos.price.dtype

"""Ver el tipo de datos de todos"""

datos.dtypes

"""Cambiar el tipo de dato a alguna columna en especifico"""

datos.points = datos.points.astype("float64")
datos.points.dtype

"""Reemplazar datos"""

datos.country = datos.country.replace("US", "EEUU")
datos.head()

"""En caso que tengamos nulo podemos hacerlo con este ejemplo y asi evitamos perder tantos valores"""

datos.country.fillna("Sin datos")

"""Cambiar los nombres de las columnas, entre llaves ponemos un diccionario



"""

datos.rename(columns={"points":"puntos", "price":"precio"})

"""Podemos cambiar tambien los indices"""

datos.rename(index={1:"segunda fila",2:"tercera fila"})

"""Poner nombre a los encabezados a los ejes"""

datos.rename_axis("vinos", axis="rows").rename_axis("campos", axis="columns")

"""Combinar 2 dataframe"""

datosUSA= datos[datos.country=="EEUU"]
datosFrancia = datos[datos.country=="France"]

datosUSA.head(2)

datosFrancia.head()

datosUnidos = pd.concat([datosUSA,datosFrancia])
datosUnidos.head()

datosUnidos.tail()

"""USO DE GRAFICOS CON SEABORN"""

# Commented out IPython magic to ensure Python compatibility.
import matplotlib.pyplot as plt
import seaborn as sns
#Esta linea solo se añade en caso que estemos en un notebook
# %matplotlib inline

from seaborn import lmplot

lmplot("points", "price",data=datos,fit_reg=False)

sns.heatmap(datos.isnull())

lmplot("points", "price",data=datos,fit_reg=True)

"""Histograma"""

sns.displot(datos["points"],bins=10,kde=True)

"""Borrado los datos faltantes de winery"""

sns.displot(datos["winery"].dropna())

sns.boxplot(x="points",y="price",data=datos)

"""Grafica de violin"""

from seaborn import violinplot
sns.set(rc={"figure.figsize":(10,6)})
violinplot(x="points", y="price",data=datos)

"""Grafica con piplot"""

fig = plt.figure(figsize=(10,7))
sns.pairplot(datos,hue="country")