Python机器学习基础前置库学习
目录
- 📊 NumPy:高效的数组操作与数学计算
- 📈 Pandas:数据处理与分析的利器
- 🎨 Matplotlib与Seaborn:数据可视化的艺术
1. 📊 NumPy:高效的数组操作与数学计算
NumPy(Numerical Python)是Python中用于高效数值计算的重要库。它提供了一个强大的N维数组对象ndarray
,能够对大规模数据集进行高效的操作。以下将详细解析NumPy的功能与应用。
数组的创建与操作
创建数组是NumPy的基础功能之一。可以通过列表、元组或其他数组直接创建NumPy数组。以下是一些常见的创建方法:
import numpy as np
# 从列表创建一维数组
array1d = np.array([1, 2, 3, 4, 5])
print("一维数组:", array1d)
# 从嵌套列表创建二维数组
array2d = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组:\n", array2d)
# 创建全零数组
zeros_array = np.zeros((3, 4))
print("全零数组:\n", zeros_array)
# 创建单位矩阵
identity_matrix = np.eye(3)
print("单位矩阵:\n", identity_matrix)
数组的基本操作
NumPy提供了丰富的数组操作功能,比如索引、切片、重塑等。通过这些功能,用户可以方便地对数据进行处理和分析。
# 数组索引
print("访问第二个元素:", array1d[1])
# 切片操作
print("前两个元素:", array1d[:2])
# 数组重塑
reshaped_array = array2d.reshape(3, 2)
print("重塑后的数组:\n", reshaped_array)
数学运算与线性代数
NumPy的强大之处在于它对数学运算的支持。它提供了各种数学函数,能够进行加减乘除、矩阵乘法、求逆等操作。下面的代码展示了如何进行基本的数学运算。
# 数组运算
array_a = np.array([1, 2, 3])
array_b = np.array([4, 5, 6])
print("数组相加:", array_a + array_b)
# 矩阵乘法
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])
matrix_product = np.dot(matrix_a, matrix_b)
print("矩阵乘法结果:\n", matrix_product)
# 计算行列式
det = np.linalg.det(matrix_a)
print("矩阵的行列式:", det)
随机数生成
NumPy还支持随机数生成,常用于模拟和算法验证等场景。以下代码展示如何生成随机数。
# 生成均匀分布的随机数
random_uniform = np.random.rand(2, 3)
print("均匀分布的随机数:\n", random_uniform)
# 生成正态分布的随机数
random_normal = np.random.randn(3, 2)
print("正态分布的随机数:\n", random_normal)
扩展:线性回归示例
通过NumPy的强大功能,可以实现简单的线性回归。以下是一个使用NumPy进行线性回归的示例代码:
import numpy as np
# 生成样本数据
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]]) # 特征
y = np.array([1, 2, 2, 3]) # 目标
# 计算线性回归参数
X_b = np.c_[np.ones((X.shape[0], 1)), X] # 添加截距项
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
print("线性回归参数:", theta_best)
NumPy的高效性与灵活性,使其成为数据科学和机器学习中的基石。通过深入掌握其数组操作和数学计算能力,用户可以为后续的数据分析和模型构建打下坚实的基础。
2. 📈 Pandas:数据处理与分析的利器
Pandas是Python数据分析的重要工具,主要提供了DataFrame
和Series
两种数据结构,用于数据的处理和分析。Pandas的设计理念是使数据分析变得简单和高效,特别是在数据预处理、清洗与转换方面表现突出。
创建与基本操作
在Pandas中,数据的基本单元是DataFrame
,其结构类似于Excel的表格,可以方便地进行数据操作。以下是创建和基本操作的示例。
import pandas as pd
# 创建DataFrame
data = {
'姓名': ['Alice', 'Bob', 'Charlie'],
'年龄': [25, 30, 35],
'城市': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
print("初始DataFrame:\n", df)
# 访问列
print("年龄列:\n", df['年龄'])
# 添加新列
df['收入'] = [70000, 80000, 120000]
print("添加收入列:\n", df)
# 删除列
df.drop('城市', axis=1, inplace=True)
print("删除城市列:\n", df)
数据清洗与预处理
在数据分析过程中,数据的清洗与预处理是至关重要的。Pandas提供了丰富的工具来处理缺失值、重复数据等问题。
# 创建包含缺失值的DataFrame
data_with_nan = {
'姓名': ['Alice', 'Bob', 'Charlie', None],
'年龄': [25, None, 35, 28]
}
df_nan = pd.DataFrame(data_with_nan)
# 检查缺失值
print("检查缺失值:\n", df_nan.isnull())
# 填充缺失值
df_nan.fillna({'年龄': df_nan['年龄'].mean(), '姓名': 'Unknown'}, inplace=True)
print("填充缺失值:\n", df_nan)
# 删除包含缺失值的行
df_nan.dropna(inplace=True)
print("删除缺失值行后:\n", df_nan)
数据过滤与分组
Pandas强大的数据过滤与分组功能,能够帮助用户深入分析数据。
# 基于条件进行过滤
filtered_df = df[df['年龄'] > 28]
print("年龄大于28的记录:\n", filtered_df)
# 数据分组与聚合
grouped = df.groupby('收入').mean()
print("收入分组统计:\n", grouped)
数据合并与连接
在数据分析中,合并和连接多个数据集是常见的需求。Pandas提供了多种方式来实现这一点。
# 创建另一个DataFrame
data2 = {
'姓名': ['Alice', 'Bob', 'David'],
'职业': ['Engineer', 'Artist', 'Doctor']
}
df2 = pd.DataFrame(data2)
# 合并DataFrame
merged_df = pd.merge(df, df2, on='姓名', how='inner')
print("合并后的DataFrame:\n", merged_df)
扩展:时间序列分析示例
Pandas特别适合进行时间序列分析,以下是一个时间序列分析的简单示例。
# 创建时间序列数据
dates = pd.date_range('2022-01-01', periods=5)
data_series = pd.Series([1, 2, 3, 4, 5], index=dates)
print("时间序列数据:\n", data_series)
# 计算滚动平均
rolling_mean = data_series.rolling(window=2).mean()
print("滚动平均:\n", rolling_mean)
Pandas通过简化数据处理与分析的流程,极大地提高了数据科学家的工作效率。对Pandas的深入理解将为后续复杂的数据分析奠定坚实的基础。
3. 🎨 Matplotlib与Seaborn:数据可视化的艺术
数据可视化是数据分析中不可或缺的一部分。Matplotlib和Seaborn是Python中最常用的数据可视化库,它们能够将数据以图形的形式展现出来,帮助用户更好地理解和分析数据。
Matplotlib基础
Matplotlib是Python的一个绘图库,支持多种图形的绘制,包括折线图、柱状图、散点图等。以下是Matplotlib的基础用法。
import matplotlib.pyplot as plt
# 创建数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5,
7, 11]
# 绘制折线图
plt.plot(x, y, marker='o')
plt.title("简单折线图")
plt.xlabel("X轴")
plt.ylabel("Y轴")
plt.grid(True)
plt.show()
自定义绘图
Matplotlib提供了丰富的自定义选项,用户可以根据需求调整图形的样式、颜色、标记等。
# 自定义折线图
plt.plot(x, y, color='green', linestyle='--', linewidth=2, marker='o', markersize=8)
plt.title("自定义折线图")
plt.xlabel("X轴")
plt.ylabel("Y轴")
plt.xticks([1, 2, 3, 4, 5])
plt.yticks([0, 2, 4, 6, 8, 10, 12])
plt.grid(True)
plt.show()
Seaborn的高级可视化
Seaborn是基于Matplotlib的高级可视化库,专注于统计图形的绘制,提供更美观的默认样式和更高层次的接口。以下是Seaborn的一些基本应用。
import seaborn as sns
# 使用Seaborn绘制散点图
iris = sns.load_dataset("iris")
sns.scatterplot(data=iris, x="sepal_length", y="sepal_width", hue="species", style="species")
plt.title("鸢尾花数据集的散点图")
plt.show()
复杂图形的绘制
Seaborn提供了多种复杂图形的绘制能力,能够直观地展示数据之间的关系。
# 绘制成对关系图
sns.pairplot(iris, hue='species')
plt.title("鸢尾花数据集成对关系图")
plt.show()
可视化数据分布
Seaborn非常适合用于数据分布的可视化,可以使用分布图、箱线图等展示数据的分布情况。
# 绘制箱线图
sns.boxplot(x='species', y='sepal_length', data=iris)
plt.title("鸢尾花花萼长度的箱线图")
plt.show()
扩展:多图组合示例
通过Matplotlib和Seaborn的结合,可以创建多图组合展示数据的不同特征。
fig, axs = plt.subplots(2, 2, figsize=(10, 8))
# 第一个子图:折线图
axs[0, 0].plot(x, y, marker='o')
axs[0, 0].set_title("折线图")
# 第二个子图:散点图
sns.scatterplot(x="sepal_length", y="sepal_width", hue="species", data=iris, ax=axs[0, 1])
axs[0, 1].set_title("散点图")
# 第三个子图:箱线图
sns.boxplot(x='species', y='sepal_length', data=iris, ax=axs[1, 0])
axs[1, 0].set_title("箱线图")
# 第四个子图:直方图
sns.histplot(data=iris, x='sepal_length', bins=10, kde=True, ax=axs[1, 1])
axs[1, 1].set_title("直方图")
plt.tight_layout()
plt.show()
数据可视化是数据分析的重要环节,Matplotlib和Seaborn为用户提供了强大而灵活的可视化工具。通过有效的图形展示,用户可以更直观地分析数据,为后续的决策提供依据。