【Python】pandasで年齢データを各年齢層ごとに集計(groupby)する

pandasで年齢データを10歳区切りの年齢データに再集計する

年齢データをpandasで年齢層ごとに集計しようとしたら思いのほか手間取ったので、メモを残しておきます。

今回処理したかったのはこんな感じのデータを20~30,30~40みたいな10歳区切りの年齢層データに集計しなおすことです。軽いデータだったので、for文ごり押しでやってもよかったのですが、pandasのデータフレームでfor文を使うのは大規模データだと悪手なので、今後のことも考えて関数で処理するようにしました。

ages = [23, 22, 23, 22, 24, 20, 22, 24,
29, 28, 25, 25, 26, 27, 28, 27, 25, 25, 27, 25, 25,
32, 32, 32, 33, 33, 32, 33, 32, 30, 33, 32,43,47,49,42,
35, 39, 38, 38, 37, 35, 38, 35, 35, 38, 35, 37,67,62,64,56,58,43,61,56,67,
43, 44, 40, 41, 44, 41, 40, 43, 44, 41, 41, 44, 43, 42, 40, 44, 42, 41, 42,
47, 49, 49, 46, 48, 45, 49, 49, 49, 49, 49, 48, 46, 49, 45, 48, 49, 48,
54, 52, 54, 53, 53, 54, 50, 51, 52, 54,
58, 56, 58, 58, 55, 57, 56, 56, 55]
ages=pd.Series(ages)

ages=ages.value_counts()

ages=ages.sort_index()

ages=pd.DataFrame(ages)

h_ages=ages.groupby(c).sum()

中身

まずはリストをpandasの一次元配列であるpd.Seriesにしておきます。

そして、pd.Seriesに用意されているメソッドである.value_counts()で頻度集計します。これだけインデックスが頻度基準になるため、.sort_index()で年齢ごと降順で頻度を表示するようにします。

これで普通ならばデータ処理完了なわけですが、この処理だと21,23みたいに1歳区切りに頻度集計してしまうので、今回のように5歳区切りの年齢層で分類したいときなど頻度を一定間隔んして分類したいときには使えません。

一定間隔で頻度を区切りたいときは.cutでビニング

1歳ごとに集計された値を10歳ごとにまとめます。
pandas の cut で階級を設定し、

こういう場合は.cutでビニング処理をします。

c=pd.cut(ages.index,np.arange(20, 60, 5))

そして.cutでビニングした頻度をgroupbyの引数に指定して集計すると頻度を一定間隔でまとめて区切った表が作れます。

h_ages=ages.groupby(c).sum()

ages=pd.DataFrame(ages.value_counts().sort_index())

ラベルがバグっている場合はcutの部分で引数にラベルを指定するといいみたいです。

labels = [ “{0} – {1}”.format(i, i + 5) for i in range(20, 70, 5) ]

labelの指定が少しめんどくさくてlen(label)=len(bins)-1にしないといけないみたいです。

ages=pd.DataFrame(ages.value_counts().sort_index())
labels = [ “{0} – {1}”.format(i, i + 5) for i in range(20, 70, 5) ]
c=pd.cut(ages.index,bins=np.arange(20, 75, 5),labels=labels)
h_ages=ages.groupby(c).sum()
h_ages

すると↓のような感じに集計できます。

0
20 – 25 13
25 – 30 8
30 – 35 15
35 – 40 10
40 – 45 21
45 – 50 19
50 – 55 11
55 – 60 10
60 – 65 3
65 – 70 2

h_ages=ages.groupby(c).sum()

https://qiita.com/kshigeru/items/bfa8c11d1e6487c791d3

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする

   侍エンジニア塾       
侍エンジニアの無料体験レッスンを予約する -->