Size: a a a

Python для анализа данных

2020 December 03

N5

NEKETOC 555 in Python для анализа данных
Valerii Mamontov
Здравствуйте. А какому виду хотите привести каждую строку?
Здравствуйте к формату для записи в датафрейм(списком удобнее на сколько я понял)  
где 2020.12.03 03:06:46.869 это дата(она же может являться индексом)
а Bid = 13294.0, Volume = 1, Last = 13294.0, Flag = 88, Volume Real = 1.0, Type = Sell, Spread = 20 делятся на значения  у которых до = это название колонки , после = значение строки
источник

N5

NEKETOC 555 in Python для анализа данных
в стэке помогли решить мою задачу таким методом
text = "2020.12.02 10:47:28.819: Ask = 13332.0, Bid = 13331.5, Volume = 2, Last = 13331.5, Flag = 88, Volume Real = 2.0, Type = Sell, Spread = 5"

res = dict()

pos = text.rfind(':')
res['time'] = text[:pos]

for data in text[pos + 1:].split(","):
   obj = data.split("=")
   res[obj[0]] = obj[1]

print(res)
источник

N5

NEKETOC 555 in Python для анализа данных
однако у  res[obj[0]] = obj[1] выходит ошибка когда прировнял входные сообщения
while True:
   data = client.recv(1024)
   text = data.decode('utf-8')
источник

N5

NEKETOC 555 in Python для анализа данных
уточнение, не список а словарь.....
источник

s

ssv in Python для анализа данных
NEKETOC Лучше прогонки под отладчиком еще ничего не придумали) Думаю, что когда вы нарезаете строки, то остаются пробелы..
источник

N5

NEKETOC 555 in Python для анализа данных
я так понял, лучше вначале записать все строки в файл , потом скриптом их все разобрать и перезаписать??
источник

VM

Valerii Mamontov in Python для анализа данных
NEKETOC 555
я так понял, лучше вначале записать все строки в файл , потом скриптом их все разобрать и перезаписать??
Написал на скорую руку код для обработки текста, посмотрите.
Может он поможет Вам решить задачу.
https://colab.research.google.com/drive/1QJL1mRPTIamda_iozjeVYXqtWMTp_647?usp=sharing
источник

N5

NEKETOC 555 in Python для анализа данных
да ничего не пишет!! но данные поступают и они не обработываюся и ничего не происходит
источник

N5

NEKETOC 555 in Python для анализа данных
import pandas as pd
import socket
источник

N5

NEKETOC 555 in Python для анализа данных
HOST = '127.0.0.1'    # The remote host
PORT = 23456              # The same port as used by the server

client = socket.socket(
   socket.AF_INET, socket.SOCK_STREAM,
)

client.connect(
   (HOST, PORT)
)

while True:
   data = client.recv(1024)
   text = data.decode('utf-8')
   print (text)
источник

N5

NEKETOC 555 in Python для анализа данных
# обрабатываем все строки, кроме последней (она пустая)
for row in text.split("\n")[:-1]:
   rawdata = row.split(",")

   # проверка набора: в каждой строке должно быть 8 запятых
   if len(rawdata) == 8:
       # первый набор - '2020.12.03 03:06:40.519: Ask = 13296.0'
       # первый набор отличается от остальных, делим его на два блока
       first = rawdata[0].split("Ask")
       date.append(first[0][:-2].strip())
       ask.append(first[1].replace("=", "").strip())

       bid.append(rawdata[1].split("=")[1].strip())
       volume.append(rawdata[2].split("=")[1].strip())
       last.append(rawdata[3].split("=")[1].strip())
       flag.append(rawdata[4].split("=")[1].strip())
       volume_real.append(rawdata[5].split("=")[1].strip())
       type_.append(rawdata[6].split("=")[1].strip())
       spread.append(rawdata[7].split("=")[1].strip())
   else:
       print(f"строка содержит не 8 наборов данных, а {len(rawdata)}")
# создаём общий словарь с 9-ью ключами и заполняем их 9-ью спиками
totaldata = dict()
for c in columns:
   totaldata[c] = globals()[f'{c.lower()}']
# проверка словаря
# for k,v in totaldata.items():
#     print(k, "\t", v)
# создаём из словаря датафрейм
df = pd.DataFrame(totaldata)
df = df.set_index("date")
# есть 9 наборов, генерируем их них 9 списков
columns = ["date", "ask", "bid", "volume", "last", "flag", "volume_real", "type_", "spread"]
for i in columns:
   globals()[f'{i}'] = []
источник

N5

NEKETOC 555 in Python для анализа данных
код по итогу
источник

LK

Lyubov K. in Python для анализа данных
Привет! Подскажите, можно ли как-то осуществить merge по регулярному выражению?

Есть два фрейма нужно их сопоставит. В первом в строке например «Сбербанк», во втором «ПАО Сбербанк»?
источник

s

ssv in Python для анализа данных
Раз регулярку всёавно надо вкорячить, то проще привести один или оба фрейма к одному виду.
источник

LK

Lyubov K. in Python для анализа данных
К одному не получится, по 10 вариантов написания может быть только одной компании
источник

PZ

Pavel Zheltouhov in Python для анализа данных
И как это связано? Вы же приведете все 10 к 1
источник

A

Andrey Denisov in Python для анализа данных
Мержат - по ключу. Если всё не унифицировать - не смержить.
источник

ND

Natalya Davydova in Python для анализа данных
Раз надо мержить, я бы создала в каждом фрейме по столбцу. Для заполнения сделала бы функцию, реализующую сопоставление на основе дикта:
{
   key1: {'name1', 'name2', ...},
   key2: {'name3', 'name4', ...},
   ...
}

где в дикте ключи - то, что попадет в доп. столбец, по которому будем мержить( ключ для мержа), значения - сеты из возможных названий для одного и того же банка (тогда можно будет привести к ключу те значения, которые регуляркой и не сопоставить). После того, как заполнятся эти доп. столбцы для каждого датафрейма, можно будет смержить.
источник

VM

Valerii Mamontov in Python для анализа данных
Natalya Davydova
Раз надо мержить, я бы создала в каждом фрейме по столбцу. Для заполнения сделала бы функцию, реализующую сопоставление на основе дикта:
{
   key1: {'name1', 'name2', ...},
   key2: {'name3', 'name4', ...},
   ...
}

где в дикте ключи - то, что попадет в доп. столбец, по которому будем мержить( ключ для мержа), значения - сеты из возможных названий для одного и того же банка (тогда можно будет привести к ключу те значения, которые регуляркой и не сопоставить). После того, как заполнятся эти доп. столбцы для каждого датафрейма, можно будет смержить.
круто! 👍👍👍
источник

ВК

Владимир Калинин... in Python для анализа данных
а разобрался в чем проблема
источник