Python中数据分析的友好介绍

多年来,使用Python进行数据科学的应用量逐日增长。

Data science是一门广泛的研究领域,其下有很多子领域,数据分析无疑是这些领域中最重要的之一,无论数据科学技能水平如何,了解或至少具备基本知识变得越来越重要。

什么是数据分析?

数据分析是对大量非结构化或无组织数据进行清洗和转换的过程,目的是生成关键洞察和信息,以帮助做出明智决策。

有各种各样的工具可以进行数据分析,如Python、Microsoft Excel、Tableau、SaS等,但本文将着重介绍如何使用Python进行数据分析,更具体地说,是使用一个名为Pandas的Python库。

什么是Pandas?

Pandas是一个开源的Python库,用于数据操作和数据整理。它快速高效,具有将各种数据加载到内存中的工具。它可用于重塑、标记切片、索引甚至对多种形式的数据进行分组。

Pandas中的数据结构

Pandas中有3种数据结构,分别是:

  • Series(序列)
  • DataFrame(数据帧)
  • Panel(面板)

区分这三个数据结构的最佳方法是将其中一个视为包含其他几个结构的堆栈。因此,DataFrame是Series的堆栈,Panel是DataFrame的堆栈。

Series是一维数组

多个Series的堆栈形成二维DataFrame

多个DataFrame的堆栈形成三维Panel

我们将主要使用二维DataFrame这种数据结构,它也可以是某些数据集的默认表示方式。

Pandas中的数据分析

本文不需要进行安装。我们将使用一个名为colaboratory的工具,由Google创建。它是一个用于数据分析、机器学习和人工智能的在线Python环境。它是一个云端的Jupyter Notebook,几乎预装了作为数据科学家所需的几乎所有Python包。

现在,前往https://colab.research.google.com/notebooks/intro.ipynb。你应该看到以下内容。

通过左上角的导航,点击文件选项,然后点击“新笔记本”选项。你将在浏览器中加载一个新的Jupyter notebook页面。我们需要做的第一件事是将pandas导入我们的工作环境中。我们可以通过运行以下代码来实现:

import pandas as pd

本文使用一个房价数据集进行数据分析。我们将使用的数据集可以在here找到。我们首先要做的是将这个数据集加载到我们的环境中。

我们可以在一个新的单元格中使用以下代码来实现:

df =  pd.read_csv('https://firebasestorage.googleapis.com/v0/b/ai6-portfolio-abeokuta.appspot.com/o/kc_house_data.csv?alt=media &token=6a5ab32c-3cac-42b3-b534-4dbd0e4bdbc0 ', sep=',')

.read_csv用于读取CSV文件,我们传递了一个sep属性来指示CSV文件是逗号分隔的。

我们还应该注意到我们加载的CSV文件存储在一个名为df的变量中。

在Jupyter Notebook中,我们不需要使用print()函数。我们只需在单元格中简单地键入变量名,Jupyter Notebook就会将其打印出来。

我们可以通过在一个新的单元格中键入df并运行它来进行测试,它会将我们数据集中的所有数据作为DataFrame打印出来。

但是,我们并不总是想要看到所有的数据,有时我们只想看到前几行数据和它们的列名。我们可以使用 df.head() 函数打印前五列,使用 df.tail() 函数打印最后五列。任意一个函数的输出如下所示;

我们想要检查这些几行数据和列之间的关系。 .describe() 函数正好可以为我们做到这一点。

运行 df.describe() 将得到以下输出;

我们可以立即看到, .describe() 给出了 DataFrame 中每列的平均值、标准差、最小值、最大值和分位数。这对我们非常有用。

我们还可以检查我们的二维 DataFrame 的形状,找出它有多少行和列。我们可以使用 df.shape 来做到这一点,它会返回一个形式为 (行数, 列数) 的元组。

我们还可以使用 df.columns 来检查 DataFrame 中所有列的名称。

如果我们只想选择一列并返回其中的所有数据怎么办?这类似于通过字典进行切片操作。在一个新的单元格中输入以下代码并运行:

df['price ']

上面的代码返回 price 列,我们可以进一步将其保存到一个新变量中:

price = df['price']

