1、Situation项目背景

为朝着数据分析方向发展,利用假期时间自学了Python,想利用所学Python知识独立完成一个包含数据挖掘、数据分析、数据可视化的项目,与此同时希望项目结果可以帮助我更好地规划未来数据分析的学习道路。项目目标

爬取实习僧网站上,北京地区所有“数据分析”相关岗位的信息,对爬取到的数据信息进行清洗和分析,得到“数据分析”岗位最需要的20项技能,并生成词云图。2、Task爬取数据

爬取4个维度的信息,分别为企业、岗位、薪资、JD,爬取结果存入.csv文件。数据分析

对爬取到的.csv文件中的数据进行数据清洗并分析,最终将分析结果可视化呈现。3、Action用到的Python库

requests + BeautifulSoup - 这两个库用于网络爬虫

jieba - 这个库用于清洗爬取到的JD信息

pandas - 这个库用于数据分析

csv - 这个库用于将爬取到的信息实时存入.csv文件

pyecharts - 这个库用于生成交互式的可视化数据文件程序框架

a 导入相关库

b 生成用于存储数据的.csv文件

c 爬取信息实时存入.csv文件

d 爬取结束后,对.csv文件中的'JD'列,进行关键词提取

e 对于.csv文件中'JD'列中提取出的关键词,按词频降序排列

f 用词云图展示数据分析结果遇见的问题

JD中包含太多无效关键词,如“职位”、“描述”、“城市”、“工作”、“内容”等字眼,影响数据分析结果的有效性。

所有JD信息量太大,若想将所有JD信息存到一个字符串内,再使用jieba.cut,内存不足以支撑,无法执行。

实习僧网站采取了反爬虫手段,爬取到的岗位薪资为乱码。解决方法

将JD信息转为 pd.Series类型,再使用str.contains()函数滤除无效字眼。

将爬取到的每个JD信息先jieba提取关键词,再滤除无效字眼,最后按照词频排序,取每个JD信息中的前15个有效关键词。

对实习僧网站的薪资数字用 utf-8 进行编码,找规律,找出每个阿拉伯数字对应的 utf-8编码。在爬虫过程输出薪资数据的时候,先对其用 utf-8 编码,再用replace()函数将对应数字和 utf-8编码替换,最后对薪资数据用 utf-8 解码。4、Result实际成果根据词频排序筛选数据分析最需要的20项能力词云图-数据分析最需要的20项能力(字体越大代表其权重越大)

欢迎加微信交流:rainbow484

点击返回项目列表:杨秋实:项目经历汇总​zhuanlan.zhihu.com附件:源代码

数据挖掘部分

import requests

from bs4 import BeautifulSoup

import csv

import pandas as pd

import jieba

#爬虫部分

word_filter = ['职位','描述','城市','北京','上海','广州','深圳','工作','内容','日常','其他','事务','并非','包含','介意','看清','要求','以上','岗位职责',

'能力','能够','公司','正式','机会','时间','之后','本科','以上学历','每周','出勤','至少','以上','获得','薪酬','餐补','保证','愿意','协助']

with open('job_information.csv','w',newline='',encoding='utf-8') as fb:

writer = csv.writer(fb)

writer.writerow(('enterprise','job','salary','jd_keywords'))

count = 0

for i in range(1,7):

count += 1

if count %2 == 0:

print(count)

url = f'https://www.shixiseng.com/interns?page={i}&keyword=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&type=intern&area=&months=&days=&degree=&official=&enterprise=&salary=-0&publishTime=&sortType=&city=%E5%8C%97%E4%BA%AC&internExtend='

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}

req = requests.get(url,headers = headers)

req.encoding = 'utf-8'

html = req.text

soup = BeautifulSoup(html,'lxml')

divs = soup.select('.intern-wrap.intern-item')

for div in divs:

job = div.select_one('.f-l.intern-detail__job p a').text

enterprise = div.select_one('.f-r.intern-detail__company p a')['title']

salary = div.select_one('.f-l.intern-detail__job .day.font').text.encode('utf-8')

innerurl = div.select_one('.f-l.intern-detail__job p a')['href']

