17GBの分かち書き済txtファイルを読み込み、n_gram処理をしているファイルです。処理が非常に遅く心配です。以下のコードを処理速度を上げるために改善できる箇所はあるでしょうか?
教えていただけるととても嬉しいです。
Python
1import pandas as pd 2import sys 3import csv 4from collections import Counter 5 6cmd, infile = sys.argv 7termFreq = {} 8 9n = 0 10for wordArray in open(infile, errors='ignore'): 11 wordArray = wordArray.split() 12 if wordArray == []: 13 continue 14 15 ngram_list = ([(wordArray[i], wordArray[i+1], wordArray[i+2]) for i in range(len(wordArray)-2)]) 16 17 18 for n_word in ngram_list: 19 if n_word in termFreq: 20 termFreq[n_word] += 1 21 else: 22 termFreq[n_word] = 1 23 print(n) 24 n += 1 25 26 27 28 29 30term_list = [] 31count_list = [] 32for term, count in termFreq.items(): 33 term_list.append(term) 34 count_list.append(count) 35 36s = pd.DataFrame({ 37 'Count':count_list, 38 'List':term_list 39 }) 40 41s = s.sort_values('Count', ascending=False) 42 43 44print(s.shape) 45 46s.to_csv('./effect_3.csv', index=False) 47
コメントしていただきありがとうございます
プロセッサ:2.7 GHz Intel Core i5
メモリ:8 GB 1867 MHz DDR3
OS: MacOS Mojava
4700万行のうち1時間で600万行です。
to_csvより前の処理 for wordArrayの箇所が遅いです。
・皆さんの目に触れるように、回答は「質問に追記」してください。
・メモリに対してファイルサイズが大きいため時間がかかっているかと思われます。(マルチプロセス処理が可能であれば早くなる可能性はあります。メモリ不足なので効果があるかは分かりませんが。)
回答2件
あなたの回答
tips
プレビュー