目 录CONTENT

文章目录

python抓取数据构建词云

米尔嘉
2022-12-05 / 0 评论 / 6 点赞 / 330 阅读 / 1,694 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-07-04,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

文件下载

词云图

词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨。

推荐几个不错的词云图工具

Tagul:https://wordart.com/
图悦:http://www.picdata.cn/picdata/
BDP个人版:https://me.bdp.cn/home.html

使用Python处理Excel数据并生成词云

1.处理数据

2.进行文本预处理,去掉标点符号

3.使用jieba进行文本分词

4.运用过滤词表优化掉常用词

puthon包安装教程参考:
https://blog.csdn.net/u013797426/article/details/120247020
https://blog.csdn.net/sanqima/article/details/50965439
https://blog.csdn.net/haoaoweitt/article/details/82414478
https://blog.csdn.net/web18484626332/article/details/125402024

SyntaxError: Non-ASCII character '\xe5' 
在python文件中报这个错,是因为python默认的编码方式是ASCII,而ASCII无法支持中文编码,因此要让python文件的编码是UTF-8。
因此需要在源文件的头部加上下面这句话即可:
# -*- coding: UTF-8 -*-

词云代码以及运行结果

包含文件
work_all.xlsx
wordcloud.py
remove_words.txt

py代码1

wordcloud.py

import pandas as  pd
import re
import collections
import jieba

from pyecharts.charts import WordCloud
from pyecharts import options as opts

'''
找出喜欢的岗位做岗位描述的分析,并做出词云图
'''
# 1.处理数据
# 读取数据
data = pd.read_excel('work_all.xlsx')
# 为了不影响原数据,所以拷贝一份
data_cy = data.copy()
# 提取指定岗位的数据
# 注意:岗位类别需要处理空字符问题,岗位类别后都有一个空格,要去除空格才能读出来
# 去除空格
A = data_cy['岗位类别'].str.strip()
# 把去除空格后的数据更改到原数据中
data_cy['岗位类别'] = A

'''
把属于数据运营、机器学习、数据科学、数据分析师、数据产品经理、商业数据分析的数据筛选出来,
并把其'岗位类别'列中的值全部替换为'数据科学'。
'''
# 把属于这些类别的提取出来放到B中
B = A.isin(['数据运营', '机器学习', '数据科学', '数据分析师', '数据产品经理', '商业数据分析'])
# 把这些岗位的类别都替换为数据科学
data_cy.loc[B, '岗位类别'] = '数据科学'

# 提取岗位类别为数据科学的数据
res = data_cy[data_cy['岗位类别'] == '数据科学']
# 更改到原数据中
data_cy = res


# 拼接所有岗位类别为数据科学的岗位描述
string_data = ''
for i in data_cy['岗位描述']:
    string_data += str(i)


# 2.文本预处理,去除各种标点符号,不然统计词频时会统计进去
# 定义正则表达式匹配模式,其中的|代表或
pattern = re.compile(u'\t|\n| |;|\.|。|:|:\.|-|:|\d|;|、|,|\)|\(|\?|"')
# 将符合模式的字符去除,re.sub代表替换,把符合pattern的替换为空
string_data = re.sub(pattern, '', string_data)

# 3.文本分词
seg_list_exact = jieba.cut(string_data, cut_all=False)  # 精确模式分词
# object_list  = list(seg_list_exact) # list()函数可以把可迭代对象转为列表

# 4.运用过滤词表优化掉常用词,比如“的”这些词,不然统计词频时会统计进去
object_list = []

# 读取过滤词表
with open('./remove_words.txt', 'r', encoding="utf-8") as fp:
    remove_words = fp.read().split()

# 循环读出每个分词
for word in seg_list_exact:
    #看每个分词是否在常用词表中或结果是否为空或\xa0不间断空白符,如果不是再追加
    if word not in remove_words and word != ' ' and word != '\xa0':
        object_list.append(word)  # 分词追加到列表

# 5.进行词频统计,使用pyecharts生成词云
# 词频统计
word_counts = collections.Counter(object_list)  # 对分词做词频统计
word_counts_top = word_counts.most_common(100)  # 获取前100最高频的词

# 绘图
# https://gallery.pyecharts.org/#/WordCloud/wordcloud_custom_mask_image
# 去pyecharts官网找模板代码复制出来修改
c = (
    WordCloud()
    .add("", word_counts_top)#根据词频最高的词
    .render("wordcloud.html")#生成页面
)

运行结果1

包含文件
zp.xlsx
ciyun.py
remove_words.txt

py代码2

ciyun.py

# -*- coding: UTF-8 -*-
import pandas as pd
import re
import collections
import jieba
import os, sys
from pyecharts.charts import WordCloud
from pyecharts import options as opts
data = pd.read_excel("zp.xlsx")
data_cy = data.copy()
A = data_cy['job'].str.strip()
data_cy['job'] = A
B = A.isin(['复合部行政助理', '礼宾员', '审计助理', '会计', '房产评估助理', '项目助理', '灯光师','市场专员','采编记者','资产评估助理','化妆师','初级审计员','直播场控','销售精英','总务人事','电商运营专员','审计助理','店员','产品管理专员','服务员','出纳','社工','中学语文老师','销售行政专员','网络游戏推广','市场运营专员','税务审计主任','数码设计师','会计','电商运营','上门摄影师','平面设计师','动画编剧','财务/会计主管','网店运营','亚马逊运营','天猫运营','电商运营专员','平面设计师','抖音运营专员','活动策划专员','策划文案','电子商务专员','网络销售','小红书内容运营'])
data_cy.loc[B, 'job'] = '会计'
res = data_cy[data_cy['job'] == '会计']
data_cy = res
string_data = ''
for i in data_cy['describe']:
    string_data += str(i)
pattern = re.compile(u'\t|\n| |;|\.|。|:|:\.|-|:|\d|;|、|,|\)|\(|\?|"')
string_data = re.sub(pattern, '', string_data)
seg_list_exact = jieba.cut(string_data, cut_all=False)
object_list = []
with open('./remove_words.txt', 'r', encoding="utf-8") as fp:
    remove_words = fp.read().split()
for word in seg_list_exact:
    if word not in remove_words and word != ' ' and word != '\xa0':
        object_list.append(word)
word_counts = collections.Counter(object_list)
word_counts_top = word_counts.most_common(100)
c = (
    WordCloud()
        .add("", word_counts_top)
        .render("wordcloud.html")
)

运行结果2

参考文章
6

评论区