服务器上导出excel 文件扩展名与文件格式不匹配 本地正常_智联Python相关职位的数据分析及可视化-Excel篇...

碎碎念:

数据分析、数据挖掘、机器学习、神经网络、深度学习,这些五花八门的名词貌似逼格满满, 初入门的新手(譬如我就是)很容易被高大上的词汇吸引但又不知如何静下心来入门和学习、晕头转向。 此篇是利用Excel进行智联招聘职位分析的第一篇,让我门看看如何分析,能分析出哪些有意思的东西。 还有一篇姊妹篇,用同样的数据进行分析、不过用的是Python中的Pandas和Matplotlib而不是Excel。敬请期待!


数据来源:

Python爬虫爬取了智联招聘关键词:【Python】、全国30个主要城市的搜索结果。数据存储到本地MySql和MongoDB服务器上。从服务器上导出文件、用Python的Pandas库简单处理后保存为本地excel。A.使用的软件:Excel-2011,Python-3.6,Mysql-5.7(macOS系统)

B.前期准备:

将Mysql里的数据导出到本地JSON文件,用Python的Pandas库读取JSON文件并进行简单的格式处理之后用to_excel() 方法保存至本地.xls的Excel文件。

#在终端输入ipython --pylab进入ipython的界面import numpy as npimport pandas as pdimport matplotlib.pyplot as pltdf = pd.read_json('/Users/zhaoluyang/Desktop/Python_全国JSON.json')df.info()
fe3157fb1185e4766a01dbd3c779b7f8.png

通过http://df.info()可以看见:df是一个pandas里的DataFrame格式的文件,类似于excel中的表格,本质是一个方便处理的二维数组。 整个df中有18326行数据、15列,其中ZL_Job_id一列是mysql中我添加的id标记。

Int64Index: 18326 entries, 0 to 18325表示pandas给我的数据自动添加了int64类型的索引,从0-18325. 再通过df[['ZL_Job_id','公司名称']].head()看看前5行的信息(因为15列不方便阅读,所以只看前两列的)

98f0c0d376891e38d71ea5c6050aa581.png

可以看到ZL_Job_id序号很混乱,而且左边自动添加的索引不匹配。那么现在问题来了。我需要给 ZL_Job_id一列重新递增排序,然后用此列替换掉左边的默认索引。

我就直接摆代码了:

df.index = df['ZL_Job_id']del(df['ZL_Job_id'])df1 = df.sort_index()df = df1

好了,现在可以导出格式比较规整的数据了。

df.to_excel('/Users/zhaoluyang/Desktop/Python_nation.xls')

打开文件看看导出的是否正确?看了一下,应该是没问题的!

30ed5c899eb2c36e3e45c382ea25654f.png

前期准备:

1.分析的目的:

A.希望通过对全国30个主要城市招聘Python相关的职位,来看看最近很火的Python到底待遇如何?工资水平怎么样? 对工作经验和学历有什么要求?需要掌握的岗位技能有哪些?各个城市比较下、平均下?B.其实想怎么分析,完全是随个人喜好的,譬如还可以分析下全国所有的公司、看看哪个招聘的数量最多? (还可以画个逼格满满的基于地理位置的密度图)分析下公司给开出的平均薪水,看看哪个公司最慷慨? 将岗位职责的描述用python分词处理、再统计词频看看哪些名称经常出现、再生成个词云图玩玩?C.本次分析主要通过Excel,大概的过程讲解和流程梳理,最后通过Excel里的图表进行数据呈现。

2.数据清洗:

