news 2026/10/15 4:51:16

【数据分析技术】SQL+NumPy+Pandas+PyTorch解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【数据分析技术】SQL+NumPy+Pandas+PyTorch解析

文章目录

  • 目录
    • 前言
    • 一、核心技术全景对比
    • 二、各技术深度解析
      • 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则是从传统分析迈向深度学习分析的“桥梁”。本文将系统性拆解这四类核心技术的定位、核心能力、实战用法,帮你理清不同场景下的技术选型与落地思路。

一、核心技术全景对比

为了快速建立全局认知,先通过表格对比四类技术的核心特征:

技术维度SQLNumPyPandasPyTorch
核心定位关系型数据库数据查询/提取/聚合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+PyTorchSQL提取数据→Pandas清洗→PyTorch建模

四、总结

核心要点回顾

  1. SQL是数据分析的“入口”,负责从数据库高效提取结构化数据,核心是查询、聚合、关联操作;
  2. NumPy是Python数值计算的“底层基石”,通过向量化运算和广播机制实现高效数组操作,支撑上层工具;
  3. Pandas是结构化数据分析的“主力工具”,一站式解决数据清洗、聚合、可视化前置处理,贴近业务分析场景;
  4. PyTorch是深度学习分析的“核心框架”,以张量为核心,支持自动微分和GPU加速,实现从传统分析到预测建模的升级。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 10:58:00

一键部署:基于MGeo的智能地址解析API服务搭建

一键部署&#xff1a;基于MGeo的智能地址解析API服务搭建 在物流、电商、政务等场景中&#xff0c;地址解析是一个高频需求。传统方案要么依赖第三方API&#xff08;存在数据泄露风险&#xff09;&#xff0c;要么需要自建AI团队&#xff08;成本高昂&#xff09;。今天我要分享…

作者头像 李华
网站建设 2026/10/13 0:46:42

基于YOLOv10的安全帽检测系统(YOLOv10深度学习+YOLO数据集+UI界面+Python项目源码+模型)

一、项目介绍 项目背景: 在工业生产、建筑工地等高风险环境中&#xff0c;佩戴安全帽是保障工人安全的重要措施。传统的人工检查方法效率低且容易遗漏&#xff0c;而基于计算机视觉的安全帽检测系统能够实时、自动地检测工人是否佩戴安全帽&#xff0c;从而有效提升安全管理水…

作者头像 李华
网站建设 2026/10/15 11:35:39

OpCore Simplify智能硬件检测:新手也能轻松配置完美黑苹果

OpCore Simplify智能硬件检测&#xff1a;新手也能轻松配置完美黑苹果 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCore配置而烦恼…

作者头像 李华
网站建设 2026/10/13 3:52:21

当论文季撞上黑科技:这款AI工具如何成为本硕学子的“隐形导师”?

又到了一年中最令人心跳加速的季节——论文写作季。图书馆的座位开始紧俏&#xff0c;咖啡销量直线上升&#xff0c;而无数本科和硕士生的电脑屏幕上&#xff0c;光标在空白的文档开头不停闪烁。你是否也在经历这样的时刻&#xff1a;面对庞大的文献海洋不知从何下手&#xff0…

作者头像 李华
网站建设 2026/10/14 18:00:25

AI赋能学术:新一代工具如何革新本科与硕士论文写作体验

引言&#xff1a;当学术研究遇上智能时代深夜的图书馆里&#xff0c;键盘敲击声此起彼伏。无数本科生和研究生正为他们的学位论文奋斗着——文献综述的浩如烟海、数据分析的复杂繁琐、格式调整的细致入微&#xff0c;这些挑战构成了学术之路上的必经关卡。然而&#xff0c;在人…

作者头像 李华