在Python Pandas中主要OLS类的代码中,我正在寻求帮助以阐明在执行加权OLS时报告的标准错误和t-stats使用的约定.
这是我的示例数据集,其中一些导入使用Pandas并直接使用scikits.statsmodels WLS:
import pandas
import numpy as np
from statsmodels.regression.linear_model import WLS
# Make some random data.
np.random.seed(42)
df = pd.DataFrame(np.random.randn(10, 3), columns=['a', 'b', 'weights'])
# Add an intercept term for direct use in WLS
df['intercept'] = 1
# Add a number (I picked 10) to stabilize the weight proportions a little.
df['weights'] = df.weights + 10
# Fit the regression models.
pd_wls = pandas.ols(y=df.a, x=df.b, weights=df.weights)
sm_wls = WLS(df.a, df[['intercept','b']], weights=df.weights).fit()
Run Code Online (Sandbox Code Playgroud)
我用%cpaste它在IPython中执行它,然后打印两个回归的摘要:
In …Run Code Online (Sandbox Code Playgroud) 我继承了一些旧的Stata代码(Stata11),它使用xtile函数按照分位数对矢量中的观测值进行分类(在这种情况下,只有标准的5个五分位数,20%,40%,60%,80%,100%) .
我正在尝试用Python复制一段代码,我正在使用SciPy.stats.mstats函数mquantiles()进行计算.
尽管我从Stata文档和在线搜索中可以看出,Stata xtile方法试图反转数据的经验CDF,并使用CDF为平坦的所有观测值的等加权平均值来制作切点.这似乎是对分位数进行分类的一种非常差的方法,但它就是这样,我确信有些情况下这是正确的做法.
我的问题是如何使mquantiles()产品成为同类的破坏惯例.我注意到这个函数有两个参数,alphap并且betap(文档调用它们alpha,beta但是你需要额外的'p'来使它工作,至少我这样做...如果我只使用'alpha'和'我会收到错误beta'与Python 2.7.1和SciPy 0.10.0).但即使在SciPy文档中,我也看不出是否存在这些参数的组合产生平均CDF范围的平均值.
我看到计算的选项看起来像这个范围的中位数或模式,但不是平均值(也不清楚这些具有alpha和beta的SciPy中位数/模式选项是否被计算为观察的中位数/模式或者可产生平坦CDF值的范围.)
任何帮助消除这些不同选项的歧义并找到一些文档可以帮助我在Python中重新创建Stata约定会很棒.请不要只说"编写自己的分位数函数"的答案.首先,这并不能帮助我理解Stata或SciPy的惯例,其次,给定这些数值库,编写我自己的分位数函数应该是最后的手段.我当然可以做到,但如果我需要的话,它会很糟糕.
假设我有以下示例TimeSeries:
ts = pandas.TimeSeries({'a':[1,2,3,4,5], 'b':[6,7,8,9,10]})
Run Code Online (Sandbox Code Playgroud)
我想到将其转换为5列DataFrame的最佳方法如下:
tsDataFrame = pandas.DataFrame(
[tuple(elem) for elem in ts.values],
index=ts.index.values
)
Run Code Online (Sandbox Code Playgroud)
这是实现这一目标的最佳实践习惯用法,还是有任何类型的构造函数或内置函数可以"平坦化"一个列,其值是数组到一组列中?
我对emacs和Lisp还是很陌生,尽管从使用其他功能语言的经验来看,我很难模仿有用的代码片段中看到的内容。我在.emacs文件中添加了一些不错的窗口切换功能,它们运行良好。
但是在启动时,我想配置特定的窗口/框架排列。基本上,我想在每次启动emacs时执行以下操作(通常每天最多一次,然后将其打开几天/几周)。
1. Split the screen in half (C-x 2)
2. Grow the top half bigger by 20 lines (C-u 20 C-x ^)
3. Open a second frame of emacs (C-x 5 2)
Run Code Online (Sandbox Code Playgroud)
理想情况下,我什至希望最大化左显示器上的第一帧和右显示器上的第二帧,但是我可以做到这一点。
我只是想知道如何将等效于键盘命令的功能写入.emacs文件。
我收到各种格式化的日期或部分日期,并在将它们datetime.date格式化后,我想调整月份字段或日期字段而不调用构造函数来获取整个新datetime.date对象.
数据可以是以下任何一种:
'2012.01.01'
'194311'
'1865/08/30'
'1701'
... etc
Run Code Online (Sandbox Code Playgroud)
对于未指定的日期,我希望将它们推送到1月1日,提供月份的第一个月,到提供的月份结束,或者到12月31日.必须提供一年且不会更改.
dateutil.parser.parse 处理所有这些很好,除了它填补在当前月份和/或日期缺少的月份和/或日期的约定:
In [11]: dateutil.parser.parse('2012/04')
Out[11]: datetime.datetime(2012, 4, 10, 0, 0)
In [12]: dateutil.parser.parse('1865')
Out[12]: datetime.datetime(1865, 2, 10, 0, 0)
In [13]: dateutil.parser.parse('1920.03.27')
Out[13]: datetime.datetime(1920, 3, 27, 0, 0)
Run Code Online (Sandbox Code Playgroud)
在进入datetime.datetime格式之后,我可以将datetime函数调用date为有效地转换为a datetime.date,因此该部分是微不足道的.
我想避免的是编写一个帮助函数,必须经历调用构造函数的痛苦,如下所示:
def adjust_to_jan1(date_str):
temp = dateutil.parser.parse(date_str).date()
return datetime.date(temp.year, 1, 1)
Run Code Online (Sandbox Code Playgroud)
要么
def adjust_to_month_end(date_str):
import calendar
temp = dateutil.parser.parse(date_str).date()
last_day = calendar.monthrange(temp.year, temp.month)
return datetime.date(temp.year, temp.month, last_day)
Run Code Online (Sandbox Code Playgroud)
要么
def adjust_to_last_weekdat(date_str): …Run Code Online (Sandbox Code Playgroud) 如果您在文档中搜索 %b 和 %B ,除了神秘的“(未包装的主题和正文)”之外,没有解释它们之间的区别。
这是来自 repo 的示例提交(使用 git 版本 2.9.3)以及使用 %b 与 %B 打印的不同结果。提交命令是git commit -m 'Automated version update from Jenkins.'
$ git log -1 origin/master
commit 30ac57e...
Author: Jenkins <email@email.com>
Date: Wed Jul 12 16:28:41 2017 +0000
Automated version update from Jenkins.
$ git log -1 --format=%B origin/master
Automated version update from Jenkins.
$ git log -1 --format=%b origin/master
$
Run Code Online (Sandbox Code Playgroud)
我不明白为什么 %b 无法生成提交消息正文,也不明白为什么 %B (如果它在某种意义上包含“主题和正文”)只提供消息正文。
从日志进行漂亮打印的 %b 和 %B 之间的根本区别是什么?
如果您只想可靠地打印最近的提交消息(仅消息),您应该怎么做?我认为应该是,git log -1 --format=%b …
我正在使用sm.Logit在 python 中进行逻辑回归,然后获取模型、p 值等是函数.summary ,我想存储.summary函数的结果,到目前为止我有:
我仍然需要获取std err、z和p 值
我还想知道是否有办法得到这个(.summary函数的第一部分):
python machine-learning python-3.x statsmodels logistic-regression
我正在使用该命令创建一个 GCE VM gcloud compute instances create,并使用--metadata-from-files参数传递启动 shell 脚本以进行某些配置。
但是,我需要使用指定值预先填充各种环境变量,以便启动脚本正常工作。它们不能被硬编码到启动脚本中,因为对于我正在编写的整个脚本的不同用户来说,它们会有所不同(例如,传递到新实例的环境变量可能基于调用脚本的 $USER)。
我也尝试添加带有参数的键值对--metadata,但这不起作用,并且引用的 shell 变量在启动脚本的执行中仍然未绑定。
如何发出 gcloud 计算实例创建命令来转发一组环境变量,这些变量将填充到环境中以供启动脚本使用它们?
该--metadata参数似乎应该是正确的,因为文档说,
元数据可供实例上运行的来宾操作系统使用。
我知道在Python列表推导中使用副作用并不是一种好的做法.但我无法理解为什么会发生以下情况:
In [66]: tmp = [1,2,3,4,5]; [tmp.remove(elem) for elem in tmp]
Out[66]: [None, None, None]
In [67]: tmp
Out[67]: [2, 4]
Run Code Online (Sandbox Code Playgroud)
无论这是否是一种好的做法,列表理解的内部是否应该做一些可预测的事情?如果以上是可预测的,有人可以解释为什么只remove发生了三次操作,为什么偶数条目仍然存在?
在看到这个问题,有关大熊猫复制SQL选择语句类似的行为,我说这个答案显示,可以缩短在给出的详细的语法两种方式接受的答案这个问题.
在使用它们之后,我的两个较短的语法方法明显变慢,我希望有人可以解释原因
您可以假设下面使用的任何函数都来自Pandas,IPython或上面链接的问题和答案.
import pandas
import numpy as np
N = 100000
df = pandas.DataFrame(np.round(np.random.rand(N,5)*10))
def pandas_select(dataframe, select_dict):
inds = dataframe.apply(lambda x: reduce(lambda v1,v2: v1 and v2,
[elem[0](x[key], elem[1])
for key,elem in select_dict.iteritems()]), axis=1)
return dataframe[inds]
%timeit _ = df[(df[1]==3) & (df[2]==2) & (df[4]==5)]
%timeit _ = df[df.apply(lambda x: (x[1]==3) & (x[2]==2) & (x[4]==5), axis=1)]
import operator
select_dict = {1:(operator.eq,3), 2:(operator.eq,2), 4:(operator.eq,5)}
%timeit _ = pandas_select(df, select_dict)
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
In [6]: %timeit _ …Run Code Online (Sandbox Code Playgroud) python ×7
pandas ×3
statsmodels ×2
apply ×1
benchmarking ×1
calendar ×1
dataframe ×1
date ×1
datetime ×1
emacs ×1
gcloud ×1
git ×1
git-commit ×1
git-log ×1
github ×1
key-bindings ×1
lambda ×1
python-3.x ×1
quantile ×1
regression ×1
scipy ×1
side-effects ×1
startup ×1
stata ×1
statistics ×1
time-series ×1