分箱时间序列的转移概率
Transition probabilities of a binned time series
我的数据:
data
Out[84]:
array([ 1.79, 1.93, 1.81, 1.79, 3.87, 5.75, 7.25, 5.03, 11.11,
11.53, 13.79, 4.41, 4.68, 7.9 , 3.49, 1.8 , 1.85, 2.02,
1.81, 2.33, 2.13, 1.92, 1.74, 1.84])
我定义了三个ranges/bins,其中每个元素可以是:
b = 3
binsize = (Max-Min)/b
d = {}
for i in range(0,b):
upperlimit = Min + (i+1)*binsize
d["Bin "+str(i)+" upper limit"] = upperlimit
d
Out[83]:
{'Bin 0 upper limit': 5.756666666666667,
'Bin 1 upper limit': 9.773333333333333,
'Bin 2 upper limit': 13.790000000000001}
所以
Bin 0 从 Min 变为 5.756
Bin 1 从 5.756 到 9.7733
Bin 2 从 9.7733 到 13.79
我想计算给定一个元素 X,X+1 在某个 bin 中的概率。从一个 bin 到另一个 bin 的转换概率可以这么说。
我该怎么做?我正在努力解决这个问题。
所以基本上,在任何时间点 t(数组的第一个元素在 t=0,最后一个在 t=23)
我想知道从一个 bin 到另一个 bin 的转移概率是多少
Pandas 有一些方法在这里很有用,包括装箱,因此您无需手动操作。希望你不介意使用 pandas——无论如何,如果你想“手动”,它应该会给你一个如何做的想法
让我们从将数据放入容器开始。这里 pd.cut
会将您的数据分成 3 个箱子,return 每个点一个箱子。我们还将原始数据作为列 'x'
放入数据框中
import pandas as pd
b = 3
bins = pd.cut(data, b, labels = False)
df = pd.DataFrame({'x':data})
现在让我们把 bins
放入 df
作为 'from' 列,指示每个 x
点在哪个 bin 中,让我们 shift
显示它下一步将在哪里
df['from'] = bins
df['to'] = df['from'].shift(-1)
df = df.dropna().astype(int)
df
现在你的 df 看起来像这样:
x from to
-- --- ------ ----
0 1 0 0
1 1 0 0
2 1 0 0
3 1 0 0
4 3 0 0
5 5 0 1
6 7 1 0
7 5 0 2
8 11 2 2
9 11 2 2
10 13 2 0
11 4 0 0
12 4 0 1
13 7 1 0
14 3 0 0
15 1 0 0
16 1 0 0
17 2 0 0
18 1 0 0
19 2 0 0
20 2 0 0
21 1 0 0
22 1 0 0
现在我们可以 groupby
'from' 和 'to' 上的 df
并计算您的过程从给定的 from
bin 转换到给出 to
bin:
df.groupby(['from','to']).count().reset_index().rename(columns = {'x':'count'})
看起来像这样:
from to count
0 0 0 15
1 0 1 2
2 0 2 1
3 1 0 2
4 2 0 1
5 2 2 2
例如,您的进程从 bin0 转换到 bin1 2 次,等等
你也可以用矩阵形式得到这个:
df.groupby(['from','to']).count().unstack(level = 1).fillna(0).astype(int)
它看起来像这样:
x
to 0 1 2
from
0 15 2 1
1 2 0 0
2 1 0 2
我的数据:
data
Out[84]:
array([ 1.79, 1.93, 1.81, 1.79, 3.87, 5.75, 7.25, 5.03, 11.11,
11.53, 13.79, 4.41, 4.68, 7.9 , 3.49, 1.8 , 1.85, 2.02,
1.81, 2.33, 2.13, 1.92, 1.74, 1.84])
我定义了三个ranges/bins,其中每个元素可以是:
b = 3
binsize = (Max-Min)/b
d = {}
for i in range(0,b):
upperlimit = Min + (i+1)*binsize
d["Bin "+str(i)+" upper limit"] = upperlimit
d
Out[83]:
{'Bin 0 upper limit': 5.756666666666667,
'Bin 1 upper limit': 9.773333333333333,
'Bin 2 upper limit': 13.790000000000001}
所以 Bin 0 从 Min 变为 5.756 Bin 1 从 5.756 到 9.7733 Bin 2 从 9.7733 到 13.79
我想计算给定一个元素 X,X+1 在某个 bin 中的概率。从一个 bin 到另一个 bin 的转换概率可以这么说。 我该怎么做?我正在努力解决这个问题。
所以基本上,在任何时间点 t(数组的第一个元素在 t=0,最后一个在 t=23) 我想知道从一个 bin 到另一个 bin 的转移概率是多少
Pandas 有一些方法在这里很有用,包括装箱,因此您无需手动操作。希望你不介意使用 pandas——无论如何,如果你想“手动”,它应该会给你一个如何做的想法
让我们从将数据放入容器开始。这里 pd.cut
会将您的数据分成 3 个箱子,return 每个点一个箱子。我们还将原始数据作为列 'x'
import pandas as pd
b = 3
bins = pd.cut(data, b, labels = False)
df = pd.DataFrame({'x':data})
现在让我们把 bins
放入 df
作为 'from' 列,指示每个 x
点在哪个 bin 中,让我们 shift
显示它下一步将在哪里
df['from'] = bins
df['to'] = df['from'].shift(-1)
df = df.dropna().astype(int)
df
现在你的 df 看起来像这样:
x from to
-- --- ------ ----
0 1 0 0
1 1 0 0
2 1 0 0
3 1 0 0
4 3 0 0
5 5 0 1
6 7 1 0
7 5 0 2
8 11 2 2
9 11 2 2
10 13 2 0
11 4 0 0
12 4 0 1
13 7 1 0
14 3 0 0
15 1 0 0
16 1 0 0
17 2 0 0
18 1 0 0
19 2 0 0
20 2 0 0
21 1 0 0
22 1 0 0
现在我们可以 groupby
'from' 和 'to' 上的 df
并计算您的过程从给定的 from
bin 转换到给出 to
bin:
df.groupby(['from','to']).count().reset_index().rename(columns = {'x':'count'})
看起来像这样:
from to count
0 0 0 15
1 0 1 2
2 0 2 1
3 1 0 2
4 2 0 1
5 2 2 2
例如,您的进程从 bin0 转换到 bin1 2 次,等等
你也可以用矩阵形式得到这个:
df.groupby(['from','to']).count().unstack(level = 1).fillna(0).astype(int)
它看起来像这样:
x
to 0 1 2
from
0 15 2 1
1 2 0 0
2 1 0 2