SQL是当之无愧的第一工具,排名第二的是BI,excel也相当重要,python所占比例不大。
随着经验要求上升,岗位对数据分析建模能力的要求越来越广泛,学习算法和建模是数据分析进阶的必备路径。建模指机器学习算法和深度学习算法。
业务能力排名第一,产品、运营和项目经验等也都和业务能力挂钩。除了业务外,统计分析、建模也十分重要。
数据可以做什么?
天气预报:利用物理数据对未来天气进行预测
商业应用:把数据转换成帮助企业发展的生产力
数据分析在不同行业可以做什么?
电商类
电商网站会采集大量的用户行为数据,如浏览、购买等,通过这些数据,数据分析师了解不同用户的喜好、行为方式从而帮助增加产品销量
社交类
利用社交网络数据,可以更好的进行精准营销,通过对站子、推文、博客和其他社交数据进行分析,可以有效改善用户服务和体验。
医疗类
卫生保健机构可以针对电子医疗数据进行记录,数据分析师可以基于这些数据,帮助医疗机构改善卫生服务,并发现潜在隐患。
金融类
在金融行业,通过对用户的日常交易数据进行分析,险可以帮助信贷机构评判用户的信用等级,确定信贫额度
什么是数据?
数据是科学实验、检验、统计、观测等所获得的和用于科学研究、技术设计、查证、决策等的数值。
数据的变异性(体温)
数据的规律性(大数定律) → \rightarrow → 数据分析 → \rightarrow → 数据驱动决策
数据的客观性
1.业务理解
能跑数,不叫数据分析,和业务结合并产生价值才是数据分析。
2.工具使用
掌握并熟练应用基本的数据分析工具、分析模型和分析方法。
3.沟通表达
具备高效听说写的能力和用数据讲故事的能力
对业务的洞察力决定了一个数据分析师的职业上限。
对行业和产品有热情、热爱学习
从事数据分析工作,首先必须要对进入的行业和产品感兴趣,有好奇心,愿意学习―切未知的知识
关注数据分析对业务产生的价值
能够把业务和数据结合起来,尝试用数据量化业务状态和结果,能够用数据解释潜藏的未被发现的业务逻辑
多问、多思考
当分析需求来的时候,要问下为什么要做这个分析,想解决什么问题。
数据分析师总是需要通过说服产品和工程方面来改变产品,产生影响力
能够跨部门高效沟通
与需求方沟通可以快速了解业务价值,分析背景;与开发部门沟通可以了解业务实现、数据来源;推动数据分析落地业务方需要跨部门沟通
良好的数据可视化能力和撰写分析报告的能力
能够把分析结果变得直观、简单、易理解;分析报告全面、有逻辑、经得住推敲;分析结论可靠、可验证
技术水平决定了数据分析师的下限
熟练使用各类分析模型和分析方法
对使用的模型能清楚其优劣势;对没用过的方法能有所了解,在遇到已有方法解决不了的问题时能够联想到尝试其他方法是否可以解决
一定的编程语言技能
SQL/Python/R; SQL是基础,Python或R可以提升长期工作效率
对数据有很高的敏感度,最好有一定的统计学基础
能够及时发现数据展现的问题,指出深挖的方向;对数据的理解有很强的逻辑性和科学性
数据抓取 → \rightarrow → 数据清洗 → \rightarrow → 数据分析 → \rightarrow → 业务决策
数据抓取:确定要抓取什么样的数据
还有日志什么的,也可以归入埋点
数据埋点-京东案例
数据分析是指通过某种方法和技巧,对准备好的数据进行探索、分析,从中发现因果关系、内部联系和业务规律等分析结果,为特定的研究或商业目的提供参考。
描述性分析(发生了什么?)
描述某项事物的特性。需要准确、完善甚至是实时的数据。
描述性分析是通过计算数据的集中性特征(平均值和中位数)和波动性特征(标准差值)以了解数据的基本情况。因此在研究中经常是首先进行描述性分析,再次基础之上再进行深入的分析。
描述性分析还可用于查看数据是否有异常情况(最小值或最大值查看),比如数据中出现-2,-3等异常情况。
描述性分析也可以通过峰度和偏度用于判断数据正态性情况。
诊断性分析(为什么会发生?)
在对描述性数据进行评估时,诊断分析工具将使分析师能够深入到细分的数据,从而隔离出问题的根本原因。
诊断性分析是基于描述性分析之上的。诊断分析的目标是了解事情发生的原因。通过诊断分析,可以深入挖掘问题根源,识别依赖关系,找出影响因子。各种分析方法,可以知道问题是怎么发生的,这个过程依赖于我们对业务的了解程度,另外也要多和业务人员进行头脑风暴,只要是可能相关的,都纳入考虑,也可以基于现有特征构造新特征,至于是否相关可在后面的分析中进行验证。
思考题:为什么6月份京东电商平台的订单量激增?从哪些角度去分析?需要哪些数据?
订单量激增,618活动,是不是带来很多流量,转化率怎么样,是不是有直播,爆款产品等等,用户购买率激增。
预测性分析(将会发生什么?)
对数据特征和变量的关系进行描述,基于过去的数据对未来进行预测
相比较于描述性分析与诊断性分析的对于过去数据的分析,预测性分析可以用来说明未来可能发生的事情。它使用描述性和诊断性分析的结果来检测趋势或者关联性,并预测未来动态。
尽管预测性分析可以为未来的趋势提供指导,但是预测也只是一种估计,数据的质量和业务状态的稳定性决定着预测的准确性,所以这类分析往往需要持续不断的优化
规范性分析(需要做什么?)
规范模型利用对发生的事情的理解,为什么发生了这种情况以及各种~可能发生的"分析,以帮助用户确定采取的最佳行动方案。
规范性分析(指导性分析)的目标是告诉我们应该采取什么样的措施来获得最优的结果。它通过利用对已发生事件的理解和事件发生的原因,以及各种可能发生的情况分析来帮助确定可采取的最佳行动方案。指导性分析通常是各类分析的组合。
比如采用数学模型确定最优的商品定价以实现利润最大化、应该怎样实现网页的最优广告位布局等
数据分析师总是需要通过说服产品和工程方面来改变产品,产生影响力
清晰的可视化和完整的分析报告
能够把分析结果变得直观、简单、易理解;分析报告全面、有逻辑、经得住推敲;分析结论可靠、可验证
推动产品按数据分析的结论进行修正、落地
数据分析师总是需要通过说服产品和工程方面来改变产品,产生影响力。
数据可视化的基本准则:
1.保证图表的可信性
2.图表能够高效传达信息
3.图表符合美学原则
4.图表参考:经济学人
撰写数据分析报告的一些基本要求
分析报告一般可以分为专题分析报告、综合分析报告和日常数据通报
分析报告的基本要求:
1.介绍分析背景和分析目的
2.说明数据来源、数据的时间区间和统计口径,如日活的定义
3.分析逻辑清晰,可采用金字塔结构、总分总结构等
4.既要给出结论,也要给出解决方案
撰写数据分析报告的一般框架
精准营销 :网站推荐
精细化运营:拉新、留存、推送
产品设计:优化步骤提高转化率
select <select_list>
from <table_list>
[where <condition>]
[group by <group_by_list>]
[having <having_condition>]
[order by <order_by_list> ASC|DESC]
[limit <limit_number>]
select-查询
from-从
where-哪里(满足XX条件的)
group by-依据XX分组
order by-依据XX排序
limit-限制N条
总结:从XX表中查询满足XX条件的XX列,结果依据XX分组,依据XX排序,限制返回N条。
怎么把数据从表中选择出来–select
想要的数据在多张表中,想取多个字段,该怎么办?–表连接
注意:
MySQL中不支持全连接
每种join都有on,on的是左表和右表中都有的字段。join之前要确保关联键是否去重,是不是刻意保留非去重结果。
两张表数据的字段一样,想合并起来,怎么办?–union
union和union all均基于列合并多张表的数据,所合并的列格式必须完全一致。union的过程中会去重并降低效率,union all直接追加数据。
去重 distinct
如果有千万用户数据。想知道有多少不重复的用户数?
罗列不同的id
select distinct id from Table_1
统计不同的ld数
select count(distinct id) from Table_1
优化版本的count distinct
select count(*) from (select distinct id from table_1) tb
聚合 max/min/sum/count+group by
想分性别进行统计,看看男女各多少?
select count(distinct id) from table_1 group by hender;
select max(age),min(age),avg(age) from table_1
筛选 having、where
只想查看A公司的男女人数数据?
select count(distinct id) from table_1 where company = 'A' group by gender;
select company,avg(age) from table_1 where gender = "M" group by company having avg(age)>30
排序 order by
select id,age from table_1 order by age DESC limit 10;
条件 case when
select id
case
when CAST(salary as float)<50000 then "5万"
when CAST(salary as float)>=5000 and CAST(salary as float)<100000 then "5-10万"
when CAST(salary as float)>=100000 and CAST(salary as float)<200000 then "10-20万"
when CAST(salary as float)>=200000 then "20万以上"
else NULL
end
from table_1;
cast是将salary转化为浮点数,防止是字符串不能计算
再举一个例子:
窗口函数是什么
窗口函数语法
题型1【查询不在表里的数据】
这里有两张表,一张是学生表Table_1,一张是已经选课了的学生的信息表Table_2。现在要求找出还没有选课的同学。
解题思路:
题型2【查找第N高的数据】
有一张“成绩表"Table_1,包含学生编号,选修课程的编号和成绩信息。现在需要找出某课程成绩第二高的学生成绩。这里以课程编号为“01"的同学为例。如果不存在第二高成绩的学生,那么查询应返回null。
解题思路:
select * from table_1 where 课程编号=‘01’;
select distinct 成绩 from table_1
where 课程编号=‘01’
order by 课程编号,成绩 desc
limit 1 offset 1;
select ifnull(第二步的结果,null) as '01课第二名成绩';
完整代码
# 利用ORDER BY排序,再利用Limit限制offset偏移,排除只有1个值情况结合IFNULL
SELECT
IFNULL(
(SELECT DISTINCT 成绩
FROM Table_1
ORDER BY 成绩 DESC
LIMIT 1 OFFSET 1),
NULL)AS "01课程第二高的成绩";
知识点
题型3【分组排序问题】
下图是成绩表Table_1中的内容,记录了每个学生学生编号,课程编号和成绩。现在需要根据成绩来排名,如果两个分数相同,那么排名要是并列的。
比如题目中的成绩从大到小排序应该是80,80,76,70,50,31。
分数相同排名并列,那么6位同学的排序应该是1,1,3,4,5,6。
解题思路:
完整代码
select *,
rank() over (order by 成绩 desc) as "排名"
from table_1;
知识点
rank, dense_rank, row_number三种开窗函数的区别
同类题型——LeetCode数据库【178.分数排名】
题型4【连续出现N类问题】
下面是某班级学生的某课程的成绩表(表名Sscore,列名:学号、成绩),使月SQL查找所有至少连续出现3次的成绩。
解题思路:
参考代码1
select distinct a.成绩 as 连续出现3次的成绩
from sscore as a,
Sscore as b,
Sscore as c
where a.学号=b.学号-1
and b.学号= c.学号-1 and a.或绩=b.成绩and b.成绩= c.成绩;
参考代码2
SELECT 成绩, max(rk) AS 成绩_cnt
FROM
(SELECT 成绩, row_number() over(PARTITION BY成绩) AS rk --先计算出排名
FROM Sscore) t
GROUP BY t.成绩--根据最大的排名来知道“成绩"的出现次数
HAVING 成绩_cnt >= 3;--用排名进行筛选
知识点
同类题型——LeetCode数据库【180.连续出现的数字】
蚂蚁金服面试真题
sql中过滤条件放在on和where中的区别
我们知道on和where是筛选条件,那么具体区别是什么?我们分开看下。
inner join:结果没有区别
left join、right join:使用left join(right join)时on后面的条件只对右表(左表)有效。
滴滴面试题
编写一个sQL查询,找出每个部门工资第二高的员工。
这是查找第N高的题型
SELECT*FROM Employee WHERE ld =
(SELECT ld
FROM Employee
WHERE Departmentld = a.Departmentld
ORDER BY Employee.Salary desc
LIMIT 1 OFFSET 1);
这也是分组排序的问题,可以考虑直接上开窗函数
select Departmentid,Name,Salary,rn
from(select *,row_number() over
(PARTITION by Departmentid ORDER BY Salary desc) as rn
from Employee) as a
WHERE rn=2;
select d.name department,
ifnull(
(select salary
from employee e left join department d
on e.departmentid=d.id
group by e.departmentid
ORDER BY e.salary DESC
limit 1,1
),null) as '第二高工资'
select b.user_namefrom (select
I
user_name,
ntile(5)over(order by sum(pay_amount) desc) as levelfrom user_sales_table group by user_name ) b
where b.level= 1;
字节跳动面试真题
统计连续登陆的三天数和以上的用户以及他们的首次登录和最后登陆时间
思路:
1.分组排序打行号
select uid ,dt ,row_number()over (partition by uid order by dt) rn from continuous
2.让时间戳-行号根据差值检查是否为连续
select uid ,dt, date_sub(dt,rn) as dis
from (
select
uid,dt,row_number()over(partition by uid order by dt)rnfrom continuous
)t1
3.为连续的接果为一样的用count(1)函数计算行数总数
select
uid,min(dt),max(dt),count(1) as counts
from (
select uid ,dt, date_sub(dt,rn) as dis
from (
select
uid ,dt,row_number()over(partition by uid order by dt )rnfrom continuous )t1
-) t2
group by uid;
参考代码:
select uid,min(dt),max(dt),count(1) as counts
from (
select uid ,dt, date_sub(dt,rn) as dise
from (
select uid ,dt,row_number()over(partition by uid order by dt) rnfrom continuous
)t1
)t2
group by uid ,dis
having counts>2;
腾讯经典数据分析面试题
PDD数据分析笔试题
首先要提问,收集所需的细节
与面试官交流你的思路
当面试官问:你的SQL能力怎么样?
首先你需要明白公司最关注的问题是哪些? #这些问题在某些方面会比你的基础知识更重要
问题解决能力如何考察?
合作能力如何考察?
成长潜力如何?
自控力和主动性的考察,主要是体现在简历考核中
学习能力体现在题目考察中
成长潜力的考核是贯穿面试整个过程的,从各个细节中形成完整的判断,你是否成长潜力合格
你如何准备面试?
准备面试分为2个阶段:
一个是长期积累
另一个是短期冲刺
参考:数据分析面试通关
京东数据分析训练营