├── .gitignore
├── .DS_Store
├── .ipynb_checkpoints
├── matplotlib-checkpoint.ipynb
└── introducción-checkpoint.ipynb
├── regresion-lineal
├── .ipynb_checkpoints
│ └── regresion-multiple-checkpoint.ipynb
└── regresion-multiple.ipynb
├── estadistica-eda
└── .ipynb_checkpoints
│ └── introducción-estadistica-checkpoint.ipynb
├── introducción.ipynb
└── python
├── tarea-clase-01.ipynb
├── .ipynb_checkpoints
├── tarea-clase-01-checkpoint.ipynb
└── 01-python-checkpoint.ipynb
└── 01-python.ipynb
/.gitignore:
--------------------------------------------------------------------------------
1 | datasets/
2 |
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dileofrancoj/ds-6-meses/HEAD/.DS_Store
--------------------------------------------------------------------------------
/.ipynb_checkpoints/matplotlib-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [],
3 | "metadata": {},
4 | "nbformat": 4,
5 | "nbformat_minor": 5
6 | }
7 |
--------------------------------------------------------------------------------
/regresion-lineal/.ipynb_checkpoints/regresion-multiple-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [],
3 | "metadata": {},
4 | "nbformat": 4,
5 | "nbformat_minor": 5
6 | }
7 |
--------------------------------------------------------------------------------
/estadistica-eda/.ipynb_checkpoints/introducción-estadistica-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [],
3 | "metadata": {},
4 | "nbformat": 4,
5 | "nbformat_minor": 5
6 | }
7 |
--------------------------------------------------------------------------------
/introducción.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "id": "3b88860a",
6 | "metadata": {},
7 | "source": [
8 | "# Introducción al curso\n",
9 | "\n",
10 | "Repositorio: https://github.com/dileofrancoj/ds-6-meses\n",
11 | "\n",
12 | "Colab: https://colab.research.google.com/\n",
13 | "\n",
14 | "## Módulo I: Python y herramientas\n",
15 | "\n",
16 | "1) Introducción a Python\n",
17 | " - Sintaxis\n",
18 | " - Variables y tipos de datos\n",
19 | " - Casteo de variables\n",
20 | " - Scope\n",
21 | " - Listas y referencias\n",
22 | " - Diccionarios\n",
23 | " - Funciones\n",
24 | "2) Matplotlib\n",
25 | " - Matplot como backend de otras librerias\n",
26 | " - plot\n",
27 | " - scatter\n",
28 | " - bar\n",
29 | " - histogramas\n",
30 | " \n",
31 | " \n",
32 | "3) Base de numpy: https://www.youtube.com/watch?v=UMBU3Rb9uP4\n",
33 | "4) Pandas: https://www.youtube.com/watch?v=pGsMzf5VkA8&t=3776s\n",
34 | "\n",
35 | "## Módulo II : Estadística\n",
36 | "1) Estadística para Machine Learning\n",
37 | "2) Análisis exploratorio de datos\n",
38 | "\n",
39 | "## Módulo III\n",
40 | "\n",
41 | "En este módulo además de ver modelos se veran conceptos para interpretar resultados y bases matemáticas subyacentes de cada modelo.\n",
42 | "\n",
43 | "1) Regresión lineal simple\n",
44 | "2) Regresión lineal mulitple\n",
45 | "3) Regresión logística\n",
46 | "4) Decision tree\n",
47 | "5) Random forest\n",
48 | "6) Gradient boosting\n",
49 | "7) KNN\n",
50 | "8) SVM\n",
51 | "\n",
52 | "## Módulo IV:\n",
53 | "\n",
54 | "1) Redes neuronales\n",
55 | "2) RNN\n",
56 | "3) Introducción a transformers\n",
57 | "\n",
58 | "## Módulo V: Puesta en producción (AWS)\n",
59 | "1) Servicios en la nube para correr modelos"
60 | ]
61 | }
62 | ],
63 | "metadata": {
64 | "kernelspec": {
65 | "display_name": "Python 3 (ipykernel)",
66 | "language": "python",
67 | "name": "python3"
68 | },
69 | "language_info": {
70 | "codemirror_mode": {
71 | "name": "ipython",
72 | "version": 3
73 | },
74 | "file_extension": ".py",
75 | "mimetype": "text/x-python",
76 | "name": "python",
77 | "nbconvert_exporter": "python",
78 | "pygments_lexer": "ipython3",
79 | "version": "3.10.11"
80 | }
81 | },
82 | "nbformat": 4,
83 | "nbformat_minor": 5
84 | }
85 |
--------------------------------------------------------------------------------
/.ipynb_checkpoints/introducción-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "id": "3b88860a",
6 | "metadata": {},
7 | "source": [
8 | "# Introducción al curso\n",
9 | "\n",
10 | "Repositorio: https://github.com/dileofrancoj/ds-6-meses\n",
11 | "\n",
12 | "Colab: https://colab.research.google.com/\n",
13 | "\n",
14 | "## Módulo I: Python y herramientas\n",
15 | "\n",
16 | "1) Introducción a Python\n",
17 | " - Sintaxis\n",
18 | " - Variables y tipos de datos\n",
19 | " - Casteo de variables\n",
20 | " - Scope\n",
21 | " - Listas y referencias\n",
22 | " - Diccionarios\n",
23 | " - Funciones\n",
24 | "2) Matplotlib\n",
25 | " - Matplot como backend de otras librerias\n",
26 | " - plot\n",
27 | " - scatter\n",
28 | " - bar\n",
29 | " - histogramas\n",
30 | " \n",
31 | " \n",
32 | "3) Base de numpy: https://www.youtube.com/watch?v=UMBU3Rb9uP4\n",
33 | "4) Pandas: https://www.youtube.com/watch?v=pGsMzf5VkA8&t=3776s\n",
34 | "\n",
35 | "## Módulo II : Estadística\n",
36 | "1) Estadística para Machine Learning\n",
37 | "2) Análisis exploratorio de datos\n",
38 | "\n",
39 | "## Módulo III\n",
40 | "\n",
41 | "En este módulo además de ver modelos se veran conceptos para interpretar resultados y bases matemáticas subyacentes de cada modelo.\n",
42 | "\n",
43 | "1) Regresión lineal simple\n",
44 | "2) Regresión lineal mulitple\n",
45 | "3) Regresión logística\n",
46 | "4) Decision tree\n",
47 | "5) Random forest\n",
48 | "6) Gradient boosting\n",
49 | "7) KNN\n",
50 | "8) SVM\n",
51 | "\n",
52 | "## Módulo IV:\n",
53 | "\n",
54 | "1) Redes neuronales\n",
55 | "2) RNN\n",
56 | "3) Introducción a transformers\n",
57 | "\n",
58 | "## Módulo V: Puesta en producción (AWS)\n",
59 | "1) Servicios en la nube para correr modelos"
60 | ]
61 | }
62 | ],
63 | "metadata": {
64 | "kernelspec": {
65 | "display_name": "Python 3 (ipykernel)",
66 | "language": "python",
67 | "name": "python3"
68 | },
69 | "language_info": {
70 | "codemirror_mode": {
71 | "name": "ipython",
72 | "version": 3
73 | },
74 | "file_extension": ".py",
75 | "mimetype": "text/x-python",
76 | "name": "python",
77 | "nbconvert_exporter": "python",
78 | "pygments_lexer": "ipython3",
79 | "version": "3.10.11"
80 | }
81 | },
82 | "nbformat": 4,
83 | "nbformat_minor": 5
84 | }
85 |
--------------------------------------------------------------------------------
/python/tarea-clase-01.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "id": "b40162a4",
6 | "metadata": {},
7 | "source": [
8 | "# Revisión: Clase nro 1\n",
9 | "\n",
10 | "### Sintaxis de Python:\n",
11 | "\n",
12 | "1. Escribe un programa que solicite al usuario su nombre y luego imprima un saludo que incluya su nombre.\n",
13 | "\n",
14 | "2. Crea un programa que calcule el área de un triángulo utilizando la fórmula A = (base * altura) / 2. Solicita al usuario que ingrese la base y la altura.\n",
15 | "\n",
16 | "### Listas:\n",
17 | "\n",
18 | "1. Crea una lista de números enteros y luego escribe un programa que encuentre el número más grande en esa lista.\n",
19 | "\n",
20 | "2. Escribe un programa que tome una lista de palabras y devuelva otra lista que contenga solo las palabras de 5 letras o más.\n",
21 | "\n",
22 | "### Diccionarios:\n",
23 | "\n",
24 | "1. Crea un diccionario que almacene nombres de personas como claves y sus edades como valores. Luego, pide al usuario que ingrese un nombre y muestra la edad correspondiente.\n",
25 | "\n",
26 | "2. Crea un diccionario que contenga nombres de frutas como claves y sus cantidades como valores. Luego, permite al usuario actualizar la cantidad de una fruta específica y muestra el diccionario actualizado.\n",
27 | "\n",
28 | "### Funciones\n",
29 | "\n",
30 | "1. Escribe una función llamada suma que tome dos números como argumentos y devuelva su suma. Luego, pide al usuario que ingrese dos números y muestra el resultado de la suma.\n",
31 | "\n",
32 | "2. Crea una función llamada es_par que tome un número como argumento y devuelva True si es par y False si es impar. Luego, solicita al usuario que ingrese un número y muestra un mensaje que indique si es par o impar.\n",
33 | "\n",
34 | "3. Define una función llamada contador_vocales que tome una cadena como argumento y devuelva un diccionario que cuente cuántas veces aparece cada vocal (a, e, i, o, u) en la cadena.\n",
35 | "\n",
36 | "4. Crea una función llamada calculadora que permita al usuario realizar operaciones matemáticas básicas (suma, resta, multiplicación, división). La función debe tomar dos números y un operador como argumentos y devolver el resultado de la operación."
37 | ]
38 | }
39 | ],
40 | "metadata": {
41 | "kernelspec": {
42 | "display_name": "Python 3 (ipykernel)",
43 | "language": "python",
44 | "name": "python3"
45 | },
46 | "language_info": {
47 | "codemirror_mode": {
48 | "name": "ipython",
49 | "version": 3
50 | },
51 | "file_extension": ".py",
52 | "mimetype": "text/x-python",
53 | "name": "python",
54 | "nbconvert_exporter": "python",
55 | "pygments_lexer": "ipython3",
56 | "version": "3.10.11"
57 | }
58 | },
59 | "nbformat": 4,
60 | "nbformat_minor": 5
61 | }
62 |
--------------------------------------------------------------------------------
/python/.ipynb_checkpoints/tarea-clase-01-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "id": "b40162a4",
6 | "metadata": {},
7 | "source": [
8 | "# Revisión: Clase nro 1\n",
9 | "\n",
10 | "### Sintaxis de Python:\n",
11 | "\n",
12 | "1. Escribe un programa que solicite al usuario su nombre y luego imprima un saludo que incluya su nombre.\n",
13 | "\n",
14 | "2. Crea un programa que calcule el área de un triángulo utilizando la fórmula A = (base * altura) / 2. Solicita al usuario que ingrese la base y la altura.\n",
15 | "\n",
16 | "### Listas:\n",
17 | "\n",
18 | "1. Crea una lista de números enteros y luego escribe un programa que encuentre el número más grande en esa lista.\n",
19 | "\n",
20 | "2. Escribe un programa que tome una lista de palabras y devuelva otra lista que contenga solo las palabras de 5 letras o más.\n",
21 | "\n",
22 | "### Diccionarios:\n",
23 | "\n",
24 | "1. Crea un diccionario que almacene nombres de personas como claves y sus edades como valores. Luego, pide al usuario que ingrese un nombre y muestra la edad correspondiente.\n",
25 | "\n",
26 | "2. Crea un diccionario que contenga nombres de frutas como claves y sus cantidades como valores. Luego, permite al usuario actualizar la cantidad de una fruta específica y muestra el diccionario actualizado.\n",
27 | "\n",
28 | "### Funciones\n",
29 | "\n",
30 | "1. Escribe una función llamada suma que tome dos números como argumentos y devuelva su suma. Luego, pide al usuario que ingrese dos números y muestra el resultado de la suma.\n",
31 | "\n",
32 | "2. Crea una función llamada es_par que tome un número como argumento y devuelva True si es par y False si es impar. Luego, solicita al usuario que ingrese un número y muestra un mensaje que indique si es par o impar.\n",
33 | "\n",
34 | "3. Define una función llamada contador_vocales que tome una cadena como argumento y devuelva un diccionario que cuente cuántas veces aparece cada vocal (a, e, i, o, u) en la cadena.\n",
35 | "\n",
36 | "4. Crea una función llamada calculadora que permita al usuario realizar operaciones matemáticas básicas (suma, resta, multiplicación, división). La función debe tomar dos números y un operador como argumentos y devolver el resultado de la operación."
37 | ]
38 | }
39 | ],
40 | "metadata": {
41 | "kernelspec": {
42 | "display_name": "Python 3 (ipykernel)",
43 | "language": "python",
44 | "name": "python3"
45 | },
46 | "language_info": {
47 | "codemirror_mode": {
48 | "name": "ipython",
49 | "version": 3
50 | },
51 | "file_extension": ".py",
52 | "mimetype": "text/x-python",
53 | "name": "python",
54 | "nbconvert_exporter": "python",
55 | "pygments_lexer": "ipython3",
56 | "version": "3.10.11"
57 | }
58 | },
59 | "nbformat": 4,
60 | "nbformat_minor": 5
61 | }
62 |
--------------------------------------------------------------------------------
/regresion-lineal/regresion-multiple.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "id": "6a508f27",
6 | "metadata": {},
7 | "source": [
8 | "## Regresión múltiple\n",
9 | "\n",
10 | "- Normalización: Para normalizar los datos de entrada\n",
11 | " - Estandarización estadística\n",
12 | " - MinMaxScaler -> [0;1]\n",
13 | "\n",
14 | "### Estratificación\n",
15 | "\n",
16 | "### train_test_split\n",
17 | "\n",
18 | "Es una función incluida en sklearn que sirve para dividir vectores, matrices o tensores en subconjuntos **aleatoria**\n",
19 | "\n",
20 | "Estándar de estratificación: 70-75% pruebas y 30-25% para test"
21 | ]
22 | },
23 | {
24 | "cell_type": "code",
25 | "execution_count": 1,
26 | "id": "8330fd51",
27 | "metadata": {},
28 | "outputs": [],
29 | "source": [
30 | "import numpy as np\n",
31 | "import pandas as pd\n",
32 | "import matplotlib.pyplot as plt"
33 | ]
34 | },
35 | {
36 | "cell_type": "code",
37 | "execution_count": 2,
38 | "id": "e96e3474",
39 | "metadata": {},
40 | "outputs": [],
41 | "source": [
42 | "df = pd.read_csv('../datasets/advertising.csv')"
43 | ]
44 | },
45 | {
46 | "cell_type": "code",
47 | "execution_count": 9,
48 | "id": "2c50fc31",
49 | "metadata": {},
50 | "outputs": [
51 | {
52 | "data": {
53 | "text/html": [
54 | "
\n",
55 | "\n",
68 | "
\n",
69 | " \n",
70 | " \n",
71 | " \n",
72 | " TV \n",
73 | " Radio \n",
74 | " Newspaper \n",
75 | " Sales \n",
76 | " City_size \n",
77 | " \n",
78 | " \n",
79 | " \n",
80 | " \n",
81 | " 0 \n",
82 | " 230.1 \n",
83 | " 37.8 \n",
84 | " 69.2 \n",
85 | " 22.1 \n",
86 | " big \n",
87 | " \n",
88 | " \n",
89 | " 1 \n",
90 | " 44.5 \n",
91 | " 39.3 \n",
92 | " 45.1 \n",
93 | " 10.4 \n",
94 | " small \n",
95 | " \n",
96 | " \n",
97 | " 2 \n",
98 | " 17.2 \n",
99 | " 45.9 \n",
100 | " 69.3 \n",
101 | " 9.3 \n",
102 | " small \n",
103 | " \n",
104 | " \n",
105 | " 3 \n",
106 | " 151.5 \n",
107 | " 41.3 \n",
108 | " 58.5 \n",
109 | " 18.5 \n",
110 | " big \n",
111 | " \n",
112 | " \n",
113 | " 4 \n",
114 | " 180.8 \n",
115 | " 10.8 \n",
116 | " 58.4 \n",
117 | " 12.9 \n",
118 | " small \n",
119 | " \n",
120 | " \n",
121 | "
\n",
122 | "
"
123 | ],
124 | "text/plain": [
125 | " TV Radio Newspaper Sales City_size\n",
126 | "0 230.1 37.8 69.2 22.1 big\n",
127 | "1 44.5 39.3 45.1 10.4 small\n",
128 | "2 17.2 45.9 69.3 9.3 small\n",
129 | "3 151.5 41.3 58.5 18.5 big\n",
130 | "4 180.8 10.8 58.4 12.9 small"
131 | ]
132 | },
133 | "execution_count": 9,
134 | "metadata": {},
135 | "output_type": "execute_result"
136 | }
137 | ],
138 | "source": [
139 | "df.head()"
140 | ]
141 | },
142 | {
143 | "cell_type": "code",
144 | "execution_count": 5,
145 | "id": "81b4776c",
146 | "metadata": {},
147 | "outputs": [],
148 | "source": [
149 | "df.drop(columns=['Unnamed: 0'], inplace=True)"
150 | ]
151 | },
152 | {
153 | "cell_type": "code",
154 | "execution_count": 10,
155 | "id": "1b090631",
156 | "metadata": {},
157 | "outputs": [
158 | {
159 | "data": {
160 | "text/html": [
161 | "\n",
162 | "\n",
175 | "
\n",
176 | " \n",
177 | " \n",
178 | " \n",
179 | " TV \n",
180 | " Radio \n",
181 | " Newspaper \n",
182 | " Sales \n",
183 | " City_size \n",
184 | " \n",
185 | " \n",
186 | " \n",
187 | " \n",
188 | " 0 \n",
189 | " 230.1 \n",
190 | " 37.8 \n",
191 | " 69.2 \n",
192 | " 22.1 \n",
193 | " big \n",
194 | " \n",
195 | " \n",
196 | " 1 \n",
197 | " 44.5 \n",
198 | " 39.3 \n",
199 | " 45.1 \n",
200 | " 10.4 \n",
201 | " small \n",
202 | " \n",
203 | " \n",
204 | " 2 \n",
205 | " 17.2 \n",
206 | " 45.9 \n",
207 | " 69.3 \n",
208 | " 9.3 \n",
209 | " small \n",
210 | " \n",
211 | " \n",
212 | " 3 \n",
213 | " 151.5 \n",
214 | " 41.3 \n",
215 | " 58.5 \n",
216 | " 18.5 \n",
217 | " big \n",
218 | " \n",
219 | " \n",
220 | " 4 \n",
221 | " 180.8 \n",
222 | " 10.8 \n",
223 | " 58.4 \n",
224 | " 12.9 \n",
225 | " small \n",
226 | " \n",
227 | " \n",
228 | "
\n",
229 | "
"
230 | ],
231 | "text/plain": [
232 | " TV Radio Newspaper Sales City_size\n",
233 | "0 230.1 37.8 69.2 22.1 big\n",
234 | "1 44.5 39.3 45.1 10.4 small\n",
235 | "2 17.2 45.9 69.3 9.3 small\n",
236 | "3 151.5 41.3 58.5 18.5 big\n",
237 | "4 180.8 10.8 58.4 12.9 small"
238 | ]
239 | },
240 | "execution_count": 10,
241 | "metadata": {},
242 | "output_type": "execute_result"
243 | }
244 | ],
245 | "source": [
246 | "df.head()"
247 | ]
248 | },
249 | {
250 | "cell_type": "code",
251 | "execution_count": 11,
252 | "id": "c28f6abf",
253 | "metadata": {},
254 | "outputs": [],
255 | "source": [
256 | "df.drop(columns=['City_size'],inplace=True)"
257 | ]
258 | },
259 | {
260 | "cell_type": "code",
261 | "execution_count": 13,
262 | "id": "c596ca35",
263 | "metadata": {},
264 | "outputs": [
265 | {
266 | "data": {
267 | "text/html": [
268 | "\n",
269 | "\n",
282 | "
\n",
283 | " \n",
284 | " \n",
285 | " \n",
286 | " TV \n",
287 | " Radio \n",
288 | " Newspaper \n",
289 | " Sales \n",
290 | " \n",
291 | " \n",
292 | " \n",
293 | " \n",
294 | " 0 \n",
295 | " 230.1 \n",
296 | " 37.8 \n",
297 | " 69.2 \n",
298 | " 22.1 \n",
299 | " \n",
300 | " \n",
301 | " 1 \n",
302 | " 44.5 \n",
303 | " 39.3 \n",
304 | " 45.1 \n",
305 | " 10.4 \n",
306 | " \n",
307 | " \n",
308 | " 2 \n",
309 | " 17.2 \n",
310 | " 45.9 \n",
311 | " 69.3 \n",
312 | " 9.3 \n",
313 | " \n",
314 | " \n",
315 | " 3 \n",
316 | " 151.5 \n",
317 | " 41.3 \n",
318 | " 58.5 \n",
319 | " 18.5 \n",
320 | " \n",
321 | " \n",
322 | " 4 \n",
323 | " 180.8 \n",
324 | " 10.8 \n",
325 | " 58.4 \n",
326 | " 12.9 \n",
327 | " \n",
328 | " \n",
329 | "
\n",
330 | "
"
331 | ],
332 | "text/plain": [
333 | " TV Radio Newspaper Sales\n",
334 | "0 230.1 37.8 69.2 22.1\n",
335 | "1 44.5 39.3 45.1 10.4\n",
336 | "2 17.2 45.9 69.3 9.3\n",
337 | "3 151.5 41.3 58.5 18.5\n",
338 | "4 180.8 10.8 58.4 12.9"
339 | ]
340 | },
341 | "execution_count": 13,
342 | "metadata": {},
343 | "output_type": "execute_result"
344 | }
345 | ],
346 | "source": [
347 | "df.head()"
348 | ]
349 | },
350 | {
351 | "cell_type": "code",
352 | "execution_count": 14,
353 | "id": "45759c6f",
354 | "metadata": {},
355 | "outputs": [],
356 | "source": [
357 | "from sklearn.linear_model import LinearRegression\n",
358 | "from sklearn.model_selection import train_test_split\n",
359 | "from sklearn.metrics import mean_squared_error, r2_score # r2_score es r2 ajustado -> penaliza la cantidad de features"
360 | ]
361 | },
362 | {
363 | "cell_type": "code",
364 | "execution_count": 23,
365 | "id": "3a11e433",
366 | "metadata": {},
367 | "outputs": [],
368 | "source": [
369 | "# X = df[['TV','Radio','Newspaper']]\n",
370 | "X = df.drop(columns=['Sales'])\n",
371 | "y = df['Sales']"
372 | ]
373 | },
374 | {
375 | "cell_type": "code",
376 | "execution_count": null,
377 | "id": "fef960a7",
378 | "metadata": {},
379 | "outputs": [],
380 | "source": [
381 | "# Importante el orden"
382 | ]
383 | },
384 | {
385 | "cell_type": "code",
386 | "execution_count": 42,
387 | "id": "bff49156",
388 | "metadata": {},
389 | "outputs": [],
390 | "source": [
391 | "X_train, X_test, Y_train, Y_test= train_test_split(X,y,train_size=.7, random_state=1) # random_state -> semilla de aleatoriedad"
392 | ]
393 | },
394 | {
395 | "cell_type": "code",
396 | "execution_count": 44,
397 | "id": "fd6b04c6",
398 | "metadata": {},
399 | "outputs": [],
400 | "source": [
401 | "model = LinearRegression(normalize=True, fit_intercept=True) # normalize=True, fit_intercept=True"
402 | ]
403 | },
404 | {
405 | "cell_type": "code",
406 | "execution_count": 45,
407 | "id": "6bb3d984",
408 | "metadata": {},
409 | "outputs": [
410 | {
411 | "name": "stderr",
412 | "output_type": "stream",
413 | "text": [
414 | "/usr/local/lib/python3.10/site-packages/sklearn/linear_model/_base.py:141: FutureWarning: 'normalize' was deprecated in version 1.0 and will be removed in 1.2.\n",
415 | "If you wish to scale the data, use Pipeline with a StandardScaler in a preprocessing stage. To reproduce the previous behavior:\n",
416 | "\n",
417 | "from sklearn.pipeline import make_pipeline\n",
418 | "\n",
419 | "model = make_pipeline(StandardScaler(with_mean=False), LinearRegression())\n",
420 | "\n",
421 | "If you wish to pass a sample_weight parameter, you need to pass it as a fit parameter to each step of the pipeline as follows:\n",
422 | "\n",
423 | "kwargs = {s[0] + '__sample_weight': sample_weight for s in model.steps}\n",
424 | "model.fit(X, y, **kwargs)\n",
425 | "\n",
426 | "\n",
427 | " warnings.warn(\n"
428 | ]
429 | },
430 | {
431 | "data": {
432 | "text/html": [
433 | "LinearRegression(normalize=True) In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org. "
434 | ],
435 | "text/plain": [
436 | "LinearRegression(normalize=True)"
437 | ]
438 | },
439 | "execution_count": 45,
440 | "metadata": {},
441 | "output_type": "execute_result"
442 | }
443 | ],
444 | "source": [
445 | "model.fit(X_train,Y_train)"
446 | ]
447 | },
448 | {
449 | "cell_type": "code",
450 | "execution_count": 46,
451 | "id": "5f10c8b7",
452 | "metadata": {},
453 | "outputs": [
454 | {
455 | "name": "stdout",
456 | "output_type": "stream",
457 | "text": [
458 | "Coeficientes: [0.04695205 0.17658644 0.00185115]\n",
459 | "Ordenada al origen 2.937215734690616\n"
460 | ]
461 | }
462 | ],
463 | "source": [
464 | "print(\"Coeficientes: \",model.coef_)\n",
465 | "print(\"Ordenada al origen\", model.intercept_)\n"
466 | ]
467 | },
468 | {
469 | "cell_type": "code",
470 | "execution_count": 47,
471 | "id": "84759274",
472 | "metadata": {},
473 | "outputs": [],
474 | "source": [
475 | "# t = 0.046x + 0.176y + 0.0018z + 2.93"
476 | ]
477 | },
478 | {
479 | "cell_type": "code",
480 | "execution_count": 50,
481 | "id": "10e7745f",
482 | "metadata": {},
483 | "outputs": [],
484 | "source": [
485 | "y_pred = model.predict(X_test)"
486 | ]
487 | },
488 | {
489 | "cell_type": "code",
490 | "execution_count": 52,
491 | "id": "eb579b10",
492 | "metadata": {},
493 | "outputs": [],
494 | "source": [
495 | "# MSE, R2"
496 | ]
497 | },
498 | {
499 | "cell_type": "code",
500 | "execution_count": 54,
501 | "id": "b5a49379",
502 | "metadata": {},
503 | "outputs": [
504 | {
505 | "data": {
506 | "text/plain": [
507 | "0.0081"
508 | ]
509 | },
510 | "execution_count": 54,
511 | "metadata": {},
512 | "output_type": "execute_result"
513 | }
514 | ],
515 | "source": [
516 | "0.09**2"
517 | ]
518 | },
519 | {
520 | "cell_type": "code",
521 | "execution_count": 56,
522 | "id": "7fbf0d8a",
523 | "metadata": {},
524 | "outputs": [
525 | {
526 | "name": "stdout",
527 | "output_type": "stream",
528 | "text": [
529 | "MSE: 1.928924907466569\n"
530 | ]
531 | }
532 | ],
533 | "source": [
534 | "mse = mean_squared_error(y_pred,Y_test)\n",
535 | "print(\"MSE: \", mse)"
536 | ]
537 | },
538 | {
539 | "cell_type": "code",
540 | "execution_count": 58,
541 | "id": "f3f43df3",
542 | "metadata": {},
543 | "outputs": [
544 | {
545 | "name": "stdout",
546 | "output_type": "stream",
547 | "text": [
548 | "r2 0.9160245222353564\n"
549 | ]
550 | }
551 | ],
552 | "source": [
553 | "r2 = r2_score(y_pred,Y_test)\n",
554 | "print(\"r2\", r2)"
555 | ]
556 | },
557 | {
558 | "cell_type": "code",
559 | "execution_count": 59,
560 | "id": "592ba582",
561 | "metadata": {},
562 | "outputs": [
563 | {
564 | "data": {
565 | "text/html": [
566 | "\n",
567 | "\n",
580 | "
\n",
581 | " \n",
582 | " \n",
583 | " \n",
584 | " Coefficients \n",
585 | " \n",
586 | " \n",
587 | " \n",
588 | " \n",
589 | " TV \n",
590 | " 0.046952 \n",
591 | " \n",
592 | " \n",
593 | " RADIO \n",
594 | " 0.176586 \n",
595 | " \n",
596 | " \n",
597 | " DIARIO \n",
598 | " 0.001851 \n",
599 | " \n",
600 | " \n",
601 | "
\n",
602 | "
"
603 | ],
604 | "text/plain": [
605 | " Coefficients\n",
606 | "TV 0.046952\n",
607 | "RADIO 0.176586\n",
608 | "DIARIO 0.001851"
609 | ]
610 | },
611 | "execution_count": 59,
612 | "metadata": {},
613 | "output_type": "execute_result"
614 | }
615 | ],
616 | "source": [
617 | "pd.DataFrame(model.coef_, ['TV','RADIO','DIARIO'], columns=['Cwoefficients'])"
618 | ]
619 | }
620 | ],
621 | "metadata": {
622 | "kernelspec": {
623 | "display_name": "Python 3 (ipykernel)",
624 | "language": "python",
625 | "name": "python3"
626 | },
627 | "language_info": {
628 | "codemirror_mode": {
629 | "name": "ipython",
630 | "version": 3
631 | },
632 | "file_extension": ".py",
633 | "mimetype": "text/x-python",
634 | "name": "python",
635 | "nbconvert_exporter": "python",
636 | "pygments_lexer": "ipython3",
637 | "version": "3.10.11"
638 | }
639 | },
640 | "nbformat": 4,
641 | "nbformat_minor": 5
642 | }
643 |
--------------------------------------------------------------------------------
/python/.ipynb_checkpoints/01-python-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "id": "1ac8ee90",
6 | "metadata": {},
7 | "source": [
8 | "# Python\n",
9 | "\n",
10 | "## Instalación\n",
11 | "\n",
12 | "Mac & Linux ( viene por default )\n",
13 | "```bash\n",
14 | " brew install python\n",
15 | " apt-get install python (linux)\n",
16 | "```\n",
17 | "\n",
18 | "Windows: https://www.python.org/downloads/\n",
19 | "\n",
20 | "Para asegurarnos que tenemos la versión correcta, debemos ir a una terminal y correr el comando de python con el parámetro para ver la versión\n",
21 | "\n",
22 | "```bash\n",
23 | "python3 --version\n",
24 | "\n",
25 | "```\n",
26 | "\n",
27 | "### Jupyter notebook\n",
28 | "\n",
29 | "https://jupyter.org/install\n",
30 | "\n",
31 | "## Visual Studio\n",
32 | "\n",
33 | "https://visualstudio.microsoft.com/es/\n",
34 | "\n",
35 | "> Automate the boring stuff with python "
36 | ]
37 | },
38 | {
39 | "cell_type": "markdown",
40 | "id": "d543db04",
41 | "metadata": {},
42 | "source": [
43 | "## Tipos de datos\n",
44 | "\n",
45 | "- String\n",
46 | "- Float\n",
47 | "- Int\n",
48 | "- Boolean\n",
49 | "- Dict\n",
50 | "- List\n",
51 | "- Tuple\n",
52 | "- Range\n",
53 | "- None\n",
54 | "- Set\n",
55 | "- Fronzen set"
56 | ]
57 | },
58 | {
59 | "cell_type": "code",
60 | "execution_count": 5,
61 | "id": "b603a5a6",
62 | "metadata": {},
63 | "outputs": [
64 | {
65 | "data": {
66 | "text/plain": [
67 | "str"
68 | ]
69 | },
70 | "execution_count": 5,
71 | "metadata": {},
72 | "output_type": "execute_result"
73 | }
74 | ],
75 | "source": [
76 | "name = \"franco\"\n",
77 | "type(name)\n",
78 | "# print(\"hola\", name)"
79 | ]
80 | },
81 | {
82 | "cell_type": "code",
83 | "execution_count": 6,
84 | "id": "4b5d2cb1",
85 | "metadata": {},
86 | "outputs": [
87 | {
88 | "data": {
89 | "text/plain": [
90 | "int"
91 | ]
92 | },
93 | "execution_count": 6,
94 | "metadata": {},
95 | "output_type": "execute_result"
96 | }
97 | ],
98 | "source": [
99 | "name = 82\n",
100 | "type(name)"
101 | ]
102 | },
103 | {
104 | "cell_type": "code",
105 | "execution_count": 9,
106 | "id": "01a20619",
107 | "metadata": {},
108 | "outputs": [
109 | {
110 | "data": {
111 | "text/plain": [
112 | "list"
113 | ]
114 | },
115 | "execution_count": 9,
116 | "metadata": {},
117 | "output_type": "execute_result"
118 | }
119 | ],
120 | "source": [
121 | "type(False)\n",
122 | "type([\"franco\",\"ceci\"])"
123 | ]
124 | },
125 | {
126 | "cell_type": "markdown",
127 | "id": "9f50bb90",
128 | "metadata": {},
129 | "source": [
130 | "## Listas\n",
131 | "las listas son usadas para guardar multiples elementos en una sola variable. Built-in del lenguaje\n",
132 | "Son ordenadas, intercambiables y admite duplicadas. Los elementos son indexados y el primer elemento tiene indice 0 "
133 | ]
134 | },
135 | {
136 | "cell_type": "code",
137 | "execution_count": 34,
138 | "id": "a0ea267b",
139 | "metadata": {},
140 | "outputs": [
141 | {
142 | "name": "stdout",
143 | "output_type": "stream",
144 | "text": [
145 | "['franco', 'juan pablo', 'hernan', 'ale', 'matias', 'david']\n",
146 | "['programar y entrenar', 'el 🐍', 'jugar al basket', 'ir a la playa y tomar 🥂', 'entrenar y jugar juegos de mesas', 'vencer a goliat']\n"
147 | ]
148 | },
149 | {
150 | "data": {
151 | "text/plain": [
152 | "6"
153 | ]
154 | },
155 | "execution_count": 34,
156 | "metadata": {},
157 | "output_type": "execute_result"
158 | }
159 | ],
160 | "source": [
161 | "nombres = [\"franco\",\"juan pablo\",\"hernan\",\"ale\",\"matias\",\"david\"]\n",
162 | "hobbies = [\"programar y entrenar\", \"el 🐍\",\"jugar al basket\",\"ir a la playa y tomar 🥂\",\"entrenar y jugar juegos de mesas\",\"vencer a goliat\"]\n",
163 | "print(lista_01)\n",
164 | "print(hobbies)\n",
165 | "type(lista_01)\n",
166 | "len(lista_01)"
167 | ]
168 | },
169 | {
170 | "cell_type": "code",
171 | "execution_count": 20,
172 | "id": "b6acf7ce",
173 | "metadata": {},
174 | "outputs": [
175 | {
176 | "name": "stdout",
177 | "output_type": "stream",
178 | "text": [
179 | "franco tiene por hobbie: programar y entrenar\n"
180 | ]
181 | }
182 | ],
183 | "source": [
184 | "print(nombres[0], \" tiene por hobbie: \", hobbies[0])"
185 | ]
186 | },
187 | {
188 | "cell_type": "code",
189 | "execution_count": 24,
190 | "id": "823ece8a",
191 | "metadata": {},
192 | "outputs": [],
193 | "source": [
194 | "# list[-1] ultimo elemento de la lista\n"
195 | ]
196 | },
197 | {
198 | "cell_type": "code",
199 | "execution_count": 26,
200 | "id": "719f3d6f",
201 | "metadata": {},
202 | "outputs": [],
203 | "source": [
204 | "length_list = len(nombres)"
205 | ]
206 | },
207 | {
208 | "cell_type": "code",
209 | "execution_count": 28,
210 | "id": "8b5ccc7f",
211 | "metadata": {},
212 | "outputs": [
213 | {
214 | "name": "stdout",
215 | "output_type": "stream",
216 | "text": [
217 | "El ultimo elemento de la lista nombres es : david\n"
218 | ]
219 | }
220 | ],
221 | "source": [
222 | "print(\"El ultimo elemento de la lista nombres es :\", nombres[length_list - 1])"
223 | ]
224 | },
225 | {
226 | "cell_type": "code",
227 | "execution_count": 29,
228 | "id": "836b7882",
229 | "metadata": {},
230 | "outputs": [
231 | {
232 | "name": "stdout",
233 | "output_type": "stream",
234 | "text": [
235 | "franco tiene por hobbie: programar y entrenar\n"
236 | ]
237 | }
238 | ],
239 | "source": [
240 | "print(nombres[-6], \" tiene por hobbie: \", hobbies[-6])"
241 | ]
242 | },
243 | {
244 | "cell_type": "code",
245 | "execution_count": 30,
246 | "id": "492ff9c5",
247 | "metadata": {},
248 | "outputs": [],
249 | "source": [
250 | "lista_ensalada = [\"Franco\",29, False, \"Mascotas\",[\"amazonas\",\"perla\"]]"
251 | ]
252 | },
253 | {
254 | "cell_type": "code",
255 | "execution_count": 33,
256 | "id": "02b4670b",
257 | "metadata": {},
258 | "outputs": [
259 | {
260 | "name": "stdout",
261 | "output_type": "stream",
262 | "text": [
263 | "\n"
264 | ]
265 | }
266 | ],
267 | "source": [
268 | "nombres = list((\"franco\",\"juan pablo\",\"hernan\",\"ale\",\"matias\",\"david\"))\n",
269 | "print(type(nombres))"
270 | ]
271 | },
272 | {
273 | "cell_type": "code",
274 | "execution_count": 54,
275 | "id": "e9be7ddf",
276 | "metadata": {},
277 | "outputs": [
278 | {
279 | "name": "stdout",
280 | "output_type": "stream",
281 | "text": [
282 | "['juan pablo', 'hernan', 'ale', 'matias', 'david']\n"
283 | ]
284 | }
285 | ],
286 | "source": [
287 | "# start, stop, step (de donde comienzo a recorrer,)\n",
288 | "print(nombres[1:len(nombres):1]) # el stop no se incluye (4) []"
289 | ]
290 | },
291 | {
292 | "cell_type": "code",
293 | "execution_count": 55,
294 | "id": "a88f88c4",
295 | "metadata": {},
296 | "outputs": [
297 | {
298 | "name": "stdout",
299 | "output_type": "stream",
300 | "text": [
301 | "['jugar al basket']\n"
302 | ]
303 | }
304 | ],
305 | "source": [
306 | "print(hobbies[2:5:3])"
307 | ]
308 | },
309 | {
310 | "cell_type": "code",
311 | "execution_count": 59,
312 | "id": "95d194df",
313 | "metadata": {},
314 | "outputs": [],
315 | "source": [
316 | "nombres[0] = \"Miguel\"\n",
317 | "hobbies[0] = \"Guitarra 🎸\"\n"
318 | ]
319 | },
320 | {
321 | "cell_type": "code",
322 | "execution_count": 62,
323 | "id": "8eb2c67c",
324 | "metadata": {},
325 | "outputs": [
326 | {
327 | "name": "stdout",
328 | "output_type": "stream",
329 | "text": [
330 | "['Miguel', 'juan pablo', 'hernan', 'ale', 'matias', 'david'] ['Guitarra 🎸', 'el 🐍', 'jugar al basket', 'ir a la playa y tomar 🥂', 'entrenar y jugar juegos de mesas', 'vencer a goliat']\n"
331 | ]
332 | }
333 | ],
334 | "source": [
335 | "print(nombres, hobbies)"
336 | ]
337 | },
338 | {
339 | "cell_type": "code",
340 | "execution_count": 65,
341 | "id": "385a9d68",
342 | "metadata": {},
343 | "outputs": [],
344 | "source": [
345 | "saludos = list((\"holis\",\"aloha\"))"
346 | ]
347 | },
348 | {
349 | "cell_type": "code",
350 | "execution_count": 66,
351 | "id": "110c717c",
352 | "metadata": {},
353 | "outputs": [
354 | {
355 | "data": {
356 | "text/plain": [
357 | "list"
358 | ]
359 | },
360 | "execution_count": 66,
361 | "metadata": {},
362 | "output_type": "execute_result"
363 | }
364 | ],
365 | "source": [
366 | "type(saludos)"
367 | ]
368 | },
369 | {
370 | "cell_type": "code",
371 | "execution_count": 67,
372 | "id": "0bcbd0de",
373 | "metadata": {},
374 | "outputs": [],
375 | "source": [
376 | "# nombres[6] = \"Camila\" \n",
377 | "# hobbies[6] = \"Entrenar\"\n",
378 | "nombres.append(\"Camila\") # agrega un elemento al final de la lista\n",
379 | "hobbies.append(\"Entrenar\")"
380 | ]
381 | },
382 | {
383 | "cell_type": "code",
384 | "execution_count": 68,
385 | "id": "a9394b25",
386 | "metadata": {},
387 | "outputs": [
388 | {
389 | "name": "stdout",
390 | "output_type": "stream",
391 | "text": [
392 | "['Miguel', 'juan pablo', 'hernan', 'ale', 'matias', 'david', 'Camila']\n"
393 | ]
394 | }
395 | ],
396 | "source": [
397 | "print(nombres)"
398 | ]
399 | },
400 | {
401 | "cell_type": "code",
402 | "execution_count": 74,
403 | "id": "203081a2",
404 | "metadata": {},
405 | "outputs": [],
406 | "source": [
407 | "try:\n",
408 | " nombres[7] = \"Stefi.\"\n",
409 | " hobbies[7] = \"Leer :P\"\n",
410 | "except:\n",
411 | " pass"
412 | ]
413 | },
414 | {
415 | "cell_type": "code",
416 | "execution_count": 98,
417 | "id": "50a36908",
418 | "metadata": {},
419 | "outputs": [],
420 | "source": [
421 | "frutas = [\"Papaya 🥔\",\"Mango\",\"Dragon Fruit (la pasionaria)\",\"Granada\"]\n",
422 | "licuados = [\"Banana\",\"Frutilla\",\"Maracuya\",\"Durazno\"]\n",
423 | "frutas_licuados = licuados + frutas\n"
424 | ]
425 | },
426 | {
427 | "cell_type": "code",
428 | "execution_count": null,
429 | "id": "7a3c0f58",
430 | "metadata": {},
431 | "outputs": [],
432 | "source": []
433 | },
434 | {
435 | "cell_type": "code",
436 | "execution_count": 99,
437 | "id": "8dd75268",
438 | "metadata": {},
439 | "outputs": [
440 | {
441 | "name": "stdout",
442 | "output_type": "stream",
443 | "text": [
444 | "['Banana', 'Frutilla', 'Maracuya', 'Durazno', 'Papaya 🥔', 'Mango', 'Dragon Fruit (la pasionaria)', 'Granada']\n"
445 | ]
446 | }
447 | ],
448 | "source": [
449 | "print(frutas_licuados)"
450 | ]
451 | },
452 | {
453 | "cell_type": "code",
454 | "execution_count": 100,
455 | "id": "fe8aeba2",
456 | "metadata": {},
457 | "outputs": [
458 | {
459 | "name": "stdout",
460 | "output_type": "stream",
461 | "text": [
462 | "['Banana', 'Frutilla', 'Maracuya', 'Durazno']\n"
463 | ]
464 | }
465 | ],
466 | "source": [
467 | "print(licuados)"
468 | ]
469 | },
470 | {
471 | "cell_type": "code",
472 | "execution_count": 103,
473 | "id": "6ee16e96",
474 | "metadata": {},
475 | "outputs": [
476 | {
477 | "name": "stdout",
478 | "output_type": "stream",
479 | "text": [
480 | "['Papaya 🥔', 'Mango', 'Dragon Fruit (la pasionaria)', 'Granada', ['Banana', 'Frutilla', 'Maracuya', 'Durazno'], ['Banana', 'Frutilla', 'Maracuya', 'Durazno'], ['Banana', 'Frutilla', 'Maracuya', 'Durazno']]\n"
481 | ]
482 | }
483 | ],
484 | "source": [
485 | "frutas_licuados = frutas.append(licuados)\n",
486 | "# print(frutas)"
487 | ]
488 | },
489 | {
490 | "cell_type": "code",
491 | "execution_count": 91,
492 | "id": "9d257a48",
493 | "metadata": {},
494 | "outputs": [
495 | {
496 | "name": "stdout",
497 | "output_type": "stream",
498 | "text": [
499 | "['Papaya 🥔', 'Mango', 'Dragon Fruit (la pasionaria)', 'Granada']\n"
500 | ]
501 | }
502 | ],
503 | "source": [
504 | "print(frutas)"
505 | ]
506 | },
507 | {
508 | "cell_type": "code",
509 | "execution_count": 93,
510 | "id": "610c4a28",
511 | "metadata": {},
512 | "outputs": [
513 | {
514 | "name": "stdout",
515 | "output_type": "stream",
516 | "text": [
517 | "[1.8, 1.75, 1.82, 1.76, 1.82, 1.83, 1.6]\n"
518 | ]
519 | }
520 | ],
521 | "source": [
522 | "alturas_cancun = [1.8,1.75,1.82]\n",
523 | "alturas_argentina = [1.76,1.82,1.83,1.60]\n",
524 | "alturas = alturas_cancun + alturas_argentina\n",
525 | "print(alturas)"
526 | ]
527 | },
528 | {
529 | "cell_type": "code",
530 | "execution_count": 104,
531 | "id": "5427bad1",
532 | "metadata": {},
533 | "outputs": [
534 | {
535 | "data": {
536 | "text/plain": [
537 | "['miguel', ['Stefi :P', 'Ceci (gabriel)']]"
538 | ]
539 | },
540 | "execution_count": 104,
541 | "metadata": {},
542 | "output_type": "execute_result"
543 | }
544 | ],
545 | "source": [
546 | "nombres_02 = [\"miguel\"]\n",
547 | "nombres_02.append([\"Stefi :P\", \"Ceci (gabriel)\"])\n",
548 | "nombres_02"
549 | ]
550 | },
551 | {
552 | "cell_type": "code",
553 | "execution_count": 105,
554 | "id": "ddca62c7",
555 | "metadata": {},
556 | "outputs": [
557 | {
558 | "ename": "NameError",
559 | "evalue": "name 'nombre' is not defined",
560 | "output_type": "error",
561 | "traceback": [
562 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
563 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
564 | "Cell \u001b[0;32mIn[105], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mnombre\u001b[49m)\n",
565 | "\u001b[0;31mNameError\u001b[0m: name 'nombre' is not defined"
566 | ]
567 | }
568 | ],
569 | "source": [
570 | "print(nombre)"
571 | ]
572 | },
573 | {
574 | "cell_type": "markdown",
575 | "id": "87614150",
576 | "metadata": {},
577 | "source": [
578 | "## Iteraciones\n",
579 | "\n",
580 | "for in\n",
581 | "\n",
582 | "while\n",
583 | "\n",
584 | "list comprehension\n"
585 | ]
586 | },
587 | {
588 | "cell_type": "code",
589 | "execution_count": 115,
590 | "id": "ca213c4d",
591 | "metadata": {},
592 | "outputs": [],
593 | "source": [
594 | "nombres.append(\"fran\")"
595 | ]
596 | },
597 | {
598 | "cell_type": "code",
599 | "execution_count": 118,
600 | "id": "d85d09b3",
601 | "metadata": {},
602 | "outputs": [
603 | {
604 | "name": "stdout",
605 | "output_type": "stream",
606 | "text": [
607 | "Nombre: Miguel\n",
608 | "Nombre: juan pablo\n",
609 | "Nombre: hernan\n",
610 | "Nombre: ale\n",
611 | "Nombre: matias\n",
612 | "Nombre: david\n",
613 | "Nombre: Camila\n",
614 | "Este no pertenece a la lista de estudiantes (?)\n"
615 | ]
616 | }
617 | ],
618 | "source": [
619 | "# Recorre la lista nombres y, para cada elemento crear una variable temporal (nombre)\n",
620 | "# Gargabe collector\n",
621 | "for x in nombres:\n",
622 | " if x == \"fran\":\n",
623 | " print(\"Este no pertenece a la lista de estudiantes (?)\")\n",
624 | " else: \n",
625 | " print(\"Nombre: \", x)"
626 | ]
627 | },
628 | {
629 | "cell_type": "code",
630 | "execution_count": 119,
631 | "id": "dfb7f8ad",
632 | "metadata": {},
633 | "outputs": [
634 | {
635 | "name": "stdout",
636 | "output_type": "stream",
637 | "text": [
638 | "Miguel\n",
639 | "juan pablo\n",
640 | "hernan\n",
641 | "ale\n",
642 | "matias\n",
643 | "david\n",
644 | "Camila\n",
645 | "fran\n"
646 | ]
647 | },
648 | {
649 | "data": {
650 | "text/plain": [
651 | "[None, None, None, None, None, None, None, None]"
652 | ]
653 | },
654 | "execution_count": 119,
655 | "metadata": {},
656 | "output_type": "execute_result"
657 | }
658 | ],
659 | "source": [
660 | "[print(x) for x in nombres]"
661 | ]
662 | },
663 | {
664 | "cell_type": "markdown",
665 | "id": "06310e1d",
666 | "metadata": {},
667 | "source": [
668 | "## Funciones\n",
669 | "\n",
670 | "Una función es un bloque de código que se ejecuta cuando es llamado dentro del programa. A este bloque podemos pasarle parámetros, puede retornar información, etc. \n",
671 | "\n",
672 | "Para crear funciones en python, se usa la palabra **def**\n",
673 | "\n",
674 | "```python\n",
675 | " def mifuncion():\n",
676 | " print(\"hola\")\n",
677 | "```"
678 | ]
679 | },
680 | {
681 | "cell_type": "code",
682 | "execution_count": 144,
683 | "id": "47de3998",
684 | "metadata": {},
685 | "outputs": [
686 | {
687 | "data": {
688 | "text/plain": [
689 | "['Miguel', 'juan pablo', 'hernan', 'ale', 'matias', 'david', 'Camila', 'fran']"
690 | ]
691 | },
692 | "execution_count": 144,
693 | "metadata": {},
694 | "output_type": "execute_result"
695 | }
696 | ],
697 | "source": [
698 | "nombres"
699 | ]
700 | },
701 | {
702 | "cell_type": "code",
703 | "execution_count": 145,
704 | "id": "b40c2c18",
705 | "metadata": {},
706 | "outputs": [
707 | {
708 | "data": {
709 | "text/plain": [
710 | "(8, 7)"
711 | ]
712 | },
713 | "execution_count": 145,
714 | "metadata": {},
715 | "output_type": "execute_result"
716 | }
717 | ],
718 | "source": [
719 | "len(nombres), len(hobbies)"
720 | ]
721 | },
722 | {
723 | "cell_type": "code",
724 | "execution_count": 140,
725 | "id": "34b8a74b",
726 | "metadata": {},
727 | "outputs": [
728 | {
729 | "data": {
730 | "text/plain": [
731 | "range(0, 8)"
732 | ]
733 | },
734 | "execution_count": 140,
735 | "metadata": {},
736 | "output_type": "execute_result"
737 | }
738 | ],
739 | "source": [
740 | "range(len(nombres))"
741 | ]
742 | },
743 | {
744 | "cell_type": "code",
745 | "execution_count": 154,
746 | "id": "145a46fd",
747 | "metadata": {},
748 | "outputs": [
749 | {
750 | "name": "stdout",
751 | "output_type": "stream",
752 | "text": [
753 | "Holis Miguel ✋ me encanta que te guste Guitarra 🎸\n",
754 | "--------------------------------------------------\n",
755 | "Holis juan pablo ✋ me encanta que te guste el 🐍\n",
756 | "--------------------------------------------------\n",
757 | "Holis hernan ✋ me encanta que te guste jugar al basket\n",
758 | "--------------------------------------------------\n",
759 | "Holis ale ✋ me encanta que te guste ir a la playa y tomar 🥂\n",
760 | "--------------------------------------------------\n",
761 | "Holis matias ✋ me encanta que te guste entrenar y jugar juegos de mesas\n",
762 | "--------------------------------------------------\n",
763 | "Holis david ✋ me encanta que te guste vencer a goliat\n",
764 | "--------------------------------------------------\n",
765 | "Holis Camila ✋ me encanta que te guste Entrenar\n",
766 | "--------------------------------------------------\n"
767 | ]
768 | },
769 | {
770 | "ename": "IndexError",
771 | "evalue": "list index out of range",
772 | "output_type": "error",
773 | "traceback": [
774 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
775 | "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)",
776 | "Cell \u001b[0;32mIn[154], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(nombres)):\n\u001b[0;32m----> 2\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mHolis \u001b[39m\u001b[38;5;124m\"\u001b[39m, nombres[i], \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m✋ me encanta que te guste\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[43mhobbies\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m--------------------------------------------------\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
777 | "\u001b[0;31mIndexError\u001b[0m: list index out of range"
778 | ]
779 | }
780 | ],
781 | "source": [
782 | "for i in range(len(nombres)):\n",
783 | " print(\"Holis \", nombres[i], \"✋ me encanta que te guste\", hobbies[i])\n",
784 | " print(\"--------------------------------------------------\")"
785 | ]
786 | },
787 | {
788 | "cell_type": "code",
789 | "execution_count": 155,
790 | "id": "af5be5cf",
791 | "metadata": {},
792 | "outputs": [],
793 | "source": [
794 | "def saludarParticipantes(nombres):\n",
795 | " for i in range(len(nombres)):\n",
796 | " try:\n",
797 | " print(\"Holis \", nombres[i], \"✋ me encanta que te guste\", hobbies[i])\n",
798 | " print(\"--------------------------------------------------\")\n",
799 | " except:\n",
800 | " print(\"Hubo un lio\")"
801 | ]
802 | },
803 | {
804 | "cell_type": "code",
805 | "execution_count": 156,
806 | "id": "bae0023d",
807 | "metadata": {},
808 | "outputs": [
809 | {
810 | "name": "stdout",
811 | "output_type": "stream",
812 | "text": [
813 | "Holis Miguel ✋ me encanta que te guste Guitarra 🎸\n",
814 | "--------------------------------------------------\n",
815 | "Holis juan pablo ✋ me encanta que te guste el 🐍\n",
816 | "--------------------------------------------------\n",
817 | "Holis hernan ✋ me encanta que te guste jugar al basket\n",
818 | "--------------------------------------------------\n",
819 | "Holis ale ✋ me encanta que te guste ir a la playa y tomar 🥂\n",
820 | "--------------------------------------------------\n",
821 | "Holis matias ✋ me encanta que te guste entrenar y jugar juegos de mesas\n",
822 | "--------------------------------------------------\n",
823 | "Holis david ✋ me encanta que te guste vencer a goliat\n",
824 | "--------------------------------------------------\n",
825 | "Holis Camila ✋ me encanta que te guste Entrenar\n",
826 | "--------------------------------------------------\n",
827 | "Hubo un lio\n"
828 | ]
829 | }
830 | ],
831 | "source": [
832 | "saludarParticipantes(nombres)"
833 | ]
834 | },
835 | {
836 | "cell_type": "code",
837 | "execution_count": 157,
838 | "id": "d9318eaa",
839 | "metadata": {},
840 | "outputs": [
841 | {
842 | "data": {
843 | "text/plain": [
844 | "[]"
845 | ]
846 | },
847 | "execution_count": 157,
848 | "metadata": {},
849 | "output_type": "execute_result"
850 | },
851 | {
852 | "data": {
853 | "image/png": "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\n",
854 | "text/plain": [
855 | ""
856 | ]
857 | },
858 | "metadata": {},
859 | "output_type": "display_data"
860 | }
861 | ],
862 | "source": [
863 | "import matplotlib.pyplot as plt\n",
864 | "x = [1,2,3,4,5]\n",
865 | "y = [2,4,5,6,7]\n",
866 | "\n",
867 | "plt.plot(x,y,marker=\"^\",c='r')"
868 | ]
869 | },
870 | {
871 | "cell_type": "code",
872 | "execution_count": 159,
873 | "id": "6feb903a",
874 | "metadata": {},
875 | "outputs": [],
876 | "source": [
877 | "# suma de todos los elementos de una colección dividido el total\n",
878 | "alturas = [1.82,1.59,1.65,1.74,1.6,1.73, 1.94]"
879 | ]
880 | },
881 | {
882 | "cell_type": "code",
883 | "execution_count": 162,
884 | "id": "11edec1e",
885 | "metadata": {},
886 | "outputs": [],
887 | "source": [
888 | "import pandas as pd"
889 | ]
890 | },
891 | {
892 | "cell_type": "code",
893 | "execution_count": 175,
894 | "id": "08a42b3d",
895 | "metadata": {},
896 | "outputs": [],
897 | "source": [
898 | "def calculateMean(array):\n",
899 | " total = 0\n",
900 | " for item in array:\n",
901 | " total += item # acumulador total += item\n",
902 | " \n",
903 | " print(total / len(array))"
904 | ]
905 | },
906 | {
907 | "cell_type": "code",
908 | "execution_count": 176,
909 | "id": "07914fe1",
910 | "metadata": {},
911 | "outputs": [
912 | {
913 | "name": "stdout",
914 | "output_type": "stream",
915 | "text": [
916 | "1.7242857142857144\n"
917 | ]
918 | }
919 | ],
920 | "source": [
921 | "calculateMean(alturas)"
922 | ]
923 | },
924 | {
925 | "cell_type": "code",
926 | "execution_count": null,
927 | "id": "c835ca4c",
928 | "metadata": {},
929 | "outputs": [],
930 | "source": []
931 | }
932 | ],
933 | "metadata": {
934 | "kernelspec": {
935 | "display_name": "Python 3 (ipykernel)",
936 | "language": "python",
937 | "name": "python3"
938 | },
939 | "language_info": {
940 | "codemirror_mode": {
941 | "name": "ipython",
942 | "version": 3
943 | },
944 | "file_extension": ".py",
945 | "mimetype": "text/x-python",
946 | "name": "python",
947 | "nbconvert_exporter": "python",
948 | "pygments_lexer": "ipython3",
949 | "version": "3.10.11"
950 | }
951 | },
952 | "nbformat": 4,
953 | "nbformat_minor": 5
954 | }
955 |
--------------------------------------------------------------------------------
/python/01-python.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "id": "3b5ac858",
6 | "metadata": {},
7 | "source": [
8 | "# Introducción a Python\n",
9 | "\n",
10 | "\n",
11 | "Python es un lenguaje de programación ampliamente utilizado en todo tipo de aplicaciones. Aplicaciones web, desarrollo de aplicaciones de escritorio, scripts y machine learning. Es un lenguaje eficiente y fácil de aprender además de que es multi plataforma (windows, linux, mac os)\n",
12 | "\n",
13 | "- Muchos recursos útiles\n",
14 | "- Comunidad activa muy grande\n",
15 | "- Multiplataforma y multi sistema operativo\n",
16 | "\n",
17 | "> Es un lenguaje orientado a objetos\n",
18 | "\n",
19 | "## ¿Qué puede hacer python?\n",
20 | "\n",
21 | "- Puede ser utilizado como servidor de aplicaciones web con frameworks como django o flask\n",
22 | "- Puede conectarse a sistemas con bases de datos\n",
23 | "- Puede ser utilizado para manipular grandes conjuntos de datos\n",
24 | "- Es muy utilizado en el ámbito de ciencia\n",
25 | "\n",
26 | "Para trabajar con volúmenes grandes de datos miles y cientos de miles de registros, excel se queda corto y para esto surgen herramientas como pandas, numpy que optimizan todo este proceso y podemos crear programas que automaticen el análisis de datos, la limpieza, etc\n",
27 | "\n",
28 | "## Versiones\n",
29 | "\n",
30 | "Hoy día Python se encuentra en su versión 3\n",
31 | "\n",
32 | "## Instalación\n",
33 | "\n",
34 | "Mac & Linux ( viene por default )\n",
35 | "```bash\n",
36 | " brew install python\n",
37 | " apt-get install python\n",
38 | "```\n",
39 | "\n",
40 | "Windows: https://www.python.org/downloads/\n",
41 | "\n",
42 | "Para asegurarnos que tenemos la versión correcta, debemos ir a una terminal y correr el comando de python con el parámetro para ver la versión\n",
43 | "\n",
44 | "```bash\n",
45 | "python3 --version\n",
46 | "\n",
47 | "```\n",
48 | "\n",
49 | "### Jupyter notebook\n",
50 | "\n",
51 | "https://jupyter.org/install\n",
52 | "\n",
53 | "## Visual Studio\n",
54 | "\n",
55 | "https://visualstudio.microsoft.com/es/\n",
56 | "\n",
57 | "## Hola mundo\n",
58 | "\n",
59 | "```python\n",
60 | "print(\"Hola mundo\")\n",
61 | "````\n",
62 | "\n",
63 | "Para correr este comando, debemos ir a una terminal, pararnos en la ubicación de este archivo y ejecutar el siguiente comando\n",
64 | "\n",
65 | "```bash\n",
66 | "python3 scrip.py\n",
67 | "```\n",
68 | "\n",
69 | "## Indentación en Python\n",
70 | "\n",
71 | "Uno de los conceptos más extraños especialmente si venimos de otros lenguajes. La indentación se refiere al espaciado al inicio de una linea de código. Mientras que en otros lenguajes la indentación es pura y exclusivamente para la legibilidad, en Python es importante ya que actua como un bloque de código.\n",
72 | "\n",
73 | "```python\n",
74 | " if 2 == 2:\n",
75 | " print(\"Los números son iguales\")\n",
76 | " \n",
77 | " if 2 == 2:\n",
78 | " print(\"Los números son iguales\")\n",
79 | "```\n",
80 | "\n",
81 | "El último nos generará un tipo de error llamado error de sintaxis dentro de python y esto se debe a la falta de espacios (indentación) entre los elementos. Yo como indentación voy a estar usando la tabulación (4 espacios)\n",
82 | "\n",
83 | "## Variables y tipos de datos\n",
84 | "\n",
85 | "Una variable es un lugar dentro de la memoria de almacenamiento que será utilizado para guardar un valor concreto (después hablaremos más de los tipos de datos)\n",
86 | "\n",
87 | "Comparado con otros lenguajes, python no tiene un tipado estático ni tampoco una palabra reservada para inicializar una variable. Es simplemente cuestión de elegir un buen nombre y guardar el dato que se nos de la gana.\n",
88 | "\n",
89 | "Las variables NO pueden empezar con caracteres extraños (numeros, guines medios, arrobas, etc) ni contener espacios. Se busca que el nombre sea lo más descriptivo posible del dato que va a almacenar, sea pronunciable y fácil de recordar. También es importante que no sea una palabra reservada por el lenguaje de programación (como if, else, def, etc)\n",
90 | "\n",
91 | "```python\n",
92 | "nombre = \"franco\" # string str\n",
93 | "edad = 29 # int\n",
94 | "casado = False # booleano\n",
95 | "```\n",
96 | "\n",
97 | "Vemos que acá estamos inicializando 3 variables distintas, nombre, edad y casado. Y, a cada una de estas le estamos dando distintos valores (que son tipos de datos distintos)\n",
98 | "\n",
99 | "```python\n",
100 | " print(\"Casado: \", casado)\n",
101 | "```\n",
102 | "\n",
103 | "### Casteo de variables\n",
104 | "\n",
105 | "```python\n",
106 | " age = 3\n",
107 | " age_as_string = str(age) # '3'\n",
108 | " age_as_float = float(3) # 3.0\n",
109 | " age_as_int = int(age_as_string) # 3\n",
110 | "```\n",
111 | "\n",
112 | "### Errores al castear\n",
113 | "\n",
114 | "```python\n",
115 | " name = \"fran\"\n",
116 | " age = int(name)\n",
117 | " # invalid literal for int() with base 10\n",
118 | "```\n",
119 | "\n",
120 | "Vemos que esto en general puede suceder al no contar con tipos definidos por eso debemos hacer un buen control de errores en nuestros flujos. Esto se suele manejar con bloques de excepciones que veremos luego. Una forma que tenemos de controlar los tipos es a través de la función nativa type y esto nos arrojará todos los tipos de datos que python soporta\n",
121 | "\n",
122 | "```python\n",
123 | " type(3) # int\n",
124 | " type(\"fran\") # string\n",
125 | " type(3.2) # float\n",
126 | " type(False) # bool\n",
127 | "```\n",
128 | "\n",
129 | "## Comentarios\n",
130 | "\n",
131 | "Los comentarios son muy utiles para hacer referencia a una funcionalidad, a una porción de código o incluso a documentar tareas pendientes.\n",
132 | "\n",
133 | "Los comentarios pueden ser en una linea o tener varias lineas \n",
134 | "\n",
135 | "```python\n",
136 | "# comentario\n",
137 | "\n",
138 | "\"\"\"\n",
139 | "otro \n",
140 | "comentario\n",
141 | "\"\"\"\n",
142 | "```\n",
143 | "\n",
144 | "## Overwriting\n",
145 | "\n",
146 | "Las variables, al ser globales pueden pisarse\n",
147 | "\n",
148 | "```python\n",
149 | " name = \"fran\"\n",
150 | " name = \"hola\"\n",
151 | " print(name)\n",
152 | " # hola\n",
153 | "```"
154 | ]
155 | },
156 | {
157 | "cell_type": "markdown",
158 | "id": "738ce1e6",
159 | "metadata": {},
160 | "source": [
161 | "## Tipos de datos\n",
162 | "\n",
163 | "- String\n",
164 | "- Float\n",
165 | "- Int\n",
166 | "- Boolean\n",
167 | "- Dict\n",
168 | "- List\n",
169 | "- Tuple\n",
170 | "- Range\n",
171 | "- None\n",
172 | "- Set\n",
173 | "- Fronzen set"
174 | ]
175 | },
176 | {
177 | "cell_type": "code",
178 | "execution_count": 5,
179 | "id": "f3666bde",
180 | "metadata": {},
181 | "outputs": [
182 | {
183 | "data": {
184 | "text/plain": [
185 | "str"
186 | ]
187 | },
188 | "execution_count": 5,
189 | "metadata": {},
190 | "output_type": "execute_result"
191 | }
192 | ],
193 | "source": [
194 | "name = \"franco\"\n",
195 | "type(name)\n",
196 | "# print(\"hola\", name)"
197 | ]
198 | },
199 | {
200 | "cell_type": "code",
201 | "execution_count": 6,
202 | "id": "ef7a1355",
203 | "metadata": {},
204 | "outputs": [
205 | {
206 | "data": {
207 | "text/plain": [
208 | "int"
209 | ]
210 | },
211 | "execution_count": 6,
212 | "metadata": {},
213 | "output_type": "execute_result"
214 | }
215 | ],
216 | "source": [
217 | "name = 82\n",
218 | "type(name)"
219 | ]
220 | },
221 | {
222 | "cell_type": "code",
223 | "execution_count": 9,
224 | "id": "e6f1ea56",
225 | "metadata": {},
226 | "outputs": [
227 | {
228 | "data": {
229 | "text/plain": [
230 | "list"
231 | ]
232 | },
233 | "execution_count": 9,
234 | "metadata": {},
235 | "output_type": "execute_result"
236 | }
237 | ],
238 | "source": [
239 | "type(False)\n",
240 | "type([\"franco\",\"ceci\"])"
241 | ]
242 | },
243 | {
244 | "cell_type": "markdown",
245 | "id": "5500f3bb",
246 | "metadata": {},
247 | "source": [
248 | "## Listas\n",
249 | "las listas son usadas para guardar multiples elementos en una sola variable. Built-in del lenguaje\n",
250 | "Son ordenadas, intercambiables y admite duplicadas. Los elementos son indexados y el primer elemento tiene indice 0 "
251 | ]
252 | },
253 | {
254 | "cell_type": "code",
255 | "execution_count": 34,
256 | "id": "1ce4d014",
257 | "metadata": {},
258 | "outputs": [
259 | {
260 | "name": "stdout",
261 | "output_type": "stream",
262 | "text": [
263 | "['franco', 'juan pablo', 'hernan', 'ale', 'matias', 'david']\n",
264 | "['programar y entrenar', 'el 🐍', 'jugar al basket', 'ir a la playa y tomar 🥂', 'entrenar y jugar juegos de mesas', 'vencer a goliat']\n"
265 | ]
266 | },
267 | {
268 | "data": {
269 | "text/plain": [
270 | "6"
271 | ]
272 | },
273 | "execution_count": 34,
274 | "metadata": {},
275 | "output_type": "execute_result"
276 | }
277 | ],
278 | "source": [
279 | "nombres = [\"franco\",\"juan pablo\",\"hernan\",\"ale\",\"matias\",\"david\"]\n",
280 | "hobbies = [\"programar y entrenar\", \"el 🐍\",\"jugar al basket\",\"ir a la playa y tomar 🥂\",\"entrenar y jugar juegos de mesas\",\"vencer a goliat\"]\n",
281 | "print(lista_01)\n",
282 | "print(hobbies)\n",
283 | "type(lista_01)\n",
284 | "len(lista_01)"
285 | ]
286 | },
287 | {
288 | "cell_type": "code",
289 | "execution_count": 20,
290 | "id": "a0b0bca0",
291 | "metadata": {},
292 | "outputs": [
293 | {
294 | "name": "stdout",
295 | "output_type": "stream",
296 | "text": [
297 | "franco tiene por hobbie: programar y entrenar\n"
298 | ]
299 | }
300 | ],
301 | "source": [
302 | "print(nombres[0], \" tiene por hobbie: \", hobbies[0])"
303 | ]
304 | },
305 | {
306 | "cell_type": "code",
307 | "execution_count": 24,
308 | "id": "d7c1d2af",
309 | "metadata": {},
310 | "outputs": [],
311 | "source": [
312 | "# list[-1] ultimo elemento de la lista\n"
313 | ]
314 | },
315 | {
316 | "cell_type": "code",
317 | "execution_count": 26,
318 | "id": "1e630a09",
319 | "metadata": {},
320 | "outputs": [],
321 | "source": [
322 | "length_list = len(nombres)"
323 | ]
324 | },
325 | {
326 | "cell_type": "code",
327 | "execution_count": 28,
328 | "id": "e8cade3d",
329 | "metadata": {},
330 | "outputs": [
331 | {
332 | "name": "stdout",
333 | "output_type": "stream",
334 | "text": [
335 | "El ultimo elemento de la lista nombres es : david\n"
336 | ]
337 | }
338 | ],
339 | "source": [
340 | "print(\"El ultimo elemento de la lista nombres es :\", nombres[length_list - 1])"
341 | ]
342 | },
343 | {
344 | "cell_type": "code",
345 | "execution_count": 29,
346 | "id": "71e7058e",
347 | "metadata": {},
348 | "outputs": [
349 | {
350 | "name": "stdout",
351 | "output_type": "stream",
352 | "text": [
353 | "franco tiene por hobbie: programar y entrenar\n"
354 | ]
355 | }
356 | ],
357 | "source": [
358 | "print(nombres[-6], \" tiene por hobbie: \", hobbies[-6])"
359 | ]
360 | },
361 | {
362 | "cell_type": "code",
363 | "execution_count": 30,
364 | "id": "ad5e2860",
365 | "metadata": {},
366 | "outputs": [],
367 | "source": [
368 | "lista_ensalada = [\"Franco\",29, False, \"Mascotas\",[\"amazonas\",\"perla\"]]"
369 | ]
370 | },
371 | {
372 | "cell_type": "code",
373 | "execution_count": 33,
374 | "id": "4fdd704b",
375 | "metadata": {},
376 | "outputs": [
377 | {
378 | "name": "stdout",
379 | "output_type": "stream",
380 | "text": [
381 | "\n"
382 | ]
383 | }
384 | ],
385 | "source": [
386 | "nombres = list((\"franco\",\"juan pablo\",\"hernan\",\"ale\",\"matias\",\"david\"))\n",
387 | "print(type(nombres))"
388 | ]
389 | },
390 | {
391 | "cell_type": "code",
392 | "execution_count": 54,
393 | "id": "3a17b163",
394 | "metadata": {},
395 | "outputs": [
396 | {
397 | "name": "stdout",
398 | "output_type": "stream",
399 | "text": [
400 | "['juan pablo', 'hernan', 'ale', 'matias', 'david']\n"
401 | ]
402 | }
403 | ],
404 | "source": [
405 | "# start, stop, step (de donde comienzo a recorrer,)\n",
406 | "print(nombres[1:len(nombres):1]) # el stop no se incluye (4) []"
407 | ]
408 | },
409 | {
410 | "cell_type": "code",
411 | "execution_count": 55,
412 | "id": "83cf34ad",
413 | "metadata": {},
414 | "outputs": [
415 | {
416 | "name": "stdout",
417 | "output_type": "stream",
418 | "text": [
419 | "['jugar al basket']\n"
420 | ]
421 | }
422 | ],
423 | "source": [
424 | "print(hobbies[2:5:3])"
425 | ]
426 | },
427 | {
428 | "cell_type": "code",
429 | "execution_count": 59,
430 | "id": "da088a0c",
431 | "metadata": {},
432 | "outputs": [],
433 | "source": [
434 | "nombres[0] = \"Miguel\"\n",
435 | "hobbies[0] = \"Guitarra 🎸\"\n"
436 | ]
437 | },
438 | {
439 | "cell_type": "code",
440 | "execution_count": 62,
441 | "id": "2ffd3d37",
442 | "metadata": {},
443 | "outputs": [
444 | {
445 | "name": "stdout",
446 | "output_type": "stream",
447 | "text": [
448 | "['Miguel', 'juan pablo', 'hernan', 'ale', 'matias', 'david'] ['Guitarra 🎸', 'el 🐍', 'jugar al basket', 'ir a la playa y tomar 🥂', 'entrenar y jugar juegos de mesas', 'vencer a goliat']\n"
449 | ]
450 | }
451 | ],
452 | "source": [
453 | "print(nombres, hobbies)"
454 | ]
455 | },
456 | {
457 | "cell_type": "code",
458 | "execution_count": 65,
459 | "id": "4b2faebb",
460 | "metadata": {},
461 | "outputs": [],
462 | "source": [
463 | "saludos = list((\"holis\",\"aloha\"))"
464 | ]
465 | },
466 | {
467 | "cell_type": "code",
468 | "execution_count": 66,
469 | "id": "c690e067",
470 | "metadata": {},
471 | "outputs": [
472 | {
473 | "data": {
474 | "text/plain": [
475 | "list"
476 | ]
477 | },
478 | "execution_count": 66,
479 | "metadata": {},
480 | "output_type": "execute_result"
481 | }
482 | ],
483 | "source": [
484 | "type(saludos)"
485 | ]
486 | },
487 | {
488 | "cell_type": "code",
489 | "execution_count": 67,
490 | "id": "e8d7213d",
491 | "metadata": {},
492 | "outputs": [],
493 | "source": [
494 | "# nombres[6] = \"Camila\" \n",
495 | "# hobbies[6] = \"Entrenar\"\n",
496 | "nombres.append(\"Camila\") # agrega un elemento al final de la lista\n",
497 | "hobbies.append(\"Entrenar\")"
498 | ]
499 | },
500 | {
501 | "cell_type": "code",
502 | "execution_count": 68,
503 | "id": "4f2c4681",
504 | "metadata": {},
505 | "outputs": [
506 | {
507 | "name": "stdout",
508 | "output_type": "stream",
509 | "text": [
510 | "['Miguel', 'juan pablo', 'hernan', 'ale', 'matias', 'david', 'Camila']\n"
511 | ]
512 | }
513 | ],
514 | "source": [
515 | "print(nombres)"
516 | ]
517 | },
518 | {
519 | "cell_type": "code",
520 | "execution_count": 74,
521 | "id": "e9e4e032",
522 | "metadata": {},
523 | "outputs": [],
524 | "source": [
525 | "try:\n",
526 | " nombres[7] = \"Stefi.\"\n",
527 | " hobbies[7] = \"Leer :P\"\n",
528 | "except:\n",
529 | " pass"
530 | ]
531 | },
532 | {
533 | "cell_type": "code",
534 | "execution_count": 98,
535 | "id": "7c7b6bc5",
536 | "metadata": {},
537 | "outputs": [],
538 | "source": [
539 | "frutas = [\"Papaya 🥔\",\"Mango\",\"Dragon Fruit (la pasionaria)\",\"Granada\"]\n",
540 | "licuados = [\"Banana\",\"Frutilla\",\"Maracuya\",\"Durazno\"]\n",
541 | "frutas_licuados = licuados + frutas\n"
542 | ]
543 | },
544 | {
545 | "cell_type": "code",
546 | "execution_count": null,
547 | "id": "cc05120f",
548 | "metadata": {},
549 | "outputs": [],
550 | "source": []
551 | },
552 | {
553 | "cell_type": "code",
554 | "execution_count": 99,
555 | "id": "05ecd11e",
556 | "metadata": {},
557 | "outputs": [
558 | {
559 | "name": "stdout",
560 | "output_type": "stream",
561 | "text": [
562 | "['Banana', 'Frutilla', 'Maracuya', 'Durazno', 'Papaya 🥔', 'Mango', 'Dragon Fruit (la pasionaria)', 'Granada']\n"
563 | ]
564 | }
565 | ],
566 | "source": [
567 | "print(frutas_licuados)"
568 | ]
569 | },
570 | {
571 | "cell_type": "code",
572 | "execution_count": 100,
573 | "id": "40b7ed01",
574 | "metadata": {},
575 | "outputs": [
576 | {
577 | "name": "stdout",
578 | "output_type": "stream",
579 | "text": [
580 | "['Banana', 'Frutilla', 'Maracuya', 'Durazno']\n"
581 | ]
582 | }
583 | ],
584 | "source": [
585 | "print(licuados)"
586 | ]
587 | },
588 | {
589 | "cell_type": "code",
590 | "execution_count": 103,
591 | "id": "c91c04de",
592 | "metadata": {},
593 | "outputs": [
594 | {
595 | "name": "stdout",
596 | "output_type": "stream",
597 | "text": [
598 | "['Papaya 🥔', 'Mango', 'Dragon Fruit (la pasionaria)', 'Granada', ['Banana', 'Frutilla', 'Maracuya', 'Durazno'], ['Banana', 'Frutilla', 'Maracuya', 'Durazno'], ['Banana', 'Frutilla', 'Maracuya', 'Durazno']]\n"
599 | ]
600 | }
601 | ],
602 | "source": [
603 | "frutas_licuados = frutas.append(licuados)\n",
604 | "# print(frutas)"
605 | ]
606 | },
607 | {
608 | "cell_type": "code",
609 | "execution_count": 91,
610 | "id": "67404d8c",
611 | "metadata": {},
612 | "outputs": [
613 | {
614 | "name": "stdout",
615 | "output_type": "stream",
616 | "text": [
617 | "['Papaya 🥔', 'Mango', 'Dragon Fruit (la pasionaria)', 'Granada']\n"
618 | ]
619 | }
620 | ],
621 | "source": [
622 | "print(frutas)"
623 | ]
624 | },
625 | {
626 | "cell_type": "code",
627 | "execution_count": 93,
628 | "id": "44a96af3",
629 | "metadata": {},
630 | "outputs": [
631 | {
632 | "name": "stdout",
633 | "output_type": "stream",
634 | "text": [
635 | "[1.8, 1.75, 1.82, 1.76, 1.82, 1.83, 1.6]\n"
636 | ]
637 | }
638 | ],
639 | "source": [
640 | "alturas_cancun = [1.8,1.75,1.82]\n",
641 | "alturas_argentina = [1.76,1.82,1.83,1.60]\n",
642 | "alturas = alturas_cancun + alturas_argentina\n",
643 | "print(alturas)"
644 | ]
645 | },
646 | {
647 | "cell_type": "code",
648 | "execution_count": 104,
649 | "id": "56ddc399",
650 | "metadata": {},
651 | "outputs": [
652 | {
653 | "data": {
654 | "text/plain": [
655 | "['miguel', ['Stefi :P', 'Ceci (gabriel)']]"
656 | ]
657 | },
658 | "execution_count": 104,
659 | "metadata": {},
660 | "output_type": "execute_result"
661 | }
662 | ],
663 | "source": [
664 | "nombres_02 = [\"miguel\"]\n",
665 | "nombres_02.append([\"Stefi :P\", \"Ceci (gabriel)\"])\n",
666 | "nombres_02"
667 | ]
668 | },
669 | {
670 | "cell_type": "code",
671 | "execution_count": 105,
672 | "id": "339ca317",
673 | "metadata": {},
674 | "outputs": [
675 | {
676 | "ename": "NameError",
677 | "evalue": "name 'nombre' is not defined",
678 | "output_type": "error",
679 | "traceback": [
680 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
681 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
682 | "Cell \u001b[0;32mIn[105], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mnombre\u001b[49m)\n",
683 | "\u001b[0;31mNameError\u001b[0m: name 'nombre' is not defined"
684 | ]
685 | }
686 | ],
687 | "source": [
688 | "print(nombre)"
689 | ]
690 | },
691 | {
692 | "cell_type": "markdown",
693 | "id": "569854ad",
694 | "metadata": {},
695 | "source": [
696 | "## Iteraciones\n",
697 | "\n",
698 | "for in\n",
699 | "\n",
700 | "while\n",
701 | "\n",
702 | "list comprehension\n"
703 | ]
704 | },
705 | {
706 | "cell_type": "code",
707 | "execution_count": 115,
708 | "id": "2e478eec",
709 | "metadata": {},
710 | "outputs": [],
711 | "source": [
712 | "nombres.append(\"fran\")"
713 | ]
714 | },
715 | {
716 | "cell_type": "code",
717 | "execution_count": 118,
718 | "id": "51b46713",
719 | "metadata": {},
720 | "outputs": [
721 | {
722 | "name": "stdout",
723 | "output_type": "stream",
724 | "text": [
725 | "Nombre: Miguel\n",
726 | "Nombre: juan pablo\n",
727 | "Nombre: hernan\n",
728 | "Nombre: ale\n",
729 | "Nombre: matias\n",
730 | "Nombre: david\n",
731 | "Nombre: Camila\n",
732 | "Este no pertenece a la lista de estudiantes (?)\n"
733 | ]
734 | }
735 | ],
736 | "source": [
737 | "# Recorre la lista nombres y, para cada elemento crear una variable temporal (nombre)\n",
738 | "# Gargabe collector\n",
739 | "for x in nombres:\n",
740 | " if x == \"fran\":\n",
741 | " print(\"Este no pertenece a la lista de estudiantes (?)\")\n",
742 | " else: \n",
743 | " print(\"Nombre: \", x)"
744 | ]
745 | },
746 | {
747 | "cell_type": "code",
748 | "execution_count": 119,
749 | "id": "473e0659",
750 | "metadata": {},
751 | "outputs": [
752 | {
753 | "name": "stdout",
754 | "output_type": "stream",
755 | "text": [
756 | "Miguel\n",
757 | "juan pablo\n",
758 | "hernan\n",
759 | "ale\n",
760 | "matias\n",
761 | "david\n",
762 | "Camila\n",
763 | "fran\n"
764 | ]
765 | },
766 | {
767 | "data": {
768 | "text/plain": [
769 | "[None, None, None, None, None, None, None, None]"
770 | ]
771 | },
772 | "execution_count": 119,
773 | "metadata": {},
774 | "output_type": "execute_result"
775 | }
776 | ],
777 | "source": [
778 | "[print(x) for x in nombres]"
779 | ]
780 | },
781 | {
782 | "cell_type": "markdown",
783 | "id": "b38bbf9d",
784 | "metadata": {},
785 | "source": [
786 | "## Funciones\n",
787 | "\n",
788 | "Una función es un bloque de código que se ejecuta cuando es llamado dentro del programa. A este bloque podemos pasarle parámetros, puede retornar información, etc. \n",
789 | "\n",
790 | "Para crear funciones en python, se usa la palabra **def**\n",
791 | "\n",
792 | "```python\n",
793 | " def mifuncion():\n",
794 | " print(\"hola\")\n",
795 | "```"
796 | ]
797 | },
798 | {
799 | "cell_type": "code",
800 | "execution_count": 144,
801 | "id": "13ece45f",
802 | "metadata": {},
803 | "outputs": [
804 | {
805 | "data": {
806 | "text/plain": [
807 | "['Miguel', 'juan pablo', 'hernan', 'ale', 'matias', 'david', 'Camila', 'fran']"
808 | ]
809 | },
810 | "execution_count": 144,
811 | "metadata": {},
812 | "output_type": "execute_result"
813 | }
814 | ],
815 | "source": [
816 | "nombres"
817 | ]
818 | },
819 | {
820 | "cell_type": "code",
821 | "execution_count": 145,
822 | "id": "aad6d017",
823 | "metadata": {},
824 | "outputs": [
825 | {
826 | "data": {
827 | "text/plain": [
828 | "(8, 7)"
829 | ]
830 | },
831 | "execution_count": 145,
832 | "metadata": {},
833 | "output_type": "execute_result"
834 | }
835 | ],
836 | "source": [
837 | "len(nombres), len(hobbies)"
838 | ]
839 | },
840 | {
841 | "cell_type": "code",
842 | "execution_count": 140,
843 | "id": "18f09276",
844 | "metadata": {},
845 | "outputs": [
846 | {
847 | "data": {
848 | "text/plain": [
849 | "range(0, 8)"
850 | ]
851 | },
852 | "execution_count": 140,
853 | "metadata": {},
854 | "output_type": "execute_result"
855 | }
856 | ],
857 | "source": [
858 | "range(len(nombres))"
859 | ]
860 | },
861 | {
862 | "cell_type": "code",
863 | "execution_count": 154,
864 | "id": "181bfe24",
865 | "metadata": {},
866 | "outputs": [
867 | {
868 | "name": "stdout",
869 | "output_type": "stream",
870 | "text": [
871 | "Holis Miguel ✋ me encanta que te guste Guitarra 🎸\n",
872 | "--------------------------------------------------\n",
873 | "Holis juan pablo ✋ me encanta que te guste el 🐍\n",
874 | "--------------------------------------------------\n",
875 | "Holis hernan ✋ me encanta que te guste jugar al basket\n",
876 | "--------------------------------------------------\n",
877 | "Holis ale ✋ me encanta que te guste ir a la playa y tomar 🥂\n",
878 | "--------------------------------------------------\n",
879 | "Holis matias ✋ me encanta que te guste entrenar y jugar juegos de mesas\n",
880 | "--------------------------------------------------\n",
881 | "Holis david ✋ me encanta que te guste vencer a goliat\n",
882 | "--------------------------------------------------\n",
883 | "Holis Camila ✋ me encanta que te guste Entrenar\n",
884 | "--------------------------------------------------\n"
885 | ]
886 | },
887 | {
888 | "ename": "IndexError",
889 | "evalue": "list index out of range",
890 | "output_type": "error",
891 | "traceback": [
892 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
893 | "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)",
894 | "Cell \u001b[0;32mIn[154], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(nombres)):\n\u001b[0;32m----> 2\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mHolis \u001b[39m\u001b[38;5;124m\"\u001b[39m, nombres[i], \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m✋ me encanta que te guste\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[43mhobbies\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m--------------------------------------------------\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
895 | "\u001b[0;31mIndexError\u001b[0m: list index out of range"
896 | ]
897 | }
898 | ],
899 | "source": [
900 | "for i in range(len(nombres)):\n",
901 | " print(\"Holis \", nombres[i], \"✋ me encanta que te guste\", hobbies[i])\n",
902 | " print(\"--------------------------------------------------\")"
903 | ]
904 | },
905 | {
906 | "cell_type": "code",
907 | "execution_count": 155,
908 | "id": "95fd28ca",
909 | "metadata": {},
910 | "outputs": [],
911 | "source": [
912 | "def saludarParticipantes(nombres):\n",
913 | " for i in range(len(nombres)):\n",
914 | " try:\n",
915 | " print(\"Holis \", nombres[i], \"✋ me encanta que te guste\", hobbies[i])\n",
916 | " print(\"--------------------------------------------------\")\n",
917 | " except:\n",
918 | " print(\"Hubo un lio\")"
919 | ]
920 | },
921 | {
922 | "cell_type": "code",
923 | "execution_count": 156,
924 | "id": "d04ba022",
925 | "metadata": {},
926 | "outputs": [
927 | {
928 | "name": "stdout",
929 | "output_type": "stream",
930 | "text": [
931 | "Holis Miguel ✋ me encanta que te guste Guitarra 🎸\n",
932 | "--------------------------------------------------\n",
933 | "Holis juan pablo ✋ me encanta que te guste el 🐍\n",
934 | "--------------------------------------------------\n",
935 | "Holis hernan ✋ me encanta que te guste jugar al basket\n",
936 | "--------------------------------------------------\n",
937 | "Holis ale ✋ me encanta que te guste ir a la playa y tomar 🥂\n",
938 | "--------------------------------------------------\n",
939 | "Holis matias ✋ me encanta que te guste entrenar y jugar juegos de mesas\n",
940 | "--------------------------------------------------\n",
941 | "Holis david ✋ me encanta que te guste vencer a goliat\n",
942 | "--------------------------------------------------\n",
943 | "Holis Camila ✋ me encanta que te guste Entrenar\n",
944 | "--------------------------------------------------\n",
945 | "Hubo un lio\n"
946 | ]
947 | }
948 | ],
949 | "source": [
950 | "saludarParticipantes(nombres)"
951 | ]
952 | },
953 | {
954 | "cell_type": "code",
955 | "execution_count": 157,
956 | "id": "04bfa47b",
957 | "metadata": {},
958 | "outputs": [
959 | {
960 | "data": {
961 | "text/plain": [
962 | "[]"
963 | ]
964 | },
965 | "execution_count": 157,
966 | "metadata": {},
967 | "output_type": "execute_result"
968 | },
969 | {
970 | "data": {
971 | "image/png": "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\n",
972 | "text/plain": [
973 | ""
974 | ]
975 | },
976 | "metadata": {},
977 | "output_type": "display_data"
978 | }
979 | ],
980 | "source": [
981 | "import matplotlib.pyplot as plt\n",
982 | "x = [1,2,3,4,5]\n",
983 | "y = [2,4,5,6,7]\n",
984 | "\n",
985 | "plt.plot(x,y,marker=\"^\",c='r')"
986 | ]
987 | },
988 | {
989 | "cell_type": "code",
990 | "execution_count": 159,
991 | "id": "cf3d811a",
992 | "metadata": {},
993 | "outputs": [],
994 | "source": [
995 | "# suma de todos los elementos de una colección dividido el total\n",
996 | "alturas = [1.82,1.59,1.65,1.74,1.6,1.73, 1.94]"
997 | ]
998 | },
999 | {
1000 | "cell_type": "code",
1001 | "execution_count": 162,
1002 | "id": "091e869d",
1003 | "metadata": {},
1004 | "outputs": [],
1005 | "source": [
1006 | "import pandas as pd"
1007 | ]
1008 | },
1009 | {
1010 | "cell_type": "code",
1011 | "execution_count": 175,
1012 | "id": "33f1e84a",
1013 | "metadata": {},
1014 | "outputs": [],
1015 | "source": [
1016 | "def calculateMean(array):\n",
1017 | " total = 0\n",
1018 | " for item in array:\n",
1019 | " total += item # acumulador total += item\n",
1020 | " \n",
1021 | " print(total / len(array))"
1022 | ]
1023 | },
1024 | {
1025 | "cell_type": "code",
1026 | "execution_count": 176,
1027 | "id": "31ad43ee",
1028 | "metadata": {},
1029 | "outputs": [
1030 | {
1031 | "name": "stdout",
1032 | "output_type": "stream",
1033 | "text": [
1034 | "1.7242857142857144\n"
1035 | ]
1036 | }
1037 | ],
1038 | "source": [
1039 | "calculateMean(alturas)"
1040 | ]
1041 | },
1042 | {
1043 | "cell_type": "code",
1044 | "execution_count": null,
1045 | "id": "faa14225",
1046 | "metadata": {},
1047 | "outputs": [],
1048 | "source": []
1049 | }
1050 | ],
1051 | "metadata": {
1052 | "kernelspec": {
1053 | "display_name": "Python 3 (ipykernel)",
1054 | "language": "python",
1055 | "name": "python3"
1056 | },
1057 | "language_info": {
1058 | "codemirror_mode": {
1059 | "name": "ipython",
1060 | "version": 3
1061 | },
1062 | "file_extension": ".py",
1063 | "mimetype": "text/x-python",
1064 | "name": "python",
1065 | "nbconvert_exporter": "python",
1066 | "pygments_lexer": "ipython3",
1067 | "version": "3.10.11"
1068 | }
1069 | },
1070 | "nbformat": 4,
1071 | "nbformat_minor": 5
1072 | }
1073 |
--------------------------------------------------------------------------------