WEBKT

数据科学必备:Python 常用库一览,Pandas、NumPy、Scikit-learn 深度解析

134 0 0 0

1. NumPy:数值计算的基石

1.1 安装 NumPy

1.2 NumPy 基础

1.2.1 创建 ndarray

1.2.2 ndarray 的属性

1.2.3 数组的索引和切片

1.2.4 数组运算

1.2.5 广播

1.3 NumPy 的应用

2. Pandas:数据分析的利器

2.1 安装 Pandas

2.2 Pandas 基础

2.2.1 Series

2.2.2 DataFrame

2.2.3 数据访问

2.2.4 数据清洗和转换

2.2.5 数据合并和连接

2.2.6 数据导入和导出

2.3 Pandas 的应用

3. Scikit-learn:机器学习的引擎

3.1 安装 Scikit-learn

3.2 Scikit-learn 基础

3.2.1 数据集

3.2.2 模型训练和预测

3.2.3 模型评估

3.2.4 数据预处理

3.3 Scikit-learn 的应用

4. 其他常用 Python 库

5. 总结

在当今数据爆炸的时代,数据科学成为了炙手可热的领域。而 Python 作为数据科学领域最流行的编程语言之一,拥有丰富的库来支持各种数据分析、机器学习和可视化任务。本文将深入探讨数据科学中最常用的 Python 库,包括 Pandas、NumPy 和 Scikit-learn,帮助你快速入门并掌握它们的核心功能。

1. NumPy:数值计算的基石

NumPy(Numerical Python)是 Python 中用于科学计算的基础库,它提供了强大的 N 维数组对象(ndarray),以及用于操作这些数组的各种函数。NumPy 的核心功能包括:

  • ndarray 对象: 存储同类型数据的多维数组,支持高效的数值运算。
  • 广播(Broadcasting): 允许在不同形状的数组之间进行算术运算。
  • 线性代数、傅里叶变换和随机数生成: 提供了丰富的数学函数,方便进行科学计算。

1.1 安装 NumPy

可以使用 pip 命令轻松安装 NumPy:

pip install numpy

1.2 NumPy 基础

1.2.1 创建 ndarray

可以使用 numpy.array() 函数从 Python 列表或元组创建 ndarray:

import numpy as np
# 从列表创建一维数组
arr1 = np.array([1, 2, 3])
print(arr1)
# 从嵌套列表创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)

1.2.2 ndarray 的属性

ndarray 具有以下常用属性:

  • shape:数组的形状(维度)。
  • ndim:数组的维度数。
  • dtype:数组中元素的数据类型。
  • size:数组中元素的总数。
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("Shape:", arr.shape) # 输出: (2, 3)
print("Dimension:", arr.ndim) # 输出: 2
print("Data type:", arr.dtype) # 输出: int64
print("Size:", arr.size) # 输出: 6

1.2.3 数组的索引和切片

NumPy 支持与 Python 列表类似的索引和切片操作:

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 索引
print(arr[0, 1]) # 输出: 2
# 切片
print(arr[0:2, 0:2]) # 输出: [[1 2], [4 5]]

1.2.4 数组运算

NumPy 支持各种数组运算,包括算术运算、比较运算和逻辑运算:

import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 算术运算
print(arr1 + arr2) # 输出: [5 7 9]
print(arr1 * arr2) # 输出: [ 4 10 18]
# 比较运算
print(arr1 > arr2) # 输出: [False False False]
# 逻辑运算
print(np.logical_and(arr1 > 1, arr2 < 6)) # 输出: [False False False]

1.2.5 广播

广播是 NumPy 的一个强大特性,它允许在不同形状的数组之间进行算术运算。当两个数组的形状不完全匹配时,NumPy 会尝试通过广播来扩展数组的形状,使其能够进行运算。

import numpy as np
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([10, 20, 30])
# arr2 被广播到与 arr1 相同的形状
print(arr1 + arr2)
# 输出: [[11 22 33], [14 25 36]]

1.3 NumPy 的应用

NumPy 广泛应用于各种数据科学任务,例如:

  • 数据预处理: 填充缺失值、数据标准化等。
  • 特征工程: 创建新的特征、转换现有特征等。
  • 模型训练: 作为机器学习算法的输入数据。
  • 科学计算: 线性代数、统计分析等。

2. Pandas:数据分析的利器

Pandas 是一个基于 NumPy 的数据分析库,它提供了两种主要的数据结构:Series 和 DataFrame。Pandas 简化了数据清洗、转换、分析和可视化等流程,成为数据科学领域最受欢迎的库之一。

  • Series: 一维带标签的数组,可以存储各种数据类型。
  • DataFrame: 二维带标签的表格型数据结构,类似于 Excel 表格或 SQL 表。

2.1 安装 Pandas

使用 pip 安装 Pandas:

