数据分析师面试必备,数据分析面试题集锦(六)

news2024/11/17 5:42:36

经常会被问到,“数据分析需要学习什么技能?”,“针对实际的业务场景,如何使用数据分析工具去分析?”基于此作者总结数据分析面试常用的问题,面试内容包括技能应用篇:EXCEL、SQL、Python、BI工具等,业务思维篇:常用的数据分析方法业务思维等。

其中大部分问题点,没有绝对标准答案,所有问题点都是为了解决问题,大家如果有更好的问题答案,也可以提出,对于其中的问题也可以提出,共同解答,欢迎点赞、转发、评论,下面一起来学习。

本文讲解内容:Excel、SQL、Python面试必备
适用范围:多种数据分析实用技巧

Excel篇

1、Excel将多行数据变为一列

Excel将多行数据放到一列中,如下包含1月到12月共计12列数据,有5行数据,将以下多列数据聚合到一列中。

框选数据,点击数据选项卡下的从表格。

在创建表选项下点击确定。

进入Powerquery界面,选择第一列数据,在转换选项卡下选择逆透视列中的逆透视其他列选项卡。

即可将多列数据聚合到一列,从而形成多行数据。

在开始选项卡下点击关闭并上载功能。

如下即为数据转化的前后对比,将多列数据聚合为一列数据。

2、Excel将一行数据拆分为多行

Excel将一行数据拆分为多行,如下有一行包含多个城市的数据。

选择数据,点击数据选项卡下的从表格。

在创建表选项下点击确定。

选择数据,在开始选项卡下点击拆分列按分隔符。

因为示例数据使用点分隔,所以选择自定义分隔符,拆分位置为每次出现分隔符时,拆分为行,点击确定。

点击关闭并上载即可将数据结果加载至Excel表格中。

如下即为数据转化的前后对比,将一行数据拆分为多行。

3、VLOOKUP高级用法

1)跨表查找

如下是原始数据,使用VLOOKUP跨表查询功能。

使用VLOOKUP+COLUMN函数实现多列同时跨表查询。

=VLOOKUP($A3,'Q1'!$A$1:$D$9,COLUMN(B:B),0)

2)跨多表查找

INDIRECT函数用于返回由文本字符串指定的引用。

=VLOOKUP($A2,INDIRECT(B$1&"!A:B"),2,0)

3)跨多表查找(格式不一致)

这里不仅使用INDIRECT函数,而且使用MATCH函数来返回"销量"在单元格区域中的位置。

=VLOOKUP($A2,INDIRECT(B$1&"!A:G"),MATCH("销量",INDIRECT(B$1&"!1:1"),0),0)

SQL篇

1、每天的日活数及新用户占比

如下是用户行为日志表,求每天的日活数及新用户占比。

由于跨天都记为该用户活跃过,所以使用union建立一个用户活跃日期表。

select uid,date(in_time) as dt
from tb_user_log
union 
select uid,date(out_time) as dt
from tb_user_log

union 可以自动去重,此时我们得到了一个包括跨天的用户活跃日期表,然后使用窗口函数,算出每个用户的首登日期。

select uid,dt,min(dt) over (partition by uid) as first_in
from 
(
select uid,date(in_time) as dt
from tb_user_log
union 
select uid,date(out_time) as dt
from tb_user_log
) 
t1

由此便得到一个有用户活跃日期dt和用户首登日期first_in的表,将此表命名为temp,接下来使用此表查询,根据日期分组,计算每日的所有有记录的用户作为每日活跃用户,而如果用户活跃日期dt和用户首登日期first_in相等则记为新用户,使用sum累加。

select dt,
count(distinct uid) as dau,
round(sum(if(dt=first_in,1,0))/count(distinct uid),2) as uv_new_ratio
from temp
group by dt
order by dt

完整代码如下:

with temp as
(
select uid,dt,min(dt) over (partition by uid) as first_in
from 
(
select uid,date(in_time) as dt
from tb_user_log
union 
select uid,date(out_time) as dt
from tb_user_log
) t1
)
select dt,
count(distinct uid) as dau,
round(sum(if(dt=first_in,1,0))/count(distinct uid),2) as uv_new_ratio
from temp
group by dt
order by dt

2、2021年11月每天新用户的次日留存率

如下是用户行为日志表,求2021年11月每天新用户的次日留存率。

用组合查询将in_time和out_time视为同一时间列,并用union去重,接着使用窗口函数lead()获得每个用户下次登录日期,row_number()获得每个用户本次登录的排序,仅保留新用户首次登录日期的记录,按11月的日期分类,计算留存率。

select dt,
       round(sum(if(datediff(next_dt,dt)=1,1,0))/count(distinct uid),2) uv_left_rate
from
(select uid, dt,
       lead(dt,1) over(partition by uid order by dt) next_dt,
       row_number() over(partition by uid order by dt) dt_rank
from
(select uid, date(in_time) dt
from tb_user_log
union
select uid, date(out_time) dt
from tb_user_log) m ) n
where dt_rank = 1 and date_format(dt,'%Y-%m') = '2021-11'
group by dt
order by dt

