読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【Python】pandasで枝リストの形式にデータを変換する

import pandas as pd

#ファイルを読み込む
pixivdata = pd.read_csv("aikatsunet/pixivdata.csv",encoding="utf-8")

#不要なカラムを消す
del pixivdata["userID"]
del pixivdata["date"]
print pixivdata

#カラム名からキャラクター名を取得
chara = pixivdata.columns[1:]
num = 0
charaID = list()
for x in chara:
    charaID.append([x,num])
    num += 1

#キャラクターにIDを付与
charaID = pd.DataFrame(charaID)
charaID.columns = [u"キャラクター",u"ID"]
print charaID

#トランザクションデータに変換
transaction = list()
for x in range(0,len(pixivdata)):
    line = pixivdata.ix[x]
    for ctmp in chara:
        if line[ctmp] == 1:
            transaction.append([line[u"picID"],ctmp])
transaction = pd.DataFrame(transaction)
transaction.columns = [u"picID",u"キャラクター"]
print transaction

#作成したキャラクターIDを付与
transaction = pd.merge(transaction, charaID, on = u"キャラクター")

#自分自身で内部結合
pairframe = pd.merge(transaction,transaction,on = u"picID", how="inner")
print pairframe

#重複するペアを削除
#SQLのwhere文みたいなのが使えると楽なんだけど…
pairs = list()
for x in range(0,len(pairframe)):
    line = pairframe.ix[x]
    if line[u"ID_x"] < line[u"ID_y"]:
        pairs.append(line)
pairs = pd.DataFrame(pairs)
print pairs

#共演した数を集計
count = pairs.groupby([u"キャラクター_x",u"キャラクター_y"]).count()[[u"picID"]]
print count
count.to_csv("costar.csv",encoding="utf-8")