当前位置:   article > 正文

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

numpy 高频词分析

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()

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/348396
推荐阅读
相关标签
  

闽ICP备14008679号