python处理数据集并制作词云图

python处理数据集并制作词云图

  1. 处理数据
  2. 使用自定义词典
  3. 去掉停用词
  4. 词频统计
  5. 绘制词云图+美化

1.处理数据

这里是老师给的新闻数据集,里面有5个类别的新闻数据,我以cars这一类为例。
将csv格式的数据文件转换为txt格式,具体步骤格式转换
在这里插入图片描述
以下代码只是提示一下raw的具体内涵,完整代码最后附上。

raw = pd.read_csv("D:/download/文本挖掘/newsdata/cars_source.txt", names=['txt'], sep='aaa', encoding="GBK")
    print(len(raw))  # 查看整个cars_source.txt文档共有几行

2.使用自定义词典

由于数据集内没有给定的词典,我就自己写了一个dictwords.txt(没有涵盖所有的特定短语),将一些特定的词汇比如“道路运输”写入词典内,在分词后,“道路运输”将不会被分成“道路/运输”。
在这里插入图片描述

在这里插入图片描述

def dict_words(raw):
    dict = 'D:/download/文本挖掘/newsdata/dictwords.txt'  #自定义词典的路径
    jieba.load_userdict(dict)  # 增加词典(自己写的)
    for i in range(len(raw)):  # 分词时不是对整个文档进行操作,而是一行一行地分词,所以需要遍历每一行进行分词
        print('/'.join(jieba.cut(raw.txt[i])))   # 用“/”作为词与词的分隔符

3.去掉停用词

def dele_words(raw):
    ana.set_stop_words('D:/download/文本挖掘/newsdata/stopwords.txt')  # 添加停用词文档
    words_list = []  # 定义一个空列表
    for i in range(len(raw)):
        #print(ana.extract_tags(raw.txt[i]))
        lists = ana.extract_tags(raw.txt[i])  
        #print(lists)
        words_list.extend(lists)  # 将每一行的分词结果加入一个大列表中
    return words_list

4.词频统计

def cal_words(words_list):
    df = pd.DataFrame(words_list, columns=['word'])  # 这一列叫 word
    result =df.groupby(['word']).size()  
    freqlist = result.sort_values(ascending=False) # 降序排列
    print(freqlist[:20])  # 取出现次数最多的前20个词

在这里插入图片描述

5.词云图绘制及美化

def pic_words(words_list):
    fdist = FreqDist(words_list)  # 将列表转化为字典类型,生成完整的词条频数字典
    pic = imageio.imread('D:/pyhomework/0516/dig1/timg.jpg') # 读取背景图片(背景颜色必须为纯白色)
    pic_color = wordcloud.ImageColorGenerator(pic) # ImageColorGenerator函数将词云的颜色参数设置为根据图片颜色确定
    cloudobj = wordcloud.WordCloud(font_path = "simkai.ttf",  #这里不能为None,否则词云图全是方块
                                   height = 1000, width = 2000,
                                   mode = "RGBA",
                                   background_color = 'white',
                                   mask = pic,
                                   color_func = pic_color, # 我导入图片主色调为蓝灰色
                                  ).fit_words(fdist)  # 基于频数的绘制函数

    plt.imshow(cloudobj)
    plt.axis("off")  # 关闭坐标轴
    plt.show()
    cloudobj.to_file("D:/pyhomework/0516/dig1/pic_final.png") # 保存为高精度图形

结果图

import pandas as pd
import wordcloud
import matplotlib.pyplot as plt #绘制图片
import jieba
import jieba.analyse as ana
import imageio
from nltk import FreqDist

#使用自定义词典
def dict_words(raw):
    dict = 'D:/download/文本挖掘/newsdata/dictwords.txt'
    jieba.load_userdict(dict)  #增加词典(自己写的)
    for i in range(len(raw)):
        print('/'.join(jieba.cut(raw.txt[i])))

#停用词
def dele_words(raw):
    ana.set_stop_words('D:/download/文本挖掘/newsdata/stopwords.txt')
    words_list = []
    for i in range(len(raw)):
        #print(ana.extract_tags(raw.txt[i]))
        lists = ana.extract_tags(raw.txt[i])
        #print(lists)
        words_list.extend(lists)
    return words_list

#词频统计
def cal_words(words_list):
    df = pd.DataFrame(words_list, columns=['word'])
    result =df.groupby(['word']).size()
    #print(type(result))
    freqlist = result.sort_values(ascending=False) #降序
    print(freqlist[:20])

#绘制词云图
def pic_words(words_list):
    fdist = FreqDist(words_list)
    #pic_address = path.abspath('timg.jpg'),
    pic = imageio.imread('D:/pyhomework/0516/dig1/timg.jpg') # 读取图片
    pic_color = wordcloud.ImageColorGenerator(pic) # ImageColorGenerator函数将词云的颜色参数设置为根据图片颜色确定
    cloudobj = wordcloud.WordCloud(font_path = "simkai.ttf",
                                   height = 1000, width = 2000,
                                   mode = "RGBA",
                                   background_color = 'white',
                                   mask = pic,
                                   color_func = pic_color, #图片主色调为蓝灰色
                                  ).fit_words(fdist)

    plt.imshow(cloudobj)
    plt.axis("off")
    plt.show()
    #cloudobj.to_file("D:/pyhomework/0516/dig1/pic1.png") 保存的图片为1:20行
    cloudobj.to_file("D:/pyhomework/0516/dig1/pic_final.png")

if __name__ == '__main__':
    raw = pd.read_csv("D:/download/文本挖掘/newsdata/cars_source.txt", names=['txt'], sep='aaa', encoding="GBK")
    print(len(raw))
    dict_words(raw)
    words_list = dele_words(raw)
    cal_words(words_list)
    pic_words(words_list)
  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是用Python将系统CSV文本数据制作出词云、柱状和饼状的详细代码: 首先,需要安装必要的库,包括pandas、matplotlib、jieba和wordcloud。可以通过以下命令来安装: ``` pip install pandas matplotlib jieba wordcloud ``` 接下来,读取CSV文件并将数据存储到DataFrame中: ```python import pandas as pd df = pd.read_csv("data.csv", encoding="utf-8") ``` 其中,data.csvCSV文件文件名,需要根据实际情况进行修改。如果CSV文件的编码不是UTF-8,需要修改encoding参数。 制作词云: ```python from wordcloud import WordCloud import jieba text = ''.join(df["text"]) words = jieba.cut(text) wc = WordCloud(width=800, height=400, background_color="white", font_path="simsun.ttc") wc.generate(' '.join(words)) wc.to_file("wordcloud.png") ``` 其中,text为CSV文件中要生成词云的列名,需要根据实际情况进行修改。width和height分别为词云图像的宽度和高度,background_color为背景颜色,font_path为字体文件路径。 制作柱状: ```python import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False data = df.groupby("category")["count"].sum() data.plot(kind="bar") plt.savefig("bar.png") ``` 其中,category和count分别为CSV文件中要生成柱状的列名,需要根据实际情况进行修改。plt.rcParams用于设置字体和字符集,避免中文乱码。kind参数用于设置柱状或者其他类型的像。 制作饼状: ```python import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False data = df.groupby("category")["count"].sum() data.plot(kind="pie", autopct="%1.1f%%") plt.savefig("pie.png") ``` 同样,category和count分别为CSV文件中要生成饼状的列名。kind参数用于设置饼状或者其他类型的像。autopct用于设置饼状上显示的百分比格式。 以上代码仅供参考,需要根据实际情况进行修改。如果还有其他问题,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值