Python篇

1、列表推导式

具体地Python列表推导式可以分为以下几种:一般形式、带if的列表解析式、带if...else的列表解析式。

1)一般形式

[expression for i in iterable]

依次返回列表numbers中的内容。

#一般形式
numbers = [1,2,3,4,5,6]
[print(i) for i in numbers]

2)带if的列表解析式

[expression for i in iterable if...]

返回列表numbers中大于4的内容。

#带if的列表解析式
numbers = [1,2,3,4,5,6]
[i for i in numbers if i >= 4]

3)带if...else的列表解析式

[expression if...else... for i in iterable]

返回列表numbers中数字的奇偶性。

#带if...else的列表解析式
numbers = [1,2,3,4,5,6]
["偶数" if i % 2 == 0 else "奇数" for i in numbers]

2、map、apply、applymap用法

首先构建一个数据集。

import pandas as pd
import numpy as np
dates = pd.date_range('20230301', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
df

#增加一列数据
df=df.assign(tag=(df['D']>0).map({True:'H',False:'L'}))
df

1)map函数

map将数据逐个当作参数传入字典或者函数中,返回映射之后的值;最后映射结果组成新的Series。

#使用lambda函数,A列乘以10
df['A'].map(lambda x:x*10)

#tag列,把H换成大于0,L换成小于0
df['tag'].map({'H':'▲0','L':'▼0'})

使用自定义函数,这里map只接受一个参数,即传入的x。

#使用函数实现tag列,把H换成大于0,L换成小于0
def HL_map(x):
    if x == 'H':
        return '▲0'
    elif x == 'L':
        return '▼0'

df['tag'].map(HL_map)

2)apply函数

相较于map,apply工作原理类似,区别是能够传入更加复杂的参数,接受多个参数。

#函数累计
df.apply(np.cumsum)

df.apply(lambda x: x.max() - x.min())#函数求极差

#A列乘以100除以2
def data_apply(x,multiple,bias):
    return x * multiple / bias 

df['A'].apply(data_apply,args=(100,2))

对DataFrame而言,apply中的参数axis=1表示对行遍历,axis=0表示对列遍历,对于传入apply的行(或列)数据,以Series格式传入指定函数,返回对应结果。

def DATA_B_apply(x):
    if (x['B']>0)&(x['tag']=='H'):
        return 'B_H'
    elif (x['B']<0)&(x['tag']=='L'):
        return 'B_L'
    else:
        return x['B']
    pass

df.apply(DATA_B_apply,axis=1)

3)applymap函数

对DataFrame中的每个单元格执行指定函数的操作。

#同乘100
df.iloc[:,0:4].applymap(lambda x : x*100)

#保留两位小数
df.iloc[:,0:4].applymap(lambda x : '%.2f' % x)

本文首发于公众号:大话数据分析,三年互联网数据分析经验,擅长Excel、SQL、Python、PowerBI数据处理工具,数据可视化、商业数据分析技能,统计学、机器学习知识,持续创作数据分析内容,点赞关注,不迷路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1377502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven_下载_安装_配置

文章参考&#xff1a;https://zhuanlan.zhihu.com/p/615382243 Maven简介 Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,它用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、测试、打包和发布等工作。 maven优点&#xff1a;…

外卖骑手与行人之间的非零和博弈

一、背景 自2013年成立以来&#xff0c;美团外卖一直保持着高速增长&#xff0c;通过提供便捷、高效的外卖服务&#xff0c;满足了大量消费者的需求。美团外卖的服务不仅限于基础的送餐服务&#xff0c;还涵盖了多种生活服务&#xff0c;如超市便利、药品配送等&#xff0c;满…

数据库和表的操作

文章目录 前言一、库的操作创建数据库字符集和校验规则操纵数据库查看数据库显示创建语句修改数据库删除数据库备份和恢复数据库还原查看连接情况 二、表的操作创建表查看表结构修改表修改表名添加一列修改某一列属性删除某一列 删除表 前言 一、库的操作 创建数据库 语法&am…

