文章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))
练习题
- 使用NumPy创建一个3x3的随机数组,并将其转置后展平为一维数组。
- 用Pandas读取CSV文件,删除缺失值并计算某一列的均值。
- 用Matplotlib绘制一个柱状图,比较不同类别的销售额。
- 使用Scikit-learn的K近邻算法(KNN)对鸢尾花数据集进行分类,并计算准确率。
总结
通过本文,你已掌握:
- NumPy:高效处理多维数组,支持科学计算。
- Pandas:灵活的数据清洗与分析工具。
- Matplotlib:可视化数据分布与关系。
- Scikit-learn:实现机器学习模型从数据预处理到评估的全流程。
继续深入学习,可以探索更复杂的模型(如神经网络)、高级数据可视化(如Seaborn)和分布式计算框架(如Dask)。现在,你可以尝试用这些工具解决实际问题,如预测房价、分类文本或分析用户行为!