数据科学入门教程
第一章:什么是数据科学
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 文本分析
- 校园论坛评论情感分析
- 课程评价关键词提取
- 词云生成
学习资源
- Kaggle Learn:https://www.kaggle.com/learn(免费微课程)
- DataCamp:https://www.datacamp.com/(交互式数据科学课程)
- Python 数据科学手册:https://github.com/jakevdp/PythonDataScienceHandbook
- StatQuest:https://www.youtube.com/@statquest(统计与 ML 视频教程)
- 和鲸社区:https://www.heywhale.com/(中文数据科学社区)