ビズオーシャンでのインターン日記

プログラミング未経験の文系大学生がインターンシップで頑張る日記です

vol.13 データの加工

今回は分析ではなく、データの加工についてです。

ビズオーシャンの会員属性別に、
どういう書式がダウンロードされているのか、ランキング表みたいなのを作りたかったので
その過程を書いていきます。


業種別、職種別、役職別、男女別、企業規模(従業員数)別、都道府県別、年収別、年代別に表を作ったのですが、

業種、職種、役職、男女、企業規模、都道府県、年収はほとんど同じ作り方だったので、
ここには役職別のものを書こうと思います。
年代別は少し違ったので、そこを詳しく書いていこうと思います。

①役職別

⑴会員データ

・会員データを読み込んで、ユーザーIDをindexに指定。
・普通のカラムに残ったユーザーIDと役職以外の属性項目をdropで消す。
ここではとくに新しいことをやっていないので、
どういうコードか、とかは省きます。

会員の役職のデータはこんな感じです。
f:id:yuka_nakayama:20171226140501p:plain

⑵書式データ

書式IDと書式カテゴリ名が同じデータテーブルになかったので、
・書式IDと書式カテゴリIDのデータテーブル
・書式カテゴリIDと書式カテゴリ名のデータテーブル
を作って、concatでつなげました。

こんな感じになります。
f:id:yuka_nakayama:20171226140503p:plain

⑶ユーザーIDと書式カテゴリ名

上の2つをつなげて、
ユーザーのIDと、ダウンロードした書式のカテゴリ名を見る。

f:id:yuka_nakayama:20171226140640p:plain


で、uidをindexに指定して、役職データとつなげる。
ついでに、NaNを含む行を消す。
f:id:yuka_nakayama:20171226140957p:plain

⑷重複する列をグルーピング

最終的に見たいランキング表にユーザーIDは不要なので、
役職と書式のカテゴリ名の組み合わせを見て
重複しているものはまとめていきます。

position_dlcate_g = position_dlcate_drop.groupby(["position","category_name"]).uid.unique()
position_dlcate_df = pd.DataFrame(position_dlcate_g)

#position_dlcate_gは⑶で作ったデータフレーム

f:id:yuka_nakayama:20171226141054p:plain
※ぼかしてるのはユーザーIDです。
係長・主任クラスの人で寒中見舞いカテゴリの書式をダウンロードしたユーザーのIDはこれこれだよ、と表示されます。

で、そのユーザーをカウントする。

position_dlcate_df["uid"] = position_dlcate_df["uid"].map(lambda x:len(x))

f:id:yuka_nakayama:20171226141121p:plain

⑸役職ごとにデータフレームを切りとる

#たとえば、経営者・役員クラスのユーザーだけ切りとる
position_dlcount_1 = position_dlcate_df.query(u"position=='経営者・役員クラス'")

ダウンロードしている人が多い順にならべて、上から5件だけ表示すると、
以下のようになる。
f:id:yuka_nakayama:20171226141143p:plain

※ここでの「uid」はユーザーIDではなく、
同じ役職で同じカテゴリの書式をダウンロードしたユーザーの数のことです。


②年代別

業種別や都道府県別は
役職別と同じようにできますが、

年代別は⑴のところで年齢を10代、20代、30代、、、と
グループに分けていく作業が必要でした。


f:id:yuka_nakayama:20171226143059p:plain

age = member_drop2["age"]
bins = [10,20,30,40,50,60,70,80,90,100]
group_names = ["10_","20_","30_","40_","50_","60_","70_","80_","90_"]

age_cut = pd.cut(age,bins,labels=group_names)

データフレームに直すとこんな感じになります。
f:id:yuka_nakayama:20171226143255p:plain


これ以降はほかの属性項目と同じで、
以下のようにできました。
f:id:yuka_nakayama:20171226143541p:plain