2020-02-20 11:33:31 yuanziok 阅读数 1271
  • Python玩转大数据--105精讲视频

    该课程采用时下后的编程语言Python讲解,囊括了当前火的大数据技术Spark/Hadoop/Hive知识,学习环境是基于Docker搭建的5个容器。通过这门课程不仅可以学到Spark/Hadoop/Hive大数据知识,还可以学到当下后的云计算技术Docker. 任务作业: 很多人都想入门机器学习和人工智能,挑战高薪!殊不知人工智能和机器学习的基础是数据及数学,特别是在大数据时代,90%以上的公司不单单是招聘算法工程师,到猎聘Boss直聘上查找算法岗位,查看其招聘条件往往都需要熟练使用大数据平台。这门课程涵盖Docker云计算容器技术,要求学员学完本门课程能够使用Docker容器部署4个容器的Spark集群并能用学到的Docker技术制作一个微服务镜像并对外提供服务;本课程全面讲解了Spark原理及接口,要求学员学完本课程能用网络爬虫爬取全国各地的房价数据,并用Spark编写mapreduce程序分析房价分布情况;本课程涉及分布式机器学习SparkML,要求学员学完本课程,能用SVR,LinearRegreesion,多层感知机算法,决策树回归算法等算法进行房价预测。 人人都想入门人工智能,殊不知人工智能的入门准则是基础的算法和数据处理的能力,学完本课程希望人人拿高薪! (注意: 作业需写在CSDN博客中,请把作业链接贴在评论区,老师会定期逐个批改~~)

    963 人正在学习 去看看 张敏

这两年的大数据热潮带火了数据分析这个职业,很多人想转行干数据分析,但是又不知道现在这个行业的求职环境和前景如何,动了心却不敢贸然行动。

前两天有个干运营的妹子找我聊天,也是问我数据分析岗位前景的问题,看在妹子长得实在好看的份上,我花了一晚上时间,去智联招聘上面爬了一下数据分析岗位的招聘数据,对数据分析岗位的薪水,需求情况,以及要求的工作年限做了个分析。

python数据爬取我就不多说了,可以参考网上的代码,我一共爬了5000条数据

拿到数据后,选择工具进行数据分析,一提到分析工具,很多人都会想到用Excel,我刚入行的时候也是“Excel打遍天下”,但Excel数据清洗和计算效率低下,需要进行大量重复性、低附加值的人工操作,而且要做好看的图表得花很多时间研究功能,遇到大数据量就卡的不行。后来我了解到了自助分析工具FineBI,从此放弃了Excel,这篇我就用FineBI来给大家展示一个完整的分析过程:

数据分析的步骤:

1、提出问题——明确数据分析目的

2、理解数据——理解数据列名的意义

3、数据清洗——统一格式内容

4、构建模型——思考用什么样的表现形式把数据呈现出来

5、数据可视化——把数据转化成图

提出问题

首先要明确这次数据分析的目的是什么?也就是为了解决什么问题?(提出的问题要能用很明确的指标和数字来衡量,切勿模棱两可)

提出问题:
1、在哪些城市找到数据分析师工作的机会比较大?
2、数据分析师的薪水如何?
3、根据工作经验的不同,薪酬是怎样变化的?

理解数据

接下来要理解表格中的各个字段(列名)表示什么意思:

 

Python+BI分析5000条招聘数据,原来数据分析工作在这儿最好找

 

城市:用于比较不同城市对数据分析师的需求如何

职位所属:分析以后的工作岗位

职位ID:表示职位的唯一表示,也就是每一行数据的唯一标识------用于去掉重复ID

薪水:比较不同城市、和所属领域的薪水区别

工作年限:从时间轴上对比薪资涨幅

数据准备

下载安装好FineBI后,链接数据。FineBI可以直接和数据库进行对接,实时更新数据,以往用excel统计数据的时候,一旦数据需要更新,比如做了8月份的财务报表,到了9月份时,就需要再次花费人力更新数据,十分麻烦,用FineBI就很方便。除此以外,FineBI还提供业务包功能,基于我们的分析主题新建一个业务包,把我本次分析需要用到的数据表存放在业务包里,方便查找。

然后将数据表添加到业务包中,数据表添加支持数据库表,sql数据表,excel数据表,还有自助数据集中的表,这里我把爬来的招聘数据Excel表添加到业务包中

 

Python+BI分析5000条招聘数据,原来数据分析工作在这儿最好找

 

然后将数据表添加到业务包中,数据表添加支持数据库表,sql数据表,excel数据表,还有自助数据集中的表,这里我把爬来的招聘数据Excel表添加到业务包中。

 

