私はパンダごとにヒストグラムをプロットできることを知っています:
_df4 = pd.DataFrame({'a': np.random.randn(1000) + 1})
df4['a'].hist()
_
しかし、どうすればそのようなプロットからヒストグラム数を取得できますか?
(from a Pandas Series )のヒストグラム値)
_count,division = np.histogram(df4['a'])
_
しかし、これを使用してdf.hist()
の後にカウント値を取得すると、非常に冗長に感じます。パンダから直接周波数値を取得することは可能ですか?
簡単な答えは次のとおりです。
_pd.cut(df4['a'], 10).value_counts().sort_index()
_
ドキュメント から:
_bins: integer, default 10 Number of histogram bins to be used
_
だからpd.cut(df4['a'], 10).value_counts()
を見てください
値が_np.histogram
_からのものと同じであることがわかります
これは、パンダのヒストグラムを計算するもう1つの方法です。より複雑ですが、_pd.cut
_がプロットを破壊する奇妙な文字列ビンを回避するため、IMOの方が優れています。 .pipe()
を使用するためのスタイルポイントも取得します。
_(df['a']
.pipe(lambda s: pd.Series(np.histogram(s, range=(0, 100), bins=20)))
.pipe(lambda s: pd.Series(s[0], index=s[1][:-1]))
)
_
その後、次のように、最後にさらに多くのものをパイプ処理できます。
_.pipe(lambda s: s/s.sum())
_
それはあなたに分布を与えるでしょう。
理想的には、_pd.hist
_に賢明なdensity
があり、これを行うことができます。 Pandas
には_density=False
_キーワードがありますが、無意味です。 this one のように、説明を何千回も読んだことがありますが、実際に誰がを使用するのか理解できませんでした。ヒストグラムに分数が表示される時間の99.9%は、_density=True
_が実際に計算するnp.sum(pdf * np.diff(bins))
ではなく、「分布」だと思います。泣きたい気持ちにさせます。