Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测Python数据集中的区域_Python_Pandas_Numpy_Scipy - Fatal编程技术网

检测Python数据集中的区域

检测Python数据集中的区域,python,pandas,numpy,scipy,Python,Pandas,Numpy,Scipy,我试图解决一个不太难解决的问题,但我很难找到解决的方法 基本上,我有一组OHLC数据: >>print(df) Open High Low Close Volume Date Date 2020-11-02 00:00:00 396.68 401.01 396.44 400.70 41468.48318 2020-11-02 00:00:00 2020-11-02 0

我试图解决一个不太难解决的问题,但我很难找到解决的方法

基本上,我有一组OHLC数据:

>>print(df)

                       Open    High     Low   Close       Volume                Date
Date
2020-11-02 00:00:00  396.68  401.01  396.44  400.70  41468.48318 2020-11-02 00:00:00
2020-11-02 00:30:00  400.68  404.50  400.61  402.45  35209.25068 2020-11-02 00:30:00
2020-11-02 01:00:00  402.48  403.14  400.62  401.89  18107.53656 2020-11-02 01:00:00
2020-11-02 01:30:00  401.88  402.88  401.26  402.48  13852.17215 2020-11-02 01:30:00
2020-11-02 02:00:00  402.49  403.85  398.82  401.17  21853.35028 2020-11-02 02:00:00
...                     ...     ...     ...     ...          ...                 ...
2020-11-04 19:30:00  401.88  403.88  401.88  402.46  17944.49509 2020-11-04 19:30:00
2020-11-04 20:00:00  402.50  404.23  397.72  399.59  41674.44864 2020-11-04 20:00:00
2020-11-04 20:30:00  399.60  402.26  399.40  401.21  18606.38545 2020-11-04 20:30:00
2020-11-04 21:00:00  401.20  403.15  400.79  402.70  14408.66482 2020-11-04 21:00:00
2020-11-04 21:30:00  402.69  403.01  401.74  402.71   8873.15569 2020-11-04 21:30:00
给定一个固定的范围,该范围可以是10(从350到360,351到361,依此类推),当超过N根蜡烛在该范围内闭合时进行检测。所以基本上这个范围需要“滑动”整个图表,找到符合我上面描述的标准的区域(超过N个蜡烛在这个范围内闭合)

以下是一个可视示例:

在本例中,白色框中有6支蜡烛闭合,因此这就是我要寻找的,请注意蜡烛必须而不是穿过框,它只需要从那里“开始”


我尽力把它说得尽可能清楚和详细。我想发布更多的代码,但我真的很难找到一种方法来实现这一点,尽管我很确定它应该很容易与熊猫,Numpy或scipy。有人能帮我找到这方面的方向吗?欢迎提供任何建议

您的描述有点模糊,但这可能会有所帮助:

比如说,您在一个名为
start
的numpy数组中有起始点,通过以下方式找到这些点在350到360之间的位置:

np.where((start > 350) & (start < 360))
np.其中((开始>350)和(开始<360))
要查看这些点的数量,请执行以下操作:

len(np.where((start  >350) & (start  < 360))[0])
len(np.where((start>350)和(start<360))[0])

您的描述有点模糊,但这可能会有所帮助:

比如说,您在一个名为
start
的numpy数组中有起始点,通过以下方式找到这些点在350到360之间的位置:

np.where((start > 350) & (start < 360))
np.其中((开始>350)和(开始<360))
要查看这些点的数量,请执行以下操作:

len(np.where((start  >350) & (start  < 360))[0])
len(np.where((start>350)和(start<360))[0])

我建议您在代码中添加一个循环。这将是一种悲哀:

mini = df['close'].min()
maxi  = df['close'].max()

candles = []
for i in range(mini, maxi-10):
    n = len(df[df['Close'].between(i,i+10)])
    if n>=6:
        candles.append((mini, maxi, n))  

请你在你的数据框上试用一下,看看是否有效

我建议您在代码中添加一个循环。这将是一种悲哀:

mini = df['close'].min()
maxi  = df['close'].max()

candles = []
for i in range(mini, maxi-10):
    n = len(df[df['Close'].between(i,i+10)])
    if n>=6:
        candles.append((mini, maxi, n))  

请你在你的数据框上试用一下,看看是否有效

您可以通过以下方法在numpy中找到区域:1)制作一个整数T/F数组,标记区域中的点;2) 通过减去相邻点,找出台阶的位置(进入和离开区域);3) 使用
np.nonzero
查找步骤2中的边界

下面是一个示例(最后一个图中的绿色带表示仅由
非零返回的两个索引标识的区域):

另外,请注意,我在列表中有一个循环,通常在使用pandas和numpy时,最好尽量避免此类循环,但在本例中,循环不是通过所有数据,而是通过端点列表,这是一个比原始数据短得多的列表


最后,请注意,这里的所有问题与您试图查找离散数据区域的问题一样,都有一个关于如何处理边界的问题,因此,如果这很重要,请务必根据需要解决这个问题。

您可以通过以下方法在numpy中查找区域:1)制作一个标记区域中点的整数T/F数组;2) 通过减去相邻点,找出台阶的位置(进入和离开区域);3) 使用
np.nonzero
查找步骤2中的边界

下面是一个示例(最后一个图中的绿色带表示仅由
非零返回的两个索引标识的区域):

另外,请注意,我在列表中有一个循环,通常在使用pandas和numpy时,最好尽量避免此类循环,但在本例中,循环不是通过所有数据,而是通过端点列表,这是一个比原始数据短得多的列表


最后,请注意,这里的所有问题都是关于如何处理边界的问题,正如您试图找到一个离散数据区域一样,如果这很重要,请务必根据您的需要解决这个问题。

类似于
df[df['Close'].between(350360)]
这是否回答了您的问题?这可能会有所帮助,但在我的例子中,它有点复杂:我需要检测所有这些“区域”,它们符合我上面描述的标准。非常感谢。类似于
df[df['Close']。介于(350360)]
之间,这是否回答了您的问题?这可能会有所帮助,但在我的例子中,它有点复杂:我需要检测所有这些“区域”,它们符合我上面描述的标准。非常感谢。谢谢你的回答!你能告诉我哪一部分含糊不清,以便我能改进这个问题吗?这是一个开始!问题是我需要在整个数据集中搜索这些区域,因此范围需要在整个数据集中“移动”,例如:350-360、351-361等等。我希望我没有太困惑谢谢你的回答!你能告诉我哪一部分含糊不清,以便我能改进这个问题吗?这是一个开始!问题是我需要在整个数据集中搜索这些区域,因此范围需要在整个数据集中“移动”,例如:350-360、351-361等等。我希望我没有太困惑。谢谢你!我尝试了这个方法,但我得到了以下错误:TypeError:'numpy.float64'对象不能解释为integerage(mini,maxi-10)->range(int(mini),int(maxi-10))TypeError:'numpy.float64'对象不能解释为integery你可以将chnage
mini=df['close'].min()转换为
mini=int(df['close'].min())
和maxi一样。非常感谢!我尝试了这个方法,但我得到了以下错误:TypeError:'numpy.float64'对象不能解释为integerage(mini,maxi-10)->range(int(mini),int(maxi-10))TypeError:'numpy.float64'对象不能解释为integery你可以将chnage
mini=df['close'].min()转换为
mini=int(df['close'].min())
与maxi类似。这非常有趣。多谢各位!我只是有点麻烦