#!/usr/bin/env python
# coding: utf-8

# # Pandas 2
# ---

# In[1]:


import os
import pandas as pd
#import seaborn as sns
#import matplotlib.pyplot as plt


# ## Carga de datos 
# ---

# In[43]:


df = pd.read_csv("/home/mydoctor/Documents/03.Trabajos/25.Bootcamp Cámara Comercio Bilbao (310h) 2021-11/Modulo 0 - Introducción/Pandas/Ejercicio/data2.csv", sep="|")


# In[44]:


df


# In[10]:


#Otra forma más elegante de cargar los datos...

# Cambiar por carpeta donde se encuentren los datos
data_dir = '/home/mydoctor/Documents/03.Trabajos/25.Bootcamp Cámara Comercio Bilbao (310h) 2021-11/Modulo 0 - Introducción/Pandas/Ejercicio/'

path = os.path.join(data_dir, 'data2.csv')
try:
    df = pd.read_csv(path, sep="|")  # para cargar csv tabulados, usar sep="\t"
except Exception as e:
    print(e)


# ### Corregimos los errores
# Si hay errores, comprobamos los siguiente:
# * Caracter separador.
# * Caracter decimal.
# * Codificación.

# In[45]:


df.head()


# In[46]:


df_productos.tail(3)


# ### Exploración inicial

# In[47]:


df_productos.info()


# ### Corregimos los tipos de datos
# Modificamos la carga de datos definiendo:
# * Columnas que utilizar.
# * Columnas que parsear a fecha.
# * Tipo del resto de columnas.
# * Eliminar columna 0

# In[48]:


df['Catastro'] = df['Catastro'].astype('string')
df['IdCliente'] = df['IdCliente'].astype('string')
df['Producto'] = df['Producto'].astype('category')
df['TipoProducto'] = df['TipoProducto'].astype('category')


# In[49]:


df.info()


# ### Corregimos el resto de errores
# Si alguna columna no se ha modificado su tipo, puede ser porque contenga errores. Modificamos el tipo indicando que se ignoren los errores.

# In[50]:


df['Fecha'] = pd.to_datetime(df['Fecha'], errors='coerce')


# In[51]:


df.info()


# In[52]:


df = df.drop('Unnamed: 0',axis=1)


# In[ ]:





# In[ ]:





# ## Exploración y modificación
# ---

# In[54]:


# Renombramos columnas
# Catastro renombrar a CatastroMax
# ReferenciaCP renombrar a CPReferenciado
df = df.rename(columns={'Catastro':'CatastroMax','ReferenciaCP':'CPReferenciado'})


# In[55]:


df


# In[72]:


# Generar variables dummies
df_dummies_Producto = pd.get_dummies(df, columns=['Producto'])
df_dummies_Producto.head()


# In[80]:


df_dummies_Producto.info()


# In[74]:


# Voy a generar una columna con supuestos datos de facturación
df_dummies_Producto ['Facturacion'] = df_dummies_Producto['IdCliente'].astype('int') / 40 * 1.3


# In[75]:


df_dummies_Producto.head()


# In[76]:


df_productos_cliente = df_dummies_Producto.groupby(['IdCliente', 'Fecha']).sum().reset_index()
df_productos_cliente.head()


# ## Consultas a dataframes
# ---

# ### Contrataciones del mes de marzo

# In[81]:


df.query('Fecha.dt.month == 4')


# In[82]:


df.query('AltaCliente.dt.day <= 10')
#No funciona pq AltaCliente no es de tipo datetime


# In[83]:


df['AltaCliente'] = pd.to_datetime(df['AltaCliente'], errors='coerce')


# In[85]:


df.info()


# In[90]:


df.query('AltaCliente.dt.day <= 10 or AltaCliente.dt.day>=20')


# ### Consultas más complejas

# In[93]:


producto = 'N01'
df.query('AltaCliente.dt.day <= 10 and Producto == @producto')


# In[98]:


producto = 'N01'
tipoprod = 'Servicio sin cuota'
df.query('AltaCliente.dt.day <= 10 and (Producto == @producto or TipoProducto == @tipoprod)')


# In[102]:


# Extraemos del CatastroMax el código de área
# Para ello eliminamos primero todos los espacios y posteriormente extraemos el texto de las posiciones 3 a 4
df['Provincia'] = df['CatastroMax'].str.replace(" ","")
df['Provincia'] = df['Provincia'].str.slice(3,5)
df.head()


# ### Clientes cuya antiguedad sea anterior al 2010

# In[ ]:





# ### Facturación media del mes de abril del 2020

# In[ ]:





# ### Facturación maxima y minima para Producto N06 de los clientes que no pertenezcan a Bizkaia

# In[ ]:





# ### ¿Influye la antigüedad en el gasto medio? Usa df_productos_cliente ya que incluye una columna de Facturación

# In[ ]:




