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


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

    编程环境:

            python 版本:3.6.8

            编辑器:pycharm 2020.1.3 专业版

            系统环境:win10 专业版


           

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

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

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

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

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

    内容代码:

    1. datalist = []
    2. excelFilename = 'H列' # 保存文件名称
    3. def wordFrequency():
    4. # 读取文件
    5. fn = open('ci.txt', 'rt', encoding='utf-8') # 打开文件
    6. string_data = fn.read() # 读出整个文件
    7. fn.close() # 关闭文件
    8. # 文本预处理
    9. pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"') # 定义正则表达式匹配模式
    10. string_data = re.sub(pattern, '', string_data) # 将符合模式的字符去除
    11. # 文本分词
    12. seg_list_exact = jieba.cut(string_data, cut_all=False) # 精确模式分词
    13. object_list = []
    14. remove_words = [u'的', u',', u'和', u'是', u'随着', u'对于', u'对', u'等', u'能', u'都', u'。', u' ', u'、', u'中', u'在', u'了',
    15. u'通常', u'如果', u'我们', u'需要'] # 自定义去除词库
    16. for word in seg_list_exact: # 循环读出每个分词
    17. if word not in remove_words: # 如果不在去除词库中
    18. if len(word) > 2: # 筛选关键词长度
    19. print(word, len(word))
    20. object_list.append(word) # 分词追加到列表
    21. # 词频统计
    22. word_counts = collections.Counter(object_list) # 对分词做词频统计
    23. word_counts_top = word_counts.most_common(200) # 获取前200最高频的词
    24. for words in word_counts_top:
    25. data = [words[0], words[-1]]
    26. datalist.append(data)
    27. # 建立颜色数组,可更改颜色
    28. color_list = ['#0000FF', '#CC0033', '#333333']
    29. # 调用
    30. colormap = colors.ListedColormap(color_list)
    31. # 词频展示
    32. mask = np.array(Image.open('bj.jpg')) # 定义词频背景
    33. wc = wordcloud.WordCloud(
    34. font_path='C:/Windows/Fonts/simhei.ttf', # 设置字体格式
    35. mask=mask, # 设置背景图
    36. max_words=200, # 最多显示词数
    37. max_font_size=100, # 字体最大值
    38. background_color='white',
    39. colormap=colormap,
    40. random_state=18
    41. )
    42. wc.generate_from_frequencies(word_counts) # 从字典生成词云
    43. # image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图建立颜色方案
    44. # wc.recolor(color_func=image_colors) # 将词云颜色设置为背景图方案
    45. wc.to_file(f'datafile/{excelFilename}.jpg')
    46. plt.imshow(wc) # 显示词云
    47. plt.axis('off') # 关闭坐标轴
    48. plt.show() # 显示图像

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

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

    运行代码:

    1. if __name__ == '__main__':
    2. wordFrequency()
    3. saveExcels()

    完整代码,复制即可用:

    1. #encoding:utf-8
    2. import re # 正则表达式库
    3. import collections # 词频统计库
    4. import numpy as np # numpy数据处理库
    5. import jieba # 结巴分词
    6. import wordcloud # 词云展示库
    7. from PIL import Image # 图像处理库
    8. import matplotlib.pyplot as plt # 图像展示库
    9. from matplotlib import colors
    10. import csv
    11. import pandas as pd
    12. datalist = []
    13. excelFilename = 'H列' # 保存文件名称
    14. def wordFrequency():
    15. # 读取文件
    16. fn = open('ci.txt', 'rt', encoding='utf-8') # 打开文件
    17. string_data = fn.read() # 读出整个文件
    18. fn.close() # 关闭文件
    19. # 文本预处理
    20. pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"') # 定义正则表达式匹配模式
    21. string_data = re.sub(pattern, '', string_data) # 将符合模式的字符去除
    22. # 文本分词
    23. seg_list_exact = jieba.cut(string_data, cut_all=False) # 精确模式分词
    24. object_list = []
    25. remove_words = [u'的', u',', u'和', u'是', u'随着', u'对于', u'对', u'等', u'能', u'都', u'。', u' ', u'、', u'中', u'在', u'了',
    26. u'通常', u'如果', u'我们', u'需要'] # 自定义去除词库
    27. for word in seg_list_exact: # 循环读出每个分词
    28. if word not in remove_words: # 如果不在去除词库中
    29. if len(word) > 2: # 筛选关键词长度
    30. print(word, len(word))
    31. object_list.append(word) # 分词追加到列表
    32. # 词频统计
    33. word_counts = collections.Counter(object_list) # 对分词做词频统计
    34. word_counts_top = word_counts.most_common(200) # 获取前200最高频的词
    35. for words in word_counts_top:
    36. data = [words[0], words[-1]]
    37. datalist.append(data)
    38. # 建立颜色数组,可更改颜色
    39. color_list = ['#0000FF', '#CC0033', '#333333']
    40. # 调用
    41. colormap = colors.ListedColormap(color_list)
    42. # 词频展示
    43. mask = np.array(Image.open('bj.jpg')) # 定义词频背景
    44. wc = wordcloud.WordCloud(
    45. font_path='C:/Windows/Fonts/simhei.ttf', # 设置字体格式
    46. mask=mask, # 设置背景图
    47. max_words=200, # 最多显示词数
    48. max_font_size=100, # 字体最大值
    49. background_color='white',
    50. colormap=colormap,
    51. random_state=18
    52. )
    53. wc.generate_from_frequencies(word_counts) # 从字典生成词云
    54. # image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图建立颜色方案
    55. # wc.recolor(color_func=image_colors) # 将词云颜色设置为背景图方案
    56. wc.to_file(f'datafile/{excelFilename}.jpg')
    57. plt.imshow(wc) # 显示词云
    58. plt.axis('off') # 关闭坐标轴
    59. plt.show() # 显示图像
    60. def saveExcels():
    61. df = pd.DataFrame(datalist,columns=['词语','词频次数'])
    62. df.to_excel(f'datafile/{excelFilename}.xlsx')
    63. if __name__ == '__main__':
    64. wordFrequency()
    65. saveExcels()

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

  • 相关阅读:
    如何找到一个靠谱的房东:租房宝典
    为了面试阿里,熬夜肝完这份软件测试笔记后,Offer终于到手了
    算法金 | Python 中有没有所谓的 main 函数?为什么?
    全局唯一ID
    数据结构-查找
    从Oracle迁移数据到Hadoop
    O - Muddy roads
    JdbcTemplate
    [深度学习] 大模型学习8下-高性能推理引擎vLLM学习笔记
    【PAT甲级 - C++题解】1056 Mice and Rice
  • 原文地址:https://blog.csdn.net/u012874140/article/details/126647341