Uso de NumPy para analizar mis hábitos diarios (sueño, tiempo frente a la pantalla y estado de ánimo)

una pequeña serie de proyectos de NumPy en la que intento construir algo con NumPy en lugar de simplemente revisar funciones y documentación aleatorias. Siempre he sentido que la mejor manera de aprender es haciendo, por eso en este proyecto quería crear algo práctico y personal.

La idea era simple: analizar mis hábitos diarios (sueño, horas de estudio, tiempo frente a la pantalla, ejercicio y estado de ánimo) y ver cómo afectan mi productividad y bienestar general. Los datos no son reales; Es ficticio, simulado durante 30 días. Pero el objetivo no es la precisión de los datos, sino aprender a utilizar NumPy de manera significativa.

Así que veamos el proceso paso a paso.

Paso 1: cargar y comprender los datos

Comencé creando una matriz NumPy simple que contenía 30 filas (una para cada día) y seis columnas, cada columna representaba una métrica de hábito diferente. Luego lo guardé como un archivo .npy para poder cargarlo fácilmente más tarde.

# TODO: Importar NumPy y cargar el archivo de datos .npy importar numpy como np data = np.load(‘activity_data.npy’)

Una vez cargado, quería confirmar que todo lucía como se esperaba. Entonces verifiqué la forma (para saber cuántas filas y columnas había) y el número de dimensiones (para confirmar que es una tabla 2D, no una lista 1D).

# TODO: Imprimir forma de matriz, primeras filas, etc. data.shape data.ndim

SALIDA: 30 filas, 6 columnas y ndim=2

También imprimí las primeras filas solo para confirmar visualmente que cada valor se veía bien; por ejemplo, que las horas de sueño no eran negativas o que los valores del estado de ánimo estaban dentro de un rango razonable.

# TODO: datos de las 5 filas principales[:5]

Producción:

formación([[ 1. , 6.5, 5. , 4.2, 20. , 6. ],
[ 2. , 7.2, 6. , 3.1, 35. , 7. ],
[ 3. , 5.8, 4. , 5.5, 0. , 5. ],
[ 4. , 8. , 7. , 2.5, 30. , 8. ],
[ 5. , 6. , 5. , 4.8, 10. , 6. ]])

Paso 2: Validar los datos

Antes de realizar cualquier análisis, quería asegurarme de que los datos tuvieran sentido. Es algo que a menudo nos saltamos cuando trabajamos con datos ficticios, pero sigue siendo una buena práctica.

Entonces verifiqué:

Sin horas de sueño negativas Sin puntuaciones de estado de ánimo inferiores a 1 o superiores a 10

Para dormir, eso significó seleccionar la columna de suspensión (índice 1 en mi matriz) y verificar si algún valor estaba por debajo de cero.

# Asegúrese de que los valores sean datos razonables (sin sueño negativo)[:, 1] < 0

Producción:

formación([False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False])

Esto significa que no hay nada negativo. Luego hice lo mismo con el estado de ánimo. Conté para encontrar que la columna de estado de ánimo estaba en el índice 5 y verifiqué si alguna estaba por debajo de 1 o por encima de 10.

# ¿Está el estado de ánimo fuera de rango? datos[:, 5] < 1 dato[:, 5] > 10

Obtuvimos el mismo resultado.

Todo parecía bien, así que pudimos seguir adelante.

Paso 3: dividir los datos en semanas

Tenía 30 días de datos y quería analizarlos semana a semana. El primer instinto fue usar la función split() de NumPy, pero falló porque 30 no es divisible por 4. Entonces, en su lugar, usé np.array_split(), que permite divisiones desiguales.

Eso me dio:

Semana 1 → 8 días Semana 2 → 8 días Semana 3 → 7 días Semana 4 → 7 días # TODO: dividir los datos en semana 1, semana 2, semana 3, semana 4 Weekly_data = np.array_split(data, 4) Weekly_data

Producción:

[array([[ 1. , 6.5, 5. , 4.2, 20. , 6. ],
[ 2. , 7.2, 6. , 3.1, 35. , 7. ],
[ 3. , 5.8, 4. , 5.5, 0. , 5. ],
[ 4. , 8. , 7. , 2.5, 30. , 8. ],
[ 5. , 6. , 5. , 4.8, 10. , 6. ],
[ 6. , 7.5, 6. , 3.3, 25. , 7. ],
[ 7. , 8.2, 3. , 6.1, 40. , 7. ],
[ 8. , 6.3, 4. , 5. , 15. , 6. ]]), matriz ([[ 9. , 7. , 6. , 3.2, 30. , 7. ],
[10. , 5.5, 3. , 6.8, 0. , 5. ],
[11. , 7.8, 7. , 2.9, 25. , 8. ],
[12. , 6.1, 5. , 4.5, 15. , 6. ],
[13. , 7.4, 6. , 3.7, 30. , 7. ],
[14. , 8.1, 2. , 6.5, 50. , 7. ],
[15. , 6.6, 5. , 4.1, 20. , 6. ],
[16. , 7.3, 6. , 3.4, 35. , 7. ]]), matriz ([[17. , 5.9, 4. , 5.6, 5. , 5. ],
[18. , 8.3, 7. , 2.6, 30. , 8. ],
[19. , 6.2, 5. , 4.3, 10. , 6. ],
[20. , 7.6, 6. , 3.1, 25. , 7. ],
[21. , 8.4, 3. , 6.3, 40. , 7. ],
[22. , 6.4, 4. , 5.1, 15. , 6. ],
[23. , 7.1, 6. , 3.3, 30. , 7. ]]), matriz ([[24. , 5.7, 3. , 6.7, 0. , 5. ],
[25. , 7.9, 7. , 2.8, 25. , 8. ],
[26. , 6.2, 5. , 4.4, 15. , 6. ],
[27. , 7.5, 6. , 3.5, 30. , 7. ],
[28. , 8. , 2. , 6.4, 50. , 7. ],
[29. , 6.5, 5. , 4.2, 20. , 6. ],
[30. , 7.4, 6. , 3.6, 35. , 7. ]])]

Ahora los datos estaban divididos en cuatro fragmentos y podía analizar fácilmente cada uno por separado.

Paso 4: Calcular métricas semanales

Quería tener una idea de cómo cambiaba cada hábito de una semana a otra. Entonces me concentré en cuatro cosas principales:

Sueño promedio Horas de estudio promedio Tiempo promedio frente a la pantalla Puntuación promedio del estado de ánimo

Guardé la matriz de cada semana en una variable separada y luego usé np.mean() para calcular los promedios de cada métrica.

Horas promedio de sueño

# almacenar en variables semana_1 = datos_semanales[0]
semana_2 = datos_semanales[1]
semana_3 = datos_semanales[2]
semana_4 = datos_semanales[3]

# TODO: Calcular el sueño promedio semana1_avg_sleep = np.mean(semana_1[:, 1]) semana2_promedio_sueño = np.media(semana_2[:, 1]) semana3_promedio_sueño = np.media(semana_3[:, 1]) semana4_promedio_sueño = np.media(semana_4[:, 1])

Horas promedio de estudio

# TODO: Calcular el promedio de horas de estudio semana1_avg_study = np.mean(semana_1[:, 2]) semana2_avg_study = np.media(semana_2[:, 2]) semana3_avg_study = np.media(semana_3[:, 2]) semana4_avg_study = np.media(semana_4[:, 2])

Tiempo promedio frente a la pantalla

# TODO: Calcular el tiempo promedio de pantalla semana1_avg_screen = np.mean(semana_1[:, 3]) semana2_avg_screen = np.media(semana_2[:, 3]) semana3_avg_screen = np.media(semana_3[:, 3]) semana4_promedio_pantalla = np.media(semana_4[:, 3])

Puntuación media del estado de ánimo

# TODO: Calcular la puntuación promedio del estado de ánimo semana1_avg_mood = np.mean(semana_1[:, 5]) semana2_avg_mood = np.media(semana_2[:, 5]) semana3_avg_mood = np.media(semana_3[:, 5]) semana4_avg_mood = np.media(semana_4[:, 5])

Luego, para que todo fuera más fácil de leer, formateé bien los resultados.

# TODO: Mostrar claramente los resultados semanales print(f”Semana 1 — Sueño promedio: {week1_avg_sleep:.2f} hrs, Estudio: {week1_avg_study:.2f} hrs, “ f”Tiempo de pantalla: {week1_avg_screen:.2f} hrs, Puntuación de estado de ánimo: {week1_avg_mood:.2f}”) print(f”Semana 2 — Sueño promedio: {week2_avg_sleep:.2f} hrs, Estudio: {week2_avg_study:.2f} hrs, “ f”Tiempo de pantalla: {week2_avg_screen:.2f} hrs, Puntuación de estado de ánimo: {week2_avg_mood:.2f}”) print(f”Semana 3 — Sueño promedio: {week3_avg_sleep:.2f} hrs, Estudio: {week3_avg_study:.2f} hrs, “ f”Tiempo de pantalla: {week3_avg_screen:.2f} hrs, Puntuación del estado de ánimo: {week3_avg_mood:.2f}”) print(f”Semana 4 — Sueño promedio: {week4_avg_sleep:.2f} hrs, Estudio: {week4_avg_study:.2f} hrs, “ f”Tiempo de pantalla: {week4_avg_screen:.2f} hrs, Puntuación de estado de ánimo: {week4_avg_mood:.2f}”)

