0% encontró este documento útil (0 votos)
16 vistas53 páginas

Módulo 2. Manipulación de Datos

El módulo 2 se centra en la manipulación de datos, que es el proceso de alterar datos para mejorar su legibilidad y organización, utilizando herramientas que permiten identificar patrones y facilitar la toma de decisiones. Se diferencia de ETL, ya que la manipulación de datos no cambia los datos en sí, sino su relación y formato. Se exploran herramientas como NumPy y Pandas en Python, que son esenciales para trabajar con datos multidimensionales y realizar operaciones matemáticas eficientes.

Cargado por

Cristian López
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
16 vistas53 páginas

Módulo 2. Manipulación de Datos

El módulo 2 se centra en la manipulación de datos, que es el proceso de alterar datos para mejorar su legibilidad y organización, utilizando herramientas que permiten identificar patrones y facilitar la toma de decisiones. Se diferencia de ETL, ya que la manipulación de datos no cambia los datos en sí, sino su relación y formato. Se exploran herramientas como NumPy y Pandas en Python, que son esenciales para trabajar con datos multidimensionales y realizar operaciones matemáticas eficientes.

Cargado por

Cristian López
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 53

Módulo 2.

Manipulación de datos

Introducción
¿Qué es la manipulación de datos?
La manipulación de datos es el proceso de cambiar o alterar datos para hacerlos más
legibles y organizados. Por ejemplo, puede ordenar los datos alfabéticamente para
acelerar el proceso de búsqueda de información útil. Otro ejemplo de manipulación de
datos es la gestión de sitios web. Los propietarios de sitios web pueden utilizar los
registros del servidor web para localizar las páginas web más visitadas, las fuentes de
tráfico y mucho más. De manera similar, los corredores de bolsa utilizan la manipulación
de datos para pronosticar las tendencias del mercado de valores.

¿Por qué utilizar la manipulación de datos?

Las empresas usan datos para predecir tendencias, comprender el comportamiento de los
clientes, aumentar la productividad, reducir costos, etc. mediante la manipulación de
datos. Otros beneficios adicionales incluyen:

Consistencia de formato: Los datos organizados de manera unificada y ordenada ayudan


a los usuarios comerciales a tomar mejores decisiones.

¿Qué son las herramientas de manipulación de datos?

Las herramientas de manipulación de datos le permiten modificar datos para facilitar su


lectura u organización. Estas herramientas ayudan a identificar patrones en sus datos que
de otro modo no serían obvios. Por ejemplo, puede organizar un registro de datos en
orden alfabético utilizando una herramienta de manipulación de datos para que las
entradas discretas sean más fáciles de encontrar.

La gente a menudo confunde manipulación de datos con ETL (Extraction Transformation


and Load) y otras técnicas de transformación. Sin embargo, la manipulación de datos
implica ordenar, reorganizar y mover datos sin cambiarlos esencialmente. Incluye
operaciones para adaptar los datos en la forma necesaria para mostrar información o
alimentar y entrenar un modelo analítico.
El propósito clave de la manipulación de datos es alterar la relación (ya sea lógica o física)
que un elemento de datos tiene con otro, no los datos en sí.
Las operaciones comunes utilizadas para la manipulación de datos incluyen:

Filtrado de filas y columnas.


Agregación.
Combinación.
Concatenación.
Manipulación de cadenas.
Clasificación.
Regresión.
Fórmulas matemáticas.

ETL, por otro lado, tiene un propósito diferente. Implica extraer datos del sistema de origen
y hacer que sea compatible con el sistema de destino antes de escribir en él.

¿Por qué necesita herramientas de manipulación de datos?

La manipulación de datos es una tarea crítica en la optimización de procesos. Transforma


los datos en una forma utilizable que se puede utilizar más para generar información,
como el análisis de datos financieros, el comportamiento de los clientes y la realización de
análisis de tendencias.

Las herramientas de manipulación de datos se utilizan ampliamente durante la integración


para hacer que los datos sean compatibles con el sistema de destino. Por ejemplo, los
usuarios asociados con la contabilidad a menudo manipulan datos sin procesar adquiridos
de proveedores y marketing para comprender los precios de los productos, las tendencias
de ventas o los posibles requisitos fiscales. Del mismo modo, los expertos del mercado de
valores pueden aprovechar los conjuntos de datos para pronosticar las tendencias del
mercado, lo que les permite administrar sus carteras de inversión en consecuencia.

Estos son solo algunos casos de uso de manipulación de datos. Algunas de las otras
formas en que la manipulación puede ser beneficiosa para las organizaciones incluyen:

Consistencia de los datos

Un formato de datos coherente facilita la organización, la lectura y el análisis de datos.


Cuando los datos provienen de fuentes dispares, el usuario debe transformarlos y
manipularlos para crear un formato unificado. Después de estandarizar el formato, es más
fácil escribir datos en el sistema empresarial o utilizarlos para generar informes.

Proyección de datos
Como empresa, no se puede negar la importancia de los datos cuando se trata de
inteligencia empresarial (BI). Realizar un análisis exhaustivo de los datos es vital para las
empresas, especialmente cuando se trata de inversiones. Todas las empresas utilizan
datos del pasado para planificar el futuro. Las herramientas de manipulación de datos
facilitan la creación de proyecciones, especialmente en el sector financiero, donde
depende de los resultados de sus inversiones pasadas para consideraciones futuras.

Generación de valor

La manipulación de datos le permite actualizar, modificar, eliminar e ingresar datos en una


base de datos. Esto significa que puede aprovechar los datos para obtener información
detallada y tomar mejores decisiones comerciales.

Eliminación de datos redundantes

A menudo, los datos que provienen de los sistemas de origen incluyen información
redundante, errónea o no deseada. Hacer que estos datos sean útiles requiere ejecutarlos
a través de controles de calidad y aplicar filtros de limpieza para extraer la información
esencial para su empresa. Al utilizar la manipulación de datos, puede limpiar rápidamente
sus datos para que pueda filtrar los registros que importan.

Interpretación de datos

Cuando se trata de datos complejos que involucran múltiples formatos y condiciones


comerciales, es casi imposible entenderlos sin manipulación. Debe tener la capacidad de
visualizar datos y modificarlos para convertirlos en información valiosa y comprensible.
Una herramienta de manipulación de datos podría resolver este problema convirtiendo los
datos al formato deseado e integrándolos con diferentes herramientas para mejorar la
experiencia visual. Esto facilita que los usuarios comprendan y consuman datos.

Panorama histórico: acceder rápidamente a los datos de proyectos anteriores puede


ayudar a una organización a tomar decisiones con respecto a la proyección de la fecha
límite, la productividad del equipo, la asignación de presupuesto, etc.

Eficiencia mejorada: al tener datos más organizados, una empresa puede aislar e incluso
reducir las variables externas para contribuir a la eficiencia general de la empresa.

En este módulo, profundizaremos en el potencial que tienen dos librerías de Python,


