数据分析之词云图绘制

发布时间:2023年12月27日

试验任务概述:如下为所给CSDN博客信息表,分别汇总了'ai', 'algo', 'big-data', 'blockchain', 'hardware', 'math', 'miniprog'等7个标签的博客。对CSDN不同领域标签类别的博客内容进行词频统计,绘制词频统计图,并根据词频统计的结果绘制词云图。

数据表链接:https://download.csdn.net/download/m0_52051577/88669409?spm=1001.2014.3001.5503?

import pandas as pd
data=pd.read_csv(open('D://实训课//实训课数据csdn.csv'),sep=',') //导入数据
data  //数据预览

如图,数据信息包括class、url、title、content四个类标签,分别表示博客所属领域类别、对应链接、博文题目和博客内容。下面第一步对这些博文按类别进行分类。

session=data.loc[:,'class'].values
set(session)//对数据表的class类别列切分
def classma(i):
    class1=data.loc[data['class']==class_list[i],:]
    print(class1)
    return class1
//定义切分函数,按类别列作为索引返回每一类别对应的数据信息
class_list=['ai', 'algo', 'big-data', 'blockchain', 'hardware', 'math', 'miniprog']
# for i in range(len(class_list)):
#     classma(i)
ai=classma(0)

分类结果如下图所示:?

?导入停用词表,对所分类数据进行停用词处理。

file_path='D:/..csv'
def getStopword(file_path):
    stop_list=[line[:-1] for line in open(file_path+'/哈工大停用词表 .txt','r',encoding='UTF-8')]
    return stop_list
getStopword(file_path)
import jieba 
def preProcess(all_data,stop_list):
    xdata=all_data['content']
    result_data=list(xdata)
    result=[]
    for doc in result_data:
        doc=doc.strip()
        cut_list=jieba.lcut(doc)
        doc_result=[word for word in cut_list if word not in stop_list]
        result.append(doc_result)
    return result

# getStopword(file_path)
result1=preProcess(ai,getStopword(file_path))
print(result1)

?导入jieba库,对去除停用词后的数据进行分词处理,并返回分词后的结果。

?

后续是对分词后的词频进行统计,并计算每个分词的tf-idf值,这里引入一个tf-idf值的概念:

TF(词频)指的是一个词语在文档中出现的频率,它认为在一个文档中频繁出现的词语往往与文档的主题相关性更高。

from gensim.models.tfidfmodel import TfidfModel
from gensim import corpora
def calculate(resultx):
    dictionary=corpora.Dictionary(resultx)
    corpus=[dictionary.doc2bow(text) for text in resultx]

    tf_idf_model = TfidfModel(corpus, normalize=False)
    word_tf_tdf = list(tf_idf_model[corpus])
    print('词典:', dictionary.token2id)
    print('词频:', corpus)
    print('词的tf-idf值:', word_tf_tdf)
    return dictionary.token2id,corpus,word_tf_tdf
idic,corpus,word_tf_tdf=calculate(result1)

?

如上图,找出每个分词和与之相关联的词对应的下标。

max_pic=[]
max_fre=[]
def search(resultx,a):
    maxmum=[]
    idic,corpus,word_tf_tdf=calculate(resultx)
    for row in word_tf_tdf[a]:
        maxmum.append(row[1])
    for col in word_tf_tdf[a]:
        if col[1]==max(maxmum):
            print(max(maxmum))
            max_fre.append(max(maxmum))
            max_sig=col[0]
            max_pic.append(max_sig)
    return max_pic,max_fre
for i in range(len(word_tf_tdf)):
    search(result1,i)
print(max_pic)
print(max_fre)

对所有相关联的数对进行检索,采用特征提取方法对数据排序。并采用最大关联分析,找出每一个标签中与属性相关最大的词。?返回的是对应词的下标和对应的tf-idf值。

dictionary_s=idic
key_words=[]
for key,value in dictionary_s.items():
    if value in max_pic:
        key_words.append(key)
key_words.pop(-1)
print(key_words)

?构造关键词列表,根据之前返回的关联度最大词汇对应的下标,回到原数据表中定位,找出对应的词汇。

# 构造词频字典
dict_zip=dict(zip(key_words,max_fre))
print(dict_zip)

最后,根据词汇、词频列表绘制词云图。

# 绘制词云
from wordcloud import WordCloud
import matplotlib.pyplot as plt
def draw(y):
    my_cloud = WordCloud(
        background_color='white',  # 设置背景颜色  默认是black
        width=900, height=600,
        max_words=100,            # 词云显示的最大词语数量
        font_path='simhei.ttf',   # 设置字体  显示中文
        max_font_size=99,         # 设置字体最大值
        min_font_size=16,         # 设置子图最小值
        random_state=50           # 设置随机生成状态,即多少种配色方案
    ).generate_from_frequencies(y)

    # 显示生成的词云图片
    plt.imshow(my_cloud, interpolation='bilinear')
    # 显示设置词云图中无坐标轴
    plt.axis('off')
    plt.show()
draw(dict_zip)

?

注:以上为AI标签列对应的词云图,其他标签列词云图绘制的实现方式同此方法。就不再赘述。?

文章来源:https://blog.csdn.net/m0_52051577/article/details/135245823
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。