在大数据时代,非结构化数据的分析变得越来越重要。本文将探讨如何将非结构化文本数据转换为结构化且更易于使用的格式。通过一个具体的商业案例,将详细讨论数据结构的理解和文本清洗的过程,以便为建模练习做好准备。
假设是Metro Cash & Carry的老板。Metro与Barclays银行合作推出了联名卡,并达成了共享交易数据的协议。Metro希望利用这些数据追踪高价值客户在Metro以外的购物行为。为此,需要从Barclays的交易数据中提取相关信息,例如将“Payment made to Messy”标记为在零售店“Messy”的交易。通过分析Metro高价值客户在其他零售店的交易频率,可以比较Metro与其他零售店的服务差异,从而分析客户流失的原因。
首先,需要观察原始数据,构建数据清洗的框架。以下是一些需要处理的样本交易数据:
Paymt made to : Messy 230023929#21 Barcllay
Transactn made to : Big Bazaar 42323#2322 Barcllay
Pay to messy : 342343#2434 Barcllay
Messy bill pay 32344#24324 Barcllay
通过仔细观察数据,可以发现每笔交易中都包含动作词(如“payment”、“Paymt”、“Transactn”),可能表示不同的支付方式,如信用卡支付或现金卡支付。每笔交易的末尾都有一个共同的词,这应该是使用的卡的名称。每笔交易都有一个供应商名称,但名称的大小写不一致。每笔交易都有一个数字代码,可以忽略这个代码,或者从中提取有意义的信息。如果能够解码这些数字,可能会达到更深层次的分析。例如,如果能够找到交易区域,就可以进行区域级别的分析;或者这些代码与产品类别有关,从而可以用来优化服务。
在R中清洗文本数据非常简单。对于本次分析,不会使用交易末尾的数字。但如果要进行深入分析,这绝对是值得探索的。在本数据集中,需要进行以下调整:
根据对数据的理解,步骤2和5、3和4可以合并以避免额外的工作。在步骤2中,只需要移除单个字符“#”,这在R中移除其他标点符号时会自动完成。将合并步骤3和步骤4中的词汇,并一起移除它们。以下是清洗数据集的代码。一旦有了干净的数据集,将把它转换成词文档矩阵。以下是进行这项练习的代码:
library(tm)
myCorpus <- Corpus(VectorSource(a))
inspect(myCorpus)
# 移除标点符号
myCorpus <- tm_map(myCorpus, removePunctuation)
inspect(myCorpus)
# 移除数字
myCorpus <- tm_map(myCorpus, removeNumbers)
inspect(myCorpus)
# 移除停用词
myStopwords <- c(stopwords(‘english’), “Barcllay”)
myCorpus <- tm_map(myCorpus, removeWords, myStopwords)
inspect(myCorpus)
myDtm <- TermDocumentMatrix(myCorpus, control = list(minWordLength = 1))
inspect(myDtm)