赞
踩
一、wordcloud:文本分析
1、导入wordcloud和数据可视化包matplotlib:
- from wordcloud import WordCloud
- import matplotlib.pyplot as plt
- import warnings
- warnings.filterwarnings("ignore")
- %matplotlib inline
- %config InlineBackend.figure_format="svg"
2、导入文本:这里以三国演义小说为例
- #读取文本
- text = open(r"C:UsersAdministratorDesktopsg.txt",encoding="UTF-8").read()
3、使用WordCloud绘图,WordCloud参数如下:
- #绘图
- #创建画板
- plt.figure(figsize=(10,8),dpi=80)
- #字体路径
- font = r"C:WindowsFontssimfang.ttf"
- #绘制词云图
- wc=WordCloud(font_path=font,width=800,height=500,scale=2,mode="RGBA",background_color=None).generate(text)
- #显示词云
- plt.imshow(wc,interpolation="bilinear")
- plt.axis("off")
- plt.savefig(r"C:UsersAdministratorDesktopsg1.png")
二、添加jieba包进行分词
1、根据文本生成词云图
jieba分词模块有三种分词模式:
jieba分词方法如下:
注意点:
1.1、导入包
- #导入jieba包
- import jieba
1.2、jieba全模式、精准模式以及搜索引擎模式案例示范。
- #案例
- seg_list = jieba.cut("小明来到杭州阿里巴巴" , cut_all=True)
- print("全模式:"+"/".join(seg_list)) #全模式
- seg_2 = jieba.cut("小明来到杭州阿里巴巴",cut_all=False)
- print("精准模式:"+"/".join(seg_2)) #精准模式
- seg_3 = jieba.cut("小明来到杭州阿里巴巴")
- print("默认模式:"+",".join(seg_3)) #默认模式
- seg_4 = jieba.cut_for_search("李华来自杭州,毕业于浙江大学,现在在日本早稻田大学深造")
- print("搜索引擎模式:"+",".join(seg_4)) #搜索引擎模式
jieba.cut()默认模式是精准模式。
1.3、读入文本
- #打开文本
- text=open(r"C:UsersAdministratorDesktopsg.txt",encoding="UTF-8").read()
jieba默认模式对文本进行分词
- #中文分词
- text = " ".join(jieba.cut(text))
- print(text[:50])
1.4、绘图
- #绘图
- #创建画板
- plt.figure(figsize=(10,8),dpi=80)
- #创建词云图
- wc=WordCloud(font_path=font,width=800,height=500,scale=2,mode="RGBA",background_color=None).generate(text)
- #生成图像
- plt.imshow(wc,interpolation="bilinear")
- plt.axis("off")
- plt.savefig(r"C:UsersAdministratorDesktopsg2.png")
对比先前看出,经过jieba.cut()分词之后,显示的词更加符合中文的词语划分习惯。
- #增加词云图形象
- #创建画板
- plt.figure(figsize=(10,8),dpi=80)
- #自定义背景图片
- mask = plt.imread(r"C:UsersAdministratorDesktoptimg.jpg")
- #生成词云图
- wc=WordCloud(mask=mask,font_path=font,width=800,height=500,scale=2,mode="RGBA",background_color=None).generate(text)#font_path=font缺少会乱码
- plt.imshow(wc,interpolation="bilinear")
- plt.axis("off")
- plt.savefig(r"C:UsersAdministratorDesktopsg3.png")
注意点:与分析英文文本不同,中文文本如果不加font_path参数,中文无法显示。
- #增加词云图形象
- #创建画板
- plt.figure(figsize=(10,8),dpi=80)
- #自定义背景图片
- mask = plt.imread(r"C:UsersAdministratorDesktoptimg.jpg")
- #生成词云图
- wc=WordCloud(mask=mask,width=800,height=500,scale=2,mode="RGBA",background_color=None).generate(text)#font_path=font缺少会乱码
- plt.imshow(wc,interpolation="bilinear")
- plt.axis("off")
- plt.savefig(r"C:UsersAdministratorDesktopsg3.png")
对于中文路径,在”C:WindowsFonts“路径下选择字体,但是直接复制字体名称过来,发现还是读入错误,这是因为字体显示的名称不一定是字体的引用名称。
解决方法:选择目标字体,右击选择属性,显示的名称才是我们目标的字体。
1.5 从自定背景图片中获取颜色
- #从图片中获取颜色
- #导入包
- from wordcloud import ImageColorGenerator
- plt.figure(figsize=(10,8),dpi=80)
- #绘图
- mask=plt.imread(r"C:UsersAdministratorDesktoptimg.jpg")
- wc=WordCloud(mask=mask,font_path=font,width=800,height=500,scale=2,mode="RGBA",background_color=None).generate(text)
- #从背景图片获取颜色
- image_color = ImageColorGenerator(mask)
- wc.recolor(color_func=image_color)
- #显示
- plt.imshow(wc,interpolation="nearest")
- plt.axis("off")
- plt.savefig(r"C:UsersAdministratorDesktopsg4.png")
2、提取关键词权重,根据词的频率生成词云图
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False,allowPOS=())
参数说明:
jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件。
2.1 导入分析包
- #导入分析包
- import jieba.analyse
2.2 读取文本
- #读取文本
- text = open(r"C:UsersAdministratorDesktopsg.txt",encoding="UTF-8").read()
2.3 生成词频
- #生成词频
- freq = jieba.analyse.extract_tags(text,topK=200,withWeight=True)
- print(freq[:5])
- #转换成字典
- freq = {i[0]:i[1] for i in freq}
- for i,(k,v) in enumerate(freq.items()) :
- print({k:v},end="")
- if i ==10:
- break
2.4 绘制词云图
- #绘图
- plt.figure(figsize=(10,8),dpi=80)
- mask=plt.imread(r"C:UsersAdministratorDesktoptimg.jpg")
- font = r"C:WindowsFontssimhei.ttf"
- #绘图
- wc=WordCloud(mask=mask,font_path=font,width=800,height=500,mode="RGBA",background_color=None).generate_from_frequencies(freq)
- plt.imshow(wc,interpolation="bilinear")
- plt.axis("off")
- plt.savefig(r"C:UsersAdministratorDesktopsg5.png")
注意点:从文本中提取词频后,直接导入生成词云图,但是报错:list object has no attribute items。需要对结果进行再次转化,改成字典类型。
转换字典类型后,生成词云图正常。转化代码:freq = {i[0]:i[1] for i in freq}。
3、实战案例:电商女士服装评论
1、导入包
- #导入数据分析包
- import pandas as pd
2、读取数据
- #读取数据
- data = pd.read_csv(r"E:dataWomens-Clothing-E-Commerce-ReviewsWomens Clothing E-Commerce Reviews.csv",dtype="object",encoding="UTF-8")
- data.head()
3、数据清洗
3.1 选取子集
- #选取子集
- reviewData=data["Review Text"]
- reviewData.head()
3.2 去重
- #去重
- reviewData=reviewData.dropna()
- reviewData.shape
4、获取文本
- #获取文本数据
- #遍历文本
- text=""
- for i in reviewData.values:
- i=i.lower().replace(".","").replace("!","").replace(",","")#去除符号
- text = text+" ".join(jieba.cut(i))
5、根据文本生成词云图
- #根据文本生成词云图
- #创建画板
- plt.figure(figsize=(10,8),dpi=80)
- #生成词云图
- wc = WordCloud(width=800,height=500,scale=2,background_color=None,mode="RGBA").generate(text)
- #显示视图
- plt.imshow(wc,interpolation="bilinear")
- plt.axis("off")
- plt.savefig(r"C:UsersAdministratorDesktopsg6.png")
正则表达式获取文本:
- #导入re包
- import re
- #获取文本
- text=""
- for i in reviewData.values:
- #正则表达式去除符号
- temp = re.compile(r",.!")
- i=temp.sub("",i)
- text = text+" ".join(jieba.cut(i))
- #绘图
- plt.figure(figsize=(10,8),dpi=80)
- mask=plt.imread(r"C:UsersAdministratorDesktoptimg1.jpg")
- wc = WordCloud(mask=mask,width=800,height=500,scale=2,background_color=None,mode="RGBA").generate(text)
- #从图片获取颜色
- image_color = ImageColorGenerator(mask)
- wc.recolor(color_func=image_color)
- #显示视图
- plt.imshow(wc,interpolation="bilinear")
- plt.axis("off")
- plt.savefig(r"C:UsersAdministratorDesktopsg7.png")
6、根据词频生成词云图
- #获取文本
- text=""
- for i in reviewData.values:
- temp = re.compile(r",.!")
- i = temp.sub("",i.lower())
- text=text+"".join(jieba.cut(i))
- #获取词频
- freq=jieba.analyse.extract_tags(text,topK=100,withWeight=True)
- print(freq[:5])
- #转换为字典
- freq = {i[0]:i[1] for i in freq}
- for i,(k,v) in enumerate(freq.items()):
- print({k:v},end="")
- if i ==10:
- break
- #绘图
- #创建画板
- plt.figure(figsize=(10,8),dpi=80)
- #自定义背景图片
- mask=plt.imread(r"C:UsersAdministratorDesktoptimg1.jpg")
- #绘制词云图
- wc=WordCloud(mask=mask,width=800,height=500,mode="RGBA",background_color=None,stopwords=("was","my","so","but")).generate_from_frequencies(freq)
- #获取照片颜色
- image_color=ImageColorGenerator(mask)
- wc.recolor(color_func=image_color)
- #显示图片
- plt.imshow(wc,interpolation="nearest")
- plt.axis("off")
- plt.savefig(r"C:UsersAdministratorDesktopsg8.png")
对比文本生成的词云图和词频生成的词云图,所获得的词还是有差别的,根据文本获得词云图更符合我们的需求。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。