小编ira*_*erd的帖子

如何从 MS SQL Server 将大型数据集加载到 Python 中?

设置:我在 MS SQL Server 上有一个预处理数据集,大约有 500.000.000 行和 20 列,其中一个是相当长的文本列 (varchar(1300)),相当于 SQL 上大约 35GB 的数据空间数据库。我正在运行 MS SQL Server 的物理机上工作,因此不需要网络流量,并且它有 128GB RAM。MS SQL Server 设置为最多占用 40GB RAM。我想将数据集导入Python以进行进一步处理。假设进行一些深度学习实验,这很重要,因为我需要能够按原样传输文本列。

轶事:为了测试导入代码,我使用了大约 700.000 行的数据集的一个小子样本。运行大约需要 1 分钟,Python 的 RAM 使用量高达 700mb,导入后将变量保存到文件系统的文件大小约为 250mb。据推断,导入完整数据集大约需要 700 分钟,并生成一个 175GB 的文件。这是相当多的,特别是与在 SQL 中复制完整的 31GB 表相比,这最多需要几分钟。我让它运行一天,看看会发生什么,但没有结果。

替代方案:我尝试不使用pandasandsqlalchemy而是pyodbc直接使用,这让我相信问题在于 pyodbc 如何处理数据导入,因为它将查询的数据存储在 rows 对象中,我只能在循环中按行读取,这对我来说似乎效率很低。我不知道是否能以pandas不同sqlalchemy的方式做到这一点。我还尝试不使用单个 select 语句导入完整数据集,而是将其分成许多较小的数据集,这导致小型测试数据集需要 30 分钟而不是 1 分钟来加载。

问题:如何将这个大(但与其他数据库相比不是那么大)的数据集加载到 Python 中?另外,必须有一种方法可以有效地做到这一点?因为它不应该比在 SQL 中复制完整表花费更长的时间,并且它不应该比 SQL 数据库中的表占用更多的空间。我不明白为什么在此过程中数据大小会增加这么多。该解决方案不需要首先将表提取到除 Python 之外的任何其他介质(即没有.csv文件等),尽管使用任何其他 Python …

python sql-server performance odbc large-data

6
推荐指数
0
解决办法
1765
查看次数

R - 保持由多个变量识别的每组的第一次观察(Stata等效"bys var1 var2:keep if _n == 1")

所以我目前在R中面临一个问题,我确切知道如何处理Stata,但是浪费了两个多小时来完成.

使用下面的data.frame,我想要的结果是准确地获得每组的第一个观察,而组由多个变量组成,并且必须由另一个变量排序,即通过以下方式获得的data.frame mydata:

id <- c(1,1,1,1,2,2,3,3,4,4,4)
day <- c(1,1,2,3,1,2,2,3,1,2,3)
value <- c(12,10,15,20,40,30,22,24,11,11,12)
mydata <- data.frame(id, day, value)
Run Code Online (Sandbox Code Playgroud)

应该转变为:

   id day value   
   1   1    10 
   1   2    15 
   1   3    20 
   2   1    40 
   2   2    30 
   3   2    22 
   3   3    24 
   4   1    11 
   4   2    11 
   4   3    12 
Run Code Online (Sandbox Code Playgroud)

通过仅保留其中一个行具有一个或多个重复的组标识符(此处仅为此row[1]: (id,day)=(1,1)),首先排序值(以便保留具有最低值的行).

在Stata中,这只是:

bys id day (value): keep if _n == 1
Run Code Online (Sandbox Code Playgroud)

在网上找到了一段代码,如果我首先生成一个组标识符,它就会正确执行:

mydata$id1 <- paste(mydata$id,"000",mydata$day, sep="")  ### the single group identifier

myid.uni …
Run Code Online (Sandbox Code Playgroud)

r stata

5
推荐指数
2
解决办法
2万
查看次数

如何使用R中的占位符引用具有公共前缀的多个变量

假设我有一个data.frame:

x.a <- c(1,2,3,4,5)
y.b <- c(2,3,4,5,6)
y.c <- c(5,1,0,9,2)
y.d <- c(5,6,7,3,1)
x.e <- c(2,6,1,2,3)

df <- data.frame(x.a,y.b,y.c,y.d,x.e)
Run Code Online (Sandbox Code Playgroud)

假设我想对变量yb,yc,yd进行排名:

df[2:4] <- sapply(df[2:4], function(x) rank(x))
Run Code Online (Sandbox Code Playgroud)

有没有办法将函数应用于具有前缀的所有变量y.?例如:

df[y.*] <- sapply(df[y.*], function(x) rank(x))
Run Code Online (Sandbox Code Playgroud)

r dataframe

0
推荐指数
1
解决办法
1968
查看次数

标签 统计

r ×2

dataframe ×1

large-data ×1

odbc ×1

performance ×1

python ×1

sql-server ×1

stata ×1