Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 20, 2024 22:32:04

user555
Зарегистрирован: 2024-06-20
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

Уважаемые господа!
Прошу у Вас помощи в решении вопроса, связанного с проведение расчётов.
Постараюсь объяснить простыми словами, если конечно смогу (((
Предполагаю что мой код вызовет у Вас уныние, поэтому сразу прошу прощения. Я хотел было выполнить расчёты в MS ms excel, но он как оказалось не может работать с такими большими таблицами!
Суть моих расчётов заключается в получении значений величины времени для каждого сетевого пакета, следующего от сервера port1 = 443 к клиенту port2 = 53023 в пределах которого значение sequence number будет находиться в окне клиента.
Например, берем пакет № 646700, в нем sequence number = 617352158, а из пакета № 646699 извлекаем значение окна клиента и считаем, до какого времени значение sequence number (передаваемых данных) сервером не превысит окно клиента, получаем значение времени, записываем в файл, берем следующий пакета с данными 646701 и т.д.
Интересуют только значение времени для пакетов, следующих от сервера к клиенту. Также в датафрейме присутствует изменение окна клиента, которое нужно учитывать.

П.С. Остальные значение NUMBJ, NUMBI, NUMBJ - NUMBI, WST не так важны, их можно и не рассматривать.

Код я конечно составил, но он выполняется он очень-очень медленно!

Имеется датафрейм data.csv, полученный экспортом из wireshark
“No.”,“Time”,“port1”,“port2”,“Seq”,“Ack”,“CWS”
“1”,“0.000000”,“53023”,“443”,“0”,“0”,“64240”
“2”,“0.039781”,“443”,“53023”,“0”,“1”,“64240”
“3”,“0.040341”,“53023”,“443”,“1”,“1”,“131840”
“4”,“0.048941”,“53023”,“443”,“1”,“1”,“131840”

“646699”,“384.921299”,“53023”,“443”,“678”,“617352158”,“4232192”
“646700”,“384.921432”,“443”,“53023”,“617352158”,“678”,“64128”
“646701”,“384.921432”,“443”,“53023”,“617353518”,“678”,“64128”
“646702”,“384.921432”,“443”,“53023”,“617354878”,“678”,“64128”
“646703”,“384.921432”,“443”,“53023”,“617356238”,“678”,“64128”
“646704”,“384.921432”,“443”,“53023”,“617357598”,“678”,“64128”
“646705”,“384.921749”,“53023”,“443”,“678”,“617358958”,“4232192”
“646706”,“384.921921”,“443”,“53023”,“617358958”,“678”,“64128”

“11200490”,“4052.560404”,“53023”,“443”,“678”,“2166491223”,“8464640”
“11200491”,“4052.560461”,“443”,“53023”,“2166491223”,“678”,“64128”
“11200492”,“4052.560461”,“443”,“53023”,“2166492583”,“678”,“64128”
“11200493”,“4052.560461”,“443”,“53023”,“2166493943”,“678”,“64128”
“11200494”,“4052.560544”,“53023”,“443”,“678”,“2166494291”,“8464640”
“11200495”,“4052.615866”,“53023”,“443”,“678”,“2166494291”,“0”

Код:

 data = pd.read_csv("data.csv", delimiter=",")
WST = 64240
SEQT = 0
for i in range(1,11200495):
    PI = data.at[i, "port1"]
    WSI = data.at[i, "CWS"]
    TI = data.at[i, "Time"]
    SEQI = data.at[i, "Seq"]
    NUMBI = data.at[i, "No."]
    j = i
    if SEQI + 1000000 < SEQT and PI == 443:
        SEQT = SEQI
    if SEQI > SEQT and PI == 443:
        SEQT = SEQI
        Buffer = WST
        while Buffer > 0:
            j = j + 1
            PJ = data.at[j, "port1"]
            WSJ = data.at[j, "CWS"]
            TJ = data.at[j, "Time"]
            SEQJ = data.at[j, "Seq"]
            NUMBJ = data.at[j, "No."]
            if PJ == 443 and SEQJ > SEQT and Buffer > 0:
                SEQ = SEQJ - SEQI
                Buffer = WST - SEQ
                T = TJ - TI
            if PJ == 53023:
                WST = WSJ
        PJ = data.at[j - 1, "port1"]
        TJ = data.at[j - 1, "Time"]
        T = TJ - TI
        NUMBJ = data.at[j - 1, "No."]
        print(round(T, 5), NUMBJ, NUMBI, NUMBJ - NUMBI, WST, file=open("log.txt", "a"))
    if PI == 53023:
        WST = WSI

Еще не могу понять, как учесть тот момент, что sequence number имеет значения от 0 до 2^32 и в пределах датафрейма несколько раз начинается снова начинается от 0:
Пример:
“4476457”,“1613.231656”,“443”,“53023”,“4294963577”,“678”,“64128”
“4476458”,“1613.231764”,“53023”,“443”,“678”,“4294964937”,“8464640”
“4476459”,“1613.231858”,“443”,“53023”,“4294964937”,“678”,“64128”
“4476460”,“1613.231858”,“443”,“53023”,“4294966297”,“678”,“64128”
“4476461”,“1613.231858”,“443”,“53023”,“361”,“678”,“64128”
“4476462”,“1613.232032”,“53023”,“443”,“678”,“1721”,“8464640”
“4476463”,“1613.232248”,“443”,“53023”,“1721”,“678”,“64128”
“4476464”,“1613.232248”,“443”,“53023”,“3081”,“678”,“64128”
“4476465”,“1613.232248”,“443”,“53023”,“4441”,“678”,“64128”

Моя безуспешная попытка переопределить значение результата не принесла, как только цикл доходит до этого значения - ошибка

     if SEQI + 1000000 < SEQT and PI == 443:
        SEQT = SEQI

Заранее спасибо за помощь!

Офлайн

#2 Июнь 21, 2024 12:29:01

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1348
Репутация: +  118  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

user555
Например, берем пакет № 646700, в нем sequence number = 617352158, а из пакета № 646699 извлекаем значение окна клиента и считаем, до какого времени значение sequence number (передаваемых данных) сервером не превысит окно клиента, получаем значение времени, записываем в файл, берем следующий пакета с данными 646701 и т.д.
Интересуют только значение времени для пакетов, следующих от сервера к клиенту. Также в датафрейме присутствует изменение окна клиента, которое нужно учитывать.

Руками сделайте что вам нужно и здесь покажите, т.е какие данные были на входе и что получилось на выходе, если были какие-то расчеты, указать что с чем складывалось, вычиталось и тд.

Офлайн

#3 Июнь 21, 2024 22:47:14

user555
Зарегистрирован: 2024-06-20
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

xam1816
Постараюсь более подробно объяснить. Буду премного благодарен, если поможете.
Если Вы понимаете стек tcp вам будет проще . Слова которые я употребляю, как “пакеты”, будут тождественны словам “строки”.
Значения ACK меня вообще не интересуют, оно не рассматриваются, присутствуют в датафрейме избыточно.

К примеру я беру первую строку в цикле i (i=1)
“No.”,“Time”,“port1”,“port2”,“Seq”,“Ack”,“CWS”
“1”,“0.000000”,“53023”,“443”,“0”,“0”,“64240”
И если в этой строке значение port1=53023 я извлекаю только значение CWS, которое будет является текущим значение CWS для всех дальнейших расчетов, больше данная строка нас не интересует.
     if PI == 53023:
        WST = WSI
Далее я беру 2-ю строку в цикле i
“No.”,“Time”,“port1”,“port2”,“Seq”,“Ack”,“CWS”
“2”,“0.039781”,“443”,“53023”,“0”,“1”,“64240”
В строке 2 значение port1=443, для этой строки мне нужно посчитать значение времени в пределах которого seq (количество переданных данных) для i-ых пакетов, которые следуют после 2-го не превысит значение CWS, которое я получил из первой строки. Только особенность такова, что значение CWS может изменятся как в большую, так и в меньшую сторону.

В расчёте для второго пакета я беру пакеты с номерами 3, 4, 5, 6, 7 пакет и т.д. пока поле seq в i-ом пакете не превысит значение CWS из 1-ой строки, считаю только пакеты которые идут от сервера, т.е port1=443, в пакетах которые идут от клиента port1=53023 я извлекаю CWS (если меняется, а оно меняется и в строке 3 оно уже 131840)
Пример:
“3”,“0.040341”,“53023”,“443”,“1”,“1”,“131840”

т.е уже начиная с третьей строки (т.к. CWS изменилось с 64240 на 131840) во вложенном цикле i=2 (для второго пакета) я ищу такой пакет, в котором seq=seqi-seq2 будет не больше CWS (т.е 131840), т.к в пакете 2 seq=0.

для пакета 2 это будет 151 пакет, пакет 153 мне не подходит.
В 151-ом пакете seq=131088, 131840-131088=752, а в 153 пакете seq=132448, 131840-132448=-608 (уже отрицательное значение)

т.е значение T будет равно время 151-го пакета (0.535183) минус время 2-го пакета (0.039781) = 0,495402
Это значение T (округлённое) найденного для 2-го пакета я записываю в файл log.txt

Пример датафремйма.
“No.”,“Time”,“port1”,“port2”,“Seq”,“Ack”,“CWS”
“145”,“0.534418”,“443”,“53023”,“124288”,“678”,“64128”
“146”,“0.534659”,“53023”,“443”,“678”,“125648”,“131840”
“147”,“0.535183”,“443”,“53023”,“125648”,“678”,“64128”
“148”,“0.535183”,“443”,“53023”,“127008”,“678”,“64128”
“149”,“0.535183”,“443”,“53023”,“128368”,“678”,“64128”
“150”,“0.535183”,“443”,“53023”,“129728”,“678”,“64128”
“151”,“0.535183”,“443”,“53023”,“131088”,“678”,“64128”
“152”,“0.535602”,“53023”,“443”,“678”,“132448”,“131840”
“153”,“0.535907”,“443”,“53023”,“132448”,“678”,“64128”
“154”,“0.535907”,“443”,“53023”,“133808”,“678”,“64128”

print(round(T, 5), NUMBJ, NUMBI, NUMBJ - NUMBI, WST, file=open("log.txt", "a"))
Примечание: Значения NUMBJ, NUMBI, NUMBJ - NUMBI, WST можно не рассматривать я их использовал в качестве вспомогательных, что бы понять как выполняются расчеты.

Далее я беру 3-ю строку
“No.”,“Time”,“port1”,“port2”,“Seq”,“Ack”,“CWS”
“3”,“0.040341”,“53023”,“443”,“1”,“1”,“131840”
Обновляю CWS на значение 131840
Беру 4-ю строку
“No.”,“Time”,“port1”,“port2”,“Seq”,“Ack”,“CWS”
“4”,“0.048941”,“53023”,“443”,“1”,“1”,“131840”
Обновляю CWS на значение 131840
Беру 5-ю строку
“No.”,“Time”,“port1”,“port2”,“Seq”,“Ack”,“CWS”
“5”,“0.119585”,“443”,“53023”,“1”,“416”,“64128”
Для 5-й строки выполняю вычисление, аналогичные для 2-й строки
T будет равно времени 151-го пакета (0.535183) минус время 5-го пакета (0.119585) = 0,415598
Т.к. seq в 5-м пакете = 1
значение T (округлённое) найденного пакета 5 я записываю в файл log.txt
Беру 6-ю строку
“No.”,“Time”,“port1”,“port2”,“Seq”,“Ack”,“CWS”
“6”,“0.122722”,“443”,“53023”,“1”,“416”,“64128”
T будет равно время 151-го пакета (0.535183) минус время 6-го пакета (0.122722) = 0,412461
значение T (округлённое) найденного пакета 6 я записываю в файл log.txt
Беру 7-ю строку
“No.”,“Time”,“port1”,“port2”,“Seq”,“Ack”,“CWS”
“7”,“0.123536”,“443”,“53023”,“1361”,“416”,“64128”
seq7=1361, а CWS=131840 (на данный момент), значит мне нужно найти seqi, в котором seq будет не больше seq7+CWS или не больше значения 133 201 (131840 + 1361)
T будет равно время 151-го пакета (0.535183) - время 7-го пакета (0.122722) = 0,412461
значение T (округлённое) найденного пакета 7 я записываю в файл log.txt

И так для всех пакетов (строк) со значениями port1=443.

Ситуация осложняется тем, что поле seq принимает значения от 0 до 2^32-1 (4294967295) и в какой-то момент времени происходит следующее:

“No.”,“Time”,“port1”,“port2”,“Seq”,“Ack”,“CWS”
“4476458”,“1613.231764”,“53023”,“443”,“678”,“4294964937”,“8464640”
“4476459”,“1613.231858”,“443”,“53023”,“4294964937”,“678”,“64128”
“4476460”,“1613.231858”,“443”,“53023”,“4294966297”,“678”,“64128”
“4476461”,“1613.231858”,“443”,“53023”,“361”,“678”,“64128”
“4476462”,“1613.232032”,“53023”,“443”,“678”,“1721”,“8464640”
“4476463”,“1613.232248”,“443”,“53023”,“1721”,“678”,“64128”
“4476464”,“1613.232248”,“443”,“53023”,“3081”,“678”,“64128”
“4476465”,“1613.232248”,“443”,“53023”,“4441”,“678”,“64128”

т.е значение переданных данных становиться больше 4294967295 и отсчёт снова ведется от 0 т.е. 4294966297 становиться 361, но в реальности это как бы 4294966658.
И так происходит несколько раз.
Тут я вообще не понимаю, как сделать.



Офлайн

#4 Июнь 21, 2024 23:29:36

user555
Зарегистрирован: 2024-06-20
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

Датафрейм большой 11 млн. строк
У меня выполняется очень медленно. Присутствуют ошибки в расчетах.
Так, согласно моему алгоритму, для 2-го пакета (строки) я бы получил время от 152 пакета (строки).
т.к. у меня:

         PJ = data.at[j - 1, "port1"]
        TJ = data.at[j - 1, "Time"]
        T = TJ - TI
Пример датафремйма.
“No.”,“Time”,“port1”,“port2”,“Seq”,“Ack”,“CWS”
“149”,“0.535183”,“443”,“53023”,“128368”,“678”,“64128”
“150”,“0.535183”,“443”,“53023”,“129728”,“678”,“64128”
“151”,“0.535183”,“443”,“53023”,“131088”,“678”,“64128”
“152”,“0.535602”,“53023”,“443”,“678”,“132448”,“131840”
“153”,“0.535907”,“443”,“53023”,“132448”,“678”,“64128”
А мне необходимо получить время для пакетов, у которых port1=443

Офлайн

#5 Июнь 22, 2024 13:12:24

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2742
Репутация: +  183  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

> Датафрейм большой 11 млн. строк. У меня выполняется очень медленно

А ты как хотел? Я бы это в Postgres загружал и там бы рассчитывал. Ну а тебе проще будет посмотреть в сторону какого нибудь pandas или numpy.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#6 Июнь 23, 2024 05:20:04

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9848
Репутация: +  853  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

user555
Постараюсь объяснить простыми словами, если конечно смогу (((
Надо объяснять всё простыми словами. Даже самые сложные программы записываются простыми словами изначально.

user555
Суть моих расчётов заключается в получении значений величины времени для каждого сетевого пакета, следующего от сервера port1 = 443 к клиенту port2 = 53023 в пределах которого значение sequence number будет находиться в окне клиента.
Например, берем пакет № 646700, в нем sequence number = 617352158, а из пакета № 646699 извлекаем значение окна клиента и считаем, до какого времени значение sequence number (передаваемых данных) сервером не превысит окно клиента, получаем значение времени, записываем в файл, берем следующий пакета с данными 646701 и т.д.
Получить нужно что? Что значит “значений величины времени для каждого сетевого пакета”? Времени чего?

Что значит “из пакета № 646699 извлекаем значение окна клиента”? Какого окна? Что значит “значение окна”?

Дальше данные надо писать так
"No.","Time","port1","port2","Seq","Ack","CWS"
"1","0.000000","53023","443","0","0","64240"
Или вот так
No.  Time      port1  port2  Seq  Ack  CWS
1 0.000000 53023 443 0 0 64240

Потом надо вообще написать небольшой пример данных от одного до десяти и на этом искусственном примере объяснить, какие поля нужно брать и с какими полями нужно сравнивать. Естественно, никаких непонятных слов типа “окно” или “время” не должно быть, все слова должны быть ясными.

И всё это должно быть без единой строчки кода.



Отредактировано py.user.next (Июнь 23, 2024 05:21:20)

Офлайн

#7 Июнь 23, 2024 11:30:26

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1348
Репутация: +  118  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

user555
Датафрейм большой 11 млн. строк
У меня выполняется очень медленно. Присутствуют ошибки в расчетах.

можно взять библиотеку pandas, а потом делать выборки из датафрейма по условию.

TCP поверхностно знаю
Я правильно понимаю следующее?

Seq - это последовательный номер байта в пакете при передаче от одного порта к другому
CWS - это количество байт которые могут быть переданы без проверки (окно)
Ack - это число которое будет передано в следующем байте для проверки

Если взять два последовательных номера байта от одного порта к другому, то между ними будет количество байт, и нужно понять, попали они в окно, или нет?

И интересно узнать для себя, какую проблему решает ваша задача, т.е. что она дает

Отредактировано xam1816 (Июнь 23, 2024 13:00:34)

Офлайн

#8 Июнь 23, 2024 17:33:01

user555
Зарегистрирован: 2024-06-20
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

Для удобства понимания упрощу данные.
Там, где проставлены “-” тоже есть данные, только для удобства их убрал, они в расчёте не участвуют.

 No. Time    port1    Seq    CWS
1   0.01    53023    -      50
2   0.02    443      0      -
3   0.03    53023    -      55
4   0.04    443     49      -
5   0.05    53023   -       60
6   0.06    443     100     -
7   0.07    53023   -       70
8   0.08    443     140     -
9   0.09    53023   -       100
10  0.10    53023   -       100
11  0.11    443     210     -
12  0.12    443     240     -
13  0.13    443     270     -
Необходимо для каждой строки, в которой значение port1=443 найти разницу во времени между этой и строкой, в которой значение port1 будет равно 443, а разница значений seq не превышает значения CWS.
Беру 1-ю строку, у неё значение port1=53023, получаю из нее значение CWS=50.
Беру 2-ю строку, у неё значение port1=443, значит для 2-й строки мне нужно найти разницу во времени между 2-ю строкой и строкой, в которой разность SEQ между искомой строкой и 2-й строкой (SEQi-SEQ2) будет не больше 50.
Расчёт для 2-й строки
Беру 3-ю строку, у неё значение port1=53023, значит из неё я получаю значение CWS=55.
т.к значение CWS изменилось с 50 на 55, теперь для второй строки мне нужно искать разницу во времени между 2-ю строкой и строкой, в которой SEQ будет не больше 55.
Беру 4-ю строку, у неё значение port1=443, получаю из неё значение SEQ4=49, считаю SEQ4-SEQ2=49
Если разность SEQ4-SEQ2 не больше CWS (на данный момент оно 55) беру следующую строку.
Беру 5-ю строку, у неё значение port1=53023, значит из неё я получаю значение CWS=60.
т.к значение CWS изменилось с 55 на 60, теперь для второй строки мне нужно искать разницу во времени между 2-ю строкой и строкой, в которой SEQ будет не больше 60.
Беру 6-ю строку, у неё значение port1=443, получаю из неё значение SEQ6=100, считаю SEQ6-SEQ2=100
Разность SEQ6-SEQ2 больше CWS (на данный момент оно 60), значит оно не подходит.
Последняя строка, в которой разность была не больше CWS была 4, значит мне нужно взять время из 4 строки (0.04) из из него вычесть время 2 строки (0.02).
Полученное значение записать в файл (0.02).
Беру 3-ю строку, у неё значение port1=53023, получаю из нее значение CWS=55.
Беру 4-ю строку, у неё значение port1=443, значит для строки 4 мне нужно найти разницу во времени между 4-й строкой и строкой, в которой разность SEQ между искомой строкой и 4-й строкой (SEQi-SEQ4) будет не больше 55.
Расчёт для 4-й строки
Беру 5-ю строку, у неё значение port1=53023, значит из неё я получаю значение CWS=60.
т.к значение CWS изменилось с 55 на 60, теперь для четвёртой строки мне нужно искать разницу во времени между 4-й строкой и строкой, в которой SEQ будет не больше 60.
Беру 6-ю строку, у неё значение port1=443, получаю из неё значение SEQ6=100, считаю SEQ6-SEQ4=51
Если разность SEQ6-SEQ4 не больше CWS (на данный момент оно 60) беру следующую строку.
Беру 7-ю строку, у неё значение port1=53023, значит из неё я получаю значение CWS=70.
т.к значение CWS изменилось с 60 на 70, теперь для четвёртой строки мне нужно искать разницу во времени между 4-й строкой и строкой, в которой SEQ будет не больше 70.
Беру 8-ю строку, у неё значение port1=443, получаю из неё значение SEQ8=140, считаю SEQ8-SEQ4=140-49=91
Разность SEQ8-SEQ4 больше CWS (на данный момент оно 70), значит оно не подходит.
Последняя строка, в которой разность была не больше CWS была 7, значит мне нужно взять время из 7 строки (0.07) из из него вычесть время 4 строки (0.04).
Полученное значение записать в файл (0.03).
Беру 5-ю строку, у неё значение port1=53023, получаю из нее значение CWS=60.
Беру 6-ю строку, у неё значение port1=443, значит для строки 6 мне нужно найти разницу во времени между 6-й строкой и строкой, в которой разность SEQ между искомой строкой и 6-й строкой (SEQi-SEQ6) будет не больше 60.
И так для всего датафрейма т.е для 11 млн. строк
Проблема расчёта осложняется тем, что в тот момент времени, когда значение seq достигает 4294967295 (максимальное значение поля) отсчет начинается от 0.
 No.     Time            port1   Seq             CWS
100019  456.19          53023   -               1100
100020  456.20          443     4294967290      -
100021  456.21          443     4294967291      -
100022  456.22          443     300             -
100023  456.23          53023   -               1000
100024  456.24          443     310             -
100025  456.25          443     340             -
т.е для строки 100022 значение изменения seq будет 304 (4294967291+300=304).

xam1816
И интересно узнать для себя, какую проблему решает ваша задача, т.е. что она дает

Задача оценивает возможность внедрения ложных сегментов с данными в tcp-соединение исходя из временных характеристик в пределах которых окно получателя свободно (не занято) данными.

Отредактировано user555 (Июнь 23, 2024 20:19:44)

Офлайн

#9 Июнь 23, 2024 17:44:09

user555
Зарегистрирован: 2024-06-20
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

xam1816
Seq - это последовательный номер байта в пакете при передаче от одного порта к другому
CWS - это количество байт которые могут быть переданы без проверки (окно)
Ack - это число которое будет передано в следующем байте для проверки
В целом верно.
xam1816
И интересно узнать для себя, какую проблему решает ваша задача, т.е. что она дает
Конечная цель получить отметки времени и визуально отобразить.
Затем оценить, возможно ли внедрить ложный сегмент с данными, если учитывать, что “человек посредине” тоже затратит время на перехват, модификацию пакета и отправку его обратно, плюс задержка сети.
Будет ли ложный пакет с данными ко времени прибытия “актуален” или к тому времени отправитель задействует (передаст реальные данные) всё окно получателя и пакет будет отброшен сетевой подсистемой.

П.С. У меня в целом всё считается, только для расчёта 11 млн. строк у меня затрачивается около 48 часов.
Еще не могу:
1. Обойти особенность изменения диапазона seq, приходиться разделять датафрейм на три части и считать их, а потом объединять.
2. Когда нахожу строку, в которой значение SEQ превышает CWS я беру прошлую строку, а она может быть с port1=53023, а мне необходимо взять последнюю строку где port1=443. Получается незначительная погрешность.

Отредактировано user555 (Июнь 23, 2024 18:00:16)

Прикреплённый файлы:
attachment Figure_2.png (77,5 KБ)

Офлайн

#10 Июнь 23, 2024 20:18:50

user555
Зарегистрирован: 2024-06-20
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

Rodegast
> Датафрейм большой 11 млн. строк. У меня выполняется очень медленноА ты как хотел? Я бы это в Postgres загружал и там бы рассчитывал. Ну а тебе проще будет посмотреть в сторону какого нибудь pandas или numpy.
Хотелось бы чуть-чуть побыстрее!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version