29

[译] 每位数据分析师应该要知道的基本数据分析技术

 5 years ago
source link: https://mp.weixin.qq.com/s/U6-afZBVerX-LhkNqerTsg?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Yfmaqyj.jpg!web

在我作为一名数据分析师的日常工作中,我看到了来自客户的各种数据和分析请求。我注意到,在大多数项目中都需要一些基本的技术,这与您所从事的项目类型无关。我相信每个数据分析师/科学家都应该很好地理解这些技术。因此,本文的目标是带领读者了解这些技术,并在基本层面上解释这些技术。

以下是我们将讨论的主题:

  1. 基本过滤

  2. 多条件过滤

  3. 聚合

  4. 连接

为了便于分析,我们将使用Python中的panda库。因此,如果您还没有安装这个库,请在命令提示符中使用以下代码之一来安装panda:

# If you use Anaconda, type the following in anaconda prompt
conda install -c anaconda pandas
# If you use pip, type the following in command prompt
pip install pandas

此外,我假定您已经对Python和pandas库有了基本的了解。但是不用担心,如果你还没有接触到上面的任何一个,我们将从头到尾进行详细介绍。

veIJbui.png!web

我们的数据集

为了能够使用上述技术,我们需要数据。我们可以导入csv文件或excel文件,但现在我们只需要用pandas简单地创建一个小数据集。

以下代码将生成一个pandas数据框。

import pandas as pd

df = pd.DataFrame({'ID': ['A1', 'A1', 'B1', 'B1', 'C1', 'C1', 'D1', 'D1'],
'Value': [100, 120, 90, 80, 140, 30, 60, 210],
'Date': pd.date_range('20190407', periods=8)})

这里显示以下数据框。

2aqyq2m.jpg!web

如上所述,你可以看到ID,Value和Date。

1 基本的过滤

我们已经加载了pandas库和创建了数据集,我们开始第一个技术。当你想基于列的值获得数据的子集时,我们在谈论过滤数据。

在pandas我们有多种方式做这个事情,现在我们看一下最常用的方式。

  1. 用[]的布尔索引

  2. .loc 的布尔索引

用[]过滤数据如下

# Boolean indexing with square brackets

df[df['Value'] > 100]

在pandas中的过滤逻辑是将条件传递给方括号之间的DataFrame.

df[condition]

给我们输出如下结果

Ebiiy23.png!web

.loc 过滤

# Boolean indexing with .loc

df.loc[df['Value'] > 100]

正如所料,它给出了相同的输出,因为我们应用了相同的过滤器。

26rymuV.png!web

哪个更适合使用?对于基本过滤器,正如我们上面看到的,没有区别或首选项,这取决于您更喜欢哪种代码语法。但是,当您想应用更高级的数据选择时, .loc 提供了这一功能,并且可以执行更复杂的选择和切片。但现在不用担心。

2 基于条件过滤

我们使用了第一个过滤器,非常直接。但是假设你想应用一个有多个条件的过滤器。我们如何在pandas做到这一点?为此,我们研究了Python操作符。

2.1 &操作符

例如,您希望过滤ID等于C1且值大于100的所有行。

要应用这个过滤器,我们必须用&运算符连接两个条件。这看起来像这样:

# Filtering with multiple conditions '&' operator

df[(df['ID'] == 'C1') & (df['Value'] > 100)]

并将返回以下输出:

aqQVjer.png!web

正如预期的那样,我们返回一行,因为只有这一行满足我们在过滤器中设置的条件。

2.2 |操作符

Python中的|操作符代表or,如果满足其中一个条件,则返回True。

我们可以通过应用以下过滤器来显示这一点:给出日期晚于2019-04-10或值大于100的所有行。

在Python代码中,它看起来像这样:

# Filtering with multiple conditions 'or' operator

condition = (df['Date'] > '2019-04-10') | (df['Value'] > 100)

df[condition]

并将返回以下输出:

b2eUNby.png!web

正如预期的那样,返回的所有行都具有大于100的值,或者日期在2019-04-10之后。

3 聚合

有时需要聚合数据,以便创建特定的视图或进行一些计算。在pandas中,我们使用groupby。

那么groupby到底是什么呢?如果我们引用pandas文档:

我们所说的“分组”是指涉及下列一项或多项步骤的程序:

根据一些标准将数据分成若干组。

独立地对每个组应用一个函数。

将结果组合成数据结构。

基本上,它是根据一些指标,将数据分组,让你自己对这些组做一些操作。

3.1 Groupby 获得总和

让我们看一个例子。假设我们想要基于ID得到每个组的value的总值。这就像下面的Python代码:

# Get the total value of each group based on ID

df.groupby('ID', as_index=False)['Value'].sum()

将为我们提供以下结果

bErEJbn.png!web

所以如果我们再看看我们的DataFrame,我们可以看到这是正确的:

zyeiMjb.jpg!web

例如ID A1的总value是100 + 120 = 220,这是正确的。

Groupby:获得最大日期

pandas提供了一个大范围的函数,您可以在使用groupby之后对您的组使用这些函数。让我们再看一个。例如,我们可以使用 .max() 函数获得每个组的最大日期。

就像这样

# Get the highest date of each group

df.groupby('ID', as_index=False)['Date'].max()

输出结果如下:

ANvQR3y.png!web

4 连接

连接是基于一个公共列以并排的方式组合两个数据框。大多数情况这些列被当做主键列。

join 这个术语起源于数据库语言SQL,之所以需要它,是因为SQL数据库的数据建模大多是通过关系建模来完成的。

连接有很多类型,您的输出将基于执行的连接类型。由于这是一个入门教程,我们将介绍最常见的一个: inner join 。在本系列后面的部分中,我们将研究更复杂的连接。

内部连接来自韦恩图表示两个集合的交集部分。因此,当我们将其转换为数据时,内部连接将返回两个数据框中都存在的行。

qYZBjiR.png!web

4.1 我们的数据集

因为我们想合并两个数据框,所以我们将创建新的数据。这两个虚构的数据集表示customer主表和orders表。

使用下面的代码,我们创建了两个新的数据框:

# Dataset 1 - Customer Table
dfA = pd.DataFrame({'Customer_ID':[1, 2, 3, 4, 5],
'Name': ['GitHub', 'Medium', 'Towardsdatascience', 'Google', 'Microsoft'],
'City': ['New York', 'Washington', 'Los Angeles', 'San Francisco', 'San Francisco']})

# Dataset 2 - Orders
dfB = pd.DataFrame({'Order_ID': [1, 2, 3, 4, 5, 6, 7],
'Order_date': pd.date_range('20190401', periods=7),
'Amount':[440, 238, 346, 637, 129, 304, 892],
'Customer_ID':[4, 3, 4, 1, 2, 5, 5]})

它们看起来像这样:

7zEJJn6.jpg!webNbU3Qvv.jpg!web

因此,我们要对新数据进行逻辑分析,得到orders表中每个订单表的客户名称和城市。这是一个典型的连接问题,按行匹配两个dataframes,并用更多的列充实数据。在本例中,键列是Customer_ID。

在pandas中,我们使用 merge 方法进行连接。我们将把以下参数传递给这个方法:

  • 您想加入哪个数据框(dfA、dfB)。

  • 关键列是什么(Customer_ID)。

  • 您希望执行哪种类型的连接(内部连接)。

在merge方法中,我们可以使用的参数比上面列出的更多,但目前这些参数已经足够了。

我们想要执行的合并在pandas中看起来如下:

pd.merge(left=dfB, right=dfA, on='Customer_ID', how='inner' )

正如我们所期望的,name和city列被添加到每个对应的customer_ID旁边。

f2qYfuV.jpg!web

以上就是本部分的内容:使用Python,每个数据分析师都应该知道的基本数据分析技术。

你可以在我的GitHub上以Jupyter Notebook的形式找到这篇文章的代码:

https://github.com/ErfPy/MediumArticles

如果这篇文章对你有用,请考虑给这篇文章点赞,并与朋友和/或同事分享。

如有任何问题或其他讨论,请随时发表留言。

原文链接:

https://towardsdatascience.com/basic-data-analysis-techniques-every-data-analyst-should-know-using-python-4de80ab52396

公众号推荐:数据人才(ID:datarencai)

(一个帮助数据人才找工作的公众号,

也分享数据人才学习和生活的有趣事情。)

MFzmIfB.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK