使用 Python 开始数据科学

使用 Python 进行数据科学为您提供了无限的潜力,让您以有意义且启发性的方式解析、解释和组织数据。
135 位读者喜欢这篇文章。
3 warning flags of DevOps metrics

Opensource.com

数据科学是计算机领域一个令人兴奋的新兴领域,它围绕着分析、可视化、关联和解释我们的计算机正在收集的关于世界的海量信息而建立。当然,称其为“新兴”领域有点言过其实,因为这门学科是统计学、数据分析和朴素的痴迷性科学观察的衍生品。

但数据科学是这些学科的一个正式分支,拥有自己的流程和工具,它可以广泛应用于以前从未产生过大量无法管理的数据的学科(如视觉效果)。数据科学是一个新的机会,可以重新审视来自海洋学、气象学、地理学、制图学、生物学、医学和健康以及娱乐行业的数据,并更好地理解模式、影响和因果关系。

像其他庞大且看似包罗万象的领域一样,了解从哪里开始探索数据科学可能会让人望而生畏。有很多资源可以帮助数据科学家使用他们最喜欢的编程语言来实现他们的目标,其中包括最流行的编程语言之一:Python。使用 PandasMatplotlibSeaborn 库,您可以学习数据科学的基本工具集。

如果您还不熟悉 Python 的基础知识,请在继续之前阅读我的 Python 入门介绍

创建 Python 虚拟环境

程序员有时会忘记他们在开发机器上安装了哪些库,这可能导致他们交付的代码在他们的计算机上可以工作,但在其他所有计算机上都因缺少库而失败。 Python 有一个旨在避免这种 неприятного 意外的系统:虚拟环境。虚拟环境有意忽略您已安装的所有 Python 库,实际上强制您从仅包含库存 Python 的状态开始开发。

要使用 venv 激活虚拟环境,请为您的环境创建一个名称(我将使用 example),并使用以下命令创建它

$ python3 -m venv example

在环境的 bin 目录中 source activate 文件以激活它

$ source ./example/bin/activate 
(example) $

您现在“进入”了您的虚拟环境,这是一个干净的状态,您可以在其中构建针对问题的自定义解决方案——但同时也增加了有意识地需要安装所需库的负担。

安装 Pandas 和 NumPy

您必须在新环境中安装的第一个库是 Pandas 和 NumPy。这些库在数据科学中很常见,因此这不会是您最后一次安装它们。它们也不是您在数据科学中唯一需要的库,但它们是一个好的开始。

Pandas 是一个开源的、BSD 许可的库,它可以轻松处理用于分析的数据结构。它依赖于 NumPy,一个科学库,提供多维数组、线性代数、傅里叶变换等等。 使用 pip3 安装两者

(example) $ pip3 install pandas

安装 Pandas 也会安装 NumPy,因此您无需同时指定两者。一旦您将它们安装到您的虚拟环境中一次,安装包将被缓存,以便当您再次安装它们时,您不必从互联网下载它们。

这些是您现在唯一需要的库。接下来,您需要一些示例数据。

生成示例数据集

数据科学完全是关于数据的,幸运的是,有许多来自科学、计算和政府组织的免费和开放数据集可用。虽然这些数据集是教育的绝佳资源,但它们拥有的数据比这个简单的示例所需的数据要多得多。您可以使用 Python 快速创建一个示例且可管理的数据集

#!/usr/bin/env python3

import random 

def rgb():
    NUMBER=random.randint(0,255)/255
    return NUMBER

FILE = open('sample.csv','w')
FILE.write('"red","green","blue"')
for COUNT in range(10):
    FILE.write('\n{:0.2f},{:0.2f},{:0.2f}'.format(rgb(),rgb(),rgb()))

这将生成一个名为 sample.csv 的文件,其中包含随机生成的浮点数,在本例中,这些浮点数表示 RGB 值(视觉效果中数百个常用跟踪值之一)。您可以将 CSV 文件用作 Pandas 的数据源。

使用 Pandas 导入数据

Pandas 的基本功能之一是它能够导入数据并对其进行处理,而无需程序员编写新函数来解析输入。如果您习惯于自动执行此操作的应用程序,这可能看起来不是非常特别——但想象一下在 LibreOffice 中打开 CSV 文件,并且必须编写公式来拆分每个逗号处的值。 Pandas 使您免受此类底层操作的影响。以下是一些简单的代码,用于导入和打印逗号分隔值的文件

#!/usr/bin/env python3

from pandas import read_csv, DataFrame
import pandas as pd 

FILE = open('sample.csv','r')
DATAFRAME = pd.read_csv(FILE)
print(DATAFRAME)

前几行导入了 Pandas 库的组件。 Pandas 库非常广泛,因此当您查找本文中基本函数以外的函数时,您将经常参考其文档。

接下来,通过打开您创建的 sample.csv 文件来创建变量 f。该变量由 Pandas 模块 read_csv(在第二行导入)使用,以创建一个 dataframe。在 Pandas 中,dataframe 是一个二维数组,通常被认为是表格。一旦您的数据位于 dataframe 中,您就可以按列和行对其进行操作、查询范围以及执行更多操作。目前,示例代码仅将 dataframe 打印到终端。

运行代码。您的输出将与此示例输出略有不同,因为数字是随机生成的,但格式相同

(example) $ python3 ./parse.py 
    red  green  blue
0  0.31   0.96  0.47
1  0.95   0.17  0.64
2  0.00   0.23  0.59
3  0.22   0.16  0.42
4  0.53   0.52  0.18
5  0.76   0.80  0.28
6  0.68   0.69  0.46
7  0.75   0.52  0.27
8  0.53   0.76  0.96
9  0.01   0.81  0.79

假设您只需要数据集中的红色值。您可以通过声明 dataframe 的列名并有选择地仅打印您感兴趣的列来做到这一点

from pandas import read_csv, DataFrame
import pandas as pd 

FILE = open('sample.csv','r')
DATAFRAME = pd.read_csv(FILE)

# define columns
DATAFRAME.columns = [ 'red','green','blue' ]

print(DATAFRAME['red'])

现在运行代码,您将只获得红色列

(example) $ python3 ./parse.py 
0    0.31
1    0.95
2    0.00
3    0.22
4    0.53
5    0.76
6    0.68
7    0.75
8    0.53
9    0.01
Name: red, dtype: float64

操作数据表是习惯于如何使用 Pandas 解析数据的好方法。从 dataframe 中选择数据的方法还有很多,而且您尝试的越多,它就变得越自然。

可视化您的数据

很多人更喜欢可视化信息,这已不是什么秘密。这就是图表和图形成为与高层管理人员会议的必需品,以及“信息图”在新闻行业中流行的原因。数据科学家工作的一部分是帮助其他人理解大量数据样本,并且有一些库可以帮助完成这项任务。将 Pandas 与可视化库结合使用可以生成数据的可视化解释。一个流行的开源可视化库是 Seaborn,它基于开源 Matplotlib

安装 Seaborn 和 Matplotlib

您的 Python 虚拟环境尚不包含 Seaborn 和 Matplotlib,因此请使用 pip3 安装它们。 Seaborn 还会安装 Matplotlib 以及许多其他库

(example) $ pip3 install seaborn

为了使 Matplotlib 显示图形,您还必须安装 PyGObjectPycairo。这涉及到编译代码,只要您安装了必要的头文件和库,pip3 就可以为您执行此操作。您的 Python 虚拟环境不知道这些支持库,因此您可以在环境内部或外部执行安装命令。

在 Fedora 和 CentOS 上

(example) $ sudo dnf install -y gcc zlib-devel bzip2 bzip2-devel readline-devel \
sqlite sqlite-devel openssl-devel tk-devel git python3-cairo-devel \
cairo-gobject-devel gobject-introspection-devel

在 Ubuntu 和 Debian 上

(example) $ sudo apt install -y libgirepository1.0-dev build-essential \
libbz2-dev libreadline-dev libssl-dev zlib1g-dev libsqlite3-dev wget \
curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libcairo2-dev

安装完成后,您可以安装 Matplotlib 所需的 GUI 组件

(example) $ pip3 install PyGObject pycairo

使用 Seaborn 和 Matplotlib 显示图形

在您喜欢的文本编辑器中打开一个名为 vizualize.py 的文件。要创建数据的折线图可视化,首先,您必须导入必要的 Python 模块:您在之前的代码示例中使用的 Pandas 模块

#!/usr/bin/env python3

from pandas import read_csv, DataFrame
import pandas as pd

接下来,导入 Seaborn、Matplotlib 和 Matplotlib 的几个组件,以便您可以配置您生成的图形

import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import rcParams

