Эффективно обрабатывать данные Market Broadcast и обрабатывать их с помощью Python - PullRequest
0 голосов
/ 27 февраля 2019

Это может показаться широким вопросом, но это точное, чего я хочу добиться, поэтому, пожалуйста, прочитайте его.

Я создаю приложение, которое подключается к рыночной трансляции и подписывает около 200 скриптов для трансляции.Трансляция принимается для каждого сценария каждую секунду.

Теперь в приложении я хочу достичь двух вещей:

  1. Собрать трансляцию и сделать свечу на 1 минуту, 5 минут, 15 минут и так далее.
  2. Сравните значение прямой трансляции для определенных скриптов с предопределенными значениями.

Я пробовал другой подход к проблеме, но только один подход показал лучшие результаты.Даже если это не желаемый результат.

Мой текущий подход:

main.py----->Process----
                       |
                       |
                  ------------
                  |           |
              broadcast    candle 

В broadcast я получаю трансляцию и зажигаю 1 минуту и ​​пересылаю ее через соединение Pipe()к свече.В candle я стараюсь делать свечи через определенные промежутки времени.

Задача:

  1. Формирование каждого символа / каждой свечи занимает около одной секунды.Я использую pandas dataframe для хранения данных, а затем groupby() операцию для формирования свечи.
  2. Для 1-минутной свечи требуется почти 6-10 секунд для формирования свечи.Желательно, чтобы оно составляло около 2 секунд или меньше.
  3. Нет места для сравнения трансляций.

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

Я думал о HDF5 для хранения данных и dask для обработки, но стоит ли это?(Я никогда не работал над HDF5 / dask).

Любые предложения приветствуются.Спасибо !

РЕДАКТИРОВАТЬ

Это код, где я делаю свечи в соответствии с необходимой частотой.Обратите внимание, что он вызывается для каждого сценария после того, как я разрезаю данные сценария из основного кадра данных.

def __create_minutes_candles(self, data=None, freq=None, latest=True):
     start_time = time()
     data = data if isinstance(data, pd.DataFrame) else self.__data
     if freq and not data.empty:
         for _symbol in self.scrips:
             symbol_df = data[data['symbol'] == _symbol]
             symbol_candle = self.__create_candle(_symbol, symbol_df, freq)
             # Following code assembles all candles for all symbols and then append it to file

def __create_candle(self, symbol, symbol_df, freq):
     if not symbol_df.empty:
         candle = symbol_df.groupby(pd.Grouper(freq=freq, base=self.base)).apply(self.__candle_calc)
         candle.dropna(how='all', inplace=True)
         volume = symbol_df['volume'].resample(rule=freq, base=self.base).sum()
         volume = volume[volume != 0]
         symbol_candle = pd.concat([candle, volume], axis=1)
         symbol_candle['symbol'] = [symbol] * len(symbol_candle)
         symbol_candle = symbol_candle[self.file_columns]
         return symbol_candle

Это представление фрейма данных, из которого я генерирую свечи:

               timestamp      symbol       ltp      volume
