34.5月21日 项目:对招聘数据进行分析和可视化处理-技能词云
项目:对招聘数据进行分析和可视化处理-技能词云
依旧在之前作业的基础上,完成岗位技能分析。将结果进行词云可视化。
效果如图。

并为后续项目分析做准备。
模块引入
import pandas as pd
from collections import Counter
import ast
import matplotlib.pyplot as plt
from wordcloud import WordCloud
读取文件
df = pd.read_csv('python数据岗位招聘信息.csv')
对原始数据中的词进行处理,加入到新的all_skills中
all_skills = []
for item_list in df['技能要求'].dropna(): # 使用 dropna() 确保忽略空值
try:
for skills in item_list:
all_skills.append(skills)
except (ValueError, SyntaxError):
print(f"无法解析的技能列表: {item_list}")
print(all_skills)

问题: for skills in skillslist: 中对列表的处理出现了问题,或者说程序没有正确的认识到skillslist是一个列表,而是把skillslist识别成为了字符串。
解决方式:skillslist = ast.literal_eval(item_list)
ast.literal_eval(item_list) 将 item_list 这个字符串转换成了Python可以识别的数据结构。(列表结构)
例如,如果 item_list 是字符串 "[1, 2, 3]",那么 ast.literal_eval(item_list) 将会返回一个列表 [1, 2, 3],然后这个列表将被赋值给 skillslist。
all_skills = []
for item_list in df['技能要求'].dropna(): # 使用 dropna() 确保忽略空值
try:
skillslist = ast.literal_eval(item_list) # 修改
for skills in skillslist: # 修改
all_skills.append(skills)
except (ValueError, SyntaxError):
print(f"无法解析的技能列表: {item_list}")
print(all_skills)
存在的问题,部分字段在原始数据里存在“/”。在统计时会出现偏差。

再次修改
all_skills = []
for item_list in df['技能要求'].dropna(): # 使用 dropna() 确保忽略空值
try:
skillslist = ast.literal_eval(item_list)
for skills in skillslist:
skills = skills.split('/')
all_skills.extend(skills)
except (ValueError, SyntaxError):
print(f"无法解析的技能列表: {item_list}")
print(all_skills)
skills = skills.split('/')
split('/') 是一个字符串方法,它的作用是将一个字符串按照指定的分隔符进行分割,并返回一个由分割后的子字符串组成的列表。

词频分析
skill_counts = Counter(all_skills)
print(skill_counts)

词云制作
以下内容,之前课程讲过。
wordcloud = WordCloud(
font_path='C:\\Windows\\Fonts\\HGWT_CNKI.TTF',
width=1200,
height=800,
background_color='white'
)
wordcloud.generate_from_frequencies(skill_counts)
plt.figure(figsize=(12, 8))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off') # 去除坐标轴
plt.show()

整体代码
由于较为简单。先做代码分析
import pandas as pd
from collections import Counter
import ast
import matplotlib.pyplot as plt
from wordcloud import WordCloud
df = pd.read_csv('python数据岗位招聘信息.csv')
all_skills = []
for item_list in df['技能要求'].dropna(): # 使用 dropna() 确保忽略空值
try:
skillslist = ast.literal_eval(item_list)
for skills in skillslist:
skills = skills.split('/')
all_skills.extend(skills)
except (ValueError, SyntaxError):
print(f"无法解析的技能列表: {item_list}")
skill_counts = Counter(all_skills)
print(skill_counts)
wordcloud = WordCloud(
font_path='C:\\Windows\\Fonts\\HGWT_CNKI.TTF',
width=1200,
height=800,
background_color='white'
)
wordcloud.generate_from_frequencies(skill_counts)
plt.figure(figsize=(12, 8))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off') # 去除坐标轴
plt.show()
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 现代职校董良
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果