Explorando datos con Python - Datos del mundo real
En el último cuaderno, observamos las calificaciones de los datos de nuestros estudiantes e investigamos los datos visualmente con histogramas y parcelas de caja. Ahora analizaremos casos más complejos, describiremos los datos más plenamente y discutiremos cómo hacer comparaciones básicas entre los datos.
Distribuciones de datos del mundo real
Anteriormente, analizamos las calificaciones para los datos de nuestros estudiantes y estimamos a partir de esta muestra cómo podría ser la población completa de calificaciones. Actualicemos nuestra memoria y echemos un vistazo a estos datos nuevamente.
Ejecute el siguiente código para imprimir los datos y hacer un diagrama de cuadro de histograma más que muestra las calificaciones para nuestra muestra de estudiantes.
>>import pandas as pd
grades.csv 100%[===================>] 322 --.-KB/s in 0s
2025-02-09 13:10:55 (4.34 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
Minimum:3.00
Mean:49.18
Median:49.50
Mode:50.00
Maximum:97.00
Como recordarán, nuestros datos tenían la media y el modo en el centro, con datos
Ahora echemos un vistazo a la distribución de los datos de las horas de estudio.
>>>
Minimum:1.00
Mean:10.52
Median:10.00
Mode:9.00
Maximum:16.00
La distribución de los datos del tiempo de estudio es significativamente diferente de la de las calificaciones.
Tenga en cuenta que los bigotes de la gráfica de la caja solo comienzan alrededor de 6.0, lo que indica que la gran mayoría del primer trimestre de los datos está por encima de este valor. El mínimo está marcado con una O , lo que indica que es estadísticamente un atípico : un valor que se encuentra significativamente fuera del rango del resto de la distribución.
Los valores atípicos pueden ocurrir por muchas razones. Tal vez un estudiante tenía la intención de registrar "10" horas de tiempo de estudio, pero ingresó "1" y se perdió el "0". ¡O tal vez el estudiante fue anormalmente perezoso cuando se trata de estudiar! De cualquier manera, es una anomalía estadística que no representa a un estudiante típico. Veamos cómo se ve la distribución sin ella.
>>>
Minimum:6.00
Mean:10.98
Median:10.00
Mode:9.00
Maximum:16.00
Para fines de aprendizaje, acabamos de tratar el valor 1 como un verdadero atípico aquí y lo excluyeron. En el mundo real, sería inusual excluir los datos en los extremos sin más justificación cuando el tamaño de nuestra muestra es tan pequeño. Esto se debe a que cuanto más pequeño nuestro tamaño de muestra, más probabilidades es que nuestro muestreo sea una mala representación de toda la población. (Aquí, la población significa calificaciones para todos los estudiantes, no solo para nuestros 22.) Por ejemplo, si probamos el tiempo de estudio para otros 1,000 estudiantes, ¡podríamos encontrar que en realidad es bastante común no estudiar mucho!
Cuando tenemos más datos disponibles, nuestra muestra se vuelve más confiable. Esto hace que sea más fácil considerar los valores atípicos como valores que caen por debajo o por encima de los percentiles dentro de los cuales la mayoría de los datos se encuentran. pandas de cuantil para excluir las observaciones por debajo del percentil 0.01 (el valor por encima del cual residen el 99% de los datos).
>>>
Minimum:6.00
Mean:10.98
Median:10.00
Mode:9.00
Maximum:16.00
Consejo : también puede eliminar los valores atípicos en el extremo superior de la distribución definiendo un umbral con un valor de percentil alto. Por ejemplo, puede usar la cuantil para encontrar el percentil 0.99, por debajo del cual residen el 99% de los datos.
Con los valores atípicos eliminados, el diagrama de cuadro muestra todos los datos dentro de los cuatro cuartiles. Tenga en cuenta que la distribución no es simétrica como es para los datos de grado. Hay algunos estudiantes con tiempos de estudio muy altos de alrededor de 16 horas, pero la mayor parte de los datos es de entre 7 y 13 horas. Los pocos valores extremadamente altos tiran de la media hacia el extremo superior de la escala.
Veamos la densidad para esta distribución.
>>def show_density(var_data):
>>>
Este tipo de distribución se llama rectamente sesgado . La masa de los datos está en el lado izquierdo de la distribución, creando una cola larga a la derecha debido a los valores en el extremo alto extremo, que tiran de la media hacia la derecha.
Medidas de varianza
Así que ahora tenemos una buena idea de dónde están las distribuciones de datos en la mitad de la calificación y el estudio de las horas de estudio. Sin embargo, hay otro aspecto de las distribuciones que debemos examinar: ¿cuánta variabilidad hay en los datos?
Las estadísticas típicas que miden la variabilidad en los datos incluyen:
- Rango : la diferencia entre lo máximo y mínimo. No hay una función incorporada para esto, pero es fácil de calcular usando las Min y Max .
- Varianza : el promedio de la diferencia cuadrada de la media. incorporada VAR para encontrar esto.
- Desviación estándar : la raíz cuadrada de la varianza. incorporada STD para encontrar esto.
>>for col_name in ['Grade','StudyHours']:
>>>
Grade:
- Range: 94.00
- Variance: 472.54
- Std.Dev: 21.74
StudyHours:
- Range: 15.00
- Variance: 12.16
- Std.Dev: 3.49
De estas estadísticas, la desviación estándar es generalmente la más útil. Proporciona una medida de varianza en los datos en la misma escala que los datos en sí (por lo tanto, los puntos de grado para la distribución de calificaciones y las horas para la distribución del estudio). Cuanto mayor sea la desviación estándar, más varianza hay al comparar valores en la distribución con la media de distribución; En otras palabras, los datos están más extendidos.
Cuando se trabaja con una normal distribución Ejecute la siguiente celda para ver la relación entre las desviaciones estándar y los datos en la distribución normal.
Las líneas horizontales muestran el porcentaje de datos dentro de uno, dos y tres desviaciones estándar de la media (más o menos).
En cualquier distribución normal:
- Aproximadamente el 68.26% de los valores caen dentro de una desviación estándar de la media.
- Aproximadamente el 95.45% de los valores caen dentro de dos desviaciones estándar de la media.
- Aproximadamente el 99.73% de los valores caen dentro de tres desviaciones estándar de la media.
Entonces, debido a que sabemos que la calificación media es 49.18, la desviación estándar es 21.74, y la distribución de grados es aproximadamente normal, podemos calcular que el 68.26% de los estudiantes deben alcanzar una calificación entre 27.44 y 70.92.
Las estadísticas descriptivas
que hemos utilizado para comprender la distribución de las variables de
datos del estudiante son la base del análisis estadístico. Debido a que
son una parte tan importante de explorar sus datos, hay un incorporado describe
Método del objeto DataFrame que devuelve las principales estadísticas descriptivas para todas las columnas numéricas.
>>>
StudyHours | Grade | |
---|---|---|
count | 22.000000 | 22.000000 |
mean | 10.522727 | 49.181818 |
std | 3.487144 | 21.737912 |
min | 1.000000 | 3.000000 |
25% | 9.000000 | 36.250000 |
50% | 10.000000 | 49.500000 |
75% | 12.375000 | 62.750000 |
max | 16.000000 | 97.000000 |
>>_df_2.plot(kind='scatter', x='StudyHours', y='Grade', s=32, alpha=.8)
>>plt.gca().spines[['top', 'right',]].set_visible(False)
>>_df_0['StudyHours'].plot(kind='hist', bins=20, title='StudyHours')
>>plt.gca().spines[['top', 'right',]].set_visible(False)
>>_df_1['Grade'].plot(kind='hist', bins=20, title='Grade')
>>plt.gca().spines[['top', 'right',]].set_visible(False)
Comparación de datos
Ahora que sabe algo sobre la distribución estadística de los datos en su conjunto de datos, está listo para examinar sus datos para identificar cualquier relación aparente entre variables.
En primer lugar, eliminemos de cualquier fila que contenga valores atípicos para que tengamos una muestra que sea representativa de una clase típica de estudiantes. Identificamos que la columna StudyHours contiene algunos valores atípicos con valores extremadamente bajos, por lo que eliminaremos esas filas.
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 |
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 |
>>from matplotlib import pyplot as plt
>>df_sample.plot(kind='scatter', x='StudyHours', y='Grade', s=32, alpha=.8)
>>plt.gca().spines[['top', 'right',]].set_visible(False)
Comparación de variables numéricas y categóricas
Los datos incluyen dos numéricas variables casas de estudio y grado ) y dos categóricas variables nombre y pase ). Comencemos por comparar la StudyHours columna de pase para ver si hay una relación aparente entre el número de horas estudiadas y una calificación pasajera.
Para hacer esta comparación, creemos gráficos de caja que muestren la distribución de casas de estudio para cada valor de aprobación posible (verdadero y falso).
Comparando las distribuciones de las casas de estudio, es inmediatamente evidente (si no particularmente sorprendente) que los estudiantes que aprobaron el curso tendieron a estudiar durante más horas que los estudiantes que no lo hicieron. Entonces, si desea predecir si es probable que un estudiante pase o no el curso, la cantidad de tiempo que pasa estudiando puede ser un buen indicador predictivo.
Comparación de variables numéricas
Ahora comparemos dos variables numéricas. Comenzaremos creando un gráfico de barras que muestre horas de grado y estudio.
>>>
El gráfico muestra barras para las horas de grado y de estudio para cada estudiante, pero no es fácil de comparar porque los valores están en diferentes escalas. Se mide una calificación en puntos de grado (y varía de 3 a 97), y el tiempo de estudio se mide en horas (y varía de 1 a 16).
Una técnica común cuando se trata de datos numéricos en diferentes escalas es normalizar los datos para que los valores retengan su distribución proporcional, pero se miden en la misma escala. Para lograr esto, utilizaremos una técnica llamada Minmax Scaling que distribuye los valores proporcionalmente en una escala de 0 a 1. Puede escribir el código para aplicar esta transformación, pero la Scikit-Learn proporciona un escalador para hacerlo por usted .
>>>
Con
los datos normalizados, es más fácil ver una relación aparente entre el
grado y el tiempo de estudio. No es un partido exacto, pero
definitivamente parece que los estudiantes con calificaciones más altas
tienden a haber estudiado más.
Así que parece haber una correlación entre el tiempo de estudio y el grado. De hecho, hay una de correlación que podemos usar para cuantificar la relación entre estas columnas.
>>>
0.9117666413789677
La estadística de correlación es un valor entre -1 y 1 que indica la fuerza de una relación. Los valores anteriores 0 indican una positiva (los valores altos de una variable tienden a coincidir con los valores altos del otro), mientras que los valores inferiores 0 indican una negativa (valores altos de una variable tienden a coincidir con valores bajos del otro). En este caso, el valor de correlación es cercano a 1, que muestra una correlación muy positiva entre el tiempo de estudio y el grado.
Nota : Los científicos de datos a menudo citan la máxima " La correlación no es causalidad ". En otras palabras, por tentador que pueda ser, no debe interpretar la correlación estadística como explicar por qué uno de los valores es alto. En el caso de los datos del estudiante, las estadísticas demuestran que los estudiantes con altos calificaciones tienden a tener altas cantidades de tiempo de estudio, pero esto no es lo mismo que demostrar que lograron calificaciones altas porque estudiaron mucho. Podría usar igualmente la estadística como evidencia para apoyar la conclusión sin sentido de que los estudiantes estudiaron mucho porque sus calificaciones iban a ser altas.
Otra forma de visualizar la correlación aparente entre dos columnas numéricas es usar una de dispersión .
>># Create a scatter plot
>>>
Una vez más, parece que hay un patrón discernible en el que los estudiantes que estudiaron la mayoría de las horas también son los estudiantes que obtuvieron las calificaciones más altas.
Podemos ver esto más claramente agregando una de regresión línea línea de mejor ajuste ) a la trama que muestra la tendencia general en los datos. Para hacer esto, utilizaremos una técnica estadística llamada regresión de mínimos cuadrados .
Recuerde cuando estaba aprendiendo a resolver ecuaciones lineales en la escuela y recuerde que la la pendiente-intersección de una ecuación lineal se ve así:
En esta ecuación, y y x son las variables de coordenadas, M es la pendiente de la línea, y B es la intersección y (donde la línea pasa por el eje y).
En el caso de nuestra gráfica de dispersión para los datos de nuestros estudiantes, ya tenemos nuestros valores para X ( estudio de estudio ) e y ( grado ), por lo que solo necesitamos calcular la intersección y la pendiente de la línea recta que se encuentra más cerca de esos puntos. Luego, podemos formar una ecuación lineal que calcule un nuevo Y en esa línea para cada uno de nuestros X ( StudyHours ). Para evitar confusiones, llamaremos a este nuevo Y valor F (x) (porque es la salida de una ecuación lineal de Finción basada en x ). La diferencia entre el Y ( grado ) original y el F (x) es el error entre nuestra línea de regresión y la calificación alcanzada por el estudiante. Nuestro objetivo es calcular la pendiente e intercepción para una línea con el error general más bajo.
Específicamente, definimos el error general tomando el error para cada punto, cuadrarlo y agregar todos los errores al cuadrado juntos. La línea de mejor ajuste es la línea que nos da el valor más bajo para la suma de los errores al cuadrado, de ahí la regresión de mínimos cuadrados .
Afortunadamente, no necesita codificar el cálculo de la regresión usted mismo. El SciPy incluye una de estadísticas que proporciona un Linregress para hacer el trabajo duro por usted. Esto devuelve (entre otras cosas) los coeficientes que necesita para la ecuación de pendiente: pendiente ( m ) e intercepción ( b ) basada en un par dado de muestras variables que desea comparar.
>>>
Tenga en cuenta que esta vez, el código trazó dos cosas distintas: la gráfica de dispersión de las horas de estudio y las calificaciones de la muestra se traza como antes, y luego se traza una línea de mejor ajuste basada en los coeficientes de regresión de mínimos cuadrados.
Los coeficientes de pendiente e intercepción calculados para la línea de regresión se muestran sobre la gráfica.
La línea se basa en los F (x) calculados para cada de estudio . Ejecute la siguiente celda para ver una tabla que incluya los siguientes valores:
- El estudio de las casas para cada estudiante
- La calificación alcanzada por cada estudiante
- El F (x) calculado utilizando los coeficientes de la línea de regresión
- El error entre el F (x) y el de grado valor
Algunos de los errores, particularmente en los extremos, son bastante grandes (hasta más de 17.5 puntos de grado). Pero, en general, la línea está bastante cerca de las calificaciones reales.
StudyHours | Grade | fx | error | |
---|---|---|---|---|
0 | 10.00 | 50.0 | 45.217846 | -4.782154 |
1 | 11.50 | 50.0 | 54.687985 | 4.687985 |
2 | 9.00 | 47.0 | 38.904421 | -8.095579 |
3 | 16.00 | 97.0 | 83.098400 | -13.901600 |
4 | 9.25 | 49.0 | 40.482777 | -8.517223 |
6 | 11.50 | 53.0 | 54.687985 | 1.687985 |
7 | 9.00 | 42.0 | 38.904421 | -3.095579 |
8 | 8.50 | 26.0 | 35.747708 | 9.747708 |
9 | 14.50 | 74.0 | 73.628262 | -0.371738 |
10 | 15.50 | 82.0 | 79.941687 | -2.058313 |
11 | 13.75 | 62.0 | 68.893193 | 6.893193 |
12 | 9.00 | 37.0 | 38.904421 | 1.904421 |
13 | 8.00 | 15.0 | 32.590995 | 17.590995 |
14 | 15.50 | 70.0 | 79.941687 | 9.941687 |
15 | 8.00 | 27.0 | 32.590995 | 5.590995 |
16 | 9.00 | 36.0 | 38.904421 | 2.904421 |
17 | 6.00 | 35.0 | 19.964144 | -15.035856 |
18 | 10.00 | 48.0 | 45.217846 | -2.782154 |
19 | 12.00 | 52.0 | 57.844698 | 5.844698 |
20 | 12.50 | 63.0 | 61.001410 | -1.998590 |
21 | 12.00 | 64.0 | 57.844698 | -6.155302 |
>>_df_9.plot(kind='scatter', x='StudyHours', y='Grade', s=32, alpha=.8)
>>plt.gca().spines[['top', 'right',]].set_visible(False)
Usar los coeficientes de regresión para la predicción
Ahora que tiene los coeficientes de regresión para el tiempo de estudio y la relación de grado, puede usarlos en una función para estimar la calificación esperada para una cantidad dada de estudio.
>>>
Studying for 14 hours per week may result in a grade of 70
# Estudiar por 14 horas por semana obtiene un resultado de grado de 70
Entonces,
al aplicar estadísticas a los datos de muestra, ha determinado una
relación entre el tiempo de estudio y el grado y encapsuló esa relación
en una función general que puede usarse para predecir una calificación
durante una cantidad determinada de tiempo de estudio.
Esta técnica es, de hecho, la premisa básica del aprendizaje automático. Puede tomar un conjunto de datos de muestra que incluya una o más funciones (en este caso, el número de horas estudiadas) y un de etiqueta (en este caso, el grado alcanzado) y usar los datos de muestra para derivar una función que calcula Valores de etiqueta previstos para cualquier conjunto de características.
Resumen
Aquí hemos mirado:
- Qué valor atípico y cómo eliminarlos
- Cómo los datos pueden ser sesgados
- Cómo mirar la propagación de datos
- Formas básicas de comparar variables, como calificaciones y tiempo de estudio
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