NumPy y Pandas, en el área de manipulación de datos. (Naeem, 2020,
https://bit.ly/41Nmrga)
A lo largo de la unidad 1, estaremos estudiando el potencial que tiene Numpy como una útil
herramienta que ayuda a ordenar y reorganizar los datos, utilizada para trabajar con matrices y
datos multidimensionales y que contiene diversas funciones matemáticas.

En la unidad 2, estudiaremos el potencial que tiene Pandas dentro del ámbito de Data Science y
Machine Learning, ya que ofrece unas estructuras muy poderosas y flexibles que facilitan la
manipulación y el tratamiento de datos.

Actividad de repaso
Seleccionar a cuál opción corresponde la siguiente afirmación: “Implica
ordenar, reorganizar y mover datos sin cambiarlos esencialmente”.

ETL.

Manipulación de datos.

Justificación

Video de inmersión

Unidad 1. NumPy: manipulación y exploración de datos


Tema 1. Creación y manipulación de datos numéricos con NumPy
NumPy significa Numerical Python y es una biblioteca de Python utilizada para trabajar con
matrices y datos multidimensionales. En Python, se puede trabajar con listas que actúan como
arreglos, pero el procesamiento es lento. En NumPy, el procesamiento de los arrays puede
realizarse hasta 50 veces más rápido que las listas, lo cual la hace ideal para el procesamiento de
vectores y matrices de grandes dimensiones.

NumPy suministra funciones matemáticas de alto nivel para operar en estas matrices. Contiene
funciones matemáticas para el cálculo, funciones básicas de álgebra lineal, transformadas de
Fourier, capacidades avanzadas de números aleatorios y herramientas para la integración con
otros lenguajes, como Fortran, C y C ++.

NumPy no forma parte de una instalación básica de Python. Tiene que ser instalado después de
la instalación de Python.

Una vez instalado, la convención general para importar NumPy es: «import numpy as np».
Es decir que “np” es la convención que se utiliza para emplear NumPy dentro del código. Por eso,
cada vez que necesitemos usar Numpy, lo primero que escribimos en el código es: «import
numpy as np».

La página web oficial de NumPy provee información y documentación actualizada sobre esta
librería: https://numpy.org/

La página oficial de Python es: https://www.python.org

Esta página tiene un intérprete de comandos que nos permitirá escribir nuestros códigos de
ejercicios y comprobar online los resultados de los códigos que vamos ingresando.

Para que podamos ir practicando los ejercicios propuestos, recomendamos ingresar a esta
página: https://www.python.org/shell/

Aquí se encuentran los arreglos multidimensionales o matrices que nos servirán para la
manipulación de datos con NumPy.

A modo de ejemplo, comenzaremos demostrando con el código, introduciendo los datos y


comandos online en la página mencionada (https://www.python.org/shell/)

Ingresamos a la página y aparecerá el intérprete de comandos y lo siguiente:

Python 3.10.5 (main, 22 de julio de 2022, 17:09:35) [GCC 9.4.0] en Linux. Type «help»,
«copyright», «credits» o «license» para más información.

Luego, aparece: >>>

Esto indica que ya el intérprete está disponible para ingresar el código.

Ingresamos primero la convención general para importar NumPy:

>>> import numpy as np


Cada vez que ingresamos algo al intérprete online, presionamos «Enter».

Ahora, ingresemos lo siguiente:

>>> a = np.array([1, 2, 3, 4])

Al utilizar np. array(lista), estamos creando un array (arreglo) a partir de la lista ([1, 2, 3, 4])

Al escribir a = np.array([1, 2, 3, 4]), estamos asignando a la variable “a” ese arreglo.

Ahora, ingresemos:

>>> a

Aparecerá lo siguiente:

array([1, 2, 3, 4])

Nos está devolviendo una referencia al array que acabamos de crear y que lo hemos asociado a
la variable a.

Recapitulando, el proceso en secuencia fue así:

Figura 1: Proceso en secuencia

Fuente: captura de pantalla de Python (Python 3.10.5)

Ahora, veamos un ejemplo sencillo de suma que va a agregar el número uno a cada elemento de
nuestro arreglo.

Escribamos en el intérprete:
>>> a+1

Al presionar «Enter», aparece lo siguiente:

array([2, 3, 4, 5])

Como se puede observar, a cada miembro del arreglo se le sumó el número uno.

Podemos realizar diversas operaciones matemáticas sobre cada elemento del array o
sobre todo el array.

Veamos esto siguiendo con nuestro ejemplo inicial:

>>> import numpy as np


>>> a = np.array([1, 2, 3, 4])
>>> a
array([1, 2, 3, 4]

Ingresemos lo siguiente:

>>> print (a*2)

Estamos solicitando que nos muestre el resultado de multiplicar por 2 cada elemento del arreglo:
[2 4 6 8]

Y, así, podemos usar los diversos operadores matemáticos +, -, *, /, %, ** para realizar la


suma, resta, producto, cociente, resto y potencia del elemento.

Por ejemplo, ingresamos en el intérprete:

>>> print (a/2)


Al presionar «Enter», veremos cada elemento del arreglo [1, 2, 3, 4] dividido entre 2:
[0.5 1. 1.5 2 ]

Figura 2: Cada elemento dividido entre dos


Fuente: captura de pantalla de Python (Python 3.10.5)

Estas operaciones pueden realizarse con arreglos de mayores dimensiones y es aquí


donde se ve el potencial del NumPy para la manipulación de grandes cantidades de datos
en forma de matrices.

Por ejemplo, creamos este arreglo de tres dimensiones.

>>> a3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])

Para saber cuál es el número de dimensiones del array, escribimos en el intérprete:

>>> print(a3.ndim)

Retorna lo siguiente:

Vemos que la función «ndim()» devuelve el número de dimensiones de un array.

Ahora, ingresamos lo siguiente:

>>> print (a3)

Obtenemos como resultado:

[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
Ahora, ingresemos lo siguiente:

>>> print (a3*8982)

Obtendremos como resultado:

[[[ 8982 17964 26946]


[ 35928 44910 53892]]
[[ 62874 71856 80838]
[ 89820 98802 107784]]]

Figura 3: Arreglo de tres dimensiones

Fuente: captura de pantalla de Python (Python 3.10.5)

Vemos que cada elemento de este arreglo de tres dimensiones fue multiplicado por 8982 y
presentado en forma ordenada con la función «print()».

Imaginemos, entonces, todo lo que se puede hacer con NumPy al aplicarlo a una gran cantidad
de datos complejos.

Ahora, vamos a profundizar más en el objeto array de NumPy para poder comprender
mejor las operaciones con matrices y datos multidimensionales.

Actividad de repaso
En Python, hemos creado el siguiente arreglo con NumPy:

>>> a = np.array([61, 222, 305, 429])


Si ingresamos lo siguiente:

>>> print (a*2)

¿Cuál de las siguientes opciones será la salida correcta?

[63 224 307 431]

[ 30.5 111. 152.5 214.5]

[122 444 610 858]

[858 610 444 122]

Justificación

Figura 4: Función «print()»

Fuente: captura de pantalla de Python (Python 3.10.5)

Tema 2. El objeto array en NumPy


Un array es una estructura de datos de un mismo tipo. En español, podemos encontrarlo también
con el nombre de arreglos, matrices.

La ventaja del arreglo (matriz) es que es una colección ordenada de datos y se emplean para
almacenar múltiples valores en una sola variable, frente a las variables que solo pueden
almacenar un valor (por cada variable).

En un ejemplo anterior, ingresamos lo siguiente al intérprete:

>>> a3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])

Al ingresar esto:

>>> print (a3)


Vemos como la variable a3 contiene múltiples valores en forma ordenada:

[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]

Por ejemplo, en un array, podríamos almacenar las notas de los estudiantes de un curso y, luego,
por medio de código, acceder a dichas notas para que las muestre por estudiante, de mayor a
menor, para que haga una media, etc. Es decir, a partir de ahí, podríamos realizar distintas
operaciones.
Creación de arrays

Para crear un array se utiliza la siguiente función de NumPy: np.array(lista)


Esta función crea un array a partir de la lista o tupla lista y devuelve una referencia a él.

El contenedor «array()» indica que esta ya no es una lista normal de Python, en


cambio, es un arreglo de NumPy.

Si ingresamos en el intérprete lo siguiente, para crear un array con la función


np.array(lista):

>>> np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])

AL presionar «Enter», Numpy devuelve una referencia a él:

array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]])

El número de dimensiones del array dependerá de las listas o tuplas anidadas en


lista:

Para una lista de valores se crea un array de una dimensión, también conocido como
vector.

Para una lista de listas de valores se crea un array de dos dimensiones, también
conocido como matriz.
Para una lista de listas de valores se crea un array de tres dimensiones, también
conocido como cubo.

Y así sucesivamente. No hay límite en el número de dimensiones del array más allá de la
memoria disponible en el sistema.

Los elementos de la lista o tupla deben ser del mismo tipo.

El atributo «shape()» muestra una tupla con el tamaño del array.

(Sánchez Alberca, 2020, p. 45)


Figura 5: Las dimensiones de un array también se conocen como ejes

Fuente: Aprende con Alf, (2022), http://bit.ly/3SRKAxH

>>> # Array de una dimensión

>>> a1 = np.array([1, 2, 3])

>>> print(a1)

[1 2 3]

>>> # Array de dos dimensiones

>>> a2 = np.array([[1, 2, 3], [4, 5, 6]])

>>> print(a2)

[[1 2 3]

[4 5 6]]

