2016-08-21 3 views
0

私は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回のパスで計算する方法はありますか?私が間違っている場合

+0

ディクショナリを受け取り、その値を処理し、タプルまたは名前付きタプルを返す関数を作成できますか? – wwii

答えて

0

は、私を修正しますが、以下のように、私はあなたの質問を要約します:

はdictsのリストの1回のパスで複数の操作を計算する方法はありますか?

これは本当に重要ではありません。 15の演算を計算している場合は、各要素を15回別々に計算する必要があります。

各メトリックの操作の詳細なアイデアがある場合は、一部の操作を除外して冗長な作業を排除することができます。たとえば、正規化の目的で、複数のメトリックの1分あたりの平均値を考慮する必要があります。この平均値を共有できるように、関数を記述するのは開発者の責任です。まず計算してから各関数に渡します。

関連する問題