Pandas DataFrameの速度を最適化する方法は?

user10795232

私はこのパンダコードを持っていますが、それは非常に遅いです。どうすればそれを最適化できますか?つまり、実行すると、実行に約4秒かかります。私がここで呼び出すこのコードは、私が何度も何度も呼び出すものであり、現在はそうではないので、できるだけ速くする必要があります...誰かがアイデアを思いついたのですか?

    self.dataframe = pd.DataFrame(columns=list(['O' ,'H' ,'L' ,'C' ,'RSI', 'Upper Band', 'Lower Band'])) 

    BinanceHistoricalUrl = "https://api.binance.com/api/v1/klines?"
    BinanceHistoricalPayload = {'symbol' : 'BTCUSDT','interval': '1m','limit': 100}
    HistoricalRequestData = requests.get(url=BinanceHistoricalUrl, params=BinanceHistoricalPayload).json()

    Lenght = len(HistoricalRequestData)

    for i in range(Lenght):

        O = HistoricalRequestData[i][1]
        O = "{:.4f}".format(O)
        O = float(O)

        H = HistoricalRequestData[i][2]
        H = "{:.4f}".format(H)
        H = float(H)

        L = HistoricalRequestData[i][3]
        L = "{:.4f}".format(H)
        L = float(L)

        C = HistoricalRequestData[i][4]
        C = "{:.4f}".format(C)
        C = float(C)

#        Volume = HistoricalRequestData[0]["priceData"][i]['volume']
#        Volume = "{:.4f}".format(Volume)
#        Volume = float(Volume)

        self.dataframe = self.dataframe.append({'O': O, 'H' : H, 'L' : L, 'C' : C}, ignore_index=True)         

    make_RSI(self.dataframe)
    make_bollinger_bands(self.dataframe)
    RSI = self.dataframe['RSI'][99]
    RSI = float(RSI)
    UppBoll = self.dataframe['Upper Band'][99]
    UndBoll = self.dataframe['Lower Band'][99]
    previouscloseprice = self.dataframe['C'][99]
    MA = self.dataframe['20 Day MA'][99]
    DistanceUppBoll = UppBoll - MA
    DistanceUppBoll = float(DistanceUppBoll)
    DistanceUndBoll = UndBoll - MA
    DistanceUndBoll = float(DistanceUndBoll)

    self.dataframe = self.dataframe.iloc[0:0]




def make_RSI(dataframe):
    delta = dataframe['C'].diff()
    dUp, dDown = delta.copy(), delta.copy()
    dUp[dUp < 0] = 0
    dDown[dDown > 0] = 0
    RolUp = dUp.rolling(14).mean()
    RolDown = dDown.rolling(14).mean().abs()

    RS = RolUp / RolDown
    dataframe['RSI'] = 100 - (100/(1+RS))

def make_bollinger_bands(dataframe):
    dataframe['20 Day MA'] = dataframe['C'].rolling(window=20).mean()
    dataframe['20 Day STD'] = dataframe['C'].rolling(window=20).std()
    dataframe['Upper Band'] = dataframe['20 Day MA'] + (dataframe['20 Day STD'] * 2)
    dataframe['Lower Band'] = dataframe['20 Day MA'] - (dataframe['20 Day STD'] * 2)
rpanai

あなたのコードは実際には再現可能ではありません。注文しましょう

# first import libraries
import pandas as pd
import requests

#define functions
def make_RSI(dataframe):
    delta = dataframe['C'].diff()
    dUp, dDown = delta.copy(), delta.copy()
    dUp[dUp < 0] = 0
    dDown[dDown > 0] = 0
    RolUp = dUp.rolling(14).mean()
    RolDown = dDown.rolling(14).mean().abs()

    RS = RolUp / RolDown
    dataframe['RSI'] = 100 - (100/(1+RS))

def make_bollinger_bands(dataframe):
    dataframe['20 Day MA'] = dataframe['C'].rolling(window=20).mean()
    dataframe['20 Day STD'] = dataframe['C'].rolling(window=20).std()
    dataframe['Upper Band'] = dataframe['20 Day MA'] + (dataframe['20 Day STD'] * 2)
    dataframe['Lower Band'] = dataframe['20 Day MA'] - (dataframe['20 Day STD'] * 2)

#############
# your code #
############
BinanceHistoricalUrl = "https://api.binance.com/api/v1/klines?"
BinanceHistoricalPayload = {'symbol' : 'BTCUSDT','interval': '1m','limit': 100}
#get data
HistoricalRequestData = requests.get(url=BinanceHistoricalUrl, 
                                     params=BinanceHistoricalPayload)\
                                .json()

# put on a dataframe
dataframe = pd.DataFrame(HistoricalRequestData)
# consider only columns from 1 to 4(included)
dataframe = dataframe[dataframe.columns[1:5]]
# assign column names
dataframe.columns = ["O", "H", "L", "C"]
# set type float
dataframe = dataframe.astype("float64")
# call functions
make_RSI(dataframe)
make_bollinger_bands(dataframe)

最後に何を達成したいのかは明確ではありませんが、最後の行を使用しているだけなdataframeので、次のことを検討してください。

last = dataframe.iloc[-1]
DistanceUppBoll = last["Upper Band"] - last["20 Day MA"]
DistanceUndBoll = last["Lower Band"] - last["20 Day MA"]

