【问题标题】:Best way of Splitting up and then putting back a huge dataframe?拆分然后放回巨大数据框的最佳方法?
【发布时间】:2022-12-16 21:22:19
【问题描述】:

基本上我有一个包含 300 000 行的数据框,我需要对其进行情绪分析。数据框包含 reddit cmets,所以我需要将它们转换成语料库,但我的函数只适用于 10 000 行:

IntelCorpus1 %>% tm_map(content_transformer(tolower)) %>% tm_map(removePunctuation) %>% 
  tm_map(removeNumbers) %>% 
  tm_map(removeWords, stopwords("english")) %>% 
  tm_map(stemDocument) %>% 
  tm_map(stripWhitespace) -> IntelCorpus1

基本上我需要将 300 000 个数据帧分成 10 000 个部分,对它们使用这个语料库函数,然后使用以下方法对其进行情感分析:

IntelSentiment1 <- analyzeSentiment(IntelCorpus1)

之后我需要把它放回去。它保持顺序很重要,因为我需要一个日期变量。

如果不重复相同的代码 30 次,最好的方法是什么? 不确定 split() 是否有效?

【问题讨论】:

  • 你需要将IntelCorpus1拆分成10,000份,因为analyzeSentiment只能取IntelCorpus1的10,000行,对吧?该函数是否返回一个数据框,即IntelSentiment 是一个新的数据框吗?
  • 它更多的是 RAM 限制,因为创建的矢量将使用 20-30 gb 的 RAM,但是,是的,大约 10,000 是它可以使用的。是的,IntelSentiment 是一个新的数据框,intelcorpus 是一个大型的简单语料库。 @浪塘
  • 还是 IntelCorpus1 代表更大的 IntelCorpus 的 30 个拆分中的“第一个”?如果我知道其中哪一个(代码块中的管道或 analyzeSentiment() 函数是限制为 10,000 行的管道),我可以使下面的答案更相关
  • IntelCorpus1 是主数据帧的前 10,000 行。限制因素是 analyzeSentiment() 会使用太多 RAM,因此代码无法运行,所以这就是我必须分解它的原因。它不完全是 10,000,但大约是我的电脑可以运行的数量。 @浪塘
  • 好吧,我删除了我的答案,因为您可能觉得它没有帮助。您仍然可以使用相同的方法(为 30 个左右的组创建一个指标,并循环遍历子集,每次运行 tm_map() 调用,并将该管道的结果提供给 analyzeSentiment() 函数。您可以运行如果在每次运行该函数后(即在下一次循环之前)没有快速释放 RAM,就会遇到麻烦

标签: r dataframe sentiment-analysis corpus


【解决方案1】:

考虑一个已定义的方法来运行您的流程并将数据拆分为 by(tapply 的面向对象包装器以拆分数据帧并将子集传递给函数)。

run_process <- function(sub) {
    subIntelCorpus <- sub %>% 
        tm_map(content_transformer(tolower)) %>%
        tm_map(removePunctuation) %>% 
        tm_map(removeNumbers) %>% 
        tm_map(removeWords, stopwords("english")) %>% 
        tm_map(stemDocument) %>% 
        tm_map(stripWhitespace)

    subIntelSentiment <- analyzeSentiment(subIntelCorpus)

    return(subIntelSentiment)
}

splits <- ceiling(1:nrow(MainIntelCorpus)/10000)

sentiment_frames <- by(MainIntelCorpus, splits, run_process)

FinalIntelSentiment <- do.call(rbind.data.frame, sentiment_frames)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多