"""

![Imagen2](https://i.imgur.com/2NwRKmD.png)

<center> <h1> CURSO: INTRODUCCIÓN AL LENGUAJE PYTHON </h1></center>
<br>
<center><h1> CAPÍTULO 2: ESTRUCTURAS Y MANIPULACIÓN DE DATOS</h1></center>

---
### TABLA DE CONTENIDO


### 1. [Estructuras de datos](#ESTRUCTURAS-DE-DATOS)

* Tuplas
* Listas
* Diccionarios

### 2. [Lectura de datos](#LECTURA-DE-DATOS)

* Formato **TXT**
* Formato **CSV**
* Formato **EXCEL**
   
### 3.  [Resumen de datos](#RESUMEN-DE-DATOS)

### 4.  [Trabajo 02](#Trabajo-02)


"""
"""
# **ESTRUCTURAS DE DATOS**
---
##  1. **TUPLAS:** 
Conjunto ordenado de valores de cualquier objeto: un número, una cadena, una función, una clase, una instancia, etc.

## **Definición:**

        NombreTupla = (valores)
"""
"""
**Ejemplo:** Creación de las variables
"""
Nombre='Cesar Guevara'
Edad=33
talla=1.73
Casado=False
Edad
"""
Generando una **tupla** usando las variables creadas
"""
tupla1=(Nombre,Edad,talla,Casado)
tupla1
"""
Usando el comando **type** podemos saber el tipo de estructura del objeto **tupla1**
"""
type(tupla1)
"""
Usando el comando **len** podemos saber la cantidad de registros de la tupla
"""
n=len(tupla1)
n
"""
##  2. **Listas:** 
Conjunto ordenado de valores de cualquier objeto: un número, una cadena, una función, una clase, una instancia, etc.

## **Definición:**

        NombreListado = [valores]
"""
"""
### **Ejemplo:** Generando el listado
"""
lista1=[Nombre,Edad,talla,Casado]
lista1
"""
Usando el comando **type** podemos saber el tipo de estructura del objeto **lista1**
"""
type(lista1)
"""
Usando el comando **len** podemos saber la cantidad de registros del listado
"""
n=len(lista1)
n
"""
## **¿Cuál es la diferencia entre una tupla y un listado?**
"""
"""
##  **Tamaño:** 
Las tupla ocupan un menor espació.
"""
tupla1
"""
Usando el comando **getsizeof** del paquete **sys** podemos saber el tamaño del objeto
"""
import sys
sys.getsizeof(tupla1)
lista1
sys.getsizeof(lista1)
"""
## **Inmutables:**

Las tuplas no permiten modificaciones en cambio las lista si permiten cambios.
"""
tupla1
tupla1[0]='César Guevara Quispe'
lista1
lista1[0]='César Guevara Quispe'
lista1
"""
## **¿Qué operaciones me permite realizar un listado?**
"""
"""
Agregar valores al final del listado
"""
lista1.append('Lima')
lista1
"""
Insertardo valores en cualquier posición de la lista
"""
lista1.insert(2,"Cesar.guevaraq@gmail.com")
lista1
"""
Eliminando valores de la lista según su posición
"""
del lista1[3]
lista1
"""
## **¿Se puede convertir un listado a una tupla?**
"""
"""
Usando el comando **tuple** podemos convertir un listado a una tupla. 
"""
tupla2=tuple(lista1)
tupla2
type(tupla2)
"""
De igual manera usando el comando **list** podemos convertir una tupla a una lista.
"""
lista2=list(tupla1)
lista2
type(lista2)
"""
##  3. **Diccionarios:** 
La estructura permite utilizar una clave(Nombre) para acceder a los valores.

## **Definición:**

        NombreDiccionario = {"Nombre":valores}
"""
"""
**Nota:** En python no se declara el tipo de variable, generalmente reconoce a que tipo pertenece según el valor asignado.
"""
DatosPersonales={
                 "Nombre":['Cesar Guevara','Jose Honores'],#Caracteres
                 "Edad":[33,35],#Enteros
                 "Talla":[1.73,1.72],#Flotantes
                 "Ciudad":['Lima','Arequipa']#Caracteres
                 }