看着excel,有没有发现全是文字?包括职位月薪也是很不规则的?6000-8000元/月、面议..我想要的是纯粹的数字如:6000、8000。工作地点也是五花八门的,明明都是苏州,还分了苏州-工业园区,苏州-姑苏区,这样子待会我统计城市的时候是不是很不友好?! 哎,都是坑!为此,需要做数据清洗的工作:A.将【职位月薪】列细化,新增3列【bottom】【top】【平均月薪】。【bottom】表示最低月薪,【top】表示最高月薪,【平均月薪】则为中间值。譬如原来职位月薪是6000-8000元/月的,bottmm=6000,top=8000,平均月薪=7000;原来职位月薪是面议的,bottom=top=平均月薪=面议。B.将【工作地点】列细化,新增一列【工作城市】。 譬如不论工作地点是苏州还是苏州-工业园区,苏州-姑苏区,【工作城市】一列统统=苏州。

要想清洗以上数据、用excel的公式还是比较方便的,我单独把【职位月薪】和【工作地点】两列拿了出来,构造了新的测试表如下:

542e50b0f37c09e9bbf17859e46ef145.png

“平均月薪”列很好计算,主要bottom和top都完成以后直接(top+bottom)/2就好,暂时忽略此列,让我们看看怎么得到【bottom】列?如果【职位月薪】=面议,那么bottom也=面议,否则bottom的值在“-”的前半部分,好了,一个嵌套的IF函数就可以解决。让我们在C3单元格写如下的表达式:

【bottom】:

=IF(A3="面议";"面议";LEFT(A3;FIND("-";A3;1)-1))

函数表达式的语法和对应解释:

IF(表达式;返回结果a;返回结果b);

如果表达式成立,则返回结果a,否则返回结果b。

LEFT(text;字符个数num);

返回一段text文本中,从左起,指定个数的字符。

譬如text=“数据分析工程师”LEFT(text;4)的结果:“数据分析”

FIND(text;目标text;起始位数)

查找一段text在目标文本text中的起始位置。

譬如text=“工资”,目标text=“数据分析工程师的工资有多少”,FIND(text;目标text;5)

从目标text字符串中的第5位开始查找,查找“工资”在目标text出现的位置,结果:9.

让我们回到表达式IF(A3="面议";"面议";LEFT(A3;FIND("-";A3;1)-1)),表达式的自然语言大意是:如果表达式A3="面议"成立,那么返回结果a,对应的就是字符“面议”;不成立,则返回结果b。结果b=表达式LEFT(A3;FIND("-";A3;1)-1),可以返回A3单元格中文本从左起到第【FIND("-";A3;1)-1】位的字符,FIND("-";A3;1)就是查找“-”字符在A3中文本位置的数值,减1表示前一位。

写了这么多感觉很啰嗦,反而容易让人看晕,所以就不详细解释各个公式的用法了!其实很简单,用到的时候自己在excel里试试,百度一下各个函数具体的用法,练两次就会用了!!!

【top】列的公式:

=IF(A3="面议";"面议";MID(A3;FIND("-";A3;1)+1;LEN(A3)-LEN(B3)-4))

【平均月薪】列的公式:

=IF(A3="面议";"面议";(B3+C3)/2)

【工作地点】列的公式:

=IF(ISERROR(FIND("-";E3;1));E3;LEFT(E3;FIND("-";E3;1)-1))

最后,将excel公式套到原文件中,构造出可用的数据,至此数据清洗的工作暂时告一段落了!

分析过程和结果:

打开Excel表,除了具体的公司和职位名称以外,我们还比较关心几个关键词:平均月薪、工作经验、工作城市、最低学历和岗位职责描述,这里岗位职责描述以后会用python分词做词云图,所以目前筛选出【平均月薪】、【工作经验】、【工作城市】、【最低学历】这四个标签,这些标签可以两两组合产生各种数据。譬如我想知道各个城市的招聘数量分布情况,会不会大部分的工作机会都集中在北上广深?是不是北上广深的平均工资也高于其他城市?我想知道Python这个关键词的18000多条招聘数据中对学历的要求和对工作经验的要求,以及它们分别占比多少?我还想知道平均月薪和工作经验的关系?最低学历和平均月薪的关系?---------好,让我们一个个来。

