Python文本挖掘练习(五)// 电商产品评论数据情感分析

第一部分 案例简介

本案例首先利用Python文本挖掘技术,对碎片化、非结构化的电商网站评论数据进行清洗与处理,转化为结构化数据。然后对文本数据进一步挖掘与分析,采用决策树算法构建情感分类模型,探索用机器学习算法对评论标注type的可能性;依据情感词库匹配情感词,计算每条评论的情感值,进而机器标注每条评论的正负类型type,用词云图直观呈现正负评论的关键词,初步获得用户的反馈意见。最后利用gensim库构建主题挖掘模型,深入了解用户的意见、购买原因、产品的优缺点等。

说明:本案例侧重分析思路及代码实现,不深入展开分析结果的业务解释与决策指导!

重要事情说三遍~

想听我讲案例,请点这里,进入B站
想听我讲案例,请点这里,进入B站
想听我讲案例,请点这里,进入B站

第二部分 框架

工具准备
一、导入数据
二、数据预处理
    (一)去重
    (二)数据清洗
    (三)分词、词性标注、去除停用词、词云图
三、模型构建
    (一)基于决策树的情感分类
    (二)情感分析
    (三)基于LDA模型的主题分析

第三部分 代码

工具准备

import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.pylab import style #自定义图表风格
style.use('ggplot')
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
plt.rcParams['font.sans-serif'] = ['Simhei'] # 解决中文乱码问题

import re
import jieba.posseg as psg
import itertools
#conda install -c anaconda gensim
from gensim import corpora,models #主题挖掘,提取关键信息

# pip install wordcloud
from wordcloud import WordCloud,ImageColorGenerator
from collections import Counter

from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics import classification_report
from sklearn.metrics import accuracy_score
import graphviz

Python文本挖掘练习(五)// 电商产品评论数据情感分析_第1张图片

一、导入数据

Python文本挖掘练习(五)// 电商产品评论数据情感分析_第2张图片

二、数据预处理

Python文本挖掘练习(五)// 电商产品评论数据情感分析_第3张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第4张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第5张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第6张图片

#分词,由元组组成的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,[]) #表示去掉[],拉平

Python文本挖掘练习(五)// 电商产品评论数据情感分析_第7张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第8张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第9张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第10张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第11张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第12张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第13张图片

三、模型构建

Python文本挖掘练习(五)// 电商产品评论数据情感分析_第14张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第15张图片
情感分析,截图部分,更多详情,请看B站视频
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第16张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第17张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第18张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第19张图片
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文本挖掘练习(五)// 电商产品评论数据情感分析_第20张图片
Python文本挖掘练习(五)// 电商产品评论数据情感分析_第21张图片

参考材料《Python数据分析与挖掘实战》

你可能感兴趣的:(机器学习,文本挖掘,Python)