项目:对招聘数据进行分析和可视化处理-技能词云

依旧在之前作业的基础上,完成岗位技能分析。将结果进行词云可视化。
效果如图。

图.png

并为后续项目分析做准备。

模块引入

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)

alt text

问题: 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)

存在的问题,部分字段在原始数据里存在“/”。在统计时会出现偏差。
alt text

再次修改

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('/') 是一个字符串方法,它的作用是将一个字符串按照指定的分隔符进行分割,并返回一个由分割后的子字符串组成的列表。
alt text

词频分析

skill_counts = Counter(all_skills)
print(skill_counts)

alt text

词云制作

以下内容,之前课程讲过。

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()

alt text

整体代码

由于较为简单。先做代码分析

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()