vol.13 データの加工
今回は分析ではなく、データの加工についてです。
ビズオーシャンの会員属性別に、
どういう書式がダウンロードされているのか、ランキング表みたいなのを作りたかったので
その過程を書いていきます。
業種別、職種別、役職別、男女別、企業規模(従業員数)別、都道府県別、年収別、年代別に表を作ったのですが、
業種、職種、役職、男女、企業規模、都道府県、年収はほとんど同じ作り方だったので、
ここには役職別のものを書こうと思います。
年代別は少し違ったので、そこを詳しく書いていこうと思います。
①役職別
⑴会員データ
・会員データを読み込んで、ユーザーIDをindexに指定。
・普通のカラムに残ったユーザーIDと役職以外の属性項目をdropで消す。
ここではとくに新しいことをやっていないので、
どういうコードか、とかは省きます。
会員の役職のデータはこんな感じです。
⑵書式データ
書式IDと書式カテゴリ名が同じデータテーブルになかったので、
・書式IDと書式カテゴリIDのデータテーブル
・書式カテゴリIDと書式カテゴリ名のデータテーブル
を作って、concatでつなげました。
こんな感じになります。
⑶ユーザーIDと書式カテゴリ名
上の2つをつなげて、
ユーザーのIDと、ダウンロードした書式のカテゴリ名を見る。
で、uidをindexに指定して、役職データとつなげる。
ついでに、NaNを含む行を消す。
⑷重複する列をグルーピング
最終的に見たいランキング表にユーザーIDは不要なので、
役職と書式のカテゴリ名の組み合わせを見て
重複しているものはまとめていきます。
position_dlcate_g = position_dlcate_drop.groupby(["position","category_name"]).uid.unique() position_dlcate_df = pd.DataFrame(position_dlcate_g) #position_dlcate_gは⑶で作ったデータフレーム
※ぼかしてるのはユーザーIDです。
係長・主任クラスの人で寒中見舞いカテゴリの書式をダウンロードしたユーザーのIDはこれこれだよ、と表示されます。
で、そのユーザーをカウントする。
position_dlcate_df["uid"] = position_dlcate_df["uid"].map(lambda x:len(x))
⑸役職ごとにデータフレームを切りとる
#たとえば、経営者・役員クラスのユーザーだけ切りとる position_dlcount_1 = position_dlcate_df.query(u"position=='経営者・役員クラス'")
ダウンロードしている人が多い順にならべて、上から5件だけ表示すると、
以下のようになる。
※ここでの「uid」はユーザーIDではなく、
同じ役職で同じカテゴリの書式をダウンロードしたユーザーの数のことです。
②年代別
業種別や都道府県別は
役職別と同じようにできますが、
年代別は⑴のところで年齢を10代、20代、30代、、、と
グループに分けていく作業が必要でした。
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)
データフレームに直すとこんな感じになります。
これ以降はほかの属性項目と同じで、
以下のようにできました。