Librerías de manipulación de datos con Python
¿Por qué NumPy y Pandas?
NumPy
NumPy Array
Tipos de datos
Dimensiones
Creando arrays
Shape y Reshape
Funciones principales de NumPy
Copy
Condiciones
Operaciones
Quiz: NumPy
Pandas
Series y DataFrames en Pandas
Leer archivos CSV y JSON con Pandas
Filtrado con loc y iloc
Agregar o eliminar datos con Pandas
Manejo de datos nulos
Filtrado por condiciones
Funciones principales de Pandas
groupby
Combinando DataFrames
Merge y Concat
Join
Pivot y Melt
Apply
Quiz: Pandas
Cierre
Posibilidades con Pandas y NumPy
Aportes 30
Preguntas 1
scalar: dim = 0 Un solo dato o valor
vector: dim = 1 Listas de Python
matriz: dim = 2 Hoja de cálculo
tensor: dim > 3 Series de tiempo o Imágenes
Declarando un escalar.
scalar = np.array(42)
print(scalar) ----> 42
scalar.ndim ----> 0
Declarando un vector.
vector = np.array([1, 2, 3])
print(vector) ----> [1 2 3]
vector.ndim ----> 1
Declarando una matriz.
matriz = np.array([[1, 2, 3], [4, 5, 6]])
print(matriz)
matriz.ndim
---->[[1 2 3]
[4 5 6]]
----> 2
Declarando un tensor.
tensor = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],[[13, 13, 15], [16, 17, 18], [19, 20, 21], [22, 23, 24]]])
print(tensor)
tensor.ndim
----> [[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[13 13 15]
[16 17 18]
[19 20 21]
[22 23 24]]]
----> 3
Se puede definir el número de dimensiones desde la declaración del array
vector = np.array([1, 2, 3], ndmin = 10)
print(vector) ----> [[[[[[[[[[1 2 3]]]]]]]]]]
vector.ndim ----> 10
Se pueden expandir dimensiones a los array ya existentes.
Axis = 0 hace refencia a las filas, mientras que axis = 1 a las columnas.
expand = np.expand_dims(np.array([1, 2, 3]), axis = 0)
print(expand) ----> [[1 2 3]]
expand.ndim ----> 2
Remover/comprimir las dimensiones que no están siendo usadas.
print(vector, vector.ndim) ----> [[[[[[[[[[1 2 3]]]]]]]]]] 10
vector_2 = np.squeeze(vector)
print(vector_2, vector_2.ndim) ----> [1 2 3] 1
tensor5 = np.array([[[[1, 2],[3, 4]], [[5, 6],[7, 8]]], [[[1, 2],[3, 4]], [[5, 6],[7, 8]]]], ndmin = 5)
print(tensor5, tensor5.ndim)
[[[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]]] 5
expand5 = np.expand_dims(tensor5, axis=1)
print(expand5, expand5.ndim)
[[[[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]]]] 6
print(expand5, expand5.ndim)
reduced5 = np.squeeze(expand5)
print(reduced5, reduced5.ndim)
[[[[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]]]] 6
[[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]] 4
Reto Completado!!
Creación de matriz con 5 dimensiones
Expandir y borrar espacios de matriz
Para expandir la dimensión, podemos apreciar de mejor de que forma lo hace utilizando .shape
sobre el arrray
Para no perder la costumbre 😃
Reto completo
Crear un vector de al menos cinco (5) dimensiones
Agrega una dimensión más
Elimina las dimensiones que no se usan
#Creando el vector de cinco dimensiones
reto_vector = np.array([[[[[1,2,3]],[[4,5,6]],[[7,8,9]]]]])
print(reto_vector)
reto_vector.ndim
#Agregando una dimensión más
expand_reto_vector = np.array([[[[[1,2,3]],[[4,5,6]],[[7,8,9]]]]], ndmin=6)
print(expand_reto_vector)
expand_reto_vector.ndim
#Me quedo solo con las dimensiones que uso
sqe_vector = np.squeeze(expand_reto_vector)
print(sqe_vector, sqe_vector.ndim)
Reto Cumplido
tensor5d = np.array([[[[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]],[[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]],[[[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]],[[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]]])
print(tensor5d, tensor5d.ndim, "Dimensiones")
print("---------------------------") #separator
up_to_6D = np.expand_dims(tensor5d, axis=0)
print(up_to_6D, up_to_6D.ndim, "Dimensiones")
print("---------------------------") #separator
correct_tensor = np.squeeze(up_to_6D)
print(correct_tensor, correct_tensor.ndim, "Dimensiones")
Reto Creación de matriz con 5 dimensiones
import numpy as np
tensor_5d = np.array([[0, 1, 1], [2, 3, 5], [8, 13, 21], [34, 55, 89]], ndmin = 5)
print(tensor_5d)
tensor_5d.ndim
tensor_5d = np.expand_dims(tensor_5d, axis = 0)
print(tensor_5d)
tensor_5d.ndim
tensor_5d = np.squeeze(tensor_5d)
print(tensor_5d)
tensor_5d.ndim
tensor = [[[1,2,3],[4,5,6],[7,8,9]],[[1,2,3],[4,5,6],[7,8,9]]]
print(tensor)
tensor_1 = np.expand_dims(tensor,axis=0)
print(tensor_1)
tensor_0 = np.squeeze(tensor_1)
print(tensor_0)
Número de dimensiones:
array.ndim
Crear un array definiendo las dimensiones:
vector = np.array([1,2,3], ndim=10)
Agregar dimensiones un eje:
Considerar que cuando definimios axis 0 = filas y 1 = columnas
expand = np.expand_dims(np.array([1,2,3], axis = 0)
Eliminar dimensiones que no se usan:
vector = np.squeeze(vector)
Podemos decir que la dimensión es el número de arrays dentro de otro array.
tensor_5d = np.array([1,2,3], ndmin=5)
print(tensor_5d)
tensor_5d_habil = np.squeeze(tensor_5d)
print(tensor_5d_habil)
[[[[[1 2 3]]]]]
[1 2 3]
tensor_5d = np.array([1,2,3], ndmin=5)
print(tensor_5d)
tensor_5d_habil = np.squeeze(tensor_5d)
print(tensor_5d_habil)
[[[[[1 2 3]]]]]
[1 2 3]
reto:
parte 1:
reto = np.array([["squirtle", "bulbasaur", "charmander"],["wartortle","ivysaur","charmeleon"]], ndmin=5)
print(reto, reto.ndim)
--[[[[['squirtle' 'bulbasaur' 'charmander']
['wartortle' 'ivysaur' 'charmeleon']]]]] 5
parte 2:
reto2 = np.expand_dims(reto, axis=0)
print(reto2, reto2.ndim)
--[[[[[['squirtle' 'bulbasaur' 'charmander']
['wartortle' 'ivysaur' 'charmeleon']]]]]] 6
Parte 3:
print(reto2, reto2.ndim)
reto3 = np.squeeze(reto2)
print(reto3, reto3.ndim)
--[[[[[['squirtle' 'bulbasaur' 'charmander']
['wartortle' 'ivysaur' 'charmeleon']]]]]] 6
[['squirtle' 'bulbasaur' 'charmander']
['wartortle' 'ivysaur' 'charmeleon']] 2
EJERCICIO: definir un tensor con al menos 5 dimensiones, Sumarle una dimensión en cualquiera de sus ejes. Eliminar la dimensión que no están importando en el objeto que definiste.
Definimos la matriz de 5 dimensiones. A una matriz de 3x3x3 le agrego 2 dimensiones mas usando ndmin=5
np5D = np.array([[[1,2,3], [4,5,6], [7,8,9]],[[11,12,13], [14,15,16],[17,18,19]],[[21,22,23], [24,25,26],[27,28,29]]],ndmin=5)
print(np5D)
np5D.ndim
[[[[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]]
[[11 12 13]
[14 15 16]
[17 18 19]]
[[21 22 23]
[24 25 26]
[27 28 29]]]]]
5
Expando una dimensión a nivel de filas.
np5D_exp = np.expand_dims(np5D,axis=4)
print(np5D_exp)
np5D_exp.ndim
[[[[[[ 1 2 3]]
[[ 4 5 6]]
[[ 7 8 9]]]
[[[11 12 13]]
[[14 15 16]]
[[17 18 19]]]
[[[21 22 23]]
[[24 25 26]]
[[27 28 29]]]]]]
6
Elimina todas las dimensiones que están de mas.
np5D_red = np.squeeze(np5D_exp)
print(np5D_red)
np5D_red.ndim
[[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]]
[[11 12 13]
[14 15 16]
[17 18 19]]
[[21 22 23]
[24 25 26]
[27 28 29]]]
3
Nos quedamos con la matriz de 3x3x3 (dimensión 3) que le habíamos agregado mas dimensiones al principio.
**Reto Completado!**
import numpy as np
## Definir un tensor con 5 dimensiones
## Sumarle una dimension en cualquiera de sus ejes
## Eliminar las dimensiones que están fuera de uso
tensor = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],[[13, 13, 15], [16, 17, 18], [19, 20, 21], [22, 23, 24]]])
print(tensor)
print(tensor.ndim)
tensor = np.expand_dims(tensor, 0)
print(tensor)
print(tensor.ndim)
tensor = np.squeeze(tensor)
print(tensor)
print(tensor.ndim)
Realmente el tema de dimensiones es impresionante.
vector = np.array([1,2,3],ndmin = 5)
print(vector,vector.ndim)
vector = np.expand_dims(vector,axis=4)
print(vector,vector.ndim)
vector = np.squeeze(vector)
print(vector,vector.ndim)
[[[[[1 2 3]]]]] 5
[[[[[[1 2 3]]]]]] 6
[1 2 3] 1
Reto
Pero si colocamos un axix=3 se va un poco el tensor. Coloquen:
tensor_1 = np.expand_dims(tensor, axis=3)
print(tensor_1, tensor_1.ndim)
Y les va a devolver esto:
[[[[1]
[2]]
[[3]
[4]]
[[5]
[6]]]
[[[1]
[2]]
[[3]
[4]]
[[5]
[6]]]] 4
tensor = np.array([[[1,2,3,'a'],
[4,5,6,'b'],
[7,8,9,'c'],
[0,2,45,'d']],
[[1,2,3,'e'],
[4,5,6,'f'],
[7,8,9,'g'],
[0,2,45,'h']],
[[1,2,3,'e'],
[4,5,6,'f'],
[7,8,9,'g'],
[0,2,45,'h']],
[[1,2,3,'e'],
[4,5,6,'f'],
[7,8,9,'g'],
[0,2,45,'h']]],ndmin=5)
print(tensor, tensor.ndim,'\n')
tensor_2 = np.squeeze(tensor)
print(tensor_2, tensor_2.ndim)
#output
[[[[['1' '2' '3' 'a']
['4' '5' '6' 'b']
['7' '8' '9' 'c']
['0' '2' '45' 'd']]
[['1' '2' '3' 'e']
['4' '5' '6' 'f']
['7' '8' '9' 'g']
['0' '2' '45' 'h']]
[['1' '2' '3' 'e']
['4' '5' '6' 'f']
['7' '8' '9' 'g']
['0' '2' '45' 'h']]
[['1' '2' '3' 'e']
['4' '5' '6' 'f']
['7' '8' '9' 'g']
['0' '2' '45' 'h']]]]] 5
[[['1' '2' '3' 'a']
['4' '5' '6' 'b']
['7' '8' '9' 'c']
['0' '2' '45' 'd']]
[['1' '2' '3' 'e']
['4' '5' '6' 'f']
['7' '8' '9' 'g']
['0' '2' '45' 'h']]
[['1' '2' '3' 'e']
['4' '5' '6' 'f']
['7' '8' '9' 'g']
['0' '2' '45' 'h']]
[['1' '2' '3' 'e']
['4' '5' '6' 'f']
['7' '8' '9' 'g']
['0' '2' '45' 'h']]] 3
Reto Completado!
tensor = np.array([[[[[1,2],[3,4],[5,6]], [[7,8],[9,10],[11,12]]]], [[[[13,14],[15,16],[17,18]], [[19,20],[21,22],[23,24]]]]])
print(tensor, tensor.ndim)
>>>[[[[[ 1 2]
[ 3 4]
[ 5 6]]
[[ 7 8]
[ 9 10]
[11 12]]]]
[[[[13 14]
[15 16]
[17 18]]
[[19 20]
[21 22]
[23 24]]]]] 5
expand = np.expand_dims(tensor, axis=0)
print(expand, expand.ndim)
>>> [[[[[[ 1 2]
[ 3 4]
[ 5 6]]
[[ 7 8]
[ 9 10]
[11 12]]]]
[[[[13 14]
[15 16]
[17 18]]
[[19 20]
[21 22]
[23 24]]]]]] 6
tensor2 = np.array(tensor, ndmin=10)
print(tensor2, tensor2.ndim)
>>> [[[[[[[[[[ 1 2]
[ 3 4]
[ 5 6]]
[[ 7 8]
[ 9 10]
[11 12]]]]
[[[[13 14]
[15 16]
[17 18]]
[[19 20]
[21 22]
[23 24]]]]]]]]]] 10
tensor2 = np.squeeze(tensor2)
print(tensor2, tensor2.ndim)
>>> [[[[ 1 2]
[ 3 4]
[ 5 6]]
[[ 7 8]
[ 9 10]
[11 12]]]
[[[13 14]
[15 16]
[17 18]]
[[19 20]
[21 22]
[23 24]]]] 4
Tensor 5 dimensiones:
Se suma 1 dimensión:
Borrar dimensiones que no se usan:
Con el shape podemos también ver el incremento de las dimensiones:
Comparto mi practica de la clase y el reto:
https://deepnote.com/project/dimensiones-W6YN6No7QKC7Dq_4_R30EQ/%2Fnotebook.ipynb
##Reto
# 1 Definir un tensor de 5D
# 2 Sumarle una dimension en cualquier eje
# 3 Borrar las dimensiones que no se usen
tensor_reto = np.array( [ [1,2,3] , [4,5,6] , [7,8,9] ], ndmin=5)
print(f'El tensor es este\n{tensor_reto} y\ntiene {tensor_reto.ndim} dimensiones')
print()
print()
print('Sumandole una dimension...')
tensor_reto = np.expand_dims(tensor_reto, axis=0)
print(f'El tensor **expandido** es este\n{tensor_reto} y\ntiene {tensor_reto.ndim} dimensiones')
print()
print()
print('Ajustando las dimensiones necesarias...')
tensor_reto = np.squeeze(tensor_reto)
print(f'El tensor **ajustado** es este\n{tensor_reto} y\ntiene {tensor_reto.ndim} dimensiones')
###Output 👇🏻
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.