Producción:

Semana 1: sueño promedio: 6,94 horas, estudio: 5,00 horas, tiempo frente a la pantalla: 4,31 horas, puntaje de estado de ánimo: 6,50 Semana 2: sueño promedio: 6,97 horas, estudio: 5,00 horas, tiempo frente a la pantalla: 4,39 horas, puntaje de estado de ánimo: 6,62 Semana 3: sueño promedio: 7,13 horas, estudio: 5.00 hrs, Tiempo frente a la pantalla: 4.33 hrs, Puntuación de estado de ánimo: 6.57 Semana 4 – Sueño promedio: 7,03 h, Estudio: 4,86 h, Tiempo frente a la pantalla: 4,51 h, Puntuación del estado de ánimo: 6,57

Paso 5: Dar sentido a los resultados

Una vez que imprimí los números, comenzaron a aparecer algunos patrones.

Mis horas de sueño fueron bastante estables durante las primeras dos semanas (alrededor de 6,9 ​​horas), pero en la tercera semana aumentaron a alrededor de 7,1 horas. Eso significa que estuve “dormiendo mejor” a medida que avanzaba el mes. En la cuarta semana, se mantuvo aproximadamente en alrededor de 7,0 horas.

Para las horas de estudio, fue todo lo contrario. Las semanas uno y dos tuvieron un promedio de alrededor de 5 horas por día, pero en la cuarta semana, se había reducido a aproximadamente 4 horas. Básicamente, comencé fuerte pero poco a poco perdí impulso, lo cual, sinceramente, suena bien.

Luego llegó el tiempo frente a la pantalla. Éste dolió un poco. En la primera semana, eran aproximadamente 4,3 horas por día y seguía aumentando cada semana. El ciclo clásico de ser productivo desde el principio y luego, lentamente, derivar hacia más “pausas de desplazamiento” más adelante en el mes.

Finalmente, hubo humor. Mi puntuación de estado de ánimo comenzó alrededor de 6,5 en la primera semana, subió ligeramente a 6,6 en la segunda semana y luego se mantuvo ahí durante el resto del período. No cambió dramáticamente, pero fue interesante ver un pequeño aumento en la segunda semana, justo antes de que mis horas de estudio disminuyeran y mi tiempo frente a la pantalla aumentara.

Para hacer las cosas interactivas, pensé que sería genial visualizar usando matplotlib.

Paso 6: buscar patrones

Ahora que tenía los números, quería saber por qué mi estado de ánimo mejoró en la segunda semana.

Entonces comparé las semanas una al lado de la otra. La segunda semana tuvo un sueño decente, muchas horas de estudio y un tiempo de pantalla relativamente bajo en comparación con las semanas posteriores.

Eso podría explicar por qué mi estado de ánimo alcanzó su punto máximo allí. Para la tercera semana, aunque dormía más, mis horas de estudio habían comenzado a disminuir; tal vez descansaba más pero hacía menos, lo que no mejoró mi estado de ánimo tanto como esperaba.

Esto es lo que me gustó del proyecto: no se trata de que los datos sean reales, sino de cómo puedes usar NumPy para explorar patrones, relaciones y pequeños conocimientos. Incluso los datos ficticios pueden contar una historia cuando se los analiza de la manera correcta.

Paso 7: Conclusión y próximos pasos

En este pequeño proyecto, aprendí algunas cosas clave, tanto sobre NumPy como sobre análisis estructurantes como este.

Comenzamos con una serie de hábitos diarios ficticios, aprendimos cómo verificar su estructura y validez, dividirlos en partes significativas (semanas) y luego usamos operaciones NumPy simples para analizar cada segmento.

Es el tipo de proyecto pequeño que le recuerda que el análisis de datos no siempre tiene que ser complejo. A veces se trata simplemente de hacer preguntas simples como “¿Cómo cambia mi tiempo frente a la pantalla con el tiempo?” o “¿Cuándo me siento mejor?”

Si quisiera llevar esto más lejos (lo cual probablemente lo haré), hay muchas direcciones a seguir:

Encuentre los mejores y peores días en general. Compare los días laborables con los fines de semana. O incluso cree una “puntaje de bienestar” simple basada en múltiples hábitos combinados.

Pero eso probablemente será para la próxima parte de la serie.

Por ahora, estoy feliz de haber podido aplicar NumPy a algo que se siente real y con el que se puede identificarse, no solo matrices y números abstractos, sino también hábitos y emociones. Ése es el tipo de aprendizaje que perdura.

Gracias por leer.

Si sigues la serie, intenta recrearla con tus propios datos ficticios. Incluso si sus números son aleatorios, el proceso le enseñará cómo cortar, dividir y analizar matrices como un profesional.