小编Mat*_*Son的帖子

使用 data.table 并行化/多线程

我有超过 10 亿个观测值的大数据,我需要执行一些字符串操作,速度很慢。

我的代码很简单:

DT[, var := some_function(var2)] 
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,data.table在使用 调用时使用多线程by,并且我正在尝试利用它来并行化此操作。为此,我可以创建一个临时石斑鱼变量,例如

DT[, grouper := .I %/% 100] 
Run Code Online (Sandbox Code Playgroud)

并做

DT[, var := some_function(var2), by = grouper]
Run Code Online (Sandbox Code Playgroud)

我尝试使用小样本数据进行一些基准测试,但令人惊讶的是我没有看到性能改进。所以我的问题是:

  1. data.table与 一起使用时是否使用多线程by
  2. 如果是这样,是否存在启用/禁用多线程的条件?
  3. 有没有一种方法可以让用户“强制”data.table在这里使用多线程?

仅供参考,当我导入 data.table 时,我发现我的一半核心启用了多线程,所以我猜这里不存在 openMP 问题。

parallel-processing multithreading r data.table

7
推荐指数
1
解决办法
1191
查看次数

Quarto YAML 标头 pdf 文档的自定义日期

自定义日期在 RMarkdown-pdf 中有效,但我注意到 Quarto 不行。

如何在 Quarto YAML 中使用自定义日期?

---
title: "Some pdf document"
author: "me"
date: "Spring 2022"  <- I would like to use this
format: pdf
----
Run Code Online (Sandbox Code Playgroud)
---
title: "Some pdf document"
author: "me"
date: "Last update : `r Sys.Date()`"  <- Or, like this
format: pdf
----
Run Code Online (Sandbox Code Playgroud)

当前的 Quarto-pdf 仅生成 %m/%d/%Y 格式日期。

pdf quarto

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

R data.table 的合并指示器?

我的问题与这个问题相关,但它要求dplyr解决方案。

我想做的是执行外连接并创建一个指示变量来解释合并结果,就像pandasorSTATA会做的那样。

具体来说,我希望_merge在完全外连接操作之后有一个列,指示与 left_only 或 right_only 或两者的合并结果,如下例所示。

更新:我已经更新了示例

key1 = c('a','b','c','d','e')
v1 = c(1,2,3, NA, 5)
key2 = c('a','b','d','f')
v2 = c(4,5,6,7)
df1 = data.frame(key=key1,v1)
df2 = data.frame(key=key2,v2)

> df1
   key v1
1:   a  1
2:   b  2
3:   c  3
4:   d NA
5:   e  5

> df2
   key v2
1:   a  4
2:   b  5
3:   d  6
4:   f  7

# merge result I'd like to have

   key …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

Pandas 将函数应用于列然后获取属性

我正在尝试将函数应用于 pandas 列,然后检索函数的属性。具体来说,我使用 TextBlob 从一列意见中提取情感和极性。

这是我尝试运行的示例代码。

opinion = ['good', 'bad','horrible']
df = pd.DataFrame(opinion, columns=['comment'])
df.head()
    comment
0   good
1   bad
2   horrible
Run Code Online (Sandbox Code Playgroud)

我试图运行的伪代码是

from textblob import TextBlob
df['sentiment'] = df.comment.apply(TextBlob).sentiment
Run Code Online (Sandbox Code Playgroud)

这会引发 AttributeError。

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
 in 
----> 1 df.comment.apply(TextBlob).sentiment

~\AppData\Local\Continuum\miniconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
   5177             if self._info_axis._can_hold_identifiers_and_holds_name(name):
   5178                 return self[name]
-> 5179             return object.__getattribute__(self, name)
   5180 
   5181     def __setattr__(self, name, value):

AttributeError: 'Series' object has no attribute 'sentiment'
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用getattr()函数来实现这一点,但它不起作用。

df.comment.apply(TextBlob).apply(getattr,sentiment)
Run Code Online (Sandbox Code Playgroud)

如何应用函数并获取列的属性?

apply dataframe python-3.x pandas

2
推荐指数
1
解决办法
1707
查看次数

r 箭头架构更新

.csv我尝试读取多个文件arrow::open_dataset(),但由于列类型不一致而引发错误。

我发现这个问题主要与我的问题有关,但我正在尝试一种稍微不同的方法。

  1. 我想使用arrow一个示例 CSV 文件来利用类型的自动检测。弄清楚所有类型的列非常耗时。

  2. 然后,我采用架构并更正一些导致问题的列。

  3. 然后我使用更新后的架构来读取所有文件。

以下是我的方法:

data = read_csv_arrow('data.csv.gz', as_data_frame = F) # has more than 30 columns
sch = data$schema
print(sch)
Run Code Online (Sandbox Code Playgroud)
Schema
trade_id: int64
secid: int64
side: int64
...
nonstd: int64
flags: string
Run Code Online (Sandbox Code Playgroud)

我想将'trade_id'列类型从int64更改为string并将其他列保持不变。

如何更新架构?

我正在使用 R arrow,但我想相关的答案pyarrow可能适用。

r apache-arrow pyarrow

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