<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Bienvenidas a otra sesión de Pyladies!!
En esta ocasión lo que haremos será continuar aprendiendo a usar la biblioteca para análisis de datos llamada Pandas!!
En la introducción de pandas vimos Series, 'Data Frames' y como crearlos, además vimos como podemos acceder a un subgrupo de elementos tanto en series como en data frames. Está sesión va a estar más enfocada a ver como manipular y ordenar tus datos y análisis estadísticos básicos.
Sin más preámbulo comenzamos!!! 
Step1:  Ya que tenemos hechos nuestros arreglos, ahora vamos a ver las características generales de ellos...
Step2:  Ejercicio 1
Crea un data frame de la clase de pyladies que contenga la información de los miembros. Cada fila va a ser un miembro y cada columna una cualidad que describa a esos miembros. Las columnas serán las siguientes
Step3:  Ejercicio 2
Haz un data frame que contenga a los 3 miembros con menor estatura, de modo que el data frame contenga sólo el nombre y la estatura
Buscando valores específicos en nuestros datos
Cuando analizas datos no siempre van a estar todos ordenaditos, filtrados y arreglados de tal modo que tu puedas hacer las computaciones necesarias para el anális. De hecho lo más frecuente es que te encuentres con datos faltantes o valores innecesarios o cosas que no quieres y/o necesitas para tu análisis.
Como ejemplo toma el segundo data frame que hicimos, te das cuenta que hay un 'NaN' por ahí que simplemente representa un valor faltante. 
¿Qué harías en este caso?
y una vez que decidiste hacerlo, ¿Cómo lo lograrías?
Por suerte pandas tiene unos métodos para encontrar valores específicos o faltantes, y formas de lidiar con ellos...
Step4:  Estadísticos básicos
Podemos ver rápidamente como se comportan nuestros datos sacando estadísticos. Normalmente tendrías que hacerlo para cada condición de forma 'manual', sin embargo pandas nos permite hacerlo de forma muy fácil y muy rápida (en comparación con los for loops).
Veamos unos ejemplos.
Step5:  Ejercicio 3
Con el data frame de Pyladies haz lo siguiente
Step6:  Hay muchos otros métodos más para combinar data frames los cuales podemos encontrar en la siguiente página
Agrupamiento
Hay veces que tenemos datos sobre los cuales queremos operar los cuales pueden dividirse en un subgrupo de categorías. Para esto usamos la herramienta 'Groupby'.
Cuando pensamos en agrupamiento podemos hacer referencia a las siguientes situaciones
<ASSISTANT_TASK:>
Python Code:
#Cargamos los paquetes necesarios
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#Creamos arreglos de datos por un arreglo de numpy
arreglo = np.random.randn(7,4)
columnas = list('ABCD')
df = pd.DataFrame(arreglo, columns=columnas )
df
#Creamos arreglo de datos por diccionario 
df2 = pd.DataFrame({'Orden':list(range(5)),'Valor': np.random.random_sample(5),
                      'Categoría':['a', 'a', np.nan, 'b', 'b']})