Python+BI分析5000条招聘数据,原来数据分析工作在这儿最好找

 

数据清洗加工

数据准备好了,下一步就是对数据进行清洗加工,去掉重复、无效的数据,拿到我们想到的数据,FineBI的处理过程十分方便,自助数据集可以对数据进行求和、平均、排序等一系列的运算

1、选择子集

业务包中添加自助数据集,只选择对数据分析有意义的字段,无意义的字段不勾选,也就是在Excel里面隐藏列。这里我们隐藏公司ID和公司全名,保留职位ID和公司简称还有薪水数据,数据实时预览,

 

Python+BI分析5000条招聘数据,原来数据分析工作在这儿最好找

 

2、脏数据清洗

浏览了以下,发现有几条记录中城市数据缺失,我们直接添加过滤条件,过滤掉空值和异常值

 

Python+BI分析5000条招聘数据,原来数据分析工作在这儿最好找

 

 

3、薪水上下限分割:

数据集中,因为薪水是以xxK-xxk的文本形式进行存储的,我需要用FineBI新增公式列(类似excel函数)将这些字符进行分割,方便面对薪水进行分析

薪水下限(数值):left( indexofarray ( split (薪水,"-") ,1),find( "K",INDEXOFARRAY( split(薪水,"-") ,1))-1)

薪水上限(含K字符):right ( indexofarray( split(薪水,"-") ,2),len(薪水)- find("K",indexofarray(split(薪水,"-"),2 ) ) )

薪水上限(数值):left((薪水上限(含K字符) ,find"k",薪水上限(含K字符))-1 )

这样就得到每个岗位的数值格式的薪水区间了:

 

Python+BI分析5000条招聘数据,原来数据分析工作在这儿最好找

 

 

4、岗位平均薪水计算

知道每个岗位的数值格式的薪水区间,我们还可以计算以下每个岗位的平均薪水,新增列:平均薪水=(薪水下限+薪水上限)/2,即可得到每个岗位的平均薪水。

 

Python+BI分析5000条招聘数据,原来数据分析工作在这儿最好找

 

数据可视化分析

数据清洗加工完毕,接下来就是数据可视化分析阶段了,用Finebi做数据可视化十分的简单,拖拖拽拽就可以自动生成图表,而在Excel里,要想作出美观的可视化,就肯定要学会数据透视表,操作过程也十分的繁杂。下面我用Finebi来展示以下数据可视化分析的过程:

1、我们先来看看在哪些城市找到数据分析师工作的机会比较大?

新建组件,将城市拖入横轴,记录数拖入纵轴,并将工作年限拖入颜色,图表就自动生成了

 

Python+BI分析5000条招聘数据,原来数据分析工作在这儿最好找

 

从表中可以看出,在北京数据分析的岗位最多,往后是上海、深圳、杭州、广州;按工作年限要求来看,3-5年的需求量最大,其次是1-3年,这说明数据分析对年轻人需求将更多。

2、看完了数据分析岗位在各城市的需求情况,我们再来看看数据分析师的薪水如何?

新建组件,将城市拖入横轴,平均薪水拖入纵轴,平均薪水进行二次计算,选择求平均值

 

Python+BI分析5000条招聘数据,原来数据分析工作在这儿最好找

 

从上面的结果可以看出,北京的数据分析师平均薪水最高,其次是深圳,上海,杭州。

3、根据工作经验的不同,薪酬是怎样变化的?

以工作年限要求行横轴,平均薪水为纵轴,分析工作年限与平均薪水的关系

 

Python+BI分析5000条招聘数据,原来数据分析工作在这儿最好找

 

从上面的分析结果可以看出,随着工作经验的增长,数据分析师的薪酬也在不断增加。

综合上面三个分析结果,我整理出来以下结论分享给了问我问题的妹子:

1)数据分析这一岗位,有大量的工作机会集中在北上广深以及新一线城市,如果将来去这些城市找工作,可以提高求职成功的条件概率。

2)从待遇上看,数据分析师留在北京,深圳发展是个不错的选择,其次是上海。

3)数据分析是个年轻的职业方向,大量的工作经验需求集中在1-5年。对于数据分析师来说,5年似乎是个瓶颈期,如果在5年之内没有提升自己的能力,大概以后的竞争压力会比较大。

4)随着经验的提升,数据分析师的薪酬也在不断提高,10年以上工作经验的人,能获得相当丰厚的薪酬。

FineBI个人版永久免费,感兴趣的朋友可以私信回复“数据分析”获取免费下载地址!

