YU2TA7KA's BLOG

派生開発、組み込み開発周りのこと。

pandasで特定のカラムの要素ごとに別カラムの要素数をカウントする

はじめに

GoodClues_DBに対して、タイトルごとに最頻出するアニメ聖地領域(県名、市区町村名)を抽出するために、pandasで特定のカラムの要素ごとに別カラムの要素数をカウントする実装を行いましたので、まとめます。

やりたいこと

タイトルで伝わらないような気がしているので、具体的にやりたいことを説明します。(伝わって!)

GoodClues_DB+(市町村名を逆ジオコーディング) のDBは下記のような構造になっています。

ID,タイトル,コード,場所,県名,市町村名,住所,緯度,経度,逆ジオコーディング
1,けいおん,241215,豊郷小学校,滋賀,犬上郡 豊郷町,滋賀県犬上郡豊郷町石畑518,35.203373,136.232871,犬上郡 豊郷町
2,けいおん,241215,四条Mojo,京都,京都市 下京区,京都府京都市下京区四条新町月鉾町39-1四条烏丸大西ビル,35.003973,135.756867,京都市 下京区
3,けいおん,241215,今宮神社,京都,京都市 北区,京都府京都市北区紫野今宮町21,35.045722,135.74255,京都市 北区
…
けいおんは22箇所登録されています。

ここから作品ごとの県名と市町村名の要素数をカウントし、最頻値を聖地領域とします。「けいおん」の場合、京都府 京都市 北区となります。

pandasとは

pandasはPythonにおいて、データ解析を支援する機能を提供するライブラリである。特に、数表および時系列データを操作するためのデータ構造と演算を提供する。PandasはBSDライセンスのもとで提供されている。
Pandas - Wikipedia

インストール方法

pip install pandas

いろいろ環境構築が必要なのかインストールに数時間かかりました。(ラズベリーパイ上に構築したから?)

実装ソースコード

count_area.py

#coding: utf-8
#タイトルごとに舞台となっている場所の県名と自治体名をカウントする

import pandas as pd

df_seichi = pd.read_csv('anime_seichi_ver2.csv')

for line in open('title.csv', 'r'):
    #読み込んだタイトル一覧と合致するレコードのみでDataFrameを構築
    df_title = df_seichi[(df_seichi['タイトル'] == line.strip())]

    #県名と市町村名の要素数をカウントし、最頻値(index[0])を出力する。
    #カウント数はiat[0]で取得可能。
    print(line.strip())
    print(df_title['県名'].value_counts().index[0])
    print(df_title['自治体名'].value_counts().index[0])

プログラミング言語:Python 2.7.13
pandasでExcellでできるようなカウント処理ができます。そのカウント対象となる、DataFrameを用意してあげることができれば、OKでした。今回の場合、別途タイトルリストのファイルを用意して、DataFrameを作成しました。同じプログラム内でタイトル一覧を良い感じに抽出できればスマートなのですが、不格好にこんな感じでやりました。

anime_seichi_ver2.csv

ID,タイトル,コード,場所,県名,市町村名,住所,緯度,経度,逆ジオコーディング
1,けいおん,241215,豊郷小学校,滋賀,犬上郡 豊郷町,滋賀県犬上郡豊郷町石畑518,35.203373,136.232871,犬上郡 豊郷町
2,けいおん,241215,四条Mojo,京都,京都市 下京区,京都府京都市下京区四条新町月鉾町39-1四条烏丸大西ビル,35.003973,135.756867,京都市 下京区
3,けいおん,241215,今宮神社,京都,京都市 北区,京都府京都市北区紫野今宮町21,35.045722,135.74255,京都市 北区
…

title.csv

けいおん
涼宮ハルヒの憂鬱
N・H・Kにようこそ
侵略!イカ娘
サーバント×サービス
秒速5センチメートル
神のみぞ知るセカイ
俺の妹がこんなに可愛いわけがない
ラブひな
ひぐらしのなく頃に
…

出力結果

けいおん
京都
京都市 北区
涼宮ハルヒの憂鬱
兵庫
西宮市
…

参考

以下にpandasの使い方について、種々紹介されています。自分のやりたいことを明文化できれば、ここから辞書のようにアクセスできると思います。明文化って難しいです。

おわりに

この実装でようやく聖地領域の抽出が完了しました。この結果をさらにいろいろいじって面白い知見を抽出できればと思います。python周りの環境とかも多少整ってきたので、アウトプット速度も向上していければと思います。