DatosPersonales
DatosPersonales['Nombre']
"""
Usando la libreria **pandas**
"""
import pandas as pd
tabla1 = pd.DataFrame(DatosPersonales)
tabla1
tabla1.columns
registro=pd.Series(['Diego Rojas',29,1.75,'Lima'],index=tabla1.columns)
tabla1=tabla1.append(registro,ignore_index=True) 
tabla1
tabla1.info()
"""
# **LECTURA DE DATOS**
"""
"""
Usando el comando **listdir**  para revisar la carpeta de trabajo **input**
"""
import os
os.listdir("../input")
"""
Para usar el comando **listdir** tenemos que cargar el paquete os. 
"""
"""
## **1. Lectura de una data en formato txt**
"""
import pandas as pd
datostxt=pd.read_table('../input/data.txt',encoding="iso-8859-1")
datostxt.head(10)
datostxt.info()
len(datostxt.index)
"""
## **2. Lectura de una data en formato CSV**
"""
import pandas as pd
datoscsv = pd.read_csv('../input/Datos_Clientes.csv',sep=";",encoding="iso-8859-1")
datoscsv.head(20)
"""
## **3. Lectura de una data en formato Excel**
"""
import pandas as pd
file = pd.ExcelFile('../input/PD1-2018.xlsx',sheetname='Hoja1')
file
datosexcel=file.parse()
datosexcel.head(20)
datosexcel.info()
"""
# **RESUMEN DE DATOS**
---

## **ESTADÍSTICA GENERAL**

![Imagen4](https://i.imgur.com/xGXsfvi.png)

## **ESTADÍSTICA DESCRIPTIVA**
----
### **MEDIDAS DESCRIPTIVAS**

### **1. MEDIDAS DE TENDENCIA CENTRAL**

Las medidas de tendencia central son empleadas para resumir a los datos que serán sometidos a un estudio estadístico, se les llama así porque generalmente la acumulación más alta de datos se encuentra en los valores intermedios. 

>* **Media:** Es la media aritmética (o promedio) de los valores de una variable.  Suma de los valores entre la cantidad de datos.
>* **Mediana:** Es un valor que divide a las observaciones en dos grupos con el mismo número de individuos. Es conveniente usarlo cuando los datos son asimétricos, ya que no es sensible a valores extremos.
>* **Moda:** Es el/los valor/es que mas veces se repite en los datos; por tanto, es donde la distribución de frecuencia alcanza su máximo valor.
![Imagen7](https://i.imgur.com/jhQ9HhI.png)
"""
x=datoscsv['Venta']
x
"""
### Calculando el **promedio**
"""
import numpy as np
np.mean(x)
"""
### Calculando la **mediana**
"""
import numpy as np
np.median(x)
"""
### Calculando la **moda**
"""
colores=["red", "blue", "blue", "red", "green", "red", "red"]
from collections import Counter
Counter(colores)
from statistics import mode
mode(colores)
"""
### **2. MEDIDAS DE DISPERSIÓN**

Las medidas de dispersión, muestran la variabilidad de una distribución de datos, indicando por medio de un número. Cuanto  mayor sea ese valor, mayor será la variabilidad, cuanto menor sea, más homogéneos serán. Así se sabe si todos los casos son parecidos o varían mucho entre ellos.

>* **Rango:** Es la diferencia entre el mayor y el menos de los datos. Casi no se emplea debido a que depende únicamente de dos valores.
>* **Desviación estándar:** Es una medida de la dispersión de los datos alrededor de su  media.
>* **Varianza:** Se define como el cuadrado de la desviación estándar y se representa S2.
>* **Coeficiente de variación:** Es una medida relativa (no tiene dimensiones) que permite comparar el nivel de dispersión de dos muestras de variables estadísticas diferentes.
![Imagen6](https://i.imgur.com/QBgy3Oi.png)
"""
x=datoscsv['Venta']
"""
Calculando el valor máximo de la variable **X**
"""
max(x)
"""
Calculando el valor mínimo de la variable **X**
"""
min(x)
"""
Calculando el **Rango**  de **X**
"""
Rango=max(x)-min(x)
Rango
"""
### Calculando la **desviación**
"""
import numpy as np
np.std(x)
"""
### Calculando el **coeficiente de variación**
"""
import numpy as np
np.std(x)/np.mean(x)*100
"""
### **3. MEDIDAS DE FORMA**

Las medidas de forma permiten comprobar si una distribución de datos tiene características especiales como simetría, asimetría, nivel de concentración de datos y nivel de apuntamiento que la clasifiquen en un tipo particular de distribución.

> *  **Coeficiente de asimetría(AS):** Es un indicador del grado de asimetría que presenta una distribución de datos.
![Imagen5](https://i.imgur.com/mijOZ8W.png)
>
>*  **kurtosis:** Indica que tan apuntada o achatada se encuentra una distribución de datos.

![Imagen5](https://i.imgur.com/jRn4msV.png)
"""
x=datoscsv['Venta']
"""
### Calculando el **coeficiente de asimetria**
"""
from scipy.stats import skew 
skew(x)
"""
### Calculando la **kurtosis**
"""
from scipy.stats import kurtosis 
kurtosis(x)
"""
Usando el comando **describe** podemos obtener las estadísticas descriptivas del **dataframe**
"""
datoscsv.describe()
"""
 Tambien podemos obtener **estadísticas descriptivas** para una agrupación de registros usando la opción **groupby**
"""
Resumen1=datoscsv.groupby(['Segmento'])['Venta'].describe()
Resumen1
"""
Podriamos especificar la estadistica descriptiva usando la opción **agg**
"""
Resumen2=datoscsv.groupby(['Segmento'])['Venta'].agg([np.mean])
Resumen2
"""
### Ejemplo:
"""
import numpy as np
Resumen2=datoscsv.groupby(['Segmento'])['Venta'].agg([np.mean,np.median,np.std])
Resumen2
"""
### **Criterio:**
    
* Si  Media < Mediana,  Entonces los datos presenta sesgo a la izquerda.
* Si  Media = Mediana,  Entonces los datos no presenta sesgo.
* Si  Media > Mediana,  Entonces los datos presenta sesgo a la derecha.
"""
"""
Graficando la distribución de la variable **venta**
"""
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
plt.subplots(figsize=(10,6))
sns.kdeplot(np.log(x),color='blue', shade = True)
Segmentos=datoscsv['Segmento'].unique()
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
plt.subplots(figsize=(10,6))
sns.kdeplot(datoscsv['Venta'][(datoscsv['Segmento'] =='Bodega')],color="Blue", shade= True)
sns.kdeplot(datoscsv['Venta'][(datoscsv['Segmento'] =='Despensa')],color="Red", shade= True)
sns.kdeplot(datoscsv['Venta'][(datoscsv['Segmento'] =='Reposicion')],color="Green", shade= True)
"""
### TABLAS CRUZADAS
"""
datosexcel.head(10)
import pandas as pd
pd.crosstab(datosexcel['Categoría'],datosexcel['Condición'])
import pandas as pd
pd.crosstab(datosexcel['Categoría'],datosexcel['Condición'],margins=True)
"""
# Trabajo 02

* 1. Crear un dataframe mediante la lectura de un archivo de datos: 
* 2. Analizar los datos datos usando las **estadísticas descriptivas**.
"""
"""
___
<center> 
__[Regresar a la tabla de contenidos](#TABLA-DE-CONTENIDO)__
"""