2018-07-18 22:47:50 qq_41199755 阅读数 1698
  • Python玩转大数据--105精讲视频

    该课程采用时下后的编程语言Python讲解,囊括了当前火的大数据技术Spark/Hadoop/Hive知识,学习环境是基于Docker搭建的5个容器。通过这门课程不仅可以学到Spark/Hadoop/Hive大数据知识,还可以学到当下后的云计算技术Docker. 任务作业: 很多人都想入门机器学习和人工智能,挑战高薪!殊不知人工智能和机器学习的基础是数据及数学,特别是在大数据时代,90%以上的公司不单单是招聘算法工程师,到猎聘Boss直聘上查找算法岗位,查看其招聘条件往往都需要熟练使用大数据平台。这门课程涵盖Docker云计算容器技术,要求学员学完本门课程能够使用Docker容器部署4个容器的Spark集群并能用学到的Docker技术制作一个微服务镜像并对外提供服务;本课程全面讲解了Spark原理及接口,要求学员学完本课程能用网络爬虫爬取全国各地的房价数据,并用Spark编写mapreduce程序分析房价分布情况;本课程涉及分布式机器学习SparkML,要求学员学完本课程,能用SVR,LinearRegreesion,多层感知机算法,决策树回归算法等算法进行房价预测。 人人都想入门人工智能,殊不知人工智能的入门准则是基础的算法和数据处理的能力,学完本课程希望人人拿高薪! (注意: 作业需写在CSDN博客中,请把作业链接贴在评论区,老师会定期逐个批改~~)

    963 人正在学习 去看看 张敏

1.待分析的数据

是从智联招聘平台上手动爬取的python数据分析职位的相关信息,表的关键字分别为“薪金”、“学历”、“经验”。为后续数据分析做准备。数据部分截图,所示

智联招聘平台爬取‘python数据分析’职位,记录总共有500多条,其中包括一小部分重复发布的记录。考虑到数据量本身比较小,在此不对重复数据进行筛选。对关键字“学历”、“经验”,分别进行统计,发现其对应频率分别如下:

发现学历一栏“不限”和“中专”相对比较少,打印出内容,发现学历为“不限”的工资与学历“本科”比较接近,“中专”工资与“大专”比较接近,并无多大区别,因此修改dataframe中,将”不限”修改为“本科”,“中专”修改为“大专”。调用pandas的replace()函数

details.replace({'education': '不限'}, '本科', inplace=True)
details.replace({'education': '中专'}, '大专', inplace=True)

details为原始数据表。注意,如果不想建立dataframe副本,可以设置inplace=True,直接修改原始dataframe.

同样道理,“无经验”,”1年以下“的工资和经验"不限”接近,同样可以合并。

details.replace({'experience': '无经验'}, '不限', inplace=True)
# 可以这样做,因为不影响数据使用
details.replace({'experience': '1年以下'}, '不限', inplace=True)

“10年以上”,在本记录中只有一条数据,而且工资与其他差别很大,若将其并入“5-10”年,会直接拉高平均记录值,因此将其舍弃。

2.数据处理。

数据处理主要是分离将工资一栏分离得到,最低工资,最高工资,并分别将最低工资平均值,最高工资平均值,添加到学历,经验要求相同,工资为“面议”。为后续进行工资与学历,经验的关系做准备。

先把同等学历,经验要求的数据分开,代码如下:

# data_whole 是根据学历,经验筛选出的数据

# data_salary则是给出实际工资的数据

# data_negia是工资为“面议”的数据

data_whole = data[(data['experience'] == experience) & (data['education'] == education)]
data_salary = data_whole[~ data_whole['salary'].isin(['面议'])]
data_negia = data_whole[data_whole['salary'].isin(['面议'])]

这里在爬取数据时有一点需要注意的地方,我们在爬取数据时,往往需要用到python自带的一个小函数strip(),用于去掉字符串首尾的空格或者换行符,注意只能是首尾,不可以去除字符串中间空格。str.strip(). 原因是,我在抓取工资时,“面议“后面跟着一个空格,也就是我抓取的数据是”面议 ”,而不是"面议”。因此,我在判断isin(["面议“])

以下代码应根据具体爬取的数据分类讨论,我这里的数据,同一组条件,一定会出现给出工资的记录,但是不一定会出现工资为"面议”的记录,因此判断逻辑如下:

