Skip to content

Manejo de Software II

Published: at 12:00 AM

Table of contents

Open Table of contents

Manejo de software

Representación de datos en tablas de Python

(Aquí seguimos la información de: https://lectures.scientific-python.org/packages/statistics/index.html#data-representation-and-interaction)

La información rectangular se suele representar archivos separados por comas:

"";"Gender";"FSIQ";"VIQ";"PIQ";"Weight";"Height";"MRI_Count"
"1";"Female";133;132;124;"118";"64.5";816932
"2";"Male";140;150;124;".";"72.5";1001121
"3";"Male";139;123;150;"143";"73.3";1038437
"4";"Male";133;129;128;"172";"68.8";965353
"5";"Female";137;132;134;"147";"65.0";951545

Estos datos están en https://lectures.scientific-python.org/_downloads/cc48b617db83afe66c7e4e955ea3f3bd/brain_size.csv

Como vimos anteriormente, se puede leer la información usando la función read_csv de pandas:

import pandas
data = pandas.read_csv('examples/brain_size.csv', sep=';', na_values=".")
data.head()

Un dato interesante es el . que aparece relacionado como ‘Weight’ del segundo registro. Se interpreta como el caracter que se usó para identificar los datos faltantes. Por eso en éste caso se indica el uso de la opción

na_values="."

Tablas Pivote, agrupamientos

Son las tablas para la cual los valores se calculan agregando grupos de valores individuales de una tabla más extensa.

En Pandas se construye primero una función agrupamientoy, mediante la función groupby; y luego se construyen las tablas pivote. Por ejemplo, para agrupar por género en el ejemplo que acabamos de ver:

groupby_gender = data.groupby('Gender')

Y se pueden calcular promedios de todas las demás variables con:

groupby_gender.mean()

O para una única variable como:

for gender,value in groupby_gender['VIQ']:
    print(gender,value.mean())

Ejercicio

Fracción de nacimientos por talla

Cargue los datos de Nacimientos de 1998, de la carpeta de Datos. Encuentre cuál es la fracción de nacimientos en las diferentes categorías de tallas. Revise el diccionario de datos e interprete sus resultados.

n_hijosv por n_emb

Calcule el valor del promedio de la variable n_hijosv para cada categoría de n_emb. Hay alguna tendencia? A que podría deberse?

Prueba de Hipótesis para el Promedio

Como habíamos visto antes, la prueba de hipótesis para el promedio consiste en comparar el valor del punto crítico de una distribución t-student con n-1 grados de libertad con el estadístico de prueba.

Otra interpretación es la de “calcular la probabilidad de observar valores más extremos que el obtenido con la estadística de prueba bajo la distribución de muestreo considerada” (Contento, pg310). Esta probabilidad se denomina el valor-p. Se rechaza la hipótesis nula si el valor-p es menor a un valor α\alpha pre-establecido.

Ejemplo

Recordemos la base de datos del DANE con los datos de estadísticas vitales para 1998 que hemos venido trabajando.

https://microdatos.dane.gov.co/index.php/catalog/366/data-dictionary/F1?file_name=Nacimientos_1998

Una de las variables que tiene los datos sin codificar por intervalos es la variable n_hijosv.

Cuál será el promedio de ésta variable? Para hacerlo seguimos el siguiente esquema:

Interpretación Valor-p

La alternativa de calcular la probabilidad de obtener valores más extremos. En R se calcularía con la función pdf. Para este caso:

sp.stats.t.pdf(tc,20)

Se obtiene 0.38. Se interpreta como “la probabilidad de obtener valores más extremos es de 0.38. Dado que para rechazar la hipótesis nula, la probabilidad de los valores extremos debe ser pequeña, en este caso no rechazamos la hipótesis nula. Es coherente con que el promedio sea 2, dentro del margen de error.

Función ttest_1sample

Una forma de calcularlo la prueba de hipótesis es es usar la función ttest_1sample de scipy.stats. Esta función devuelve el valor de la estadística de prueba para una prueba del promedio y el valor-p.

Visualización

Python tiene diferentes librerías que pueden usarse para crear visualizaciones de sus datos. Entre las más conocidas:

Matplotlib

Una buena guía para aprender a usar ésta librería es el libro Python for Data Analysis de McKinney, disponible en línea en https://wesmckinney.com/book/plotting-and-visualization

La librería se llama con:

import matplotlib.pyplot as plt
import numpy as np
plt.ion()   # Para uso en línea de comandos, interactivo
plt.show()  # Para recargar la vista

Graficación básica en matplotlib

En Matplotlib la estructura básica es la figura, se crea con:

fig1 = plt.figure()

Por qué cree que es una asignación?

Si se quieren generar varias sub-gráficas (llamadas ejes), se usa el comando add_sublplot del objeto fig1:

ax1 = fig.add_subplot(2, 2, 1)

O se puede crear un eje por defecto con gca:

ax = fig.gca()

Algunas características de la gráfica corresponderán a fig1 y otras a ax1.

El texto se puede ingresar en LaTeX\LaTeX, usando el comando r'''. Por ejemplo:

np.plt(x,np.cos(x),'--',label='b')
ax.set_title(r'''$cos \theta$''')
ax.set_xlabel(r'''$\theta$''')

Se incluye la etiqueta de la figura con la opción label en la función plot y la función legend:

theta = np.linspace(0,10,100)
plt.plot(theta, np.cos(theta), '--', label='coseno')
plt.legend()

Experimente con las opciones para cambiar la posición de los marcadores (ticks) y su texto, con las funciones: set_xticks y set_xticklabels del objeto ax.

Experimente con las opciones para anotar las gráficas, siguiendo el ejemplo “Annotations and Drawing”, de ‘Python for Data Analysis de McKinney’, en https://wesmckinney.com/book/plotting-and-visualization.

Guardar (exportar) las gráficas

La función es savefig, esta vez de la figura (en nuestro ejemplo fig1). El tipo de gráfico se determina automáticamente por la extensión. En el caso del formato png, la opción dpi da la resolución en “puntos por pulgada”.

Pandas

Esta librería tiene funciones que permiten generar rápidamente gráficas de los conjuntos de datos (dataframes). En “Python for Data Analysis” hay diferentes ejemplos.

En el primer ejemplo generan un conjunto de datos y luego hacen una suma. Sin leer la domucmentación intente explicar qué creería que hacen los siguientes comandos:

datos0 = np.random.standard_normal((10,4))
datos1 = datos0.cumsum(1)
df = pd.DataFrame(datos1, columns=["A","B","C","D"])

[^2]

Ahora imprima el arreglo.

La siguiente instrucción genera una representación de cada una de las variables como una serie, en escala de grises.

plt.style.use('grayscale')
df.plot()

Aquí se usa el índice cómo variable independiente.

Ejercicio: Uniendo conceptos

Construya un diagrama de barras que tenga los conteos de la variable n_hijosv, para los diferentes valores de la variable n_emb, para el conjunto de datos de Nacimientos de 1998.[^4]


Previous Post
Distribución de probabilidad hipergeométrica
Next Post
Taller: Pandas