0    2019-02-27 12:34:38    NIFTY_50  10778.70         NaN
1    2019-02-27 12:34:36         ACC   1430.00   1154730.0
2    2019-02-27 12:34:37    ADANIENT    131.30   3687673.0
3    2019-02-27 12:34:37  ADANIPORTS    325.60   4091014.0
4    2019-02-27 12:34:37  ADANIPOWER     47.85  28333489.0
5    2019-02-27 12:34:35  AJANTPHARM    997.00    397915.0
6    2019-02-27 12:34:37        ALBK     46.30  17753857.0
7    2019-02-27 12:34:33  AMARAJABAT    720.90    317973.0
8    2019-02-27 12:34:37   AMBUJACEM    214.95   1648760.0
9    2019-02-27 12:34:35  APOLLOHOSP   1152.15    738995.0
10   2019-02-27 12:34:37  APOLLOTYRE    212.65   1722708.0
11   2019-02-27 12:34:37      ARVIND     75.45   2225521.0
12   2019-02-27 12:34:37    ASHOKLEY     82.95  21954785.0
13   2019-02-27 12:34:37  ASIANPAINT   1405.35    755940.0
14   2019-02-27 12:34:37  AUROPHARMA    717.70   1248541.0
15   2019-02-27 12:34:37    AXISBANK    715.25   8247772.0
16   2019-02-27 12:34:37  BAJAJ-AUTO   2900.95    541710.0
17   2019-02-27 12:34:33  BAJAJFINSV   6398.05    182373.0
18   2019-02-27 12:34:37  BAJFINANCE   2637.80    759410.0
19   2019-02-27 12:34:37  BALKRISIND    890.90    659789.0
20   2019-02-27 12:34:37  BANKBARODA    100.60   6876303.0
21   2019-02-27 12:34:37   BANKINDIA     81.15   6643359.0
22   2019-02-27 12:34:36   BATAINDIA   1298.00    492525.0
23   2019-02-27 12:34:37         BEL     80.40   8375060.0
24   2019-02-27 12:34:37        BEML    837.90   2072199.0
25   2019-02-27 12:34:36  BERGEPAINT    297.00    564332.0
26   2019-02-27 12:34:36   BHARATFIN    921.05    271384.0
27   2019-02-27 12:34:36  BHARATFORG    510.85   1321287.0
28   2019-02-27 12:34:37  BHARTIARTL    316.25   2660313.0
29   2019-02-27 12:34:37        BHEL     65.05   3227136.0
...                  ...         ...       ...         ...
8410 2019-02-27 12:35:56      RPOWER     10.50  30267776.0
8411 2019-02-27 12:35:56        SAIL     48.45  12045549.0
8412 2019-02-27 12:35:56        SBIN    268.10  13249778.0
8413 2019-02-27 12:35:56    SHREECEM  16861.30     24079.0
8414 2019-02-27 12:35:56     SIEMENS    986.80    168896.0
8415 2019-02-27 12:35:56  SRTRANSFIN   1132.40    813839.0
8416 2019-02-27 12:35:56        STAR    412.65    710360.0
8417 2019-02-27 12:35:56   SUNPHARMA    441.75   9114905.0
8418 2019-02-27 12:35:56       SUNTV    604.80   2645366.0
8419 2019-02-27 12:35:56    TATACOMM    582.05    745842.0
8420 2019-02-27 12:35:56  TATAGLOBAL    191.55   1080853.0
8421 2019-02-27 12:35:56  TATAMOTORS    177.80  12885577.0
8422 2019-02-27 12:35:56  TATAMTRDVR     87.95   2138988.0
8423 2019-02-27 12:35:56   TATAPOWER     65.80   3032921.0
8424 2019-02-27 12:35:56   TATASTEEL    502.50   5517049.0
8425 2019-02-27 12:35:56         TCS   2046.40   2315885.0
8426 2019-02-27 12:35:56       TECHM    823.75   2428864.0
8427 2019-02-27 12:35:56       TITAN   1025.30    960611.0
8428 2019-02-27 12:35:56  TORNTPHARM   1823.75    134955.0
8429 2019-02-27 12:35:56  TORNTPOWER    238.90    901773.0
8430 2019-02-27 12:35:56  TV18BRDCST     33.05   2314156.0
8431 2019-02-27 12:35:56    TVSMOTOR    457.40    993427.0
8432 2019-02-27 12:35:56         UBL   1338.50    203388.0
8433 2019-02-27 12:35:56  ULTRACEMCO   3863.20    401531.0
8434 2019-02-27 12:35:56         UPL    864.00   1799297.0
8435 2019-02-27 12:35:56        VEDL    164.60   6466586.0
8436 2019-02-27 12:35:56      VOLTAS    543.25   1388822.0
8437 2019-02-27 12:35:56       WIPRO    376.90   4978421.0
8438 2019-02-27 12:35:56     YESBANK    224.45  42431769.0
8439 2019-02-27 12:35:56        ZEEL    462.50   7847558.0

Это представление фрейма данных, которое я генерирую.

                         symbol     open     high      low    close    volume
timestamp                                                                    
2019-02-27 12:29:00         ACC  1431.50  1432.15  1431.25  1431.85    1091.0
2019-02-27 12:29:00    ADANIENT   131.80   131.90   131.75   131.80    4516.0
2019-02-27 12:29:00  ADANIPORTS   326.15   326.55   326.00   326.40    6476.0
2019-02-27 12:29:00  ADANIPOWER    47.80    47.80    47.50    47.70   71156.0
2019-02-27 12:29:00  AJANTPHARM   999.00   999.00   998.10   998.10     245.0
2019-02-27 12:29:00        ALBK    46.55    46.70    46.55    46.65   11483.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...