diff --git a/_sources/index_en.rst b/_sources/index_en.rst index 07582b56c2..bcccc555e4 100644 --- a/_sources/index_en.rst +++ b/_sources/index_en.rst @@ -34,6 +34,7 @@ Contents: lectures/TWP58/toctree_en lectures/TWP60/toctree_en lectures/TWP65/toctree_en + lectures/TWP68/toctree_en quiz/Quiz1_en.rst quiz/Quiz2_en.rst quiz/Quiz3_en.rst diff --git a/_sources/index_es.rst b/_sources/index_es.rst index ecf1551c24..6efeb76bc6 100644 --- a/_sources/index_es.rst +++ b/_sources/index_es.rst @@ -34,6 +34,7 @@ Contenidos: lectures/TWP58/toctree lectures/TWP60/toctree lectures/TWP65/toctree + lectures/TWP68/toctree quiz/Quiz1.rst quiz/Quiz2.rst quiz/Quiz3.rst diff --git a/_sources/lectures/TWP68/TWP68_1.rst b/_sources/lectures/TWP68/TWP68_1.rst new file mode 100644 index 0000000000..94b99127d3 --- /dev/null +++ b/_sources/lectures/TWP68/TWP68_1.rst @@ -0,0 +1,272 @@ +================================================== +Dominando la Visualización de Datos con Matplotlib +================================================== + +.. image:: ../img/TWP68_001.png + :height: 14.925cm + :width: 9.258cm + :align: center + :alt: + +Introducción +------------ +Esta serie de conferencias se enfoca en dominar Matplotlib, una de las bibliotecas más populares en Python para la visualización de datos. Exploraremos varias funcionalidades de Matplotlib, entendiendo cómo crear una amplia gama de gráficos para comunicar eficazmente los insights de los datos. + +Parte 1: Entendiendo los Fundamentos de Matplotlib +-------------------------------------------------- + +.. contents:: + :local: + +Descripción General +~~~~~~~~~~~~~~~~~~~ +Matplotlib es una biblioteca integral para crear visualizaciones estáticas, animadas e interactivas en Python. Proporciona una interfaz de bajo nivel para crear una variedad de gráficos, dándote control total sobre cada aspecto de la figura. + +Instalando Matplotlib +~~~~~~~~~~~~~~~~~~~~~ +Instala Matplotlib usando pip:: + + pip install matplotlib + +Importando Matplotlib +~~~~~~~~~~~~~~~~~~~~~ +Importa Matplotlib en tu script de Python:: + + import matplotlib.pyplot as plt + +Creando Gráficos Básicos +~~~~~~~~~~~~~~~~~~~~~~~~ +**Gráfico de Líneas**:: + + # Datos de Ejemplo + x = [1, 2, 3, 4, 5] + y = [10, 20, 25, 30, 35] + + # Gráfico + plt.plot(x, y) + plt.title('Ejemplo de Gráfico de Líneas') + plt.xlabel('Eje X') + plt.ylabel('Eje Y') + plt.show() + +**Gráfico de Barras**:: + + # Datos de Ejemplo + categorías = ['A', 'B', 'C', 'D'] + valores = [4, 7, 1, 8] + + # Gráfico + plt.bar(categorías, valores) + plt.title('Ejemplo de Gráfico de Barras') + plt.xlabel('Categorías') + plt.ylabel('Valores') + plt.show() + +**Gráfico de Dispersión**:: + + # Datos de Ejemplo + x = [5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6] + y = [99, 86, 87, 88, 100, 86, 103, 87, 94, 78, 77, 85, 86] + + # Gráfico + plt.scatter(x, y) + plt.title('Ejemplo de Gráfico de Dispersión') + plt.xlabel('Eje X') + plt.ylabel('Eje Y') + plt.show() + +Parte 2: Técnicas Avanzadas de Graficación +------------------------------------------ + +.. contents:: + :local: + +Histogramas +~~~~~~~~~~~ +**Histograma**:: + + # Datos de Ejemplo + datos = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4] + + # Gráfico + plt.hist(datos, bins=4) + plt.title('Ejemplo de Histograma') + plt.xlabel('Intervalos de Datos') + plt.ylabel('Frecuencia') + plt.show() + +Gráficos de Caja +~~~~~~~~~~~~~~~~ +**Gráfico de Caja**:: + + # Datos de Ejemplo + datos = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + + # Gráfico + plt.boxplot(datos) + plt.title('Ejemplo de Gráfico de Caja') + plt.ylabel('Valores') + plt.show() + +Gráficos de Pastel +~~~~~~~~~~~~~~~~~~ +**Gráfico de Pastel**:: + + # Datos de Ejemplo + etiquetas = 'A', 'B', 'C', 'D' + tamaños = [15, 30, 45, 10] + colores = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue'] + + # Gráfico + plt.pie(tamaños, labels=etiquetas, colors=colores, autopct='%1.1f%%', startangle=140) + plt.title('Ejemplo de Gráfico de Pastel') + plt.show() + +Parte 3: Personalización de Gráficos +------------------------------------ + +.. contents:: + :local: + +Añadiendo Cuadrícula +~~~~~~~~~~~~~~~~~~~~ +Añadir cuadrícula a tu gráfico:: + + plt.plot(x, y) + plt.grid(True) + plt.show() + +Cambiando Estilos y Colores de Línea +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Cambiar estilo y color de línea:: + + plt.plot(x, y, linestyle='--', color='r') + plt.show() + +Añadiendo Anotaciones +~~~~~~~~~~~~~~~~~~~~~ +Añadir anotaciones a tu gráfico:: + + plt.plot(x, y) + plt.annotate('Punto más Alto', xy=(4, 30), xytext=(3, 35), + arrowprops=dict(facecolor='black', shrink=0.05)) + plt.show() + +Parte 4: Aplicaciones y Estudios de Caso en el Mundo Real +---------------------------------------------------------- + +.. contents:: + :local: + +Análisis de Datos de Salud +~~~~~~~~~~~~~~~~~~~~~~~~~~ +- Visualizar tiempos de espera de pacientes usando histogramas. +- Analizar distribución de servicios con gráficos de barras. + +Análisis de Datos Financieros +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- Visualizar tendencias del mercado de valores con gráficos de líneas. +- Analizar el desempeño de la cartera usando gráficos de dispersión. + +Análisis de Datos de Redes Sociales +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- Realizar análisis de sentimiento con gráficos de barras. +- Detectar tendencias usando visualizaciones de series temporales. + +Parte 5: Mejores Prácticas para la Visualización de Datos +--------------------------------------------------------- + +.. contents:: + :local: + +Claridad +~~~~~~~~ +Asegúrate de que tu visualización sea fácil de entender. + +Precisión +~~~~~~~~~ +Representa los datos con precisión sin inducir a error. + +Estética +~~~~~~~~ +Usa color y diseño de manera efectiva, pero evita complicar demasiado. + +Contexto +~~~~~~~~ +Proporciona contexto con títulos, etiquetas y leyendas. + +Parte 6: Ejemplo +---------------- + +.. contents:: + :local: + +Aquí hay un ejemplo de visualización de datos de ventas usando Matplotlib. El ejemplo usa datos de ventas de un archivo CSV y luego los visualiza usando varios tipos de gráficos. + +.. activecode:: ac_l68_1a + :nocodelens: + :language: python3 + :python3_interpreter: pyscript + + import pandas as pd + import matplotlib.pyplot as plt + + from pyscript import display + + # Datos de Ejemplo + datos_ventas = pd.DataFrame({ + 'clase': ['Primera', 'Segunda', 'Tercera', 'Primera', 'Segunda', 'Tercera', 'Primera', 'Segunda', 'Tercera', 'Primera', 'Segunda', 'Tercera', 'Primera', 'Segunda', 'Tercera'], + 'tarifa': [71.2833, 10.5, 7.25, 53.1, 8.05, 7.8542, 51.8625, 21.0, 11.1333, 26.55, 31.275, 7.8542, 61.3792, 14.4542, 7.7417] + }) + + # Crear el gráfico + fig, ax = plt.subplots(figsize=(10, 6)) + ax.bar(datos_ventas['clase'], datos_ventas['tarifa'], color='skyblue') + ax.set_title("Visualización de Datos de Ventas") + ax.set_xlabel("Clase") + ax.set_ylabel("Tarifa") + + # Mostrar el gráfico + display(fig) + + +.. activecode:: ac_l68_1b + :nocodelens: + :language: python3 + :python3_interpreter: pyscript + + import matplotlib.pyplot as plt + import matplotlib.tri as tri + import numpy as np + + from pyscript import display + + # Primero, crear las coordenadas x e y de los puntos. + n_ángulos = 36 + n_radios = 8 + radio_min = 0.25 + radios = np.linspace(radio_min, 0.95, n_radios) + + ángulos = np.linspace(0, 2 * np.pi, n_ángulos, endpoint=False) + ángulos = np.repeat(ángulos[..., np.newaxis], n_radios, axis=1) + ángulos[:, 1::2] += np.pi / n_ángulos + + x = (radios * np.cos(ángulos)).flatten() + y = (radios * np.sin(ángulos)).flatten() + z = (np.cos(radios) * np.cos(3 * ángulos)).flatten() + + # Crear la Triangulación; sin triángulos, se crea una triangulación Delaunay. + triang = tri.Triangulation(x, y) + + # Enmascarar triángulos no deseados. + triang.set_mask(np.hypot(x[triang.triangles].mean(axis=1), + y[triang.triangles].mean(axis=1)) + < radio_min) + + fig1, ax1 = plt.subplots() + ax1.set_aspect('equal') + tpc = ax1.tripcolor(triang, z, shading='flat') + fig1.colorbar(tpc) + ax1.set_title("tripcolor de la triangulación de Delaunay, sombreado plano") + + display(fig1) \ No newline at end of file diff --git a/_sources/lectures/TWP68/TWP68_1_en.rst b/_sources/lectures/TWP68/TWP68_1_en.rst new file mode 100644 index 0000000000..0ef959849e --- /dev/null +++ b/_sources/lectures/TWP68/TWP68_1_en.rst @@ -0,0 +1,273 @@ +============================================ +Mastering Data Visualization with Matplotlib +============================================ + +.. image:: ../img/TWP68_001.png + :height: 14.925cm + :width: 9.258cm + :align: center + :alt: + +Introduction +------------ +This comprehensive lecture series focuses on mastering Matplotlib, one of the most popular libraries in Python for data visualization. We will explore various functionalities of Matplotlib, understanding how to create a wide array of plots to effectively communicate data insights. + +Part 1: Understanding Matplotlib Basics +--------------------------------------- + +.. contents:: + :local: + +Overview +~~~~~~~~ +Matplotlib is a comprehensive library for creating static, animated, and interactive visualizations in Python. It provides a low-level interface for creating a variety of plots, giving you full control over every aspect of the figure. + +Installing Matplotlib +~~~~~~~~~~~~~~~~~~~~~ +Install Matplotlib using pip:: + + pip install matplotlib + +Importing Matplotlib +~~~~~~~~~~~~~~~~~~~~ +Import Matplotlib in your Python script:: + + import matplotlib.pyplot as plt + +Creating Basic Plots +~~~~~~~~~~~~~~~~~~~~ +**Line Plot**:: + + # Sample Data + x = [1, 2, 3, 4, 5] + y = [10, 20, 25, 30, 35] + + # Plot + plt.plot(x, y) + plt.title('Line Plot Example') + plt.xlabel('X-axis') + plt.ylabel('Y-axis') + plt.show() + +**Bar Plot**:: + + # Sample Data + categories = ['A', 'B', 'C', 'D'] + values = [4, 7, 1, 8] + + # Plot + plt.bar(categories, values) + plt.title('Bar Plot Example') + plt.xlabel('Categories') + plt.ylabel('Values') + plt.show() + +**Scatter Plot**:: + + # Sample Data + x = [5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6] + y = [99, 86, 87, 88, 100, 86, 103, 87, 94, 78, 77, 85, 86] + + # Plot + plt.scatter(x, y) + plt.title('Scatter Plot Example') + plt.xlabel('X-axis') + plt.ylabel('Y-axis') + plt.show() + +Part 2: Advanced Plotting Techniques +------------------------------------ + +.. contents:: + :local: + +Histograms +~~~~~~~~~~ +**Histogram**:: + + # Sample Data + data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4] + + # Plot + plt.hist(data, bins=4) + plt.title('Histogram Example') + plt.xlabel('Data Bins') + plt.ylabel('Frequency') + plt.show() + +Box Plots +~~~~~~~~~ +**Box Plot**:: + + # Sample Data + data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + + # Plot + plt.boxplot(data) + plt.title('Box Plot Example') + plt.ylabel('Values') + plt.show() + +Pie Charts +~~~~~~~~~~ +**Pie Chart**:: + + # Sample Data + labels = 'A', 'B', 'C', 'D' + sizes = [15, 30, 45, 10] + colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue'] + + # Plot + plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=140) + plt.title('Pie Chart Example') + plt.show() + +Part 3: Customizing Plots +------------------------- + +.. contents:: + :local: + +Adding Grid +~~~~~~~~~~~ +Add grid to your plot:: + + plt.plot(x, y) + plt.grid(True) + plt.show() + +Changing Line Styles and Colors +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Change line style and color:: + + plt.plot(x, y, linestyle='--', color='r') + plt.show() + +Adding Annotations +~~~~~~~~~~~~~~~~~~ +Add annotations to your plot:: + + plt.plot(x, y) + plt.annotate('Highest Point', xy=(4, 30), xytext=(3, 35), + arrowprops=dict(facecolor='black', shrink=0.05)) + plt.show() + +Part 4: Real-world Applications and Case Studies +------------------------------------------------ + +.. contents:: + :local: + +Healthcare Data Analysis +~~~~~~~~~~~~~~~~~~~~~~~~ +- Visualize patient wait times using histograms. +- Analyze service distribution with bar plots. + +Financial Data Analysis +~~~~~~~~~~~~~~~~~~~~~~~ +- Visualize stock market trends with line charts. +- Analyze portfolio performance using scatter plots. + +Social Media Data Analysis +~~~~~~~~~~~~~~~~~~~~~~~~~~ +- Perform sentiment analysis with bar plots. +- Detect trends using time series visualizations. + +Part 5: Best Practices for Data Visualization +--------------------------------------------- + +.. contents:: + :local: + +Clarity +~~~~~~~ +Ensure your visualization is easy to understand. + +Accuracy +~~~~~~~~ +Represent data accurately without misleading. + +Aesthetics +~~~~~~~~~~ +Use color and design effectively but avoid over-complicating. + +Context +~~~~~~~ +Provide context with titles, labels, and legends. + +Part 6: Example +--------------- + +.. contents:: + :local: + +Here is an example of visualizing sales data using Matplotlib. The example uses sales data from a CSV file and then visualizes it using various types of plots. + +.. activecode:: ac_l68_1a_en + :nocodelens: + :language: python3 + :python3_interpreter: pyscript + + import pandas as pd + import matplotlib.pyplot as plt + + from pyscript import display + + # Sample data + sales_data = pd.DataFrame({ + 'class': ['First', 'Second', 'Third', 'First', 'Second', 'Third', 'First', 'Second', 'Third', 'First', 'Second', 'Third', 'First', 'Second', 'Third'], + 'fare': [71.2833, 10.5, 7.25, 53.1, 8.05, 7.8542, 51.8625, 21.0, 11.1333, 26.55, 31.275, 7.8542, 61.3792, 14.4542, 7.7417] + }) + + # Create the plot + fig, ax = plt.subplots(figsize=(10, 6)) + ax.bar(sales_data['class'], sales_data['fare'], color='skyblue') + ax.set_title("Sales Data Visualization") + ax.set_xlabel("Class") + ax.set_ylabel("Fare") + + # Display the plot + display(fig) + + +.. activecode:: ac_l68_1b_en + :nocodelens: + :language: python3 + :python3_interpreter: pyscript + + import matplotlib.pyplot as plt + import matplotlib.tri as tri + import numpy as np + + from pyscript import display + + # First create the x and y coordinates of the points. + n_angles = 36 + n_radii = 8 + min_radius = 0.25 + radii = np.linspace(min_radius, 0.95, n_radii) + + angles = np.linspace(0, 2 * np.pi, n_angles, endpoint=False) + angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1) + angles[:, 1::2] += np.pi / n_angles + + x = (radii * np.cos(angles)).flatten() + y = (radii * np.sin(angles)).flatten() + z = (np.cos(radii) * np.cos(3 * angles)).flatten() + + # Create the Triangulation; no triangles so Delaunay triangulation created. + triang = tri.Triangulation(x, y) + + # Mask off unwanted triangles. + triang.set_mask(np.hypot(x[triang.triangles].mean(axis=1), + y[triang.triangles].mean(axis=1)) + < min_radius) + + fig1, ax1 = plt.subplots() + ax1.set_aspect('equal') + tpc = ax1.tripcolor(triang, z, shading='flat') + fig1.colorbar(tpc) + ax1.set_title('tripcolor of Delaunay triangulation, flat shading') + + display(fig1) + diff --git a/_sources/lectures/TWP68/toctree.rst b/_sources/lectures/TWP68/toctree.rst new file mode 100644 index 0000000000..4e4cd07532 --- /dev/null +++ b/_sources/lectures/TWP68/toctree.rst @@ -0,0 +1,18 @@ +====================== +Visualización de datos +====================== + + +.. image:: ../img/TWP10_001.jpeg + :height: 14.925cm + :width: 9.258cm + :align: center + :alt: + + +.. toctree:: + :caption: Contenido + :maxdepth: 1 + :numbered: + + TWP68_1.rst diff --git a/_sources/lectures/TWP68/toctree_en.rst b/_sources/lectures/TWP68/toctree_en.rst new file mode 100644 index 0000000000..6259eda2d0 --- /dev/null +++ b/_sources/lectures/TWP68/toctree_en.rst @@ -0,0 +1,18 @@ +================== +Data Visualization +================== + + +.. image:: ../img/TWP10_001.jpeg + :height: 14.925cm + :width: 9.258cm + :align: center + :alt: + + +.. toctree:: + :caption: Contenido + :maxdepth: 1 + :numbered: + + TWP68_1_en.rst diff --git a/_sources/lectures/img/TWP68_001.png b/_sources/lectures/img/TWP68_001.png new file mode 100644 index 0000000000..565f1b4b5c Binary files /dev/null and b/_sources/lectures/img/TWP68_001.png differ