Parcela de densidad utilizando marinero

Estoy tratando de hacer una gráfica de densidad de la demanda por hora: datos

La ‘hr’ significa diferentes horas, ‘cnt’ significa demanda.

Sé cómo hacer una gráfica de densidad como:

sns.kdeplot(bike['hr']) 

Sin embargo, esto solo funciona cuando se desconoce la demanda de diferentes horas. Así puedo contar cada hora según su demanda. Ahora que sé el recuento de demanda de cada hora, ¿cómo puedo hacer una gráfica de densidad de dichos datos?

Una gráfica de densidad tiene como objective mostrar una estimación de una distribución. Para hacer un gráfico que muestre la densidad de la demanda horaria, realmente esperaríamos ver muchas muestras de la demanda, con marcas de tiempo, es decir, una fila por muestra. Entonces una gráfica de densidad tendría sentido.

Pero en el tipo de datos aquí, donde la demanda (‘cnt’) se muestrea regularmente y se agrega a lo largo de ese período de muestra (la hora), una gráfica de densidad no es directamente significativa. Pero una gráfica de barras como un histogtwig tiene sentido, usando las horas como los contenedores.

A continuación, le muestro cómo usar las funciones de pandas para producir una ttwig de este tipo, realmente simple. Para referencia, también muestro cómo podemos producir una gráfica de densidad, a través de una especie de reconstrucción de muestras “originales”.

 df = pd.read_csv("../data/hour.csv") # load dataset, inc cols hr, cnt, no NaNs # using the bar plotter built in to pandas objects fig, ax = plt.subplots(1,2) df.groupby('hr').agg({'cnt':sum}).plot.bar(ax=ax[0]) # reconstructed samples - has df.cnt.sum() rows, each one containing an hour of a rental. samples = np.hstack([ np.repeat(h, df.cnt.iloc[i]) for i, h in enumerate(df.hr)]) # plot a density estimate sns.kdeplot(samples, bw=0.5, lw=3, c="r", ax=ax[1]) # to make a useful comparison with a density estimate, we need to have our bar areas # sum up to 1, so we use groupby.apply to divide by the total of all counts. tot = float(df.cnt.sum()) df.groupby('hr').apply(lambda x: x['cnt'].sum()/tot).plot.bar(ax=ax[1], color='C0') 

estimaciones de distribución

La demanda de bicicletas parece ser baja durante la noche … Pero también es evidente que probablemente se usan para ir al trabajo, con picos a las 8 am y 5-6 pm.