sábado, 8 de febrero de 2025

Microsoft Learn / Exploración y análisis de datos con Python / Visualizacion de datos con Matplotlib /ejercicio

 

Ejercicio: Visualización de datos con Matplotlib

Completado 100 XP

Para completar este módulo, se necesita un espacio aislado. Ha usado 1 de los 10 espacios aislados de hoy. Mañana habrá disponibles más espacios aislados.

Tenga en cuenta que, por el momento, el espacio aislado de Jupyter Notebook solo admite el idioma inglés.

Explorar datos con Python - Visualizar datos

En este cuaderno, aplicaremos algunas técnicas para analizar datos con estadísticas básicas y visualizarlos utilizando gráficos.

Cargando nuestros datos

Antes de comenzar, cargamos los mismos datos sobre las horas de estudio que analizamos en el cuaderno anterior. También recalcularemos quién pasó la clase de la misma manera que la última vez.

Ejecute el código en la celda a continuación haciendo clic en el ► Ejecutar para ver los datos.

>>import pandas as pd

>># Load data from a text file
>>!wget https://raw.githubusercontent.com/MicrosoftDocs/mslearn-introduction-
to-machine-learning/main/Data/ml-basics/grades.csv
>>df_students = pd.read_csv('grades.csv',delimiter=',',header='infer')

>># Remove any rows with missing data
>>df_students = df_students.dropna(axis=0, how='any')

>># Calculate who passed, assuming '60' is the grade needed to pass
>>passes  = pd.Series(df_students['Grade'] >= 60)

>># Save who passed to the Pandas dataframe
>>df_students = pd.concat([df_students, passes.rename("Pass")], axis=1)

>># Print the result out into this notebook
>>df_students 
 
>>>
--2025-02-08 15:16:57--
https://raw.githubusercontent.com/MicrosoftDocs/mslearn-introduction-
to-machine-learning/main/Data/ml-basics/grades.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)...
185.199.108.133, 185.199.111.133, 185.199.110.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)
|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 322 [text/plain]
Saving to: ‘grades.csv’

grades.csv          100%[===================>]     322  --.-KB/s    in 0s      

2025-02-08 15:16:57 (5.21 MB/s) - ‘grades.csv’ saved [322/322]

Name StudyHours Grade Pass
0 Dan 10.00 50.0 False
1 Joann 11.50 50.0 False
2 Pedro 9.00 47.0 False
3 Rosie 16.00 97.0 True
4 Ethan 9.25 49.0 False
5 Vicky 1.00 3.0 False
6 Frederic 11.50 53.0 False
7 Jimmie 9.00 42.0 False
8 Rhonda 8.50 26.0 False
9 Giovanni 14.50 74.0 True
10 Francesca 15.50 82.0 True
11 Rajab 13.75 62.0 True
12 Naiyana 9.00 37.0 False
13 Kian 8.00 15.0 False
14 Jenny 15.50 70.0 True
15 Jakeem 8.00 27.0 False
16 Helena 9.00 36.0 False
17 Ismat 6.00 35.0 False
18 Anila 10.00 48.0 False
19 Skye 12.00 52.0 False
20 Daniel 12.50 63.0 True
21 Aisha 12.00 64.0 True

Lectura del Código por parte de PPI:

En posts anteriores de este curso de Microsoft learn creamos una dataFrame llamada students. se creo manualmente a partir de un diccionario.

Ahora en este primer código del capitulo de visualización de datos con Matplotlib lo que se hizo primero fue: 

  • importar el modulo pandas con el alias de pd 
  • obtener los datos a partir de un archivo csv alojado en un sitio web de microsoft learn.
  • Leer los datos con el método read_csv.
  • Remover cualquier fila que no tenga datos.
  • Calcular quienes pasaron el curso asumiendo que 60 es el limite.
  • Guardar en la DataFrame quienes aprobaron el curso.
  •  Mostrar el resultado por pantalla

 

Visualizar datos con matplotlib

Los marcos de datos proporcionan una excelente manera de explorar y analizar datos tabulares, pero a veces una imagen vale más que mil filas y columnas. La Matplotlib proporciona la base para trazar visualizaciones de datos que pueden mejorar en gran medida su capacidad para analizar los datos.

Comencemos con un cuadro de barra simple que muestra la calificación de cada estudiante.

Nota : Este primer gráfico puede tardar uno o dos minutos en renderizar. Los gráficos posteriores se volverán más rápidamente.

 >># Ensure plots are displayed inline in the notebook
>>%matplotlib inline

>>from matplotlib import pyplot as plt

>># Create a bar plot of name vs grade
>>plt.bar(x=df_students.Name, height=df_students.Grade)

>># Display the plot
>>plt.show()


 

