Practica - 06 - Pandas - Intro
Practica - 06 - Pandas - Intro
Curso : Computación 2
PRÁCTICA 06
PYTHON - Librería Pandas
1.- Objetivos:
1. Manipular estructuras de datos en Pandas.
Nota: NO OLVIDAR INICIAR EL TRABAJO COLABORATIVO: en directorio: Practica_6 (con carpetas de Apellidos)
Primero:
JEFE DE PROYECTO: Inicia la practica Sincronizando repositorio local con proyecto GitLab.
Segundo:
COLABORADORES: Los colaboradores Clonan el proyecto de GitLab creado por el Jefe de Proyecto a
su repositorio local.
DESARROLLO
2.- Pandas
Pandas es una librería de Python para la ciencia de datos y Machine Learning, por muchas razones, ofrece estructuras de datos
poderosas, expresivas y flexibles que facilitan la manipulación y análisis de datos. Entre las estructuras más utilizadas se encuentra
el DataFrame. Pandas es una librería de código abierto de Python que proporciona herramientas de análisis y manipulación de
datos de alto rendimiento utilizando sus potentes estructuras de datos. El nombre de Pandas se deriva del término “Panel Data”.
La librería Pandas se desarrollo debido a la necesidad de tener una herramienta flexible de alto rendimiento para el análisis de
datos. En Python se utiliza pandas en Machine Learning para la manipulación y preparación de datos. Usando esta librería
podemos lograr cinco pasos típicos en el procesamiento y análisis de datos, independientemente del origen de los datos:
Cargar
Preparar
Manipular
Modelar
Analizar
DataFrame
Es una estructura de datos muy utilizada en pandas, es tabular bidimensional de tamaño variable y potencialmente heterogénea
con ejes etiquetados (filas y columnas). Un DataFrame es una estructura de datos bidimensional, es decir, los datos se alinean de
forma tabular en filas y columnas. Pandas DataFrame consta de tres componentes principales:
Los datos
Las filas
Las columnas
Si hablamos de la estructura de un DataFrame es muy similar a la de una matriz. Pero en una matriz solamente se admiten valores
numéricos, a diferencia de la matriz, en un DataFrame se puede incluir también datos alfanuméricos en su contenido.
conda install c anaconda pandas
Abrimos nuevo archivo lo llamamos Practica_06_pandas_intro.ipynb (dentro de nuestra carpeta con nuestro Apellido).
Digitamos lo siguiente.
Creación de DataFrame:
In [1]: import numpy as np
import pandas as pd
In [2]: #Datos en listas
diccionario = {'a': [11,12,13], 'b': [21,22,23]}
#DataFrame
df_lista = pd.DataFrame(diccionario)
#Impresión lista con print Spyder
print(df_lista)
#Impresión con función head﴾﴿
df_lista.head()
a b
0 11 21
1 12 22
2 13 23
Out[2]:
a b
0 11 21
1 12 22
2 13 23
In [3]: #Datos en listas
diccionario_2 = {'Nombre':['Danna', 'Matt', 'Irma', 'Gustavo', 'Gladys'],
'Edad':[19, 12, 50, 80, 83],
'Categoría':['H','H','E','A','A']}
#DataFrame
df_lista2 = pd.DataFrame(diccionario_2)
#Impresión lista con print Spyder
print(df_lista2)
print()
#Impresión con función head﴾﴿
df_lista2.head()
Nombre Edad Categoría
0 Danna 19 H
1 Matt 12 H
2 Irma 50 E
3 Gustavo 80 A
4 Gladys 83 A
Out[3]:
Nombre Edad Categoría
0 Danna 19 H
1 Matt 12 H
2 Irma 50 E
3 Gustavo 80 A
4 Gladys 83 A
In [4]: #Imprimir solo una columna Spyder
print(df_lista2['Edad'])
0 19
1 12
2 50
3 80
4 83
Name: Edad, dtype: int64
In [5]: #Imprimir solo una columna
df_lista2['Edad']
Out[5]: 0 19
1 12
2 50
3 80
4 83
Name: Edad, dtype: int64
In [6]: #A partir de Array 2D de 5 filas con 3 columnas
df_np2D = pd.DataFrame(
np.random.randint(5, size=(5,3)),
index=['primero','segundo','tercero','cuarto','quinto'],
columns=['velocidad', 'temperatura','presion']
)
#Impresión con función head﴾﴿
df_np2D.head()
Out[6]:
velocidad temperatura presion
primero 1 3 2
segundo 3 3 1
tercero 2 1 2
cuarto 2 3 4
quinto 0 2 1
In [7]: #forma dataframe spyder
print(df_np2D.shape)
#altura dataframe spyder
print(len(df_np2D.index))
(5, 3)
5
Se adjunta un archivo data.zip a la practica, se debe crear la carpeta data con los archivos del data.zip .
In [8]: #archivo CSV separado por comas
data = pd.read_csv('data/titanic_comma.csv')
#leer 5 primeras lineas
data.head()
Out[8]:
Name PClass Age Sex Survived
In [9]: #leer 5 últimas lineas
data.tail()
Out[9]:
Name PClass Age Sex Survived
In [10]: #Para imprimir en Spyder
print(data.head())
Name PClass Age Sex \
0 Allen, Miss Elisabeth Walton 1st 29.00 female
1 Allison, Miss Helen Loraine 1st 2.00 female
2 Allison, Mr Hudson Joshua Creighton 1st 30.00 male
3 Allison, Mrs Hudson JC (Bessie Waldo Daniels) 1st 25.00 female
4 Allison, Master Hudson Trevor 1st 0.92 male
Survived
0 1
1 0
2 0
3 0
4 1
In [11]: #archivo CSV separado por comas
data2 = pd.read_csv('data/titanic_tabs.csv', '\t')
#leer 5 primeras lineas
data2.head(10)
Out[11]:
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
STON/O2.
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 7.9250 NaN S
3101282
Estadistica DataFrame:
En Pandas podemos hallar con pocos comandos de manera muy sencilla y rapida la estadistica de los datos de todo tipo de
archivos. Comenzamos con archivos csv .
In [12]: #cargamos un archivo CSV separado por punto y coma ﴾importado excel﴿
notas = pd.read_csv('data/notas.csv', ';')
#leer 10 primeras lineas
notas.head(10)
#imprimir toda la lista
#print﴾notas﴿
Out[12]:
Alumno Nota1 Nota2 Nota3 Promedio
0 Maria 18.0 19 18 18
1 Jose 8.0 15 11 11
2 Juan 13.0 12 17 14
3 Luis 10.0 19 18 16
4 Carlos 16.0 12 10 13
5 Rosa 0.0 14 10 8
6 Jorge 9.0 11 19 13
7 Victor 6.0 13 10 10
8 Ana 18.0 19 11 16
9 Luz 14.0 20 16 17
In [13]: #Estadísticas del DataFrame
print('Estadísticas del DataFrame:')
#impresión
notas.describe()
Estadísticas del DataFrame:
Out[13]:
Nota1 Nota2 Nota3 Promedio
Para los datos numéricos, el índice del resultado incluirá cantidad de datos count , media mean , desviación estandar std , valor
mínimo min , valor máximo,los percentiles inferior de 25% y el percentil superior de 75%.
In [14]: #Media de las columnas DataFrame
print('Media de las columnas DataFrame:')
#impresión print spyder
print(notas.mean())
Media de las columnas DataFrame:
Nota1 11.836735
Nota2 13.720000
Nota3 14.720000
Promedio 13.440000
dtype: float64
In [15]: #impresión
notas.mean()
Out[15]: Nota1 11.836735
Nota2 13.720000
Nota3 14.720000
Promedio 13.440000
dtype: float64
In [16]: #Correlación del DataFrame
print('Correlación del DataFrame:')
#impresión
notas.corr()
Correlación del DataFrame:
Out[16]:
Nota1 Nota2 Nota3 Promedio
In [17]: #Cuenta los datos del DataFrame no nulos
print('Conteo de datos del DataFrame:')
#impresión
notas.count()
Conteo de datos del DataFrame:
Out[17]: Alumno 50
Nota1 49
Nota2 50
Nota3 50
Promedio 50
dtype: int64
In [18]: #Valor más alto de cada columna del DataFrame
print('Valor más alto de la columna del DataFrame:')
#impresión
notas.max()
Valor más alto de la columna del DataFrame:
Out[18]: Alumno Walter
Nota1 20
Nota2 20
Nota3 20
Promedio 19
dtype: object
In [19]: #Valor mínimo de cada columna del DataFrame
print('Valor mínimo de la columna del DataFrame:')
#impresión
notas.min()
Valor mínimo de la columna del DataFrame:
Out[19]: Alumno Alejandro
Nota1 0
Nota2 0
Nota3 10
Promedio 8
dtype: object
Mediana x Columna
In [20]: #Mediana de cada columna del DataFrame
print('Mediana de la columna del DataFrame:')
#impresion
notas.median()
Mediana de la columna del DataFrame:
Out[20]: Nota1 11.0
Nota2 13.0
Nota3 14.5
Promedio 13.0
dtype: float64
In [21]: #Desviación estándar de cada columna del DataFrame
print('Desviación estándar de la columna del DataFrame:')
#impresion
notas.std()
Desviación estándar de la columna del DataFrame:
Out[21]: Nota1 5.075870
Nota2 4.204177
Nota3 3.434756
Promedio 2.778636
dtype: float64
Una de las funciones que son muy fáciles en Pandas es seleccionar los datos que deseas en comparación con seleccionar un valor de
una lista o un diccionario. Puedes seleccionar una columna de manera muy fácil, solamente deberás indicar el índice de la misma.
In [22]: #Seleccionar la primera columna del DataFrame
print('Primera columna del DataFrame:')
#impresión
notas.iloc[:, 0]
Primera columna del DataFrame:
Out[22]: 0 Maria
1 Jose
2 Juan
3 Luis
4 Carlos
5 Rosa
6 Jorge
7 Victor
8 Ana
9 Luz
10 Cesar
11 Carmen
12 Miguel
13 Julio
14 Jesus
15 Pedro
16 Manuel
17 Juana
18 Santos
19 Segundo
20 Jhon
21 David
22 Angel
23 Julia
24 Diego
25 Flor
26 Elizabeth
27 Daniel
28 Oscar
29 Ruth
30 Diana
31 Marco
32 Edwin
33 Javier
34 Walter
35 Francisco
36 Fernando
37 Milagros
38 Alejandro
39 Raul
40 Ricardo
41 Alex
42 Roberto
43 Edgar
44 Victoria
45 Eduardo
46 Mario
47 Jaime
48 Gloria
49 Andrea
Name: Alumno, dtype: object
In [23]: #Seleccionar dos columnas del DataFrame
print('Dos columnas del DataFrame:')
#impresión
notas.iloc[:, 0:2]
Dos columnas del DataFrame:
Out[23]:
Alumno Nota1
0 Maria 18.0
1 Jose 8.0
2 Juan 13.0
3 Luis 10.0
4 Carlos 16.0
5 Rosa 0.0
6 Jorge 9.0
7 Victor 6.0
8 Ana 18.0
9 Luz 14.0
10 Cesar 8.0
11 Carmen 14.0
12 Miguel 14.0
13 Julio 11.0
14 Jesus 12.0
15 Pedro 5.0
16 Manuel 15.0
17 Juana 8.0
18 Santos 7.0
19 Segundo NaN
20 Jhon 10.0
21 David 7.0
22 Angel 18.0
23 Julia 7.0
24 Diego 20.0
25 Flor 12.0
26 Elizabeth 16.0
27 Daniel 18.0
28 Oscar 10.0
29 Ruth 9.0
30 Diana 16.0
31 Marco 9.0
32 Edwin 0.0
33 Javier 6.0
34 Walter 11.0
35 Francisco 5.0
36 Fernando 10.0
37 Milagros 18.0
38 Alejandro 9.0
39 Raul 20.0
40 Ricardo 9.0
41 Alex 10.0
42 Roberto 19.0
43 Edgar 15.0
44 Victoria 8.0
45 Eduardo 12.0
46 Mario 19.0
47 Jaime 18.0
48 Gloria 19.0
49 Andrea 14.0
In [24]: #Seleccionar el valor de la primera fila y última columna del DataFrame
print('Valor de la primera fila(Alumno: Maria) y 3era columna(Nota2) del DataFrame:')
#impresión
notas.iloc[0][2]
Valor de la primera fila(Alumno: Maria) y 3era columna(Nota2) del DataFrame:
Out[24]: 19
In [25]: #Seleccionar los valores de la primera fila del DataFrame
print('Valores de la primera fila del DataFrame:')
#impresión
notas.loc[0]
Valores de la primera fila del DataFrame:
Out[25]: Alumno Maria
Nota1 18
Nota2 19
Nota3 18
Promedio 18
Name: 0, dtype: object
In [26]: #Seleccionar los valores de la primera fila del DataFrame
print('Valores de la primera fila del DataFrame:')
#impresión con iloc
notas.iloc[0,:]
Valores de la primera fila del DataFrame:
Out[26]: Alumno Maria
Nota1 18
Nota2 19
Nota3 18
Promedio 18
Name: 0, dtype: object
EJEMPLOS
Otro procedimiento que podemos hacer con Pandas es limpiar nuestros datos, estos es muy importante en Machine Learning si
queremos obtener resultados confiables.
In [27]: #cargamos un archivo CSV separado por comas
notas2 = pd.read_csv('data/notas2.csv', ';')
#leer 5 primeras lineas
notas2.head(10)
Out[27]:
Alumno Nota1 Nota2 Nota3 Promedio
Con Pandas podemos verificar si faltan valores en el conjunto de datos solamente tenemos que implementar pd.isnull() .
Implementando esta instrucción nos devuelve una matriz booleana, una matriz de verdadero para valores faltantes y falso para
valores no perdidos.
In [28]: #Verificar si hay datos nulos en el DataFrame
print('Datos nulos en el DataFrame:')
#Imprimir nulos TRUE
notas2.isnull()
Datos nulos en el DataFrame:
Out[28]:
Alumno Nota1 Nota2 Nota3 Promedio
Para obtener una suma de valores nulos o faltantes solamente se debe ejecutar la siguiente instrucción:
In [29]: #Suma de datos nulos en el DataFrame
print('Suma datos nulos en el DataFrame:')
#imprimir
notas2.isnull().sum()
Suma datos nulos en el DataFrame:
Out[29]: Alumno 0
Nota1 11
Nota2 3
Nota3 0
Promedio 0
dtype: int64
Ahora vamos a rellenar los valores perdidos con otros valores usando df.fillna(x) que reemplaza los valores perdidos con x ,
puede ser cualquier valor, inclusive se puede reemplar todos los valores nulos con la media de los datos.
In [30]: #Reemplaza los valores perdidos por la media
print('Reemplazar los valores perdidos por la media:')
#Imprimir
notas2.fillna(5)
Reemplazar los valores perdidos por la media:
Out[30]:
Alumno Nota1 Nota2 Nota3 Promedio
Ahora para conservar los cambios generamos un nuevo archivo csv con el resultado de la limpieza, utilizamos el comando
df.to_csv que creara el nuevo archivo.
In [31]: #asignamos el resultado al DataFrame nota_final
nota_final = notas2.fillna(5)
In [32]: #imprimimos para confirmar
nota_final.head()
Out[32]:
Alumno Nota1 Nota2 Nota3 Promedio
In [33]: #grabamos en otro archivo
notas2.to_csv('data/notafinal.csv')
Vamos hallar la frecuencia de notas de un archivo csv damos como resultado la nota mas alta
In [34]: #cargamos un archivo CSV separado por punto y coma
notas3 = pd.read_csv('data/notas.csv', ';')
In [35]: #nombres de columnas
notas3.columns.values
Out[35]: array(['Alumno', 'Nota1', 'Nota2', 'Nota3', 'Promedio'], dtype=object)
In [36]: #buscamos cuantos alumnos han sacado nota 20 en Promedio
#creamos nuevo DataFrame con notas promedio y frecuencias
tab = pd.crosstab(index=notas3['Nota3'], columns='Frecuencia')
tab.head(15)
Out[36]:
col_0 Frecuencia
Nota3
10 8
11 5
12 4
13 2
14 6
15 2
16 6
17 3
18 5
19 4
20 5
In [37]: #localizar alumnos que han sacado 20 en su Nota3
fila = tab.loc[tab.index==20]
#variable
x = fila['Frecuencia']
x = int(x)
#Impresion
print('\t \t \t FELICITACIÓN')
print("")
print('\n')
print("%d alumnos han sacado en su Nota3 20, mis felicitaciones!!"%x)
print('\n\n\n')
FELICITACIÓN
5 alumnos han sacado en su Nota3 20, mis felicitaciones!!
Las funciones de busqueda son básicas en pandas lo vamos aplicar a un archivo bajado de la pagina web Kaggle el mayor banco
de dataset
In [38]: #cargamos un archivo CSV separado por comas con indice en columna "Name"
data = pd.read_csv('data/nba.csv', index_col="Name")
#Impresión
data.head()
Out[38]:
Team Number Position Age Height Weight College Salary
Name
Avery Bradley Boston Celtics 0.0 PG 25.0 6-2 180.0 Texas 7730337.0
Jae Crowder Boston Celtics 99.0 SF 25.0 6-6 235.0 Marquette 6796117.0
John Holland Boston Celtics 30.0 SG 27.0 6-5 205.0 Boston University NaN
R.J. Hunter Boston Celtics 28.0 SG 22.0 6-5 185.0 Georgia State 1148640.0
Jonas Jerebko Boston Celtics 8.0 PF 29.0 6-10 231.0 NaN 5000000.0
In [39]: #variables que busca en la columna "Name" y funcion `loc`
fist = data.loc["Avery Bradley"]
second = data.loc["Jae Crowder"]
#impresión
print(fist, "\n\n\n", second)
Team Boston Celtics
Number 0
Position PG
Age 25
Height 62
Weight 180
College Texas
Salary 7.73034e+06
Name: Avery Bradley, dtype: object
Team Boston Celtics
Number 99
Position SF
Age 25
Height 66
Weight 235
College Marquette
Salary 6.79612e+06
Name: Jae Crowder, dtype: object
EJERCICIOS:
Ingresamos al entorno de desarrollo Jupyter Notebook desde Anaconda Navigator y/o Terminal entorno computacion2.
Creamos 01 nuevo archivo por integrante: (dentro de nuestra carpeta con nuestro Apellido).
Ejercicio_01_pandas.ipynb
Ejercicio_02_pandas.ipynb
Ejercicio_03_pandas.ipynb
Ejercicio_04_pandas.ipynb
Ejercicio_05_pandas.ipynb
Ejercicio_06_pandas.ipynb
- **Cada integrante de grupo** digita **la solución de solo 01 Ejercicio** y luego los ejecuta para verificar que esta correcto, al final
guarda. - **Cada integrante de grupo** debe **revisar los ejercicios de sus compañeros**; verificara que funcione correctamente y
colaborara con su mejora.
Ejercicio 1
Crear un programa con funciones y que permita ingresar el nombre de un producto por teclado y la cantidad en kilos que
necesite, luego debe abrir el archivo precios.csv (se encuentra dentro de archivo ejercicios.zip ) buscar el nombre del
producto deseado (requiere ingresar un producto de la lista) y luego imprimir el producto con el precio final, luego debe preguntar
si deseas seguir pidiendo otro producto(nuevamente te debe pedir ingresar el producto) o salir finalizando el programa.
Ejercicio 2:
Crear un programa que permita visualizar el nombre del/(los) jugador(es) de la NBA de mayor edad por pantalla, dato que se
puede ubicar en la columna Age, desde el archivo nba.csv (que se encuentra dentro de archivo ejercicios.zip ) debera
visualizar por pantalla todos los datos de dicho(s) jugador(es) y adicionalmente guardar la información en el archivo
nba_adulto.csv .
Ejercicio 3:
Crear un programa que permita visualizar el nombre del/(los) jugador(es) de la NBA que han llevado estudios College en la ciudad
de Kentucky, dato que se puede ubicar en la columna College, desde el archivo nba.csv (que se encuentra dentro de archivo
ejercicios.zip ) debera visualizar por pantalla todos los datos de dicho(s) jugador(es) y adicionalmente guardar la
información en el archivo nba_adulto.csv .
Ejercicio 4:
Crear un programa que permita visualizar el nombre del/(los) estudiante(s) que deben viajar mas de 01 hora dato que se puede
ubicar en la columna traveltime, desde el archivo studentmat.csv (que se encuentra dentro de archivo ejercicios.zip )
debera visualizar por pantalla todos los datos de dicho(s) alumno(s) y adicionalmente guardar la información en el archivo
studenttravel.csv .
Ejercicio 5:
Crear un programa que permita visualizar el nombre del/(los) estudiante(s) que no poseen internet dato que se puede ubicar en la
columna internet, desde el archivo studentmat.csv (que se encuentra dentro de archivo ejercicios.zip ) debera visualizar
por pantalla todos los datos de dicho(s) alumno(s) y adicionalmente guardar la información en el archivo student
internet.csv .
Ejercicio 6:
Crear un programa que permita visualizar el nombre del/(los) estudiante(s) que son mayores de 18 años dato que se puede ubicar
en la columna age, desde el archivo studentmat.csv (que se encuentra dentro de archivo ejercicios.zip ) debera
visualizar por pantalla todos los datos de dicho(s) alumno(s) y adicionalmente guardar la información en el archivo student
age.csv .
Database studentmat.csv fue sacado de Kaggle autores: P. Cortez and A. Silva. Using Data Mining to Predict Secondary
School Student Performance. In A. Brito and J. Teixeira Eds., Proceedings of 5th FUture BUsiness TEChnology Conference
(FUBUTEC 2008) pp. 5-12, Porto, Portugal, April, 2008, EUROSIS, ISBN 978-9077381-39-7.
web: https://www.kaggle.com/janiobachmann/math-students/data
Recordar que es 01 Ejercicio por integrante, luego deben revisar y comentar el trabajo de sus compañeros
3.- Sincronizar cuantas veces sea necesario los cambios con git:
(Programacion2) renzo@misti:~$ git add A
(Programacion2) renzo@misti:~$ git commit m "Avance 10 de Practica 06"
Actualizamos nuestros repositorio local con los cambios del respositorio de GitLab:
(Programacion2) renzo@misti:~$ git pull origin master
(Programacion2) renzo@misti:~$ git push origin master
Para tener evidencia del trabajo realizado envía un solo integrante al Aula Virtual, la carpeta con todo el proyecto en zip.
Finaliza la Práctica
Bibliografía