ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

零基础学数据分析:SQL+Python+京东电商实战路线

零基础学数据分析:SQL+Python+京东电商实战路线 很多人学 Python 数据分析第一步就迈错了先去刷 Python 语法从print(Hello World)一直学到面向对象三个月过去还是不知道一份 CSV 文件拿到手里该干什么。同样常见的另一个极端是觉得自己要搞数据分析就必须先学会机器学习动不动就上 scikit-learn、神经网络结果连 SQL 都不熟练取数都要靠同事帮忙。如果零基础想把数据分析真正学会、并且能找到一份相关的工作最高性价比的组合不是 Python 全家桶而是 SQL Python 一个完整的业务实战项目。本文要写的就是这套组合怎么学、怎么练、怎么把京东电商数据做成一个能写在简历上的实战项目。我给你的核心判断是SQL 负责取数Python 负责清洗、分析和可视化业务项目负责把两者串起来。先把这条主线搞清楚再谈其他。1. 这篇文章真正要解决的问题零基础学数据分析最常见的困惑其实不是难而是乱。打开搜索引擎Python 教程一大堆SQL 教程也一大堆但没有人告诉你先学哪个、学到什么程度、怎么用起来。更尴尬的情况是自己跟着教程写了几百行代码最后发现面对真实业务数据时还是无从下手。订单表怎么关联重复数据怎么处理销售额下降了到底该查哪个维度这篇文章要解决的就是三个问题第一为什么 SQL 是数据分析的基本功。很多 Python 教程会弱化 SQL甚至会告诉你用 pandas 可以替代数据库查询。这个观点对小型数据集成立放到实际工作中就是灾难。真实企业的数据基本都在数据库里你的第一步永远是SELECT而不是pd.read_csv()。第二Python 在数据分析中到底负责什么。Python 的价值不只是写爬虫和机器学习它在数据分析链路中真正不可替代的是数据清洗、统计分析、可视化以及最终的报告自动化。这部分我们用一个京东电商实战项目来演示。第三从零基础到能独立完成项目最短路径是什么。我推荐的方式是先掌握 SQL 核心查询再掌握 Python 的 pandas matplotlib然后立刻投入一个完整项目。整个周期可以控制在 8 到 12 周每天投入 1 到 2 小时。读完这篇文章你会获得一条清晰的学习路线、一份可以直接跟着操作的代码示例以及一套能帮你避开常见坑的排查清单。2. SQL 与 Python数据分析的双引擎2.1 SQL 在数据分析中扮演的角色SQLStructured Query Language是结构化查询语言也是数据分析师最常用的取数工具。你可能听过很多关于 SQL 的评价但在实际工作中它的定位非常朴素从数据库里把你想要的数据查出来。这个环节看起来简单却最影响效率。如果你想分析京东电商平台的销售情况需要分析华东区 2025 年第三季度的订单明细数据就在库里怎么把订单表、用户表、商品表、区域表关联起来怎么过滤、怎么聚合、怎么处理空值这就是 SQL 要解决的。有一条经验值得记住能用 SQL 完成的聚合不要等数据拿到 Python 里再处理。数据库是专门为这类操作优化的你把数据原样拉出来再在 pandas 里 groupby不仅慢还容易出错。2.2 Python 在数据分析中扮演的角色SQL 擅长的是查询和聚合但一旦数据被拿出来了后面的工作就交给 Python。Python 在数据分析链路里解决的是这些问题数据清洗处理空值、去重、格式转换、字段拆分。统计分析求均值、中位数、同比环比、用户分层。可视化用折线图、柱状图、散点图把数据里的规律呈现出来。自动化把整个分析逻辑封装成脚本每天自动跑输出日报。一个更直白的对比是这样环节负责工具核心操作取数SQLSELECT、JOIN、GROUP BY、WHERE清洗Python pandasdropna、fillna、drop_duplicates分析Python pandasgroupby、merge、pivot_table可视化Python matplotlib / seabornlineplot、barplot、scatter结论人工看图表、写分析报告2.3 两者如何衔接以京东电商数据分析为例最常见的衔接方式是先用 SQL 把明细数据从数据库中取出来导出为 CSV 或者直接在 Python 中执行 SQL 查询然后用 pandas 做进一步清洗和分析最后用 matplotlib 出图。很多教程会让你只学 Python、不学 SQL理由是pandas 可以读 Excel、读 CSV也能 join、groupby。但你要知道真实企业的数据不会以 CSV 的形式放在你桌面上它们分布在线上数据库里SQL 就是你和这些数据之间的唯一通道。入门阶段就养成SQL 取数 Python 分析的习惯对你的职业发展帮助很大。3. 环境准备与前置条件既然是零基础教程环境部分我会尽量讲清楚。下面这些工具每一个都值得装好因为它们会陪伴你整个数据分析生涯。3.1 需要安装的工具清单工具作用是否必须Python 3.9数据分析主语言是Jupyter Notebook / VSCode交互式写代码环境是MySQL 8.x练习 SQL 和存储数据是Navicat / DBeaver可视化操作数据库推荐pandas matplotlib seaborn核心数据分析库是pymysql / SQLAlchemyPython 连接 MySQL 的驱动是3.2 Python 环境安装要点Python 安装没有想象中复杂这里有一个经验性建议与其手动管理多版本不如直接装 Anaconda。Anaconda 自带 Python、Jupyter 以及大量数据分析库适合零基础阶段快速上手。安装完成后打开命令行输入python --version能正常输出版本号就说明环境没问题。如果你更习惯轻量方式也可以只装官方 Python然后用 pip 装依赖pip install pandas matplotlib seaborn pymysql sqlalchemy3.3 数据库环境要点SQL 的学习离不开一个能实际运行的数据库。MySQL 是使用最广泛的选择安装时注意设置好 root 密码并记住它后面项目要用。安装完成后建议再装一个 DBeaver 或 Navicat这样你可以一边写 SQL一边直观地看到表结构和查询结果。3.4 准备一份模拟数据很多初学者在练习时找不到合适的数据集。这里推荐两个思路一是使用电商平台的开放模拟数据。例如 GitHub 上常见的retail_sales数据集、Kaggle 上的电商订单数据都可以用来练手。本文中的京东电商实战项目会自动生成一份包含用户、商品、订单、区域四个表的模拟数据你也可以用类似结构替换成任何一份电商数据。二是自己构造小数据。先把表建好插入几十条记录测试各种 SQL 语法。这种方式的好处是你对数据的来龙去脉最清楚排查问题时更轻松。提醒使用任何数据集前都要确认数据来源合规、不涉及个人隐私和商业机密。本项目的演示数据为模拟数据不代表真实京东业务数据。4. 京东电商数据分析项目核心流程拆解京东电商数据分析项目是一个典型的数据分析全流程案例。它的业务背景是我们拿到了一份电商平台的销售数据包含用户注册信息、商品分类、订单明细、区域分布等表需要通过数据回答几个业务问题输出分析报告。4.1 项目目标与业务问题项目开始之前先明确分析目标。本项目的目标是回答以下四大类业务问题销售趋势分析按月统计订单量、销售额、客单价观察整体走势和季节性规律。用户价值分析分析新老用户的订单占比计算老用户的复购率找到高价值用户群体。商品分析分析不同品类、不同价格区间的商品销量与销售额找到核心品类。区域分析按地区查看销售贡献找出增长最快的区域。4.2 项目整体流程整体流程可以拆成六个阶段阶段主要任务使用工具1. 数据获取从数据库导出订单、用户、商品等表SQL / pymysql2. 数据清洗去重、缺失值处理、字段类型转换Python pandas3. 数据加工新增月份、季度、年龄段等派生字段Python pandas4. 统计分析分组汇总、对比分析、RFM 分析Python / SQL5. 可视化折线图、柱状图、饼图展示结论matplotlib / seaborn6. 结论输出形成分析报告给出业务建议Markdown / PPT4.3 为什么用京东电商作为实战项目电商行业的数据形态非常有代表性它同时具备以下特点多表关联订单表和用户表、商品表之间都有外键关系强迫你练习 JOIN。数据质量问题多有重复订单、有用户未填地区、有时间格式不统一逼你做清洗。分析维度丰富时间、地域、品类、用户人群每个维度都能延伸出一套分析。业务结论可落地销售额涨跌、品类销售占比、复购率直接对应运营决策。这些特点决定了电商数据是最适合零基础练习的项目也是面试中最常见的情景题。5. 完整示例从 SQL 到 Python 的京东电商分析现在进入本文最实操的部分。我会按照SQL 取数 - Python 清洗 - Python 分析 - Python 可视化的链路给你一个完整可运行的示范。示例 1建立数据库表并导入模拟数据首先在 MySQL 中建立四张表用户表、商品表、区域表、订单表。以下 SQL 可以直接在 DBeaver 或 Navicat 中执行。-- 文件路径mysql_init.sql -- 创建数据库并指定字符集 CREATE DATABASE IF NOT EXISTS jd_analysis DEFAULT CHARSET utf8mb4; USE jd_analysis; -- 用户表 CREATE TABLE t_user ( user_id INT PRIMARY KEY COMMENT 用户ID, user_name VARCHAR(50) COMMENT 用户名, gender VARCHAR(10) COMMENT 性别, age INT COMMENT 年龄, reg_date DATE COMMENT 注册日期 ) ENGINEInnoDB COMMENT 用户表; -- 商品表 CREATE TABLE t_product ( product_id INT PRIMARY KEY COMMENT 商品ID, product_name VARCHAR(100) COMMENT 商品名称, category VARCHAR(50) COMMENT 商品品类, price DECIMAL(10,2) COMMENT 商品单价 ) ENGINEInnoDB COMMENT 商品表; -- 区域表 CREATE TABLE t_region ( region_id INT PRIMARY KEY COMMENT 区域ID, region_name VARCHAR(50) COMMENT 区域名称 ) ENGINEInnoDB COMMENT 区域表; -- 订单表 CREATE TABLE t_order ( order_id INT PRIMARY KEY COMMENT 订单ID, user_id INT COMMENT 用户ID, product_id INT COMMENT 商品ID, region_id INT COMMENT 区域ID, order_date DATETIME COMMENT 下单时间, quantity INT COMMENT 购买数量, amount DECIMAL(10,2) COMMENT 订单金额, status VARCHAR(20) COMMENT 订单状态 ) ENGINEInnoDB COMMENT 订单表;创建完成后你可以手动插入一些测试数据也可以使用 Python 脚本批量生成模拟数据。实际项目中这一步通常由 PDI数据开发或运维同事准备好分析人员只需要做 SELECT 查询。但作为学习者建议自己插入一次数据加深对表结构和关联关系的理解。示例 2用 SQL 完成月度销售趋势统计现在我们已经有了四张表第一步分析任务是按月统计销售额、订单量和客单价。-- 文件路径sql_monthly_sales.sql -- 月度销售趋势销售额、订单量、客单价 SELECT DATE_FORMAT(o.order_date, %Y-%m) AS month, COUNT(DISTINCT o.order_id) AS order_cnt, SUM(o.amount) AS total_amount, ROUND(SUM(o.amount) / COUNT(DISTINCT o.order_id), 2) AS avg_amount FROM t_order o WHERE o.status 已完成 GROUP BY DATE_FORMAT(o.order_date, %Y-%m) ORDER BY month;这段 SQL 的逻辑是DATE_FORMAT(o.order_date, %Y-%m)把下单时间截取到月份用于按月分组。COUNT(DISTINCT o.order_id)统计订单量加 DISTINCT 是为了防止重复订单被重复计算。SUM(o.amount)统计销售额。ROUND(SUM(o.amount) / COUNT(DISTINCT o.order_id), 2)客单价即平均每个订单的金额。WHERE o.status 已完成过滤掉未支付、取消的订单。执行后你会得到类似下面的结果monthorder_cnttotal_amountavg_amount2025-0132085600.00267.502025-0228772100.00251.222025-03456128700.00282.24从结果中你可以直观看到销售额随月份的变化这个结果放在 Excel 里也能看但当你需要进一步在 Python 中做聚类、做透视、做图表时SQL 的结果就需要交给 Python 了。示例 3用 pandas 读取 SQL 结果并做数据清洗在 Python 中读取 MySQL 数据最直接的方式是使用pandas.read_sql。这里以 SQLAlchemy 连接 MySQL 为例。# 文件路径data/load_data.py import pandas as pd from sqlalchemy import create_engine # 创建数据库连接 engine create_engine( mysqlpymysql://root:your_passwordlocalhost:3306/jd_analysis?charsetutf8mb4 ) # 读取订单表 df_order pd.read_sql(SELECT * FROM t_order WHERE status 已完成, conengine) # 读取用户表、商品表、区域表 df_user pd.read_sql(SELECT * FROM t_user, conengine) df_product pd.read_sql(SELECT * FROM t_product, conengine) df_region pd.read_sql(SELECT * FROM t_region, conengine) # 数据质量检查查看缺失值、数据类型、行数 print(订单表形状:, df_order.shape) print(订单表缺失值统计:) print(df_order.isnull().sum()) print(订单表数据类型:) print(df_order.dtypes)这一段代码的目标是完成数据装载和初步体检。实际数据往往会有这些问题订单金额为 NULL。用户年龄为 0显然是缺失值或异常值。下单时间是字符串而不是 datetime 类型。订单状态有各种写法比如已完成完成success需要统一。下面这段代码演示常见的清洗操作。# 文件路径data/clean_data.py import pandas as pd def clean_order_data(df_order: pd.DataFrame) - pd.DataFrame: 订单数据清洗 df df_order.copy() # 1. 去除完全重复的行 df df.drop_duplicates() # 2. 金额为空时用 0 填充也可以删除视业务规则而定 df[amount] df[amount].fillna(0) # 3. 数量不能小于 1异常值直接剔除 df df[df[quantity] 1] # 4. 订单日期转 datetime df[order_date] pd.to_datetime(df[order_date]) # 5. 派生字段下单月份 df[order_month] df[order_date].dt.strftime(%Y-%m) return df df_order_clean clean_order_data(df_order) print(清洗后订单表形状:, df_order_clean.shape) print(订单月份范围:, df_order_clean[order_month].min(), -, df_order_clean[order_month].max())示例 4用户复购率分析分析了销售趋势后我们来看一个更体现业务价值的分析用户复购率。复购率的定义是在统计周期内下单次数大于等于 2 的用户数 / 总下单用户数。# 文件路径analysis/user_repurchase.py import pandas as pd # 假设 df_order_clean 已经是清洗后的订单数据 # 计算每个用户的订单数 user_order_cnt ( df_order_clean .groupby(user_id)[order_id] .nunique() .reset_index() .rename(columns{order_id: order_cnt}) ) # 用户分组1次 / 2-3次 / 3次以上 def user_type(cnt): if cnt 1: return 1次用户 elif 2 cnt 3: return 2-3次用户 else: return 3次以上用户 user_order_cnt[user_type] user_order_cnt[order_cnt].apply(user_type) # 统计各用户类型的人数与占比 repurchase_stat ( user_order_cnt .groupby(user_type) .size() .reset_index(nameuser_num) ) repurchase_stat[user_ratio] repurchase_stat[user_num] / repurchase_stat[user_num].sum() print(repurchase_stat)复购率是电商运营非常看重的指标。如果1 次用户占比过高说明用户的首次体验或者留存策略可能有问题如果3 次以上用户占比较高则说明平台的用户黏性不错。这个分析结果可以直接给到运营团队做参考。示例 5商品品类销售分析与可视化最后我们做一次品类销售分析并用 matplotlib 画出销售额占比图。# 文件路径analysis/category_analysis.py import pandas as pd import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号 # 订单表关联商品表 df_order_detail df_order_clean.merge( df_product[[product_id, category]], onproduct_id, howleft ) # 各品类销售额 category_sales ( df_order_detail .groupby(category)[amount] .sum() .sort_values(ascendingFalse) .reset_index() ) print(各品类销售额: ) print(category_sales.head()) # 绘制柱状图 plt.figure(figsize(10, 6)) plt.bar(category_sales[category], category_sales[amount], color#4C72B0) plt.title(各品类销售额分布) plt.xlabel(品类) plt.ylabel(销售额元) plt.xticks(rotation45) plt.tight_layout() plt.savefig(output/category_sales.png, dpi150) plt.show()注意中文图表显示需要设置字体。如果你用的是 macOS 或 LinuxSimHei 可能不存在可以改为系统中已安装的中文字体比如WenQuanYi Zen Hei或Noto Sans CJK SC。6. 运行结果与效果验证以上代码分别涉及 SQL 查询和 Python 脚本。运行顺序建议如下。6.1 运行 SQL在 DBeaver 或 Navicat 中执行sql_monthly_sales.sql能看到按月分组的数据表格。判断标准是每个月有对应的订单量和销售额。客单价都在合理范围内比如几十到几千之间。没有某个月份出现空数据和总量为 0。如果出现没有任何数据的情况大概率是订单表本身没有数据或者status过滤条件写错比如状态字段实际值是success而不是已完成。6.2 运行 Python 数据清洗依次执行load_data.py和clean_data.py。正常情况下会打印出订单表形状、缺失值统计、清洗后的数据范围。如果报错ModuleNotFoundError: No module named pymysql说明依赖没装全执行下面的命令安装pip install pymysql sqlalchemy pandas matplotlib6.3 运行可视化脚本category_analysis.py成功运行后会在output目录生成category_sales.png。打开图片应该能看到不同品类的销售额柱状图。如果图片上中文显示为方框说明系统缺少对应字体需要按照上一节提到的方法更换字体设置。6.4 如何判断项目是否完成一个完整的数据分析项目不能只停留在代码跑通了。你需要对着输出结果问自己三个问题这些数据在业务上合理吗比如销售额有没有异常高或异常低的月份每个指标之间是否互相印证比如订单量涨了销售额却降了可能是客单价出了问题如果我向老板汇报能不能用三句话讲清楚结论能回答这三个问题才算真正做完一个项目。7. 零基础学数据分析的常见问题与排查思路结合大量学习者的反馈我在下面整理了一份高频问题清单。问题现象可能原因排查方式解决方案Python 安装后python命令找不到未配置环境变量在命令行执行where python重新安装时勾选 Add to PATH或手动添加环境变量Jupyter 无法启动安装不完整或端口被占用尝试更换端口启动执行jupyter notebook --port8899pandas 读中文数据乱码文件编码不是 UTF-8检查文件原始编码使用pd.read_csv(data.csv, encodinggbk或utf-8)尝试matplotlib 图片中文显示方框缺少中文字体查看系统字体列表设置plt.rcParams[font.sans-serif]为可用中文字体SQL 查询结果与预期不一致JOIN 条件或 WHERE 条件有误先运行单表查询再逐步增加条件分步排查先查明细再聚合pandas.read_sql连接超时数据库地址、账号、密码有误先用 DBeaver 或命令行测试连接检查连接串中的 host、port、用户名密码分组聚合结果出现大量 NaN多表 join 后匹配不上检查关联字段是否存在确认主外键字段名一致必要时用howleft并观察数量变化7.1 SQL 新手最容易犯的错误SQL 初学阶段的错误集中在这几类第一SELECT 的列名写错。比如表里的字段是order_date你写成了order_time数据库会直接报错。这种情况不要慌先用DESC t_order;查看表结构。第二GROUP BY 与 SELECT 列不匹配。MySQL 5.7 及以下版本要求 SELECT 中的非聚合列必须出现在 GROUP BY 中否则查询结果不可控。建议统一遵守这个规范即使高版本数据库允许也不要依赖这种宽松写法。第三JOIN 条件缺失。两张表如果只是简单的FROM a, b而没有ON条件会得到笛卡尔积行数会爆炸。数据量小的时候不明显数据量大时会把数据库拖垮。7.2 pandas 学习中的典型误区pandas 是 Python 数据分析中最重要的库但新手经常陷入两个极端。一个极端是只记函数名不理解数据结构。pandas 的核心是 Series 和 DataFrame尤其是 DataFrame 的行是样本、列是字段这个直觉必须建立。如果你每一步都在百度pandas 怎么按列求和效率会很低建议先花两小时系统看完 pandas 的数据结构文档再开始做项目。另一个极端是拿到数据就开始写代码不做数据探索。很多初学者一旦拿到订单数据第一时间就去做 groupby不先看df.info()、df.describe()、df.head()结果方向从一开始就错了。先探索、再清洗、再分析这是铁律。8. 最佳实践与工程建议代码能跑通只是第一步。如果想要你的数据分析能力从学生水平提升到业务可用水平下面几条经验值得认真对待。8.1 先学会用 SQL 做聚合再学 Python 做分析很多初学者对 SQL 有误解觉得 SQL 就是select * from 表名把数据全部导出来再用 Python 处理。在小数据量上这样没问题但一旦面对千万级订单表直接把全表数据拉到 Python 里会非常慢而且你会把大量本来数据库能完成的工作重复做一遍。我的建议是SQL 能算的尽量在 SQL 里算完。至少把 WHERE 过滤、JOIN 关联、GROUP BY 聚合这三件事放在 SQL 里完成。Python 只负责 SQL 不好处理的清洗逻辑、统计建模和可视化。8.2 项目文件结构要规范很多新手做项目时一个untitled.ipynb打天下所有代码和数据混在一起。三个月以后自己都找不到之前写的脚本在哪里。推荐用下面的目录结构组织你的数据分析项目jd_analysis_project/ │ ├── data/ # 原始数据与清洗后数据 │ ├── raw/ │ └── clean/ │ ├── sql/ # SQL 查询脚本 │ ├── create_tables.sql │ └── query_*.sql │ ├── analysis/ # Python 分析和可视化脚本 │ ├── load_data.py │ ├── clean_data.py │ ├── category_analysis.py │ └── user_repurchase.py │ ├── output/ # 可视化图片和结果文件 │ └── category_sales.png │ └── README.md # 项目说明8.3 数据清洗要有留痕习惯在真实业务中你很难保证别人信任你的分析结果。如果老板问这个月销售额为什么比上月低了 10%而你回答数据是我清洗过的那是不够的。你需要能回答出一共多少行原始数据清除了多少条重复记录填充了多少个缺失值剔除了多少条异常订单把这些过程记录在代码注释里或者直接输出一条清洗日志。这不仅是职业习惯也是你面试时证明分析能力的最好素材。8.4 可视化要服务于业务结论很多人画图是为了好看但数据分析中的图是为了回答业务问题。画图之前先问自己这张图想向读者传达什么结论如果结论是华东区销售额增长最快那么你的图应该用一张对比柱状图把这几个区域的增长率展示出来而不是堆一大堆没有业务含义的散点图。8.5 不要把分析停留在描述描述性分析告诉你发生了什么比如销售额 3 月份比 2 月份高 20%。但企业更希望分析告诉你为什么发生和下一步怎么办。刚开始你可以从下面几个角度往上靠时间上和去年同比怎么样地域上哪些区域贡献了大头商品上是爆款拉动还是普涨用户上是新客贡献还是老客复购每个问题往前推一层你的分析报告质量会上一个台阶。9. 下一步学习建议从零基础到能独立完成京东电商数据分析项目我的推荐学习节奏是第一阶段第 1 到 2 周掌握 SQL 核心语法。重点是 SELECT、WHERE、ORDER BY、GROUP BY、HAVING、JOIN。把《SQL 基础教程》前几章的习题做一遍能独立完成单表和多表查询即可。不需要学存储过程、触发器、索引优化这些内容。第二阶段第 3 到 4 周掌握 pandas 核心操作。重点是 DataFrame 的读取、清洗、筛选、聚合、合并。配合可视化库 matplotlib 画折线图、柱状图、散点图、饼图。第三阶段第 5 到 6 周做 1 到 2 个完整项目。可以先用本文的京东电商模拟数据练手跑通整个流程再换一个数据集独立完成。如果能找到真实业务场景的数据在合规前提下效果会更好。第四阶段第 7 周以后补充统计基础和工作技能。比如假设检验、A/B 测试、业务指标体系搭建或者学习如何使用 BI 工具如 FineBI、Power BI做报表这些都会让数据分析能力更加完整。总的来说SQL 熟练掌握 pandas 熟练使用 两个完整项目 清晰的业务分析思维是零基础转数据分析比较稳妥的成长路径。京东电商实战项目的意义不在于代码本身有多复杂而在于它让你走通了从数据库到结论汇报的全过程。这一步迈过去后面无论是学机器学习、做用户画像还是转向数据产品方向都会顺很多。建议把本文的代码示例收藏备用遇到环境问题或者下一步不知道干什么的时候再回头看看这份学习框架。数据分析是一门手艺手熟的唯一路径是多练没有捷径。
返回列表