From 5f9b6d8e4607601897a08db6875366f3639a0d93 Mon Sep 17 00:00:00 2001 From: Manuel Vergara Date: Sun, 14 May 2023 10:51:45 +0200 Subject: [PATCH] Add docs day 15th Signed-off-by: Manuel Vergara --- dia_15/README.md | 19 ++++ dia_15/cuaderno_numpy.py | 189 +++++++++++++++++++++++++++++++++++++++ dia_15/cuaderno_panda.py | 129 ++++++++++++++++++++++++++ 3 files changed, 337 insertions(+) create mode 100644 dia_15/README.md create mode 100644 dia_15/cuaderno_numpy.py create mode 100644 dia_15/cuaderno_panda.py diff --git a/dia_15/README.md b/dia_15/README.md new file mode 100644 index 0000000..72c2be8 --- /dev/null +++ b/dia_15/README.md @@ -0,0 +1,19 @@ +# Dia 15 - machine learning + +En esta unidad se ha trabajado a través de tres cuadernos de trabajo Colab de google drive: + +Cuaderno de prácticas con Numpy: https://colab.research.google.com/drive/1vp7zrchG_pJF3uzEgbCjfb_piu43mJXS?usp=sharing +Cuaderno de prácticas con Panda: https://colab.research.google.com/drive/1-E33EMCehgPnmqgwm13-SZSnVYOHMpuQ?usp=sharing +Cuaderno de prácticas con Machine Learning: https://colab.research.google.com/drive/1zRVPpLLmhMkmhX_kB9qrWUppHzRTJPFM?usp=sharing + + +La solución a los ejercicios son las siguientes. + +- [Cuaderno de prácticas con Numpy](cuaderno_numpy.py) + +- [Cuaderno de prácticas con Panda](cuaderno_panda.py) + +- [Cuaderno de prácticas con Machine Learning]() + + + diff --git a/dia_15/cuaderno_numpy.py b/dia_15/cuaderno_numpy.py new file mode 100644 index 0000000..43bd9d8 --- /dev/null +++ b/dia_15/cuaderno_numpy.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +"""Copia de Python TOTAL - Numpy.ipynb + +Automatically generated by Colaboratory. + +Original file is located at + https://colab.research.google.com/drive/1RJ5lMM11UepgJvp8b2yp3MP6jAIQrud- + +# Práctica de la librería Numpy + +En este notebook, se desarrollarán una serie de tareas utilizando la librería Numpy (Numerical Python). + +Se proponen y documentan posibles formas de resolver los ejercicios, pero las mismas no son únicas. + +Siempre es una buena idea verificar la [Documentación Oficial de Numpy](https://numpy.org/devdocs/user/index.html), donde es posible encontrar todo tipo de información referida a esta librería. Y si te quedas trabado, busca en Google "como hacer [algo] con Numpy". Hay enormes probabilidades de que esa pregunta ya haya sido respondida! +""" + +# Importamos Numpy con su abreviación "np" +import numpy as np + +# Podemos crear arrays de una dimensión con la función np.array() +array_unidim = np.array([1,2,3,4,5]) + +# O un array de dos dimensiones (bidimensional) +array_bidim = np.array([ + [1,2,3], + [4,5,6] +] +) + +# O un array de tres dimensiones (tridimensional) +array_tridim = np.array([ + [ + [1,2,3], + [4,5,6] + ], + [ + [7,8,9], + [10,11,12] + ] +]) + +"""Para cada uno de estos arrays, podemos obtener sus propiedades, tales como su "forma", número de dimensiones, tipos de datos y tamaño.""" + +from numpy.core.multiarray import array +# Atributos del array unidimensional (forma, número de dimensiones, tipos de datos, tamaño, y tipo) +array_unidim.shape, array_unidim.ndim, array_unidim.dtype, array_unidim.size, type(array_unidim) + +# Atributos del array bidimensional +array_bidim.shape, array_bidim.ndim, array_bidim.dtype, array_bidim.size, type(array_bidim) + +# Atributos del array tridimensional +array_tridim.shape, array_tridim.ndim, array_tridim.dtype, array_tridim.size, type(array_tridim) + +# Importamos pandas como pd, y creamos un DataFrame a partir del array bidimensional +import pandas as pd + +datos = pd.DataFrame(array_bidim) +datos + +# Creamos un array de tamaño 4x3, formado únicamente por unos (1) +unos = np.ones((4,3)) +unos + +# Creamos un array de tamaño 2x4x3, formado únicamente por ceros (0) +cero = np.zeros((2,4,3)) +cero + +# Creamos un array de números en el rango de 0 a 100, con un paso de 5 + +array_1 = np.arange(0,101,5) +array_1 + +# Creamos un array de números aleatorios enteros comprendidos en entre 0 y 10, de tamaño (2, 5) + +array_2 = np.random.randint(0,10,(2,5)) +array_2 + +# Creamos un array de números aleatorios decimales comprendidos en entre 0 y 1, de tamaño (3, 5) +array_3 = np.random.random((3,5)) +array_3 + +# Establecemos la "semilla" de números aleatorios en 27 +np.random.seed(27) + +# Creamos un array de números aleatorios enteros comprendidos en entre 0 y 10, de tamaño (3, 5) +array_4 = np.random.randint(0,10,(3,5)) +array_4 + +"""¿Qué ocurre al correr la última celda nuevamente, a diferencia de las anteriores?""" + +# Encontramos los valores únicos del array_4 +np.unique(array_4) + +# Extraemos el elemento de índice 1 del array_4 +array_4[1] + +# Extraemos las primeras dos filas del array_4 +array_4[:2] + +# Extraemos los dos primeros datos de las primeras dos filas del array_4 +array_4[:2,:2] + +# Creamos dos arrays de tamaño 3x4: uno relleno de números aleatorios entre 0 y 10, y otro relleno de unos +array_5 = np.random.randint(0,10,(3,4)) +array_6 = np.ones((3,4)) + +# invocamos el array_5 +array_5 + +# invocamos el array_6 +array_6 + +# Sumamos los dos arrays +array_5 + array_6 + +# Creamos ahora un array de tamaño (4,3) lleno de unos +array_7 = np.ones((4,3)) +array_7 + +# Intentaremos sumar los arrays 6 y 7 +array_6 + array_7 + +"""¿A qué se debe el error anterior? ¿Qué deberíamos tener en cuenta para que no suceda?""" + +# Entonces crearemos otro array de tamaño (4,3) lleno de unos +array_8 = np.ones((4,3)) +array_8 + +# Restamos el array_8 al array_7 +array_8 - array_7 + +# Creamos otros dos arrays de tamaño 3x3 con números aleatorios del 1 al 5 +array_9 = np.random.randint(1,5,(3,3)) +array_10 = np.random.randint(1,5,(3,3)) + +# invocamos el array_9 +array_9 + +# invocamos el array_10 +array_10 + +# Multiplicamos los últimos dos arrays entre sí +array_9 * array_10 + +# Elevamos el array_9 al cuadrado +array_9 ** 2 + +# Buscamos la raíz cuadrada del array_10 +np.sqrt(array_10) + +# Hallamos el promedio de los valores del array_9 +array_9.mean() + +# Hallamos el valor máximo de los valores del array_9 +array_9.max() + +# Hallamos el valor mínimo de los valores del array_9 +array_9.min() + +# Cambiamos la forma del array_9 por una de 9x1, y lo almacenamos como array_11 +array_11 = array_9.reshape((9,1)) + +# invocamos el array_11 +array_11 + +# Transponemos el array_11 +array_11.T + +# Comparamos el array_9 y el array_10, para saber cuáles elementos del array_9 son mayores a los del array_10 +array_12 = array_9 > array_10 +array_12 + +"""¿Qué tipos de datos forman parte del array de resultados?""" + +# Veamos sus nuevos tipos de datos +array_12.dtype + +# Alguno de los elementos del array_9 es igual su equivalente del array_10? +array_9 == array_10 + +# Comparamos nuevamente ambos arrays, en esta ocasión con >= +array_9 >= array_10 + +# Buscamos los elementos del array_9 que son mayores a 2 +array_9 > 2 + +# Ordenamos de menor a mayor los elementos dentro del array_9 +np.sort(array_9) diff --git a/dia_15/cuaderno_panda.py b/dia_15/cuaderno_panda.py new file mode 100644 index 0000000..689cd1f --- /dev/null +++ b/dia_15/cuaderno_panda.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- +"""Python TOTAL - Pandas.ipynb + +Automatically generated by Colaboratory. + +Original file is located at + https://colab.research.google.com/drive/1uXPQgRFyhRzarWbO9ytZ1Y2amriZgeex + +# Práctica de la librería Pandas + +En este notebook, se desarrollarán una serie de tareas utilizando la librería Pandas (el "Excel" de Python). + +Se proponen y documentan posibles formas de resolver los ejercicios, pero pueden existir varias formas de lograr los mismos resultados. + +Siempre es una buena idea verificar la [Documentación Oficial de Pandas](https://pandas.pydata.org/pandas-docs/stable/), donde es posible encontrar todo tipo de información referida a esta librería. Y si te quedas trabado, busca en Google "como hacer [algo] con Pandas". Hay enormes probabilidades de que esa pregunta ya haya sido respondida! +""" + +# Importamos Pandas +import pandas as pd + +# Creamos una serie de números y hallamos su media +numeros = pd.Series([1,2,3,5,67,35,235,62]) +numeros.mean() + +# Hallamos la suma de dichos números +numeros.sum() + +# Creamos una SERIE de tres colores diferentes +colores = pd.Series(['rojo','amarillo','verde']) + +# Visualizamos la serie creada +colores + +# Creamos una serie con tipos de autos, y la visualizamos +tipos_autos = pd.Series(['sedan', 'SUV', 'Pick up']) +tipos_autos + +# Combinamos las series de tipos de autos y colores en un DATAFRAME +tabla_autos = pd.DataFrame({'Tipo de Auto':tipos_autos, 'Color':colores}) +tabla_autos + +# Conectamos el cuaderno actual con nuestro Drive +from google.colab import drive +drive.mount('/content/drive') + +# Importar "ventas-autos.csv" y convertirlo en un nuevo DATAFRAME +ventas_autos = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/ventas-autos.csv') +ventas_autos + +"""Este será nuestro "Dataframe de Flujo Vehicular" +""" + +# Exportar el Dataframe como un archivo CSV a mi carpeta "/content/drive/MyDrive/Colab Notebooks/pruebas/" +ventas_autos.to_csv('/content/drive/MyDrive/Colab Notebooks/este_archivo.csv') + +# Analicemos los tipos de datos disponibles en el dataset de ventas autos +ventas_autos.dtypes + +# Apliquemos estadística descriptiva (cantidad de valores, media, desviación estándar, valores mínimos y máximos, cuartiles) al dataset +ventas_autos.describe() + +# Obtenemos información del dataset utilizando info() +ventas_autos.info() + +# Listamos los nombres de las columnas de nuestro dataset +ventas_autos.columns + +# Averiguamos el "largo" de nuestro dataset +len(ventas_autos) + +# Mostramos las primeras 5 filas del dataset +ventas_autos.head() + +# Mostramos las primeras 7 filas del dataset +ventas_autos.head(7) + +# Mostramos las últimas 3 filas del dataset +ventas_autos.tail(3) + +# Utilizamos .loc para seleccionar la fila de índice 3 del DataFrame +ventas_autos.loc[3] + +# Utilizamos .iloc para seleccionar las filas 3, 7 y 9 +ventas_autos.iloc[[3,7,9]] + +"""En la documentación podrás observar la diferencia entre el funcionamiento de [.loc](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html) e [.iloc](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html).""" + +# Seleccionar la columna "Kilometraje" +ventas_autos['Kilometraje'] + +# Encontrar el valor medio de la columnas "Kilometraje" +ventas_autos['Kilometraje'].mean() + +# Seleccionar aquellas columnas que tengan valores superiores a 100,000 kilómetros en la columna Kilometraje +ventas_autos[ventas_autos['Kilometraje'] > 100000] + +# Creamos una tabla cruzada de doble entrada entre Fabricante y cantidad de puertas +pd.crosstab(ventas_autos['Fabricante'], ventas_autos['Puertas']) + +# Agrupamos las columnas por fabricante y buscandos el valor medio de las columnas numéricas +ventas_autos.groupby(['Fabricante']).mean() + +# Commented out IPython magic to ensure Python compatibility. +# Importamos Matplotlib y creamos un gráfico con los valores de la columna Kilometraje +import matplotlib as plt +# %matplotlib inline + +ventas_autos['Kilometraje'].plot() + +# Puede que un gráfico más apropiado en este caso sea un histograma? +ventas_autos['Kilometraje'].hist() + +# Intentamos graficar la columna de precios +ventas_autos['Precio (USD)'].plot() + +"""No funcionó, verdad? Alguna idea de por qué esto puede ocurrir? + +Una pista es buscar: "cómo convertir strings de Pandas a números" + +[Aqui hay un enlace a StackOverflow referido a este tema](https://stackoverflow.com/questions/44469313/price-column-object-to-int-in-pandas). +""" + +# Elimina la puntuación de la columna de precios +ventas_autos['Precio (USD)'] = ventas_autos['Precio (USD)'].str.replace('[\$\.\,]', '') +ventas_autos['Precio (USD)'] = ventas_autos['Precio (USD)'].astype(int)/100 + +ventas_autos + +ventas_autos['Precio (USD)'].plot() \ No newline at end of file