質問編集履歴

4

ご質問への回答を追加

2022/09/27 10:14

投稿

kokoro01234
kokoro01234

スコア2

test CHANGED
File without changes
test CHANGED
@@ -102,7 +102,12 @@
102
102
 
103
103
  if __name__ == "__main__":
104
104
  main()
105
- ソースコード
106
105
  ```
106
+ ### ご質問への回答
107
+ ■tatsu99様
108
+ ご質問ありがとうございます。
109
+ 回答ですが、1については「基準のレコードを含めて10件以上」となります。
110
+ 2につきましては、ご質問のとおり「基準となるレコードの時刻とユーザのみ」を想定していましたが、私の環境で実行したところ、該当する条件のものがすべて出力されていました。。
111
+ しかし、この部分に関しては全て出力されたとしても、後で簡単に処理できるのでこのままでも良いと思っています。
107
112
 
108
113
 

3

コードの空白を修正

2022/09/27 08:47

投稿

kokoro01234
kokoro01234

スコア2

test CHANGED
File without changes
test CHANGED
@@ -87,8 +87,8 @@
87
87
  aa = datetime.strptime(date,"%Y/%m/%d %H:%M:%S")
88
88
  bb = user
89
89
  cc = atai
90
- csv2 = load_csv(source_file_path)
90
+ csv2 = load_csv(source_file_path)
91
- for date, user, atai in csv2
91
+ for date, user, atai in csv2
92
92
  dd = process_2(aa,bb,cc,csv)
93
93
  if dd >= 10:
94
94
  yield [date, user]

2

質問内容の修正

2022/09/27 07:58

投稿

kokoro01234
kokoro01234

スコア2

test CHANGED
@@ -1 +1 @@
1
- python csvのループ処理
1
+ python csvのループ処理の高速化
test CHANGED
@@ -5,9 +5,12 @@
5
5
 
6
6
  以下のcsvであれば、2022/05/26 20:52:15から2022/05/26 21:00:22の間に、ユーザーAの値が11回noneとなっているので、Aが新たなcsvに吐き出されるようにしようとしています。
7
7
 
8
- しかし、自分の書いたスクリプトでは最初の「none」(ヘッダを含め4行目)を検出し、①から③の条件を確認後、次の処理に進んだ際に読み込んでいるcsvの行が意図しない箇所(ヘッダを含め18行目、条件確認後、処理を終了した行の続き)に進んでいました。
8
+ ~~しかし、自分の書いたスクリプトでは最初の「none」(ヘッダを含め4行目)を検出し、①から③の条件を確認後、次の処理に進んだ際に読み込んでいるcsvの行が意図しない箇所(ヘッダを含め18行目、条件確認後、処理を終了した行の続き)に進んでいました。
9
- 本来であれば、最初の「none」を検出した後、条件に一致しないので次の行からの処理に進み、2回目のnone(ヘッダを含め8行目)を検出して条件の確認、次は3回目のnoneを検出とやっていきたいのですが、ループ処理が上手くいかず詰まっているところです。
9
+ 本来であれば、最初の「none」を検出した後、条件に一致しないので次の行からの処理に進み、2回目のnone(ヘッダを含め8行目)を検出して条件の確認、次は3回目のnoneを検出とやっていきたいのですが、ループ処理が上手くいかず詰まっているところです。~~(自己解決済み)
10
10
 
11
+ しかし、対象のcsvが50万行程あるため自分の書いたスクリプトでは物凄い時間が掛かってしまいます。
12
+ 大量の行があるcsvに対してfor文を3回も使用しているのが原因だと思っているのですが、解決方法が分からず困っているため、お知恵を拝借できればと思っております。
13
+ どうぞよろしくお願いいたします。
11
14
 
12
15
 
13
16
  ```
@@ -84,8 +87,10 @@
84
87
  aa = datetime.strptime(date,"%Y/%m/%d %H:%M:%S")
85
88
  bb = user
86
89
  cc = atai
90
+ csv2 = load_csv(source_file_path)
91
+ for date, user, atai in csv2
87
- dd = process_2(aa,bb,cc,csv)
92
+ dd = process_2(aa,bb,cc,csv)
88
- if dd >= 10:
93
+ if dd >= 10:
89
94
  yield [date, user]
90
95
  else :
91
96
  pass
@@ -100,12 +105,4 @@
100
105
  ソースコード
101
106
  ```
102
107
 
103
- ### 試したこと
104
- 該当コードの「process_2」関数に渡しているcsvが「process_1」関数と同じcsvであることが問題なのではと考え、もう一つ同じcsvを格納した変数を作成して、process_2」関数に渡しましたが以下のエラーが発生してしまいました。
105
108
 
106
- ```
107
-
108
- ValueError: time data 'date' does not match format '%Y/%m/%d %H:%M:%S'
109
- ```
110
-
111
-

1

不要な変数を削除

2022/09/27 07:01

投稿

kokoro01234
kokoro01234

スコア2

test CHANGED
File without changes
test CHANGED
@@ -68,7 +68,6 @@
68
68
  count = 0
69
69
  for date, user, atai in csv:
70
70
  aaa = datetime.strptime(date,"%Y/%m/%d %H:%M:%S")
71
- bbb = aaa - day
72
71
 
73
72
  if aaa - day < timedelta(minutes = 10) and user == us and atai == at:
74
73
  count += 1