干货!三大招教你轻松挖掘客户意见(含Python代码)。

  • 2020 年 2 月 26 日
  • 笔记

导读

随着大数据营销模式的发展,精准了解客户需求越来越重要,这其中最好的方式,就是直接收集客户意见。但客户意见往往天马行空,既无序又杂乱。虽然收集的意见不少,但分析出有效的信息少之又少。因此怎样从大量意见中挖掘出有效信息,真正读懂客户的心,成为一个刚需。

01目标和分析方法

本文通过一整套流程对问卷调查中客户回答的文本意见进行处理和对隐藏信息挖掘,主要目标包括:

(1)将杂乱文本进行预处理,形成有效信息;

(2)将有效信息进行拆解,归纳主要意见;

(3)将主要意见进行主题划分,在意见中寻找深层的需求。

02 分析方法

1.文本预处理方法
  • (1)文本去噪

一份原始的文字语料中往往有很多干扰信息,包括标点符号、数字、英文字母、转换符等噪声,这些是首先要删除的。

  • (2)文本去重

文本去重包括两个部分,即重复语句删除和重复词压缩。

重复语句删除就是去掉文本中重复的部分,这是是获得干净的文本数据后的第一步处理。一般情况下,不同客户之间有价值的意见是不会出现完全重复的文字,所以进行文本去重后,可以删去无效和重复的信息,有助于筛选出有意义的意见。

对于重复词压缩的原因,主要是在线问卷调查时,往往有最少字数要求。所以客户往往会复制粘贴很多同样的词。比如像这样:“好好好好好好好好好好”、“不错不错不错不错不错”, 这类信息都需要压缩和精简。

  • (3)短句删除

完成重复词压缩后,还存在一些短句字数过少,这也是没有意义的意见。比如:“很不错”“很好”等。因此,最后还要对字数过少的句子删除。

2.文本分词和统计

为了对意见进行分析,需要将短句划分为词,即将连续的字序列按照一定的规范重新组合成词序列的过程。接着,通过高频率词组进行统计,就可以掌握客户的主要意见。

3.主题分析

主题分析是通过机器学习和自然语言处理等方法在大量的文本中自动抽象出主题的一种统计模型。这类模型要考虑到文本背后的语义关联的关系,发现文本词语的规律,实现在非结构化的文本中找到有效的信息。

03 实际操作案例

本文针对一份线上问卷调查中的一个开放问题:”对于某银行现有产品和服务体系,您有何改进建议?”收集了客户的文本意见。本文整体分析流程包括:

  • 1.评论数据归集

为案例演示,截取了部分客户意见进行分析和讲解。收集到的意见是像这样的:

  • 2.文本预处理

(1)文本去噪

文本去噪的方法主要是利用re库中的sub函数,进行英文、数字和特殊字符的删除。

代码清单 1
#-*- coding: utf-8 -*-  import pandas as pd  import re    inputfileq0 = 'q_0.txt' #评论提取后保存路径  outputfileq1 = 'q_1.txt' #评论处理后保存路径  data = pd.read_csv(inputfileq0, encoding = 'utf-8', header = None)  filelist =  list(data[0])  filelist2 = []  r='[s+.!/_,$%^*(+"')]+|[::+——()?【】“”!,。?、~@#¥%……&*()]+'  r1='[^u4e00-u9fa5]'  for a_string in filelist:      a_string=str(a_string)      temp = re.sub(r,'',a_string)   #删除标点符号      temp = re.sub(r1,'',temp)   #删除英文和数字      filelist2.append(temp)  filelist3 =  pd.DataFrame(filelist2)  filelist3.to_csv(outputfileq1, index = False, header = False, encoding = 'utf-8')  

(2)文本去重

首先进行重复语句删除。为了尽量保留有用的信息,一般采用比较删除法,通过在重复文字中筛选保留其中1条,来尽可能存留有用的意见。也就是这条语句:*data = pd.DataFrame(data[0].unique()) *。

代码清单 2
#-*- coding: utf-8 -*-  import pandas as pd    inputfileq14 = 'q_1.txt' #评论提取后保存路径  outputfileq14 = 'q_2.txt' #评论处理后保存路径  data = pd.read_csv(inputfileq14, encoding = 'utf-8', header = None)  l1 = len(data)  data = pd.DataFrame(data[0].unique())  l2 = len(data)  data.to_csv(outputfileq14, index = False, header = False, encoding = 'utf-8')  print(u'删除了%s条记录。' %(l1 - l2))  

再进行重复词压缩。重复词压缩也称为机械压缩,主要原理就是通过分析前后、中间重复的语料,进行重复词的压缩处理。这里自己写了一个find_chinese程序,用于文本机械压缩的实现。

代码清单 3
# -*- coding: utf-8 -*-    import pandas as pd  import find_chinese as wenben  inputfileq13 = u'q_2.txt' #评论处理后保存路径  outputfileq13 = u'q_3.txt' #评论处理后保存路径    data= pd.read_csv(inputfileq13, header = None)  filelist =  list(data[0])  filelist2 = []  j=0  for a_string in filelist:      a_string=str(a_string)      temp1 = a_string.strip('n')      temp2 = temp1.lstrip('ufeff')      temp3 = temp2.strip('r')      temp4 = wenben.find_chinese(temp3)      temp5 = ""      if temp4!='':          temp5 = wenben.delete_copy(temp4)      filelist2.append(temp5)  filelist3 =  pd.DataFrame(filelist2)  filelist3.to_csv(outputfileq13, index = False, header = False,encoding = 'utf-8')  

(3)短句删除

完成机械压缩去词处理后,就进入到最后的预处理步骤:短句删除。短句删除的原理就是设定意见字数的下限(这里是4个字符),将小于这个下限的语料删除。