1.各个城市职位数量及分布

根据猜想北上广深杭一定占据了Pyhton这个关键词下大部分的工作机会,会不会符合28定律?20%的城市占据了80%的岗位?有可能!用Eecel数据透视表筛选出【工作城市】作为行标签、【职位链接】为计数字段,然后行标签中将无关的杂项城市和found no element字段删除,筛选出有效职位链接18170条。

用柱形图和饼图作图:

56eeb69ca7af93d435ad5b4cf00f74f7.png
71dc3c7920e6f4fc4eb0ec7db65af227.png

可见果然Python这个关键词下的职位,北、上、深、杭、广占据了不小的比重!这5个城市占据了全国68%的职位数量!令人意外的是北京的工作机会领先第二名上海不少,果然是帝都!杭州表现亮眼,超越了广州,这个和阿里巴巴对杭州互联网文化的贡献应该有很大关系!北上广深航+成都、南京、郑州,这8个城市占据了中国80%的工作机会!剩下的22个城市合起来只占据了20%

2.工作经验-职位数量及分布

Python虽然是一名比较老的语言,但是在人们的印象中火起来也就最近几年,Python相关的工作对于【工作经验】是怎样要求的呢?让我们来看看!数据筛选的时候过滤掉了一些很少量的标签譬如“5年以上”,“2年以上”,“1-2年”,“1年以上”等,这些标签下职位的数量都在10以内,不太具备统计意义,筛选后共计18215个职位。

456ca7be437a461f8bbd02fc139389e6.png
c31d505b14883b6eec41f0c7374c821b.png

筛选字段数据透视以后总共得到18215条职位。从直方图里可以明显看出工作机会集中与“不限”、1-3年、3-5年,看来即使是初入门者,大家的机会也还是有不少的!其中“不限”占比34%,1-3年占比27%,再加上1年以下、无经验的,汇总可发现工作经验要求3年以内的占比64%!果不其然!

3.工作经验-平均月薪

这个嘛,大家闭着眼都能想到!肯定是工作经验越久的拿钱越多了!再猜猜?无经验的和5-10年经验的收入差距有多大?这个,嘿嘿就不好猜了!!

c820645da1f196d5d5c808b0d19bcd95.png

由于样本数量原因“1年以下”、“3年以上”、“10年以上”的数据量较小,可能不那么准确,看看就好!我们看到1-3年工作经验的平均月薪是11831,还不错!但是“1年以下”,“无经验”的平均月薪就没那么好看了!综合一下平均的月薪为14122元!10年以上工作经验的平均月薪达到了恐怖的34891元,是无经验5883的5.9倍!

4.工作城市-平均月薪

对了,刚才说到北上广深占据了全国大部分的工作机会,那么北上广深的平均月薪如何呢?会不会也碾压小城市?让我们来看看!

30c6802573ed5ceb30b889ccb2a01541.png

果然,北上广深杭不仅工作机会多,而且平均月薪也是领先全国的!北京表现抢眼平均月薪达到17096!全国平均月薪达到了14126元!

5.学历-职位数量

由于样本数量的关系,筛选的时候排除了学历为:高中、中专、高职等等标签,并不是我看不起高中生哈!总共得到18068个有效职位。

6adf85bbbb05a1b9d885fccfbf86876d.png

可见【本科】独占鳌头,占据了55%的市场!【不限】和【大专】也合计占比38%不容小觑!看起来,只要技术过硬,学历从来都不是问题!!!作为对比【硕士】占比6%,【博士】更是少到只有1%,果然稀缺到百里挑一!

6.学历-平均月薪

看看学历和平均月薪的关系:

f8bcf224066d52c16ec9cbc0b0dcdad3.png

平均月薪14139元,可以看到学历越高果然工资越高,博士级别的更是碾压,达到了29563元。平均月薪最低的【大专】也超过了10000元!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值