jieba分词结合wordcloud绘制词云图实战

词云图小项目实战

jieba分词系列以及wordcolud词云图分析
lcut:为精确模式,返回的是一个列表
cut:添加参数cut_all=False才为精确模式,返回的是一个迭代器
wordcolud为自己统计词频,并且绘制出词云图,可以加载停用词表。

jieba.cut和jieba.cut_for_search返回的是一个可迭代的generator(即迭代器),用for循环后来获取分词后的词语(unicode),jieba.lcut和jieba.lcut_for_search返回的是一个列表

项目实战代码如下

"""   jieba分词-----WordCloud  词云图"""
import jieba 
from wordcloud import WordCloud 
from PIL import Image 

"""  jieba分词只能分开词语,后面再用wordcloud自动进行编码得到词频统计的词云图 """

# 先对数据进行词频率统计

def jeiba_cut(data):
    a = []
    worddict = {}
    with open(r'path',encoding="utf-8") as f:
        stopwords = f.read().split()
    for i in data:
        words = jieba.lcut(i)               # lcut直接是精确模式,返回的是一个列表。若是用cut,还需要参数cut_all=False,返回的是一个迭代器
        words = [word for word in words if word not in stopwords]
        a.extend(words)
    for word in a :
        worddict[word] = worddict.get(word,0)+1
    return worddict

# 进行分词并通过停用词表进行过滤,顺道进行了排序
popular_words = jieba_cut(data["name"].astype("str"))
sort_popular_words = sorted(popular_words.items(),key=lambda x:x[1],reverse=True)
sorted_popular_words 

# 建立一个函数对分词之中一些无用字符进行清理

def deal_popular_words(data):
    mean_wrods = {}
    for key in data.keys():
        if len(key) > 2:
            mean_words[key]=data[key]
    return mean_words

mean_words = deal_popular_words(popular_words)
mean_words = pd.Series(mean_words).sort_values(ascending=False)     # 将字典通过series变成了一个数据框,再用head(10)查看前几行
mean_words_df_10 = mean_words_df.head(10)

#绘制一个分布图康康
plt.figure(figsize=(10,10))
plt.rcParams["font.sans-serif"] = "SimHei"
mean_words_df_10.plot(kind="bar",c="red")
plt.show()

# 结合wordcloud绘制一个词云图出来
keywords = " ".join(mean_words_df).keys()     # 本来基操是先直接切分字符串,但是此处咱采用自定义的方式,再用" "空格键吧各个词分开
with open(r'stopwords.txt',encoding='utf-8') as f:
    stopwords = f.read().split()
    
# error_bad_lines = False可以用来跳过停用词表中的错误

mask = np.array(PIL.Image.open(r'pictures.png'))
wc = WordCloud(font_path =r'c:\windows\Font\simhei.ttf',mask = mask,max_words=100,stopwords=stopwords,backgroundcolor="white",\
              width=20,height=10).generate(keywords)


plt.imshow(wc,interpolation="billnear")
plt.axis("off")
plt.show()
wc.to_file("filename.jpg")   #保存图片

使用上述代码,输入地址就可以实现一个简单的词云图了,有问题欢迎交流鸭

你可能感兴趣的:(jieba分词结合wordcloud绘制词云图实战)