
1. 模考概览五模到底考了些什么牛客模考五模数据分析笔试是我在2023年秋招季做过最接近真实大厂笔试的一套模拟卷。没有那种故意刁难人的脑筋急转弯也没有堆到天上的机器学习公式更多是在考察一个基础扎实、逻辑清楚、能用数据回答业务问题的人。如果你正在准备数据分析岗的笔试这套卷子无论作为自测还是查漏补缺都值得认真过一遍。很多同学拿到卷子第一反应是“知识点怎么这么杂”。确实从SQL查询到概率统计从Pandas清洗到业务常识看起来像大杂烩。但静下心来看它其实在模拟真实工作中“从取数到分析到得出结论”的完整链路。笔试不是考你会背多少公式而是看你在有限时间内能否快速理解数据、发现异常、给出靠谱的判断。五模的价值恰恰就在这它逼着你像正式工作一样去思考问题而不是机械刷题。1.1 为什么说五模值得认真做一遍经常有人问我牛客的模考真的有必要参加吗我的看法是如果你是第一次接触数据分析笔试五模可以作为摸底考试如果你已经刷了很多题五模则是很好的节奏训练场。原因有三。第一五模的题目设计贴近真实笔试。它不是单纯从题库里抽题而是按难度梯度排列前面是一些热身的统计概念题中间夹杂SQL和Python编程题后面放业务场景题。这种顺序设计和大厂笔试很像能提前让你感受“前松后紧”的时间分配怎么把控。第二它的判分逻辑能帮你暴露短板。我参加完五模之后发现自己SQL部分得分很高但业务分析题几乎没拿到几点。这个反馈比任何自测都真实。很多人只刷SQL和Python忽略了业务题结果正式笔试时被一道“DAU下降了怎么排查”问懵。五模会精准地把你知识的盲区暴露出来。第三它的错题解析比较完整。每道题做完之后除了知道对错还能看到详细的解题思路。尤其是SQL题会给出多种写法对比这比自己在草稿纸上瞎琢磨高效得多。我当时做完一遍之后又专门把错题重新抄了一遍基本能覆盖大部分常见考点。1.2 题型分布与作答时间参考五模的题型分布大概可以整理成下面这个表格我根据自己的答题记录回忆了一下具体比例可能和最新版本稍有出入但整体框架是稳定的。模块大概题量建议时间主要考察点单选题10题左右20分钟统计学概念、概率计算、业务常识SQL编程2-3题30分钟表连接、聚合、窗口函数Python编程2题左右25分钟Pandas清洗、数据处理逻辑分析思维案例2题左右30分钟指标体系、业务诊断、AB实验解读开放性问题1题15分钟分析框架、沟通表达从这个分布能看出SQL和Python加起来占了接近一半时间但这并不意味着统计和业务题不重要。恰恰相反单选和分析题往往是拉开分数的关键。SQL题大家都能写但业务题能不能答到点子上直接决定了你能不能进入下一轮面试。我自己的习惯是拿到卷子先花两分钟浏览一遍全部题目优先做有把握的题难题先跳过。五模里我遇到一道概率题一开始没思路果断先放一边等把后面的SQL写完再回头推结果冷静下来之后很快做出来了。这个策略在限时考试里非常实用建议你也试试。2. 核心考点拆解笔试背后的能力模型数据分析笔试表面考的是知识点背后考的其实是三种能力数据处理能力、统计学素养、业务理解能力。五模的题目基本都围绕这几条线展开。如果你能理解出题人为什么这么出那么做其他卷子也会轻松很多。2.1 统计学基础假设检验和AB实验统计学在数据分析笔试里是送分题和送命题的结合体。送分是因为基础概念就那么几个送命则是因为题设往往会改几个关键条件稍微没看清就掉进坑里。五模里出现过这样一类题给出一组实验数据实验组转化率10%对照组转化率8%样本量分别是5000和5000问这个差异是否显著。选项里会有“显著因为提高2%”“不显著因为样本量太小”“需要计算p值才能判断”等。很多人看到10%比8%高直接选了“显著”但做AB实验不能只看绝对值必须考虑波动范围。正确的思路是做一个两样本比例z检验。先计算合并比例 p ̂ (501 401) / (5000 5000) 0.0901然后算标准误 SE sqrt(p ̂ * (1 - p ̂) * (1/5000 1/5000)) ≈ 0.00573z (0.10 - 0.08) / 0.00573 ≈ 3.49对应p值远小于0.05可以说显著。但要注意如果样本量变成500呢差距同样2%z值就不到1.5了结论就变成不显著。所以考试的核心不是算不算得准而是你知不知道样本量会影响结论的可靠性。除了假设检验五模还喜欢考置信区间、正态分布、中心极限定理、概率条件等基本概念。这些东西看起来简单但如果不理解底层逻辑换个场景就不会做了。比如有一道题问“重复抽样10次置信区间的宽度会怎么变”很多人记不清置信区间和样本量的关系直接选错。我的建议是把这些统计概念整理成一张表各自配一个实际案例考前过一遍。2.2 SQL窗口函数是分水岭SQL部分是整个笔试中最能拉开差距的模块。基础题大家都差不多无非是select、where、group by、join的组合。但到了“连续登录3天”“求各部门工资排名前2名”“求次日留存率”这类题目窗口函数就成了标配。五模正好考到了这些经典场景。窗口函数和group by最本质的区别在于group by会把多行聚合成一行而窗口函数不会减少行数它会在每一行上计算结果。这个区别一旦搞混很多题就会写错。我见过不少人在做“求每个用户最近一次登录时间”时先用group by user_id取了max(login_date)再想关联原表取其他字段结果数据对不上。如果改用row_number() over (partition by user_id order by login_date desc)一行就能解决。学习窗口函数不是背语法而要理解它的执行顺序。SQL的逻辑顺序大致是from - where - group by - having - select - order by窗口函数在select阶段执行。这意味着你不能在where里直接用窗口函数结果必须用子查询包一层。五模里有一道题要求在筛选“每个用户登录次数大于5”的基础上再计算人均登录次数很多人试图在where后面写count(*) over ...直接报错就是因为没有理解这一层。我在准备阶段用牛客的SQL题库刷了差不多80道题把sum() over、rank()、lag()、lead()、first_value()几个常用函数都练熟了。笔试时遇到窗口函数的题基本不用想太久手就很自然地写出来了。如果你现在还在纠结“为什么我加了over以后结果没变”建议先停下手里的题把窗口函数的执行原理搞清楚。2.3 Python与Excel清洗和可视化的实战组合五模的Python编程题不会让你手写机器学习模型更多是考察你用Pandas处理真实数据的能力。比如给一个CSV里面有缺失值、重复值、格式不规范的字段让你清洗成可以分析的表格。有一道题至今印象很深数据里的“收入”列同时存在“12000”“1.2万”“8000元”三种格式要求统一成数值型。这个题目很接地气因为现实中的数据就是这么脏。用Pandas的话可以先把“万”替换成“*10000”再用正则把多余的符号去掉最后astype(float)。import pandas as pd df pd.read_csv(income_data.csv) df[收入_clean] df[收入].astype(str) df[收入_clean] df[收入_clean].str.replace(元, ) df.loc[df[收入_clean].str.contains(万), 收入_clean] ( df.loc[df[收入_clean].str.contains(万), 收入_clean] .str.replace(万, ) .astype(float) * 10000 ) df[收入_clean] df[收入_clean].astype(float)这段代码的思路是先把单位统一成“元”再转成float整个过程注意运算优先级。考试中如果时间紧张也可以先处理少数异常值保证主流程能跑通。改卷时更看重你的分析思路是否清晰而不是代码能不能一次通过。Excel在笔试里出现的频率其实没有Python高但很多公司在笔试时会提供Excel导入功能或者要求你手写一些Excel公式。五模里有一道题问“VLOOKUP和INDEXMATCH各自的适用场景”这种题考察的不是公式本身而是你能否根据数据量、列顺序、查询性能做选择。VLOOKUP适合单列精确匹配INDEXMATCH更灵活适合返回列位置可能变化的情况。至于可视化Tableau或Matplotlib不是笔试重点但你会不会用图表表达结论会影响业务题的回答质量。2.4 业务分析思维从指标到决策业务分析题是五模中最容易被低估的部分。很多人觉得“只要会算数就行”实际上一道好的业务题往往没有标准答案它考察的是你有没有分析框架。五模里有一道典型的题某产品的次日留存率连续三周下滑让你从数据角度分析原因。如果只是回答“可能是产品体验变差”基本拿不到分。你需要拆解成几个层面数据口径是否变化、新增用户质量是否下降、特定渠道是否出了问题、竞品是否有活动影响、产品大版本更新后是否有回归bug。我习惯用“维度拆解法”来答这类题先看整体和分维度整体下滑不一定所有用户都下滑可能只是某个渠道、某个操作系统、某个城市引起的。然后看指标构成比如次日留存率 次日回访用户数 / 当日新增用户数分子降了还是分母涨了如果分母涨得很快但次日回访没跟上说明新增质量可能在下滑。最后再看外部因素比如最近是否有节日、舆情、应用商店推荐等。写答案的时候要把你的分析逻辑一步步写清楚不要只给结论。阅卷人或者面试官最怕看到“我觉得应该提高用户粘性”这种空话他们想知道你为什么这么说下一步要去验证什么。五模在这方面的评分标准比较严格你写出的每个判断都需要有数据支撑或推导过程。3. 四道经典考题复盘模拟题的价值不在“做过”而在“复盘”。这一节我挑了几道五模里我觉得最有代表性的题按照我自己当时的答题过程来拆解从读题到写答案把思路完整捋一遍。3.1 SQL题连续登录N天的用户怎么算题目给定用户登录表 login(user_id, login_date)只有两列要求统计连续登录3天及以上的用户数。看到这个题第一反应是“这不就是经典的连续问题”。但真上手写很多人会卡在怎么定义“连续”。我最开始写的是用user_id分组然后对login_date排序再用date_sub(login_date, row_number)生成组标记最后按user_id和组标记聚合。逻辑是如果用户在连续日期登录那么日期减去行号得到的日期是相同的。例如1号、2号、3号登录行号分别是1、2、3减去后都是0号所以是一组。with t1 as ( select user_id, login_date, date_sub(login_date, interval row_number() over(partition by user_id order by login_date) day) as grp from login ), t2 as ( select user_id, grp, count(*) as cnt from t1 group by user_id, grp ) select count(distinct user_id) as user_cnt from t2 where cnt 3;这里最关键的是理解date_sub和row_number的组合逻辑。如果你之前只背过“连续问题三件套”建议亲手推导一遍这样才能应付变种题。比如题目改成“连续三天有登录记录但允许中间有一天缺失”解法就完全不一样了。另一个常被问到的点是如果登录表里有重复行比如同一天同一个用户登录多次怎么办。处理方式也很简单先对user_id, login_date去重再跑上面的逻辑。笔试时不写去重这一步很可能会算出错误的用户数。3.2 概率统计题转化率提升真的显著吗这道题我在前面的考点部分提到过这里展开说一下完整的答题步骤。题目是某活动上线后实验组和对照组各10000人实验组转化1200人对照组转化1000人问活动是否显著提升了转化率。表面上看转化率从10%提升到12%提升20%但问题在于这个差异有多少是由抽样误差造成的。我的思路是先用比例检验公式计算z值然后根据z值判断p值。公式上p1 0.12p2 0.10合并比例 p (12001000)/(1000010000) 0.11标准误 SE sqrt(0.110.89(1/100001/10000)) ≈ 0.00442z (0.12-0.10)/0.00442 ≈ 4.52p值远小于0.05所以可以说统计显著。但如果题目没有给样本量只给了转化率那就没法直接判断。我记得有个选项就是“无法判断因为缺少样本量信息”这就是坑。很多人看到提升2%就选“显著”忽略了AB实验最基本的逻辑任何观测差异都可能来自随机波动必须检验。到了业务题还会问你怎么看“统计显著但业务不显著”的情况。比如提升0.1%但在百万用户规模下很显著每个用户多贡献0.01元可能覆盖不了开发成本。这时候你要能区分统计显著和实际显著性五模往往会在开放题里埋这种陷阱。3.3 业务题DAU下跌10%从哪开始查这道题让我当时写了一整屏文字最后得分还不低原因是分析框架比较完整。题目不复杂某App DAU连续一周下跌累计跌幅超过10%需要你给出排查思路。我第一时间把“DAU下跌”拆成两部分存量用户回访率下降新增用户数量下降。DAU 当日登录的存量用户 当日新增用户两个部分都可能出问题。随后按几个维度交叉定位渠道来源、操作系统、App版本、地域、时间点。如果只看整体大概率被平均掩盖了真实原因。为了显得有数据思维我还在答案里写了几个具体要查的SQL思路。比如对比本周和上周每日新增用户数新增下降的话继续看渠道明细再看活跃用户的次日/7日回访率如果回访率掉得很快重点怀疑产品体验和推送策略。我还会建议查看事件日志确认是否是某个大版本更新后发生崩溃导致用户卸载。这类题没有标准答案但你要让阅卷人看到你有“假设-验证”的意识。不要一上来就写“优化产品”而是给出可执行的排查步骤。写到最后我补了一句“如果数据支持可以用同期对比法排除季节性因素”这种细节会加分。3.4 编程题用Pandas清洗金额字段前面提到的收入格式混乱题其实是五模Python题的第一小问。第二小问是“清洗后计算各城市的平均收入”这时候如果第一问清洗做不好第二问就直接崩。我当时写代码时踩了一个小坑直接用pd.to_numeric替换整列遇到“1.2万”就会报错。后来改成先判断是否含“万”再统一单位问题才解决。处理这类脏数据不能指望一个函数搞定而是先观察数据分布再分类处理。df[amount] df[amount].astype(str).str.replace(元, ) df[amount] df[amount].apply(lambda x: float(x.replace(万, )) * 10000 if 万 in x else float(x)) result df.groupby(城市)[amount].mean().reset_index()这道题在改卷时会有多个测试用例比如异常为空、缺失值、负值等。如果只用简单astype遇到缺失值会直接报错。一个稳健的做法是清洗后统一fillna再计算。我的代码里通常会在最后加一句检查有没有非数值残留。笔试环境不像IDE那么智能写完要自己在脑海里过一遍边界条件。4. 那些年我在模考里踩过的坑所有经验都是用一次次的低分换来的。五模最大的价值之一就是让我在正式笔试之前把坑都踩了一遍。这一节我列出了四个最常见的错误你可以对照着检查自己有没有类似问题。4.1 审题不仔细格式和口径全错第一坑是“看不懂题”其实不是看不懂是看太快。五模里有道题问的是“同比”我当成“环比”做算出的结果完全不对。更常见的是要求输出字段名和顺序比如SQL题要求查询结果包含user_id、cnt结果我多输出一个字段判题系统直接判错。数据口径同样容易踩雷。比如“次日留存率”在不同公司有不同定义有的是“新增用户中第二天登录的比例”有的是“当日活跃用户中第二天仍活跃的比例”。如果题目没有明确说明默认使用最通用的定义但最好在答案里提一句“按新增用户口径计算”。这样即使和预期不一致至少能体现你的谨慎。解决办法也很简单动笔前先把题目读两遍把关键条件用笔圈出来尤其是时间范围、去重方式、输出列名。笔试不像平时写代码有无限次调整机会多花几十秒读题反而能节省后面的纠错时间。4.2 SQL窗口函数用错结果直接翻车SQL写错的情况五花八门但窗口函数用错是最亏的。因为我总结过窗口函数题在笔试里占比非常高一旦用错整题覆没。常见错误有partition by后面写了多个字段导致分组粒度不对order by方向写反rank、row_number、dense_rank三种排序方式混用。五模里有一道题要求“按部门统计薪资排名前二的员工”如果区别不了rank和dense_rank遇到并列薪资就会出错。比如两个员工都是第二名用rank会跳过第三名用dense_rank不会这直接影响取前二的结果。另外窗口函数的别名在过滤条件里不能用必须包一层子查询。很多人第一次写SQL报错就卡在这里最后只能乱蒙一个group by。建议把错误信息仔细看完绝大多数SQL错误提示已经把问题说清楚了。4.3 统计检验忽略前提条件统计题最容易丢分的地方不是计算而是“该不该用这个检验”。五模里有道题给出了两组数据的分布图很明显是偏态分布但选项里全是t检验。题目问“以下哪种方法更合适”如果机械套t检验就忽略了正态性前提。正确的做法是先看样本量是否足够大能不能用中心极限定理近似正态再看是否满足方差齐性。即使理论上可以用t检验也要在答案里写一句“在样本量较大的情况下t检验近似稳健”。这类细节虽然不影响最终答案但能体现你真的理解方法背后的前提而不是背公式。另一个常见坑是多重比较问题。如果同时比较了20个城市的效果即使每个城市单独检验都不显著也可能因为偶然出现“假阳性”。这种情况下可以考虑做多重检验校正比如Bonferroni校正。笔试不一定让你做校正计算但提到这个思路会让你的答案显得更专业。4.4 时间分配失衡前松后紧时间管理是个老问题但五模把这个问题放大了。我第一遍做单选时太较真遇到一道概率题抠了十分钟结果后面的SQL写得很仓促最后一道开放题只剩两行字。成绩出来前面那道概率题我做对了但后面的分析题几乎没分总体分数惨不忍睹。正确的策略应该是先保证做完再追求正确率。我后来调整成“先易后难每道题限时”的节奏单选每题最多2分钟超过就标记跳过SQL每题最多15分钟业务题至少留15分钟来写完整框架。这样即使中间有题目拿不准也不会影响后面的大题。尤其要注意的是开放题往往只要写一个分析思路就能拿分性价比很高。与其花大量时间抠一道难题不如把开放题写满。五模的开放题给了很多空白行哪怕你只写了几个分析方向也能得到基础分。5. 从五模到正式笔试备考策略与工具清单五模做完不是结束而是调整备考方向的第一步。我结合自己的经历整理了一份从模考到正式笔试的冲刺思路包含复习节奏、工具准备和临场建议供你参考。5.1 考前两周的冲刺节奏如果距离正式笔试还有两周建议按三阶段安排。第一周做专项突破根据五模暴露的薄弱点来补。比如SQL窗口函数不熟就每天刷10道相关题目直到能独立写出“连续登录”“排名”“累计求和”三类题。统计概念模糊就回头翻基础教材把假设检验、中心极限定理、置信区间这些章节重看一遍。这个过程不要贪多每天只攻一个专题。第二周开始模拟训练。每周至少做两套完整笔试题严格计时模拟真实考试界面。做完之后一定要复盘错题把每道题背后的知识点记录到错题本上。不要只记答案要记“我当时为什么错”这样下次遇到类似场景才会形成条件反射。最后两三天不要再刷新题了回归基础概念和常用代码模板。我一般会把SQL的窗口函数、Pandas的清洗套路、统计学常用公式都重新手写一遍确保肌肉记忆还在。这个阶段最重要的是稳住心态不要因为一套模拟卷考砸了就乱了节奏。5.2 本地环境与常用工具准备正式笔试前先把本地环境准备好能省去很多意外情况。牛客这类在线IDE虽然不需要装环境但考试时可能会卡顿最好能提前熟悉它的运行模式。如果你的笔试允许本机运行可以在电脑上装好Python和Jupyter提前导入常用的pandas、numpy、scipy库。数据查询方面我习惯用DBeaver连MySQL和PostgreSQL它比命令行直观很多也能快速导数据。笔试时如果让你写SQL可以用它提前测试语法尤其是窗口函数的执行结果验证一下自己的写法对不对。Excel也别丢很多公司笔试会提供Excel操作题快捷键和常用函数一定要熟练。Python清洗数据时我建议准备一个简洁的模板。比如统一读文件的路径、处理缺失值的函数、格式转换的常用正则表达式。把这些写成自己的“代码片段”正式笔试时能节省大量思考时间。不过要注意笔试环境通常不允许使用外部API或联网所以模板不要太依赖网络资源。5.3 临场发挥的几条实用建议最后聊几条临场的小经验来自我踩过的无数坑。第一拿到卷子先看完整题目列表。花两分钟确认每部分的题量和难度不要上来就埋头刷题。有些题目分值不高但耗时很长需要学会取舍。第二写SQL和Python时先写好伪代码或者注释再写具体代码。这样即使编译不通过阅卷人也能从注释看出思路正确至少不会得零分。五模的改卷系统对代码答案通常有人工复核环节清晰的注释确实能帮到你。第三遇到业务分析题多用“横向拆解纵向深挖”的框架。先按用户、渠道、版本等维度横向拆解再对着每个维度纵向看数据变化。答题时把每一步的“为什么这么做”写清楚这比直接给结论更受阅卷人认可。第四也是最重要的一条不要在一道题上恋战。笔试的时间永远比想象中紧一道题卡住超过10分钟先标记跳走最后如果有时间再回来做。我五模时就是因为不死心在一道数理统计题上耗了十五分钟结果后面的大题草草收场教训非常深刻。我个人在实际操作中的体会是五模这套卷子的价值不完全在于分数而在于它给了你一个模拟真实工作环境的窗口。数据分析师每天做的事情本质上就是从杂乱的数据里找到线索再输出一个能指导决策的结论。笔试考的那些SQL、统计、业务分析其实都是这个链路里的一个个环节。如果你能在刷题过程中想明白这一点那么不管这道题做没做对你都已经在成长了。最后再分享一个小技巧每次模考完别急着看排名先把错题按“知识盲区”和“粗心失误”分个类。知识盲区需要补课粗心失误需要调整做题习惯。两类问题混在一起看容易让人焦虑分开了之后你会发现真正要补的东西其实没有那么多路也就走得更稳了。