Matplotlib 可以将其输出导出为多种格式,包括 PDF、SVG 或桌面上的 GUI 窗口。对于本示例,将输出发送到桌面是有意义的,因此您必须将 Matplotlib 后端设置为 GTK3Agg。如果您不使用 Linux,则可能需要改用 TkAgg 后端。

设置 GUI 窗口的后端后,设置窗口的大小和 Seaborn 预设样式

matplotlib.use('GTK3Agg')
rcParams['figure.figsize'] = 11,8
sns.set_style('darkgrid')

现在您的显示已配置完成,代码就很熟悉了。使用 Pandas 导入您的 sample.csv 文件,并定义 dataframe 的列

FILE = open('sample.csv','r')
DATAFRAME = pd.read_csv(FILE)
DATAFRAME.columns = [ 'red','green','blue' ]

有了有用的数据格式,您可以在图形中绘制出来。将每一列用作绘图的输入,然后使用 plt.show() 在 GUI 窗口中绘制图形。 plt.legend() 参数将列标题与图形上的每一行关联起来(loc 参数将图例放置在图表之外而不是图表之上)

for i in DATAFRAME.columns:
    DATAFRAME[i].plot()

plt.legend(bbox_to_anchor=(1, 1), loc=2, borderaxespad=1)
plt.show()

运行代码以显示结果。

First data visualization

您的图形准确地显示了 CSV 文件中包含的所有信息:值在 Y 轴上,索引号在 X 轴上,并且图形的线条被标识出来,以便您知道它们代表什么。但是,由于此代码正在跟踪颜色值(至少,它是假装在跟踪),线条的颜色不仅不直观,而且适得其反。如果您永远不需要分析颜色数据,您可能永远不会遇到这个问题,但您肯定会遇到类似的问题。在可视化数据时,您必须考虑呈现数据的最佳方式,以防止查看者从您呈现的内容中推断出错误的信息。

为了解决这个问题(并展示一些可用的自定义),以下代码为每个绘制的线条分配特定的颜色

import matplotlib
from pandas import read_csv, DataFrame
import pandas as pd 
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import rcParams

matplotlib.use('GTK3Agg')
rcParams['figure.figsize'] = 11,8
sns.set_style('whitegrid')

FILE = open('sample.csv','r')
DATAFRAME = pd.read_csv(FILE)
DATAFRAME.columns = [ 'red','green','blue' ]

plt.plot(DATAFRAME['red'],'r-')
plt.plot(DATAFRAME['green'],'g-')
plt.plot(DATAFRAME['blue'],'b-')
plt.plot(DATAFRAME['red'],'ro')
plt.plot(DATAFRAME['green'],'go')
plt.plot(DATAFRAME['blue'],'bo')

plt.show()

这使用特殊的 Matplotlib 表示法为每列创建两个图。每列的初始图都分配了一个颜色(r 代表红色,g 代表绿色,b 代表蓝色)。这些是内置的 Matplotlib 设置。 - 表示法表示实线(双破折号,例如 r--,创建虚线)。为每列创建第二个图,颜色相同,但使用 o 表示点或节点。要演示内置的 Seaborn 主题,请将 sns.set_style 的值更改为 whitegrid

Improved data visualization

停用您的虚拟环境

当您完成探索 Pandas 和绘图后,您可以使用 deactivate 命令停用您的 Python 虚拟环境

(example) $ deactivate
$

当您想返回时,只需像本文开头那样重新激活它即可。当您重新激活您的虚拟环境时,您必须重新安装您的模块,但它们将从缓存而不是从互联网下载安装,因此您无需在线。

无限的可能性

Pandas、Matplotlib、Seaborn 和数据科学的真正力量在于您拥有无限的潜力,可以以有意义且启发性的方式解析、解释和组织数据。您的下一步是使用您在本文中学到的新工具探索简单的数据集。 Matplotlib 和 Seaborn 的功能远不止折线图,因此请尝试创建条形图或饼图或其他完全不同的图表。

一旦您了解了您的工具集并对如何关联数据有了一些了解,可能性是无限的。数据科学是一种在数据中寻找隐藏故事的新方法;让开源成为您的媒介。

接下来阅读
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,经常同时进行。

1 条评论

数据科学确实是最热门的技术之一,数据科学家是这一代的摇滚明星。我也使用 python 学习了数据科学。许多极客喜欢使用 R 学习数据科学,因为它具有许多优势,例如优化和其他因素。我参加了这个课程 https://intellipaat.com/data-scientist-course-training/

© . All rights reserved.