python3 词频统计计数分析+可视化词云 jieba+wordcloud 数据分析

hi, 大家好,我是宋哈哈,今天分享一个利用 python 的 jieba 库 和 wordcloud 词云库 做一个字符串的词频分析和词云可视化

编程环境:

        python 版本:3.6.8

        编辑器:pycharm 2020.1.3 专业版

        系统环境:win10 专业版


       

一、在写代码前,需要准备的是 一个做词云的图片,可以百度找,可以自己用PS设计。也可以保存我下方的图片:保存名为 bj.jpg ---> 切记重命名。

 二、在编辑器中 新建一个目录叫 “datafile”,用来保存生成好的 EXCEL 和 词云图片。

 三、新建一个 文本文档 后缀为 txt,名为 ci.txt, 用来存储被 统计的字符串。【不用在乎是否换行】

首先是导入库:如果运行报错的,请 自己安装。

#encoding:utf-8
import re # 正则表达式库
import collections # 词频统计库
import numpy as np # numpy数据处理库
import jieba # 结巴分词
import wordcloud # 词云展示库
from PIL import Image # 图像处理库
import matplotlib.pyplot as plt # 图像展示库
from matplotlib import colors
import csv
import pandas as pd

内容代码:


datalist = []

excelFilename = 'H列' # 保存文件名称


def wordFrequency():

    # 读取文件
    fn = open('ci.txt', 'rt', encoding='utf-8')  # 打开文件
    string_data = fn.read()  # 读出整个文件
    fn.close()  # 关闭文件

    # 文本预处理
    pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"')  # 定义正则表达式匹配模式
    string_data = re.sub(pattern, '', string_data)  # 将符合模式的字符去除

    # 文本分词
    seg_list_exact = jieba.cut(string_data, cut_all=False)  # 精确模式分词
    object_list = []

    remove_words = [u'的', u',', u'和', u'是', u'随着', u'对于', u'对', u'等', u'能', u'都', u'。', u' ', u'、', u'中', u'在', u'了',
                    u'通常', u'如果', u'我们', u'需要']  # 自定义去除词库

    for word in seg_list_exact:  # 循环读出每个分词

        if word not in remove_words:  # 如果不在去除词库中
            if len(word) > 2:  # 筛选关键词长度
                print(word, len(word))

                object_list.append(word)  # 分词追加到列表

    # 词频统计
    word_counts = collections.Counter(object_list)  # 对分词做词频统计
    word_counts_top = word_counts.most_common(200)  # 获取前200最高频的词

    for words in word_counts_top:
        data = [words[0], words[-1]]
        datalist.append(data)

    # 建立颜色数组,可更改颜色

    color_list = ['#0000FF', '#CC0033', '#333333']

    # 调用
    colormap = colors.ListedColormap(color_list)

    # 词频展示
    mask = np.array(Image.open('bj.jpg'))  # 定义词频背景
    wc = wordcloud.WordCloud(
        font_path='C:/Windows/Fonts/simhei.ttf',  # 设置字体格式
        mask=mask,  # 设置背景图
        max_words=200,  # 最多显示词数
        max_font_size=100,  # 字体最大值
        background_color='white',
        colormap=colormap,
        random_state=18
    )

    wc.generate_from_frequencies(word_counts)  # 从字典生成词云
    # image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图建立颜色方案
    # wc.recolor(color_func=image_colors) # 将词云颜色设置为背景图方案
    wc.to_file(f'datafile/{excelFilename}.jpg')

    plt.imshow(wc)  # 显示词云
    plt.axis('off')  # 关闭坐标轴
    plt.show()  # 显示图像

把统计出来的词频保存为 EXCEL 文件:


def saveExcels():

    df = pd.DataFrame(datalist,columns=['词语','词频次数'])
    df.to_excel(f'datafile/{excelFilename}.xlsx')

运行代码:



if __name__ == '__main__':
    wordFrequency()
    saveExcels()

完整代码,复制即可用:

#encoding:utf-8
import re # 正则表达式库
import collections # 词频统计库
import numpy as np # numpy数据处理库
import jieba # 结巴分词
import wordcloud # 词云展示库
from PIL import Image # 图像处理库
import matplotlib.pyplot as plt # 图像展示库
from matplotlib import colors
import csv
import pandas as pd


datalist = []

excelFilename = 'H列' # 保存文件名称


def wordFrequency():

    # 读取文件
    fn = open('ci.txt', 'rt', encoding='utf-8')  # 打开文件
    string_data = fn.read()  # 读出整个文件
    fn.close()  # 关闭文件

    # 文本预处理
    pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"')  # 定义正则表达式匹配模式
    string_data = re.sub(pattern, '', string_data)  # 将符合模式的字符去除

    # 文本分词
    seg_list_exact = jieba.cut(string_data, cut_all=False)  # 精确模式分词
    object_list = []

    remove_words = [u'的', u',', u'和', u'是', u'随着', u'对于', u'对', u'等', u'能', u'都', u'。', u' ', u'、', u'中', u'在', u'了',
                    u'通常', u'如果', u'我们', u'需要']  # 自定义去除词库

    for word in seg_list_exact:  # 循环读出每个分词

        if word not in remove_words:  # 如果不在去除词库中
            if len(word) > 2:  # 筛选关键词长度
                print(word, len(word))

                object_list.append(word)  # 分词追加到列表

    # 词频统计
    word_counts = collections.Counter(object_list)  # 对分词做词频统计
    word_counts_top = word_counts.most_common(200)  # 获取前200最高频的词

    for words in word_counts_top:
        data = [words[0], words[-1]]
        datalist.append(data)

    # 建立颜色数组,可更改颜色

    color_list = ['#0000FF', '#CC0033', '#333333']

    # 调用
    colormap = colors.ListedColormap(color_list)

    # 词频展示
    mask = np.array(Image.open('bj.jpg'))  # 定义词频背景
    wc = wordcloud.WordCloud(
        font_path='C:/Windows/Fonts/simhei.ttf',  # 设置字体格式
        mask=mask,  # 设置背景图
        max_words=200,  # 最多显示词数
        max_font_size=100,  # 字体最大值
        background_color='white',
        colormap=colormap,
        random_state=18
    )

    wc.generate_from_frequencies(word_counts)  # 从字典生成词云
    # image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图建立颜色方案
    # wc.recolor(color_func=image_colors) # 将词云颜色设置为背景图方案
    wc.to_file(f'datafile/{excelFilename}.jpg')

    plt.imshow(wc)  # 显示词云
    plt.axis('off')  # 关闭坐标轴
    plt.show()  # 显示图像



def saveExcels():

    df = pd.DataFrame(datalist,columns=['词语','词频次数'])
    df.to_excel(f'datafile/{excelFilename}.xlsx')




if __name__ == '__main__':
    wordFrequency()
    saveExcels()

如果对你有用,别忘记收藏至浏览器收藏夹。感谢阅读。

  • 6
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋哈哈呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值