基于springboot+vue的个人健康管理系统(有文档、Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

大创项目推荐 深度学习猫狗分类 - python opencv cnn

文章目录 0 前言1 课题背景2 使用CNN进行猫狗分类3 数据集处理4 神经网络的编写5 Tensorflow计算图的构建6 模型的训练和测试7 预测效果8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习猫狗分类 ** 该项目较为新颖&a…

小魔推行业玩法:生活美容怎么做短视频矩阵?

如今每个实体老板都想让自己生意做的更好&#xff0c;那就需要有更多获取流量的方式&#xff0c;获得大量的同城曝光&#xff1b;在市场内卷的状况下&#xff0c;通过短视频来做门店引流无疑是绝佳的方式&#xff0c;让更多同城的用户知晓自己的门店&#xff0c;这个时候通过小…

flask web服务器:运行在云服务器上的最简单的web服务器

上期文章我们分享了flask的基础知识以及如何安装flask&#xff0c;当你安装完成flask后&#xff0c;我们就可以打造自己的web服务器了。 首先我们打印最简单的hello world,并在浏览器中显示 from flask import Flask app Flask(__name__)app.route(/) def index():return he…

【网络安全】【密码学】【北京航空航天大学】实验二、数论基础(中)【C语言和Java实现】

实验二、数论基础&#xff08;中&#xff09; 一、实验内容 1、扩展欧几里得算法&#xff08;Extended Euclid’s Algorithm&#xff09; &#xff08;1&#xff09;、算法原理 已知整数 a , b ,扩展的欧几里得算法可以在求得 a , b 的最大公约数的同时&#xff0c;找到一对…

顺序图作业

顺序图作业 一. 简答题&#xff08;共7题&#xff0c;100分&#xff09; (简答题) 交互是什么&#xff1f;请举 2-3 个交互的实际例子。 正确答案&#xff1a; 一次交互就是指在特定语境中&#xff0c; 为了实现某一个目标&#xff0c; 而在一组对象之间进行交换的一组 消息所…

字体包大小缩小的软件

Fontmin - 字体子集化方案https://ecomfe.github.io/fontmin/#app

JAVA制造业MES生产管理系统源码 MES源码

JAVA制造业MES生产管理系统源码 MES源码 开发环境&#xff1a;jdkeclipsetomcatmavenmysql 开发工具&#xff1a;MyEclipse 系统说明&#xff1a; MES制造执行系统&#xff0c;其定位于制造执行系统的Java开源版本&#xff0c;系统包括系统管理&#xff0c;车间基础数据建模&am…

Oracle DBCA工具图形化方式检测不到ASM磁盘组(解决各种报错)

本例环境&#xff1a; 操作系统OEL 6.5数据库版本:11.2.0.4 问题&#xff1a;DBCA建库的时候&#xff0c;检测不到ASM磁盘组 因素一&#xff1a; 可能是在授权的时候执行了 chown –R 775 /u01/app等修改权限。 分析&#xff1a;数据库无法连接ASM&#xff0c;这应该是权限…

代码随想录算法训练营第2天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

数组理论基础 文章链接&#xff1a;https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 977.有序数组的平方 题目链接&#xff1a;https://leetcode.cn/problems/squares-of-a-sorted-array/description/ 思路1.暴力排序 将每个数平…

国科 GK7201V200 SOC芯片

1.概述 GK7201V200 芯片是国科推出的新一代高集成度、高画质、低码率、低功耗的 AI IP Camera SoC 芯 片。 芯片集成 ARM Cortex A7 处理器&#xff0c;支持专业的 ISP 图像处理单元&#xff0c;H.265/H.264 视频编码&#xff0c;满足客户 差异化业务需求。同时集成了 Ethe…

国产六核CPU商显板,三屏异显,米尔基于全志D9360开发板

芯驰D9-Pro 自主可控、安全可信的高性能商显方案 采用国产CPU&#xff1a;集成了6个ARM Cortex-A551.6GHz 高性能CPU和1个ARM Cortex-R5800MHz&#xff1b; 高性能的高安全HSM安全的处理器&#xff0c;支持TRNG、AES、RSA、SHA、SM2/3/4/9&#xff1b; 它包含100GFLOPS 3D G…

打印的前后顺序

面试题经常会有 <script>console.log(1)setTimeout(function(){console.log(2)})console.log(3)let pnew Promise((resolve,reject) >{console.log(4)resloved(hhhhhh)})p.then(res >{console.log(res)console.log(5)},res >{console.log(7)})console.log(6)&l…

如何进行大数据系统测试

大数据系统常见的架构形式有如下几种&#xff1a; Hadoop架构&#xff1a; Hadoop Distributed File System (HDFS)&#xff1a;这是一种分布式文件系统&#xff0c;设计用于存储海量数据并允许跨多台机器进行高效访问。 MapReduce&#xff1a;作为Hadoop的核心计算框架&#…

JBOD详解

JBOD是存储领域中一类重要的存储设备。 英文全称Just a bunch of disks, 中文也称之为硬盘存储扩展柜。 它是传统存储系统赖以生存的根基之一&#xff0c;如果没有JBOD&#xff0c;那一下子就会省去很多部件&#xff1a;后端HBA、SAS扩展器/FC成环器、线缆、JBOD控制模块等等…

高周期的伦敦金交易机会转到低周期做 不可以吗?

一般的市场观点认为&#xff0c;交易信号出现在越高的时间周期上就越准确&#xff0c;成功的概率就越高。而低时间周期的信号&#xff0c;要推动高时间周期行情的发展&#xff0c;那几乎是不可能。因此多数人认为从高周期转到低周期&#xff0c;然后去捕捉高周期行情机会&#…

强化学习应用(二):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个价值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…