Bueno, eso funcionó, pero el gráfico podría usar algunas mejoras para aclarar lo que estamos viendo.

Tenga en cuenta que usó la Pyplot de Matplotlib para trazar el gráfico. Esta clase proporciona muchas formas de mejorar los elementos visuales de la trama. Por ejemplo, el siguiente código:

  • Especifica el color de la tabla de barras.
  • Agrega un título a la tabla (para que sepamos lo que representa)
  • Agrega etiquetas a los ejes x e y (para que sabemos qué eje muestra qué datos)
  • Agrega una cuadrícula (para facilitar la determinación de los valores para las barras)
  • Gira los marcadores X (para que podamos leerlos) 
 
>># Create a bar plot of name vs grade
>>plt.bar(x=df_students.Name, height=df_students.Grade, color='orange')

>># Customize the chart
>>plt.title('Student Grades')
>>plt.xlabel('Student')
>>plt.ylabel('Grade')
>>plt.grid(color='#95a5a6', linestyle='--', linewidth=2, axis='y', alpha=0.7)
>>plt.xticks(rotation=90)

>># Display the plot
>>plt.show()
>>>

 

Una gráfica está técnicamente contenida dentro de una figura . En los ejemplos anteriores, la figura se creó implícitamente para usted, pero puede crearla explícitamente. Por ejemplo, el siguiente código crea una figura con un tamaño específico.

>># Create a Figure
>>fig = plt.figure(figsize=(8,3))

>># Create a bar plot of name vs grade
>>plt.bar(x=df_students.Name, height=df_students.Grade, color='orange')

>># Customize the chart
>>plt.title('Student Grades')
>>plt.xlabel('Student')
>>plt.ylabel('Grade')
>>plt.grid(color='#95a5a6', linestyle='--', linewidth=2, axis='y', alpha=0.7)
>>plt.xticks(rotation=90)

>># Show the figure
>>plt.show()

 

 

Una figura puede contener múltiples subtramas, cada una en su propio eje .

Por ejemplo, el siguiente código crea una figura con dos subtramas: una es una tabla de barras que muestra las calificaciones de los estudiantes, y el otro es un gráfico circular que compara el número de calificaciones de pase con las calificaciones no pasadas.

>># Create a figure for 2 subplots (1 row, 2 columns)
>>fig, ax = plt.subplots(1, 2, figsize = (10,4))

>># Create a bar plot of name vs grade on the first axis
>>ax[0].bar(x=df_students.Name, height=df_students.Grade, color='orange')
>>ax[0].set_title('Grades')
>>ax[0].set_xticklabels(df_students.Name, rotation=90)

>># Create a pie chart of pass counts on the second axis
>>pass_counts = df_students['Pass'].value_counts()
>>ax[1].pie(pass_counts, labels=pass_counts)
>>ax[1].set_title('Passing Grades')
>>ax[1].legend(pass_counts.keys().tolist())

>># Add a title to the Figure
>>fig.suptitle('Student Data')

>># Show the figure
>>fig.show()

 >>>

<ipython-input-9-4eea5c60d58f>:7: UserWarning: set_ticklabels() should only be used
with a fixed number of ticks, i.e. after set_ticks() or using a FixedLocator.
  ax[0].set_xticklabels(df_students.Name, rotation=90)

 

Hasta ahora, ha utilizado métodos de la Matplotlib.pyplot , objeto para plotear los gráficos. Sin embargo, Matplotlib es tan fundamental para los gráficos en Python que muchos paquetes, incluidos los pandas, proporcionan métodos que abstraen las funciones de matplotlib subyacentes y simplifican la trazado. Por ejemplo, DataFrame proporciona sus propios métodos para trazar datos como se muestra en el siguiente ejemplo, que traza un gráfico de barras de las horas de estudio.

>>df_students.plot.bar(x='Name', y='StudyHours', color='teal', figsize=(6,4))
>>>
<Axes: xlabel='Name'>

 

Comenzando con el análisis estadístico

Ahora que sabe cómo usar Python para manipular y visualizar datos, puede comenzar a analizarlo.

Mucha ciencia de datos se basa en estadísticas , por lo que exploraremos algunas técnicas estadísticas básicas.

Nota : Esta sección no destinada a enseñarle estadísticas; Ese es un tema demasiado grande para este cuaderno. Sin embargo, le presentará algunos conceptos y técnicas estadísticas que los científicos de datos usan mientras exploran los datos en preparación para el modelado de aprendizaje automático.

Estadísticas descriptivas y distribución de datos

Al examinar una variable (por ejemplo, una muestra de calificaciones de estudiantes), los científicos de datos están particularmente interesados ​​en su distribución (en otras palabras, cómo se extienden todos los diferentes valores de grado a través de la muestra). El punto de partida para esta exploración a menudo es visualizar los datos como un histograma y ver con qué frecuencia ocurre cada valor para la variable.

