我试图找出在多个模块中使用python登录的最佳实践.我在这里看到:http://docs.python.org/2/howto/logging#logging-from-multiple-modules关于如何使用根记录器来记录多个模块.正如链接指出的那样,你无法分辨你的应用程序在哪里显示你的消息,因为它们都显示了名称"root".
在我看来有两个选项(这假设我的模块不在包结构中,但只是在同一文件夹中的一堆模块):
1)使用示例中的根记录器,但更改日志格式以包含文件名:
# myapp.py
import logging
import mylib
def main():
logging.basicConfig(format='%(asctime)s %(filename)s %(levelname)s: %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p', level=logging.INFO) #filename='myapp.log',
logging.info('Started')
mylib.do_something()
logging.info('Finished')
if __name__ == '__main__':
main()
#mylib.py
import logging
def do_something():
logging.info('Do something')
In [4]: import myapp
In [5]: myapp.main()
03/06/2014 12:22:07 PM myapp.py INFO: Started
03/06/2014 12:22:07 PM mylib.py INFO: Do something
03/06/2014 12:22:07 PM myapp.py INFO: Finished
Run Code Online (Sandbox Code Playgroud)
2)在主应用程序中使用根记录器,但在子模块中使用命名记录器,并在日志格式中使用"name"而不是"filename":
# myapp.py
import logging
import mylib
def main():
#logging.basicConfig(format='%(asctime)s %(filename)s %(levelname)s: %(message)s', datefmt='%m/%d/%Y %I:%M:%S …
Run Code Online (Sandbox Code Playgroud) 我每天从桌面计算机上运行一次简单的任务3次.它在下午4点,晚上8点和凌晨1点连接到某个网站,下载少量数据(少于50mb),并将其存储在硬盘上.每天运行这一点非常重要,因此我正在考虑将其移至Google Compute.我知道我可以创建一个实例并将其保留在24/7/365,但这很昂贵.有没有办法让实例只在下午4点,晚上8点和凌晨1点开启,每次10分钟,这样数据可以下载,然后让它们关闭,所以我只收取30分钟/天的Google Compute时间?顺便说一句,我会使用Windows Server 2008图像(我相信它现在在Google Compute中有限预览),而不是linux图像,如果相关的话.
我可以使用cvxopt来计算一个有效的边界,根据文档:
http://cvxopt.org/examples/book/portfolio.html
但是,我无法弄清楚如何添加约束,以便特定资产的最大允许权重存在上限.使用cvxopt可以吗?
这是我的代码到目前为止生成一个没有约束的有效边界,除了我相信b,它将权重的最大总和设置为1.我不确定G,h,A和mus是做什么的,而且文档不是真的可以解释一下.肌肉配方中的10**(5.0*t/N-1.0)来自何处?
from math import sqrt
from cvxopt import matrix
from cvxopt.blas import dot
from cvxopt.solvers import qp, options
# Number of assets
n = 4
# Convariance matrix
S = matrix( [[ 4e-2, 6e-3, -4e-3, 0.0 ],
[ 6e-3, 1e-2, 0.0, 0.0 ],
[-4e-3, 0.0, 2.5e-3, 0.0 ],
[ 0.0, 0.0, 0.0, 0.0 ]] )
# Expected return
pbar = matrix([.12, .10, .07, .03])
# nxn matrix of 0s
G = matrix(0.0, (n,n))
# Convert G to …
Run Code Online (Sandbox Code Playgroud) 我用熊猫来存储,负载和操纵财务数据.典型的数据文件是6000x4000 DataFrame(6000股x 4000个交易日),如果说一半股票在给定日期具有价值N/A,则将以CSV格式大小为200MB.我已经使用具有的存储器,这已经足够用于装载这种尺寸的整个的CSV到存储器中,执行各种计算,然后将结果存储16GB的工作站.在一般情况下,我在高峰使用期间最终使用大约10GB的RAM.我有我可以但更有效地做事情的感觉.我想将这个数字降到2GB左右,这样我就可以使用普通笔记本电脑和4GB内存来运行我的每日更新.这合理吗?我使用了太多内存,无论是我的硬件?
我理解上面的答案取决于我正在做的事情的细节.下面是功能我可能会遇到的类型的例子:
def momentum_strategy():
# prices.csv is a matrix containing stock prices for 6000 stocks
# and 4000 trading dates
prices = pd.read_csv("prices.csv")
# Daily stock returns
returns = prices/prices.shift(1) -1
# Annualized return volatility
volatility = pd.rolling_std(returns, 21, 21) * 252**0.5
# 6-month stock returns
trail6monthreturns = prices/prices.shift(21*6) - 1
# Rank of 6 month stock returns
retrank = trail6monthreturns.rank(axis=1, ascending=False)
# Portfolio of the top 100 stocks as measured by 6 month return
positions = retrank.apply(lambda …
Run Code Online (Sandbox Code Playgroud)