>>> # Array de tres dimensiones


>>> a3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])

>>> print(a3)

[[[ 1 2 3]

[ 4 5 6]]

[[ 7 8 9]

[10 11 12]]]. (Sánchez Alberca, 2020, p. 46)


Figura 6: Tipos de array

Fuente: captura de pantalla de Python (Python 3.10.5).

Ingresemos en el intérprete este array de tres dimensiones.

Figura 7: Array de tres dimensiones

Fuente: captura de pantalla de Python (Python 3.10.5).

Figura 8: «Print(m)»

Fuente: captura de pantalla de Python (Python 3.10.5).

El esquema mostrado por la instrucción print(m) muestra que el primer elemento de la lista
usada para crear el array ([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) sigue siendo considerado como la
primera fila del nuevo array, y el segundo elemento ([11, 12, 13], [14, 15, 16], [17, 18, 19]])
como la segunda fila.

La primera dimensión ocupa el eje vertical (eje 0). (Sánchez Alberca, 2020, p. 46)
Figura 9: Esquema «print(m)»
Fuente: Interactive Chaos, (s. f.), http://bit.ly/3ZE7mvl

np.empty(dimensiones): crea y devuelve una referencia a un array vacío con las


dimensiones especificadas en la tupla dimensiones.

np.zeros(dimensiones): crea y devuelve una referencia a un array con las dimensiones


especificadas en la tupla dimensiones cuyos elementos son todos ceros.

np.ones(dimensiones): crea y devuelve una referencia a un array con las dimensiones


especificadas en la tupla dimensiones cuyos elementos son todos unos.

np.full(dimensiones, valor): crea y devuelve una referencia a un array con las


dimensiones especificadas en la tupla dimensiones cuyos elementos son todos valor.

np.identity(n): crea y devuelve una referencia a la matriz identidad de dimensión n.

np.arange(inicio, fin, salto): Crea y devuelve una referencia a un array de una dimensión
cuyos elementos son la secuencia desde inicio hasta fin tomando valores cada salto.

np.linspace(inicio, fin, n): crea y devuelve una referencia a un array de una dimensión
cuyos elementos son la secuencia de n valores equidistantes desde inicio hasta fin.

np.random.random(dimensiones): crea y devuelve una referencia a un array con las


dimensiones especificadas en la tupla dimensiones cuyos elementos son aleatorios.

Atributos de un array

Existen varios atributos y funciones que describen las características de un array.

a.ndim: Devuelve el número de dimensiones del array a.

a.shape: Devuelve una tupla con las dimensiones del array a.

a.size: Devuelve el número de elementos del array a.


a.dtype: Devuelve el tipo de datos de los elementos del array a.

Acceso a los elementos de un array

Para acceder a los elementos contenidos en un array se usan índices al igual que para
acceder a los elementos de una lista, pero indicando los índices de cada dimensión
separados por comas.

Al igual que para listas, los índices de cada dimensión comienzan en 0.

También es posible obtener subarrays con el operador dos puntos: indicando el índice
inicial y el siguiente al final para cada dimensión, de nuevo separados por comas.

Por ejemplo, si ingresamos en el intérprete lo siguiente:

>>> a = np.array([[1, 2, 3], [4, 5, 6]])


>>> print(a[1, 0]) # Acceso al elemento de la fila 1 columna 0
4

>>> print(a[1][0]) # Otra forma de acceder al mismo elemento


4
>>> print(a[:, 0:2])
[[1 2]
[4 5]]. (Sánchez Alberca, 2020, pp. 46-47)

Actividad de repaso
Seleccione la opción correcta. ¿Cuántas dimensiones tiene el siguiente
array? >>> a2 = np.array([[1, 2, 3], [4, 5, 6]])

Array de tres dimensiones.

Array de una dimensión.

Array de dos dimensiones.

Justificación

Tema 3. Operaciones numéricas con arreglos

¿Qué tipos de datos puede contener un array en NumPy?


Básicamente, los datos (elementos) que puede contener un array NumPy son los siguientes:

Cadenas de caracteres.
Números enteros de distintos tamaños.
Números reales.
Booleanos.

Operaciones matemáticas con arrays

Existen dos formas de realizar operaciones matemáticas con arrays: a nivel de elemento y
a nivel de array.

Las operaciones a nivel de elemento operan los elementos que ocupan la misma posición
en dos arrays. Se necesitan, por tanto, dos arrays con las mismas dimensiones y el
resultado es una array de la misma dimensión.

Los operadores matemáticos +, -, *, /, %, ** se utilizan para la realizar suma, resta,


producto, cociente, resto y potencia a nivel de elemento.

Por ejemplo, si ingresamos en el intérprete lo siguiente:

>>> a = np.array([[1, 2, 3], [4, 5, 6]])


>>> b = np.array([[1, 1, 1], [2, 2, 2]])
>>> print(a + b )
[[2 3 4]
[6 7 8]]

>>> print(a / b)
[[1. 2. 3. ]
[2. 2.5 3. ]]

>>> print(a ** 2)
[[ 1 4 9]
[16 25 36]]

Filtrado de elementos de un array

Una característica muy útil de los arrays es que es muy fácil obtener otro array con los
elementos que cumplen una condición.

a[condicion]: devuelve una lista con los elementos del array a que cumplen la condición.
En Python, existen diversos operadores estándar que nos permiten el proceso de
filtrado:

< (menor que)


> (mayor que)
== (igual a)
<= (menor que o igual a)
>= (mayor que o igual a)
!= (distinto a)

Por ejemplo, si ingresamos en el intérprete lo siguiente:

>>> a = np.array([[1, 2, 3], [4, 5, 6]])

Le solicitamos ahora que muestre solo aquellos elementos del arreglo que cumplan
con la condición de ser mayores que 2 y menores que 6:

>>> print(a[(a>2) & (a <6)])

Muestra:

[3 4 5]. (Sánchez Alberca, 2020, pp. 47-48)


Por ejemplo, si ingresamos en el intérprete lo siguiente:

>>> a = np.array([[10, 12, 3], [4, 55, 16]])

Ahora, queremos que nos muestre solo los elementos que sean mayores a 1 y que sean
distintos a 55, ingresando:

>>> print(a[(a>1) & (a !=55)])


Nos muestra:
[10 12 3 4 16]

Añadir elementos a un array


Podemos añadir nuevos elementos a un array ya creado, como se muestra a continuación:

