我遵循有关VAR模型的statsmodel教程,并对获得的结果有疑问(我的整个代码都可以在本文结尾处找到)。
原始数据(存储在中mdata)显然是不稳定的,因此需要进行转换,方法是使用以下行:
data = np.log(mdata).diff().dropna()
Run Code Online (Sandbox Code Playgroud)
如果然后绘制原始数据(mdata)和转换后的数据(data),则该图如下所示:
然后使用拟合对数差异数据
model = VAR(data)
results = model.fit(2)
Run Code Online (Sandbox Code Playgroud)
然后,如果将原始的对数差数据与拟合值作图,则会得到如下图:
我的问题是我如何才能得到相同的图,但对于没有对数差异的原始数据。如何将由拟合值确定的参数应用于这些原始数据?有没有一种方法可以使用我获得的参数将拟合的对数差异数据转换回原始数据,如果可以,该如何完成?
这是我的完整代码和获得的输出:
import pandas
import statsmodels as sm
from statsmodels.tsa.api import VAR
from statsmodels.tsa.base.datetools import dates_from_str
from statsmodels.tsa.stattools import adfuller
import numpy as np
import matplotlib.pyplot as plt
mdata = sm.datasets.macrodata.load_pandas().data
dates = mdata[['year', 'quarter']].astype(int).astype(str)
quarterly = dates["year"] + "Q" + dates["quarter"]
quarterly = dates_from_str(quarterly)
mdata = mdata[['realgdp', 'realcons', 'realinv']]
mdata.index = pandas.DatetimeIndex(quarterly)
data = np.log(mdata).diff().dropna()
f, …Run Code Online (Sandbox Code Playgroud) 我有这样的数据帧
import pandas as pd
df = pd.DataFrame({'a': ['abc', 'r00001', 'r00010', 'rfoo', 'r01234', 'r1234'], 'b': range(6)})
a b
0 abc 0
1 r00001 1
2 r00010 2
3 rfoo 3
4 r01234 4
5 r1234 5
Run Code Online (Sandbox Code Playgroud)
我现在想要选择此数据框的所有列,其中列中的条目以后跟五个数字a开头r.
从这里我学会了如果r没有数字就开始这样做:
print df.loc[df['a'].str.startswith('r'), :]
a b
1 r00001 1
2 r00010 2
3 rfoo 3
4 r01234 4
5 r1234 5
Run Code Online (Sandbox Code Playgroud)
像这样的东西
print df.loc[df['a'].str.startswith(r'[r]\d{5}'), :]
Run Code Online (Sandbox Code Playgroud)
当然不行.如何正确地做到这一点?
使用NumPy polyfit(或类似的东西)是否有一种简单的方法来获得将一个或多个系数限制为特定值的解决方案?
例如,我们可以使用以下公式找到普通的多项式拟合:
x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
z = np.polyfit(x, y, 3)
Run Code Online (Sandbox Code Playgroud)
屈服
array([ 0.08703704, -0.81349206, 1.69312169, -0.03968254])
Run Code Online (Sandbox Code Playgroud)
但是,如果我想要最合适的多项式,其中第三个系数(在上述情况下z[2])要求为1,该怎么办?还是我需要从头开始编写配件?
以下是代码:
import numpy as np
import pandas as pd
def correlation(x, y):
std_x = (x - x.mean())/x.std(ddof = 0)
std_y = (y - y.mean())/y.std(ddof = 0)
return (std_x * std_y).mean
a = pd.Series([2, 4, 5, 7, 9])
b = pd.Series([12, 10, 9, 7, 3])
ca = correlation(a, b)
print(ca)
Run Code Online (Sandbox Code Playgroud)
它不返回相关的值,而是返回一个带有键的系列0 ,1, 2, 3, 4, 5和值-1.747504, -0.340844, -0.043282, -0.259691, -2.531987.
请帮我理解这背后的问题.
我想在点击时包含两个功能
<li class="active" (click) ="routeTransaction(), activateClass(classChange)" *ngIf="permissionKeys.indexOf('TRANSACTIONS')>-1" [ngClass]="{'liactive': classChange}" >
<a >
<i class="glyphicon glyphicon-cog"></i>
<span>Transaction</span>
</a>
</li>
Run Code Online (Sandbox Code Playgroud)
这是一个错误; 怎么能修好?
我确实在这样的查询中遇到过字符串
o = 'some interesting {foo123:bar_675:get_me.xyz} string'
Run Code Online (Sandbox Code Playgroud)
我想从大括号内的部分中提取最后一个冒号之后的部分,所以在这种情况下get_me.xyz.
我知道正则表达式\{.*:(.*)\}可以工作(在 Python 中测试):
import re
o = 'some interesting {foo123:bar_675:get_me.xyz} string'
re.findall('\{.*:(.*)\}', o)
Run Code Online (Sandbox Code Playgroud)
将返回
['get_me.xyz']
Run Code Online (Sandbox Code Playgroud)
我现在如何在查询中使用这个正则表达式?
我试过
SELECT (regex(?o, "\{.*:(.*)\}") as ?substring) ?o
WHERE {
?s ?p ?o .
}
Run Code Online (Sandbox Code Playgroud)
但这总是会引发错误
Parse error on line 6:
...SELECT (regex(?o, "\{.*:(.*)\}") as ?
---------------------^
Expecting 'IRIREF', 'PNAME_NS', 'VAR', '(', 'INTEGER', '!', '-', 'FUNC_ARITY0', 'FUNC_ARITY1', 'FUNC_ARITY2', 'IF', 'BOUND', 'BNODE', 'EXISTS', 'COUNT', 'FUNC_AGGREGATE', 'GROUP_CONCAT', 'DECIMAL', 'DOUBLE', 'true', 'false', 'STRING_LITERAL1', 'STRING_LITERAL2', 'STRING_LITERAL_LONG1', 'STRING_LITERAL_LONG2', …Run Code Online (Sandbox Code Playgroud) 这是我的多索引数据框:
# Index Levels
outside = ['G1','G1','G1','G2','G2','G2']
inside = [1,2,3,1,2,3]
hier_index = list(zip(outside,inside))
hier_index = pd.MultiIndex.from_tuples(hier_index)
df = pd.DataFrame(np.random.randn(6,2),index=hier_index,columns=['A','B'])
df.index.names = ['Group','Num']
df
Run Code Online (Sandbox Code Playgroud)
数据框如下所示:
A B
Group Num
G1 1 0.147027 -0.479448
2 0.558769 1.024810
3 -0.925874 1.862864
G2 1 -1.133817 0.610478
2 0.386030 2.084019
3 -0.376519 0.230336
Run Code Online (Sandbox Code Playgroud)
我想要实现的是返回Group G1and G2, Num 1and 中的值,3如下所示:
G1 1 0.147027 -0.479448
3 -0.925874 1.862864
G2 1 -1.133817 0.610478
3 -0.376519 0.230336
Run Code Online (Sandbox Code Playgroud)
我试过了
df.loc[['G1','G2']].loc[[1,3]]
Run Code Online (Sandbox Code Playgroud)
但它什么也没显示。
然后我试过了
df.xs([['G1','G2'],[1,3]])
Run Code Online (Sandbox Code Playgroud)
但它返回 …
我有两个这样的数据框:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(
{
'A': list('aaabdcde'),
'B': list('smnipiuy'),
'C': list('zzzqqwll')
}
)
df2 = pd.DataFrame(
{
'mapcol': list('abpppozl')
}
)
A B C
0 a s z
1 a m z
2 a n z
3 b i q
4 d p q
5 c i w
6 d u l
7 e y l
mapcol
0 a
1 b
2 p
3 p
4 p
5 o
6 z
7 …Run Code Online (Sandbox Code Playgroud) 我有两个这样的数据框:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(
{
'A': list('abdcde'),
'B': ['s', np.nan, 'h', 'j', np.nan, 'g']
}
)
df2 = pd.DataFrame(
{
'mapcol': list('abpppozl')
}
)
A B
0 a s
1 b NaN
2 d h
3 c j
4 d NaN
5 e g
mapcol
0 a
1 b
2 p
3 p
4 p
5 o
6 z
7 l
Run Code Online (Sandbox Code Playgroud)
我现在想,以填补B在df1使用的值df2['mapcol'],但是没有使用的实际指标,但-在这种情况下-只是前两个项目df2['mapcol']。因此,而不是b和 …
假设我有
from enum import Enum
class SomeType(Enum):
TYPEA = 'type_a'
TYPEB = 'type_b'
TYPEC = 'type_c'
Run Code Online (Sandbox Code Playgroud)
如果我现在这样做
SomeType('type_a')
Run Code Online (Sandbox Code Playgroud)
我会得到
<SomeType.TYPEA: 'type_a'>
Run Code Online (Sandbox Code Playgroud)
正如预期的那样。当我做
SomeType('type_o')
Run Code Online (Sandbox Code Playgroud)
我会收到
ValueError:“type_o”不是有效的 SomeType
这也是预料之中的。
我的问题是:可以以某种方式轻松自定义错误,以便它显示所有有效类型吗?所以,就我而言,我希望
ValueError:“type_o”不是有效的 SomeType。有效类型为“type_a”、“type_b”、“type_c”。
python ×8
pandas ×6
dataframe ×3
regex ×2
angular ×1
enums ×1
fillna ×1
multi-index ×1
numpy ×1
polynomials ×1
python-3.x ×1
scipy ×1
sparql ×1
statistics ×1
statsmodels ×1
var ×1