innerurl_req = requests.get(innerurl,headers = headers)

innerurl_html = innerurl_req.text

innerurl_html_soup = BeautifulSoup(innerurl_html,'lxml')

jd_words = innerurl_html_soup.select_one('div.content_left .job_detail').text

jd_seg_list = list(jieba.cut(jd_words))

jd_keywords = pd.Series(jd_seg_list)

jd_keywords = jd_keywords[jd_keywords.str.len()>1]

jd_keywords = jd_keywords[~jd_keywords.str.contains('|'.join(word_filter))]

jd_keywords = jd_keywords.value_counts().sort_values(ascending=False)[:15]

jd_keywords = jd_keywords.index

salary = salary.replace(b'\xef\x92\xb2',b'0')

salary = salary.replace(b'\xef\x96\xab',b'1')

salary = salary.replace(b'\xee\xae\xb9',b'2')

salary = salary.replace(b'\xee\x89\x91',b'3')

salary = salary.replace(b'\xee\x80\x83',b'4')

salary = salary.replace(b'\xee\x88\x9e',b'5')

salary = salary.replace(b'\xee\xa7\x9b',b'8')

salary = salary.decode()

writer.writerow((enterprise,job,salary,jd_keywords))

数据分析部分

import pandas as pd

import jieba

import pyecharts as pec

from pyecharts import options as opts

from pyecharts.charts import Page, WordCloud

from pyecharts.globals import SymbolType

import openpyxl

word_filter = ['object','Index','dtype','优先','使用','进行','熟练','良好','相关','熟悉','支持','完成','具有','数据分析','经验',

'资格','具备','任职','开发','金融','行业']

job_information = pd.read_csv('job_information.csv')

jd_keywords_list = job_information['jd_keywords']

jd_keywords_str_all = ''

for keywords in jd_keywords_list:

jd_keywords_str_all += keywords + '\n'

jd_keywords_str_all = jd_keywords_str_all.strip().replace(' ','').replace('\'','').replace(',','').replace('\n','')

seg_list = list(jieba.cut(jd_keywords_str_all))

#print(seg_list)

jd_keywords_counts = pd.Series(seg_list)

jd_keywords_counts = jd_keywords_counts[jd_keywords_counts.str.len()>1]

jd_keywords_counts = jd_keywords_counts[~jd_keywords_counts.str.contains('|'.join(word_filter))]

jd_keywords_counts = jd_keywords_counts.value_counts().sort_values(ascending=False)[:20]

jd_keywords_counts_df = pd.DataFrame({

'keywords':jd_keywords_counts.index,

'counts':jd_keywords_counts.values

})

print(jd_keywords_counts_df)

jd_keywords_counts_df.to_excel('数据分析岗位最需要的20项技能.xlsx')

jd_keywords = list(jd_keywords_counts_df['keywords'])

jd_keywords_num = list(jd_keywords_counts_df['counts'])

wordcloud_list = [(jd_keywords[i],jd_keywords_num[i]) for i in range(0,20)]

wordcloud = WordCloud()

wordcloud.add("",wordcloud_list,shape='diamond',word_size_range=[20,100]).set_global_opts(title_opts=opts.TitleOpts(title="数据分析岗位最需要的20项技能"))

wordcloud.render()