Entramos al intérprete de Python (https://www.python.org/shell/), ingresamos lo siguiente en el


intérprete:
>>> import numpy as np
>>> a = np.array((1,2,3))
>>> np.append(a,(4,5))
array([1, 2, 3, 4, 5])

Vemos cómo se agregaron los elementos 4 y 5 al array original con np.append(a,(4,5))

Eliminar elementos a un array


Podemos eliminar elementos en los arrays ya creados al indicar la posición del elemento que
queremos eliminar.

Probemos lo siguiente en el intérprete:

>>> import numpy as np


>>> a = np.array((1,2,3))
>>> np.delete(a,0)
array([2, 3])

Se elimina el elemento 1 del array a. En Python, se considera que está en la posición 0.

Figura 10: Eliminar elementos de un array

Fuente: captura de pantalla de Python (Python 3.10.5).

Probemos lo siguiente en el intérprete:

>>> import numpy as np


>>> a = np.array((1,2,3))
>>> np.delete(a,1)
array([1, 3])

Se elimina el elemento 2 del array a. En Python, se considera que está en la posición 1.


Comparación de arrays con NumPy
numpy.array_equal()

numpy.array_equal(a1, a2, equal_nan=False) toma dos arrays a1 y a2 como entrada y devuelve


«True» si ambas matrices tienen la misma forma y elementos, el método devuelve «False» en
caso contrario.

Veamos este ejemplo de utilización del método numpy.array_equal() para comparar dos
arrays con NumPy.

Ingresamos lo siguiente en el intérprete:

>>> import numpy as np


>>> a1 = np.array([1,2,4,6,7])
>>> a2 = np.array([1,3,4,5,7])

print(np.array_equal(a1,a1))
True
print(np.array_equal(a1,a2))
False

El atributo «shape» de un array


El atributo numpy.ndarray.shape de un array nos devuelve una tupla con el tamaño del array:

Figura 11: Atributo «shape»

Fuente: captura de pantalla de Python (Python 3.10.5).

En este ejemplo, se trata de un array de dos dimensiones y tamaño 2 (filas) y 6 (columnas).


Generación de manipulaciones de la matriz: indexación en matrices, segmentación de
matrices, remodelación de matrices, unión y división de matrices.

Figura 12: Indexación en matrices

Fuente: captura de pantalla de Python (Python 3.10.5).

Figura 13: Segmentación de matrices

Fuente: captura de pantalla de Python (Python 3.10.5).

Figura 14: Remodelación de matrices

Fuente: captura de pantalla de Python (Python 3.10.5).

Figura 15: Unión y división de matrices

Fuente: captura de pantalla de Python (Python 3.10.5).


Actividad de repaso
Si ingresamos en el intérprete lo siguiente:
>>> a = np.array([[1, 24, 37], [43, 15, 68]])

Si queremos que nos muestre solo los elementos que sean menores que
60 y que sean distintos a 15, ¿cuál de las siguientes opciones debemos
ingresar?

>>> print(a[(a >= 60) & (a !=15)])

>>> print(a[(a <= 60) & (a ==15)])

>>> print(a[(a<60) & (a !=15)])

>>> print(a[(a <60) & (a>15)])

Justificación

Tema 4. Operaciones complejas en arreglos de NumPy


NumPy se puede utilizar para realizar una serie de operaciones matemáticas en matrices como
rutinas trigonométricas, estadísticas y algebraicas. La librería contiene un gran número de
funciones matemáticas, algebraicas y de transformación.

Muchas operaciones no se pueden realizar simplemente aplicando la sintaxis normal a un arreglo


NumPy.

Para estos casos, existen varias operaciones matemáticas que tienen métodos incorporados en
la biblioteca NumPy.

Veamos el siguiente ejemplo, ingresamos en el intérprete (https://www.python.org/shell/):

>>> import numpy as np

Ahora crea el siguiente array:

>>> a = np.array([49, 81, 144, 16])


Podemos calcular la raíz cuadrada de cada elemento en un arreglo usando el método
«np.sqrt»:

Ingresamos:

>>> np.sqrt(a)

Nos dará este resultado, un array formado por las raíces cuadradas de cada uno de los
elementos originales:

array([ 7., 9., 12., 4.])

Figura 16: Calcular la raíz cuadrada de cada elemento

Fuente: captura de pantalla de Python (Python 3.10.5).

Se pueden realizar otras operaciones matemáticas en arreglos de NumPy, como las


siguientes:

«np.sin(arr)»: calcula el seno trigonométrico de cada valor en el arreglo.

«np.cos(arr)»: calcula el coseno trigonométrico de cada valor en el arreglo.

«np.log(arr)»: calcula el logaritmo en base diez de cada valor en el arreglo.

Operaciones estadísticas en arreglos de NumPy


Podemos usar NumPy para calcular propiedades estadísticas de un conjunto de datos, como la
media, la mediana, la desviación estándar, etc. Veamos algunos ejemplos:

Media

La media (mean), comúnmente conocida como el promedio, es útil para obtener el centro de un
dataset. NumPy incluye una función para calcular la media de los arreglos: «np.mean»
Ingresamos lo siguiente en el intérprete:

>>> import numpy as np


>>> arr = np.array([5, 10.4, 4, 3, 6.6])
>>> np.mean(arr)

Muestra la media:

5.8

Figura 17: Calcular la media

Fuente: captura de pantalla de Python (Python 3.10.5).

Utilización de «np.mean» para calcular el porcentaje de elementos de un


array que tienen ciertas propiedades
Los operadores lógicos evalúan cada ítem en un array para comprobar si cumple una condición.

Si el ítem cumple, evalúa a «True» = 1, si no «False» = 0.

Cuando «np.mean» calcula una sentencia lógica, el resultado (la media) será equivalente al
número total de los «True», dividido por el largo («len») del array.

Ingresamos lo siguiente en el intérprete:

>>> import numpy as np


>>> respuestas_encuesta = [5, 10.4, 4, 3, 6.6]
>>> respuestas_array = np.array(respuestas_encuesta)
>>> np.mean(respuestas_array)
5.8
>>> np.mean(respuestas_array > 5)
0.4

La última línea de código evaluó las respuestas mayores a 5 y les asignó el valor de 1 («True»).
Luego, las dividió por el largo («len»). El resultado arroja que el 40 % de las respuestas fueron
una calificación de más de 5 (Guías de Make It Real, s. f.).

Mediana

La mediana es el valor del medio de un conjunto de datos que ha sido ordenado del más pequeño
al más grande. Si el largo del conjunto de datos es un número impar, la mediana sería el valor
central. Utilizaremos la función «np.median()»

>>> import numpy as np


>>> numeros = [1, 1, 2, 3, 4, 5, 5]
>>> numeros = np.array(numeros)
>>> np.median(numeros)

Muestra la mediana:

3.0

Desviación estándar

La desviación estándar nos dice qué tan dispersos están nuestros datos.
A mayor desviación estándar, más dispersos están nuestros datos del centro.
A menor desviación estándar, más datos están agrupados alrededor de la media.

Para calcular la desviación estándar, NumPy tiene la función «np.std»

Veamos este ejemplo, ingresemos en el intérprete:

>>> import numpy as np


>>> numeros = np.array([65, 36, 52, 91, 63, 79])
Veamos cual es la media:
>>> np.mean(numeros)
64.33333333333333

Ahora, ingresemos la función para calcular la desviación estándar:

>>> np.std(numeros)

Nos muestra la desviación estándar de ese arreglo de datos:

17.716909687891082

Operaciones lógicas

En NumPy, se pueden realizar operaciones lógicas por cada elemento (element-wise).

Veamos algunos ejemplos.

«Greater»

La función «numpy.greater» devuelve el valor verdadero de la comparación x1 > x2, comparando


elemento a elemento:

Ingresamos en el intérprete:

>>> import numpy as np


>>> a=np.array ([5,2,3])
>>> b=np.array ([2,3,2])

Ahora usamos la función «np.greater()» para hacer la comparación de cada elemento del arreglo
a con el de b, en el orden en que fueron ingresados:

>>> print(np.greater(a,b))

Muestra lo siguiente:

[ True False True]


El primer «True» muestra que 5>2.

La siguiente salida: «False» muestra que 2 no es mayor que 3.

La tercera salida «True» muestra que 3>2.


Greater_equal

La función numpy.greater_equal devuelve el valor verdadero de la comparación x1 ≥ x2


(mayor o igual), comparando elemento a elemento:
Figura 18: Función «numpy.greater_equal»

Fuente: Interactive Chaos, s. f., http://bit.ly/3Ys75dU

Less

La función numpy.less devuelve el valor verdadero de la comparación x1 < x2,


comparando elemento a elemento:
Figura 19: Función «numpy.less»

Fuente: Interactive Chaos, s. f., http://bit.ly/3Ys75dU

Otras operaciones lógicas

less_equal

La función numpy.less_equal devuelve el valor verdadero de la comparación x1 ≤ x2,


comparando elemento a elemento.

not_equal

La función numpy.not_equal devuelve el valor verdadero de la comparación x1 ≠ x2,


comparando elemento a elemento.

Equal

La función numpy.equal devuelve el valor verdadero de la comparación x1 == x2,


comparando elemento a elemento.

logical_and

La función numpy.logical_and evalúa el valor verdadero de x1 and x2, comparando


elemento a elemento.

logical_or

La función numpy.logical_or evalúa el valor verdadero de x1 or x2, comparando elemento


a elemento.

logical_xor

La función numpy.logical_xor evalúa el valor verdadero de x1 xor x2, comparando


elemento a elemento.

logical_not

La función numpy.logical_not aplica el operador lógico not a los elementos de la estructura


de entrada.

Máximum

La función numpy.maximum evalúa el valor máximo de las estructuras de entrada


comparando elemento a elemento.

Mínimum

La función numpy.minimum evalúa el valor mínimo de las estructuras de entrada


comparando elemento a elemento. (Interactive Chaos, s. f., http://bit.ly/3Ys75dU)

Funciones trigonométricas con NumPy


Sin

La función numpy.sin devuelve el seno de los elementos de la estructura de entrada.

Cos
La función numpy.cos devuelve el coseno de los elementos de la estructura de entrada.

Tan

La función numpy.tan devuelve la tangente de los elementos de la estructura de entrada.

Arcsin

La función numpy.arcsin devuelve el arcoseno de los elementos de la estructura de


entrada.

Arccos

La función numpy.arccos devuelve el arcocoseno de los elementos de la estructura de


entrada.

Arctan

La función numpy.arctan devuelve la arcotangente de los elementos de la estructura de


entrada.

deg2rad

La función numpy.deg2rad convierte ángulos de grados sexagesimales a radianes.


(Interactive Chaos, s. f., http://bit.ly/41QKGd5)

Cortes
Un corte, usualmente, contiene una porción de una secuencia.

Para recuperar un solo valor, se utiliza la indexación. Para recuperar una colección de valores, se
usa el corte.

Probemos con este ejemplo, ingresemos en el intérprete:

>>> import numpy as np


>>> a=np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

Ahora, hacemos el siguiente corte, ingresando lo siguiente:


>>> a[2:9]

Muestra:

array([2, 3, 4, 5, 6, 7, 8])

Figura 20: Recuperar una colección de valores

Fuente: captura de pantalla de Python (Python 3.10.5).

La diversidad de operaciones complejas en arreglos que nos ayuda a realizar NumPy son
de gran valor en el campo del procesamiento de datos y son tan diversas que lo visto
hasta ahora es un solo un ejemplo de todo su potencial.

Actividades de repaso
Tenemos el siguiente array:

>>> a = np.array([144,81,16,49])
Si ingresamos este código:
>>> np.sqrt(a)

¿Cuál de estas opciones será la salida?

array([12.,9.,4.,7.])

array([12.,7.,4.,9.])

array([ 7.,4.,9.,12.])

array([ 12.,9.,4.,7.])

Justificación

La función «np.mean» se utiliza en NumPy para calcular:

Mediana.
Desviación estándar.

Media.

Justificación

Unidad 2. Pandas: manipulación y exploración de datos


Tema 1. Manipulación de datos con Pandas
El nombre de Pandas viene de panel data. Es una popular librería de código abierto para los
desarrolladores en Python y, sobre todo, dentro del ámbito de Data Science y Machine Learning,
ya que ofrece unas estructuras muy poderosas y flexibles que facilitan la manipulación y
tratamiento de datos. Agrupa en una única librería todo lo necesario para que un analista de datos
pueda cargar datos, modelar, analizar, manipular y prepararlos. Trabaja con múltiples formatos de
archivos de datos como .csv o .xls.

Como vimos, la estructura de datos NumPy proporciona características para la limpieza y


ordenamiento de los datos que se ven normalmente en las tareas de computación numérica. Si
bien cumple con este propósito, cuando se requiere de mayor flexibilidad, aparecen sus
limitaciones (por ejemplo, etiquetar los datos, trabajar con missing values o datos faltantes, etc.) y,
por ende, cuando intentamos operaciones que no se corresponden bien con la transmisión por
elementos (agrupaciones o pivotes, etc.) se producirá un error.

Como vimos en el primer módulo, la librería Pandas (en particular, sus objetos Series y
DataFrame) se basa en la estructura de matriz NumPy y brinda acceso eficiente a este tipo de
tareas de "transferencia de datos" que son grandes consumidoras de tiempo para el data
scientist.

Entonces, para el trabajo en el área del procesamiento de datos, Pandas es una herramienta de
análisis y manipulación de datos de código abierto rápida, potente y flexible.

Pandas permite realizar tareas importantes, como alinear datos para su comparación, fusionar
conjuntos de datos, gestión de datos perdidos, etc. Se ha convertido en una librería muy
importante para procesar datos a alto nivel.

La página web oficial de Pandas ofrece información para instalarlo, documentación y acceso a los
desarrollos de la comunidad de usuarios: https://pandas.pydata.org/

Es necesario importar la librería para poder trabajar con ella, ingresando al comienzo lo siguiente
en el intérprete:

>>> import pandas as pd

La estructura de datos más básica de Pandas es el objeto Series. Un vector etiquetado capaz
de contener cualquier tipo de dato (enteros, reales, cadenas de texto, fechas, objetos de Python)
con etiquetas que se denominan índices.

La otra estructura de datos, el DataFrame, es una colección ordenada de columnas con


nombres y tipos, similar a las tablas de las bases de datos, donde las filas son un registro y las
columnas son los atributos. Cada una de las columnas de este tipo de datos son un objeto Series.

Los objetos DataFrame de Pandas son una estructura de datos de alto rendimiento con la que es
posible manejar fácilmente datos tabulares para el análisis de datos.

En estos objetos, cada una de las filas representa un registro, mientras que cada una de las
columnas representan variables, a las que generalmente se les asigna un nombre. Es una tarea
habitual seleccionar de forma rápida tanto filas como columnas.

A continuación, estudiaremos con más profundidad estas dos importantes estructuras de datos de
Pandas.
Tema 2. Series y DataFrames en Pandas

Series
Series es la estructura más simple que proporciona Pandas y se asemeja a una columna en una
hoja de cálculo de Excel.

Un objeto Series tiene dos componentes principales: un índice y un vector de datos. Ambos
componentes son listas con la misma longitud.

El índice contiene valores únicos y, por lo general, ordenados, y se usa para acceder a valores
individuales de los datos.
Figura 21: Esquema de un objeto Series

Fuente: Khatib, (s. f.), https://bit.ly/3JfKhKc

El método básico para crear Series es con el constructor:

s = pd.Series(data, index=index)

Aquí un dato puede ser diversas cosas: un diccionario de Python, un «ndarray», un valor escalar
(ejemplo 5).

Este constructor acepta tres parámetros principales:

data: estructura de datos tipo array, iterable, diccionario o valor escalar que contendrá los
valores a introducir en la serie.
index: estructura tipo array con la misma longitud que los datos. Si este argumento no se
añade al crear la serie, se agrega un índice por defecto formado por números enteros desde
0 hasta n-1, donde n es el número de datos.
«dtype»: tipo de datos para la serie. Si no se especifica, será inferido por el sistema a partir
de los datos.

Al practicar nuestros ejemplos con Pandas en el intérprete, comenzamos importando la librería,


ingresando lo siguiente: import pandas as pd

Creación de una serie a partir de una lista o de un array NumPy


Ingresemos este ejemplo sencillo:

>>> import pandas as pd


>>> s=pd.Series([2,4,5])
>>> s

Nos muestra:

0 2
1 4
2 5

dtype: int64

Ingresamos lo siguiente en el intérprete:

>>> import pandas as pd


>>> s=pd.Series([7,5,3])
>>> s
0 7
1 5
2 3
dtype: int64

Figura 22: Creación de una serie a partir de una lista o de un array NumPy

Fuente: captura de pantalla de Python (Python 3.10.5).

Hemos creado una serie simplemente a partir de una lista.

El «dtype:int 64» que aparece al final representa el tipo de datos para la serie. Como no se
especificó el tipo de datos con el «dtype», es inferido a partir de los datos.
(Con frecuencia, en Python, verás el tipo de dato Int64, que representa un entero de 64 bits).

Como no se especificó un índice, se asignó uno automáticamente con los valores 0, 1 y 2.

Especificación de índice
Ahora, siguiendo este mismo ejemplo anterior, vamos a especificar un índice:

Ingresamos lo siguiente en el intérprete:

>>> import pandas as pd


>>> s=pd.Series([7,5,3],index=['Ene','Feb','Mar'])
>>> s

Nos muestra:

Ene 7
Feb 5
Mar 3
dtype: int64

Aquí, vemos que aparece en la primera columna el índice que especificamos.

Creación de una estructura tipo diccionario


Veamos este ejemplo sencillo:

>>> import pandas as pd


>>> d = {"b": 1, "a": 0, "c": 2}
>>> pd.Series(d)

El intérprete nos muestra lo siguiente:

b 1
a 0
c 2
dtype: int64

Figura 23: Creación de una estructura tipo diccionario

Fuente: captura de pantalla de Python (Python 3.10.5).

Observa que hemos creado una estructura tipo diccionario en Python: d = {"b": 1, "a": 0, "c":
2}

El diccionario físico es un objeto que contiene palabras y cada palabra tiene asociado un
significado.

En Python, un diccionario es también un objeto indexado por claves (las palabras) que tienen
asociados unos valores (los significados).

Los diccionarios en Python nos permiten almacenar una serie de mapeos entre dos conjuntos de
elementos, llamados keys and values (claves y valores).

Todos los elementos en el diccionario se encuentran encerrados en un par de corchetes {}.

Cada elemento en un diccionario contiene una clave y un valor, es decir, un par de clave-valor.

Cada par de clave-valor es denominado como elemento (ítem).

La ventaja de esto es que podemos acceder a todos los valores almacenados usando
simplemente las claves.

Entonces, un diccionario en Python es una estructura de datos que permite almacenar cualquier
tipo de información, desde cadenas de texto o caracteres hasta números enteros, con decimales,
listas e incluso otros diccionarios.

Utilización de la llamada «range()»


>>> import pandas as pd
>>> idx = range(4)
>>> vals = ['a','b','c','d','e']
>>> s = pd.Series(index=idx, data=vals)
>>> print(s[1])
b

En este ejemplo, se ha creado un objeto Series que contiene caracteres indexados por números
enteros obtenidos mediante la llamada «range()».

Recordemos que, en Python, el primer elemento de una lista siempre comienza en el índice
0, por eso, al pedirle «print(s[1])» nos muestra el elemento b en la serie.

Método «Series.apply»

El método «pandas.Series.apply» permite aplicar a cada uno de los elementos de la serie una
función. Esta deberá aceptar un único valor como argumento y devolver también un único valor.
El resultado es también una serie Pandas.

Veamos este ejemplo del método «Series.apply».

Ingresamos lo siguiente en el intérprete:

>>> import pandas as pd


>>> s=pd.Series([20, 21, 12],index=[ 'Londres', 'New York', 'Helsinki'])
>>> s
Muestra:
Londres 20
New York 21
Helsinki 12
dtype: int64

Hemos creado una serie con las temperaturas habituales en verano de tres ciudades.
Figura 24: Método «Series.apply»

Fuente: captura de pantalla de Python (Python 3.10.5).

Ahora, vamos a elevar al cuadrado los valores, definiendo una función y pasándola como
un argumento «Series.apply()»

>>> def cubo(x):


return x ** 2 < # recordar aquí mantener la indentación.
>>> s.apply(cubo)
Londres 400
New York 441
Helsinki 144
dtype: int64

Al ingresar «s.apply(cubo)» aparecen los valores elevados al cuadrado.

Python utiliza la indentación para delimitar la estructura, lo que permite establecer bloques de
código. Los delimitadores son los dos puntos ( : ) y la indentación del código.

DataFrame en Pandas
En el punto anterior, vimos la clase Series de Pandas, que representa vectores de datos y se
asemeja a una columna de una hoja de cálculo de Excel.

Siguiendo con esa analogía, la clase DataFrame representaría una hoja de cálculo completa, en
la que cada columna es un objeto Series.

DataFrame (“hoja de datos o marco de datos”) son paneles bidimensionales compuestos por filas
y columnas que permiten destacar las relaciones entre las distintas variables de la serie de datos.

El constructor para la creación de dataframes es: «pd.DataFrames»


Acepta cuatro parámetros principales:

Data: estructura de datos «ndarray» (array NumPy), diccionario u otro DataFrame.


índex: índice a aplicar a las filas. Si no se especifica, se asignará uno por defecto formado
por números enteros entre 0 y n-1, donde n es el número de filas del DataFrame.
columns: etiquetas a aplicar a las columnas. Al igual que ocurre con el índice de filas, si no
se añade, se asignará uno automático formado por números enteros entre 0 y n-1, donde n
es el número de columnas.
«dtype»: tipo a aplicar a los datos. Solo se permite uno. Si no se especifica, se infiere el
tipo de cada columna a partir de los datos que contengan.

Los valores de los índices de filas y columnas no tienen porque ser necesariamente distintos.

Creación de un DataFrame

Veamos este ejemplo con el intérprete, crearemos el siguiente DataFrame usando el constructor:
«pd.DataFrames».

>>> import pandas as pd


>>> ventas=pd.DataFrame({'Entradas': [41,32,56],'Salidas': [17,54,78]},index=['Ene','Feb','Mar'])
>>> ventas
Entradas Salidas
Ene 41 17
Feb 32 54
Mar 56 78

Hemos pasado al constructor «pd.DataFrames» un diccionario y una lista: las claves del
diccionario serán los nombres de las columnas, sus valores, los valores de las columnas y
los valores de la lista se convertirán en las etiquetas de filas.

Una columna solo puede contener un tipo de datos, pero cada columna del DataDrame puede
contener un tipo de datos diferente.

Tanto el índice de filas como el de columnas poseen el atributo «name». Una vez fijado, se
muestra al imprimir la estructura. Dentro de este mismo ejemplo, ingresemos ahora el nombre de
la primera columna (índex):

>>> ventas.index.name='Meses'

Meses

Ene 41 17
Feb 32 54
Mar 56 78

Añadir datos con el atributo «loc» en un DataFrame.

El atributo «loc» permite acceder a una fila concreta (o varias) a través de su nombre.

Veamos este ejemplo tomado de https://www.codigopiton.com/como-crear-un-dataframe-con-


pandas-y-python/#3-c%C3%B3mo-insertar-datos-en-un-dataframe-
Ingresa lo siguiente en el intérprete:

>>> import pandas as pd


>>> df = pd.DataFrame()
>>> # creamos las columnas
>>> df['Mañana'] = None
>>> df['Tarde'] = None
>>> df['Noche'] = None
>>> # añadimos filas por su nombre de fila
>>> df.loc['Lunes'] = ['Tensión', 'Alergia', 'Sedante']
>>> df.loc['Martes'] = ['Tensión', None, 'Alergia']
>>> df.loc['Miércoles'] = ['Protector', 'Alergia', 'Tensión']
>>> print(df)
Mañana Tarde Noche
Lunes Tensión Alergia Sedante
Martes Tensión None Alergia
Miércoles Protector Alergia Tensión. (Código Pitón, s. f., http://bit.ly/3kP6XHG)
Observamos que los martes por la tarde no hay medicación, por lo que aparece «None», tal como
fue introducido.
Crear un DataFrame a partir de una lista de listas
Las listas permiten almacenar objetos mediante un orden definido y con posibilidad de
duplicados. Las listas son estructuras de datos mutables, lo que significa que podemos añadir,
eliminar o modificar sus elementos.
Para crear un DataFrame a partir de una lista de listas, llamadas datos, hay que invocar al
constructor proporcionándole como parámetro la lista de la siguiente forma: DataFrame().
Dicha llamada devolverá el objeto DataFrame creado con los datos indicados y listo para
usar.

Tenemos una lista de tres listas con cuatro valores cada una que representa, por
ejemplo, la siguiente tabla de datos:

10 11 12 13
20 21 22 23
30 31 32 33

Ahora, vamos a crear el DataFrame a partir de dicha lista de listas.

Ingresamos en el intérprete lo siguiente:

>>> import pandas as pd


>>> datos = [[10, 11, 12, 13],
[20, 21, 22, 23],
[30, 31, 32, 33]]
>>> df = pd.DataFrame(datos)
>>> print(df)

Este código genera el siguiente resultado por pantalla (por defecto, los nombres de las
columnas son 0, 1, 2 y 3 y los de las filas son 0, 1, y 2).

0 1 2 3
0 10 11 12 13
1 20 21 22 23
2 30 31 32 33

Fíjate que cada fila del DataFrame corresponde con cada fila de la lista de listas original.
(Código Pitón, s. f., http://bit.ly/3kP6XHG)
Transponer filas por columnas

Si queremos que cada fila de la lista de listas pase a ser una columna en el DataFrame
tendremos que transponer el DataFrame, es decir, intercambiar filas por columnas a la hora de
crearlo, usando la función «transpose», de esta manera, df = pd.DataFrame().transpose().

Usando el mismo ejemplo del ejercicio anterior, en lugar de ingresar:

>>> df = pd.DataFrame(datos)

Ingresamos:

>>> df = pd.DataFrame(datos).transpose()

Observamos que, ahora, se colocó la función «transpose()»

>>> print (df)

Muestra que se intercambiaron las filas por columnas:

0 1 2
0 10 20 30
1 11 21 31
2 12 22 32
3 13 23 33

Actividad de repaso
Ingresamos lo siguiente en el intérprete:
>>> import pandas as pd
>>> s=pd.Series([2,9,12])
>>> s
¿Cuál de estas opciones será la salida?

Opción A:
2
9
12
dtype: int64
Opción B:
1 2
2 9
3 12
dtype: int64

Opción C:
0 2
1 9
2 12
dtype: int64
Opción A.

Opción B.

Opción C.

Justificación

Tema 3. Manejo de archivos CSV


Los datos de origen suelen venir en muy variadas formas, ya sea en una lista, un diccionario, un
array de NumPy, un fichero de texto plano, un fichero CSV (valores separados por comas), un
fichero JSON, una base de datos, etc.

El formato CSV (Comma Separated Values o valores separados por comas) es un método muy
extendido y simple para compartir datos. Son archivos de texto que contienen una tabla de datos,
en las que cada línea es una fila y, en cada fila, cada valor se asigna a una columna mediante un
separador.

Los separadores deben ser caracteres que no aparezcan en los datos, por ejemplo, una coma (el
separador más usado, de ahí el nombre de CSV), un espacio en blanco o un punto y coma
(usado por defecto en los CSV de Excel).

Se pueden registrar, almacenar y procesar grandes cantidades de datos estructurados.

Los archivos CSV se utilizan en muchas áreas, algunos ejemplos son los siguientes:
catálogos de productos de las tiendas online;
exportación de datos desde una herramienta de software de SEO (optimización en motores
de búsqueda), herramientas de reanálisis o herramientas de análisis web como Google
Analytics para su posterior procesamiento con sus propios programas o informes;
importación de productos para portales de comparación de precios o portales de compras
como Google Shopping o Amazon Product Ads;
exportación de datos para la provisión de datos entregados a través de CSS (hojas de estilo
en cascada);
exportación de listas de URL para su posterior procesamiento con las herramientas de
análisis adecuadas; y
provisión de listas de productos para marketing de afiliación o retargeting.

Un archivo CSV se puede crear desde Notepad o Microsoft Excel y guardarlo como .csv, en este
caso, puede utilizar comas para separar entre campos.

Figura 25: Archivo CSV desde Notepad

Fuente: captura de pantalla de Python (Python 3.10.5).

Se utiliza:

«pd.read_csv()» para cargar los contenidos del archivo CSV en un DataFrame.


«DataFrame.to_csv()» para volcar el contenido de un DataFrame a un archivo CSV.

Lectura de archivos CSV


Para crear un DataFrame a partir de los valores de un fichero CSV, se usa la función de
pandas «read_csv», proporcionándoles el fichero y el carácter delimitador a usar. Estas funciones
crean un nuevo DataFrame con los datos contenidos en el fichero.
Veamos el siguiente ejemplo tomado de https://www.analyticslane.com/2018/06/15/guardar-y-leer-
archivos-csv-con-python/

La lectura de los archivos se realiza con el método «read_csv» de Pandas. Se debe indicar la
ruta al archivo.
>>> df = pd.read_csv('example.csv')
>>> df

Unnamed first_name last_name age amount_1 amount_2


0 0 Sigrid Mannock 27 7.17 8.06
1 1 Joe Hinners 31 1.90 ?
2 2 Theodoric Rivers 36 1.11 5.9
3 3 Kennedy Donnell 53 1.41 ?
4 4 Beatrix Parlett 48 6.69 ?
5 5 Olimpia Guenther 36 4.62 7.48
6 6 Grange Douce 40 1.01 4.37
7 7 Sallee Johnstone 34 4.88 ? (Rodríguez, 2018, http://bit.ly/3SPRnbf)

Guardado de archivos CSV


Se utiliza «DataFrame.to_csv()» para volcar el contenido de un DataFrame a un archivo CSV.

Para guardar un archivo CSV, es necesario disponer, en primer lugar, de un DataFrame en


memoria. Una vez generado este, se puede volcar a un archivo CSV utilizando el método
«to_csv».

Veamos el siguiente ejemplo tomado de https://www.analyticslane.com/2018/06/15/guardar-y-leer-


archivos-csv-con-python/
import pandas as pd
data = {'first_name': ['Sigrid', 'Joe', 'Theodoric','Kennedy', 'Beatrix', 'Olimpia', 'Grange',
'Sallee'],
'last_name': ['Mannock', 'Hinners', 'Rivers', 'Donnell', 'Parlett', 'Guenther', 'Douce',
'Johnstone'],
'age': [27, 31, 36, 53, 48, 36, 40, 34],
'amount_1': [7.17, 1.90, 1.11, 1.41, 6.69, 4.62, 1.01, 4.88],
'amount_2': [8.06, "?", 5.90, "?", "?", 7.48, 4.37, "?"]}
df = pd.DataFrame(data, columns = ['first_name', 'last_name', 'age', 'amount_1',
'amount_2'])
df.to_csv('example.csv'). (Rodríguez, 2018, http://bit.ly/3SPRnbf)
En caso de que se desee cambiar el delimitador, se puede indicar con la propiedad «sep». Para
que este sea punto y coma, simplemente se ha de escribir:

df.to_csv('example_semicolon.csv', sep=';')

Actividad de repaso

¿Qué función se usa en Pandas para cargar los contenidos del archivo
CSV en un DataFrame?

«DataFrame.to_csv()»

«pd.read_csv()»

Justificación

Tema 4. Conexión con bases de datos tipo SQL


SQL, por sus siglas en inglés, significa lenguaje de consulta estructurada (Structured Query
Language). Es un lenguaje de programación diseñado para actualizar, obtener y calcular
información en bases de datos relacionales. Las sentencias SQL se utilizan para realizar tareas
como actualizar datos en una base de datos o recuperar datos de una base de datos.

Algunos sistemas de gestión de bases de datos relacionales comunes que utilizan SQL son:
Oracle, MySQL, Microsoft SQL Server, Access, Ingres, etc.

Los archivos con la extensión SQL contienen código escrito en el lenguaje de consulta
estructurada. El código contenido en el archivo SQL se utiliza para modificar el contenido de otras
bases de datos relacionales. Los archivos SQL pueden utilizarse para eliminar, insertar, extraer y
actualizar datos e información.

Una base de datos SQL está formada por tablas con filas y columnas. En las filas, figuran los
diferentes registros de la tabla, mientras que las columnas corresponden a los campos.

Las bases de datos relacionales se basan en la organización de la información en partes


pequeñas que se integran mediante identificadores.
Una relación de tabla hace coincidir los datos de los campos clave (a menudo, un campo con el
mismo nombre en ambas tablas). En la mayoría de los casos, estos campos coincidentes son la
clave principal de una tabla, que proporciona un identificador único para cada registro y una clave
externa de la otra tabla.

Figura 26: Relaciones de tablas en SQL

Fuente: [imagen sin título sobre relaciones de tablas en SQL], (2014), http://bit.ly/3ZlHuoo

SQL maneja diversos tipos de datos: Bit, Char, DateTime, Decimal, Float, Entero, Money,
Numeric.

Como podemos observar, los archivos SQL son de una complejidad mucho mayor que los
archivos CSV.

Por esto, los requerimientos previos para establecer relaciones entre los archivos SQL y
los DataFrame de Pandas son mayores y se requieren más conocimientos iniciales sobre
el entorno de las bases de datos SQL.

Dos operaciones fundamentales para relacionar archivos SQL y DataFrames en Pandas


son las siguientes:

Cargar los contenidos de una tabla SQL en un DataFrame: se usa la función de «pd
read_sql()».
Cargar registros de un DataFrame en una base de datos SQL: se usa la función de
«DataFrame.to_sql».

Cargar los contenidos de una tabla SQL en un DataFrame


Para crear un DataFrame a partir de una base de datos SQL, se utiliza la función de «pd
read_sql()», a la que se le debe proporcionar un nombre de tabla o una consulta SQL y una
conexión con la base de datos.

La función devolverá el DataFrame con los datos correspondientes listo para usar.

Veamos el siguiente ejemplo, siguiéndolo paso a paso: https://www.emilkhatib.es/crear-


objetos-dataframe-desde-bases-de-datos-sql/
Necesitamos una base de datos MySQL (o similar) activa y establecer una conexión a la
base de datos usando SQL Alchemy (SQL Alchemy es una librería muy potente para
manejar bases de datos). Necesitaremos instalar un driver de MySQL; en este caso,
usaremos PyMySQL

>>> from sqlalchemy import create_engine


>>> engine =
create_engine('mysql+pymysql://username:password@hostname:3306/dbname')

A continuación, con la conexión ya establecida, abrimos una tabla o ejecutamos una query
SQL con el método DataFrame.read_sql():

>>> with engine.connect() as conn, conn.begin():


>>> data = pd.read_sql('mytable', conn)
>>> print(data)
Muestra lo siguiente:

User Age Email


0 Alice 21 [email protected]
1 Bob 11 [email protected]
2 Charlie 32 [email protected]. (Khatib, s. f., http://bit.ly/3YCTfWp)
Vemos que este archivo SQL contenía el usuario, edad y el email.

En esta consulta utilizamos la tabla completa, pero podemos ejecutar una query SQL (una
query es una consulta). Le solicitaremos que nos muestre solo los datos de aquellos registros
cuyo campo edad contiene el dato: mayor de 18 años.

Ingresamos lo siguiente:

>>> with engine.connect() as conn, co


nn.begin():
>>> data = pd.read_sql('select * from mytable where Age>18', conn)
>>> print(data)

Muestra lo siguiente:

User Age Email


0 Alice 21 [email protected]
1 Charlie 32 [email protected]

Observamos que los datos del usuario Bob no aparecen porque no cumple con la
condición: Age>18

Una vez que los datos están en el objeto DataFrame, podremos manipularlos con las diversas
funciones que ofrece Pandas.

Por ejemplo, podemos crear una nueva columna en el DataFrame que nos muestre solo el
dominio del correo electrónico (la parte de la dirección de correo electrónico que sigue al
símbolo '@').

Para esto, ingresamos el siguiente código:

>>> data['Domain'] = data.apply(lambda x: x['Email'].split('@')[1],axis=1)


>>> print(data)

Nos muestra lo siguiente:

User Age Email Domain


0 Alice 21 [email protected] foo.com
1 Bob 11 [email protected] sponge.com
2 Charlie 32 [email protected] baz.com

Podemos guardar los resultados de nuevo en una base de datos con «DataFrame.to_sql».
(Podemos crear una tabla nueva, sobreescribir una existente o concatenar los datos).

Para cargar registros de un DataFrame en una base de datos SQL, se usa la función de
«DataFrame.to_sql».

Ejemplo:

>>> with engine.connect() as conn, conn.begin():


>>> data.to_sql('mytable_new',conn,index=False)

Pandas puede leer otros tipos de archivos usando sus funciones:

Excel («pd.read_excel»)
JSON («pd.read_json»)
HTML («pd.read_html»)

Pandas puede leer y escribir archivos de Excel, pero esto solo puede importar datos, no fórmulas
o imágenes. Si contiene imágenes o macros, puede hacer que el método «pd.read_excel» se
bloquee.

Actividad de repaso
¿Cuál función se usa en Pandas para cargar los registros de un DataFrame
en una base de datos SQL?

«DataFrame.to_sql()»

«pd.read_sql()»

Justificación

Cierre
Ahora que hemos estado estudiando dos librerías fundamentales de Python: NumPy y Pandas,
tenemos más conocimientos y conocemos más herramientas de Python para manipular y
procesar datos.

En el rol de técnico en Data Science, será una tarea que realizaremos constantemente.

Esto se debe a que nuestra principal herramienta de trabajo es esa: los datos y su proceso.
Para poder brindar un buen servicio como profesionales, debemos poder distinguir aquello que
puede convertirse en información y aquello que no aporta nada al proyecto.

A lo largo de los módulos siguientes, estudiaremos nuevas formas de procesamiento de datos y


obtención de información. ¡Esto recién empieza!

Video de habilidades
Según lo visto en el video, ¿cuál de las siguientes afirmaciones sobre
Pandas te parece más acertada?

Uno de los atributos más potentes de la librería Pandas es la posibilidad de


combinar, de forma rápida y eficiente, distintos datasets a través de columnas.

Pandas es una estructura de datos de Python para la limpieza y ordenamiento de


datos.

El principal uso de una estructura de datos de Pandas, es facilitar la escritura en


Python para matrices.

Justificación

Supongamos que tenemos un archivo CSV llamado "pelis_series.csv" que


contiene toda la información sobre películas y series que queremos cargar.
Cada fila representa una película o serie y cada columna contiene
información como la que vimos en el video: el título, el género, el año de
estreno, etc. ¿Qué función deberías utilizar para cargar este archivo en un
DataFrame?

DataFrame.to_csv()

pd.read_csv():

>>> df = pd.read_csv('example.csv')

Para cargar un archivo CSV el comando adecuado sería: import pandas as pd


df = pd.read_csv('pelis_series.csv', delimiter=',')

Queremos filtrar los datos del dataframe para mostrar solo las películas de
acción. ¿Cómo lo harías?
print(df.head())

df.to_csv('nuevo_archivo.csv', index=False)

accion = df[df['Género'] == 'Acción']print(accion)

El comando para mostrar solo las películas de acción es:


accion = df[df['Género'] == 'Acción']
print(accion)

¿Por qué los valores de índice en Python y otros lenguajes de


programación comienzan en 0?

Porque los índices deben comenzar en un valor impar para garantizar la integridad
de los datos.

Por convención y para facilitar la manipulación de datos en matrices y arreglos.

Para hacer que las operaciones matemáticas y estadísticas sean más complicadas.

Justificación

Es momento que trabajes con tus propios datos.

​Actividad: Crea con Pandas el siguiente dataset:


Figura 27: Actividad

Fuente: elaboración propia.

No hay opciones de respuesta correcta.


Resolución
Glosario

Referencias
[Imagen sin título sobre relaciones de tablas en SQL]. (2014).
https://www.incanatoit.com/2014/12/crear-base-datos-sql-server-2014.html

Aprende con Alf. (2022). Librería NumPy.


https://aprendeconalf.es/docencia/python/manual/numpy/

Código Pitón. (s. f.). Cómo Crear un DataFrame con Pandas y Python.
https://www.codigopiton.com/como-crear-un-dataframe-con-pandas-y-python/#3-c%C3%B3mo-
insertar-datos-en-un-dataframe-

Guías de Make It Real. (s. f.). Estadística con NumPy.


https://guias.makeitreal.camp/numpy/estadistica-con-numpy

Interactive Chaos. (s. f.). Arrays de tres dimensiones.


https://interactivechaos.com/es/manual/tutorial-de-numpy/arrays-de-tres-dimensiones

Interactive Chaos. (s. f.). Funciones Universales de Comparación.


https://interactivechaos.com/es/manual/tutorial-de-numpy/arrays-de-tres-dimensiones

Khatib, E. J. (s. f.). Series de datos en Pandas. https://www.emilkhatib.es/series-de-datos-en-


pandas/

Khatib, E. J. (s. f.). Crear objetos DataFrame desde bases de datos SQL.
https://www.emilkhatib.es/crear-objetos-dataframe-desde-bases-de-datos-sql/

Interactive Chaos. (s. f.). Funciones Universales Trigonométricas.


https://interactivechaos.com/es/manual/tutorial-de-numpy/arrays-de-tres-dimensiones

Naeem, T. (2020, 12 de marzo). Comprender las herramientas de manipulación de datos y su


importancia. Astera. https://www.astera.com/es/type/blog/data-manipulation-tools/
Rodríguez, D. (2018, 15 de junio). Guardar y leer archivos CSV con Python. Analytics Lane.
https://www.analyticslane.com/2018/06/15/guardar-y-leer-archivos-csv-con-python/

Sánchez Alberca, A. (2020). Manual de Python. https://docplayer.es/186876690-Manual-de-


python-alfredo-sanchez-alberca-febrero-2020.html

También podría gustarte