Hola Pandas!

Pandas = Manejo de informacion facil!

Que es pandas?

Pandas es un libreria de alto rendimiento, facil de usar para manejar estructuras de datos y analizarlas.

Checate mas en :

Para usar pandas, solo tiene que importar el modulo ..tambien te conviene importar numpy y matplotlib..juega n muy bien con pandas


In [1]:
import pandas as pd
import numpy as np # modulo de computo numerico
import matplotlib.pyplot as plt # modulo de graficas
# esta linea hace que las graficas salgan en el notebook
%matplotlib inline

Y yo para que quiero eso? De que sirve pandas?

Pandas te sirve si quieres:

  • Trabajar con datos de manera facil.
  • Explorar un conjunto de datos de manera rapida, enterder los datos que tienes.
  • Facilmente manipular informacion, por ejemplo sacar estadisticas.
  • Graficas patrones y distribuciones de datos.
  • Trabajar con Exceles, base de datos, sin tener que suar esas herramientas.

Y mucho mas...

El DataFrame en Pandas

Una estructura de datos en Pandas se llama un DataFrame, con el manejamos todos los datos y aplicamos tranformaciones.

Asi creamos un DataFrame vacio:


In [27]:
df= pd.DataFrame()

No nos sirve nada vacio, entonces agreguemos le informacion!

LLenando informacion con un Dataframe

Situacion:

Suponte que eres un taquero y quieres hacer un dataframe de cuantos tacos vendes en una semana igual y para ver que tacos son mas populares y echarle mas ganas en ellos,

Asumiremos:

  • Que vende tacos de Pastor, Tripa y Chorizo
  • Hay 7 dias en una semana de Lunes a Domingo (obvio)
  • Crearemos el numero de tacos como numeros enteros aleatorios (np.random.randint)

Ojo! Si ponemos la variable de un dataframe al final de una celda no saldra una tabla con los datos, eah!


In [28]:
df['Pastor']=np.random.randint(100, size=7)
df['Tripas']=np.random.randint(100, size=7)
df['Chorizo']=np.random.randint(100, size=7)

df.index=['Lunes','Martes','Miercoles','Jueves','Viernes','Sabado','Domingo']
df


Out[28]:
Pastor Tripas Chorizo
Lunes 85 81 16
Martes 23 38 56
Miercoles 40 63 57
Jueves 4 32 41
Viernes 73 88 77
Sabado 41 40 91
Domingo 15 73 74

Jugando con el Dataframe!

Estadisticas

Ya con teniendo un dataframe podemos hacer muchas cosas, por ejemplo sacar estadisticas, de medias, desviaciones estandares, cuantos elementos:


In [29]:
df.describe()


Out[29]:
Pastor Tripas Chorizo
count 7.000000 7.000000 7.000000
mean 40.142857 59.285714 58.857143
std 29.790539 22.610575 25.029506
min 4.000000 32.000000 16.000000
25% 19.000000 39.000000 48.500000
50% 40.000000 63.000000 57.000000
75% 57.000000 77.000000 75.500000
max 85.000000 88.000000 91.000000

pero talvez solo queramos estadisticas de Pastor, entonces seria:


In [30]:
df['Pastor'].describe()


Out[30]:
count     7.000000
mean     40.142857
std      29.790539
min       4.000000
25%      19.000000
50%      40.000000
75%      57.000000
max      85.000000
Name: Pastor, dtype: float64

o talvez solo nos interese del Lunes:

Ojo! Tenemos que usar .ix para seleccionar un renglon


In [31]:
df.ix['Lunes']


Out[31]:
Pastor     85
Tripas     81
Chorizo    16
Name: Lunes, dtype: int64

Grafica de cajas 'Boxplot'

Un boxplot nos da mucha informacion:

  • Cada caja esta centrada en la mediana
  • Tiene de alto la desviacion estandar entonces nos dice donde se encuentra el 60% de los datos.
  • Tiene los minimos y maximos de cada dato.

In [32]:
df.boxplot()
print("== Boxplot ==")


== Boxplot ==

Combinando columnas

Que tal si queremos saber cuantos tacos vendimos en total? Pues solamente sumamos las columnas:


In [33]:
df['Tacos Total']=df['Pastor']+df['Tripas']
df


Out[33]:
Pastor Tripas Chorizo Tacos Total
Lunes 85 81 16 166
Martes 23 38 56 61
Miercoles 40 63 57 103
Jueves 4 32 41 36
Viernes 73 88 77 161
Sabado 41 40 91 81
Domingo 15 73 74 88

Borrando columnas

Aveces simplemente queremos reducir el numero de datos, entonces podemos usar el drop:


In [34]:
df=df.drop("Tripas",axis=1)
df


Out[34]:
Pastor Chorizo Tacos Total
Lunes 85 16 166
Martes 23 56 61
Miercoles 40 57 103
Jueves 4 41 36
Viernes 73 77 161
Sabado 41 91 81
Domingo 15 74 88

Exportando a otro formato

Aveces queremos guardar nuestros datos (excel, csv, sql database, pickle, json) , por ejemplo a un excel:


In [ ]:
df.to_excel("Tacos.xlsx")

Leyendo un DataFrame de otro formato

O alrevez, queremos crear un dataframe apartir de un archivo:


In [ ]:
df=pd.from_excel("Tacos.xlsx")

