Un algoritmo para manipular listas para un gráfico de barras apiladas de Bokeh
Estoy recibiendo datos de una API que estoy tratando de incorporar en un gráfico de barras apiladas de Bokeh. La documentación de Bokeh muestra que necesito este formato:
data = {
x: [1, 2, 3, 4, 5],
y1: [1, 2, 4, 3, 4],
y2: [1, 4, 2, 2, 3],
}
Mis datos salen de mi bucle for de esta manera:
ts = [0, 1, 1, 1, 1, 2, 2, 4, 4, 4]
tx = [0, 233, 121, 34, 4, 22, 522, 11, 245, 3]
y, por lo tanto, deben quedar de esta manera:
# el xlist = los valores únicos de ts
# el número de capas debajo = el recuento (4) del elemento más común de ts (1)
# la longitud de cada lista de capas = el número de elementos únicos (4) de ts (0,1,2,4)
data = {
xlist : [0, 1, 2, 4]
layer0 : [0, 233, 22, 11]
layer1 : [0, 121, 522, 245]
layer2 : [0, 34, 0, 3]
layer3 : [0, 4, 0, 0]
}
Aclaraciones:
1. Los valores de ts siempre serán >= al valor anterior, serán marcas de tiempo de época.
2. Siempre habrá 2 listas de igual longitud.
Esto me brinda la estructura básica del diccionario y siento que estoy cerca, pero la lógica en los bucles está fuera de mi alcance. Si alguien puede ayudarme con un enfoque de mejores prácticas para esto, lo agradecería.
from statistics import mode
def stacker(list1, list2):
data = {}
xlist = list(set(list1))
if len(list1) != len(list2):
layer0 = [0]*len(list1)
data = dict(xlist, layer0)
print("las listas no tenían la misma longitud")
return data
data['xlist'] = xlist
modeVal = mode(list1)
layercount = list1.count(modeVal)
for i in range(layercount):
data['layer' + str(i)] = []
# bucles
return data
davy.ai
Para crear el formato de datos de la gráfica de barras apiladas a partir de las listas proporcionadas, puedes seguir estos pasos:
ts
. Puedes usar la funciónmode
del módulostatistics
para obtener esta cantidad.Crea un diccionario vacío llamado
data
para almacenar los datos finales en el formato requerido.Obtén los valores únicos de la lista
ts
para usarlos como valores del eje x en los datos finales. Puedes usar la funciónset
para obtener los valores únicos y luego convertir el conjunto nuevamente a una lista.Para cada capa en la gráfica de barras apiladas (es decir, desde 0 hasta el valor de
layercount
), crea una lista vacía en el diccionariodata
con una clave delayer0
,layer1
, etc.Recorre cada valor en la lista
ts
y agrega el valor correspondiente de la listatx
a la lista de capas adecuada en el diccionariodata
.Para las capas que no tienen un valor para un valor particular del eje x, rellena con 0.
Aquí tienes un código de ejemplo para lograr esto:
Puedes llamar a esta función con tus listas
ts
ytx
para obtener el formato de datos requerido para la gráfica de barras apiladas de Bokeh. Por ejemplo:Esto resultará en el diccionario
data
que contiene los valores del eje x y los valores de las capas en el formato requerido para la gráfica de barras apiladas de Bokeh.