if len(data_salary) > 0:
    data_salary.reset_index(drop=True, inplace=True)
    low_salary, high_salary = split_salary(data_salary['salary'].apply(get_salary))
    data_salary.insert(3, 'low_salary', low_salary)
    data_salary.insert(4, 'high_salary', high_salary)
    salary = data_salary.drop('salary', axis=1)
    # 如果面议表中有数据
    if len(data_negia) > 0 :
        data_negia.reset_index(drop=True, inplace=True)
        data_negia.insert(3, 'low_salary', round(low_salary.mean()))
        data_negia.insert(4, 'high_salary', round(high_salary.mean()))
        salary = pd.concat([data_salary, data_negia], axis=0, ignore_index=True)
        salary.drop('salary', inplace=True, axis=1)

重要:data_salary.reset_index(drop=True, inplace=True)这句代码很重要,如果不重新对data_salary()索引进行排序,data_salary是从data_whole分离得到,索引并不会从0重新分布,而是保留data_whole的索引。如果不重新排列索引,在将最低工资,最高工资新插入data_salary,因为最低(高)工资的索引是从0开始,与data_salary索引不一致,因此会插入失败。个人理解,dataframe.insert()必须两者索引严格保持一致才可以插入列成功。

# split_salary()函数,是分别得到最低工资,最高工资

 # get_salary()是获取具体的最低工资,最高工资金额。代码如下:

def get_salary(value):
    index_sep = value.find('-')
    index_end = value.find('元')
    return int(value[0:index_sep]), int(value[index_sep+1:index_end])
ef split_salary(tuple_list):
    try:
        if len(tuple_list) > 0:
            low_list = []
            high_list = []
            for tup in tuple_list:
                low = tup[0]
                high = tup[1]
                low_list.append(low)
                high_list.append(high)
        return pd.Series(low_list), pd.Series(high_list)
    except Exception:
        print('分离得到最低最高公资时出错')

3.完整代码

import pandas as pd

def read_csv(filename):
    details = pd.read_csv(filename, sep=',', encoding='gb18030')
    details.replace({'experience': '无经验'}, '不限', inplace=True)
    # 可以这样做,因为不影响数据使用
    details.replace({'experience': '1年以下'}, '不限', inplace=True)
    # 已经查看数据,并无区别
    details.replace({'education': '不限'}, '本科', inplace=True)
    details.replace({'education': '中专'}, '大专', inplace=True)
    # 3-5年都有面议
    salart_3to5 = pd.concat([handle_no_salary(details, '3-5年', '本科'), handle_no_salary(details, '3-5年', '硕士'),
                             handle_no_salary(details, '3-5年', '大专')], axis=0,ignore_index=True)
    # 经验不限的无面议
    salart_noexper = pd.concat([handle_no_salary(details, '不限', '本科'), handle_no_salary(details, '不限', '硕士'),
                                handle_no_salary(details, '不限', '大专')], axis=0, ignore_index=True)

    # 5-10年,没有硕士
    salary_5to10 = handle_no_salary(details, '5-10年', '本科')

    # 1-3年,都有面议
    salary_1to3 = pd.concat([handle_no_salary(details, '1-3年', '本科'), handle_no_salary(details, '1-3年', '硕士'),
                             handle_no_salary(details, '1-3年', '大专')], axis=0,ignore_index=True)

    salary_all = pd.concat([salart_3to5, salart_noexper, salary_5to10, salary_1to3], axis=0, ignore_index=True)
    print(len(salary_all))
    # 把最低,最高公资填进去,并且把平均工资填进面议一栏


def get_salary(value):
    index_sep = value.find('-')
    index_end = value.find('元')
    return int(value[0:index_sep]), int(value[index_sep+1:index_end])


def split_salary(tuple_list):
    try:
        if len(tuple_list) > 0:
            low_list = []
            high_list = []
            for tup in tuple_list:
                low = tup[0]
                high = tup[1]
                low_list.append(low)
                high_list.append(high)
        return pd.Series(low_list), pd.Series(high_list)
    except Exception:
        print('分离得到最低最高公资时出错')


def handle_no_salary(data, experience, education):
    data_whole = data[(data['experience'] == experience) & (data['education'] == education)]
    # 剔除面议的工资,填进去
    data_salary = data_whole[~ data_whole['salary'].isin(['面议'])]
    data_negia = data_whole[data_whole['salary'].isin(['面议'])]
    if len(data_salary) > 0:
        data_salary.reset_index(drop=True, inplace=True)
        low_salary, high_salary = split_salary(data_salary['salary'].apply(get_salary))
        data_salary.insert(3, 'low_salary', low_salary)
        data_salary.insert(4, 'high_salary', high_salary)
        salary = data_salary.drop('salary', axis=1)
        # 如果面议表中有数据
        if len(data_negia) > 0 :
            data_negia.reset_index(drop=True, inplace=True)
            data_negia.insert(3, 'low_salary', round(low_salary.mean()))
            data_negia.insert(4, 'high_salary', round(high_salary.mean()))
            salary = pd.concat([data_salary, data_negia], axis=0, ignore_index=True)
            salary.drop('salary', inplace=True, axis=1)
    # axis = 0, 按照列对齐,ignore_index=True, 忽略两列表之前的索引,重新设置从0开始的索引
    # 在某些函数,必须指定axis, 否则就会找不到一些索引而报错
        print(experience, len(data_whole), len(data_salary), len(data_negia), len(salary))
        return salary

