
BIG DATA & AI — 从数据中挖掘价值
大数据是指无法在传统时间内用常规工具进行捕捉、管理和处理的海量、高增长率、多样化的信息资产,其核心价值在于通过分析挖掘实现「预测」和「决策优化」。大数据的核心特征 —— 4V:
| 特征 | 含义 | 例子 |
|---|---|---|
| Volume · 大量 | 数据规模庞大,常以 PB、EB 甚至 ZB 为单位 | 社交媒体每日产生的图文、视频数据 |
| Velocity · 高速 | 数据生成和流转速度极快,需实时或近实时处理 | 金融交易、实时交通监控数据 |
| Variety · 多样 | 结构化(数据库表)、非结构化(图片音频)、半结构化(XML)并存 | 网页、日志、传感器流 |
| Value · 低价值密度 | 海量数据中有用信息占比低,需技术筛选提炼 | 监控视频中仅有几秒关键画面 |
实验室大数据方向包含三条主线:数据挖掘类(用户行为预测、广告推荐、传统机器学习)、人工智能类(情感分类、物体识别、人脸识别)、数据分析类(分类、回归、聚类分析)。毕业去向包括中科院、西电、东北大学、天津大学等名校深造,以及新浪、百度、阿里、腾讯、字节跳动等大厂就业。
高数 / 线代 / 概率统计 + Python / SQL
numpy / pandas / matplotlib 数据处理可视化
scikit-learn 经典算法 + 特征工程
Hadoop / Spark / Flink / Hive 分布式体系
PyTorch 神经网络 / CNN / 大模型
| 课程 | 在数据科学中的作用 |
|---|---|
| 高等数学 | 导数/梯度是机器学习优化的基础(梯度下降)、泰勒展开、积分 |
| 线性代数 | 向量、矩阵运算是数据表示的核心(数据表 = 矩阵);特征值、矩阵分解用于降维(PCA) |
| 概率论与数理统计 | 贝叶斯、分布、假设检验、最大似然 —— 机器学习算法的理论根基 |
不用等学完所有数学再动手 —— 边学边用:看到梯度下降再去翻导数,遇到 PCA 再补矩阵知识,效率最高。
cd / ls / vim / 管道 即可import numpy as np a = np.array([1, 2, 3, 4]) print(a.mean(), a.std(), a.sum()) # 均值 / 标准差 / 和 b = np.arange(12).reshape(3, 4) # 3x4 矩阵 print(b.T) # 转置
import pandas as pd
df = pd.read_csv("data.csv") # 读 CSV
print(df.head(), df.info()) # 预览与概览(含缺失值)
print(df.describe()) # 数值列统计
df = df.dropna() # 删缺失行
df["新列"] = df["A"] + df["B"] # 新增列
df.groupby("类别")["数值"].mean() # 分组聚合
df.sort_values("数值", ascending=False) # 排序
import matplotlib.pyplot as plt import seaborn as sns df["成绩"].hist(bins=20) # 直方图 plt.scatter(df["学习时长"], df["成绩"]) # 散点图 sns.heatmap(df.corr(), annot=True) # 相关性热力图 plt.show()
学完这三件套,找一个真实数据集(如电商订单、天气数据)做一次「读取 → 清洗 → 统计 → 可视化」的完整分析,阶段二就过关了。
| 算法 | 类型 | 一句话原理 |
|---|---|---|
| 线性回归 | 回归 | 拟合一条直线 y = wx + b,用梯度下降找最优 w |
| 逻辑回归 | 分类 | 线性输出套 sigmoid 映射到 0~1,做二分类 |
| KNN | 分类 | 看离它最近的 K 个样本投什么票 |
| 决策树 / 随机森林 | 分类/回归 | 按特征层层切分;多棵树投票更稳 |
| 朴素贝叶斯 | 分类 | 基于贝叶斯定理,假设特征独立 |
| KMeans | 聚类 | 迭代把样本分到最近的簇中心 |
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = DecisionTreeClassifier(max_depth=5)
model.fit(X_train, y_train)
print("准确率:", model.score(X_test, y_test))
进阶:模型评估(准确率/精确率/召回率/F1、混淆矩阵)、交叉验证、正则化防过拟合。
当数据量超过单台电脑能处理的范围(TB 级),就需要分布式技术。实验室大数据方向的核心技术栈:
| 组件 | 作用 | 类比 |
|---|---|---|
| Hadoop HDFS | 分布式文件系统,把大文件切成块存在多台机器 | 把一本厚书拆成多册分给多个书架 |
| MapReduce | 分布式计算模型:Map(分而治之)+ Reduce(汇总) | 先各算各的,再合并结果 |
| Spark | 更快的内存计算引擎(基于 RDD/DataFrame) | MapReduce 的「内存版」,快百倍 |
| Flink | 实时流处理框架 | 边来边算(实时大屏、实时风控) |
| Hive | 数据仓库,把 SQL 翻译成 MapReduce/Spark 任务 | 用 SQL 查大数据,不需要写 Java |
| Kafka | 消息队列,数据管道 | 快递中转站,削峰填谷 |
入门路径:先搞懂单机版 Spark(PySpark),用 pandas 类似的 DataFrame API 处理大数据:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("demo").getOrCreate()
df = spark.read.csv("big.csv", header=True)
df.groupBy("类别").count().show() # 分布式聚合,API 和 pandas 很像
# PyTorch 极简神经网络(示意)
import torch
import torch.nn as nn
model = nn.Sequential(
nn.Linear(784, 128), # 输入 784 维(28x28 图片展开)
nn.ReLU(),
nn.Linear(128, 10), # 输出 10 类
)
# 训练:前向传播 → 计算损失 → 反向传播 → 更新参数(训练循环略)
实验室与 Datawhale 开源组织合作,提供完备的人工智能学习路线和学习指导 —— 这是加入实验室的最大福利之一,跟着 Datawhale 的「吃瓜教程」「动手学深度学习」开源课程走即可。
| 平台 | 说明 |
|---|---|
| Kaggle | 全球最大数据科学竞赛平台,有大量带教程的入门赛(Titanic 等) |
| 阿里天池 | 国内知名竞赛平台,新手赛/新人赛多 |
| DataFountain | 国内数据竞赛平台,部分赛题适合练手 |
| 泰迪杯 / 数学建模 | 校内认可的学科竞赛,实验室学长有丰富经验 |
题目:有两张表 Person(PersonId, FirstName, LastName)和 Address(PersonId, City, State),要求查出每个人的姓名与住址;没有住址的人也要显示(地址列显示 NULL)。
SELECT p.FirstName, p.LastName, a.City, a.State FROM Person p LEFT JOIN Address a ON p.PersonId = a.PersonId;
💡 数据分析场景下,也可以用 pandas 的 merge 完成同样的事:pd.merge(person, address, on="PersonId", how="left")。SQL 和 pandas 的 JOIN 思想完全一致。
题目:给定乘客信息(舱位、年龄、性别等),预测每位乘客是否生还(1/0)。这是全世界公认的机器学习入门第一题,数据免费可下载,在线提交评测。
import pandas as pd
train = pd.read_csv("train.csv")
print(train.head())
print(train.isnull().sum()) # 看哪些列有缺失
# 选特征:Pclass(舱位)、Sex(性别)、Age(年龄)、SibSp、Parch、Fare(票价)
features = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare"]
X = train[features].copy()
X["Sex"] = X["Sex"].map({"male": 0, "female": 1}) # 文本转 0/1
X["Age"] = X["Age"].fillna(X["Age"].median()) # 缺失值用中位数填充
y = train["Survived"]
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
print("验证集准确率:", model.score(X_val, y_val)) # 0.8 左右即及格
submission.csv(PassengerId + Survived)→ 上传 Kaggle 看排名。💡 提升方向:特征工程(加 Title 称谓特征、家庭人数)、尝试逻辑回归/决策树对比、交叉验证。Kaggle 有大量新手教程(Titanic 教学版),卡住就查。