Это мой код -
import pandas as pd
import time
from progressbar import ProgressBar
pbar = ProgressBar()
df = pd.read_excel('tt.xlsx', header=None)
text=df.values.T.tolist()
text = [[k.lower()] for l in text for k in l]
dj_count = {}
start = time.perf_counter()
dj_count.update({''.join(i) : text.count(i) for i in pbar(text)})
time.sleep(0.01)
print ("time taken for script--", round(time.clock()-start , 2), "seconds")
df = pd.DataFrame(list(zip(dj_count, dj_count.values())),columns=['Phrase', 'Count']).sort_values(['Count'],ascending=False)
df.head(12)
Я читаю файл xl, преобразую его в список, опускаю символы, найденные в столбце, запускаю таймер, подсчитываю самые повторяющиеся фразы в коде (реализован индикатор выполненияи время), а затем выведите 12 лучших фраз со счетом.
Когда я делаю это для строк по 20 Кб, это происходит за считанные секунды, когда доходит до 50 Кб, это занимает 2 минуты?а затем 100 тыс. занимает 10 минут, и оно увеличивается с каждым 10–20 тыс. строк в Excel.
Что я могу сделать, чтобы ускорить этот процесс?PS - у меня 8 Гб оперативной памяти и i5-4590
Вывод для строк 50k выглядит следующим образом -
100% (51819 of 51819) |##################| Elapsed Time: 0:01:56 Time: 0:01:56
time taken for script-- 116.87 seconds
__main__:12: DeprecationWarning: time.clock has been deprecated in Python 3.3 and will be removed from Python 3.8: use time.perf_counter or time.process_time instead
Out[2]:
Phrase Count
31 bla bla bla ... 2340
214 lo yolo yolo... 1645
0 gg gg gg lol... 1615
21 bla lol gggg... 1004
6 busy busy ... 800
68 your your y... 620
552 hi hihi hi ... 360
236 okokokokokok... 355
382 thank you ty... 325
58 djdjdjdjdj ... 305
961 gdgdgdgdgdg... 300
400 tyggtyggtyggtyg 285