if __name__ == '__main__':
    read_csv("relation.csv")

4.我是数据分析小白,入手简单项目,围绕项目学习知识,是编程的最有效的途径。会遇到各种各样的问题,比如,因为事先不知道数据的分布特征,“本科”,“硕士”,“不限”,“中专”,”大专“,只理所当然考虑了”本科“,”硕士“这两种情况。因此,在进行数据处理前,最好利用value_counts()函数,看一下,每一列不同取值的大概分布。第一篇,内容估计有点乱,不过也算是往前迈了一大步。

2019-05-14 20:49:54 xiaohuimary 阅读数 160
  • Python玩转大数据--105精讲视频

    该课程采用时下后的编程语言Python讲解,囊括了当前火的大数据技术Spark/Hadoop/Hive知识,学习环境是基于Docker搭建的5个容器。通过这门课程不仅可以学到Spark/Hadoop/Hive大数据知识,还可以学到当下后的云计算技术Docker. 任务作业: 很多人都想入门机器学习和人工智能,挑战高薪!殊不知人工智能和机器学习的基础是数据及数学,特别是在大数据时代,90%以上的公司不单单是招聘算法工程师,到猎聘Boss直聘上查找算法岗位,查看其招聘条件往往都需要熟练使用大数据平台。这门课程涵盖Docker云计算容器技术,要求学员学完本门课程能够使用Docker容器部署4个容器的Spark集群并能用学到的Docker技术制作一个微服务镜像并对外提供服务;本课程全面讲解了Spark原理及接口,要求学员学完本课程能用网络爬虫爬取全国各地的房价数据,并用Spark编写mapreduce程序分析房价分布情况;本课程涉及分布式机器学习SparkML,要求学员学完本课程,能用SVR,LinearRegreesion,多层感知机算法,决策树回归算法等算法进行房价预测。 人人都想入门人工智能,殊不知人工智能的入门准则是基础的算法和数据处理的能力,学完本课程希望人人拿高薪! (注意: 作业需写在CSDN博客中,请把作业链接贴在评论区,老师会定期逐个批改~~)

    963 人正在学习 去看看 张敏

python数据分析

python数据分析是目前python最火的方向之一,为了解目前市场对该职位的需求,我们爬取了拉钩上对pythons数据分析的招聘信息。

环境

系统:windows7

python版本:3.7.1

爬虫分析

1.谷歌浏览器打开拉钩官网https://www.lagou.com/,搜索框中输入要查询的职位,右键点击检查,找到名为position
Ajax.json?needAddtionalResult=false的链接,这就是我们要重点分析的地方。

图片
抱着侥幸心理我们将链接https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false输入浏览器中,
发现提示:{“status”:false,“msg”:“您操作太频繁,请稍后再访问”,“clientIp”:“113.57.183.6”,“state”:2402}
可见想要获取信息不是那么简单。

2.分析报文

首先发送get请求,获取session

图片

session更新,发送post请求

图片

图片

比较发现get请求和pos请求参数一致,这无疑减少了我们的工作量

图片

图片

图片

分析翻页,点击下一页则会新增一天get请求,并且Form Data中的pn则会加1,这是翻页的关键

图片

图片

分析数据结构,选择需要存储的信息

图片

分析完报文后就理清了我们的爬虫思路,首先构造get请求获取session;;更新session,发送post请求;通过改变Form Data中的pn值
实现翻页循环;获取并存储数据

代码实现

1.构造get请求

def get_json(url, data):
    # 构造随机请求头
    for i in range(100):
        ua = UserAgent()
        # print(ua.random)

    my_headers = {
        # "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
        # "Chrome/67.0.3396.99 Safari/537.36",
        "User-Agent": "ua.random",
        "Referer": "https://www.lagou.com/jobs/list_python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90"
                   "?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=",
        "Content-Type": "application/json;charset=UTF-8"}

get请求主要由User_Agent, Referer和Content-Type组成,其中后两者可从上文报文中获取,为减少爬虫次数过多而被封,我们可通过
UserAgent构造随机请求头。UserAgent可通过pip install fake_useragent获得。下图是随机生成的请求头。

