NumPy#
NumPy
(Numerical Python) es una librería de Python para trabajar con
arrays y hacer operaciones matemáticas. Tiene la ventaja en que las
operaciones se realizan mucho más rápido con esta librería.
Los objetos array de numpy
se llaman ndarray
.
Instalar: pip install numpy
Lo común es importar la librería como np
.
import numpy as np
Creación de Arrays:#
Los Arrays se crean con la función array()
Array a partir de una lista:
arr = np.array([1, 2, 3, 4, 5])
print(arr)
[1 2 3 4 5]
type(arr)
numpy.ndarray
Array a partir de una tupla:
arr = np.array((1, 2, 3, 4, 5))
print(arr)
[1 2 3 4 5]
type(arr)
numpy.ndarray
0-D Arrays:
Estos son los escalares.
escalar = np.array(42)
print(escalar)
42
1-D Arrays:
Estos son los vectores.
vector = np.array([1, 2, 3, 4, 5])
print(vector)
[1 2 3 4 5]
2-D Arrays:
Estas son las matrices.
matriz = np.array([[1, 2, 3], [4, 5, 6]])
print(matriz)
[[1 2 3]
[4 5 6]]
3-D Arrays:
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]])
print(arr)
[[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]]
Dimensiones de los Arrays:
Se usa el atributo ndim
escalar.ndim
0
vector.ndim
1
matriz.ndim
2
Acceder a los elementos de un Array:#
Podemos acceder a los elementos mediante el index. Recordemos que
empieza en 0
.
vector = np.array([1, 2, 3, 4])
vector[0]
1
vector[3]
4
matriz = np.array([[1, 2, 3], [4, 5, 6]])
print(matriz)
[[1 2 3]
[4 5 6]]
matriz[1, 1]
5
matriz[0, 1]
2
matriz[0] # Todas las columnas de la fila cero.
array([1, 2, 3])
matriz[:, 0] # Todas las filas de la columna cero.
array([1, 4])
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(arr)
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
[dim,fila,columna]
arr[0, 1, 2]
6
arr[1, 0, 1]
8
Index negativo:
vector[-1] # Último valor
4
vector[-2] # Penúlltimo valor
3
matriz[-1] # Última fila
array([4, 5, 6])
matriz[-1, 1] # Última fila de la columna 1.
5
arr[0, 1, -1] # El valor de la última columna, segunda fila de la primera dimensión.
6
arr[0, :, -1] # Todas las filas de la última columna de la primera dimensión.
array([3, 6])
Tipos de datos en NumPy:#
i
- integer.
b
- boolean.
u
- unsigned integer.
f
- float.
c
- complex float.
m
- timedelta.
M
- datetime.
O
- object.
S
- string.
U
- unicode string.
Se usa el atributo dtype
para saber el tipo de dato.
vector = np.array([1, 2, 3, 4, 5])
vector.dtype
dtype('int32')
vector = np.array([1, 2.0, 3, 4, 5])
vector.dtype
dtype('float64')
Shape de un Array:#
El shape
de un Array es el número de elementos de cada dimensión.
El atributo shape
de NumPy muestra una tupla con cada índice que
tiene el número de elementos correspondientes.
vector = np.array([1, 2.0, 3, 4, 5])
vector.shape
(5,)
matriz = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
matriz.shape
(2, 4)
arr = np.array(
[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]], [[13, 14, 15], [16, 17, 18]]]
)
arr
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]],
[[13, 14, 15],
[16, 17, 18]]])
arr.shape # 3D de 2 filas y 3 columnas.
(3, 2, 3)
Reshape un Array:#
Se puede modificar la cantidad de elementos y las dimensiones de una
Array con el atributo reshape
.
Convertir un vector en una matriz de 4x3:
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
arr
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(4, 3) # 4 filas y 3 columnas.
newarr
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
Convertir un vector en un Array de 3D:
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(2, 3, 2) # 2D de 3 filas y 2 columnas.
newarr
array([[[ 1, 2],
[ 3, 4],
[ 5, 6]],
[[ 7, 8],
[ 9, 10],
[11, 12]]])
Convertir multidimensional Array en 1D:
Se usa reshape(-1)
matriz = np.array([[1, 2, 3], [4, 5, 6]])
print(matriz)
[[1 2 3]
[4 5 6]]
matriz.reshape(-1)
array([1, 2, 3, 4, 5, 6])
Estadísticas básicas con NumPy:#
import pandas as pd
df = pd.read_csv("DatosCafe.csv", sep=";", decimal=",")
print(df.head())
Unnamed: 0 PrecioInterno PrecioInternacional Producción Exportaciones 0 ene-00 371375.0 130.12 658 517.0 1 feb-00 354297.0 124.72 740 642.0 2 mar-00 360016.0 119.51 592 404.0 3 abr-00 347538.0 112.67 1055 731.0 4 may-00 353750.0 110.31 1114 615.0 TRM EUR 0 1923.57 1916.0 1 1950.64 1878.5 2 1956.25 1875.0 3 1986.77 1832.0 4 2055.69 1971.5
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 264 entries, 0 to 263
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Unnamed: 0 264 non-null object
1 PrecioInterno 264 non-null float64
2 PrecioInternacional 264 non-null float64
3 Producción 264 non-null int64
4 Exportaciones 264 non-null float64
5 TRM 264 non-null float64
6 EUR 264 non-null float64
dtypes: float64(5), int64(1), object(1)
memory usage: 14.6+ KB
Media:
np.mean(df["PrecioInterno"])
642609.3825
Mediana:
np.median(df["PrecioInterno"])
627371.775
Moda:
Para la moda utilizar otra librería.
from statistics import mode
mode(df["PrecioInterno"])
330000.0
Muestra aleatoria:
muestra = np.random.choice(df["PrecioInterno"], 5) # 5 observaciones aleatorias
muestra
array([664916.67, 307892. , 948322.58, 476450. , 909103.45])
Máximo:
np.max(df["PrecioInterno"])
2116483.87
Mínimo:
np.min(df["PrecioInterno"])
260185.0
Percentiles:
np.percentile(df["PrecioInterno"], 5)
290654.05
np.percentile(df["PrecioInterno"], [5, 95])
array([ 290654.05 , 1137928.687])
Varianzas:
np.var(df["PrecioInterno"])
92464593086.13692
Desviación estándar:
np.std(df["PrecioInterno"])
304079.9123357821