java程序员怎么从Python小白变成Python大拿?(八)

61 阅读4分钟

文章8:数据科学与机器学习基础

目标

掌握Python在数据分析和机器学习中的核心工具:NumPy、Pandas、Matplotlib和Scikit-learn,并通过示例理解其应用。


一、NumPy数组操作

1. 数组创建与基础操作

NumPy是科学计算的基础库,提供高性能的多维数组对象​​ndarray​​。

示例:创建数组
import numpy as np

# 一维数组
arr_1d = np.array([1, 2, 3, 4])
print(arr_1d.shape)  # 输出:(4,)

# 二维数组
arr_2d = np.array([[1, 2], [3, 4]])
print(arr_2d.ndim)   # 输出:2(二维)

# 特殊数组
zeros_arr = np.zeros((3, 3))    # 全0数组
ones_arr = np.ones((2, 2))      # 全1数组
eye_arr = np.eye(3)             # 单位矩阵

2. 数组索引与切片

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 索引
print(a[1, 2])  # 输出:6(第二行第三列)

# 切片
print(a[0:2, 1])    # 输出:[2 5]
print(a[:, ::-1])    # 逆序输出列

3. 数组变形与转置

# 改变形状(reshape返回视图)
b = a.reshape(1, 9)
print(b.shape)  # 输出:(1, 9)

# 转置(.T返回视图)
transposed = a.T
print(transposed[0, 1])  # 输出:4(原数组第二行第一列)

# 展平操作
flattened = a.flatten()   # 深拷贝
raveled = a.ravel()       # 浅拷贝(视图)
a[0, 0] = 100
print(raveled[0])        # 输出:100(受原数组影响)

4. 数学运算与广播

# 向量运算
arr = np.array([1, 2, 3])
print(arr * 2)          # 输出:[2 4 6]
print(np.sin(arr))      # 三角函数

# 广播(不同形状数组运算)
a = np.array([[1, 2], [3, 4]])
b = np.array([10, 20])
print(a + b)            # 输出:[[11 22], [13 24]]

二、Pandas数据处理

1. DataFrame与Series

Pandas提供高效的数据结构(​​DataFrame​​​和​​Series​​)和数据清洗工具。

示例:创建与操作数据
import pandas as pd

# 创建DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'London', 'Tokyo']
}
df = pd.DataFrame(data)
print(df)

# 访问列
print(df['Age'])        # 输出年龄列
print(df.Age.mean())    # 计算平均年龄

2. 数据清洗与筛选

# 处理缺失值
df = pd.DataFrame({'A': [1, 2, None], 'B': [4, None, 6]})
print(df.dropna())      # 删除含缺失值的行
print(df.fillna(0))     # 用0填充缺失值

# 筛选数据
filtered = df[df['Age'] > 30]  # 筛选年龄>30的行

3. 合并与分组

# 合并数据
df1 = pd.DataFrame({'Key': ['A', 'B'], 'Value1': [1, 2]})
df2 = pd.DataFrame({'Key': ['A', 'B'], 'Value2': [10, 20]})
merged = pd.merge(df1, df2, on='Key')

# 分组聚合
grouped = df.groupby('City').mean()  # 按城市分组计算均值

三、Matplotlib可视化

1. 基础绘图

Matplotlib是Python最常用的绘图库,支持多种图表类型。

示例:折线图与散点图
import matplotlib.pyplot as plt

# 折线图
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y, label='Sine')
plt.title('Sine Wave')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

# 散点图
plt.scatter(df['Age'], df['Salary'], c='red', marker='o')
plt.title('Age vs Salary')
plt.show()

2. 子图与样式

# 创建子图
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].hist(np.random.randn(1000), bins=30)
axes[1].plot(x, np.cos(x))
plt.tight_layout()
plt.show()

四、Scikit-learn机器学习库

1. 数据集加载与预处理

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

2. 模型训练与评估

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# 训练模型
model = DecisionTreeClassifier()
model.fit(X_train_scaled, y_train)

# 预测与评估
y_pred = model.predict(X_test_scaled)
print("Accuracy:", accuracy_score(y_test, y_pred))

3. 线性回归示例

from sklearn.linear_model import LinearRegression

# 使用波士顿房价数据集
boston = load_boston()
X = boston.data
y = boston.target

# 训练线性回归模型
reg = LinearRegression()
reg.fit(X_train, y_train)
print("Coefficients:", reg.coef_)
print("Intercept:", reg.intercept_)

五、综合案例:鸢尾花分类

1. 数据探索

import seaborn as sns

# 加载数据
iris = sns.load_dataset('iris')

# 查看统计信息
print(iris.describe())

# 绘制散点图矩阵
sns.pairplot(iris, hue='species')
plt.show()

2. 构建分类模型

from sklearn.ensemble import RandomForestClassifier

# 划分数据
X = iris.drop('species', axis=1)
y = iris['species']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 训练随机森林
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)

# 评估
print("Test Accuracy:", model.score(X_test, y_test))

练习题

  1. 使用NumPy创建一个3x3的随机数组,并将其转置后展平为一维数组。
  2. 用Pandas读取CSV文件,删除缺失值并计算某一列的均值。
  3. 用Matplotlib绘制一个柱状图,比较不同类别的销售额。
  4. 使用Scikit-learn的K近邻算法(KNN)对鸢尾花数据集进行分类,并计算准确率。

总结

通过本文,你已掌握:

  • NumPy:高效处理多维数组,支持科学计算。
  • Pandas:灵活的数据清洗与分析工具。
  • Matplotlib:可视化数据分布与关系。
  • Scikit-learn:实现机器学习模型从数据预处理到评估的全流程。

继续深入学习,可以探索更复杂的模型(如神经网络)、高级数据可视化(如Seaborn)和分布式计算框架(如Dask)。现在,你可以尝试用这些工具解决实际问题,如预测房价、分类文本或分析用户行为!