Bases de datos en el internet

Aveces los datos que queremos se encuentran en el internet. Asumiendo que se encuentran ordenados y en un formato amigable siempre los podemos bajar y guardar como un DataFrame.

Por ejemplo:

Gapminder es una pagina con mas de 500 conjunto de daatos relacionado a indicadores globales como ingresos, producto interno bruto (PIB=GDP) y esperanza de vida.

Aqui bajamos la base de datos de esperanza de vida, lo guardamos en memoria y lo lodeamos como un excel:

Ojo! Aqui usamos .head() para imprimir los primeros 5 renglones del dataframe pues son gigantescos los datos.


In [2]:
xurl="http://spreadsheets.google.com/pub?key=phAwcNAVuyj2tPLxKvvnNPA&output=xls"
df=pd.read_excel(xurl)
print("Tamano completo es %s"%str(df.shape))
df.head()


Tamano completo es (244, 215)
Out[2]:
Life expectancy at birth 1800 1801 1802 1803 1804 1805 1806 1807 1808 ... 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
0 Afghanistan 28.2110 28.200753 28.190507 28.18026 28.170013 28.159767 28.14952 28.139273 28.129027 ... 56.583 57.071 57.582 58.102 58.618 59.124 59.612 60.079 60.524 60.947
1 Albania 35.4000 35.400000 35.400000 35.40000 35.400000 35.400000 35.40000 35.400000 35.400000 ... 75.725 75.949 76.124 76.278 76.433 76.598 76.780 76.979 77.185 77.392
2 Algeria 28.8224 28.822400 28.822400 28.82240 28.822400 28.822400 28.82240 28.822400 28.822400 ... 69.682 69.854 70.020 70.180 70.332 70.477 70.615 70.747 70.874 71.000
3 American Samoa NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 Andorra NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

5 rows × 215 columns

Arreglando los Datos

Head nos permite darle un vistazo a los datos... asi a puro ojo vemos que las columnas son anios y los renglones los paises...ponder reversar esto con transpose, pero tambien vemos que esta con indices enumerados, prefeririamos que los indices fueran los paises, entonces los cambiamos y tiramos la columna que ya no sirve...al final un head para ver que todo esta bien... a este juego de limpiar y arreglar datos se llama "Data Wrangling"


In [3]:
df.index=df['Life expectancy at birth']
df=df.drop('Life expectancy at birth',axis=1)
df=df.transpose()
df.head()


Out[3]:
Life expectancy at birth Afghanistan Albania Algeria American Samoa Andorra Angola Anguilla Antigua and Barbuda Argentina Armenia ... Vanuatu Venezuela West Bank and Gaza Western Sahara Vietnam Virgin Islands (U.S.) Yemen, Rep. Zambia Zimbabwe Åland
1800 28.211000 35.4 28.8224 NaN NaN 26.98 NaN 33.536 33.2 33.995 ... 24.3 32.2 32.1 34.753 32 33.403 23.387 32.6 33.7 NaN
1801 28.200753 35.4 28.8224 NaN NaN 26.98 NaN 33.536 33.2 33.995 ... 24.3 32.2 32.1 34.753 32 33.403 23.387 32.6 33.7 NaN
1802 28.190507 35.4 28.8224 NaN NaN 26.98 NaN 33.536 33.2 33.995 ... 24.3 32.2 32.1 34.753 32 33.403 23.387 32.6 33.7 NaN
1803 28.180260 35.4 28.8224 NaN NaN 26.98 NaN 33.536 33.2 33.995 ... 24.3 32.2 32.1 34.753 32 33.403 23.387 32.6 33.7 NaN
1804 28.170013 35.4 28.8224 NaN NaN 26.98 NaN 33.536 33.2 33.995 ... 24.3 32.2 32.1 34.753 32 33.403 23.387 32.6 33.7 NaN

5 rows × 244 columns

Entonces ahora podemos ver la calidad de vida en Mexico atravez del tiempo:


In [5]:
df['Mexico'].plot()
print("== Esperanza de Vida en Mexico ==")


== Esperanza de Vida en Mexico ==

de esta visualizacion vemos que la caldiad ha ido subiendo apartir de 1900, ademas vemos mucho movimiento entre 1890 y 1950, justo cuando habia muchas guerras en Mexico.

Tambien podemos seleccionar un rango selecto de años, vemos que este rango es interesante entonces


In [16]:
subdf=df[ df.index >= 1890 ]
subdf=subdf[ subdf.index <= 1955 ]
subdf['Mexico'].plot()
print("== Esperanza de Vida en Mexico entre 1890 y 1955 ==")


== Esperanza de Vida en Mexico entre 1890 y 1955 ==

Tambien es importante ver como esto se compara con otros paises, podemos comparar con Norteamerica:


In [18]:
df[['Mexico','United States','Canada']].plot()
print("== Esperanza de Vida en Norte-America ==")


== Esperanza de Vida en Norte-America ==

Ejercicios:

  • Compara la esperanza de vida en Latino America (o al menos algunos paises de ella).
  • Solo grafica los años entre 1900 y 2000, tambien 2000-2014.
  • Quita los paises que tienen valores 'Nan', checa la funcion .dropna().
  • Saca estadisticas para paises Latino Americanos.
  • Lo mismo de arriba para diferentes periodos 1800-1900, 1900-2000, 2000-2014

In [ ]: