大数据分析 - 清理数据

收集数据后,我们通常会拥有不同特征的不同数据源.最直接的步骤是使这些数据源保持同质并继续开发我们的数据产品.但是,这取决于数据的类型.我们应该问自己,数据的同质化是否切实可行.

可能数据源完全不同,如果来源同质化,信息损失会很大.在这种情况下,我们可以考虑替代方案.一个数据源可以帮助我建立回归模型,另一个数据源可以帮助我建立分类模型吗?是否有可能利用我们优势的异质性而不仅仅是丢失信息?采取这些决策是使分析变得有趣和具有挑战性的原因.

在评论的情况下,可以为每个数据源提供一种语言.同样,我们有两个选择 :

  • 同质化 : 它涉及将不同语言翻译成我们拥有更多数据的语言.翻译服务的质量是可以接受的,但如果我们想用API翻译大量数据,那么成本就会很高.有可用于此任务的软件工具,但这也是昂贵的.

  • 异质化 : 是否有可能为每种语言开发解决方案?由于检测语料库的语言很简单,我们可以为每种语言开发推荐器.这将涉及根据可用语言的数量调整每个推荐人的更多工作,但如果我们有一些语言可用,这绝对是一个可行的选择.

Twitter Mini项目

在目前的情况下,我们需要首先清理非结构化数据,然后将其转换为数据矩阵,以便在其上应用主题建模.一般来说,从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 向量中的文本中,我们可以轻松地将其转换为一个单词矩阵包并应用无监督学习算法.