现在,我们可以对 price 变量执行可以在 DataFrame 上执行的任何其他操作,因为它只是一个实际 DataFrame 的一个子集。我们可以做诸如 df.head()df.shape 等操作。

我们还可以通过将列名的列表传递给 df 来选择多个列,如下所示:

data = df[['price ', 'bedrooms']]

上面的代码选择了名称为 ‘price' 和 ‘bedrooms' 的列,如果我们在一个新的单元格中键入 data.head(),我们会得到以下结果:

上述的列切片方式返回该列中的所有行元素,如果我们想要返回数据集中的一部分行和一部分列,该怎么办?这可以通过使用 .iloc 来完成,它的索引方式类似于 Python 中的列表。所以我们可以这样做:

df.iloc[50: , 3]

它返回从第50行到最后一行的第3列。这非常方便,与 Python 中切片列表的方式相同。

现在让我们做一些真正有趣的事情,我们的房价数据集有一个列告诉我们一栋房子的价格,另一个列告诉我们该房子有几个卧室。房价是一个连续值,所以我们可能没有两栋房子具有相同的价格。但是卧室数目是离散的,所以我们可以有几栋具有两个、三个、四个卧室等的房子。

如果我们想要获取所有具有相同卧室数的房屋,并找出每个离散卧室数的平均价格怎么办?在 pandas 中,这相对容易实现,可以这样做:

df.groupby('bedrooms ')['price '].mean()

上面首先使用 df.groupby() 函数将 DataFrame 按相同卧室数的数据集进行分组,然后告诉它只给我们卧室列,并使用 .mean() 函数找到数据集中每个房屋的平均值。

如果我们想要可视化上述内容?我们想要检查每个不同卧室数的平均价格如何变化?我们只需要将上述代码链接到 .plot() 函数,如下所示:

df.groupby('bedrooms ')['price '].mean().plot()

我们将得到如下输出:

上面的内容向我们展示了数据中的一些趋势。在水平轴上,我们有不同数量的卧室(注意,多个房屋可以有相同数量的卧室),在垂直轴上,我们有对应于水平轴上卧室数量的价格均值。我们可以立即注意到,有5到10间卧室的房屋的价格要比有3间卧室的房屋要高得多。我们还可以明显看到,有大约7或8间卧室的房屋的价格要比那些有15、20甚至30个房间的房屋要高得多。

像上面这样的信息就是为什么数据分析非常重要的原因,我们可以从数据中提取出有用的见解,而这些见解在没有分析的情况下很难或几乎不可能被注意到。

缺失数据

假设我正在进行一项调查,其中包含一系列问题。我向成千上万的人分享了调查链接,以便他们可以提供反馈。我的最终目标是对这些数据进行数据分析,以便从中获得一些关键见解。

现在可能会出现很多问题,一些调查人员可能会感到不舒服回答我的一些问题,所以留空了。很多人可能对我的调查问题的几个部分都做同样的事情。这可能不被视为一个问题,但是想象一下,如果我在调查中收集的是数值数据,并且分析的一部分需要我获取总和、均值或其他算术操作,那么几个缺失值将导致我的分析结果不准确,因此我必须找出一种方法来找到并替换这些缺失值,使其能够更接近于实际值。

Pandas为我们提供了一个在DataFrame中查找缺失值的函数,名为isnull()

isnull()函数可以这样使用;

df.isnull()

这将返回一个布尔值的DataFrame,告诉我们原始数据是否真的缺失或假的缺失。输出结果如下;

我们需要一种方法来替换所有这些缺失值,通常情况下,缺失值的选择可以为零。有时也可以选择其他数字,例如所有其他数据的均值或周围数据的均值,这取决于数据科学家和数据分析的用例。

要填充DataFrame中的所有缺失值,我们使用.fillna()函数,使用如下;

df.fillna(0)

在上述示例中,我们将所有空数据填充为零。也可以填充为我们指定的任何其他数字。

数据的重要性不可言喻,它帮助我们从数据本身中得到答案!数据分析是数字经济中的新石油。

本文中的所有示例都可以在here中找到。

要深入了解,请查看Data Analysis with Python and Pandas online course.

类似文章