小编ben*_*min的帖子

R按data.table中的条件分组

在R中,我有一个大的data.table.对于每一行,我想计算具有类似值x1(+/-一些容差,tol)的行.我可以使用adply来使用它,但它太慢了.似乎data.table有点好处 - 事实上,我已经在使用data.table进行部分计算了.

有没有办法完全使用data.table?这是一个例子:

library(data.table)
library(plyr)
my.df = data.table(x1 = 1:1000,
                   x2 = 4:1003)
tol = 3
adply(my.df, 1, function(df) my.df[x1 > (df$x1 - tol) & x1 < (df$x1 + tol), .N])
Run Code Online (Sandbox Code Playgroud)

结果:

        x1   x2 V1
   1:    1    4  3
   2:    2    5  4
   3:    3    6  5
   4:    4    7  5
   5:    5    8  5
  ---             
 996:  996  999  5
 997:  997 1000  5
 998:  998 1001  5
 999:  999 1002  4
1000: 1000 1003  3
Run Code Online (Sandbox Code Playgroud)

更新:

这是一个与我的真实数据更接近的示例数据集:

set.seed(10) …
Run Code Online (Sandbox Code Playgroud)

grouping r data.table

6
推荐指数
2
解决办法
1904
查看次数

优化多列/多索引的pandas查询

我有一个非常大的表(目前有5500万行,可能更多),我需要选择它的子集并对这些子集执行非常简单的操作,很多次.看起来像pandas可能是在python中执行此操作的最佳方式,但我遇到了优化问题.

我试图创建一个与我的真实数据集紧密匹配的虚假数据集(尽管它小了~5-10倍).这仍然很大,需要大量内存等等.我正在查询有四列,以及我用于计算的两列.

import pandas
import numpy as np
import timeit

n=10000000
mdt = pandas.DataFrame()
mdt['A'] = np.random.choice(range(10000,45000,1000), n)
mdt['B'] = np.random.choice(range(10,400), n)
mdt['C'] = np.random.choice(range(1,150), n)
mdt['D'] = np.random.choice(range(10000,45000), n)
mdt['x'] = np.random.choice(range(400), n)
mdt['y'] = np.random.choice(range(25), n)


test_A = 25000
test_B = 25
test_C = 40
test_D = 35000

eps_A = 5000
eps_B = 5
eps_C = 5
eps_D = 5000


f1 = lambda : mdt.query('@test_A-@eps_A <= A <= @test_A+@eps_A  &  ' +
                        '@test_B-@eps_B <= B <= @test_B+@eps_B  & …
Run Code Online (Sandbox Code Playgroud)

python numpy bigdata pandas

6
推荐指数
1
解决办法
771
查看次数

ggplot2箱图中的alpha和填充图例?

我正在尝试将alpha和填充ggplot2结合起来.当我使用geom_bar(或geom_points,用于颜色)时它可以工作,但是当我使用geom_boxplot时,alpha图例不起作用.

library(data.table)
library(ggplot2)
dt = data.table(x = rep(1:5,6), y = rnorm(30), tag1 = rep(c('hey', 'what'), 15), tag2 = rep(c('yeah', 'yeah', 'so', 'so', 'so'), 6))
Run Code Online (Sandbox Code Playgroud)

它适用于酒吧:

ggplot(dt[, list(y=mean(y)), by=list(x, tag1, tag2)], aes(x=x, y=y, fill=tag1, alpha=tag2, group=interaction(x,tag1,tag2))) + geom_bar(stat = 'identity', position = 'dodge')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但不是boxplot - alpha图例是空的.

ggplot(dt, aes(x=x, y=y, fill=tag1, alpha=tag2, group=interaction(x,tag1,tag2))) + geom_boxplot()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更简单的版本可以在没有填充的情况下完成 - 看起来条形图默认为灰色/浅灰色,而boxplot默认为白色/浅白色:

ggplot(dt[, list(y=mean(y)), by=list(x, tag2)], aes(x=x, y=y, alpha=tag2, group=interaction(x,tag2))) + geom_bar(stat = 'identity')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

ggplot(dt, aes(x=x, y=y, alpha=tag2, group=interaction(x,tag2))) + geom_boxplot()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但我真的不确定如何解决这个问题..有什么想法吗?

alpha r legend scale ggplot2

6
推荐指数
1
解决办法
3860
查看次数

在pytables中优化复杂的table.where()查询?

我有一个非常大的数据库 - 我正在使用一个350米行的子集,但最终它将是大约3b行.我的全部目标是在这个数据库上优化特定类型的查询,但代价是除了内存以外的所有内容.我正在使用的db文件在PyTables版本2.3.1上使用blosc在1级压缩(我可以更新,如果这会有帮助的话).每行有十三个条目 - 典型条目如下所示:

['179', '0', '1', '51865852', '51908076', '42224', '22', '2', '20', '22', '2', '0.0516910530103', '0.0511359922511']
Run Code Online (Sandbox Code Playgroud)

它们都是数字的,但不一定是同一类型.我目前正在将它们存储在PyTables表中,具有以下定义:

ind = tables.UInt16Col(pos=0)
hap = tables.UInt8Col(pos=1)
chrom = tables.UInt8Col(pos=2)
hap_start = tables.Int32Col(pos=3)
hap_end = tables.Int32Col(pos=4)
hap_len = tables.Int16Col(pos=5)
mh_sites = tables.Int16Col(pos=6)
mh_alt = tables.Int16Col(pos=7)
mh_n_ref = tables.Int16Col(pos=8)
all_sites = tables.Int16Col(pos=9)
all_alt = tables.Int16Col(pos=10)
freq = tables.Float32Col(pos=11)
std_dev = tables.Float32Col(pos=12)
Run Code Online (Sandbox Code Playgroud)

我真的不在乎设置这个数据库需要多长时间 - 我最终会创建它一次然后只是访问它.我的查询形式如下:

a = [ x[:] for x in hap_table.where('''(mh_sites == 15) & (hap_len > 25000) & (hap_len < 30000) & …
Run Code Online (Sandbox Code Playgroud)

python pytables

5
推荐指数
1
解决办法
1484
查看次数

标签 统计

python ×2

r ×2

alpha ×1

bigdata ×1

data.table ×1

ggplot2 ×1

grouping ×1

legend ×1

numpy ×1

pandas ×1

pytables ×1

scale ×1