tacosdedatos

Cover image for Un minutito: Anatomia de una timestamp
Sergio Sánchez
Sergio Sánchez

Posted on

Un minutito: Anatomia de una timestamp

En este post analizamos las partes que componen una estampa de tiempo y las utilizamos para visualizar la misma serie de tiempo de 6 distintas maneras.


En realidad una ‘serie de tiempo’ o time series es simplemente un grupo de datos asociados con una fecha. Es muy común que estos datos sean muy similares (o incluso el 'mismo' dato) y que lo único que cambia es esta estampa de tiempo (timestamp).

Algunos ejemplos de series de tiempo serían la asistencia en la escuela, visitas a tu blog, o en este caso el historial de reproducciones de tu cuenta de Spotify.

En realidad lo que estas analizando es “el evento”, el hecho de que algo sucedió y cuando- no necesariamente lo que sucedió.

Mas adelante veremos como usamos “lo que sucedió” o la categoría del evento en nuestros análisis.

Un ejemplo práctico

En estos ejemplos vamos a analizar mis historial de reproducciones de Spotify para el 2022. En su forma mas simple estos eventos tienen 4 atributos:

  1. La estampa de tiempo cuando terminó la reproducción en formato UTC
  2. Nombre de la canción
  3. Nombre del artista
  4. Milisegundos reproducidos (vamos a ignorar esto por el momento)

drawing

Tengo como 10,000 records así para el 2022.

Si visualizamos estas estampas de tiempo se ven así

código
alt.Chart(data).mark_tick().encode(
    x = 'endTime:T',
).properties(
    height = 150
)
Enter fullscreen mode Exit fullscreen mode

tick chart

Los otros dos atributos que tenemos son categorías ‘nominales’ - grupos separados (discretos) pero sin relación el uno al otro (desordenados). Es decir, la categoría “Dharius” es distinta a “Cartel de Santa” y una no es mayor o menor a la otra.

meme cds dharius juego de gemelas

Un ejemplo de categorías discretas pero ordenadas sería los niveles de riesgo en algún sistema: “bajo”, “medio”, “alto”. Sabemos que “alto” es mayor a “bajo”.

Así que tenemos un solo atributo para trabajar: la estampa de tiempo

Anatomía de una estampa de tiempo

Aunque la estampa de tiempo sea un solo dato tiene muchísima información. Para empezar sabemos que está en formato UTC - Universal Coordinated Time (aparentemente los gringos y los franceses no podían decidirse si usar CUT por sus siglas en inglés o TUC por sus siglas en francés y prefirieron que ambos estuvieran mal en lugar de darle la razón a los otros 🙄).

Antes que nada, yo vivo en la bahía de San Francisco en California así que estoy 8 horas ‘antes’ así que este record es en realidad

utc a pst

Ahora veamos mas a fondo esta estampa de tiempo

timestamp anatomy

Un solo dato tiene, para empezar y por lo menos, 5 atributos: año, mes, día, hora, minuto. Esto significa que podemos analizar estos eventos por cada uno de estos.

Estos datos son solo para el 2022 así que el atributo año no nos dice mucho pero tenemos aun 4 atributos para analizar y mínimo 6 combinaciones:

principal

  • Mes x día
alt.Chart(data).mark_circle().encode(
    x = alt.X('date(endTime)', title = ''),
    y = alt.Y("month(endTime):O", title = "Mes x Día"),
    size = alt.Size("count()", title = "Número de reproducciones")
).properties(
    height = 150
)
Enter fullscreen mode Exit fullscreen mode

Mes por dia

  • Mes x hora
alt.Chart(data).mark_circle().encode(
    x = alt.X('hours(endTime)', title = ''),
    y = alt.Y("month(endTime):O", title = "Mes x Hora"),
    size = alt.Size("count()", title = "Número de reproducciones")
).properties(
    height = 150
)
Enter fullscreen mode Exit fullscreen mode

Mes por hora

  • Mes x minuto
alt.Chart(data).mark_circle().encode(
    x = alt.X('minutes(endTime)', title = ''),
    y = alt.Y("month(endTime):O", title = "Mes x Minuto"),
    size = alt.Size("count()", title = "Número de reproducciones")
).properties(
    height = 150
)
Enter fullscreen mode Exit fullscreen mode

Mes por minuto

  • Día x hora
alt.Chart(data).mark_circle().encode(
    x = alt.X('hours(endTime)', title = ''),
    y = alt.Y("date(endTime):O", title = "Dia x Hora"),
    size = alt.Size("count()", title = "Número de reproducciones")
).properties(
    height = 150
)
Enter fullscreen mode Exit fullscreen mode

dia por hora

  • Día x minuto
alt.Chart(data).mark_circle().encode(
    x = alt.X('minutes(endTime)', title = ''),
    y = alt.Y("date(endTime):O", title = "Dia x Minuto"),
    size = alt.Size("count()", title = "Número de reproducciones")
).properties(
    height = 150
)
Enter fullscreen mode Exit fullscreen mode

dia por minuto

  • Hora x Minuto
alt.Chart(data).mark_circle().encode(
    x = alt.X('minutes(endTime)', title = ''),
    y = alt.Y("hours(endTime):O", title = "Hora x Minuto"),
    size = alt.Size("count()", title = "Número de reproducciones")
).properties(
    height = 150
)
Enter fullscreen mode Exit fullscreen mode

hora por minuto

Aquí ya podemos ver ciertos patrones emerger:

  1. Parece que hay un poco mas reproducciones Julio, Agosto, Septiembre
  2. Hay menos reproducciones durante entre las 6 y las 13 horas
  3. Puede que al inicio del año haya un poco mas de reproducciones en la mañana y hacia el Julio, Agosto, Septiembre hay mas reproducciones en la tarde.
  4. No parece haber mucha variación entre los minutos o entre los días del mes.

En la siguiente parte de esta serie de posts vamos ver aun más información que podemos extraer de una estampa de tiempo.

Discussion (0)