>># Get the variable to examine
>>var_data = df_students['Grade']

>># Create a Figure
>>fig = plt.figure(figsize=(10,4))

>># Plot a histogram
>>plt.hist(var_data)

>># Add titles and labels
>>plt.title('Data Distribution')
>>plt.xlabel('Value')
>>plt.ylabel('Frequency')

>># Show the figure
>>fig.show()


El histograma para las calificaciones es una forma simétrica, donde los grados más frecuentes tienden a estar en el medio del rango (alrededor de 50), con menos grados en los extremos extremos de la escala.

Medidas de tendencia central

Para comprender mejor la distribución, podemos examinar las llamadas medidas de tendencia central , que es una forma elegante de describir estadísticas que representan el "medio" de los datos. El objetivo de este análisis es tratar de encontrar un valor "típico". Las formas comunes de definir la mitad de los datos incluyen:

  • La media : un promedio simple basado en agregar todos los valores en el conjunto de muestras y luego dividir el total por el número de muestras.
  • La mediana : el valor en el medio del rango de todos los valores de muestra.
  • El modo : el valor más común en el conjunto de muestras * .

Calculemos estos valores, junto con los valores mínimos y máximos para la comparación, y mostrárselos en el histograma.

* Por supuesto, en algunos conjuntos de muestras, puede haber un empate para el valor más común. En esos casos, el conjunto de datos se describe como bimodal o incluso multimodal .

>># Get the variable to examine
>>var = df_students['Grade']

>># Get statistics
>>min_val = var.min()
>>max_val = var.max()
>>mean_val = var.mean()
>>med_val = var.median()
>>mod_val = var.mode()[0]

>>print('Minimum:{:.2f}\nMean:{:.2f}\nMedian:{:.2f}\nMode:{:.2f}\nMaximum:{:.2f}\n
'.format(min_val,
mean_val,
med_val,
mod_val,
max_val))

>># Create a Figure
>>fig = plt.figure(figsize=(10,4))

>># Plot a histogram
>>plt.hist(var)

>># Add lines for the statistics
>>plt.axvline(x=min_val, color = 'gray', linestyle='dashed', linewidth = 2)
>>plt.axvline(x=mean_val, color = 'cyan', linestyle='dashed', linewidth = 2)
>>plt.axvline(x=med_val, color = 'red', linestyle='dashed', linewidth = 2)
>>plt.axvline(x=mod_val, color = 'yellow', linestyle='dashed', linewidth = 2)
>>plt.axvline(x=max_val, color = 'gray', linestyle='dashed', linewidth = 2)

>># Add titles and labels
>>plt.title('Data Distribution')
>>plt.xlabel('Value')
>>plt.ylabel('Frequency')
>># Show the figure
>>fig.show()
>>> 
Minimum:3.00
Mean:49.18
Median:49.50
Mode:50.00
Maximum:97.00

 

Para los datos de grado, la media, mediana y el modo parecen estar más o menos en el medio del mínimo y el máximo, a alrededor de 50.

Otra forma de visualizar la distribución de una variable es usar un de caja (a veces llamado de caja y bigotes ). Creemos uno para los datos de grado.

>># Get the variable to examine
>>var = df_students['Grade']

>># Create a Figure
>>fig = plt.figure(figsize=(10,4))

>># Plot a histogram
>>plt.boxplot(var)

>># Add titles and labels
>>plt.title('Data Distribution')

>># Show the figure
>>fig.show()

 >>>

 

La gráfica de cuadro muestra la distribución de los valores de grado en un formato diferente del histograma. La cuadro de la gráfica muestra dónde residen los dos cuartiles de los datos. En este caso, la mitad de los grados están entre aproximadamente 36 y 63. Los bigotes que se extienden desde la caja muestran los dos cuartiles exteriores, por lo que la otra mitad de las calificaciones en este caso están entre 0 y 36 o 63 y 100. La línea en El cuadro indica el medio .

Para el aprendizaje, es útil combinar histogramas y parcelas de caja, con la orientación de la parcela de caja cambiada para alinearlo con el histograma. (De alguna manera, es útil pensar en el histograma como una vista de "elevación frontal" de la distribución, y la trama de caja como una vista de "plan" de la distribución desde arriba).

>># Create a function that we can re-use
>>def show_distribution(var_data):
>>    from matplotlib import pyplot as plt

>>    # Get statistics
>>    min_val = var_data.min()
>>    max_val = var_data.max()
>>    mean_val = var_data.mean()
>>    med_val = var_data.median()
>>    mod_val = var_data.mode()[0]

