Vista previa del material en texto
Programación con arrays:
introducción a NumPy
Clase 04. Data Science
¿DUDAS DEL ON-BOARDING?
MIRALO AQUI
https://coderhouse.typeform.com/to/nRSvWstq#camada=xxxxx&studentemail=xxxxx
https://coderhouse.typeform.com/to/nRSvWstq#camada=xxxxx&studentemail=xxxxx
RECUERDA PONER A GRABAR LA
CLASE
● Conocer las estructuras de datos y su
implementación en Python
● Entender el uso básico del paquete
NumPy OBJETIVOS DE LA CLASE
MAPA DE CONCEPTOS
MAPA DE CONCEPTOS CLASE 3
Acceso a ndarrays
Nueva estructura:
Array
Estructuras de
datos en Python
Operaciones con
NumPy
Recall: list, tuple, dict,
set
NumPy y ndarrays
Acceso a subarrays
Acceso a elementos
Agregaciones
Operaciones básicas
Operaciones
vectorizadas
Clase 4
Programación con
arrays: introducción a
NumPy
Clase 5
Introducción a la
manipulación de datos
con Pandas
CRONOGRAMA DEL CURSO
PRÁCTICA DE ARRAYS CON
NUMPY
PRÁCTICA INTEGRADORA:
PANDAS Y SERIES DE TIEMPO
¡VAMOS AL CÓDIGO
Clase 3
Introducción a la
programación con
Python (Parte II)
PROBANDO ESTRUCTURAS
PRÁCTICA CON FUNCIONES
INTRODUCCIÓN A ARRAYS
Recall: estructuras de
datos
Recall: estructuras de datos
● Anteriormente vimos las estructuras list, tuple, dict y set.
Tipo Ejemplo Definición
list [1, 2, 3] Lista ordenada
tuple (1, 2, 3) Lista ordenada inmutable
dict
{'a':1, 'b':2,
'c':3} Diccionario: conjunto de pares clave:valor
set {1, 2, 3} Conjunto, a la manera de un conjunto matemático
Recall: estructura list
● Anteriormente trabajamos con estructuras list, que nos permitían
almacenar datos ordenados de distinto tipo.
● Siempre mantenían el orden de sus elementos
● Eran mutables
L = list(range(10))
L
👉
Recall: estructura tuple
● Trabajamos también con las estructuras tuple.
● Al igual que las listas, siempre mantenían el orden de sus elementos
● Eran inmutables. Una vez inicializadas, no era posible reasignar
elementos.
T = tuple(range(10))
T
👉
Sin embargo… 🧐
Estas estructuras no llegan a cubrir
las necesidades del Data Scientist!
NumPy y ndarrays
El array como estructura de datos
● Extenderemos la aplicación de estos tipos de estructura de datos,
agregando el tipo de dato array.
● Tanto array como list sirven para guardar conjuntos de datos
ordenados en memoria.
● Mientras que el tipo de dato list puede guardar datos de diferentes
tipos, el tipo de dato array guarda datos de un único tipo.
● Esto le permite ser más eficiente, especialmente al trabajar con
conjuntos de datos grandes.
Numpy arrays
… como los lists, pero con vitaminas 🚀
● La librería Numpy provee una forma particular de array llamada
ndarray o Numpy Array.
● Recordar: los ndarrays, al ser un tipo de array, sólo pueden
almacenar datos de un mismo tipo.
Npa = np.array(range(10))
Npa
import numpy as np
👉
Veamos algunos ejemplos
Construyendo ndarrays
Np_uno = np.ones(10)
Np_uno
Np_cero = np.zeros(10)
Np_cero
👉Np_cero_int = np.zeros(10, dtype=int)Np_cero_int
Np_relleno = np.full(10,256)
Np_relleno
👉
👉
👉
● Numpy provee objetos rango:
Construyendo ndarrays
Np_rango = np.arange(10)
Np_rango
👉
● Ndarrays con valores aleatorios y de dos dimensiones:
Np_random_dimensiones = np.random.randint(10, size=(3, 4))
Np_random_dimensiones
Propiedades de los Arrays
Inspeccionemos un poco nuestros Numpy arrays 🔎
Podemos acceder a distintas propiedades de los arreglos:
● Dimensión:
● Forma:
● Tamaño:
👉
Np_relleno_dimensiones.shape
Np_relleno_dimensiones.ndim
Np_cero.ndim
👉
👉
Np_relleno_dimensiones.size 👉
Propiedades de los Arrays
Inspeccionemos un poco nuestros Numpy arrays 🔎
Podemos acceder a distintas propiedades de los arreglos:
● Tipo de dato:
● Tamaño de elemento:
● Tamaño total:
👉
N_relleno_dimensiones.itemsize
Np_cero_int.dtype
N_cero.dtype
👉
👉
Np_cero.nbytes 👉
Np_cero_int.nbytes
Indexado y acceso
Accediendo elementos
Veamos cómo consultar los arreglos
● Al igual que las listas, los elementos del arreglo se acceden mediante
su índice, comenzando desde 0.
● Primer elemento:
● Quinto elemento:
rango = range(1,11)
Np_diez_numeros = np.array(rango)
Np_diez_numeros
Np_diez_numeros[0]
Np_diez_numeros[4]
👉
👉
👉
Accediendo elementos
● Podemos seleccionar elementos desde atrás para adelante mediante
índices negativos, comenzando desde -1.
● Último elemento:
● Penúltimo elemento:
● Para acceder a un elemento de una matriz, indicar fila y columna:
Np_diez_numeros[-1]
Np_diez_numeros[-2]
👉
👉
Np_random_dimensiones[2, 1]
Np_random_dimensiones 👉
👉
Accediendo subarrays
● Podemos seleccionar una rebanadas del arreglo de la siguiente
manera:
Objeto[desde:hasta:tamaño_de_paso]
● El parámetro tamaño_de_paso permite, por ejemplo, seleccionar
elementos de dos en dos
● Atención a estos detalles:
○ El índice "desde" es inclusivo.
○ El índice "hasta" es exclusivo.
⚠
Accediendo subarrays
Veamos algunos ejemplos...
● Primeros cuatro:
● Desde el cuarto:
● Desde el quinto al séptimo:
● De dos en dos:
● Desde atrás, de dos en dos:
Np_diez_numeros[:4]
Np_diez_numeros[3:]
Np_diez_numeros[4:7]
Np_diez_numeros[::-2]
Np_diez_numeros[::2]
Accediendo subarrays
● Para arreglos multidimensionales, especificar los índices de
manera ordenada:
Objeto[dimensión1, dimensión2,…]
Veamos algunos ejemplos...
● Tercera fila, todas las columnas:
● Primeras dos filas, primeras dos columnas:
● Tercera fila, cuarta columna:
Np_random_dimensiones[:2, :2]
Np_random_dimensiones[2,]
Np_random_dimensiones[2, 3]
☕
BREAK
¡5/10 MINUTOS Y VOLVEMOS!
OPERACIONES BÁSICAS
Reshape,
concatenación,
splitting
PENSANDO EN AJEDREZ
Si tuviésemos que rellenar una grilla de 8x8
con números desde 1 a 64,
¿Cómo lo haríamos?
Reshape
● Permite modificar la dimensión de un arreglo, retornando otro con
distinta dimensión y forma pero manteniendo los mismos elementos.
Ajedrez_64 = np.arange(1,65).reshape(8,8)
Ajedrez_64
np.arange(1,65)
Sencillo, ¿verdad? 😉
👉
👉
Concatenación
● Consiste en formar un nuevo arreglo a partir de “enganchar” o
“apilar” otros.
● Python ofrece dos métodos:
○ Con la operación concatenate.
○ Con las operaciones vstack y hstack
Array_1 = np.random.randint(10, size=5)
Array_2 = np.random.randint(10, size=5)
Arrays_concatenados = np.concatenate([Array_1, Array_2])
👉
Concatenación
● El método vstack apila verticalmente:
Array_extra = np.array([[10],[20]])
Array_extra
👉
Array_apilados_v = np.vstack([Array_extra, Array_extra])
Array_apilados_v
Array_apilados_h = np.hstack([Array_extra, Array_extra])
Array_apilados_h
👉
👉
👉
● El método hstack apila horizontalmente:
Splitting
● Consiste en desarmar o partir los arreglos.
● Puede pensarse como la operación inversa a la concatenación
Arrays_concatenados 👉
Array_partido = np.split(Arrays_concatenados, [2])
Array_partido
Especificamos los puntos de
corte con un arreglo. En este
caso queremos un único
corte entre el segundo y
tercer elemento
👇
Splitting
Parte_1, Parte_2, Parte_3 = Array_partido_2
Array_partido_2 = np.split(Arrays_concatenados, [2, 8])
Array_partido_2
● Podemos desarmar el
arreglo y guardarlo en
variables distintas
👇
👉
● Dos puntos de corte
Parte_1 Parte_2 Parte_3
Splitting
hsplit realiza cortes verticales:
vsplit realiza cortes horizontales:
👉
Ajedrez_partido_1 = np.hsplit(Ajedrez_64, [4])
Ajedrez_partido_1
👉
Ajedrez_partido_2 = np.vsplit(Ajedrez_64, [4])
Ajedrez_partido_2
Agregaciones y
Operaciones
vectorizadas
Cálculos sobre Numpy arrays
Como futuros Data Scientists, cotidianamente nos encontraremos con la
tarea de efectuar cálculos a partir de arrays
Numpy está para darnos una mano en esto
Una solución tradicional al problema es la siguiente:
Array_aleatorio = np.random.randint(10, size=10)
print(Array_aleatorio)
suma = 0
for i in Array_aleatorio:
suma += i
promedio = suma / np.size(Array_aleatorio)
Si bien esta resolución es elegante y cumplecon su tarea, Numpy nos
provee de opciones más cómodas y eficientes 🚀
Calculando el promedio
Agregaciones
Demos un vistazo a las agregaciones principales ✏
● Suma:
● Promedio:
● Valor máximo:
● Mediana:
● Desvío estándar:
● Varianza:
Array_aleatorio.sum()
np.median(Array_aleatorio)
Array_aleatorio.max()
Array_aleatorio.mean()
np.std(Array_aleatorio)
np.var(Array_aleatorio)
Estas funciones
están optimizadas
para grandes
volúmenes de datos
y además nos
ahorran mucho
código… 😉
Operaciones vectorizadas
¿Por qué son tan importantes?
● Incluso las operaciones más sencillas pueden resultar muy lentas si
las llevamos a cabo elemento a elemento.
● Las computadoras son especialmente buenas para realizar cálculos
en paralelo 🖥
● Las operaciones vectorizadas o funciones universales (ufuncs)
nos permiten operar entre arreglos de la manera más rápida posible.
Recordemos los arreglos de prueba:
● Sumas vectorizadas:
Array_aleatorio.sum()
Operaciones vectorizadas
Operemos arreglos, pero de manera eficiente 😉
Array_1 + 5
Array_1 + Array_2
np.add(Array_1, Array_2)
👉Array_1 Array_2👉
👉
¡Ambas formas son equivalentes!
Array_aleatorio.sum()
👉
● El producto vectorial sobre arreglos unidimensionales se calcula
sumando los resultados de multiplicar los elementos que tienen la
misma posición.
● En Numpy, la versión vectorizada se implementa en el método
np.matmul
Producto Vectorial
np.matmul(Array_1, Array_2) 👉
PRÁCTICA CON ARRAYS EN NUMPY
Profundizaremos el uso de los arrays en NumPy con los
siguientes ejercicios
2
PRÁCTICA CON ARRAYS EN NUMPY
Formato: Entregar un archivo con formato .ipynb. Debe tener el nombre
“Arrays+Apellido”.
Sugerencia: Preparar el código y probar los resultados con distintas entradas.
>> Consigna:
1. Generar un array aleatorio de 100 elementos. Calcular la mediana correspondiente.
2. Recordar los ejercicios con funciones para cálculo de factorial y suma de serie de la
Clase 02. Repetir ambos ejercicios, pero ahora utilizar las nuevas operaciones
aprendidas con los ndarrays.
3. En este link se provee un archivo con los resultados de la Encuesta de Sueldos de
Openqube de Febrero 2020 (https://sueldos.openqube.io/encuesta-sueldos-2020.02/ ),
Calcular y comparar media y mediana de los sueldos netos.
>>Aspectos a incluir en el entregable:
El código debe estar hecho en un notebook y debe estar probado.
https://docs.google.com/spreadsheets/u/0/d/15Stnum8mI9QdwF9ZiPFCe3_qG9XyZyNzmOSIDunzPjA/view
https://sueldos.openqube.io/encuesta-sueldos-2020.02/
¿PREGUNTAS?
¡MUCHAS GRACIAS!
Resumen de lo visto en clase hoy:
- Introducción a NumPy y ndarrays, acceso
e indexado.
- Operaciones básicas con ndarrays.
OPINA Y VALORA ESTA CLASE
#DEMOCRATIZANDOLAEDUCACIÓN