pandasのクロス集計を実行します。
架空データの作成
python
import random
import datetime
import pandas as pd
# 架空の行動履歴作成
def make_probe(_list, s, e):
for _id in range(s, e):
# 立ち寄りスポット数
spot_num = random.randint(1, 5)
for i in range(spot_num):
spot1 = random.randint(1, 5)
spot2 = random.randint(1, 5)
_list.append([_id+1, f'spot_{spot1}', f'spot_{spot2}'])
return _list
# 行動履歴作成
probe_list =
probe_list = make_probe(probe_list, 0, 400)
# データフレーム化
df = pd.DataFrame(probe_list, columns=['id', 'o_spot', 'd_spot'])
df.head()
id | o_spot | d_spot | |
---|---|---|---|
0 | 1 | spot_5 | spot_2 |
1 | 1 | spot_3 | spot_3 |
2 | 1 | spot_3 | spot_2 |
3 | 1 | spot_3 | spot_1 |
4 | 2 | spot_5 | spot_1 |
pandasのクロス集計
python
# クロス集計
df_crosstab = pd.crosstab(df['o_spot'], df['d_spot'])
df_crosstab
o_spot/d_spot | spot_1 | spot_2 | spot_3 | spot_4 | spot_5 |
---|---|---|---|---|---|
spot_1 | 53 | 54 | 53 | 44 | 40 |
spot_2 | 54 | 48 | 40 | 44 | 55 |
spot_3 | 37 | 38 | 57 | 48 | 56 |
spot_4 | 47 | 42 | 42 | 62 | 40 |
spot_5 | 53 | 50 | 64 | 44 | 45 |
まとめ
pandasのクロス集計を実行しました。