これは717 ms私のラップトップを引き受けました。私はそれが主にあなたの接続の速度に依存すると思います。

注:ここでの重要なポイントは、可能であればループを回避する必要があるということです。

更新:基本的なテクニカル分析に基づいて取引戦略を実装しようとしている場合はMA、ストリーミングで計算する方法を確認する必要があります

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

PandasのPandas.loc速度がDataFrameの初期化に依存するのはなぜですか?MultiIndex .locをできるだけ速くする方法は?

分類Dev

pandasデータフレームの条件でdoubleforループを最適化する方法は?

分類Dev

pandas DataFrame、特定の列に関数を適用する方法は?

分類Dev

pandas DataFrameの行間の文字列を標準化する方法は?

分類Dev

pandas DataFrameの処理を最適化し、コードの可読性を向上させるにはどうすればよいですか?

分類Dev

pandas DataFrameの値を2値化する方法は?

分類Dev

残りのpandas.DataFrameを取得する最も賢い方法は何ですか?

分類Dev

R data.tableをpandas.DataFrameに変換する最良の方法は?

分類Dev

pandas.DataFrame.pivotをどのように使用するのが最適ですか?

分類Dev

スクリプトの速度を最適化する方法は?

分類Dev

Pandas DataFrame:グループの最初の行と最後の行による差を計算する方法は?

分類Dev

pandas.dataframeで最適化された選択を検索します

分類Dev

pandas DataFrameで欠落している行を特定する最良の方法は何ですか?

分類Dev

pandas.DataFrame.to_sqlからの挿入を高速化する方法

分類Dev

2つのpandas Dataframe列の辞書を作成する最も効率的な方法は何ですか?

分類Dev

2つのPandas Dataframe間のデカルト積の最適化

分類Dev

このforループの計算速度を最適化する方法は?

分類Dev

複数のフィルターをpandas DataFrameまたはSeriesに適用する効率的な方法

分類Dev

Python / Pandas-基準でグループ化する最良の方法は?

分類Dev

Pandasパネルの各DataFrameに関数を効率的に適用する方法

分類Dev

Python Pandas DataFrameの特定の行の値を更新する方法は?

分類Dev

Firebase関数の応答速度を最適化する方法

分類Dev

Pandas DataFrameの列をグループ化する簡単な方法はありますか?

分類Dev

pandas Dataframeの列の値を変換する方法は?

分類Dev

Pandas DataFrameの行間の差を計算する方法は?

分類Dev

pandas DataFrame の外れ値の境界を選択する方法は?

分類Dev

Pandas DataFrameでIF、else、elseif条件を適用する方法

分類Dev

Apache Beamの変化率を計算する方法は?つまり、pandas.DataFrame.pct_change

分類Dev

DataFrameによってPandasグループをフラット化する方法は?

Related 関連記事

  1. 1

    PandasのPandas.loc速度がDataFrameの初期化に依存するのはなぜですか?MultiIndex .locをできるだけ速くする方法は?

  2. 2

    pandasデータフレームの条件でdoubleforループを最適化する方法は?

  3. 3

    pandas DataFrame、特定の列に関数を適用する方法は?

  4. 4

    pandas DataFrameの行間の文字列を標準化する方法は?

  5. 5

    pandas DataFrameの処理を最適化し、コードの可読性を向上させるにはどうすればよいですか?

  6. 6

    pandas DataFrameの値を2値化する方法は?

  7. 7

    残りのpandas.DataFrameを取得する最も賢い方法は何ですか?

  8. 8

    R data.tableをpandas.DataFrameに変換する最良の方法は?

  9. 9

    pandas.DataFrame.pivotをどのように使用するのが最適ですか?

  10. 10

    スクリプトの速度を最適化する方法は?

  11. 11

    Pandas DataFrame:グループの最初の行と最後の行による差を計算する方法は?

  12. 12

    pandas.dataframeで最適化された選択を検索します

  13. 13

    pandas DataFrameで欠落している行を特定する最良の方法は何ですか?

  14. 14

    pandas.DataFrame.to_sqlからの挿入を高速化する方法

  15. 15

    2つのpandas Dataframe列の辞書を作成する最も効率的な方法は何ですか?

  16. 16

    2つのPandas Dataframe間のデカルト積の最適化

  17. 17

    このforループの計算速度を最適化する方法は?

  18. 18

    複数のフィルターをpandas DataFrameまたはSeriesに適用する効率的な方法

  19. 19

    Python / Pandas-基準でグループ化する最良の方法は?

  20. 20

    Pandasパネルの各DataFrameに関数を効率的に適用する方法

  21. 21

    Python Pandas DataFrameの特定の行の値を更新する方法は?

  22. 22

    Firebase関数の応答速度を最適化する方法

  23. 23

    Pandas DataFrameの列をグループ化する簡単な方法はありますか?

  24. 24

    pandas Dataframeの列の値を変換する方法は?

  25. 25

    Pandas DataFrameの行間の差を計算する方法は?

  26. 26

    pandas DataFrame の外れ値の境界を選択する方法は?

  27. 27

    Pandas DataFrameでIF、else、elseif条件を適用する方法

  28. 28

    Apache Beamの変化率を計算する方法は?つまり、pandas.DataFrame.pct_change

  29. 29

    DataFrameによってPandasグループをフラット化する方法は?

ホットタグ

アーカイブ