Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ORIENTADO A LA RESOLUCIÓN DE
PROBLEMAS DE OPTIMIZACIÓN EN
INGENIERÍA
(VI Edición, 2021)
Daniel Gutiérrez Reina, d.gutierrez.reina@gmail.com
Vamos a comenzar a aprender los paquetes de Python más utilizados para el análisis de datos.
Tipos de secuencias que hemos visto
Listas: son mutables y accedemos a sus elementos por índices numéricos, del 0 a la longitud -1.
→ Filtrado mediante la función nativa filter.
→ Para añadir nuevos elementos necesito métodos (append).
Tuplas y cadenas: son inmutables y accedemos a sus elementos por índices numéricos, del 0 a
la longitud -1.
Diccionarios: son mutables y accedemos a sus elementos por “keys”, la “key” puede ser
cualquier objeto inmutable.
→ Filtrado más complicado.
→ Podemos añadir nuevos elementos sobre la marcha, creando una nueva pareja key-value.
Arrays numpy: son mutables y accedemos a sus elementos por índices numéricos, del 0 a la
longitud -1.
→ Filtrado sencillo mediante broadcasting y operaciones lógicas.
→ No podemos añadir nuevos elementos.
Empecemos con Pandas
Series: Son objetos con forma de array que contienen un array de datos (de
tipo numpy, también puede ser un lista) y tiene asociado un array de
etiquetas (tags).
tags contenido
→Abrir pandas1.py
Web oficial:
http://pandas.pydata.org/
Más cosas sobre Series en Pandas
Ayuda de ipython!
→Abrir pandas2.py
Recordar que los valores de una Serie son un array de numpy. Por lo que sería
parecido a utilizar el método .vectorize() que hemos visto ateriormente.
Selección de elementos
Formas de seleccionar elementos: (pandas3.py)
❑ Cuando trabajamos con los datos es como si estuviéramos trabajando con Arrays
de numpy (todo lo que sabemos nos vale!)
❑ El imposible saber todos los métodos → hay que mirar la documentación para no
reinventar la rueda.
DataFrames en Pandas
DataFrame: Estructura de hoja datos (objeto), con una serie de columnas
que pueden contener datos de distintos tipos → Una colección de series.
También lo podemos ver como un diccionario en el que el contenido son
listas.
MÉTODOS
→ pandas4.py
• Si falta contenido NaN → Para resolver los NaN podemos utilizar los mismo métodos
que hemos visto con las series.
• Selección (slicing) explícita (df.loc[fila, columna]) o implícita igual que con las series df.iloc[fila, columna].
• Todas las operaciones de selección y copia devuelve una dataframe nuevo, es una copia del original
por lo que cualquier modificación no afecta al original.
• SettingwithCopyWarning
DataFrames en Pandas
Filtrado (pandas6.py):
• Genera un Dataframe nuevo (no está relacionado con original) → Si intentamos modificar
el nuevo Dataframe nos dará un warning.
https://realpython.com/pandas-settingwithcopywarning/
DataFrames en Pandas
Eliminar datos (pandas7.py):
• Axis dataframe
Obtener los datos desde archivos
Vamos a ver como podemos obtener los datos desde un archivo y
convertirlos en un DataFrame. Podemos leer casi cualquier tipo de archivo.
→Abrir pandas8.py
Leer un CSV y convertirlo a DataFrame
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
Datos estadísticos del DataFrame
Para obtener valores estadísticos tenemos dos opciones:
1) Considerar que cada columna del Dataframe es un array de numpy (o incluso el Dataframe
completo como una matriz) → Utilizar todo lo que sabemos de numpy.
2) Utilizar métodos propios del Dataframe (utilizar el axis): Funcionan como las funciones
Universales (ufunc) de numpy.
Datos estadísticos del DataFrame
http://pandas.pydata.org/pandas-docs/stable/api.html#api-dataframe-stats
Escribir los resultados en una hoja excel
Métodos:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html
Vamos a operar un poco sobre el DataFrame
Operaciones sobre el Dataframe (pandas9.py):
• Incluir una nueva columna es muy sencillo ya que el Dataframe funciona como un
diccionario especializado df[“nueva_columna”].
• Para añadir nuevas filas podemos utilizar el método append, debemos tener en cuenta que
devuelve un nuevo dataframe (hay que tener cuidado con los índices → ignores_index = True)
• Para concatenar dataframes debemos utilizar pd.concat([df1, df2], axis=0), el atributo axis
nos permite decidir si concatenamos por columnas (axis = 0) o por filas (axis = 1).
• One-to-one o inner join: cuando tenemos un columna en común entre los dataframes → si no hay
filas que coinciden se descartan.
• One-to-one o inner join: cuando tenemos un columna en común entre los dataframes → si no hay
filas que coinciden se descartan.
Vamos a operar un poco sobre el DataFrame
Operación de merge (pandas11.py):
• left_on y right_on se utilizan si los dataframes tiene nombres distintos en las columnas que
queremos utilizar para unir.
• Si queremos utilizar los índices de alguno de los dos dataframes debemos utilizar left_index y
right_index.
Graficar → Pandas y Matplotlib
Tenemos dos opciones: (pandas12.py)
1) Consideramos que cada columna es un array y aplicamos todo lo que sabemos Métodos:
de matplotlib.
2) Utilizamos los método propios del Dataframe para visualizar los datos.
Trabajando con datos reales DTN
Descripción del experimento:
• el archivo upb2011.dat contiene los datos de encuentro entre diferentes dispositivos móviles.
un encuentro no es más que una comunicaciones Inalámbrica entre dos personas que portan
un dispositivo móvil (teléfono móvil).
• Cada columna del archivo representa información distinta. Nosotros vamos a centrarnos en las
primeras cuatro columnas (emisor, receptor, t_inicio, t_final).
→Abrir pandas13.py
→Usar upb2011.dat
Ordenar dataframes según el contenido de
ciertas columnas
Ejercicio: Utilizando el archivo upb2011.dat ordenar los encuentro entre nodos por
El tiempo de inicio en el que se producen.
También conocida como la ley del primer dígito, asegura que, en gran variedad de conjuntos de datos
numéricos que existen en la vida real, la primera cifra es 1 con mucha más frecuencia que el resto
de los números. Además, según crece este primer dígito, más probable es que se encuentre en la
primera posición. La ley también asegura cierta frecuencia para los siguientes dígitos.
Ordenar dataframes según el contenido de
ciertas columnas
Ejemplo
→Abrir pandas15.py
→usar medidas.csv
ascendente descendente
Inspeccionar DataFrames → Data Science
A veces trabajamos con muchos datos. Los dataframes tienen atributos y métodos
para ver la forma que tienen los datos.
Atributos:
.info()
.shape
Métodos:
.info()
.heap()
.tail()
→Abrir pandas16.py
→usar upb2011.dat
DataFrames que utilizaremos en Machine
Learning
house_data_small.csv: características de casas, precio, habitaciones, m2, etc.
→ Abrir pandas17.py
Ejercicio: Representar gráficamente el precio de las casas (variable Y) con respecto a los metros
cuadrados la vivienda (sqft_living) (variables X). Utilizar para ello un diagrama de dispersión.
(scatter plot).
Bibliografía
http://pandas.pydata.org/
http://www.python-course.eu/course.phphttp://www.python-
course.eu/course.php
https://www.machinelearningplus.com/python/101-pandas-exercises-
python/