数据科学入门教程

第一章:什么是数据科学

1.1 定义与范畴

数据科学是一门利用统计方法、机器学习算法从数据中提取知识和洞察的跨学科领域。

核心组成:

领域贡献
统计学假设检验、回归分析、概率分布
计算机科学编程、数据库、算法
领域知识业务理解、问题定义
数据工程数据采集、清洗、管道

1.2 数据科学工作流程

问题定义 → 数据采集 → 数据清洗 → 探索分析 → 建模 → 评估 → 部署 → 监控

CRISP-DM 方法论:

  • 业务理解:明确目标和关键问题
  • 数据理解:收集初步数据,识别问题
  • 数据准备:清洗、转换、特征工程
  • 建模:选择算法,训练模型
  • 评估:验证模型效果
  • 部署:上线应用并持续监控

第二章:Python 数据处理

2.1 NumPy 基础

import numpy as np

# 创建数组
arr = np.array([1, 2, 3, 4, 5])
matrix = np.zeros((3, 4))        # 3×4 零矩阵
rng = np.random.randn(100)       # 100 个标准正态随机数

# 数组运算
arr * 2              # 逐元素乘法
arr.mean()           # 均值
arr.std()            # 标准差
arr[arr > 3]         # 布尔索引

# 线性代数
A = np.array([[1, 2], [3, 4]])
np.dot(A, A)         # 矩阵乘法
np.linalg.inv(A)     # 逆矩阵

2.2 Pandas 数据处理

import pandas as pd

# 读取数据
df = pd.read_csv('students.csv')
df = pd.read_excel('scores.xlsx')
df = pd.read_json('data.json')

# 数据概览
df.head()             # 前 5 行
df.info()             # 数据类型与非空计数
df.describe()         # 统计摘要
df.shape              # (行数, 列数)

# 数据选择
df['name']                     # 单列
df[['name', 'score']]          # 多列
df.loc[df['score'] > 80]       # 条件筛选
df.iloc[0:5, 1:3]              # 位置索引

# 数据清洗
df.dropna()                    # 删除缺失值
df.fillna(df.mean())           # 填充缺失值
df.drop_duplicates()           # 删除重复行
df['score'] = df['score'].astype(int)  # 类型转换

# 分组聚合
df.groupby('class')['score'].mean()
df.groupby('class').agg({
    'score': ['mean', 'max', 'min'],
    'name': 'count'
})

# 透视表
pd.pivot_table(df, values='score', index='class', 
               columns='subject', aggfunc='mean')

2.3 数据可视化

import matplotlib.pyplot as plt
import seaborn as sns

# 基础图表
plt.figure(figsize=(10, 6))
plt.plot(x, y, 'o-', label='成绩趋势')
plt.xlabel('时间')
plt.ylabel('分数')
plt.title('学生成绩变化')
plt.legend()
plt.grid(True, alpha=0.3)
plt.savefig('chart.png', dpi=150)
plt.show()

# Seaborn 高级图表
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 散点图
sns.scatterplot(data=df, x='study_hours', y='score', 
                hue='class', ax=axes[0, 0])

# 直方图
sns.histplot(data=df, x='score', kde=True, ax=axes[0, 1])

# 箱线图
sns.boxplot(data=df, x='class', y='score', ax=axes[1, 0])

# 热力图(相关系数)
sns.heatmap(df.corr(), annot=True, cmap='RdBu_r', 
            center=0, ax=axes[1, 1])

plt.tight_layout()
plt.show()

第三章:统计分析基础

3.1 描述统计

指标公式/说明用途
均值Σx / n数据中心趋势
中位数排序后中间值抗异常值
众数出现最多次分类数据
方差Σ(x-μ)² / n数据离散程度
标准差√方差同方差,同单位
偏度> 0 右偏, < 0 左偏分布对称性
峰度> 0 尖峰, < 0 平坦尾部厚度

3.2 概率分布

常见分布:

  • 正态分布 N(μ, σ²):自然界最普遍,68-95-99.7 法则
  • 二项分布 B(n, p):n 次独立伯努利试验的成功次数
  • 泊松分布 P(λ):单位时间/空间内事件发生次数
  • 均匀分布 U(a, b):等概率分布

中心极限定理:

无论总体分布如何,当样本量足够大时,样本均值的分布趋近于正态分布。

3.3 假设检验

from scipy import stats

# t 检验:两组成绩是否有显著差异
group_a = [85, 90, 78, 92, 88]
group_b = [75, 80, 82, 70, 77]
t_stat, p_value = stats.ttest_ind(group_a, group_b)
print(f"t = {t_stat:.3f}, p = {p_value:.4f}")
# p < 0.05 → 拒绝原假设,两组有显著差异

# 卡方检验:分类变量是否相关
contingency = pd.crosstab(df['class'], df['passed'])
chi2, p, dof, expected = stats.chi2_contingency(contingency)

# 相关性检验
r, p = stats.pearsonr(df['study_hours'], df['score'])
print(f"Pearson r = {r:.3f}, p = {p:.4f}")

第四章:机器学习入门

4.1 监督学习

回归(预测连续值):

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

# 准备数据
X = df[['study_hours', 'attendance', 'homework_avg']]
y = df['final_score']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"RMSE: {mean_squared_error(y_test, y_pred)**0.5:.2f}")
print(f"R²: {r2_score(y_test, y_pred):.3f}")

分类(预测离散标签):

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

4.2 无监督学习

from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(df_features)

# K-Means 聚类
kmeans = KMeans(n_clusters=3, random_state=42, n_init=10)
df['cluster'] = kmeans.fit_predict(X_scaled)

# 可视化聚类结果
sns.scatterplot(data=df, x='feature_1', y='feature_2', 
                hue='cluster', palette='viridis')

4.3 模型评估

指标适用任务说明
MSE / RMSE回归预测误差
R²回归解释方差比例
Accuracy分类正确率
Precision分类查准率
Recall分类查全率
F1分类精确率与召回率调和均值
AUC-ROC分类区分正负样本能力

第五章:实战项目

5.1 学生成绩预测

  • 采集学生出勤、作业、测验数据
  • 特征工程(学习时长、进步趋势)
  • 建立回归模型预测期末成绩
  • 分析影响成绩的关键因素

5.2 校园数据可视化

  • 食堂人流量分析
  • 图书馆使用率统计
  • 学生通勤时间分布
  • 交互式 Dashboard 展示

5.3 文本分析

  • 校园论坛评论情感分析
  • 课程评价关键词提取
  • 词云生成

学习资源