>>    print('Minimum:{:.2f}\nMean:{:.2f}\nMedian:{:.2f}\nMode:{:.2f}\nMaximum:{:.2f}\n'.format(min_val,
                                                                                            mean_val,
                                                                                            med_val,
                                                                                            mod_val,
                                                                                            max_val))

>>    # Create a figure for 2 subplots (2 rows, 1 column)
>>    fig, ax = plt.subplots(2, 1, figsize = (10,4))

>>    # Plot the histogram   
>>    ax[0].hist(var_data)
>>    ax[0].set_ylabel('Frequency')

>>    # Add lines for the mean, median, and mode
>>    ax[0].axvline(x=min_val, color = 'gray', linestyle='dashed', linewidth = 2)
>>    ax[0].axvline(x=mean_val, color = 'cyan', linestyle='dashed', linewidth = 2)
>>    ax[0].axvline(x=med_val, color = 'red', linestyle='dashed', linewidth = 2)
>>    ax[0].axvline(x=mod_val, color = 'yellow', linestyle='dashed', linewidth = 2)
>>    ax[0].axvline(x=max_val, color = 'gray', linestyle='dashed', linewidth = 2)

>>    # Plot the boxplot   
>>    ax[1].boxplot(var_data, vert=False)
>>    ax[1].set_xlabel('Value')

>>    # Add a title to the Figure
>>    fig.suptitle('Data Distribution')

>>    # Show the figure
>>    fig.show()

>># Get the variable to examine
>>col = df_students['Grade']
>># Call the function
>>show_distribution(col)

>>>

Minimum:3.00
Mean:49.18
Median:49.50
Mode:50.00
Maximum:97.00

Todas las mediciones de la tendencia central están en el medio de la distribución de datos, que es simétrica con valores que se vuelven progresivamente más bajos en ambas direcciones desde el medio.

Para explorar esta distribución con más detalle, debe comprender que las estadísticas se trata fundamentalmente de tomar muestras de datos y usar funciones de probabilidad para extrapolar información sobre la población de datos.

¿Qué quiere decir esto? Las muestras se refieren a los datos que tenemos disponibles, como información sobre los hábitos y calificaciones de estudio de estos 22 estudiantes. La población se refiere a todos los datos posibles que podríamos recopilar, como las calificaciones de cada estudiante y los hábitos de estudio en todas las instituciones educativas a lo largo de la historia del tiempo. Por lo general, estamos interesados ​​en la población, pero simplemente no es práctico recopilar todos esos datos. En cambio, debemos intentar estimar cómo es la población de la pequeña cantidad de datos (muestras) que tenemos.

Si tenemos suficientes muestras, podemos calcular algo llamado función de densidad de probabilidad , lo que estima la distribución de grados para la población completa.

La Pyplot de Matplotlib proporciona una función de trama útil para mostrar esta densidad.

 >>def show_density(var_data):
 >>   from matplotlib import pyplot as plt

 >>   fig = plt.figure(figsize=(10,4))

 >>   # Plot density
 >>   var_data.plot.density()

 >>   # Add titles and labels
 >>   plt.title('Data Density')

>>    # Show the mean, median, and mode
>>    plt.axvline(x=var_data.mean(), color = 'cyan', linestyle='dashed', linewidth = 2)
>>    plt.axvline(x=var_data.median(), color = 'red', linestyle='dashed', linewidth = 2)
>>    plt.axvline(x=var_data.mode()[0], color = 'yellow', linestyle='dashed', linewidth = 2)

>>    # Show the figure
>>    plt.show()

>># Get the density of Grade
>>col = df_students['Grade']
>>show_density(col)

 


 

Como se esperaba del histograma de la muestra, la densidad muestra la "curva de campana" característica de lo que los estadísticos llaman una normal con la media y el modo en el centro y las colas simétricas.

Resumen

¡Bien hecho! Hubo varios conceptos nuevos aquí, así que resumamos.

Aquí, nosotros:

  1. Gráficos hechos con matplotlib.
  2. Aprendí a personalizar estos gráficos.
  3. Estadísticas básicas calculadas, como medianas.
  4. Observó la propagación de datos utilizando gráficos de caja e histogramas.
  5. Aprendí sobre muestras versus poblaciones.
  6. Estimado de cómo podría ser la población de grados de una muestra de calificaciones.

En nuestro próximo cuaderno, analizaremos detectar datos inusuales y encontrar relaciones entre datos.

Otras lecturas

Para obtener más información sobre los paquetes de Python que exploró en este cuaderno, consulte la siguiente documentación:

 

 

No hay comentarios.:

Publicar un comentario

Entradas recientes

Thinkcspy. 1.14. Glosario del primer capitulo

  1.14. Glossary activecode: Un entorno de intérprete único que permite que Python se ejecute desde un navegador web. algorithm: Un pr...

Entradas Populares