3 votes

Comment créer un histogramme pour mon jeu de données ?

J'ai le cadre de données suivant df :

time_diff   avg_trips_per_day
631         1.0
231         1.0
431         1.0
7031        1.0
17231       1.0
20000       20.0
21000       15.0
22000       10.0

Je souhaite créer un histogramme avec time_diff sur l'axe X et avg_trips_per_day sur l'axe Y afin de voir la distribution des valeurs de time_diff . L'axe Y n'est donc pas la fréquence des répétitions des valeurs X en df mais il devrait l'être avg_trips_per_day . Le problème, c'est que je ne sais pas comment mettre time_diff en bacs afin de la traiter comme une variable continue.

C'est ce que j'essaie de faire, mais toutes les valeurs possibles de time_diff sur l'axe X.

norm = plt.Normalize(df["avg_trips_per_day"].values.min(), df["avg_trips_per_day"].values.max())
colors = plt.cm.spring(norm(df["avg_trips_per_day"])) 

plt.figure(figsize=(12,8))
ax = sns.barplot(x="time_diff", y="avg_trips_per_day", data=df, palette=colors)
plt.xticks(rotation='vertical', fontsize=12)
ax.grid(b=True, which='major', color='#d3d3d3', linewidth=1.0)
ax.grid(b=True, which='minor', color='#d3d3d3', linewidth=0.5)
plt.show()

4voto

Phlya Points 2313
import pandas as pd
import seaborn as sns
from io import StringIO
data = pd.read_table(StringIO("""time_diff  avg_trips_per_day
631         1.0
231         1.0
431         1.0
7031        1.0
17231       1.0
20000       20.0
21000       15.0
22000       10.0"""), delim_whitespace=True)
data['timegroup'] = pd.qcut(data['time_diff'], 3)
sns.barplot(x='timegroup', y='avg_trips_per_day', data=data)

enter image description here

Est-ce que c'est ce que vous voulez ?

2voto

5agado Points 1467

Comme vous l'avez expliqué vous-même, vous ne voulez pas d'histogramme, mais un simple diagramme à barres. Mais d'après ce que j'ai compris, vous voulez bin time_diff pour le tracé.

Les éléments suivants devraient vous aider à classer vos données et à les regrouper pour le cadre de données :

import pandas a pd

n_bins = 10
# bins indexed if want to use for x axis
x_bins = np.arange(n_bins)
# create bins
_, bins = pd.cut(df['time_diff'], bins=n_bins, retbins=True, right=False)
# regroup your data by computed bins indexes
binned_data = df['time_diff'].groupby(np.digitize(df['time_diff'], bins)).mean()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X