{ "cells": [ { "cell_type": "markdown", "source": [ "
\n", " \n", "
" ], "metadata": { "id": "0YXVV35xCv6f" } }, { "cell_type": "markdown", "metadata": { "id": "DeMPyBgat6sn" }, "source": [ "# Inside Data I: Introduction to Python | BAUC3M x AISC\n", "Este notebook corresponde con la 1ª sesión de la serie de talleres prácticos organizada por AISC Madrid y BAUC3M.\n", "El objetivo es familiarizarnos con el entorno de Google Colab y los principios básicos de la programación en Python.\n", "\n", "En este cuaderno se tratan los siguientes conceptos fundamentales:\n", "- Celdas\n", "- Variables\n", "- Operaciones\n", "- Condicionales\n", "- Bucles\n", "- Funciones\n" ] }, { "cell_type": "markdown", "metadata": { "id": "y-_GJXKkxHUI" }, "source": [ "# 1. Celdas\n", "Este tipo de documento, identificado con la terminación **.ipynb**, se conoce como cuaderno / jupyter notebook.\n", "El contenido se divide en unidades independientes conocidas como celdas, y pueden ser de 2 tipos\n", "1. Markdown (texto)\n", "2. Código" ] }, { "cell_type": "markdown", "metadata": { "id": "6wGnjY_8xx-c" }, "source": [ "## Markdown\n", "Estas celdas sirven para insertar texto o imágenes, y se utiliza para añadir información que complemente nuestro código.\n", "\n", "Un ejemplo es la celda donde se encuentra escrito este texto." ] }, { "cell_type": "markdown", "metadata": { "id": "t4uU2ExuyZZR" }, "source": [ "## Código\n", "Las celdas de código tienen código de Python y se ejecutan de manera independiente y completa.\n", "Cada celda se puede ejecutar con el botón en su parte superior izquierda o al seleccionarla y hacer **Ctrl + Enter**.\n", "\n", "La siguiente celda es un ejemplo, donde declaramos una variable." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "AwMBKsZ0xiBM" }, "outputs": [], "source": [ "name = \"María\"" ] }, { "cell_type": "markdown", "metadata": { "id": "54-snNXXzlit" }, "source": [ "# 2. Variables\n" ] }, { "cell_type": "markdown", "metadata": { "id": "80327983" }, "source": [ "En Python, una **variable** es un nombre que se usa para almacenar un valor en la memoria del ordenador.\n", "\n", "Es como una etiqueta que le ponemos a un dato. Antes hemos declarado la variable `name`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "dhuqlqei0rd4" }, "outputs": [], "source": [ "name" ] }, { "cell_type": "markdown", "metadata": { "id": "Zfk0L2VN1Sox" }, "source": [ "Existen varios tipos de datos que podemos guardar en una variable, en la siguientes celdas veremos los principales." ] }, { "cell_type": "markdown", "metadata": { "id": "BkkQ5KyF1qZq" }, "source": [ "### 1. String\n", "Se trata de texto, y siempre debe ir entre comillas (simples o dobles)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "lAWiPS_91k1s" }, "outputs": [], "source": [ "texto1 = \"123 Probando\"\n", "otro_texto = 'Hello World!'" ] }, { "cell_type": "code", "source": [ "print(texto1, otro_texto)" ], "metadata": { "id": "QnOPvxaR3sHc" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "_S5wI9XF2SC0" }, "source": [ "### 2. Integer\n", "Se trata de números enteros." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "wwV3TaOs2WfD" }, "outputs": [], "source": [ "days = 365\n", "weeks =67" ] }, { "cell_type": "markdown", "metadata": { "id": "iGRvnhYl2vRz" }, "source": [ "### 3. Float\n", "Se trata de números decimales" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "aVP7-Ddu2uw8" }, "outputs": [], "source": [ "final_grade = 4.99\n", "pi = 3.1415" ] }, { "cell_type": "markdown", "metadata": { "id": "vpzk9h4F3BD5" }, "source": [ "### 4. Boolean\n", "Dos valores posibles: **True/False** (Python acepta también para True simplemente 1 y para False 0)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "nRRElsBE3Nib" }, "outputs": [], "source": [ "passed_the_exam = False\n", "see_you_in_june = True" ] }, { "cell_type": "code", "source": [ "print(passed_the_exam == see_you_in_june)" ], "metadata": { "id": "ioc_6UgC4KxU" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "print(days > weeks)" ], "metadata": { "id": "Y1lv6Xs635uA" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "print(True == 1)" ], "metadata": { "id": "DvcGhvv-393C" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "HuAjg2LHVDH4" }, "source": [ "### 5. Lista\n", "Colección flexible y ordenada de datos." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "BXSewbb6VDH4" }, "outputs": [], "source": [ "lista = [1,2,3,4,5,6,7,8,9,10]\n", "lista_2 = [\"Hugo\", \"Paco\", \"Luis\"]\n", "lista_3 = [\"Hugo\", 1, 3.14, True, lista_2]\n" ] }, { "cell_type": "code", "source": [ "print(lista_3)" ], "metadata": { "id": "eJ2lyRzo4gMF" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "💡" ], "metadata": { "id": "Wvm7dsFB463W" } }, { "cell_type": "code", "source": [ "row_1 = [3,5,6]\n", "row_2 = [3,5,6]\n", "\n", "matrix = [row_1, row_2]" ], "metadata": { "id": "K-uPp2Vi4naX" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "print(matrix)" ], "metadata": { "id": "h6cxcKj641jI" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "ksaegDSqVDH5" }, "source": [ "Operaciones comunes:\n", "\n", "- `len(lista)` : longitud de la lista\n", "- `max(lista)` : máximo valor de la lista\n", "- `min(lista)` : mínimo valor de la lista\n", "- `sum(lista)` : suma de los valores de la lista" ] }, { "cell_type": "markdown", "metadata": { "id": "zzklvP_pVDH5" }, "source": [ "### 6. Diccionarios" ] }, { "cell_type": "markdown", "source": [ "Colección de datos. Dualidad clave (string) y valor (cualquier variable).\n", "- Clave (Key): El nombre de lo que buscas (ej. \"Apple\").\n", "\n", "- Valor (Value): La información asociada (ej. el precio de su acción: 180)." ], "metadata": { "id": "liWQDbDN-_qL" } }, { "cell_type": "code", "source": [ "# Crear diccionario (usamos llaves {})\n", "cartera = {\"AAPL\": 185.20,\n", " \"MSFT\": 405.10,\n", " \"GOOG\": 140.50}\n", "\n", "# Consultar un valor por clave (usamos corchetes [])\n", "precio_apple = cartera[\"AAPL\"]\n", "print(\"El precio de Apple es:\", precio_apple)" ], "metadata": { "id": "RyARawR8_Ypv" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "Operaciones comunes:\n", " - Añadir o Modificar: `cartera[\"TSLA\"] = 175.00` (Si no existe lo crea, si existe lo actualiza).\n", "\n", "- Borrar: `del cartera[\"GOOG\"]`\n", "\n", "- Saber si algo está: `\"AAPL\" in cartera `(Devuelve True/False)." ], "metadata": { "id": "1rHS05syATWJ" } }, { "cell_type": "markdown", "source": [ "# 3. Operaciones" ], "metadata": { "id": "zcvx7MhX593Q" } }, { "cell_type": "markdown", "metadata": { "id": "saA485u27IvY" }, "source": [ "## Operaciones numéricas simples\n", "Para cada tipo de variable, se pueden hacer una serie de operaciones. A continuación veremos las más fundamentales, centrándonos en operaciones numéricas." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "MqYaSlN_78NV" }, "outputs": [], "source": [ "a = 4\n", "b = 2" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "kNSitnZ38acT" }, "outputs": [], "source": [ "print(a + b)\n", "print(a - b)\n", "print(a * b)\n", "print(a / b)\n", "print(a // b) #División entera" ] }, { "cell_type": "markdown", "metadata": { "id": "T4sZi4fmAFD0" }, "source": [ "# Condicionales\n", "Uno de los recursos más importantes en Python. Utilizamos una condición (True/False) de la que depende el código que ejecutaremos.\n", "\n", "Para ello utilizamos las palabras clave:\n", "- if\n", "- elif\n", "- else" ] }, { "cell_type": "code", "source": [ "asset_1 = 107.89\n", "asset_2 = 84.9" ], "metadata": { "id": "knJ0sDoiicgM" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "xwZpe_kQVDH5" }, "outputs": [], "source": [ "if asset_1 > asset_2:\n", " print(\"Asset 1 is greater than Asset 2\")\n", "elif asset_1 == asset_2:\n", " print(\"Asset 1 is equal to Asset 2\")\n", "else:\n", " print(\"Asset 2 is greater than Asset 1\")\n" ] }, { "cell_type": "markdown", "metadata": { "id": "iwNenXiGVDH6" }, "source": [ "# Bucles" ] }, { "cell_type": "markdown", "metadata": { "id": "-EhDkK2_VDH6" }, "source": [ "Tipos de bucle:\n", "\n", "1. Bucle for: Se usa cuando sabes exactamente cuántas veces quieres repetir una acción.\n", "\n", "2. Bucle while: Se usa cuando quieres que la acción continúe mientras se cumpla una condición." ] }, { "cell_type": "code", "source": [ "# Bucle for\n", "i = 0\n", "for i in range(10):\n", " print(i)" ], "metadata": { "id": "-JoVplLVjvI9" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Bucle for\n", "facturas = [100, 250, 450]\n", "\n", "for cantidad in facturas:\n", " total = cantidad * 1.21\n", " print(\"Total con IVA\", total)" ], "metadata": { "id": "7jIVidoTkEaI" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "#Bucle while\n", "beneficio = 0\n", "meta = 1000\n", "\n", "while beneficio < meta:\n", " beneficio += 200 # Sumamos 200 en cada ciclo\n", " print(beneficio)\n", "\n", "print(\"¡Meta alcanzada!\")" ], "metadata": { "id": "5q7I4zzqkJLZ" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "# Funciones\n", "\n", "\n", "```\n", "def nombre_función (argumento):\n", " instrucciones\n", " return variable\n", "```\n", "\n", "\n" ], "metadata": { "id": "SOe9VIhXlLVN" } }, { "cell_type": "code", "source": [ "def calcular_interes(capital, tasa, tiempo):\n", " interes = capital * tasa * tiempo\n", " return interes" ], "metadata": { "id": "ynyABn4xlSuh" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "resultado = calcular_interes(10000, 0.05, 2)\n", "\n", "print(\"El interés generado es:\", resultado)" ], "metadata": { "id": "Rk5HYQiglV8r" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "MIVXEg4SVDH6" }, "source": [ "# Práctica" ] }, { "cell_type": "markdown", "source": [ "## Ejemplo ficticio" ], "metadata": { "id": "H7s0fGB8Bpbz" } }, { "cell_type": "markdown", "metadata": { "id": "tr5AAwtbVDH6" }, "source": [ "Tenemos dos inversores: Ana y Juan con las siguientes carteras (USD)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "CBzRbh8bVDH6" }, "outputs": [], "source": [ "cartera_ana = [1500, 2300, 1200, 4500]\n", "cartera_juan = [2800, 1100, 3900, 1500]" ] }, { "cell_type": "markdown", "metadata": { "id": "L3quucehVDH6" }, "source": [ "Declara 2 variables nuevas que sean la suma de cada cartera e imprime su valor.\n", "\n", "Tip: funciones necesarias `sum()` y `print()`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "dWfIKB9ZVDH6" }, "outputs": [], "source": [ "# Tu código aquí" ] }, { "cell_type": "markdown", "metadata": { "id": "Yg-FY1cWVDH9" }, "source": [ "Compara la suma de cada cartera. Si la de Juan es mejor imprime \"Juan gana\", si la de Ana es mejor imprime \"Ana gana\" y si son iguales imprime \"Empate\".\n", "\n", "Tip: funciones necesarias `print()`" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "FzuYGz6hVDH9" }, "outputs": [], "source": [ "# Tu código aquí" ] }, { "cell_type": "markdown", "source": [ "Level I: ¿Cuál es el valor promedio de sus activos?\n", "\n", "Tip: uso for loop y función `len()`" ], "metadata": { "id": "oW7TbMagBNb1" } }, { "cell_type": "code", "source": [ "# Tu código aquí" ], "metadata": { "id": "QyK9HWkjBUH8" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "Level II: ¿Cuál es el valor promedio de sus activos?" ], "metadata": { "id": "nldHqIiGZEY8" } }, { "cell_type": "code", "source": [ "# Tu código aquí" ], "metadata": { "id": "wEgIFq6TZHkj" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "n3MbZU_iVDH9" }, "source": [ "Level III: ¿Cuál es el valor promedio de sus activos?\n", "\n", "Tip: funciones necesarias `mean()` del módulo numpy (np.mean())" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "tPKDXG98VDH9" }, "outputs": [], "source": [ "import numpy as np\n", "# Tu código aquí" ] }, { "cell_type": "markdown", "metadata": { "id": "UWVix_blVDH9" }, "source": [ "## Ejemplo más realista: Yahoo Finance" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "JwFmSkm3VDH9" }, "outputs": [], "source": [ "import yfinance as yf" ] }, { "cell_type": "markdown", "source": [ "### Data handling" ], "metadata": { "id": "4gWjLeQ1BcmC" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "UR2P4jGcVDH9" }, "outputs": [], "source": [ "# 1. Definimos las carteras (número de acciones asociado con cada activo)\n", "cartera_ana = {\"AAPL\": 10, \"GOOGL\": 5, \"TSLA\": 2, \"BTC-USD\": 0.05}\n", "cartera_juan = {\"MSFT\": 8, \"AMZN\": 12, \"NVDA\": 15, \"ETH-USD\": 1.5}\n", "\n", "# 2. Definimos la función para obtener el valor de la cartera\n", "\n", "def obtener_valor_cartera(cartera):\n", " datos_actuales = {}\n", " total = 0\n", "\n", " # Descargamos los precios reales uno por uno\n", " for ticker, cantidad in cartera.items():\n", " stock = yf.Ticker(ticker)\n", " # Obtenemos el último precio de cierre\n", " precio = stock.history(period=\"1d\")['Close'].iloc[-1]\n", " valor_activo = precio * cantidad\n", " datos_actuales[ticker] = valor_activo\n", " total += valor_activo\n", "\n", " return total, datos_actuales\n", "\n", "total_ana, desglose_ana = obtener_valor_cartera(cartera_ana)\n", "total_juan, desglose_juan = obtener_valor_cartera(cartera_juan)\n", "\n", "print(\"Valor de Ana:\", total_ana)\n", "print(desglose_ana)\n", "print(\"Valor de Juan:\", total_juan)\n", "print(desglose_juan)" ] }, { "cell_type": "markdown", "source": [ "### Data visualization" ], "metadata": { "id": "tHeWNG21BYOL" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "aXtr4xzaVDH-" }, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "rS_hCZX0VDH-" }, "outputs": [], "source": [ "# Configuramos la figura con dos gráficos\n", "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))\n", "\n", "# Gráfico 1: Comparativa de Totales (Bar Chart)\n", "nombres = ['Ana', 'Juan']\n", "totales = [total_ana, total_juan]\n", "ax1.bar(nombres, totales, color=['#4CAF50', '#2196F3'])\n", "ax1.set_title('Valor Total de la Cartera (USD)')\n", "ax1.set_ylabel('Dólares ($)')\n", "\n", "# Gráfico 2: Distribución de la cartera de Ana (Pie Chart)\n", "ax2.pie(desglose_ana.values(), labels=desglose_ana.keys(), autopct='%1.1f%%', startangle=140)\n", "ax2.set_title('Distribución de Activos (Ana)')\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "source": [ "Notebook creado por:\n", "Hugo Centeno Sanz y Lauren Gallego Ropero" ], "metadata": { "id": "WcRaDjMACY09" } } ], "metadata": { "colab": { "provenance": [], "toc_visible": true }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 0 }