IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python绘图小课堂】词云韦恩图(上篇-分词) -> 正文阅读

[Python知识库]【Python绘图小课堂】词云韦恩图(上篇-分词)

作者:recommend-item-box type_blog clearfix

?

数据说明

本案例数据为电影《白蛇传·情》豆瓣短评数据:

?其中,评分有:推荐、力荐、还行、较差、很差 五种,我们将推荐与力荐的评论归为“好评”,并赋值为1,将其余三种评论归为“中差评”,赋值为0:

#将评分转化为数值
data['评分'] = data['评分'].replace(['力荐','推荐','还行','较差','很差'],[1,1,0,0,0]) 

分词

对于评论文本数据的分析,最基础的就是分词,观察词频。分词的方法有很多,最常见的就是jieba分词:

#使用精确模式分词
def cut_word(word):
    jieba.load_userdict('my_dict.txt') 
    cw = jieba.cut(word)
    return list(cw)

#使用全模式分词
def cut_word_all(word):
    jieba.load_userdict('my_dict.txt') 
    cw = jieba.cut(word,cut_all=True)
    return list(cw)

这里提到了两种模式,一个是精确模式,另一个是全模式。精确模式即把文本最精确地分开,全模式则是找出句子中所有的可以成词的词语,在不同应用场景下有不同的模式选择,本案例中使用精确模式。

自定义词典

"my_dict.txt"文件是自定义词典,对于一些jieba分词无法按需划分的词语,可以建立一个txt文件,将词语放入,格式为一个词语在一行:

去停用词

#去停用词
with open('./hit_stopwords.txt','r',encoding = 'utf8') as f:
    stopwords = [w.strip() for w in f]  #去掉词语两端可能存在的空格

def q_ting(cut_word):
    for i in range(len(cut_word)):
        for j in range(len(cut_word[i])-1):
            #print(i,j)
            #cut_word[i][j] = cut_word[i][j].strip()
            if str(cut_word[i][j]).strip() in stopwords:
                #print(i,j)
                cut_word[i][j] = None
            if len(str(cut_word[i][j]).strip())==0:  #去除空格
                cut_word[i][j] = None
    return cut_word

#去除None值
def q_none(cut_word):
    for i in range(len(cut_word)):
        while None in cut_word[i]:
            cut_word[i].remove(None)

    for i in range(len(cut_word)):
        while '。' in cut_word[i]:
            cut_word[i].remove('。')
    return cut_word

去停用词有很多方法,上面的函数可以实现将分词结果放在DataFrame的一列中:

#分词
data['word_cut'] = data['短评'].apply(cut_word)
#去停用词
data['word_cut'] = q_ting(data['word_cut'])
data['word_cut'] = q_none(data['word_cut'])

?

词频统计

#统计词频
def freq_count(cut_word):
    freq_cut_word = pd.DataFrame(pd.Series(cut_word.sum()).value_counts())
    freq_cut_word.columns = ['count']
    freq_cut_word['word'] = freq_cut_word.index
    freq_cut_word.index = range(len(freq_cut_word))
    return freq_cut_word

分词结束后,我们就可以进行词频统计:

#全部评论
comment_all = freq_count(data['word_cut'])
print(comment_all)

#分别取出好评与中差评数据
high_comment = data[data['评分']==1] #好评
low_comment = data[data['评分']==0]  #中差评
high_comment.index = range(len(high_comment)) 
low_comment.index = range(len(low_comment))

#全部好评词频
comment_high = freq_count(high_comment['word_cut'])
#全部中差评词频
comment_low = freq_count(low_comment['word_cut']) 

韦恩图绘图准备

我们要绘制的韦恩图主要分为三个部分:好评词汇(不包含中差评出现的词)、好评与中差评中均出现的词、中差评词汇(不包含好评出现的词),知道这三部分的词及词频后,我们就可以绘制词云形式的韦恩图了。

要知道上述三部分词语,我们可以利用Python集合的 .difference() 函数与 .intersection()函数:

comment_diff_list_high = set(comment_high['word']).difference(set(comment_low['word']))
comment_diff_list_low = set(comment_low['word']).difference(set(comment_high['word']))
comment_inner_list = set(comment_low['word']).intersection(set(comment_high['word']))

在获得三部分的词语后,我们再得到相应的词频:

def my_differ(comment_high,comment_diff_list_high):
    comment_diff_high_word = []
    comment_diff_high_count = []
    for i in range(len(comment_high)):
        if comment_high['word'][i] in comment_diff_list_high:
            comment_diff_high_word.append(comment_high['word'][i])
            comment_diff_high_count.append(comment_high['count'][i])
    comment_diff_high = pd.DataFrame([])
    comment_diff_high['word'] = comment_diff_high_word
    comment_diff_high['count'] = comment_diff_high_count
    return  comment_diff_high
comment_high_diff_low = my_differ(comment_high,comment_diff_list_high)
comment_low_diff_high = my_differ(comment_low,comment_diff_list_low)
comment_inner =  my_differ(comment_all,comment_inner_list)

下一步,我们就可以用传统词云绘制的方法,来实现词云韦恩图啦!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:10:10  更:2022-09-13 11:11:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:31:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码