Python 已经成为数据科学首选编程语言。
其主要原因之一是有着庞大的扩展库、包与框架生态系统,其中有很多都面向数据科学领域。
Python 的数据科学生态系统能够让用户轻松获取数据、操作、清理、分析和可视化数据,然后可以用它来训练机器学习模型。
如果在没有数据科学库的情况下执行任何这些过程,需要从头开始编写功能代码,这将是非常耗时并且效率低下的事儿。
在数据领域,Python 有数千个可用的库可用。在本文中,我将带你回顾数据科学家最重要的十个库。这十个库是根据其受欢迎程度、功能、社区支持、相关性和易用性而精心选择的。
但请大家记住,数据科学是一个广阔的领域,拥有许多单独的用例。此处审查的库已按其常用用途进行分组。我们将可以找到用于数据采集、数据分析和处理、机器学习和数据可视化库。
数据采集
在操作或分析数据之前,需要先获取数据。
可能你比较幸运,已经拥有一些数据。但是一般情况下数据并不容易获得,如果想要的数据在互联网上,我们可以通过抓取来获得它们。
Python 有一些流行且强大的网页抓取库,包括Beautiful Soup和Scrapy。
Beautiful Soup
这个库的名字,翻译成中文,叫做“美丽的汤”,大概作者是想送给每人一碗香甜美味的汤。
Beautiful Soup是在Python世界里最流行的网络抓取库之一。它轻量级、多功能、用户友好、易于学习并且功能强大。
它最大的优点之一是易于使用,轻松几行代码就可设置并抓取网页。一旦 HTML 或 XML 被抓取过来,Beautiful Soup 就可以轻松解析文档、定位并提取信息。
尽管很简单,Beautiful Soup 还提供了一些强大且有用的方法,比如 find()和find_all()。
以下是使用 Beautiful Soup 获取数据的简单方法,只需几行代码:
from bs4 import BeautifulSoup
import requests
x = requests.get("https://quotes.toscrape.com/")
soup = BeautifulSoup(x.text, 'html.parser')
quotes = soup.find_all("div", class_="quote")
scraped_quotes = []
for quote in quotes:
scraped_quotes.append(quote.find("span", class_="text").text)
在上面示例中,我们抓取的是 quotes.toscrape.com,它是专为网络抓取练习而设计的网站。
首先导入BeautifulSoup,然后使用 requests方法开始 url请求,使用 解析函数返回给 BeautifulSoup需要的网页内容,即HTML,识别所有div包含引号的元素,最后抓取引号并将它们存储到叫做scraped_quotes的列表中。
只需几秒和不到十行代码,就可以抓取网页的全部内容。Beautiful Soup 还可以使用几种方法来抓取多种形式的网页。
Scrapy
Scrapy是另一种流行的 Python 网页抓取工具。它比 Beautiful Soup 更快、更强大,当我们想要获取大量数据或想要抓取整个网站而不是仅仅一个网页时,这个库就相当有用了。
它可以处理损坏的和非标准的页面声明,并在不消耗太多服务器内存的情况下抓取大量数据。同时它也是异步的,这意味着它可以并行抓取多个页面。
因为功能强大,Scrapy 比 Beautiful Soup 更复杂,也更难设置。它的学习曲线会更陡峭,尤其是与 Beautiful Soup 的简单性相比。
如果对网络抓取完全陌生,那么从 Beautiful Soup 开始是个好主意,一旦你熟悉了它,就再考虑学习 Scrapy。
荣誉奖: Selenium(最适合抓取动态网页)
Selenium提供了一个简单的API应用程式介面(英语:Application Programming Interface),使用者可以利用Selenium Webdriver 编写功能及测试。
Selenium是一个专业爬虫工具,除了抓取网页数据之外,还可以实现自动化操作,即模拟人工处理的动作。
WebDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
driver.getTitle();
driver.quit();
Selenium是个值得深入使用和思考的Web自动化工具。
数据分析与处理
Python 已成为数据分析的必需品, NumPy和pandas等数据库在此过程中发挥着至关重要的作用。
在数据科学领域,已经没有一个 Jupyter Notebook 或 Google Colab 的第一个单元格不包含著名的如:
import pandas as pd
import numpy as np
人们普遍认为数据准备占据了大数据工程师、数据科学家的大部分时间,而这些库对于这项任务是不可或缺的。
NumPy
https://numpy.org/
NumPy是一个流行的 Python 库,可用于数学和科学计算。它包含内置数学函数,允许开发者处理大型矩阵与多维数组。
使用 NumPy,您可以执行复杂的代数计算、傅里叶变换、矩阵运算等等。这听起来可能很可怕,但 NumPy 让它变得相对简单。
NumPy 的核心是NumPy 数组,这是一种高效的数据结构,其性能优于列表,并使 NumPy 速度极快。NumPy 也是其他数据科学库(例如 pandas 和scikit-learn )的基础,并为高级数据分析和操作提供了强大的框架。
让我们快速看看 NumPy 可以做什么:
import numpy as np
a = np.array([3, 8, 12, 0, 1])
b = np.zeros(5)
c = np.arange(5)
在 NumPy 中创建数组的方法有很多种。
在上面代码中,我们可以通过三种不同的方式创建数组:
a
通过指定其值来创建数组,b
创建仅包含零的数组,以及c
包含 0 到 4 之间的数字的数组。您可以对这些数组执行无数的操作,例如切片、索引、连接、排序、过滤和拆分。您还可以对这些数组执行数学运算,例如矩阵乘法:
np.matmul(a,c)
Pandas
pandas与 NumPy 一样是最受欢迎的数据科学库;这两个库甚至是最受欢迎的库之一。它非常适合数据分析、数据预处理和数据操作。
pandas 的核心是DataFrame(一种类似于表的数据结构,允许您使用结构化数据)和Series(本质上是一种特定类型的 DataFrame,仅包含一列)。
pandas 简化了从各种文件(例如 CSV、Excel 或 JSON)导入和导出数据的过程。导入数据后,pandas 可以让您对其进行分组、聚合、切片、排序、插补、合并和可视化。它对于探索性数据分析是不可或缺的,因为它可以让您快速洞察数据、理解数据并识别潜在的数据问题。
pandas 可以比作在电子表格中工作,但功能显着增强。
让我们快速浏览一下熊猫的实际情况。在这里,您将使用著名的泰坦尼克号数据集,其中包含有关泰坦尼克号乘客的各种数据,例如他们的姓名、年龄、性别、乘客舱位和票价。
来看,从 pandas 开始是多么地容易:
import pandas as pd
df = pd.read_csv("titanic.csv")
第一行将 pandas 导入为pd,这是迄今为止导入 pandas 的最常见方法。然后,第二行从 DataFrame 导入数据titanic.csv并将其存储在dfDataFrame 中。如果您想查看数据示例,可以使用 line df.head(),它将显示数据的前五行,如下所示:
pandas head() 方法
还可以使用df.info()
,它显示数据集中的所有列、它们的类型以及它们是否包含缺失值。从以下输出中,您可以看到数据集包含 12 列和 891 行。您还可以看到“Age”、“Cabin”和“Embarked”等列包含缺失值:
pandas describe()方法
使用df.describe()
,你可以快速获取汇总统计信息,例如列的计数、平均值和标准差。仅凭一行,可以看到泰坦尼克号上的人员平均年龄(数据集中包含 891 人)为 29.7 岁,而最年长的为 80 岁:
pandas的describe()方法
df.head()、df.info()、 和等方法df.describe()是快速查看正在使用的数据的好方法,但您也可以使用 pandas 来清理和操作数据。
我们看到“年龄”、“客舱”和“登船”列中缺少数据。大多数机器学习模型无法处理丢失的数据。这意味着你须找到一种方法来处理丢失的数据或删除这些行。可以使用df.fillna()以认为合适的方式填充缺失的数据,或者使用删除任何缺失数据的行df.dropna()。
还可以删除不需要的列、基于现有列创建新列或对数据进行分组。例如,通过运行df.groupby("Pclass").mean(),您可以根据乘客类别对乘客进行分组,并计算每个类别的均值。
可以看到,头等舱乘客的平均年龄明显高于其他舱位,票价也明显高于其它舱位:
pandas groupby() 方法
SciPy
另一个广泛用于科学计算的库叫做SciPy。它是在 NumPy 基础上构建的,并扩展了其科学计算功能。这两个方面反映在 SciPy 的名称中。该库可用于线性代数、傅立叶变换、微分方程、统计以及优化算法等。
与 NumPy 一样,SciPy 也以多维矩阵为主要对象。总的来说,如果您正在构建复杂的专业科学应用程序,SciPy 是一个不错的选择。
荣誉奖: statsmodels(专门用于统计)
机器学习
从本质上讲,机器学习允许计算机从经验中学习,而不是被显式编程。
机器学习过去需要从头开始编写代码,这使得它极其复杂且耗时。然而,借助一些优秀的 Python 库,只需几行代码即可执行机器学习。
让我们看一下三个最流行的机器学习库。
scikit-learn
scikit-learn是 Python 中的首选机器学习库。
它包含大量使用起来非常简单的机器学习算法;无论你对监督学习还是无监督学习感兴趣,亦或者你是否正在执行分类或回归任务,都可以解决。
在监督学习方面,你可以使用 scikit-learn 来实现更简单的算法,例如线性回归和逻辑回归,也可以用于支持向量机、最近邻、朴素贝叶斯、决策树和随机森林。
scikit-learn 对于降维和聚类等无监督任务也很有用。scikit-learn 甚至提供了一些神经网络算法。它在深度学习领域非常有限,但可以使用其他库进行扩展,例如 TensorFlow 或 Keras。
然而,scikit-learn 的用途不仅仅是监督或无监督学习。您还可以将其用于数据预处理任务(例如归一化、标准化、分类编码、估算缺失值等)、超参数调整、交叉验证、特征选择、分类和回归指标等等。
TensorFlow
深度学习是机器学习的一个子集,在过去十年中变得非常流行。
它利用深度神经网络,通常用于涉及非结构化数据(例如图像、文本或音频)的任务。由 Google 开发的TensorFlow是最流行的使神经网络训练变得简单的扩展库之一。
从本质上讲,TensorFlow 允许开发者执行高性能数值计算,并使深度学习模型的开发、评估和可视化变得相对容易。TensorFlow 内存效率高,并且可以使用 CPU 和 GPU 轻松部署。
然而,TensorFlow 不像 Keras 等其他深度学习库那样体贴初学者。
Keras
Keras是初学者深度学习之旅最简单的方法之一。
它可以在 TensorFlow 之上运行,只需少量代码和用户友好的语法即可训练深度神经网络。其网站的口号是“人类的深度学习”,Keras 也确实做到了这一点。
通过其Layers API,Keras 为开发者提供了多个层,例如卷积层、池化层、循环层、预处理层、归一化层和正则化层。
它还允许你使用许多不同的优化器、指标和损失等。尽管它没有 TensorFlow 强大,但 Keras 的灵活性和简单性使其成为机器学习工程师的上好选择。
荣誉奖: PyTorch(TensorFlow 和 Keras 的替代品)、NLTK(用于自然语言处理)、XGBoost(用于梯度提升)
数据可视化
通过查看原始数据来分析数据虽然也有用,对程序员来讲可以阅读,但远非普通用户的理想之地。
我们通过查看数据也无法识别数据中的模式。但是,可视化数据确实可以让你快速检查数据并注意到模式和趋势。
幸运的是,Python 也有大量出色的数据可视化库。这些库也只需几行代码即可提供多种图表类型。
Matplotlib
在众多数据可视化Python库中,Matplotlib是非常流行的一个。事实上,许多其他数据可视化库大都是构建在 Matplotlib 之上的。
Matplotlib 可让你轻松创建不同的图表,并能够自定义其中的每个细节。它的可定制化是它的最强优点之一。
然而,Matplotlib 被认为相对复杂,特别是当你将其与其他数据可视化库(例如seaborn )进行比较时,人们普遍认为它的默认图表有一点点“老式”。
我们快速了解一下如何使用 Matplotlib 创建简单的图表,并使用“泰坦尼克号”的数据集输出结果。
下面是创建显示“泰坦尼克号”乘客年龄分布的直方图的代码。在这里,您导入库,识别要为其创建直方图的列,然后添加轴标签:
import matplotlib.pyplot as plt
plt.hist(df["Age"])
plt.xlabel('Age')
plt.ylabel('Count')
plt.show()
Matplotlib 生成的图表
seaborn
另外一个流行的 Python 数据可视化库叫做 seaborn。它建立在 Matplotlib 之上,因此它们有许多相似之处。但是,seaborn 的设计更易于使用,并且实现相同功能所需的代码量更少。
此外,seaborn 的默认图表通常被大家认为比 Matplotlib 的更现代。然而,seaborn 并未提供 Matplotlib 所提供的全部功能。
下面就开始进行比较,让我们使用 seaborn 重新创建使用 Matplotlib 创建的相同图表。
我们会注意到,它需要更少的代码,并且输出看起来更好看:
import seaborn as sns
sns.histplot(df["Age"])
plt.show()
seaborn柱形图
荣誉奖获得者: Bokeh、Plotly。
结语
在本文中,相信大家已经了解了用于数据采集、数据分析和处理、机器学习和数据可视化的最流行的 Python 库。
如果你是初学者,希望你不被大量选择项所淹没。我们列出的一些库具有类似的功能(比如Matplotlib 和 seaborn、Beautiful Soup 和 Scrapy),了解其中之一即可。
此外,大多数的库对于特定任务很有用,您可能感兴趣,也可能不感兴趣。比如,如果你不打算使用深度学习,则不需要掌握 TensorFlow 或 Keras。因此,确定哪些库与自己相关并深入研究它们。一个很好的起点是 pandas、NumPy 和 Matplotlib 的组合。大多的数据科学家经常使用这三个。
如果你正在寻找一个只需编写一次并在任何地方运行的简单构建框架,可以看看Earthly,它提供简单的语法,并且与所有语言与框架兼容。我们可以免费开始并尝试其一致且可重复的构建、高级缓存以及与任何 CI 的轻松集成。
祝您学习愉快~