图片

2.获取并更新session,发送post请求

 # 获取session
    session = requests.session()
    # 更新
    session.headers.update(my_headers)
    session.get(
        "https://www.lagou.com/jobs/list_python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90"
        "?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=")
    content = session.post(url=url, data=data)

3.构造翻页

    for num in range(1, page + 1):
        url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
        data = {
            'first': 'false',
            'pg': num,
            'kd': 'python数据分析',
        }

4.存储数据

# 创建workbook,即excel
        workbook = xlwt.Workbook(encoding='utf-8')
        # 创建表,第二参数用于确认同一个cell单元是否可以重设值
        worksheet = workbook.add_sheet('python数据分析', cell_overwrite_ok=True)
        for i, row in enumerate(info_result):
            # print(row)
            for j, col in enumerate(row):
                # print(col)
                worksheet.write(i, j, col)
        workbook.save('python数据分析.xls')

以上就是爬虫总体代码思路,完整代码如下:

#!/usr/bin/env python
# encoding: utf-8
"""
@author: xiaohui
@contact: xiaohui1295371450@163.com
@file: crawl.py
@time: 2019-05-14 10:44
@desc: crawl data on lagou
"""
import json
import requests
import xlwt
import time
from fake_useragent import UserAgent

# 获取存储职位信息的json对象,遍历获得城市、公司名称、工作地点、学历要求、职位名称、薪资、工作年限


def get_json(url, data):
    # 构造随机请求头
    for i in range(100):
        ua = UserAgent()
        print(ua.random)

    my_headers = {
        # "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
        # "Chrome/67.0.3396.99 Safari/537.36",
        "User-Agent": "ua.random",
        "Referer": "https://www.lagou.com/jobs/list_python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90"
                   "?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=",
        "Content-Type": "application/json;charset=UTF-8"}
    time.sleep(5)
    # 获取session
    session = requests.session()
    # 更新
    session.headers.update(my_headers)
    session.get(
        "https://www.lagou.com/jobs/list_python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90"
        "?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=")
    content = session.post(url=url, data=data)
    result = content.json()
    info = result['content']['positionResult']['result']
    info_list = []
    information = []
    for job in info:
        # 城市
        information.append(job['city'])
        # 公司全名
        information.append(job['companyFullName'])
        # 工作地点
        information.append(job['district'])
        # 学历要求
        information.append(job['education'])
        # 职位名称
        information.append(job['positionName'])
        # 薪资
        information.append(job['salary'])
        # 工作年限
        information.append(job['workYear'])
        info_list.append(information)
    return info_list


def main():
    page = int(input('输入爬取的页码总数:'))
    info_result = []
    title = ['城市', '公司全名', '工作地点', '学历要求', '职位名称', '薪资', '工作年限']
    info_result.append(title)
    for num in range(1, page + 1):
        url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
        data = {
            'first': 'false',
            'pg': num,
            'kd': 'python数据分析',
        }
        try:
            info = get_json(url, data)
            info_result = info_result + info
            print("第%s页爬取成功" % num)
        except Exception as msg:
            print("第%s页爬取失败" % num)

        # 创建workbook,即excel
        workbook = xlwt.Workbook(encoding='utf-8')
        # 创建表,第二参数用于确认同一个cell单元是否可以重设值
        worksheet = workbook.add_sheet('python数据分析', cell_overwrite_ok=True)
        for i, row in enumerate(info_result):
            # print(row)
            for j, col in enumerate(row):
                # print(col)
                worksheet.write(i, j, col)
        workbook.save('python数据分析.xls')


if __name__ == '__main__':
    main()

分析我们获得的excel数据,主要招聘地依旧集中在北京、上海和广州,薪资集中在15k-30k之间,可以说情景不错。
这不失为度过目前互联网寒冬的一种选择。

附:完整代码和爬虫数据结果
提取码:n9d9

