pandas数据分析实践(超详细)

 2024-01-21 05:02:23  阅读 0

根据下面链接的文章,

经过一步一步的练习,第一次使用的时候遇到了很多问题。 从第一步到最后一步,花了将近一周的时间。

写这篇文章,记录一下你遇到的问题。

-------------------------------------------------- ----------------------------------

目录

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~

标签: 薪资 函数 平均

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码