Big Data Analytics 简明教程

Big Data Analytics - Cleansing Data

一旦收集到数据,我们通常会有不同特征的多元化数据源。最直接的步骤是让这些数据源均质化,并继续开发我们的数据产品。然而,这取决于数据的类型。我们应该问自己,均质化数据是否可行。

也许数据源完全不同,并且如果将源均质化的话,信息丢失将会很大。在这种情况下,我们可以考虑替代方案。一个数据源可以帮助我构建回归模型,另一个数据源可以构建分类模型吗?是否可以利用我们的优势来处理异质性,而不是仅仅丢失信息?做出这些决策让分析变得有趣且具有挑战性。

对于评论而言,每个数据源都可以有一种语言。同样,我们有两个选择——

  1. Homogenization ——它涉及将不同语言翻译成我们拥有更多数据的语言。翻译服务的质量是可以接受的,但如果我们要使用 API 翻译海量数据,成本将很高。有可用于此任务的软件工具,但这也会很昂贵。

  2. Heterogenization ——是否可以针对每种语言开发一个解决方案?因为检测语料库的语言很简单,所以我们可以针对每种语言开发一个推荐器。这将涉及根据可用语言数量来调整每个推荐器的工作,但如果我们有少量的可用语言,这绝对是一个可行的选择。

Twitter Mini Project

在本例中,我们需要先清理非结构化数据,然后将其转换为数据矩阵,以便对它应用主题建模。一般来说,从 Twitter 获取数据时,有几个字符我们不想使用,至少在数据清理过程的第一阶段如此。

例如,在获得推特后,我们会得到以下奇怪字符:“<ed><U+00A0><U+00BD><ed><U+00B8><U+008B>”。这些可能是表情符号,因此为了清除数据,我们将使用以下脚本进行删除。此代码也在 bda/part1/collect_data/cleaning_data.R 文件中提供。

rm(list = ls(all = TRUE)); gc() # Clears the global environment
source('collect_data_twitter.R')
# Some tweets
head(df$text)

[1] "I’m not a big fan of turkey but baked Mac &
cheese <ed><U+00A0><U+00BD><ed><U+00B8><U+008B>"
[2] "@Jayoh30 Like no special sauce on a big mac. HOW"
### We are interested in the text - Let’s clean it!

# We first convert the encoding of the text from latin1 to ASCII
df$text <- sapply(df$text,function(row) iconv(row, "latin1", "ASCII", sub = ""))

# Create a function to clean tweets
clean.text <- function(tx) {
  tx <- gsub("htt.{1,20}", " ", tx, ignore.case = TRUE)
  tx = gsub("[^#[:^punct:]]|@|RT", " ", tx, perl = TRUE, ignore.case = TRUE)
  tx = gsub("[[:digit:]]", " ", tx, ignore.case = TRUE)
  tx = gsub(" {1,}", " ", tx, ignore.case = TRUE)
  tx = gsub("^\\s+|\\s+$", " ", tx, ignore.case = TRUE)
  return(tx)
}

clean_tweets <- lapply(df$text, clean.text)

# Cleaned tweets
head(clean_tweets)
[1] " WeNeedFeminlsm MAC s new make up line features men woc and big girls "
[1] " TravelsPhoto What Happens To Your Body One Hour After A Big Mac "

数据清理迷你项目的最后一步是清除可以转换为矩阵并应用算法的文本。通过存储在 clean_tweets 向量中的文本,我们可以轻松地将其转换为词袋矩阵并应用非监督学习算法。