2018-12-20 16:02:29 zwx19921215 阅读数 858
  • Python玩转大数据--105精讲视频

    该课程采用时下后的编程语言Python讲解,囊括了当前火的大数据技术Spark/Hadoop/Hive知识,学习环境是基于Docker搭建的5个容器。通过这门课程不仅可以学到Spark/Hadoop/Hive大数据知识,还可以学到当下后的云计算技术Docker. 任务作业: 很多人都想入门机器学习和人工智能,挑战高薪!殊不知人工智能和机器学习的基础是数据及数学,特别是在大数据时代,90%以上的公司不单单是招聘算法工程师,到猎聘Boss直聘上查找算法岗位,查看其招聘条件往往都需要熟练使用大数据平台。这门课程涵盖Docker云计算容器技术,要求学员学完本门课程能够使用Docker容器部署4个容器的Spark集群并能用学到的Docker技术制作一个微服务镜像并对外提供服务;本课程全面讲解了Spark原理及接口,要求学员学完本课程能用网络爬虫爬取全国各地的房价数据,并用Spark编写mapreduce程序分析房价分布情况;本课程涉及分布式机器学习SparkML,要求学员学完本课程,能用SVR,LinearRegreesion,多层感知机算法,决策树回归算法等算法进行房价预测。 人人都想入门人工智能,殊不知人工智能的入门准则是基础的算法和数据处理的能力,学完本课程希望人人拿高薪! (注意: 作业需写在CSDN博客中,请把作业链接贴在评论区,老师会定期逐个批改~~)

    963 人正在学习 去看看 张敏

python数据分析入门,作为入门文章系列主要包含以下几个内容:

1.数据的来源(本案例采用的数据来自于上一篇文章中爬取的智联招聘信息):读取数据库数据、数据写入csv文件、读取csv文件等

2.数据的处理:对载入到内存的数据进行一系列的操作(处理总共包含清洗、过滤、分组、统计、排序、计算平均数等一系列操作,本文只简单涉及了其中某几个)

3.对处理后的数据进行可视化分析等

# !/usr/bin/env python
# -*-coding:utf-8-*-
"""
@Author  : xiaofeng
@Time    : 2018/12/19 15:23
@Desc : Less interests,More interest.(数据分析入门)
@Project : python_appliction
@FileName: analysis1.py
@Software: PyCharm
@Blog    :https://blog.csdn.net/zwx19921215
"""
import pymysql as db
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt

# mysql config
mysql_config = {
    'host': '110.0.2.130',
    'user': 'test',
    'password': 'test',
    'database': 'xiaofeng',
    'charset': 'utf8'
}

"""
read data from mysql and write to local file
(从数据库中读取数据写入本地文件)
@:param page_no
@:param page_size
@:param path 文件写入路径
"""


def read_to_csv(page_no, page_size, path):
    # read from database
    database = db.connect(**mysql_config)
    if page_no > 1:
        page_no = (page_no - 1) * page_size
    else:
        page_no = 0
    sql = 'select * from zhilian limit ' + str(page_no) + ',' + str(page_size) + ''
    df = pd.read_sql(sql, database)
    print(df)
    database.close()
    # write to csv
    local = path
    df.to_csv(local, encoding='gbk')


"""
read data from remote address or local address
(读取文件从远程地址或者本地)
"""


def read_from_csv(path):
    # remote address
    # data_url = 'https://xxxx/zhilian.csv'
    # local address
    # data_url = 'G:/zhilian.csv'
    df = pd.read_csv(path, encoding='gbk')
    return df


"""
数据集的简单(过滤、分组、排序)处理
"""


def simple_op(path):
    df = read_from_csv(path)
    # top 10 :获取前10行
    print('--------------top 10-----------')
    top = df.head(10)
    print(top)
    # tail 10:获取后10行
    print('------------tail 10------------')
    tail = df.tail(10)
    print(tail)
    # filter:根据指定条件过滤
    print('-------------filter----------')
    special_jobid = df[df.JobID == 595950]
    print(special_jobid)
    special = df[(df.id >= 110) & (df.PublishDate == '2018-12-18')]
    print(special)
    # check :检查各列缺失情况
    print('-------------check----------------')
    check = df.info()
    print(check)
    print('--------------data describe-----------')
    # count,平均数,标准差,中位数,最小值,最大值,25 % 分位数,75 % 分位数
    describe = df.describe()
    print(describe)
    # 添加新列
    df2 = df.copy()
    df2['AnnualSalaryAvg'] = (df['AnnualSalaryMax'] + df['AnnualSalaryMin']) / 2
    # 重新排列指定列
    columns = ['JobID', 'JobTitle', 'CompanyName', 'AnnualSalaryMin', 'AnnualSalaryMax', 'AnnualSalaryAvg']
    df = pd.DataFrame(df2, columns=columns)
    print(df)


"""
可视化分析
"""


