Python 数据分析的友好介绍

多年来,python 在数据科学中的使用增长惊人,并且每天都在增长。

数据科学是一个广阔的研究领域,有很多子领域,其中数据分析无疑是所有这些领域中最重要的一个,而且无论一个人在数据科学方面的技能水平如何,理解或理解它变得越来越重要至少对它有基本的了解。

什么是数据分析?

数据分析是对大量非结构化或无组织数据的清理和转换,目的是生成有关这些数据的关键见解和信息,这将有助于做出明智的决策。

有各种用于数据分析的工具,Python、Microsoft Excel、Tableau、SaS 等,但在本文中,我们将重点介绍如何在 Python 中进行数据分析。 更具体地说,它是如何使用名为 熊猫.

什么是熊猫?

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

熊猫中的数据结构

Pandas 中有 3 种数据结构,即;

区分这三者的最佳方法是将其中一个视为包含多个其他堆栈。 所以 DataFrame 是一系列的堆栈,而 Panel 是 DataFrame 的堆栈。

系列是一维数组

几个系列的堆叠构成了一个二维 DataFrame

几个 DataFrame 的堆栈构成一个 3 维面板

我们最常使用的数据结构是二维 DataFrame,它也可以是我们可能遇到的某些数据集的默认表示方式。

Pandas 中的数据分析

对于本文,不需要安装。 我们将使用一个名为 合作实验室 由谷歌创建。 它是一个用于数据分析、机器学习和 AI 的在线 Python 环境。 它只是一个基于云的 Jupyter Notebook,预装了数据科学家所需的几乎所有 Python 包。

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

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

import pandas as pd

对于本文,我们将使用房价数据集进行数据分析。 可以找到我们将使用的数据集 这里. 我们要做的第一件事是将此数据集加载到我们的环境中。

我们可以在新单元格中使用以下代码来做到这一点;

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=',')

当我们想要读取 CSV 文件时使用 .read_csv 并且我们传递了 sep 属性以显示 CSV 文件是逗号分隔的。

  功能区 UI、多个选项卡、拆分编辑等

我们还应该注意,我们加载的 CSV 文件存储在变量 df 中。

我们不需要在 Jupyter Notebook 中使用 print() 函数。 我们只需在我们的单元格中输入一个变量名,Jupyter Notebook 就会为我们打印出来。

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

但是我们并不总是想看到所有的数据,有时我们只想看到前几条数据和它们的列名。 我们可以使用 df.head() 函数打印前五列,使用 df.tail() 打印后五列。 两者中任何一个的输出看起来都是这样;

我们想要检查这几行和几列数据之间的关系。 .describe() 函数正是为我们做的。

运行 df.describe() 给出以下输出;

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

我们还可以检查 2D DataFrame 的形状以了解它有多少行和列。 我们可以使用 df.shape 来做到这一点,它返回格式为 (rows, columns) 的元组。

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

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

df['price ']

上面的代码返回价格列,我们可以通过将它保存到一个新变量中来进一步

price = df['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 中的切片列表一样。

  最佳游戏显示器分辨率(720p vs 1080p vs 1440p vs 2K vs 4K vs 8K)

现在让我们做一些非常有趣的事情,我们的房价数据集有一列告诉我们房子的价格,另一列告诉我们特定房子的卧室数量。 房价是一个连续值,所以我们可能不会有两个价格相同的房子。 但是卧室的数量有些离散,所以我们可以有几间房子,有两间、三间、四间卧室等。

如果我们想得到所有卧室数量相同的房子,并找出每个独立卧室的平均价格怎么办? 在熊猫中这样做相对容易,可以这样做;

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

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

如果我们想将以上内容可视化怎么办? 我们希望能够检查每个不同卧室数量的平均价格如何变化? 我们只需要将前面的代码链接到一个 .plot() 函数;

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

我们将得到这样的输出;

以上向我们展示了数据中的一些趋势。 在横轴上,我们有不同数量的卧室(注意,不止一栋房子可以有 X 间卧室),在纵轴上,我们有价格的平均值,对应于横轴上相应的卧室数轴。 我们现在可以立即注意到,拥有 5 到 10 间卧室的房屋比拥有 3 间卧室的房屋成本高得多。 很明显,拥有大约 7 或 8 个卧室的房子比拥有 15、20 甚至 30 个房间的房子要贵得多。

像上面这样的信息就是数据分析非常重要的原因,我们能够从数据中提取有用的见解,如果不进行分析,这些见解是不会立即或根本不可能注意到的。

缺失数据

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

现在很多地方都可能出错,一些测量员可能会因为回答我的一些问题而感到不自在而将其留空。 很多人可以对我的调查问题的几个部分做同样的事情。 这可能不被认为是一个问题,但想象一下,如果我要在我的调查中收集数字数据,并且部分分析要求我获得总和、平均值或其他一些算术运算。 一些缺失值会导致我的分析出现很多不准确之处,我必须想出一种方法来查找这些缺失值,并将其替换为一些可以接近它们的值。

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

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

df.isnull()

这将返回一个布尔值的 DataFrame,它告诉我们最初存在的数据是真缺失还是假缺失。 输出看起来是这样的;

我们需要一种方法能够替换所有这些缺失值,大多数情况下缺失值的选择可以取为零。 有时它可以被视为所有其他数据的平均值,或者可能是它周围数据的平均值,这取决于数据科学家和所分析数据的用例。

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

df.fillna(0)

在上面,我们用零值填充所有空数据。 它也可以是我们指定的任何其他数字。

数据的重要性怎么强调都不为过,它帮助我们从数据本身得到答案! 他们说数据分析是数字经济的新石油。

本文中的所有例子都可以找到 这里.

要更深入地了解,请查看 使用 Python 和 Pandas 进行数据分析在线课程。