代码清单 4
# -*- coding: utf-8 -*-  import pandas as pd    inputfileq0 = 'q_3.txt' #输入  outputfileq1 = 'q_4.txt' #输出  data = pd.read_csv(inputfileq0, encoding = 'utf-8', header = None)  filelist =  list(data[0])  filelist2 = []  for a_string in filelist:      a_string=str(a_string)      if(a_string == ''):          continue      else:          if(len(a_string)<4):              continue          else:              filelist2.append(a_string)  filelist3 =  pd.DataFrame(filelist2)  filelist3.to_csv(outputfileq1, index = False, header = False, encoding = 'utf-8')  
  • 3.文本分词和统计

本文采用Python的中文分词包“jieba”(结巴分词)对文本意见进行中文分词,此分词系统的分词精度可达97%以上。同时在分词的过程中,还可以对不用的语料再进行一次删除。

为了科学的了解客户的主要意见,需要对所有的词组进行统计,分析客户意见集中在哪些方面。同时为了形象了查看客户的意见,还可以用词云图显示客户的主要意见。

代码清单 5
# -*- coding: utf-8 -*-  import collections  import pandas as pd  import jieba #导入结巴分词,需要自行下载安装  from wordcloud import WordCloud  import matplotlib.pyplot as plt    def stopwordslist(filepath):      stopwords= open(filepath,encoding = 'utf-8').read()      stopwords=jieba.cut(stopwords, cut_all = True)      stopwords2 = "n ".join(stopwords)      return stopwords2  def movestopwords(sentence):      stopwords = stopwordslist('stoplist.txt')  # 这里加载停用词的路径      outstr = ''      for word in sentence.split("n"):          if word not in stopwords:              if word != 't'and'n':                  outstr += word      return outstr  inputfileq0 = u'q_4.txt' #输入  text = open(inputfileq0,encoding = 'utf-8').read()  wordlist_text = jieba.cut(text, cut_all = True)  wl_space_split = "n ".join(wordlist_text)  listcontent = movestopwords(wl_space_split)  #统计词频  str1=listcontent.split(" ")  q = collections.Counter(str1)  dataq =  pd.DataFrame(q.items())  dataq.to_excel("q5.xlsx",  header = False, encoding = 'utf-8')  #生成词云  outputfile = 'ciyun.jpg'  my_wordcloud = WordCloud(              background_color='white',    # 设置背景颜              #mask = abel_mask,        # 设置背景图片              max_words = 2000,            # 设置最大现实的字数              collocations=False,              font_path = 'simhei.ttf',# 设置字体格式,如不设置显示不了中文                  scale = 4                  ).generate(listcontent)  plt.imshow(my_wordcloud)  plt.axis("off")  plt.show()  my_wordcloud.to_file(outputfile)  
  • 4.LDA主题划分

LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,能够挖掘数据集中的潜在主题,进而有助于分析文本内容的关注点。在本文的研究中,可以通过LDA模型从大量高频的词汇中选出最有代表性的主题,可以更合理的分析客户的意见。

代码清单 6
#-*- coding: utf-8 -*-  import pandas as pd  from gensim import corpora, models    inputfileq = u'q_5.txt'  outputfileq= u'q_6.txt'  inputfileq = pd.read_csv(inputfileq, encoding = 'utf-8', header = None) #读入数据  inputfileq[1] = inputfileq[0].apply(lambda s: s.split(' ')) #定义一个分割函数,然后用apply广播  #主题分析  inputfileq_dict = corpora.Dictionary(inputfileq[1]) #建立词典  inputfileq13_corpus = [inputfileq_dict.doc2bow(i) for i in inputfileq[1]] #建立语料库  inputfileq13_lda = models.LdaModel(inputfileq13_corpus, num_topics = 3, id2word = inputfileq_dict) #LDA模型训练  filelist = []  for i in range(3):      filelist.append(inputfileq13_lda.print_topic(i))      print (inputfileq13_lda.print_topic(i)) #输出每个主题  filelist1 =  pd.DataFrame(filelist)  filelist1.to_csv(outputfileq, index = False, header = False, encoding = 'utf-8')  

04 结果展现和解读

  • 1.词云图效果

将客户的意见用词云图来显示效果是这样的,从图中可以很轻松的看出客户对银行投资理财的意见较多。

  • 2.高频率词分析

仅仅是词云图,还不足以量化分析客户的意见。因此通过词频的统计,可以更准确的了解客户意见。如下图所示。

从上图的词组频率统计情况来看,客户的主要意见集中在理财产品服务、产品种类、产品时间和优惠等方面。

  • 3.主题分析

当收集的客户意见数量较多时,还需要通过科学的方法来归类。经过LDA主题分析后,文本意见分为了3个主题,每个主题下生成了10个最有可能出现的词语以及相应的概率。下表展示了主题的主要内容。

从上表来分析,主题1中筛选的有效的主题词,主要反映了客户希望理财产品的品种更多一些。主题2中筛选的有效的主题词,主要反映了客户希望理财产品的收益水平更大一些。主题3中筛选的有效的主题词,主要反映了客户希望投资理财的服务需改进,开展更多的理财活动。

针对LDA主题模型结论的分析,可以在以下方面进行改进:一是理财产品需进一步丰富,满足客户多元化的需求。二是投资理财信息要提前进行宣传,开展形式多样的理财活动,提升客户满意度。三是要多推出收益较高的产品,吸引客户投资。

05 小结

本文通过系统的介绍文本处理的全流程方案,帮助读者直接上手处理大量、杂乱的语料信息,最快速度挖掘出有效的信息,掌握客户意见。