文章目录
- 目录
- 前言
- 一、核心技术全景对比
- 二、各技术深度解析
- 2.1 SQL:数据分析的“数据提取器”
- 核心语法与实战场景
- (1)基础数据查询与过滤
- (2)分组聚合统计
- (3)多表关联查询
- (4)窗口函数(进阶)
- 关键优化点
- 2.2 NumPy:Python数值计算的“底层引擎”
- 核心功能与实战代码
- (1)数组创建与基本操作
- (2)向量化运算(核心优势)
- (3)广播机制(维度适配)
- (4)数值计算(线性代数)
- 2.3 Pandas:结构化数据分析的“瑞士军刀”
- 核心功能与实战代码
- (1)数据读取与结构查看
- (2)数据清洗(核心场景)
- (3)数据筛选与聚合
- (4)数据可视化前置处理
- 2.4 PyTorch:深度学习分析的“核心框架”
- 核心功能与实战代码
- (1)张量操作(与NumPy无缝衔接)
- (2)自动微分(深度学习核心)
- (3)数据加载(适配大规模数据集)
- (4)简单回归模型训练(实战预测)
- (5)GPU加速(提升训练效率)
- 三、技术选型建议
- 四、总结
- 核心要点回顾
目录
前言
若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱:funian.gm@gmail.com
在数据驱动的时代,数据分析技术是从海量数据中挖掘价值的核心工具。SQL作为数据提取的“基石语言”,NumPy/Pandas作为Python数据分析的“双引擎”,PyTorch则是从传统分析迈向深度学习分析的“桥梁”。本文将系统性拆解这四类核心技术的定位、核心能力、实战用法,帮你理清不同场景下的技术选型与落地思路。
一、核心技术全景对比
为了快速建立全局认知,先通过表格对比四类技术的核心特征:
| 技术维度 | SQL | NumPy | Pandas | PyTorch |
|---|---|---|---|---|
| 核心定位 | 关系型数据库数据查询/提取/聚合 | Python数值计算基础库(底层) | Python结构化数据分析库(上层) | 基于Python的深度学习框架(支持动态图) |
| 核心数据结构 | 二维表(Table) | 多维数组(ndarray) | 系列(Series)、数据框(DataFrame) | 张量(Tensor)、数据集(Dataset) |
| 核心优势 | 1. 面向集合操作,高效查询海量结构化数据 2. 标准化语法,跨数据库兼容 3. 支持事务/索引,数据安全 | 1. 底层C实现,数值计算速度极快 2. 广播机制简化维度运算 3. 线性代数/傅里叶变换等数学工具丰富 | 1. 兼容NumPy,支持标签化索引 2. 内置数据清洗/缺失值处理/透视表 3. 便捷的文件读写(CSV/Excel/SQL) | 1. 动态计算图,调试灵活 2. 张量操作兼容NumPy,无缝衔接传统分析 3. 内置自动微分、优化器,支持端到端训练 4. GPU加速,处理大规模高维数据 |
| 适用场景 | 1. 从数据库(MySQL/PostgreSQL)提取数据 2. 多表关联、分组聚合统计 3. 数据过滤与初步清洗 | 1. 大规模数值数组运算(如矩阵运算) 2. 科学计算、信号处理 3. 作为Pandas/PyTorch的底层支撑 | 1. 结构化数据清洗/转换/分析 2. 探索性数据分析(EDA) 3. 报表生成、数据可视化前置处理 | 1. 深度学习建模(分类/回归/聚类) 2. 高维数据(图像/文本)分析 3. 大规模数据集的分布式训练 |
| 学习门槛 | 低(语法简单,聚焦数据操作逻辑) | 中(需理解数组维度、广播机制) | 中低(语法直观,贴近Excel思维) | 高(需掌握深度学习基础、张量运算、GPU调度) |
| 典型操作 | SELECT、GROUP BY、JOIN、窗口函数 | 数组创建/切片、广播、矩阵乘法 | 数据筛选、缺失值填充、分组聚合、透视表 | 张量运算、自动微分、模型定义、数据加载 |
二、各技术深度解析
2.1 SQL:数据分析的“数据提取器”
SQL是与数据库交互的标准语言,所有数据分析的第一步几乎都是通过SQL从数据库中获取目标数据,其核心价值在于高效处理结构化数据的查询与聚合。
核心语法与实战场景
(1)基础数据查询与过滤
最常用的场景:从数据表中提取指定字段,并按条件过滤。
-- 场景:从用户订单表中提取2025年1月的订单数据,仅保留金额>100的记录SELECTorder_id,user_id,order_amount,create_timeFROMorder_tableWHEREcreate_timeBETWEEN'2025-01-01'AND'2025-01-31'ANDorder_amount>100ORDERBYorder_amountDESC;(2)分组聚合统计
分析核心需求:按维度(如用户省份、订单月份)统计指标(如订单数、总金额)。
-- 场景:统计2025年各省份的订单总数、总金额、平均订单金额SELECTuser_province,COUNT(order_id)ASorder_count,-- 订单数SUM(order_amount)AStotal_amount,-- 总金额AVG(order_amount)ASavg_amount-- 平均金额FROMorder_tableWHEREYEAR(create_time)=2025GROUPBYuser_provinceHAVINGorder_count>100;-- 过滤出订单数>100的省份(3)多表关联查询
实际分析中,数据通常分散在多张表(如用户表、订单表、商品表),需通过关联整合。
-- 场景:关联用户表和订单表,统计各性别用户的2025年订单总金额SELECTu.user_gender,SUM(o.order_amount)AStotal_amountFROMuser_table uLEFTJOIN-- 左连接,保留所有用户(即使无订单)order_table oONu.user_id=o.user_idWHEREYEAR(o.create_time)=2025GROUPBYu.user_gender;(4)窗口函数(进阶)
用于“分组内排序/排名”“累计计算”等场景,避免GROUP BY导致的行压缩。
-- 场景:计算每个用户的订单金额排名,以及累计订单金额SELECTuser_id,order_id,order_amount,-- 每个用户内的订单金额降序排名ROW_NUMBER()OVER(PARTITIONBYuser_idORDERBYorder_amountDESC)ASorder_rank,-- 每个用户内的累计订单金额SUM(order_amount)OVER(PARTITIONBYuser_idORDERBYcreate_time)AScumulative_amountFROMorder_tableWHEREYEAR(create_time)=2025;关键优化点
- 对查询字段建立索引(如
create_time、user_id),提升海量数据查询速度; - 避免
SELECT *,只查询需要的字段,减少数据传输量; - 复杂查询可通过“子查询→临时表→CTE(WITH语句)”简化逻辑。
2.2 NumPy:Python数值计算的“底层引擎”
NumPy是Python数据分析的基础,其核心是ndarray多维数组,相比Python原生列表,它的优势在于向量化运算(无需循环)和底层C实现,速度提升10~100倍。
核心功能与实战代码
(1)数组创建与基本操作
importnumpyasnp# 1. 创建数组(常用方式)arr1=np.array([1,2,3,4,5])# 一维数组arr2=np.array([[1,2],[3,4],[5,6]])# 二维数组(3行2列)arr3=np.zeros((2,3))# 全0数组arr4=np.arange(0,10,2)# 步长为2的序列:[0 2 4 6 8]arr5=np.random.randn(3,3)# 标准正态分布的随机数组# 2. 数组属性print("数组维度:",arr2.ndim)# 输出:2print("数组形状:",arr2.shape)# 输出:(3, 2)print("数组元素类型:",arr2.dtype)# 输出:int64# 3. 数组切片(与列表类似,但支持多维)print(arr2[1:,:1])# 取第2行及以后,第1列:[[3], [5]](2)向量化运算(核心优势)
无需写for循环,直接对数组整体运算,效率极高。
# 场景:计算数组中每个元素的平方 + 10arr=np.array([1,2,3,4])result=arr**2+10# 向量化运算print(result)# 输出:[11 14 19 26]# 对比Python原生列表(需循环,效率低)lst=[1,2,3,4]result_lst=[x**2+10forxinlst](3)广播机制(维度适配)
当两个数组维度不同时,NumPy会自动扩展维度,实现运算(无需手动对齐)。
# 场景:二维数组 + 一维数组(广播适配)arr2d=np.array([[1,2],[3,4],[5,6]])arr1d=np.array([10,20])result=arr2d+arr1d# 一维数组广播为3行2列:[[10,20],[10,20],[10,20]]]print(result)# 输出:# [[11 22]# [13 24]# [15 26]](4)数值计算(线性代数)
# 矩阵乘法A=np.array([[1,2],[3,4]])B=np.array([[5,6],[7,8]])C=np.dot(A,B)# 或 A @ Bprint(C)# 输出:# [[19 22]# [43 50]]# 求均值、标准差、求和arr=np.array([[1,2],[3,4]])print("均值:",np.mean(arr))# 2.5print("按列求和:",np.sum(arr,axis=0))# [4 6]print("按行求标准差:",np.std(arr,axis=1))# [0.5 0.5]2.3 Pandas:结构化数据分析的“瑞士军刀”
Pandas基于NumPy构建,专门处理结构化数据(如CSV、Excel、数据库表),其核心是Series(一维带标签)和DataFrame(二维带标签),完美解决了NumPy“无标签索引”“不支持缺失值”的痛点。
核心功能与实战代码
(1)数据读取与结构查看
importpandasaspd# 1. 读取数据(支持CSV/Excel/SQL/JSON等)df=pd.read_csv("order_data.csv")# 读取CSV文件# df = pd.read_excel("order_data.xlsx") # 读取Excel# df = pd.read_sql("SELECT * FROM order_table", conn) # 读取SQL结果# 2. 快速查看数据结构print(df.head(3))# 前3行print(df.info())# 数据类型、缺失值print(df.describe())# 数值字段的统计指标(均值、标准差、分位数等)print(df.columns)# 列名print(df.shape)# 数据形状(行×列)(2)数据清洗(核心场景)
实际数据常存在缺失值、重复值、异常值,Pandas提供一站式清洗工具。
# 1. 处理缺失值df["order_amount"].fillna(df["order_amount"].mean(),inplace=True)# 均值填充金额缺失值df.dropna(subset=["user_id"],inplace=True)# 删除user_id为空的行# 2. 处理重复值df.drop_duplicates(subset=["order_id"],keep="first",inplace=True)# 按订单号去重,保留第一条# 3. 处理异常值(如订单金额>10000视为异常)df=df[df["order_amount"]<=10000]# 过滤异常值# 或替换为99分位数q99=df["order_amount"].quantile(0.99)df["order_amount"]=df["order_amount"].apply(lambdax:q99ifx>q99elsex)# 4. 数据类型转换df["create_time"]=pd.to_datetime(df["create_time"])# 字符串转日期df["user_gender"]=df["user_gender"].astype("category")# 转为分类类型(节省内存)(3)数据筛选与聚合
# 1. 数据筛选(类似SQL的WHERE)# 筛选2025年1月、金额>100的订单df_filtered=df[(df["create_time"].dt.year==2025)&(df["create_time"].dt.month==1)&(df["order_amount"]>100)]# 2. 分组聚合(类似SQL的GROUP BY)# 统计各省份的订单数、总金额df_agg=df.groupby("user_province").agg({"order_id":"count",# 订单数"order_amount":["sum","mean"]# 总金额、平均金额}).reset_index()# 重命名列df_agg.columns=["user_province","order_count","total_amount","avg_amount"]# 3. 透视表(类似Excel数据透视)pivot_df=df.pivot_table(index="user_province",# 行维度columns="user_gender",# 列维度values="order_amount",# 数值aggfunc=["sum","mean"]# 聚合方式)(4)数据可视化前置处理
Pandas可直接对接Matplotlib/Seaborn,快速生成分析图表:
importmatplotlib.pyplotasplt# 统计每月订单数并绘图df["month"]=df["create_time"].dt.to_period("M")# 提取月份monthly_order=df.groupby("month")["order_id"].count()# 绘制折线图monthly_order.plot(kind="line",figsize=(10,5),title="2025年月度订单数")plt.xlabel("月份")plt.ylabel("订单数")plt.show()2.4 PyTorch:深度学习分析的“核心框架”
当传统分析无法挖掘高维/复杂数据(如图像、文本、时序数据)的价值时,PyTorch成为首选——它以张量为核心数据结构(兼容NumPy),支持动态计算图、自动微分,可快速搭建深度学习模型,实现从“描述性分析”到“预测性分析”的升级。
核心功能与实战代码
(1)张量操作(与NumPy无缝衔接)
importtorch# 1. 创建张量t1=torch.tensor([1,2,3])# 一维张量t2=torch.tensor([[1,2],[3,4]])# 二维张量t3=torch.zeros((2,3))# 全0张量t4=torch.randn(3,3)# 标准正态分布张量# 2. 张量属性print("张量维度:",t2.ndim)# 2print("张量形状:",t2.shape)# torch.Size([2, 2])print("设备(CPU/GPU):",t2.device)# cpu# 3. 与NumPy互转arr=np.array([1,2,3])t=torch.from_numpy(arr)# NumPy转张量arr_back=t.numpy()# 张量转NumPy# 4. 张量运算(与NumPy类似)t5=t2+10# 加法t6=t2*2# 乘法t7=torch.matmul(t2,t2)# 矩阵乘法(2)自动微分(深度学习核心)
PyTorch的autograd模块自动计算梯度,无需手动推导,是模型训练的基础。
# 场景:计算函数y = x^2 + 2x + 1在x=3处的梯度x=torch.tensor(3.0,requires_grad=True)# 开启梯度追踪y=x**2+2*x+1# 反向传播计算梯度y.backward()print("x的梯度:",x.grad)# 输出:tensor(8.)(导数为2x+2,x=3时为8)(3)数据加载(适配大规模数据集)
PyTorch的Dataset和DataLoader可高效加载/批量处理数据,适配深度学习训练:
fromtorch.utils.dataimportDataset,DataLoader# 自定义数据集类classOrderDataset(Dataset):def__init__(self,data):self.x=torch.tensor(data[["user_age","order_count"]].values,dtype=torch.float32)# 特征self.y=torch.tensor(data["order_amount"].values,dtype=torch.float32)# 标签(预测目标)def__len__(self):returnlen(self.x)def__getitem__(self,idx):returnself.x[idx],self.y[idx]# 加载数据并创建DataLoader(批量加载、打乱)dataset=OrderDataset(df)dataloader=DataLoader(dataset,batch_size=32,shuffle=True)# 遍历数据批次forbatch_x,batch_yindataloader:print("批次特征形状:",batch_x.shape)# torch.Size([32, 2])print("批次标签形状:",batch_y.shape)# torch.Size([32])break(4)简单回归模型训练(实战预测)
以“基于用户年龄、历史订单数预测订单金额”为例,搭建线性回归模型:
# 1. 定义模型classLinearRegression(torch.nn.Module):def__init__(self,input_dim):super().__init__()self.linear=torch.nn.Linear(input_dim,1)# 输入维度2,输出维度1defforward(self,x):returnself.linear(x)# 2. 初始化模型、损失函数、优化器model=LinearRegression(input_dim=2)criterion=torch.nn.MSELoss()# 均方误差损失(回归任务)optimizer=torch.optim.SGD(model.parameters(),lr=0.001)# 随机梯度下降# 3. 训练模型epochs=100forepochinrange(epochs):total_loss=0.0forbatch_x,batch_yindataloader:# 前向传播outputs=model(batch_x).squeeze()# 压缩维度([32,1]→[32])loss=criterion(outputs,batch_y)# 反向传播+优化optimizer.zero_grad()# 清空梯度loss.backward()# 计算梯度optimizer.step()# 更新参数total_loss+=loss.item()# 打印每轮损失if(epoch+1)%10==0:print(f"Epoch [{epoch+1}/{epochs}], Loss:{total_loss/len(dataloader):.4f}")# 4. 模型预测test_x=torch.tensor([[30,5]],dtype=torch.float32)# 测试数据:30岁,5次历史订单pred_amount=model(test_x)print(f"预测订单金额:{pred_amount.item():.2f}")(5)GPU加速(提升训练效率)
如果有GPU,只需将张量/模型移到GPU即可:
device=torch.device("cuda"iftorch.cuda.is_available()else"cpu")model.to(device)# 模型移到GPU# 训练时,批次数据也移到GPUforbatch_x,batch_yindataloader:batch_x=batch_x.to(device)batch_y=batch_y.to(device)# 后续训练逻辑不变三、技术选型建议
| 分析场景 | 首选技术 | 补充说明 |
|---|---|---|
| 从数据库提取/聚合结构化数据 | SQL | 复杂聚合可结合窗口函数 |
| 小规模数值计算、矩阵运算 | NumPy | 作为Pandas/PyTorch的底层支撑 |
| 结构化数据清洗/EDA/报表生成 | Pandas | 兼容NumPy,可直接对接可视化工具 |
| 高维数据预测/分类(深度学习) | PyTorch | 需先通过Pandas/NumPy完成数据预处理 |
| 混合场景(提取→清洗→建模) | SQL+Pandas+PyTorch | SQL提取数据→Pandas清洗→PyTorch建模 |
四、总结
核心要点回顾
- SQL是数据分析的“入口”,负责从数据库高效提取结构化数据,核心是查询、聚合、关联操作;
- NumPy是Python数值计算的“底层基石”,通过向量化运算和广播机制实现高效数组操作,支撑上层工具;
- Pandas是结构化数据分析的“主力工具”,一站式解决数据清洗、聚合、可视化前置处理,贴近业务分析场景;
- PyTorch是深度学习分析的“核心框架”,以张量为核心,支持自动微分和GPU加速,实现从传统分析到预测建模的升级。