Python

Python初心者向け:最頻値を基本から解説

スポンサーリンク


▶ まずデータの概要をつかむなら、以下の記事を参考にしてください。基本統計量をまとめて算出する方法をご紹介しています。

▶ 分散/標準偏差に関する解説はこちらの記事を合わせてお読みください。

はじめに

今回は最頻値を扱います。いまになって「最頻値」という感じもしますが、一度整理しておきましょう。pandas.Seriesを対象とする場合、pandas.DataFrameを対象とする場合で考えることにしましょう。

最頻値をもとめる

サンプルデータの作成

まずはサンプルデータをつくりましょう。何度か使った、動物園のデータを使うことにしましょう。つぎのコードでデータを作成してください。

# サンプルデータの作成
df_sample=pd.DataFrame({
    'なまえ':['らくだ','らいおん','ぱんだ','しまうま','きりん','うさぎ','ねこ','いぬ','おおかみ','かば'],
    '動物園':['上野動物園','旭山動物園','上野動物園','こどもどうぶつえん','ズーラシア','ズーラシア','旭山動物園','旭山動物園','ズーラシア','こどもどうぶつえん'],
    '年齢':[23,32,18,21,23,18,18,18,31,32]
})
df_sample

全レコードを対象にある特徴量の最頻値を求める

ある特徴量の最頻値を求めたい場合は、次のようにデータフレームから、最頻値を求めたい特徴量を指定してpandas.Seriesのメソッドmode()を使って求めることができます。たとえば、動物園の最頻値を確認するなら次のようになります。

df_sample['動物園'].mode()

このように同数のものが複数ある場合は、いずれも表示されます。年齢で試すと次のようになります。

df_sample['年齢'].mode()

データフレームにある特徴量のすべての最頻値を調べたければ、このように一つずつ指定する必要はありません。次のように、データフレームに対してmode()メソッドを適用すると、まとめて表示させることができます。

df_sample.mode()

動物たちのなまえはみんな異なるので、すべて頻度1で最頻値として表示されています。動物園については、ズーラシア、旭山動物園がそれぞれ3回ずつで、同数なのでどちらも示されます。年齢に関しては、18が3回で単独の最頻値なのでこれだけが表示されています。

指定した特徴量ごとにある特徴量の最頻値を求める

次に動物園ごとに、年齢の最頻値を求めてみましょう。これは、groupbyとlambdaを使って次のようにおこないます。

df_sample.groupby('動物園')['年齢'].apply(lambda x:x.mode()).reset_index()

旭山動物園では、32歳、18歳、18歳の動物たちがいたので、最頻値18が表示されています。そのほかの動物園では、それぞれの年齢が1名ずつだったので、同順のためすべて表示されています。

スポンサーリンク

まとめ

いかがでしたか?データ分析では頻度を扱ったり、順位をつけたりすることが結構ありますね。ぱっと求められるように身につけておくとよいでしょう。

▶ 四分位数の解説や、四分位数を使った外れ値の除外に関する記事もあります。

▶ 一気にデータの概要を把握する方法があります。こちらの記事をどうぞ。

コメント

タイトルとURLをコピーしました