入力ログを入力データセットに変換するのはかなり悪い方法です。 私は、次の形式でSFrame平方フィートを持っている:SFramesを入力データセットSframesに変換する
user_id int
timestamp datetime.datetime
action int
reasoncode str
アクション列が占めるので、すべてのUSER_IDは複数回、1つの以上のアクションを実行することができ、1から9
までの9つの値。
私はSFからすべての独特のuser_idを取得し、次のようにop_sfを作成しようとしています:
y = 225
def calc_class(a,x):
diffd = a['timestamp'].apply(lambda x: (dte - x).days)
g = 0
b = 0
for i in diffd:
if i > y:
g += 1
else:
b += 1
if b>= x:
return 4
elif b!= 0:
return 3
elif g>= 0:
return 2
else:
return 1
l1 = []
ids = z['user_id'].unique()
for idd in ids:
temp = sf[sf['user_id']== idd]
zero1 = temp[temp['action'] == 1]
zero2 = temp[temp['action'] == 2]
zero3 = temp[temp['action'] == 3]
zero4 = temp[temp['action'] == 4]
zero5 = temp[temp['action'] == 5]
zero6 = temp[temp['action'] == 6]
zero7 = temp[temp['action'] == 7]
zeroh8 = temp[temp['reasoncode'] == 'xyz']
zero9 = temp[temp['reasoncode'] == 'abc']
/* I'm getting clas1 to clas9 from function calc_class for each action
clas1 to clas9 are 4 integers ranging from 1 to 4
*/
clas1 = calc_class(zero1,2)
clas2 = calc_class(zero2,2)
clas3 = calc_class(zero3,2)
clas4 = calc_class(zero4,2)
clas5 = calc_class(zero5,2)
clas6 = calc_class(zero6,2)
clas7 = calc_class(zero7,2)
clas8 = calc_class(zero8,2)
clas9 = calc_class(zero9,2)
l1.append([idd,clas1,clas2,clas3,clas4,clas5*(-1),clas6*(-1),clas7*(-1),clas8*(-1),clas9])
私は、これがこれを行うための最速の方法かどうかを知りたいと思いました。具体的には、zero1〜zero9 SFramesを生成せずに同じことを実行できるかどうか。
例SF:SF上記に対応する
user_id timestamp action reasoncode
574 23/09/15 12:43 1 None
574 23/09/15 11:15 2 None
574 06/10/15 11:20 2 None
574 06/10/15 11:21 3 None
588 04/11/15 10:00 1 None
588 05/11/15 10:00 1 None
555 15/12/15 13:00 1 None
585 22/12/15 17:30 1 None
585 15/01/16 07:44 7 xyz
588 06/01/16 08:10 7 abc
をL1:
574 1 2 2 0 0 0 0 0 0
588 3 0 0 0 0 0 0 0 3
555 3 0 0 0 0 0 0 0 0
585 3 0 0 0 0 0 0 3 0
、それはあなたが何をしようとしているかを理解するのは難しいです。あなたの目標について少し詳しく説明し、入力と出力のデータの小さな例を表示できますか? – papayawarrior
ここでは複雑なロジックがあるようです。 @papayawarriorが示唆しているように、いくつかのサンプルデータを使った簡単な例があると便利です。しかし、すべての "ゼロ" sframesを生成するロジックから、私はすべての一意のIDをループする理由は見当たりません。おそらく、このロジックを持つ関数でapplyを使用することで、これらのすべてを生成することはできません(たとえば、アクション== 6:x6を使用する、それが7ならx7を使用)。タイムスタンプをSFrame全体に変換することもできます。 –
@EvanSamanasに例を挙げることができますか? –