根据下面链接的文章,
经过一步一步的练习,第一次使用的时候遇到了很多问题。 从第一步到最后一步,花了将近一周的时间。
写这篇文章,记录一下你遇到的问题。
-------------------------------------------------- ----------------------------------
目录
1. 数据读取
2. 数据概览
3. 数据清理和组织
4. 数据分析与可视化
-------------------------------------------------- ----------------------------
1. 数据读取
常用的数据加载函数:
)
本来原文是以csv格式提供的,但是因为我电脑的字体设置是英文,所以导致了乱码。 我重新调整了一下,保存为xlsx格式。
如果你也遇到乱码的情况,可以尝试下面的方法: ps:需要稍后选择编码,这样才会显示汉字而不是乱码。
下一步是使用函数从源文件中读取数据。 Numpy 和 是第三方工具包,每次使用前都需要加载。
找到源文件的路径。 这里注意,'/'是转义字符,所以如果在路径中使用/,则需要在其前面添加一个r,这样可以识别这不是转义字符。 用法。 描述路径的常用方法有以下三种:
上述运行结果如下:
第一步数据加载结束
-------------------------------------------------- ----------------------------------------------------
2. 数据概览
df.head() - 显示头部的数据,默认为5,也可以自由设置参数
df.tail() - 显示尾部数据,默认为5,也可以自由设置参数
( ) - 查看数据类型
这里列出了数据集拥有的各个字段,总共6876个,其中、、、都是空的。 公司ID和职位ID是数字,其他都是字符串。 因为数据集的数据很多,如果我们只想浏览其中的一部分,可以使用head函数来显示头部数据。 默认为5。您也可以自由设置参数。 如果是尾部数据,那就是尾部。
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------
3. 数据清理和组织
我们想要了解各地各个公司的薪资情况,所以我们先关注薪资数据一栏,这也是最高的数据。
第一步:检查是否抄袭
使用函数:( )
注意:名称区分大小写。
该函数可以返回一个唯一的值。 数据集是仓位ID,值是唯一的。
使用len函数,总共计算出5031个唯一值,说明有很多重复值。
第 2 步:删除重复项
使用函数:drop()
功能详细解释
步骤3:处理薪资字段。 我们需要取平均工资。 先把最低工资和最高工资拿出来就可以了。
使用功能:
自定义函数def():
查找()函数:
apply() 函数:
您可以对一行或多行数据进行操作,允许使用自定义函数。
upper() 函数:全部改为大写
观察薪资内容,并无特殊规律。 有小写K和大写K,也有k以上的。 k以上的只能默认最低和最高。
先拿到最低工资
是自定义函数的名称,其中find()函数用于定位‘-’逻辑位置,截取薪资范围开头与K之间的数字,即我们想要的薪资上限,也就是最低工资。 apply 将函数应用于该列的所有行。
我不明白的是 - def (word) 中的所有内容都是单词,并且整个自定义函数未定义。 它是如何连接到源文件的列的呢? ? ? ?
答:word可以看成x,这样可能更容易理解; 整个自定义函数是:
在第一个红色框中,x 没有连接。 这里,x为必填参数(位置参数); 但在第二个红色框 - .apply() 中,这次参数 x 被替换。 内部,连接。 apply 将函数应用于该列的所有行。
接下来处理k上面的薪资数据
对于'k'以上的工资,如果使用find函数查找,结果将为-1,即找不到结果。 如果按照原来的方式截取的话,就会是word[:-2],这不是我们想要的结果,所以需要加一个if判断。
因为区分大小写,我们使用upper函数将所有k转换为K,然后用K作为截取。 这里不建议使用“above”,因为有些脏数据不包含这两个词。
上面的['']相当于直接在表中添加一个新的-。
将被转换为数字。 如果转换成功,则说明所有薪资号码已成功截获。
接下来拿最高薪水
函数中添加了一个新参数,用于确定是否返回或top,这是一个默认参数。
apply中,参数是在函数后面添加的,而不是在函数内部。
接下来,找到平均工资
使用的函数:
()
函数(匿名函数):
没有特定名称的函数允许快速定义单行函数,可以在需要函数的任何地方使用这些函数。 这与 def 定义的函数不同。
首先将上面找到的&的数据类型转换为data。
然后求平均值
x:********,前面的x:理解为输入,后面的星号区域是对输入的x进行操作。 本例中,因为top和同时求平均值,所以需要将x和sum相加。
Axis 是 apply 中的一个参数。 axis=1 表示按行使用该函数,axis=0 表示使用列。
PS:上面可以替换为:['']=(+.) / 2
至此,数据清洗部分就完成了。 接下来选择几个我们想要的(大家可以根据自己的需要选择)
为什么这里需要引用'[[]]'而不是[]? - 有待调查
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------
4. 数据分析与可视化
对于提取的数据,首先进行一些描述性统计。
使用的函数:
( ) 为计数,统计所有非零元素的个数,并按降序输出
( ),可以快速生成各种统计指标
数据分析
【哪个城市招聘数据工程师最多】从数据中可以看出,北京招聘的数据工程师较多。
对于数据分析师的薪资,我们使用函数。 数据分析师的平均工资是17k,中位数是15k。 两者之间没有太大区别。 最高工资75k,应该是数据科学家或者数据分析总监的级别。 标准差为8.99k,具有一定的波动性。 大多数分析师的薪资在17±9k之间。 (找时间回顾统计知识以更好地理解)
摘要:一般用于分类数据和数值数据。 这是两个最常用的统计函数。
不管有多少文字,都没有清晰的图表。 我们用图来说话。
数据可视化
常用的绘图包: 和 。 本练习仅涵盖。
它自带了绘图功能,是基于进行封装的,所以两者可以结合使用。 (开头就有as pd,这里就不再需要了)
每次绘图之前,都需要加载。 作为PLT
% 是一个内置方法 - 允许在单元格中输出图表。
plt.style.use('') 使用R语言中的配色作为绘图风格,纯粹是为了好看。
绘制直方图
使用功能:
hist() 函数:
(参数解释)
直方图用于显示数据的分布。 通俗地说,就是哪一条数据出现的比例或者频率较高,哪一条数据出现的概率较低。
默认总共分为10段,即bins=10
在 hist(x,bins) 函数中,bins 指的是直方图的总数。 数字越大,条形越紧。
-------------------------------------------------- -------------------------------------------------- --------
我们以平均工资为内容,画出下面的柱状图。
图表列出了数据分析师的薪资分布,因为大部分薪资都集中在20k以下,为了更细粒度。 继续减小直方图的宽度。
将 bin 调整为 15,如下所示:
数据分布是双峰的,因为原始数据来自爬取招聘网站,而薪资很容易集中在某个范围内,这并不是真实薪资的反映(10到20k的范围,基于此中的计算公式)文章,只会大致下降。在 15k,而不是均匀分布)。
双峰类型通常是由混合多个数据源或数据类别引起的。 '
绘制箱线图
使用功能:
.( )
数据分析的重要思想之一是细分维度。 现在看看不同城市、不同教育背景对薪资的影响。 箱线图是观察这一点的最佳方式。
方法仅用于
- 默认为None,输入为str或由str组成的列表。 其作用是指定箱线图要分析的列。
by - 默认为None,str或array-like,其功能为group by,通过指定by='',可以进行多组合箱线图分析
- 箱线图窗口大小
不同城市对工资的影响
图表标签有问题,出现白框。 主要原因是图表默认使用英文字体,而这里的都是中文,这就造成了冲突。
经过多方排查,解决的方法有3种。 (具体方法可以参考下面的链接),
文章提供了其他方法,但我选择了操作更简单的第二种——动态设置参数。 缺点是下次必须重新设置。
动态设置完成后,再次运行时会出现城市名称。
来自 pylab mpl
mpl.['font.sans-serif'] = [''] # 指定默认字体
mpl.['axes.'] = False # 解决保存的图像显示为带有负号“-”的正方形的问题
(箱线图的详细解释请参考-)
关于上面的箱线图分析——北京的数据分析师薪资高于其他城市,尤其是中位数。上海和深圳略逊一筹,广州甚至不如杭州。
我们来看看不同学历对薪资的影响
对于上面箱线图的分析——就学历而言,博士的薪资虽然不如顶尖领域的本科生和硕士,但薪资却遥遥领先。 我们稍后会对此进行分析。 大学学位稍微有一些劣势。
我们来看看不同工作年限对薪资的影响。
关于上面箱线图的分析——从工作年限来看,薪资差距进一步拉大,毕业生和工作多年的人不在同一个梯度上。 虽然没有其他行业的数据比较,但可以肯定的是,数据分析师的职业道路是相当光明的。
上面的箱线图都是在一维中查看的。 现在让我们尝试以二维方式查看它们:
二维分析
使用功能:
isin( ) - 过滤函数
分析——从图中可以看出,不同学术背景下北京略优于上海。 北京愿意花更多的薪水来吸引数据分析师,而且在博士的层面上,也是一个很大的飞跃。 我们不妨寻找一下原因。
另外,如果传入多个值,箱线图的尺度会自动变成元组,从而达到水平比较的效果(这种方法其实不好,其他方法后面会解释)。 这种方法不适合元素太多的场景。
多维分析
使用的函数:
通过...分组 ( )
( )
步骤 1 - 分组依据 + count( )
以上是标准用法,按照城市栏对不同城市进行分组。 不过它不返回分组结果,只返回内存地址。此时它只是一个对象,不进行任何计算。
返回的是不同城市各列的统计结果。 因为不存在 NaN,所以每一列的结果是相等的。 现在相当于.
步骤 2 - 分组依据+mean()
改为mean,计算出不同城市的平均工资。
因为mean方法只针对数值,并且每一列中都只有数值,所以返回这个唯一的结果。
步骤 3 group by(双条件)+mean( )
您可以传递一个列表并获取一个分层集。 平均工资按城市和教育组计算。
步骤 4 - 分组依据(双条件)+mean( ) + ()
然后调用该方法并调换行和列,以便您可以更清楚地看到它。
不同城市中,博士薪资最高的是深圳,硕士薪资最高的是杭州。 北京总体薪资最好。 这个分析结论有问题吗? 我们先来看看招募人数。
这次改为计数,我们在末尾加一,表示只统计计数结果,不混入相同的数据。
需要博士学位的职位只有6个。 所谓平均工资只取决于公司给出的价格。
波动性非常高。 毕竟这只是招聘薪资,并不代表博士在职的实际薪资。
这也解释了上面图表中的异常现象。
步骤5 -(计算不同公司招聘的数据工程师数量并计算平均值)
使用的函数:
agg() 函数
agg除了系统自带的几个函数外,还支持自定义函数。
()功能
apply() 函数
这里使用了agg函数,同时传入count和mean方法,然后返回不同公司的count和平均结果。
步骤6
(计算不同城市招聘数据分析师需求量前5名的公司,我们该如何应对?)
自定义函数topN,对传入的数据进行统计,并返回从大到小的前5个数据。
然后按城市进行聚合和分组。 因为我们要寻找排名前 5 的公司,所以我们调用 topN 函数。
步骤8
(如果想了解不同城市每个岗位的前五名招聘人数,也可以直接拨打topN)
可以看到,虽然都是数据分析师,但其实还有很多开发工程师、数据产品经理等。
这是捕获数据的缺点。 它不仅体现了数据分析师,也体现了数据领域。 不同的城市有不同的需求。 北京的数据产品经理似乎比上海的更资深。
接下来继续标记可视化
一维条形图
使用功能
绘图条( )
??? plot.bar() 是否仅适用于
二维条形图
重要功能:
( ) 行装置
当我第一次开始运行以下代码时,显示错误:name '' is not。
解决方案是:如果 [% ] 不起作用,请尝试使用 [ %pylab ]。 前面加上%pylab就可以了。
参考链接:
使用group by,我们已经可以随意组合不同的维度了。
下面函数中的mean()求出同一城市不同教育背景的平均值。
直接调用函数,可视化更加自由。 (它与numpy兼容)
理解以下参数的含义
使用功能:
plt.hist()
其中参数
x - (n,) 数组或 (n,) 的数组。 该参数指定分布在每个bin(盒子)中的数据,对应x轴
垃圾箱 - 或,。 该参数指定 bin 的数量,即总共有多少条。 默认值为 10
-,. 如果为 True,则元组的第一个将形成 a ,即 n/(len(x)`dbin) 该参数指定密度,即每个条形图的比例。 默认值为 0 。
:是否对得到的直方图向量进行归一化。 默认值为 0
ps:='true'和='False'产生的图片与=1产生的图片相同。
根据解释发现,=ture代表频数图,默认是频数图。 那么纵坐标应该有点不同吧? ?
ormed=True是频率图,默认是频数图
- 直方图颜色
alpha - 透明度
还有一个问题:
1. 代码中只设置了蓝色和红色两种颜色。 为什么有三种颜色?
橙色代表什么?
下面的柱状图是norm=0,没有归一化。可以看出,由于北京和上海的分析师数量相差较远,所以无法直接比较,需要将参数转换为密度。
另一个分析思路是对数据进行进一步处理。 我们设置不同级别的薪资
使用函数:cut()
参数解释:
扩展参考:
cut的作用就是分桶。 这也是一种常用的数据分析方法。 它将不同的数据划分为不同的级别,即将数值数据处理为分类数据。 它广泛应用于机器学习的特征工程。 cut 可以分成等间隔,传入一个数字即可。 这里为了更好的区分,我传入了一组列表进行手动划分,并处理成对应的标签。
这有点像用Excel做柱状图,先手动设置组宽度。 然而,这里的组宽度不是等距的。 这大概是作者根据经验设定的群体距离。
从表中提取数值和级别看一下
下面也是一个直方图,但是和前面的不一样。 将数据转换为百分比,然后绘制图表。
下面使用group by来组合城市和级别的维度。
另外,plot.bar()函数中的参数= True,值为条形图叠加。
如果更改为=False,则生成的条形图将不会叠加。
如下图所示:
注意使用()进行行和列安装。 如果没有(),结果将如下:
Axis 是 apply 中的一个参数。 axis=1 表示按行使用该函数,axis=0 表示使用列。
当axis=1时,x.sum()指的是x所在行的总和。 每行的百分比加起来为 1
当axis=0时,x.sum()指的是x所在列的和。 每列中的百分比加起来为 1
最后画出直方图。 如下所示。 在这里你可以更清楚地看到不同地区不同职级的薪资比例。 它相对于箱线图和直方图的优势在于通过手动划分具有商业意义。 0到3是实习生的价格区间,3到6是刚毕业没有基础正在整理数据的新人,6到10是有一定基础的人,以此类推。
如果将代码中的轴更改为 0,它将应用于该列。 后来出来的图如下:
轴=0。 如果按照这个来算百分比的话,是跨城市的。 无法清楚比较同一城市不同薪资水平的百分比。
-------------------------------------------------- --------
最后,我们到了最后一步——创建词云。
使用功能:
字符串()
str.split()
() - 该函数主要用于过滤掉缺失数据。
首先,准备词云图的原材料。
删除方括号 [ ]
现在的目的是统计分析标签。 它看起来像是干净的数据。 元素中的[]没有意义。 它是字符串的一部分,与数组无关。 .是的,不能直接应用。 apply是个好方法,但是比较麻烦。 这里需要str方法。
使用str方法,str方法允许我们对列中的元素进行字符串相关的处理。 这里的[1:-1]不再是求和的切片,而是对字符串的截取。 这里,所有的[]都被截取了。 。 如果省略str,则选择从第二行到最后一行的数据。 记住。
删除空格键
使用str之后,当我们想再次使用它来删除空格时,它仍然返回相同的值。 还是需要加上str。
这一步我已经尝试了很长时间了。 一开始使用('','')时,返回的结果全部为空。 后来我先用find函数找到了空间的索引,然后删除了find函数,继续用函数来替换空间。 它有空值,所以需要删除,否则很容易报错。
拆分为列表并过滤缺失数据
再次使用str.split方法,将元素中的标签通过“,”分割成列表。
这里是重点,通过apply和来统计标签的数量。 由于每一行元素都已转换为列表,因此列表中的标签将逐行计算。 这就是应用的灵活性。 它将应用于行,最后结果将形成一个新表。
使用来完成行列转换(为什么要进行行列转换???),看起来有点奇怪,因为它统计的是每个位置上所有标签出现的次数,而且是绝大多数必须是 NaN。
删除空值并将其重置为,即标签名称和 的索引。 也可以认为是对应一个位置。 0是标签出现在该位置的次数。 我之前没有命名,所以显示0。 。 某些职位标签可能会出现多次,此处将被忽略。
使用以下方法计算标签出现的次数
要创建云映像,需要第三方软件 - 。
不,你需要先点。 一步安装成功,没有出现错误。
首次加载:
清除标签中的引号 ' '
设置词云相关参数
然后duang~duang~duang~