python职业规划书_基于Python数据分析做职业规划相关推荐

  1. 虫师python appium自动化测试书_基于python的Appium自动化测试的坑

    真的感谢@虫师 这位来自互联网的老师,让我这个原本对代码胆怯且迷惑的人开始学习自动化测试. 一开始搜索自动化测试的时候,虫师的博客园教程都是在百度的前几位的,我就跟着虫师博客园里面的教程学习.后来学s ...

  2. 基于python的可视化分析_基于Python 的数据分析与可视化平台研究

    基于 Python 的数据分析与可视化平台研究 宋永生 ; 黄蓉美 ; 王军 [期刊名称] <现代信息科技> [年 ( 卷 ), 期] 2019(003)021 [摘要] 数据分析与可视化 ...

  3. python微信好友分析_基于python实现微信好友数据分析(简单)

    一.功能介绍 本文主要介绍利用网页端微信获取数据,实现个人微信好友数据的获取,并进行一些简单的数据分析,功能包括: 1.爬取好友列表,显示好友昵称.性别和地域和签名, 文件保存为 xlsx 格式 2. ...

  4. 基于python的旅游系统_基于python的去哪儿网旅游数据分析

    20011 基于python的去哪儿网旅游数据分析 运行视频.代码等: 链接:https://pan.baidu.com/s/1tw4Qvtcuwt7ys36M7HvLSg 提取码:1589 复制这段 ...

  5. python实现实时监控_基于 Python 的交换机实时监控系统的设计与实现

    从高校校园网运维工作实际出发,论文提出了一种基于 Python 语言+SNMP协议的网络交换机监测系统设计思路与实现方法.整个系统系统采用B/S模式,基于轻量级的web开发框架web.py实现.后端采 ...

  6. python电影推荐算法_基于Python的电影推荐算法

    原标题:基于Python的电影推荐算法 第一步:收集和清洗数据 数据链接:https://grouplens.org/datasets/movielens/ 下载文件:ml-latest-small ...

  7. python兼职平台信号处理_基于Python的数字信号处理初步

    作者:许欢 来源:EETOP 行者无疆(论坛usrname:ICNO.1) 的博客 Python 是目前的热门语言,一直觉得掌握一门编程语言对作为搞技术的来说还是很有必要的,结合工作中能用到的一些数据 ...

  8. python数据获取就业方向_基于Python的就业岗位数据获取与预处理

    林长谋 黄玮 摘要:互联网数据获取及分析是当前数据科学的一個重要部分.该文针对互联网中就业岗位数据获取与分析的过程基于Python构建了网络爬虫.并在通爬虫获取网络数据的基础上,对所获得的就业岗位数据 ...

  9. 用python做炒股软件-python程序源码_基于python的炒股软件

    股票模拟交易系统设计与实现 不但能够进行界面的设计,还可以实现各个窗口的关联,通过WPF实现和其余窗口的关联,而且WPF中的类不但能够和其中一个窗口进行关联,还可以跟许多功能操作接口,WPF在对窗口对 ...

最新文章

  1. gcc的调试调研——gdb
  2. Android 首页图片轮播
  3. [Java] 实现多线程的两种方法
  4. Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(二)
  5. 【python】Python简介及优缺点
  6. java开发app的缺点_App原生开发的优缺点有哪些
  7. 漏洞挖掘利器-Fuzz技术介绍
  8. 超级浏览器究竟是什么?
  9. android 获取全国地址,如何在android中获取国家代码(调用代码)?
  10. 昨天见到了原来飘渺水云间(浙江大学BBS站)的FLASH版主小兵甲
  11. Android默认时区大全
  12. Android 自定义相机 切换相机 参考线(辅助线) 闪光灯 缩放 自动聚焦 Demo
  13. 分布式计算原理之分布式协调与同步(1)——分布式事务
  14. 传腾讯计划出售美团全部股权,知情人士辟谣;苹果证实iOS 16要大量推送广告;Linux 6.0-rc1 发布|极客头条
  15. 科达与中航工业签署战略合作协议
  16. matlab多项式计算题目,MATLAB数据分析与多项式计算-习题答案
  17. js 混合排序(同时存在数字、字母、汉字等)
  18. Error in value[[3L]](cond) : Package ‘rhdf5‘ version 2.36.0 cannot be unloaded:
  19. 设计师一定能用上的6个,免费、可商用图片素材网站
  20. 自制导航App(包含地图、定位、自定义marker、路线制定、模拟导航等功能)

热门文章

  1. 谁能告诉我微信APP营销到底怎么做?
  2. Windows磁盘变成RAW分区不识别文件或目录损坏问题的修复
  3. First name, Middle name, Last name
  4. Unity关于选关界面的制作
  5. 做人和做事哪个是前提
  6. java实现看门狗_Watchdog看门狗分析
  7. 小游戏 (最少线段连线问题)
  8. 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
  9. 1023穷游?“穷”游
  10. Justice, grandson of interest!