本案例首先利用Python文本挖掘技术,对碎片化、非结构化的电商网站评论数据进行清洗与处理,转化为结构化数据。然后对文本数据进一步挖掘与分析,采用决策树算法构建情感分类模型,探索用机器学习算法对评论标注type的可能性;依据情感词库匹配情感词,计算每条评论的情感值,进而机器标注每条评论的正负类型type,用词云图直观呈现正负评论的关键词,初步获得用户的反馈意见。最后利用gensim库构建主题挖掘模型,深入了解用户的意见、购买原因、产品的优缺点等。
说明:本案例侧重分析思路及代码实现,不深入展开分析结果的业务解释与决策指导!
重要事情说三遍~
想听我讲案例,请点这里,进入B站 想听我讲案例,请点这里,进入B站 想听我讲案例,请点这里,进入B站
工具准备 一、导入数据 二、数据预处理 (一)去重 (二)数据清洗 (三)分词、词性标注、去除停用词、词云图 三、模型构建 (一)基于决策树的情感分类 (二)情感分析 (三)基于LDA模型的主题分析
#分词,由元组组成的list seg_content=content.apply( lambda s: [(x.word,x.flag) for x in psg.cut(s)] ) #统计评论词数 n_word=seg_content.apply(lambda s: len(s)) #得到各分词在第几条评论 n_content=[ [x+1]*y for x,y in zip(list(seg_content.index),list(n_word))] #[x+1]*y,表示复制y份,由list组成的list index_content_long=sum(n_content,[]) #表示去掉[],拉平,返回list #分词及词性,去掉[],拉平 seg_content_long=sum(seg_content,[]) #得到加长版的分词、词性 word_long=[x[0] for x in seg_content_long] nature_long=[x[1] for x in seg_content_long] #content_type拉长 n_content_type=[ [x]*y for x,y in zip(list(reviews['content_type']),list(n_word))] #[x+1]*y,表示复制y份 content_type_long=sum(n_content_type,[]) #表示去掉[],拉平
情感分析,截图部分,更多详情,请看B站视频 LDA模型,截图部分,更多详情,请看B站视频
#主题数寻优 #这个函数可以重复调用,解决其他项目的问题 def LDA_k(x_corpus,x_dict): ''' 函数功能: ''' #初始化平均余玄相似度 mean_similarity=[] mean_similarity.append(1) #循环生成主题并计算主题间相似度 for i in np.arange(2,11): lda=models.LdaModel(x_corpus,num_topics=i,id2word=x_dict) #LDA模型训练 for j in np.arange(i): term=lda.show_topics(num_words=50) #提取各主题词 top_word=[] #shape=(i,50) for k in np.arange(i): top_word.append( [''.join(re.findall('"(.*)"',i)) for i in term[k][1].split('+')]) #列出所有词 #构造词频向量 word=sum(top_word,[]) #列车所有词 unique_word=set(word) #去重 #构造主题词列表,行表示主题号,列表示各主题词 mat=[] #shape=(i,len(unique_word)) for j in np.arange(i): top_w=top_word[j] mat.append( tuple([ top_w.count(k) for k in unique_word ])) #统计list中元素的频次,返回元组 #两两组合。方法一 p=list(itertools.permutations(list(np.arange(i)),2)) #返回可迭代对象的所有数学全排列方式。 y=len(p) # y=i*(i-1) top_similarity=[0] for w in np.arange(y): vector1=mat[p[w][0]] vector2=mat[p[w][1]] top_similarity.append(cos(vector1,vector2)) # #两两组合,方法二 # for x in range(i-1): # for y in range(x,i): #计算平均余玄相似度 mean_similarity.append(sum(top_similarity)/ y) return mean_similarity
参考材料《Python数据分析与挖掘实战》
链接:https://pan.baidu.com/s/1na4I2yYZpjj3vByfbgZXGg 提取码:zj7p