首页 > 编程开发 > python数据分析 >
-
数据分析必备工具:Python vs Excel vs SQL——什么时候用什么工具?
第3章 数据分析必备工具:Python vs Excel vs SQL——什么时候用什么工具?
我刚入行做数据分析时,遇到过一个让我崩溃的场景:运营给了我100万行的销售数据,让我统计每个地区的月度销量。我用Excel打开,直接卡了5分钟,好不容易打开后,做数据透视表又卡了10分钟,最后电脑直接蓝屏了。后来我用SQL从数据库里只取出近3个月的10万行数据,再用Python做分析,总共花了10分钟就搞定了。那时候我才明白:没有“最好”的工具,只有“最适合场景”的工具。
一、Excel:新手入门首选,小数据快速分析的王者
适用场景(我用Excel的真实场景)
数据量小(10万行以内,超过就卡);
快速做报表、画图表给老板看;
非技术人员(运营、市场)自己就能用;
需要交互性强的报表(比如带切片器的动态报表)。
实战案例:用Excel做月度销售动态报表(踩过的坑全告诉你)
步骤1:用Power Query清洗数据(比手动快10倍)
坑点:运营给的Excel里有合并单元格、空值、重复行,手动清洗要1小时,用Power Query10分钟搞定;
操作:数据→从表格/区域→进入Power Query编辑器→删除重复行→填充空值→拆分列→关闭并上载。
拓展知识:Power Query是Excel的隐藏神器,能处理100万行数据,比直接用Excel单元格操作快N倍,新手一定要学!
步骤2:做数据透视表(快速统计多维度数据)
操作:选中数据→插入→数据透视表→把“地区”拖到行,“月份”拖到列,“销量”拖到值;
拓展知识:加切片器(分析→插入切片器→选“商品类别”),点击切片器就能快速切换不同类别的销量,老板看报表时直接点就行,不用改公式。
步骤3:用条件格式高亮异常值(一眼看出问题)
操作:选中销量列→开始→条件格式→数据条/色阶/图标集;
比如用红色图标集标记销量最低的10%,老板一眼就能看到哪个地区销量差。
Excel的优缺点(真实体验)
| 优点 | 缺点 |
|---|---|
| 上手快,不用写代码 | 大数据量(>10万行)卡到崩溃 |
| 可视化图表美观,交互性强 | 复杂分析(比如用户分群)做不了 |
| 非技术人员也能上手 | 重复工作不能自动化(比如每月做同样的报表,要手动重复操作) |
拓展知识:Excel进阶技巧(新手必学)
Power Pivot:处理多表关联分析,比如把销售数据和用户数据关联起来,分析不同用户群体的消费习惯;
VBA宏:自动化重复工作,比如每月自动生成报表,不用手动复制粘贴;
XLOOKUP函数:比VLOOKUP好用100倍,支持反向查找、多条件查找,Excel 365以上版本才有。
二、SQL:大数据取数神器,数据库里挖数据的必备技能
适用场景(我用SQL的真实场景)
从数据库取数(公司的数据基本都存在MySQL、PostgreSQL、SQL Server里);
大数据量查询(100万行以上,比Excel快100倍);
复杂多表关联分析(比如销售数据+用户数据+商品数据关联);
定期自动取数(比如每天自动取前一天的销售数据)。
实战案例:从MySQL数据库取近3个月销售数据(代码逐行讲解)
代码:
sql
-- 1. 选择需要的字段:地区、月份、总销量
SELECT
region AS 地区,
DATE_FORMAT(sale_date, '%Y-%m') AS 月份, -- 把日期格式转成“2024-01”
SUM(sale_amount) AS 总销量 -- 统计每个地区每个月的总销量
FROM
sales -- 从sales表取数据
WHERE
sale_date >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH) -- 取近3个月的数据
GROUP BY
region, DATE_FORMAT(sale_date, '%Y-%m') -- 按地区和月份分组
ORDER BY
月份 ASC, 总销量 DESC; -- 按月份升序,总销量降序排序
逐行讲解(新手必懂)
SELECT region AS 地区:
SELECT:选择要查询的字段;
AS 地区:给字段起别名,方便后面看结果,中文别名要用双引号或不加(不同数据库规则不同,MySQL可以直接用中文);
拓展知识:SELECT *表示选择所有字段,但是不推荐,因为会取很多没用的数据,慢且占内存。
DATE_FORMAT(sale_date, '%Y-%m') AS 月份:
DATE_FORMAT:MySQL的日期格式化函数,把2024-01-05转成2024-01;
拓展知识:不同数据库的日期函数不同,比如PostgreSQL用TO_CHAR(sale_date, 'YYYY-MM'),SQL Server用FORMAT(sale_date, 'yyyy-MM')。
WHERE sale_date >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH):
WHERE:过滤条件,只取近3个月的数据;
CURDATE():获取当前日期,DATE_SUB(CURDATE(), INTERVAL 3 MONTH):当前日期减去3个月;
踩坑经验:忘记加WHERE条件,会把整个表的数据都取出来,1000万行数据直接把数据库查崩,老板直接找你谈话!
GROUP BY region, DATE_FORMAT(sale_date, '%Y-%m'):
GROUP BY:按字段分组,和SUM、COUNT等聚合函数一起用;
拓展知识:HAVING是分组后的过滤条件,比如HAVING 总销量 > 10000,只显示总销量超过10000的地区。
ORDER BY 月份 ASC, 总销量 DESC:
ORDER BY:排序,ASC升序(默认),DESC降序;
拓展知识:可以按多个字段排序,先按月份升序,再按总销量降序。
SQL的优缺点(真实体验)
优点 缺点
大数据量查询快,1000万行数据秒出结果 可视化差,查询结果要导出到Excel或Python画图
复杂多表关联分析轻松搞定 上手比Excel难,要学语法
可以自动化取数(用定时任务) 不能做复杂的机器学习分析
拓展知识:SQL进阶技巧(新手必学)
窗口函数:做排名、累计求和,比如ROW_NUMBER() OVER(PARTITION BY region ORDER BY 总销量 DESC),给每个地区的销量排名;
LIMIT:限制查询结果的行数,比如LIMIT 10,只取前10行,避免取太多数据卡崩;
JOIN:多表关联,比如SELECT * FROM sales JOIN users ON sales.user_id = users.user_id,把销售数据和用户数据关联起来。
三、Python:复杂分析与自动化的终极工具
适用场景(我用Python的真实场景)
批量处理文件(比如处理100个Excel文件,手动要1天,Python10分钟搞定);
复杂分析(比如用户分群、销量预测、机器学习);
自动化报表(比如每天自动生成报表,发送邮件给老板);
数据可视化(比Excel更灵活,画复杂图表)。
实战案例:批量处理100个Excel销售文件(代码逐行讲解)
场景:运营给了100个Excel文件,每个文件是一个地区的销售数据,要合并成一个总表,统计每个地区的总销量。
代码:
python
# 1. 导入需要的库
import pandas as pd
import os
# 2. 获取当前目录下所有Excel文件的路径
# 列表推导式:遍历当前目录下的所有文件,只取.xlsx结尾的
file_paths = [f for f in os.listdir('.') if f.endswith('.xlsx')]
# 3. 批量读取Excel文件,存到列表里
dfs = []
for file in file_paths:
# 读取Excel文件,sheet_name='Sheet1'
df = pd.read_excel(file, sheet_name='Sheet1')
# 从文件名里提取地区(比如“北京销售数据.xlsx”提取“北京”)
region = file.split('销售数据')[0]
# 给数据加一列“地区”
df['地区'] = region
# 把当前文件的数据加到列表里
dfs.append(df)
# 4. 合并所有DataFrame成一个总表
total_df = pd.concat(dfs, ignore_index=True)
# 5. 统计每个地区的总销量
region_sales = total_df.groupby('地区')['销量'].sum().reset_index()
# 6. 保存结果到Excel
region_sales.to_excel('各地区总销量.xlsx', index=False)
print('批量处理完成!结果已保存到“各地区总销量.xlsx”')
逐行讲解(新手必懂)
import pandas as pd:
导入Pandas库,数据分析的核心库,专门处理表格数据;
拓展知识:import os是操作系统库,用来获取文件路径、创建文件夹等。
file_paths = [f for f in os.listdir('.') if f.endswith('.xlsx')]:
列表推导式,Python的语法糖,比for循环简洁;
os.listdir('.'):获取当前目录下的所有文件和文件夹;
f.endswith('.xlsx'):只取.xlsx结尾的Excel文件;
踩坑经验:如果文件在子目录里,用os.walk('.')遍历所有子目录。
region = file.split('销售数据')[0]:
split('销售数据'):把文件名按“销售数据”拆分,比如“北京销售数据.xlsx”拆成['北京', '.xlsx'],取第一个元素就是“北京”;
拓展知识:如果文件名格式不统一,用正则表达式提取,比如import re; region = re.findall('(.*?)销售数据', file)[0]。
total_df = pd.concat(dfs, ignore_index=True):
pd.concat:把多个DataFrame合并成一个,相当于Excel的合并工作表;
ignore_index=True:重置索引,避免合并后索引重复;
拓展知识:如果要按列合并,用pd.merge,相当于SQL的JOIN。
region_sales = total_df.groupby('地区')['销量'].sum().reset_index():
groupby('地区'):按地区分组;
['销量'].sum():统计每个地区的总销量;
reset_index():把分组后的索引变成列,方便保存到Excel;
拓展知识:可以同时统计多个指标,比如total_df.groupby('地区').agg(总销量=('销量','sum'), 平均销量=('销量','mean')).reset_index()。
Python的优缺点(真实体验)
优点 缺点
批量处理文件、自动化,节省大量时间 上手难,要学代码,非技术人员用不了
复杂分析、机器学习轻松搞定 写代码要调试,容易出错
可视化灵活,画复杂图表(比如热力图、树图) 运行慢?不,用Pandas矢量化操作比Excel快100倍
拓展知识:Python数据分析常用库(新手必装)
Pandas:处理表格数据,相当于Python版的Excel+SQL;
Matplotlib/Seaborn:画图表,相当于Python版的Excel图表;
Scikit-learn:机器学习,做预测、分类、聚类;
SQLAlchemy:Python连接数据库,不用写SQL就能取数。
四、总结:什么时候用什么工具?一张表给你讲明白
| 工具 | 适用场景 | 数据量 | 上手难度 | 核心优势 |
|---|---|---|---|---|
| Excel | 小数据快速分析、可视化报表、非技术人员 | <10万行 | 易 | 上手快,交互性强 |
| SQL | 数据库取数、大数据查询、复杂多表关联 | >10万行 | 中 | 大数据查询快,取数灵活 |
| Python | 批量处理、复杂分析、自动化、机器学习 | 无限制 | 难 | 功能强大,能做Excel和SQL做不了的事 |
新手学习路径(我就是这么学的)
1.先学Excel:掌握Power Query、数据透视表、条件格式,能快速做报表,满足日常工作需求;
2.再学SQL:掌握基本查询、多表关联、窗口函数,能从数据库取数,处理大数据;
3.最后学Python:掌握Pandas、Matplotlib,能做复杂分析和自动化,进阶成高级分析师。
终极原则:用最少的时间解决问题
如果用Excel能10分钟搞定,就别用Python;
如果用SQL能快速取数,就别导出到Excel处理;
工具是为了解决问题,不是为了炫技——我见过很多分析师只会用Python,处理小数据时比用Excel慢10倍,完全没必要。
下一节,我们就开始学习Python的核心语法,为后面的数据分析打下基础!
转载请注明出处:https://www.xin3721.com/pythonNew/python49604.html










