下面的查询将大约10万个数据点提取到python中。数据将用matplotlib绘制。在
cur.execute("""SELECT \
loggingdb_ips_integer.ipsvalue,
loggingdb_ips_integer.ipstimestamp,
loggingdb_ips_integer.varid
FROM public.loggingdb_ips_integer
WHERE
(loggingdb_ips_integer.varid = 17884) OR
(loggingdb_ips_integer.varid = 55437) OR
(loggingdb_ips_integer.varid = 34637) OR
(loggingdb_ips_integer.varid = 17333)
; """)
对每个WHERE子句分别运行4个查询是否更有效,或者我应该一次将整个enchilada放入,并将其转换为带有3个轴的numpy数组?如果后者更有效,那么转换(规范化)的最佳方式是什么阵列?请不要因为我的天真而对我大发雷霆-我是一名受过训练的医生;我对编码的理解非常有限!在
查询运行一次肯定会更快。至于“规范化”数据(我想你是指http://en.wikipedia.org/wiki/Feature_scaling)
Scikit有一个函数scale,它可以很好地与numpy一起工作(但是您必须自己对它进行分组)
您也可以在postgresql中使用:
然后使用z分数公式通过合并表格来缩放个人:
^{pr2}$其中col是变量。在哪里工作对性能可能没有那么重要。听起来更像你,你的问题是如何分组和缩放数据,以及什么对你来说最简单。在
Python和数据库之间的通信相对较慢。所以通常你想减少查询的数量。在数据库中尽可能多地执行数据库工作,只提取所需的数据。在
这些一般的经验法则使我猜测使用1个查询比使用4个查询更好。 但是,100K行不是很多,所以使用哪种方法并不重要。除非你要运行这段代码数百万次,并且每纳秒都要剃光,否则你很容易浪费更多的时间为此烦恼,而不是仅仅选择一个。如果您确实需要这种性能,那么您应该重新考虑Python是否是适合这项工作的语言。俗话说,preoptimization is the root of all evil。在
但由于这很可能不是代码的主要瓶颈,所以我会根据最容易阅读和维护的代码来选择使用哪种方法,而不一定是最快的。在
如果每个变量都有相同的行数 然后,您可以使用一个NumPy整形技巧将数据诱骗成3个轴,第一个轴对应于变量(见下文)。在这种情况下,进行一个查询可能是最简单也是最快的。在
如果行数不完全相同,则代码会变得稍微复杂一些。您需要一个Python循环和一个boolean NumPy掩码来选择正确的行。在这种情况下,只进行四个单独的查询可能更容易。在
现在,出于好奇,我决定测试我的说法:1个查询比4个查询快。也许你会在这里找到一些可以重用的代码。在
^{pr2}$one_query
和four_queries
都返回键为varid
值的dict。正如您所看到的,虽然使用一个查询比使用四个查询快一点,但性能并没有什么不同:相关问题 更多 >
编程相关推荐