miércoles, 29 de julio de 2026

Hoja resumen numpy

 🔢 NumPy es hasta 100x más rápido que las listas de Python.


Y sin embargo, muchos desarrolladores lo siguen ignorando.


He preparado una 𝗛𝗼𝗷𝗮 𝗱𝗲 𝗥𝗲𝗳𝗲𝗿𝗲𝗻𝗰𝗶𝗮 𝗥á𝗽𝗶𝗱𝗮 𝗱𝗲 𝗡𝘂𝗺𝗣𝘆 completa y gratuita.


𝟭𝟱 𝘀𝗲𝗰𝗰𝗶𝗼𝗻𝗲𝘀 𝗲𝗻 𝘂𝗻 𝘀𝗼𝗹𝗼 𝗣𝗗𝗙:


▸ Creación de arrays — zeros, ones, arange, linspace

▸ Atributos — shape, ndim, dtype, size, T

▸ Indexación avanzada — booleana y fancy indexing

▸ Operaciones vectorizadas y ufuncs

▸ Estadística — mean, std, percentiles, corrcoef

▸ Manipulación — reshape, flatten, vstack, hstack

▸ Álgebra lineal — solve, inv, eig, svd, norm

▸ Broadcasting — reglas y ejemplos visuales

▸ Arrays aleatorios — API clásica y default_rng

▸ Entrada/Salida — .npy, .npz, CSV

▸ Rendimiento — vectorización, copy vs view, dtype


📎https://www.linkedin.com/feed/update/urn:li:activity:7488297341653958656?utm_source=share&utm_medium=member_desktop&rcm=ACoAAB2v4FUBJ-OFSi3fsZmOqhtJf-BXPixworY

Día 30 — Cierre: un mes completo de Python, de cero a backend funcional

Treinta días después de empezar con el concepto más básico —qué es una variable—, el recorrido ha cubierto fundamentos, estructuras de datos, programación orientada a objetos, manejo de errores, librerías de análisis de datos y desarrollo de APIs reales. Este último ejemplo combina varias de las herramientas vistas a lo largo del mes en un único script funcional.

Este es solo el punto de partida: los siguientes pasos naturales incluyen profundizar en frameworks como Django, aprender despliegue en la nube, o especializarse en una rama concreta como ciencia de datos, automatización o desarrollo backend.

Código de ejemplo:

import pandas as pd import json from fastapi import FastAPI from datetime import datetime app = FastAPI() @app.get("/informe") def generar_informe(): df = pd.read_csv("datos.csv") return { "fecha": datetime.now().isoformat(), "registros": len(df), "total": round(df["importe"].sum(), 2) } # Ejecutar con: uvicorn main:app --reload




martes, 28 de julio de 2026

Hoja resumen de Python

Hace unos años no sabía qué era una variable.

El camino no fue fácil, pero sí fue más sencillo cuando tuve los conceptos clave bien organizados.

He creado esta 𝗛𝗼𝗷𝗮 𝗱𝗲 𝗥𝗲𝗳𝗲𝗿𝗲𝗻𝗰𝗶𝗮 𝗥á𝗽𝗶𝗱𝗮 𝗱𝗲 𝗣𝘆𝘁𝗵𝗼𝗻 𝗴𝗿𝗮𝘁𝘂𝗶𝘁𝗮 —https://www.linkedin.com/feed/update/urn:li:activity:7487728949066792961?utm_source=share&utm_medium=member_desktop&rcm=ACoAAB2v4FUBJ-OFSi3fsZmOqhtJf-BXPixworY

📄 ¿Qué encontrarás dentro?

✅ Variables, tipos y operadores
✅ Estructuras de control y datos
✅ Funciones, clases y POO
✅ Decoradores y generadores
✅ Archivos, JSON y manejo de errores
✅ Librerías clave: Pandas, NumPy, FastAPI, SQLite
✅ Buenas prácticas y trucos Python

Todo con ejemplos de código reales. En español. Sin rodeos.

🎯 Va dirigido a:
→ Personas que quieren aprender Python desde cero
→ Profesionales que vienen de otras áreas (como yo, desde la contabilidad)
→ Desarrolladores que quieren tener todo a mano

📎 La tienes en el enlace anterior de esta publicación. Descárgala, guárdala y compártela con quien la necesite.

Y si quieres más contenido como este, sígueme aquí y en 👉 @josecodetech (YouTube • Instagram • Udemy)

Donde enseño que programar no es solo para ingenieros. Es para quien quiera aprender.

¿Eres de los que aprenden con hojas de referencia o prefieres ir directo al código? 👇

#Python #AprendePython #DataScience #ProgramaciónDesdeCero #DesarrolloSoftware #josecodetech #RecursosGratis #FastAPI #Pandas

Día 29 — Testing: asegurando que tu código funciona correctamente