def visualized_analysis(path):
    df = read_from_csv(path)
    df_post_count = df.groupby('JobLactionStr')['AnnualSalaryMax'].count().to_frame().reset_index()
    # subplots(1, 1) 表示1x1个子图,figsize=(25, 8) 子图的宽度和高度
    # f, [ax1,ax2] = plt.subplots(1, 2, figsize=(25, 8)) 表示1x2个子图
    f, ax2 = plt.subplots(1, 1, figsize=(25, 8))

    sns.barplot(x='JobLactionStr', y='AnnualSalaryMax', palette='Greens_d', data=df_post_count, ax=ax2)
    ax2.set_title('各城市职位数量对比', fontsize=15)
    ax2.set_xlabel('城市')
    ax2.set_ylabel('数量')
    # 用来正常显示中文标签
    plt.rcParams['font.sans-serif'] = ['SimHei']
    # 用来正常显示负号
    plt.rcParams['axes.unicode_minus'] = False
    plt.show()


if __name__ == '__main__':
    path = 'G:/zhilian.csv'
    read_to_csv(0, 100, path)
    df = read_from_csv(path)
    simple_op(path)
    visualized_analysis(path)

控制台输出如下:

 

写入本地csv文件效果如下:

 

可视化效果如下:

 

注:由于是入门文章第一篇,所以并没有对数据分析做过深的探索,更深层次的研究将会在后续系列中呈现!

2019-12-11 09:40:22 qq_45503162 阅读数 249
  • Python玩转大数据--105精讲视频

    该课程采用时下后的编程语言Python讲解,囊括了当前火的大数据技术Spark/Hadoop/Hive知识,学习环境是基于Docker搭建的5个容器。通过这门课程不仅可以学到Spark/Hadoop/Hive大数据知识,还可以学到当下后的云计算技术Docker. 任务作业: 很多人都想入门机器学习和人工智能,挑战高薪!殊不知人工智能和机器学习的基础是数据及数学,特别是在大数据时代,90%以上的公司不单单是招聘算法工程师,到猎聘Boss直聘上查找算法岗位,查看其招聘条件往往都需要熟练使用大数据平台。这门课程涵盖Docker云计算容器技术,要求学员学完本门课程能够使用Docker容器部署4个容器的Spark集群并能用学到的Docker技术制作一个微服务镜像并对外提供服务;本课程全面讲解了Spark原理及接口,要求学员学完本课程能用网络爬虫爬取全国各地的房价数据,并用Spark编写mapreduce程序分析房价分布情况;本课程涉及分布式机器学习SparkML,要求学员学完本课程,能用SVR,LinearRegreesion,多层感知机算法,决策树回归算法等算法进行房价预测。 人人都想入门人工智能,殊不知人工智能的入门准则是基础的算法和数据处理的能力,学完本课程希望人人拿高薪! (注意: 作业需写在CSDN博客中,请把作业链接贴在评论区,老师会定期逐个批改~~)

    963 人正在学习 去看看 张敏

现在Python数据分析是这个方向越来越受到重视,一般的大型互联网公司都会有这个岗位,毕竟在互联网的世界里数据是基础,所以,很多人看好Python数据分析师这个岗位,想从事数据分析,那么数据分析都需要有什么基础呢?
首先,我们以企业对应的岗位JD来作为学习的向导,应该是最准确的。我们来看看某招聘网站上的岗位要求:

我们来总结一下:
分析工具:一般要求SPSS/SAS/R/Python等分析工具至少会一种,会两种以上加分,有的企业因内部需求,会指定的一种;


数据库:绝大会要求会SQL,部分要求SQL/NoSQL会一种,高级的分析师或者大型企业要求能够处理大数据,需要Hive(较少的需要Hadoop/Spark);


统计学:若无相关专业背景,需要具备相应的统计学、概率论等基础知识;


数据挖掘:少部分要求会建模,了解基本的算法模型,能够做数据预测,即便不要求,算法也是加分项;


结果输出:Excel/PPT/Tableau。Excel和PPT要求的比较多,主要用作常规的数据呈现,与业务部门沟通等,Tableau一般作为可视化或者分析工具的加分项或者要求之一;


业务/思维:对某个领域(如电商、金融等)相关业务的了解或具有产品、运营方向的分析经验,有自己的数据分析的方法论和项目经验,具备Data Sence。


如果说真正当一个初级数据分析,起码你要会熟练运用用Excel,掌握Python中numpy、pandas和matplotlib的一些基本操作,可以做基本的数据分析处理和可视化,进行探索性的数据分析,观察数据分布、计算各种统计量,得出一些基本的结论,最最基础的还是统计学知识。
统计学在大学中一般都会有相应课程,一定要好好学习,如果是已经毕业的人员,那么就赶紧复习去吧。

零基础系统的学习路线大刚内容可以点击有道云笔记链接了解:

http://note.youdao.com/noteshare?id=e4fa02e7b56d7909a27674cdb3da08aa

 

没有更多推荐了,返回首页