df2
#Creamos arreglo de datos desde archivo existente
df3 = pd.read_csv('titanic.csv', header=0)
df3.head()
Explanation: Bienvenidas a otra sesión de Pyladies!!
En esta ocasión lo que haremos será continuar aprendiendo a usar la biblioteca para análisis de datos llamada Pandas!!
En la introducción de pandas vimos Series, 'Data Frames' y como crearlos, además vimos como podemos acceder a un subgrupo de elementos tanto en series como en data frames. Está sesión va a estar más enfocada a ver como manipular y ordenar tus datos y análisis estadísticos básicos.
Sin más preámbulo comenzamos!!! :)
Iniciaremos cargando los paquetes necesarios y creando unos arreglos de datos.
End of explanation
#¿cuáles son los índices?
df.index
#¿cuáles son las etiquetas?
df.columns
#¿qué valores contiene mi arreglo?
df.values
# Ahora vamos a ver un resumen de nuestros datos
df.describe()
#si quieres saber qué más hace este método ejecuta este comando
df.describe?
Explanation: Ya que tenemos hechos nuestros arreglos, ahora vamos a ver las características generales de ellos...
End of explanation
#Ordenamiento por valores en las columnas
df2.sort_values(by='Valor')
#Ordenamiento por etiquetas de las columnas
df.sort_index(axis=1, ascending=False)
Explanation: Ejercicio 1
Crea un data frame de la clase de pyladies que contenga la información de los miembros. Cada fila va a ser un miembro y cada columna una cualidad que describa a esos miembros. Las columnas serán las siguientes: Edad, Estatura, Origen(ciudad), Grado(estudios), Género(codificado con 0 y 1)
Ordenando tu arreglo
Imagina que quieres que tus datos se presenten en diferente orden en tu arreglo de datos porque de esta forma se pueden entender mejor, o es el formato que te piden en tu trabajo o simplemente porque te gusta más. Para esto usamos los métodos de 'sort'
End of explanation
# Primero vamos a buscar valores específicos en una columna de nuestros datos
df2.Categoría.isin(['A', 'B', 'b'])
# Ahora veremos en todo el arreglo
df2.isin(['A', 'B', 'b'])
# Busquemos valores vacíos
pd.isnull(df2)
# ¿qué hacemos con este? ¿lo botamos?
df2.dropna(how='any')
# ¿o lo llenamos diferente?
df2.fillna(value='c')
Explanation: Ejercicio 2
Haz un data frame que contenga a los 3 miembros con menor estatura, de modo que el data frame contenga sólo el nombre y la estatura
Buscando valores específicos en nuestros datos
Cuando analizas datos no siempre van a estar todos ordenaditos, filtrados y arreglados de tal modo que tu puedas hacer las computaciones necesarias para el anális. De hecho lo más frecuente es que te encuentres con datos faltantes o valores innecesarios o cosas que no quieres y/o necesitas para tu análisis.
Como ejemplo toma el segundo data frame que hicimos, te das cuenta que hay un 'NaN' por ahí que simplemente representa un valor faltante. 
¿Qué harías en este caso?
y una vez que decidiste hacerlo, ¿Cómo lo lograrías?
Por suerte pandas tiene unos métodos para encontrar valores específicos o faltantes, y formas de lidiar con ellos...
End of explanation
#obtener promedio por columna
df.mean()
#obtener promedio por fila
df.mean(1)
#varianza por columna
df.var()
#varianza por fila
df.var(1)
#Frecuencia de valores en una columna específica (series)
df2.Categoría.value_counts()
#Aplicar una función para todo el data frame
print(df)
df.apply(np.sum) #suma por columna
df.apply(np.square) # elevar valores al cuadrado
#solo para comprobar
0.131053**2
Explanation: Estadísticos básicos
Podemos ver rápidamente como se comportan nuestros datos sacando estadísticos. Normalmente tendrías que hacerlo para cada condición de forma 'manual', sin embargo pandas nos permite hacerlo de forma muy fácil y muy rápida (en comparación con los for loops).
Veamos unos ejemplos.
End of explanation
#Concatenar los dos data frames
pd.concat([df, df2])
#ahora por columnas
pd.concat([df, df2], axis=1)
Explanation: Ejercicio 3
Con el data frame de Pyladies haz lo siguiente:
Obtén el promedio de edades y estaturas de los miembros de Pyladies
Obtén un conteo de los orígenes de los miembros de Pyladies 
Obtén el índice de masa corporal asumiendo que el promedio de peso es 60kg, ese resultado ponlo como una columna nueva del data frame
Combinar arreglos
A veces tenemos todos los datos que queremos analizar distribuidos en diferentes arreglos de datos y luego no sabemos como combinarlos. Para ello pandas tiene diferentes métodos que nos ayudan en esta tarea.
End of explanation
#Agruparemos el tercer data frame por sobrevivencia
df3.groupby('Survived').mean()
df3.head()
#ahora lo agruparemos por sobrevivencia y sexo
df3.groupby(['Survived', 'Sex']).mean()
Explanation: Hay muchos otros métodos más para combinar data frames los cuales podemos encontrar en la siguiente página
Agrupamiento
Hay veces que tenemos datos sobre los cuales queremos operar los cuales pueden dividirse en un subgrupo de categorías. Para esto usamos la herramienta 'Groupby'.
Cuando pensamos en agrupamiento podemos hacer referencia a las siguientes situaciones:
Vamos a dividir el data frame en subgrupos
vamos a aplicar una función específica a cada subgrupo
Vamos a combinar los resultados en otro data frame
End of explanation
<END_TASK>