py库: jieba (中文词频统计) 、collections (字频统计)、WordCloud (词云)
先来个最简单的:
# 查找列表中出现次数最多的值 ls = [1, 2, 3, 4, 5, 6, 1, 2, 1, 2, 1, 1] ls = ["呵呵", "呵呵", "呵呵", "哈哈", "哈哈", "拉拉"] y = max(set(ls), key=ls.count) print(y)
一、字频统计: ( collections 库) 2017-10-27
这个库是python 自带的
http://www.cnblogs.com/George1994/p/7204880.html Python collections模块总结
https://www.imooc.com/video/16366 counter的视频 2018-11-26
先练习一下方法的使用: collections.Counter (这个库里只有Counter这个类比较好用)
from collections import Counter cnt = Counter() for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']: cnt[word] += 1 print(cnt.most_common()) #[('blue', 3), ('red', 2), ('green', 1)] cnt = Counter() for char in 'hellllooeooo': cnt[char] += 1 print(cnt.most_common()) #[('o', 5), ('l', 4), ('e', 2), ('h', 1)] #for key, val in cnt.most_common(): # print(key, val) 复制代码 1、随机生成100个英文字母,字频统计: 复制代码 # -*- coding: utf-8 -*- # coding=utf-8 import random import collections import string #str1 = '赵钱孙李周吴郑王' str1 = string.ascii_uppercase # 大写 ABCDEFGHIJKLMNOPQRSTUVWXYZ #str1 = string.ascii_lowercase # 小写 abcdefghijklmnopqrstuvwxyz #str1 = string.ascii_letters # 大写和小写 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ mylist = [random.choice(str1) for i in range(100)] mycount = collections.Counter(mylist) for key, val in mycount.most_common(10): # 有序 print(key, val) 复制代码 2、读取文本文件,字频统计: (统计李白981首诗中,最常出现的10个字) 复制代码 # -*- coding: utf-8 -*- # coding=utf-8 import collections # 读取文本文件,把所有的汉字拆成一个list f = open("jieba_text.txt", 'r', encoding='utf8') # 打开文件,并读取要处理的大段文字 txt1 = f.read() txt1 = txt1.replace('\n', '') # 删掉换行符 txt1 = txt1.replace(',', '') # 删掉逗号 txt1 = txt1.replace('。', '') # 删掉句号 mylist = list(txt1) mycount = collections.Counter(mylist) for key, val in mycount.most_common(10): # 有序(返回前10个) print(key, val)
一个小练习:扒取李白诗词981篇,进行词频统计:
前一阵不是有清华附小的小学生论文《大数据分析帮你进一步认识苏轼》么,其中有对苏轼的词频统计。
为了赶上小学生的水平,刚才做了个小练习,想统计一下李白的981首诗中的每个字的出现频率。代码就不放上来了。写的不太好,但效果差不多做出来了。
1、http://www.shicimingju.com/chaxun/zuozhe/1.html 这个页面有李白诗词,但是不完整,所以要进入诗词标题的链接的下一级页面,扒取完整诗词。以及翻页后的页面,再进行扒取,然后存于txt文件
2、用本页最上面的单字字频统计的代码,统计出李白诗词中,最常见的几个字的次序如下: 不人天云山风月白一何
二、字频统计: 这个没有用第三方库。 2017-10-17
# -*- coding: utf-8 -*- # coding=utf-8 def histogram(s, old_d): d = old_d for c in s: d[c] = d.get(c, 0) + 1 return d # 读取文件,拆成行 list格式的 f = open("jieba_text.txt", 'r', encoding='utf8') # 从文件中读取要处理的大段文字 lines = [] for line in f: rs = line.rstrip('\n') # 删掉换行符 lines.append(rs) print(lines) # 把行拆成单字,拆成dict格式的 myWords = dict() for i in range(len(lines)): myWords = histogram(lines[i], myWords) print(myWords) # myWords={'望': 3, '庐': 1, '山': 9, '瀑': 2, '布': 2, '日': 4, '照': 21, '香': 12, '炉': 1, '生': 2, '紫': 1, '烟': 3} a = sorted(myWords.items(), key=lambda item: item[1], reverse=True) # 按值排序 print(dict(a)) # 转化为dict
http://www.cnblogs.com/whaben/p/6495702.html python 列表排序方法sort、sorted技巧篇
http://www.cnblogs.com/dylan-wu/p/6041465.html python的sorted函数对字典按key排序和按value排序
http://blog.csdn.net/u013679490/article/details/54426324 根据字典中K/V排序
http://blog.csdn.net/sxingming/article/details/51352807 python 如何反转序列
三、中文分词: ( jieba 库 ) 这个可以处理词汇
http://www.jianshu.com/p/22cdbbeeb778 jieba的教程
# -*- coding: utf-8 -*- # coding=utf-8 import jieba import jieba.analyse # text = "故宫的著名景点包括乾清宫、太和殿和午门等。其中乾清宫非常精美,午门是紫禁城的正门,午门居中向阳。" text = '' #jieba.load_userdict("jieba_dict.txt") # 用户自定义词典 (用户可以自己在这个文本文件中,写好自定制词汇) f = open('jieba_text.txt', 'r', encoding='utf8') # 要进行分词处理的文本文件 (统统按照utf8文件去处理,省得麻烦) lines = f.readlines() for line in lines: text += line # seg_list = jieba.cut(text, cut_all=False) #精确模式(默认是精确模式) seg_list = jieba.cut(text) # 精确模式(默认是精确模式) print("[精确模式]: ", "/ ".join(seg_list)) # seg_list2 = jieba.cut(text, cut_all=True) #全模式 # print("[全模式]: ", "/ ".join(seg_list2)) # seg_list3 = jieba.cut_for_search(text) #搜索引擎模式 # print("[搜索引擎模式]: ","/ ".join(seg_list3)) tags = jieba.analyse.extract_tags(text, topK=5) print("关键词: ", " / ".join(tags))
四、词云: ( WordCloud 库 )
在安装 这个库的时候不是很顺利。所以去这个网站下载.whl文件。下载后暂时保存在c:/Python3/Scripts/wordcloud‑1.3.2‑cp36‑cp36m‑win32.whl
http://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud
python pip.exe install wordcloud‑1.3.2‑cp36‑cp36m‑win32.whl
1、例子,最简单词云:
# -*- coding: utf-8 -*- # coding=utf-8 import matplotlib.pyplot as plt from wordcloud import WordCloud import jieba txt1 = open('word.txt', 'r', encoding='utf8').read() # word.txt,随便放点中文文章 words_ls = jieba.cut(txt1, cut_all=True) words_split = " ".join(words_ls) wc = WordCloud() # 字体这里有个坑,一定要设这个参数。否则会显示一堆小方框wc.font_path="simhei.ttf" # 黑体 my_wordcloud = wc.generate(words_split) plt.imshow(my_wordcloud) plt.axis("off") plt.show() wc.to_file('zzz.png') # 保存图片文件 复制代码 2、例子,带遮罩的词云: 复制代码 # -*- coding: utf-8 -*- # coding=utf-8 import matplotlib.pyplot as plt import wordcloud import jieba txt1 = open('word.txt', 'r', encoding='utf8').read() words_ls = jieba.cut(txt1, cut_all=True) words_split = " ".join(words_ls) # 参数都可以注释掉,但必须设置font_path wc = wordcloud.WordCloud( width=800, height=600, background_color="#ffffff", # 设置背景颜色 max_words=500, # 词的最大数(默认为200) max_font_size=60, # 最大字体尺寸 min_font_size=10, # 最小字体尺寸(默认为4) colormap='bone', # string or matplotlib colormap, default="viridis" random_state=10, # 设置有多少种随机生成状态,即有多少种配色方案 mask=plt.imread("mask2.gif"), # 读取遮罩图片!! font_path='simhei.ttf' ) my_wordcloud = wc.generate(words_split) plt.imshow(my_wordcloud) plt.axis("off") plt.show() wc.to_file('zzz.png') # 保存图片文件
(参数说明)
font_path:
msyh.ttf 微软雅黑
msyhbd.ttf 微软雅黑 粗体
simsun.ttc 宋体
simhei.ttf 黑体
colormap:
autumn 从红色平滑变化到橙色,然后到黄色。
bone 具有较高的蓝色成分的灰度色图。该色图用于对灰度图添加电子的视图。
cool 包含青绿色和品红色的阴影色。从青绿色平滑变化到品红色。
copper 从黑色平滑过渡到亮铜色。
flag 包含红、白、绿和黑色。
gray 返回线性灰度色图。
hot 从黑平滑过度到红、橙色和黄色的背景色,然后到白色。
hsv 从红,变化到黄、绿、青绿、品红,返回到红。
jet 从蓝到红,中间经过青绿、黄和橙色。它是hsv色图的一个变异。
line 产生由坐标轴的ColorOrder属性产生的颜色以及灰的背景色的色图。
pink 柔和的桃红色,它提供了灰度图的深褐色调着色。
prism 重复这六种颜色:红、橙、黄、绿、蓝和紫色。
spring 包含品红和黄的阴影颜色。
summer 包含绿和黄的阴影颜色。
white 全白的单色色图。
winter 包含蓝和绿的阴影色。
http://blog.csdn.net/doiido/article/details/43675465 Python open() 函数 文件处理 (讲的是 open('zz.txt',) 函数的使用)