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

经常会被问到,“数据分析需要学习什么技能?”,“针对实际的业务场景,如何使用数据分析工具去分析?”基于此作者总结数据分析面试常用的问题,面试内容包括技能应用篇: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.mfbz.cn/a/313681.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的网上花卉商城系统(Java毕业设计)

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

VS Code 配置 Vue3 模板 详细步骤

1、打开 VS Code &#xff0c;在页面左下角找到这个设置图标&#xff0c;然后找到 “用户代码片段” 2、接着点击 “新建全局代码片段文件” 3、在输入框中输入你要设置的模板名&#xff0c;然后回车确认 4、接下来配置自己想要模板代码&#xff0c;或者也可以借鉴我写的这个&…

vue3中组合式api的常用方法

vue3中组合式api的常用方法 记录一下vue3中常用的组合式api&#xff0c;包括计算属性computed、监听器watch及watchEffective 一、computed 作用&#xff1a;根据已有数据计算出新数据&#xff08;和Vue2中的computed作用一致&#xff09;。 <template><div class&…

Vue3+Vite项目搭建

为什么选择vite而不是vue-cli&#xff1a; vite下一代前端开发与构建工具 vite创建的项目默认vue3 优势&#xff1a; 开发环境中&#xff0c;无需打包&#xff0c;可快速的冷启动 轻量快速的热重载&#xff08;HMR&#xff09; 真正的按需编译&#xff0c;不在等待整个应用…

记录el-select+el-tree复选框,支持模糊查询,懒加载,树父子节点不关联,不全选

需求&#xff1a;一个机构下拉菜单&#xff0c;一个人员下拉菜单&#xff0c;默认带入当前登录用户的机构和人员。机构下拉菜单为两个接口&#xff0c;模糊查询为一个接口不包含懒加载&#xff0c;默认非模糊查询情况下为一个接口&#xff0c;点击节点懒加载。机构下拉菜单数据…

全球大模型陷入高质量语料荒?

2023年12月18日&#xff0c;部分用户在对谷歌Gemini进行测试时&#xff0c;发现如果用中文请Gemini介绍自己时&#xff0c;Gemini会回复自己是“由百度公司开发的对话式人工智能模型&#xff0c;名叫文心一言”&#xff01;当换成英文与之交流&#xff0c;Gemini则恢复了自己是…

JVM-JVM支持高并发底层原理精讲

一、透彻掌握高并发-从理解JVM开始 二、从线程的开闭看JVM的作用 1.run方法 启动start方法&#xff0c;会调用底层C方法&#xff0c;告诉操作系统当前线程处于可运行状态&#xff0c;而如果直接调用run方法&#xff0c;则就不是以线程的方式来运行了&#xff0c;只是当做一个普…

变电 | 主变压器异常处理案例两则

【案例一】 【案例二】 最近省企业联合会公布了 优秀企业管理论文结果 去年年末投的论文 获得了二等奖 巴适

先爬、再行、最后跑,“流程挖掘之父”Wil教授谈流程挖掘的突破之路

商界有句俗话&#xff1a;“先爬&#xff0c;再行&#xff0c;最后跑”。这正是实现有价值突破的过程。 作者 | Wil van der Aalst教授 海明威在他的某部作品中描绘了这样一幕&#xff1a;有人询问如何走向破产&#xff0c;得到的答案是“开始时循序渐进&#xff0c;之后突然…

评论转换输出 - 华为OD统一考试

OD统一考试 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 在一个博客网站上&#xff0c;每篇博客都有评论。每一条评论都是一个非空英文字母字符串。 评论具有树状结构&#xff0c;除了根评论外&#xff0c;每个评论都有一个父评论。当评论保存时&am…

重新分区扩展C盘

