我用pandas做了一个相当简单的直方图
results.val1.hist(bins=120)
哪个工作正常,但我真的想在y轴上有一个对数刻度,我通常(可能不正确)这样做:
fig = plt.figure(figsize=(12,8))
ax = fig.add_subplot(111)
plt.plot(np.random.rand(100))
ax.set_yscale('log')
plt.show()
Run Code Online (Sandbox Code Playgroud)
如果我用pltpandas命令替换命令,那么我有:
fig = plt.figure(figsize=(12,8))
ax = fig.add_subplot(111)
results.val1.hist(bins=120)
ax.set_yscale('log')
plt.show()
Run Code Online (Sandbox Code Playgroud)
导致同一错误的许多副本:
Jan 9 15:53:07 BLARG.local python[6917] <Error>: CGContextClosePath: no current point.
Run Code Online (Sandbox Code Playgroud)
我得到一个对数比例直方图,但它只有条形的顶行,但没有垂直条纹或颜色.我做了一些可怕的错误或者这只是熊猫不支持吗?
从保罗H的代码我添加bottom=0.1到hist调用修复问题,我想有一些除零事物或其他东西.
我即将重写我的许多aws部署代码,以使用boto控制的cloudformation来启动所有内容,而不是使用boto自行调出每个元素.有没有人知道它的"最佳实践"是使用一个巨大的模板文件,它可以将所有东西放在一起,还是许多较小的模板文件?
一个巨大的优势似乎是AWS为您处理所有依赖性,因此会稍微加快速度.明显的缺点是维持这似乎是一场噩梦.
有没有人尝试在运行时组合他们的模板文件,以便将它们视为一个大的,或者难以维护?
我正在尝试设置一个云形式模板,该模板将启动一个干净的实例或一个来自快照的实例.我希望能够使用if/else类型语句,以便看起来像
pseudo code:
if InputSnapshotId:
"SnapshotId" : {"Ref" : "InputSnapshotId"},
else:
"Size" : 20,
Run Code Online (Sandbox Code Playgroud)
在cloudformation中,我尝试了很多类似的东西:
"WebserverInstanceDataVolume" : {
"Type" : "AWS::EC2::Volume",
"Properties" : {
"Fn::If" : [
{"Ref" : "FromSnapshot"},
{"SnapshotId" : { "Ref" : "InputSnapshotId" }},
{"Size" : "20"}
],
"VolumeType" : "standard",
"AvailabilityZone" : { "Fn::GetAtt" : [ "WebserverInstance", "AvailabilityZone" ]},
"Tags" : [
{"Key" : "Role", "Value": "data" },
]
},
"DeletionPolicy" : "Delete"
},
Run Code Online (Sandbox Code Playgroud)
或者在{}中包装Fn :: If:
{"Fn::If" : [
{"Ref" : "FromSnapshot"},
{"SnapshotId" : { …Run Code Online (Sandbox Code Playgroud) 有谁知道如何检查mongodb中的日志记录级别?我看到如何设置它,但我不确定我的服务器上的当前设置是什么.
我正在尝试设置一个python记录器,以便在实例已设置标签的情况下记录错误时发送错误电子邮件。然后,我很快遇到了不在AWS上的本地开发计算机的问题。有没有简便快捷的方法来检查脚本是否在AWS上运行?
我正在使用以下方式加载实例数据:
import boto.utils
from boto.ec2.connection import EC2Connection
metadata = boto.utils.get_instance_metadata()
conn = EC2Connection()
instance = conn.get_only_instances(instance_ids=metadata['instance-id'])[0]
Run Code Online (Sandbox Code Playgroud)
我当然可以在get_instance_metadata上使用超时,但是现在要让开发人员等待很长时间与在生产中不发送错误电子邮件的可能性之间存在压力。
谁能想到一个好的解决方案?
我一直在使用WatchedFileHandler作为我的python日志文件处理程序,因此我可以使用logrotate(在ubuntu 14.04上)旋转我的日志,你知道这是文档所说的.我的logrotate配置文件看起来像
/path_to_logs/*.log {
daily
rotate 365
size 10M
compress
delaycompress
missingok
notifempty
su root root
}
Run Code Online (Sandbox Code Playgroud)
一切似乎都运转得很好.我正在使用logstash将我的日志发送到我的弹性搜索集群,一切都很棒.我为我的调试日志添加了第二个日志文件,该文件被轮换但没有被logstash监视.我注意到,当该文件被旋转时,python只是继续写入/path_to_debug_logs/*.log.1并且永远不会开始写入新文件.如果我手动尾巴/path_to_debug_logs/*.log.1,它会立即切换并开始写入/path_to_debug_logs/*.log.
这对我来说真的很奇怪.
我相信正在发生的事情是logstash总是拖尾我的非调试日志,有些人会在logrotate调用之后触发切换到新文件.如果logrotate在没有切换的情况下调用两次,则会将log.1文件移动并压缩为log.2.gz,python无法再登录并且日志丢失.
很明显,有一堆hacky解决方案(比如cronjob,偶尔会把所有日志都收尾),但我觉得我一定做错了.
我正在使用WatchedFileHandler而logrotate不是RotatingFileHandler出于多种原因,但主要是因为它会在轮换后很好地压缩我的日志.
更新:
我尝试了在我的日志轮换配置脚本末尾添加手动尾部的可怕黑客攻击.
sharedscripts
postrotate
/usr/bin/tail -n 1 path_to_logs/*.log.1
endscript
Run Code Online (Sandbox Code Playgroud)
当然这大部分时间都可以工作,但有时因为没有明确原因而随机失败,所以不是解决方案.我也尝试了一些不太讨厌的解决方案,我已经修改了WatchFileHandler检查文件是否已更改的方式,但没有运气.
我很确定我的问题的根源是日志存储在网络驱动器上,这在某种程度上混淆了文件系统.
我正在将我的轮换移动到python RotatingFileHandler,但如果有人知道处理这个问题的正确方法,我很乐意知道.
我正在测试一个修复程序pdb.set_trace(),以确保它在实现之前按照我预期的方式工作并且不断出现一个奇怪的错误.
(Pdb) test = [1,2,3,4,4,3,2,1]
(Pdb) max(range(len(test)),key=lambda i: test[i])
*** NameError: global name 'test' is not defined
Run Code Online (Sandbox Code Playgroud)
所以我搬到了我的本地机器,以确保在寻求帮助之前尽可能简单地复制.在ipython中,我得到完全相同的行为.
In [1]: test = [1,2,3,4,4,3,2,1]
In [2]: max(range(len(test)),key=lambda i: test[i])
Out[2]: 3
In [3]: import pdb; pdb.set_trace()
--Call--
> /Users/tristanmatthews/anaconda/lib/python2.7/site-packages/IPython/core/displayhook.py(237)__call__()
-> def __call__(self, result=None):
(Pdb) test = [1,2,3,4,4,3,2,1]
(Pdb) max(range(len(test)),key=lambda i: test[i])
*** NameError: global name 'test' is not defined
Run Code Online (Sandbox Code Playgroud)
但在正常的命令行,它工作得很好:
tristan:~$ python
Python 2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Nov 11 2013, 10:49:09)
[GCC 4.0.1 (Apple Inc. build 5493)] on …Run Code Online (Sandbox Code Playgroud) 我有一个DataFrame df有列type和subtype大约100k行,我试图df通过检查type/ subtype组合分类包含什么类型的数据.虽然df可以包含许多不同的组合,但是存在仅出现在某些数据类型中的特定组合.要检查我的对象是否包含我正在做的任何这些组合:
typeA = ((df.type == 0) & ((df.subtype == 2) | (df.subtype == 3) |
(df.subtype == 5) | (df.subtype == 6))) |
((df.type == 5) & ((df.subtype == 3) | (df.subtype == 4) | (df.subtype == 7) |
(df.subtype == 8)))
A = typeA.sum()
Run Code Online (Sandbox Code Playgroud)
其中typeA是一长串Falses可能有一些Trues,如果A> 0那么我知道它包含一个True.这个方案的问题是,如果df的第一行产生一个True,它仍然需要检查其他所有内容.检查整个DataFrame比使用带有break的for循环更快,但我想知道是否有更好的方法来执行它.
谢谢你的任何建议.
我正在用boto创建一个VPC和安全组.如果我只是在脚本中创建和标记元素,我会不断收到错误,因为元素还没有准备好.我可以直接进行手动等待,但我更喜欢拉它们以确定它们是否真的准备好了.对于VPC或子网,我可以使用类似的东西:
import boto.vpc
v = boto.vpc.VPCConnection(
region=primary_region,
aws_access_key_id=aws_access_key,
aws_secret_access_key=aws_secret_key)
vpcs = v.get_all_vpcs()
print vpcs[0].state
Run Code Online (Sandbox Code Playgroud)
用一些更多的逻辑和一个while循环来检查状态是否是available,running或者其他什么.这适用于大多数vpc/aws元素,但是某些元素(如安全组)在返回时没有状态属性get_all_security_groups或等效.
人们如何检查这些元素是否可以使用?
(对不起,成本函数可能是错误的术语)
我正在尝试拟合一些质谱数据,其中我知道大多数峰是什么,但不是全部。因此,我希望完成后会有一个正残差。看起来大多数 scipy 拟合算法只是试图最小化 rms 残差,所以我没有看到一种惩罚负残差大于正残差的方法。
为了说明这一点,这里有一些简单的代码:
import numpy as np
from scipy import optimize
import matplotlib.pyplot as plt
def gaussian(x, a, x0, sigma):
return a * np.exp(-(x - x0)**2.0 / (2.0 * sigma**2))
def get_y_with_noise(x, peaks):
"""Return your input spectrum with some lazy shot like noise."""
n = len(x)
y = np.zeros(n)
for peak in peaks:
y += gaussian(x, *peak)
# Add some noise.
y += np.random.randn(n) * 0.05 * np.sqrt(y)
y[np.where(y < 0.0)] = 0.0
return y
def …Run Code Online (Sandbox Code Playgroud) 所以我有一些上帝遗弃的遗留代码使用保留字property,这是错误的.在继承的基类中,它们已基本实现.
class TestClass(object):
def __init__(self, property):
self._property = property
@property
def property(self):
return self._property
test = TestClass('test property')
print(test.property)
Run Code Online (Sandbox Code Playgroud)
哪个运行没有错误.如果您在下面添加另一种方法,
class TestClass2(object):
def __init__(self, property):
self._property = property
@property
def property(self):
return self._property
@property
def other_property(self):
return 'test other property'
test = TestClass2('test property')
print(test.property)
print(test.other_property)
Run Code Online (Sandbox Code Playgroud)
哪个投掷:
---> 10 @property
11 def other_property(self):
12 print('test other property')
TypeError: 'property' object is not callable
Run Code Online (Sandbox Code Playgroud)
因为您知道您已property在本地命名空间中覆盖.
class TestClass3(object):
def __init__(self, property):
self._property = property
@property
def other_property(self):
return …Run Code Online (Sandbox Code Playgroud) 我遇到了一个经典的陷阱,但找不到我应该做的mongoengine的好例子.
使用标准的博客示例我有类似的东西:
class Comment(EmbeddedDocument):
author = StringField()
approved = BooleanField(default=False)
class Post(Document):
id = StringField(required=True, unique=True)
comments = ListField(EmbeddedDocumentField(Comment))
Run Code Online (Sandbox Code Playgroud)
对于给定的博客帖子(带有id some_id),我只想加载已批准的评论列表.如果帖子的任何评论被批准,我会不小心加载所有评论,因为我匹配列表中的元素.
python ×8
boto ×3
mongodb ×2
pandas ×2
amazon-vpc ×1
decorator ×1
lambda ×1
logging ×1
mongoengine ×1
nameerror ×1
pdb ×1
properties ×1
python-2.7 ×1
rotation ×1
scipy ×1