pip install pandas

2.2 Pandas 基础

2.2.1 Series

Series 是一种一维数据结构,可以看作是带标签的数组。标签称为索引(index),可以用来访问 Series 中的数据。

import pandas as pd
# 创建 Series
s = pd.Series([10, 20, 30, 40, 50], index=['a', 'b', 'c', 'd', 'e'])
print(s)

输出:

a 10
b 20
c 30
d 40
e 50
dtype: int64

2.2.2 DataFrame

DataFrame 是一种二维表格型数据结构,可以看作是多个 Series 的集合。DataFrame 具有行索引(index)和列标签(columns),可以方便地进行数据访问和操作。

import pandas as pd
# 创建 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 28, 22],
'City': ['New York', 'London', 'Paris', 'Tokyo']}
df = pd.DataFrame(data)
print(df)

输出:

Name Age City
0 Alice 25 New York
1 Bob 30 London
2 Charlie 28 Paris
3 David 22 Tokyo

2.2.3 数据访问

Pandas 提供了多种数据访问方法,包括:

  • []:通过列标签访问列数据(DataFrame)或通过索引访问数据(Series)。
  • .loc[]:通过行索引和列标签访问数据。
  • .iloc[]:通过行号和列号访问数据。
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 28, 22],
'City': ['New York', 'London', 'Paris', 'Tokyo']}
df = pd.DataFrame(data)
# 访问列
print(df['Name'])
# 访问行(使用 loc)
print(df.loc[0]) # 访问第一行
# 访问行(使用 iloc)
print(df.iloc[1]) # 访问第二行
# 访问单个元素
print(df.loc[0, 'Name']) # 访问第一行 Name 列的值

2.2.4 数据清洗和转换

Pandas 提供了丰富的数据清洗和转换功能,包括:

  • 处理缺失值: isnull(), fillna(), dropna()
  • 数据类型转换: astype()
  • 数据筛选和过滤: 布尔索引
  • 数据排序: sort_values()
  • 数据分组和聚合: groupby(), agg()
import pandas as pd
# 创建一个包含缺失值的 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, None, 22],
'City': ['New York', 'London', 'Paris', 'Tokyo']}
df = pd.DataFrame(data)
# 处理缺失值
print(df.isnull()) # 检查缺失值
df['Age'].fillna(df['Age'].mean(), inplace=True) # 用均值填充缺失值
# 数据类型转换
df['Age'] = df['Age'].astype(int) # 将 Age 列转换为整数类型
# 数据筛选
print(df[df['Age'] > 25]) # 筛选 Age 大于 25 的行
# 数据排序
df = df.sort_values(by='Age', ascending=False) # 按 Age 列降序排序
# 数据分组和聚合
print(df.groupby('City')['Age'].mean()) # 按 City 分组,计算 Age 的均值

2.2.5 数据合并和连接

Pandas 提供了多种数据合并和连接功能,包括:

  • 合并(Merge): 根据一个或多个键将两个 DataFrame 按照列进行连接,类似于 SQL 的 JOIN 操作。
  • 连接(Concat): 将多个 DataFrame 沿着行或列进行拼接。
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Alice', 'Bob', 'Charlie']})
df2 = pd.DataFrame({'ID': [2, 3, 4], 'Age': [30, 28, 25]})
# 合并
df_merged = pd.merge(df1, df2, on='ID', how='inner') # 内连接
print(df_merged)
# 连接
df_concat = pd.concat([df1, df2], axis=0) # 沿着行拼接
print(df_concat)

2.2.6 数据导入和导出

Pandas 支持多种数据格式的导入和导出,包括:

  • CSV: read_csv(), to_csv()
  • Excel: read_excel(), to_excel()
  • SQL: read_sql(), to_sql()
  • JSON: read_json(), to_json()
import pandas as pd
# 从 CSV 文件导入数据
df = pd.read_csv('data.csv')
# 将 DataFrame 导出到 CSV 文件
df.to_csv('output.csv', index=False) # 不包含行索引

2.3 Pandas 的应用

Pandas 广泛应用于各种数据分析任务,例如:

  • 数据清洗和预处理: 处理缺失值、数据类型转换、数据筛选等。
  • 数据探索性分析(EDA): 统计描述、可视化、数据透视表等。
  • 特征工程: 创建新的特征、转换现有特征等。
  • 数据分析和报告: 生成数据分析报告、构建数据仪表盘等。

3. Scikit-learn:机器学习的引擎

Scikit-learn 是一个简单高效的机器学习库,它提供了各种机器学习算法,包括分类、回归、聚类、降维等,以及模型选择、评估和预处理工具。Scikit-learn 基于 NumPy、SciPy 和 Matplotlib 等库,是 Python 中最受欢迎的机器学习库之一。

3.1 安装 Scikit-learn

使用 pip 安装 Scikit-learn:

pip install scikit-learn

3.2 Scikit-learn 基础

Scikit-learn 的核心概念包括:

  • 估计器(Estimator): 表示机器学习模型,例如分类器、回归器、聚类器等。
  • 预测器(Predictor): 估计器的实例,用于对新数据进行预测。
  • 转换器(Transformer): 用于数据预处理,例如标准化、归一化、特征选择等。

3.2.1 数据集

Scikit-learn 提供了多种数据集,包括:

  • 内置数据集: sklearn.datasets 模块提供了用于测试和学习的内置数据集,例如鸢尾花数据集、手写数字数据集等。
  • 外部数据集: 可以从外部文件(例如 CSV 文件)导入数据集。
import pandas as pd
from sklearn import datasets
# 加载内置数据集
iris = datasets.load_iris()
# 查看数据集的特征和标签
print(iris.feature_names)
print(iris.target_names)
# 从 CSV 文件导入数据
df = pd.read_csv('data.csv')

3.2.2 模型训练和预测

Scikit-learn 提供了统一的 API 来训练和预测模型:

  1. 选择模型: 根据任务选择合适的模型(例如,分类、回归)。
  2. 创建模型实例: 创建模型类的实例。
  3. 训练模型: 使用 fit() 方法将模型训练到训练数据上。
  4. 预测: 使用 predict() 方法对新数据进行预测。
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn import datasets
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data # 特征
y = iris.target # 标签
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建逻辑回归模型
model = LogisticRegression(max_iter=200) # 增加迭代次数以获得更好的收敛
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
print(y_pred)

3.2.3 模型评估

Scikit-learn 提供了多种模型评估指标,用于评估模型的性能:

  • 分类: 准确率(accuracy)、精确率(precision)、召回率(recall)、F1 分数、混淆矩阵等。
  • 回归: 均方误差(MSE)、均方根误差(RMSE)、R-squared 等。
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# 计算精确率、召回率和 F1 分数
precision = precision_score(y_test, y_pred, average='macro')
recall = recall_score(y_test, y_pred, average='macro')
f1 = f1_score(y_test, y_pred, average='macro')
print("Precision:", precision)
print("Recall:", recall)
print("F1 Score:", f1)
# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:\n", cm)

3.2.4 数据预处理

Scikit-learn 提供了多种数据预处理工具,包括:

  • 标准化: StandardScaler,将数据缩放到均值为 0,方差为 1。
  • 归一化: MinMaxScaler,将数据缩放到 [0, 1] 范围内。
  • 特征选择: SelectKBest,选择 K 个最重要的特征。
  • 降维: PCA,主成分分析,用于降低数据的维度。
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
# 数据标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 降维(PCA)
pca = PCA(n_components=2)
X_train_pca = pca.fit_transform(X_train_scaled)
X_test_pca = pca.transform(X_test_scaled)

3.3 Scikit-learn 的应用

Scikit-learn 广泛应用于各种机器学习任务,例如:

  • 分类: 图像识别、文本分类、垃圾邮件过滤等。
  • 回归: 房价预测、股票预测、销售额预测等。
  • 聚类: 客户细分、图像分割、异常检测等。
  • 降维: 数据可视化、特征提取等。
  • 模型选择和评估: 交叉验证、超参数调整等。

4. 其他常用 Python 库

除了 NumPy、Pandas 和 Scikit-learn,还有许多其他常用的 Python 库,可以帮助你完成各种数据科学任务:

  • Matplotlib: 用于数据可视化,创建各种图表,例如折线图、散点图、柱状图等。
  • Seaborn: 基于 Matplotlib 的高级数据可视化库,提供了更美观的图表样式和更方便的绘图接口。
  • SciPy: 科学计算库,提供了各种数值计算、优化、插值、信号处理等功能。
  • Statsmodels: 统计分析库,提供了各种统计模型,例如线性回归、时间序列分析等。
  • TensorFlow 和 PyTorch: 深度学习框架,用于构建和训练神经网络。
  • Beautiful Soup: 用于网页抓取,解析 HTML 和 XML 文件。
  • Requests: 用于发送 HTTP 请求,获取网页数据。

5. 总结

本文介绍了数据科学中最常用的 Python 库,包括 NumPy、Pandas 和 Scikit-learn。通过学习这些库,你可以进行数据分析、机器学习和可视化。希望本文能帮助你快速入门并掌握这些强大的工具,在数据科学的道路上更进一步!

掌握这些库只是数据科学旅程的开始。 随着你对数据科学领域的深入了解,你会发现更多有用的库和工具。 持续学习、实践和探索是成为一名优秀数据科学家的关键。

码农小明 Python数据科学机器学习

评论点评

打赏赞助
sponsor

感谢您的支持让我们更好的前行

分享

QRcode

https://www.webkt.com/article/7453