电脑 – 管理 使用第三方工具&#xff1a;DiskGenius数据恢复及分区管理软件 要选择完成后重启 &#xff0c;如果这里忘记勾选&#xff0c;后面也会再次提醒并默认勾选重启 "调整后容量"是指图片上显示的非C盘之外的盘符的容量&#xff0c;这里指E盘大小 上面已经利…

做一个个人博客第一步该怎么做?

做一个个人博客第一步该怎么做&#xff1f; 好多零基础的同学们不知道怎么迈出第一步。 那么&#xff0c;就找一个现成的模板学一学呗&#xff0c;毕竟我们是高贵的Ctrl c v 工程师。 但是这样也有个问题&#xff0c;那就是&#xff0c;那些模板都&#xff0c;太&#xff01;…

运动模型非线性扩展卡尔曼跟踪融合滤波算法(Matlab仿真)

卡尔曼滤波的原理和理论在CSDN已有很多文章&#xff0c;这里不再赘述&#xff0c;仅分享个人的理解和Matlab仿真代码。 1 单目标跟踪 匀速转弯&#xff08;CTRV&#xff09;运动模型下&#xff0c;摄像头输出目标状态camera_state [x, y, theta, v]&#xff0c;雷达输出目标状…

【浅尝C++】引用

&#x1f388;归属专栏&#xff1a;浅尝C &#x1f697;个人主页&#xff1a;Jammingpro &#x1f41f;记录一句&#xff1a;大半夜写博客的感觉就是不一样&#xff01;&#xff01; 文章前言&#xff1a;本篇文章简要介绍C中的引用&#xff0c;每个介绍的技术点&#xff0c;在…

井盖异动传感器,守护脚下安全

随着城市化进程的加速&#xff0c;城市基础设施的安全问题日益受到关注。其中&#xff0c;井盖作为城市地下管道的重要入口&#xff0c;其安全问题不容忽视。然而&#xff0c;传统的井盖监控方式往往存在盲区&#xff0c;无法及时发现井盖的异常移动。为此&#xff0c;我们推出…

数据库与低代码:加速开发,提升效率的完美结合

随着技术的不断进步&#xff0c;数据库和低代码开发成为了现代应用程序开发中的两大关键要素。本文将探讨如何通过结合数据库和低代码开发&#xff0c;加速应用程序的开发过程&#xff0c;并提高开发效率和质量。 在过去的几十年中&#xff0c;数据库一直被视为应用程序开发中不…

【Linux进程】查看进程fork创建进程

目录 前言 1. 查看进程 2. 通过系统调用创建进程-fork初识 总结 前言 你有没有想过在使用Linux操作系统时&#xff0c;后台运行的程序是如何管理的&#xff1f;在Linux中&#xff0c;进程是一个非常重要的概念。本文将介绍如何查看当前运行的进程&#xff0c;并且讨论如何使用…

Sip - Ubuntu 配置 miniSIPServer 服务器(测试用)

客户提供的账号过期了&#xff0c;简单搭建 SIP 服务器&#xff0c;以便测试使用。个人认为这个配置起来最为简单&#xff0c;且测试功能足够。 官网miniSIPServer - 基于 Windows 以及 Linux 平台的 VoIP (SIP) 服务器软件. miniSIPServer 可能是最容易使用的 VoIP(SIP) 服务器…

获取进行逗号分隔的id值 Split的使用

获取进行逗号分隔的id值,Split的使用 后台实现对有逗号进行分割的字符串 使用这行代码就不会有一个空数组值,直接过滤调数组中的空值 var ids = key.Split(,).Where(s => !string.IsNullOrEmpty(s

进行交流负载测试的步骤和规范

交流负载测试是一种评估系统在正常或峰值负载下的性能和稳定性的测试方法。以下是进行交流负载测试的步骤和规范&#xff1a; 1. 确定测试目标&#xff1a;首先&#xff0c;需要明确测试的目标&#xff0c;例如&#xff0c;测试系统的响应时间、吞吐量、错误率等。 2. 设计测试…