Escribir tests automatizados es lo que diferencia el código de producción del código amateur. Un test verifica de forma automática que una función o clase se comporta exactamente como se espera, permitiendo detectar errores antes de que lleguen a producción.

El módulo unittest, incluido en la librería estándar, permite definir clases de pruebas con métodos que comienzan por test_, dentro de los cuales se usan aserciones como assertEqual() para comprobar que el resultado obtenido coincide con el esperado. La alternativa externa más popular es pytest, más concisa y con un ecosistema de extensiones muy amplio.

Código de ejemplo:

import unittest def suma(a, b): return a + b class TestSuma(unittest.TestCase): def test_numeros_positivos(self): self.assertEqual(suma(2, 3), 5) def test_numeros_negativos(self): self.assertEqual(suma(-1, -1), -2) if __name__ == "__main__": unittest.main()




lunes, 27 de julio de 2026

Día 28 — Generadores: procesando datos sin agotar la memoria

Un generador es una función especial que utiliza la palabra clave yield en lugar de return, lo que le permite producir valores uno a uno bajo demanda, en lugar de calcular y almacenar todos los resultados de golpe en memoria.

Esta característica los hace ideales para procesar archivos muy grandes, secuencias potencialmente infinitas o flujos de datos continuos, ya que el consumo de memoria se mantiene constante independientemente del volumen de datos procesados.

Código de ejemplo:

def fibonacci(): a, b = 0, 1 while True: yield a a, b = b, a + b generador = fibonacci() for _ in range(8): print(next(generador), end=" ") # 0 1 1 2 3 5 8 13 # Generator expression pares = (n for n in range(100) if n % 2 == 0)




domingo, 26 de julio de 2026

Día 27 — Web scraping: extrayendo datos de internet

El web scraping consiste en extraer información automáticamente de páginas web. Python destaca en esta tarea gracias a la combinación de dos librerías: requests, que descarga el contenido HTML de cualquier página, y BeautifulSoup, que permite recorrer y extraer elementos concretos de ese HTML de forma sencilla.

Es importante mencionar que antes de hacer scraping a cualquier sitio web conviene revisar su archivo robots.txt y sus términos de servicio, ya que no todas las páginas permiten la extracción automatizada de su contenido.

Código de ejemplo:

import requests from bs4 import BeautifulSoup url = "https://ejemplo.com" respuesta = requests.get(url) soup = BeautifulSoup(respuesta.text, "html.parser") titulos = soup.find_all("h2") for titulo in titulos: print(titulo.text.strip()) # Instalación: pip install requests beautifulsoup4




sábado, 25 de julio de 2026

Día 26 — Automatización real: combinando Pandas, JSON y fechas

Una de las aplicaciones más prácticas y demandadas de Python en el entorno profesional es la automatización de tareas administrativas repetitivas: generar informes, procesar facturas o consolidar datos de ventas. Este ejemplo combina varias herramientas vistas anteriormente en un caso de uso real y aplicable.

Automatizar este tipo de procesos no solo ahorra tiempo, sino que también elimina errores humanos derivados de la manipulación manual de datos en hojas de cálculo, especialmente cuando el volumen de información crece.

Código de ejemplo:

import pandas as pd import json from datetime import datetime def analizar_ventas(archivo_csv): df = pd.read_csv(archivo_csv) return { "fecha": datetime.now().strftime("%d/%m/%Y"), "total": round(df["importe"].sum(), 2), "media": round(df["importe"].mean(), 2), "maximo": df["importe"].max() } resultado = analizar_ventas("ventas.csv") print(json.dumps(resultado, indent=2))


viernes, 24 de julio de 2026

Día 25 — SQLite: bases de datos sin instalar nada

SQLite es un sistema de base de datos ligero que viene incluido en la librería estándar de Python, sin necesidad de instalar ni configurar ningún servidor adicional. Es ideal para aplicaciones pequeñas, prototipos rápidos o para aprender los fundamentos de SQL desde un entorno controlado.

El módulo sqlite3 permite crear tablas, insertar registros, realizar consultas y gestionar transacciones usando sentencias SQL estándar, lo que hace que el conocimiento adquirido sea directamente transferible a otros motores de base de datos como MySQL o PostgreSQL.

Código de ejemplo:

import sqlite3 conexion = sqlite3.connect("clientes.db") cursor = conexion.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS clientes ( id INTEGER PRIMARY KEY, nombre TEXT, email TEXT ) """) cursor.execute("INSERT INTO clientes VALUES (1, 'Ana', 'ana@mail.com')") conexion.commit() for fila in cursor.execute("SELECT * FROM clientes"): print(fila) conexion.close()




jueves, 23 de julio de 2026

Día 24 — FastAPI: tu primera API REST en pocos minutos

FastAPI es uno de los frameworks Python más demandados en el desarrollo backend actual, gracias a su rapidez de desarrollo, su excelente rendimiento y la generación automática de documentación interactiva. Crear una API REST funcional requiere muy pocas líneas de código.

Una de sus características más valoradas es el tipado de parámetros: al especificar el tipo de cada argumento (str, int, etc.), FastAPI valida automáticamente los datos recibidos y genera documentación accesible en la ruta /docs, sin necesidad de escribirla manualmente.

Código de ejemplo:

from fastapi import FastAPI app = FastAPI() @app.get("/") def inicio(): return {"mensaje": "¡Hola desde FastAPI!"} @app.get("/usuario/{nombre}") def usuario(nombre: str, edad: int = 0): return {"nombre": nombre, "edad": edad} # Ejecutar con: uvicorn main:app --reload




miércoles, 22 de julio de 2026

Día 23 — Decoradores: añadiendo superpoderes a tus funciones

Un decorador es una función especial que envuelve a otra función para modificar o ampliar su comportamiento sin necesidad de alterar su código original. Se aplican colocando el símbolo @ seguido del nombre del decorador justo encima de la definición de la función.

Los decoradores son una herramienta muy presente en frameworks profesionales: en Flask y FastAPI se usan para definir rutas (@app.get), y en Django para gestionar permisos o autenticación. Entender cómo funcionan internamente ayuda mucho a comprender el comportamiento de estas herramientas.

Código de ejemplo:

import time

def medir_tiempo(funcion):
    def wrapper(*args, **kwargs):
        inicio = time.time()
        resultado = funcion(*args, **kwargs)
        print(f"Tardó: {time.time() - inicio:.4f}s")
        return resultado
    return wrapper

@medir_tiempo
def calcular():
    return sum(range(1_000_000))

print(calcular())


martes, 21 de julio de 2026

Día 22 — NumPy: cálculo numérico ultrarrápido

NumPy es la librería fundamental para el cálculo numérico en Python, y la base sobre la que se construyen herramientas como Pandas, TensorFlow o scikit-learn. Su principal ventaja es la capacidad de realizar operaciones sobre arrays completos sin necesidad de bucles explícitos, lo que se traduce en un rendimiento muchísimo mayor que el de las listas tradicionales de Python.

Esta capacidad de "vectorizar" operaciones es esencial cuando se trabaja con grandes volúmenes de datos numéricos, como ocurre habitualmente en ciencia de datos, machine learning o procesamiento de señales.

Código de ejemplo:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

print(arr * 2)        # [2 4 6 8 10] - sin bucle
print(arr.mean())     # 3.0
print(arr.sum())      # 15

# Operaciones con matrices
matriz = np.array([[1, 2], [3, 4]])
print(np.dot(matriz, matriz))    # Producto matricial




lunes, 20 de julio de 2026

Día 21 — Pandas: análisis de datos de nivel profesional

Pandas es la librería de análisis de datos más utilizada en Python, y prácticamente un estándar en el sector. Su estructura principal, el DataFrame, funciona de forma similar a una hoja de cálculo: organiza los datos en filas y columnas, permitiendo filtrar, ordenar, agrupar y calcular estadísticas con muy pocas líneas de código.

Una de sus mayores ventajas es la capacidad de leer y escribir múltiples formatos de archivo (CSV, Excel, JSON, bases de datos SQL) de forma directa, lo que la convierte en la herramienta ideal para automatizar tareas de análisis que tradicionalmente se hacían manualmente en hojas de cálculo.

Código de ejemplo:

import pandas as pd datos = { "nombre": ["Ana", "Luis", "María"], "edad": [25, 30, 28], "salario": [2500, 3200, 2800] } df = pd.DataFrame(datos) print(df) print(df["salario"].mean()) # Media de la columna print(df[df["edad"] > 27]) # Filtrar filas




domingo, 19 de julio de 2026

Día 20 — Módulos: aprovechando la librería estándar de Python

Python incluye una extensa colección de módulos integrados, conocida popularmente como "baterías incluidas", que cubren desde operaciones matemáticas avanzadas hasta manejo de fechas o generación de números aleatorios, sin necesidad de instalar nada adicional.

Entre los módulos más utilizados destacan math para cálculos matemáticos, random para generar valores aleatorios y datetime para trabajar con fechas y horas. Conocer bien la librería estándar te evitará reinventar funcionalidades que Python ya resuelve de forma nativa y optimizada.

Código de ejemplo:

import math import random from datetime import datetime print(math.sqrt(144)) # 12.0 print(math.pi) # 3.141592653589793 print(random.randint(1, 100)) # Número aleatorio entre 1 y 100 hoy = datetime.now() print(hoy.strftime("%d/%m/%Y")) # Fecha formateada




sábado, 18 de julio de 2026

Día 19 — JSON: el formato universal de intercambio de datos

 JSON (JavaScript Object Notation) es el formato estándar utilizado por la inmensa mayoría de APIs web para intercambiar información entre sistemas. Su estructura es muy similar a la de los diccionarios de Python, lo que hace que trabajar con él resulte muy natural desde este lenguaje.

El módulo json, incluido en la librería estándar de Python, ofrece cuatro funciones principales: dumps() convierte un diccionario en texto JSON, loads() hace el proceso inverso, y dump() / load() realizan las mismas conversiones directamente desde y hacia archivos.

Código de ejemplo:

import json persona = {"nombre": "José", "edad": 35} # Diccionario a texto JSON texto_json = json.dumps(persona, indent=2) print(texto_json) # Texto JSON a diccionario datos = json.loads(texto_json) print(datos["nombre"]) # Guardar directamente en un archivo with open("persona.json", "w") as archivo: json.dump(persona, archivo, indent=2)



 


viernes, 17 de julio de 2026

Día 18 — Archivos: leer y escribir ficheros en Python

Python facilita enormemente la lectura y escritura de archivos gracias a la función open(), combinada con la sentencia with, que garantiza que el archivo se cierre automáticamente al finalizar el bloque, incluso si ocurre un error durante el proceso.

Los modos más comunes de apertura son "r" para lectura, "w" para escritura (que sobreescribe el contenido existente) y "a" para añadir contenido al final del archivo sin borrar lo anterior. Saber manejar archivos es fundamental para tareas como procesar logs, generar informes o leer configuraciones.

Código de ejemplo:

# Escribir en un archivo
with open("datos.txt", "w") as archivo: archivo.write("Hola desde Python\n") archivo.write("Segunda línea\n") # Leer el archivo completo with open("datos.txt", "r") as archivo: contenido = archivo.read() print(contenido) # Leer línea a línea with open("datos.txt") as archivo: for linea in archivo: print(linea.strip())




jueves, 16 de julio de 2026

Día 17 — Manejo de errores con try / except

 Los errores en tiempo de ejecución son inevitables en cualquier programa real: un usuario introduce datos inesperados, un archivo no existe, una conexión falla. Python ofrece el bloque try / except para capturar estos errores y manejarlos de forma controlada en lugar de dejar que el programa se detenga abruptamente.

El bloque try contiene el código que puede fallar, y except especifica qué hacer si ocurre un tipo concreto de error. El bloque opcional finally se ejecuta siempre, haya error o no, y suele usarse para tareas de limpieza como cerrar archivos o conexiones.

def dividir(a, b): try: resultado = a / b return resultado except ZeroDivisionError: return "Error: no se puede dividir por cero" except TypeError: return "Error: introduce solo números" finally: print("Operación completada") print(dividir(10, 2)) # 5.0 print(dividir(10, 0)) # Error: no se puede dividir por cero




miércoles, 15 de julio de 2026

Día 16 — Herencia: reutilizando y extendiendo clases

La herencia permite crear una nueva clase a partir de otra ya existente, heredando automáticamente todos sus atributos y métodos. La clase que hereda se llama "clase hija", y la original "clase padre". Esto evita duplicar código cuando varias clases comparten comportamiento común.

Además, la clase hija puede sobreescribir cualquier método heredado para darle un comportamiento distinto, una técnica conocida como polimorfismo. Este concepto es la base de frameworks tan populares como Django, donde casi todo se construye a partir de clases que heredan funcionalidad predefinida.

Código de ejemplo:

class Animal: def __init__(self, nombre): self.nombre = nombre def hablar(self): return "..." class Perro(Animal): def hablar(self): return f"{self.nombre} dice: ¡Guau!" class Gato(Animal): def hablar(self): return f"{self.nombre} dice: ¡Miau!" rex = Perro("Rex") print(rex.hablar()) # Rex dice: ¡Guau!




martes, 14 de julio de 2026

Día 15 — Clases: introducción a la programación orientada a objetos

La programación orientada a objetos (POO) es un paradigma que modela el código a partir de "objetos" que combinan datos y comportamiento, de forma similar a como funcionan los elementos del mundo real. Una clase actúa como el molde o plantilla, y un objeto es cada instancia concreta creada a partir de ese molde.

El método __init__ es el constructor: se ejecuta automáticamente cada vez que se crea un nuevo objeto, y normalmente se usa para inicializar sus atributos. El parámetro self hace referencia al propio objeto dentro de cualquier método de la clase, y siempre debe aparecer como primer parámetro.

Código de ejemplo:

class Persona: def __init__(self, nombre, edad): self.nombre = nombre self.edad = edad def presentarse(self): return f"Soy {self.nombre} y tengo {self.edad} años" jose = Persona("José", 35) print(jose.presentarse()) print(jose.nombre) # Acceso directo al atributo