私はPythonで辞書のリストを持っています。リストの各要素は1日に対応し、辞書の各要素はユーザーの分単位のアクティビティに関する情報を保持します。ディクテーションのリストの1回のパスで異なるカウンター
例:
list_of_dicts = [
{u'activity':
{u'values': [
[1407729600, 3.0],
[1407729660, 2.0],
[1407729720, 2.0],
[1407729780, 3.0],
[1407729840, 1.0],
[1407729900, 4.0],
[1407729960, 2.0],
[1407730020, 5.0],
[1407730080, 6.0],
[1407730140, 2.0],
[1407730200, 1.0],
[1407730260, 2.0],
[1407730320, 1.0],
[1407730380, 2.0],
[1407730440, 1.0]]}},
{u'activity':
{u'values': [
[1407788340, 2.0],
[1407788400, 2.0],
[1407788460, 3.0],
[1407788520, 2.0],
[1407788580, 2.0],
[1407788640, 2.0],
[1407788700, 2.0],
[1407788760, 2.0],
[1407788820, 2.0],
[1407788880, 3.0],
[1407788940, 2.0],
[1407789000, 3.0],
[1407789060, 2.0],
[1407789120, 3.0],
[1407789180, 3.0],
[1407789240, 2.0],
[1407789300, 3.0],
[1407789360, 3.0],
[1407789420, 2.0],
[1407789480, 3.0],
[1407789540, 2.0]]}}]
は今、私はデータの異なる集計を持っていると思います。たとえば、1週間に1時間あたりのアクティビティ数をカウントしたいとします。これは私が次のコードを実行することができます。これはOKであるが
c = Counter()
step_values_unlist = list(itertools.chain.from_iterable(
[d['activity']['values']
for d in list_of_dicts]))
week_hour_dict = [{(time.gmtime(x[0])[3], time.gmtime(x[0])[6]):x[1]}
for x in step_values_unlist]
for d in week_hour_dict:
c.update(d)
これは、その後のMLのステップのために、特徴ベクトル生成の一部であることから、私は、また、他の集計を行う必要があります。一例として、私は7日間の活動を週に数えたいと思っています。また、新しいカウンターのために辞書のリストを再度読むことによって、さまざまなカウンターを介して個別に行うこともできます。しかし、これは辞書のリストが大きく、1M +ユーザのために(PySpark経由で)実行されているので、時間がかかるでしょう。この大きな辞書のリストを複数回は読まないことが望ましいです。これらの尺度をディクテーションのリストの1回のパスで計算する方法はありますか?私が間違っている場合
ディクショナリを受け取り、その値を処理し、タプルまたは名前付きタプルを返す関数を作成できますか? – wwii