我想将我创build的JSON文件转换为SQLite数据库。 我的意图是稍后决定哪个数据容器和入口点是最好的,json(通过文本编辑器的数据input)或SQLite(通过像SQLiteStudio这样的类似电子表格的GUI的数据input)。 我的json文件是这样的(包含来自我市一些十字路口的stream量数据): … "2011-12-17 16:00": { "local": "Av. Protásio Alves; esquina Ramiro Barcelos", "coord": "-30.036916,-51.208093", "sentido": "bairro-centro", "veiculos": "automotores", "modalidade": "semaforo 50-15", "regime": "típico", "pistas": "2+c", "medicoes": [ [32, 50], [40, 50], [29, 50], [32, 50], [35, 50] ] }, "2011-12-19 08:38": { "local": "R. Fernandes Vieira; esquina Protásio Alves", "coord": "-30.035535,-51.211079", "sentido": "único", […]
import multiprocessing import time class testM(multiprocessing.Process): def __init__(self): multiprocessing.Process.__init__(self) self.exit = False def run(self): while not self.exit: pass print "You exited!" return def shutdown(self): self.exit = True print "SHUTDOWN initiated" def dostuff(self): print "haha", self.exit a = testM() a.start() time.sleep(3) a.shutdown() time.sleep(3) print a.is_alive() a.dostuff() exit() 我只是想知道如何来上面的代码不真正打印“你退出”。 我究竟做错了什么? 如果是的话,有人可以指出我正确的退出方式吗? (我不是指process.terminate或kill)
以下代码引发了一个语法错误: >>> for i in range(10): … print i … try: … pass … finally: … continue … print i … File "<stdin>", line 6 SyntaxError: 'continue' not supported inside 'finally' clause 为什么在finally一个条款中不允许使用continue语句? PS另一方面,这个其他的代码没有问题: >>> for i in range(10): … print i … try: … pass … finally: … break … 0 如果有关系,我使用Python 2.6.6。
背景:我正在构build一个代表一个字典,使用最小的构buildalgorithm。 input列表是4.3M utf-8string,按字典顺序sorting。 生成的图是非循环的,最大深度为638个节点。 我的脚本的第一行通过sys.setrecursionlimit()将recursion限制设置为1100。 问题是:我希望能够将我的trie序列化到磁盘,所以我可以将它加载到内存中,而无需从头开始重build(大约22分钟)。 我已经尝试pickle.dump()和cPickle.dump() ,与文本和二进制协议。 每一次,我得到一个堆栈跟踪,如下所示: File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 649, in save_dict self._batch_setitems(obj.iteritems()) File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 663, in _batch_setitems save(v) File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 725, in save_inst save(stuff) File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 286, in save f(self, obj) # Call […]
我正在使用一个庞大的现有的Python代码库,并希望开始添加types注释,所以我可以得到一定程度的静态检查。 我在想像Erlang , Strongtalk或Typed Scheme / Racket 。 我见过快速和脏的装饰器插入基于函数参数和返回types注释的dynamic检查,但我正在寻找更强大的东西,并在编译时执行检查。 现在有什么工具可用于这种事情? 我熟悉编译器和types检查,如果它有一个良好的基础,我肯定会改进一个不完整的工具。 (注意:我对静态types优劣的讨论不感兴趣。) 编辑 :一个例子: def put(d, k, v): d[k] = v 我希望能够注释put函数的types是put<K,V>(dict<K,V>, K, V) -> None 。 更新 :新的PEP 484 (2014年9月)在Python 3.5+中为静态types和types注释定义了一个标准。 有一个types检查工具称为mypy ,与PEP 484兼容。
在Python中有一种简单的方法来检查可选参数的值是否来自其默认值,或者是因为用户在函数调用中显式地设置了值吗?
我很难理解scikit-learn的Logistic回归中的class_weight参数是如何运作的。 情况 我想用逻辑回归来对非常不平衡的数据集进行二元分类。 这些类别被标记为0(负)和1(正),并且观察到的数据与大多数样品具有负面结果的比率约为19:1。 第一次尝试:手动准备培训数据 我将这些数据分成了不相交的集合,用于训练和testing(约80/20)。 然后我手工对训练数据进行随机抽样,得到不同比例的训练数据,比例为19:1; 从2:1 – > 16:1。 然后,我对这些不同的训练数据子集进行逻辑回归训练,并作为不同训练比例的函数绘制回忆(= TP /(TP + FN))。 当然,召回是在不相交的TEST样品上计算出来的,其比例为19:1。 请注意,尽pipe我在不同的训练数据上训练了不同的模型,但我还是在相同的(不相交的)testing数据上计算了所有的模型。 结果如预期:在2:1的训练比例下,回收率约为60%,到达16:1时相当快地下降。 召回率在5%以上的比例为2:1 – > 6:1。 第二次尝试:网格search 接下来,我想testing不同的正则化参数,所以我使用了GridSearchCV,并创build了一个包含C参数的几个值以及class_weight参数的网格。 把我的n:m比例的负面:正面训练样本翻译成class_weight的字典语言我以为我只是指定了几个字典,如下所示: { 0:0.67, 1:0.33 } #expected 2:1 { 0:0.75, 1:0.25 } #expected 3:1 { 0:0.8, 1:0.2 } #expected 4:1 我也包括None和auto 。 这一次结果完全被摧毁了。 除了auto之外,我所有的召回都是很小的(<0.05)。 所以我只能假设我对如何设置class_weight字典的理解是错误的。 有趣的是,在网格search中,“auto”的class_weight值对于C所有值都大约为59%,我猜想它平衡到1:1。 我的问题 1)您如何正确使用class_weight来实现您实际给予的训练数据的不同平衡? 具体来说,我传递给class_weight字典使用n:m比例的否定:正面训练样本? 2)如果您将各种class_weight字典传递给GridSearchCV,那么在交叉validation期间,它将根据字典重新平衡训练折叠数据,但是使用真实的给定样本比例来计算testing折叠上的评分函数? 这是至关重要的,因为任何度量标准对于我来说都是有用的,如果它来自于观察比例的数据。 […]
我正在使用I / O非阻塞python服务器Tornado。 我有一类GET请求可能需要大量的时间才能完成(想想在5-10秒的范围内)。 问题在于Tornado阻塞了这些请求,以便后续的快速请求被保留,直到缓慢的请求完成。 我看着: https : //github.com/facebook/tornado/wiki/Threading-and-concurrency ,得出结论,我想#3(其他进程)和#4(其他线程)的组合。 #4自己有问题,而当另一个线程正在进行“重型升降”时,我无法得到可靠的控制回到ioloop。 (我认为这是由于GIL和重负载任务具有高CPU负载,并保持远离主Ioloop的控制的事实,但这是一个猜测)。 所以我一直在做原型devise,通过在一个单独的进程中在这些缓慢的GET请求中完成“繁重的任务”,然后在完成请求的过程中将callback放回到Tornado ioloop中。 这释放了ioloop来处理其他请求。 我已经创build了一个简单的例子来演示一个可能的解决scheme,但是很好奇从社区那里得到反馈。 我的问题有两方面:如何简化现行的方法? 它可能存在哪些缺陷? 该方法 利用Tornado内置的asynchronous装饰器,允许请求保持打开状态,并继续使用ioloop。 使用python的multiprocessing模块为“繁重”任务生成一个单独的进程。 我第一次尝试使用threading模块,但无法得到任何可靠的控制权交给ioloop。 多核处理似乎也会利用多核。 在主Ioloop进程中使用正在监视multiprocessing.Queue处理的threading模块启动一个“观察者”线程。当完成时,“繁重”任务的结果将会被调用。 这是需要的,因为我需要一种方式来知道重载任务已经完成,同时还能够通知ioloop这个请求已经完成。 确保“监视器”线程经常使用time.sleep time.sleep(0)调用将控制权交给主Ioloop循环,以便继续处理其他请求。 当队列中存在结果时,使用tornado.ioloop.IOLoop.instance().add_callback()从“观察者”线程添加一个callbacktornado.ioloop.IOLoop.instance().add_callback() ,该函数被logging为从其他线程调用ioloop实例的唯一安全方法。 一定要在callback中调用finish()来完成请求并提交回复。 下面是显示这种方法的一些示例代码。 multi_tornado.py是实现上述大纲的服务器, call_multi.py是一个示例脚本,它以两种不同的方式调用服务器来testing服务器。 两个testing都使用3个慢速GET请求和20个快速GET请求来调用服务器。 在打开和closures线程的情况下都显示结果。 在使用“无线程”运行的情况下,3个缓慢的请求块(每个都需要一秒多的时间才能完成)。 20个快速请求中的一些挤入了ioloop中的一些缓慢请求之间(并不完全确定这是怎么发生的,但可能是我在同一台机器上同时运行服务器和客户端testing脚本的工件)。 这里的要点是,所有的快速请求都受到不同程度的影响。 在使用线程运行的情况下,20个快速请求全部首先立即完成,然后三个慢速请求几乎在同一时间完成,因为它们各自并行运行。 这是所需的行为。 三个缓慢的请求需要2.5秒才能并行完成 – 而在非线程的情况下,三个缓慢的请求总共花费约3.5秒。 所以整体上大概有35%的速度(我认为是由于多核共享)。 但更重要的是 – 快速的请求立即在缓慢的请求中处理。 我没有很多的multithreading编程经验 – 所以虽然这似乎在这里工作,我很好奇学习: 有一个更简单的方法来完成这个吗? 在这种方法中可能会潜伏什么? (注意:未来的折衷可能是运行更多的Tornado实例,并使用像nginx这样的反向代理来进行负载均衡,无论我将使用负载均衡器运行多个实例 – 但是我只关心在这个问题上抛硬件因为看起来硬件在阻塞方面与问题直接相关)。 […]
我开始学习pandas,并试图find最艰难的(或pandasthonic?)方式来完成某些任务。 假设我们有一个DataFrame,列A,B和C. 列A包含布尔值:每行的A值为true或false。 B列有一些我们想要绘制的重要值。 我们想要发现的是,将A设置为false的行的B值之间的细微差别与具有A的行的B值是正确的。 换句话说, 我怎样才能根据列A的值(true或false)进行分组,然后在同一个图上绘制两个组的列B的值? 这两个数据集应该有不同的颜色,以便能够区分这些点。 接下来,让我们给这个程序增加一个特性:在绘图之前,我们要为每一行计算另一个值并将其存储在D列中。这个值是logging之前整个五分钟内存储在B中的所有数据的平均值 – 但我们只包含存储在A中的具有相同布尔值的行 换句话说, 如果我有一行,其中A=True , time=t ,我想计算D列的值,它是从时间t-5到t所有logging的B的均值,它们具有相同的A=True 。 在这种情况下,我们怎样才能在A的值上执行groupby,然后将这个计算应用到每个单独的组,然后绘制这两个组的D值?
我在使用ElementTree中的属性XPath Selector时遇到了问题,根据文档我应该可以这样做 这是一些示例代码 XML <root> <target name="1"> <a></a> <b></b> </target> <target name="2"> <a></a> <b></b> </target> </root> python def parse(document): root = et.parse(document) for target in root.findall("//target[@name='a']"): print target._children 我收到以下exception: expected path separator ([)