【牛客】摩拜2018校招数据分析工程师笔试解析

【牛客】摩拜2018校招数据分析工程师笔试解析

* 选择题都有正确答案,后面五道大题均是我的答案,欢迎大家讨论纠正!

https://www.nowcoder.com/test/11453292/summary

一、选择题

1、在Shell编程中,下面哪个表示上一步所运行程序的返回值()

答:$?

2、在SQL语言中,子查询是(    ) 

答:嵌入到另一个查询语句之中的查询语句

3、从一副牌(52张,不含打小怪)里抽出两张牌,其中一红一黑的概率是

答:26/51

解析:C2,1 * C26,1 * C26,1 / C52,2(C2,1表示两个任选一个不排列的可能数,后面同)

扫描二维码关注公众号,回复: 2871644 查看本文章

4、SQL中,下列涉及空值的操作,不正确的是?( )

答:name= NULL

解析:NULL不可以用等于号

5、Mysql查询时,只有满足联接条件的记录才包含在查询结果,这种联接是()。

答:内连接

6、在shell中变量的赋值有四种方法,其中,采用name=12的方法称 。

答:直接赋值

7、A表字段a 类型int中有100条记录,值分别为1至100。如下语句 

SELECT a FROM A WHERE a BETWEEN 1 AND 50 OR (a IN (25,70,95) AND a BETWEEN 25 AND 75)  

则如下哪个值在这个sql语句返回的结果集中?

答:30

解析:我选的51,主要是看错题目,题目说下列哪个数在返回结果,返回结果是1-50和75,所以答案是30.(太奸诈了==!)

8、已知表T1中有2行数据,T2中有3行数据,执行SQL语句,“select a.* from T1 a,T2 b”后,返回的行数为

答:6

解析:因为没有设置连接条件,所以默认笛卡尔积2*3=6

9、从“产品”表里查询出价格高于产品名称为“一次性纸杯”的产品价格的记录,此SQL语句为?

答:SELECT * FROM 产品WHERE 价格>(SELECT 价格FROM 产品WHERE 产品名称=’ 一次性纸杯’);

10、shell不仅仅是用户命令解释器,同时一种强大的编程语言,linux缺省的shell是什么

答:bash

11、想要了解上海市小学生的身高,需要抽取500个样本,这项调查中的样本是?

答:从中抽取的500名学生的身高

12、一组数据,均值>中位数>众数,问这组数据

答:右偏

解析:一般在正态分布,矮的一遍为偏向方,因为每个取值概率小,故取值会变多。

13、SQL语言允许使用通配符进行字符串匹配的操作,其中‘%’可以表示

答:0、1或多个字符

14、关于正态分布,下列说法错误的是:

答:正态分布的偏度为0,峰度为1

15、人患癌症的概率为1/1000.假设有一台癌症诊断仪S1,通过对它以往的诊断记录的分析,如果患者确实患有癌症它的确诊率为90%,如果患者没有癌症,被诊断成癌症的概率是10%。某人在被诊断为癌症后,他真正患癌症的概率为()

答:1/112

解析:

根据贝叶斯公式

 设A:癌症诊断仪给出癌症诊断。B1:病人是癌症患者。B2 病人不是癌症患者。 

则P(A|B1)=90%,P(A|B2)=10%

P(B1|A)=P(A|B1)*P(B1)/P(A)=P(A|B1)*P(B1)/(P(A|B1)*P(B1)+P(A|B2)*P(B2))=(90%*1/1000)/((90%*1/1000)+(10%*999/1000))=1/112

16、设随机变量X,Y不相关,且EX=2,EY=1,DX=3,则E(X(X+Y-2))=()

答:5

解析:E(X(X+Y-2))=EX^2+EXY-2EX=DX+(EX)^2+EXEY-2EX=3+2*2+2*1-2*2=5

17、某种产品,合格品率为0.96,一个合格品被检查成次品的概率是0.02,一个次品被检查成合格品的概率为0.05,问题:求一个被检查成合格品的产品确实为合格品的概率()

答:0.9978

解析:公式见15,0.98*0.96/(0.05*0.04+0.98*0.96)

18、以下关于PMF(概率质量函数),PDF(概率密度函数),CDF(累积分布函数)描述错误的是()

答:PDF描述的是连续型随机变量在特定取值区间的概率

解析:特定取值的概率

19、在Logistic Regression 中,如果同时加入L1和L2范数,会产生什么效果()

答:可以做特征选择,并在一定程度上防止过拟合

解析:l1使得大部分系数趋于零,l2使大部分系数等于零

20、假设x1和x2是两个以0为均值,1为标准差的正态分布,那么x1+x2的概率密度分布是()?

答:以0为均值,sqrt(2)为标准差的正态分布

解析:正态分布的可加性,均值,方差相加

21、Nave Bayes是一种特殊的Bayes分类器,特征变量是X,类别标签是C,它的一个假定是:()

答:特征变量X的各个维度是类别条件独立随机变量

22、在一个含有group by的查询sql中,同时存在having和where,sql在解析执行的时候,先执行的是哪一个?

答:where

解析:执行顺序:SELECT <变量名> FROM <表名> WHERE <条件> GROUP BY <变量名> HAVING <条件> ORDER BY <变量名> LIMIT a,b; 

23、SQL查询语句中where、group by、having 这些关键字区别和用法总结错误的是( )

答:HAVING 子句用来从分组的结果中筛选列

其他正确选项:HAVING在查询语句中必须依赖于GROUP BY;

WHERE 子句用来限制 select 语句从表中指定选取得行;

GROUP BY 子句用来分组 WHERE子句的输出结果集

24、执行以下 SQL ,下面哪个名字会被查询出来()

1

SELECT FirstName FROM StaffList WHERE FirstName LIKE’_A%’

答:JACKSON

解析:第二个字母为A的会被查找出来

25、There are 3 doors, behind which are two goats and a car.

You pick a door (call it door A). You’re hoping for the car of course.

The game show host examines the other doors (B & C) and always opens one of them with a goat (Both doors might have goats; he’ll randomly pick one to open)

So what is the chance of winning the game if you switch doors?

答:2/3

解析:1/3*0+2/3*1=2/3

二、编程题

26、有如下两张表格Orders, City_conf,表格结构如下

Orders

Id Coupon_fee Order_fee Citycode
1 2.0 1.0 010
2 1.0 0.5 NA
3 1.0 2.0 021
4 2.0 0.5 182
5 1.0 1.5 *&……%¥#
6 0 1.0 99999
...... ...... ...... ......

City_conf

Name Citycode Area
北京 010 North
苏州 0512 East
深圳 0755 South
成都 027 West
...... ...... ......

Orders表示订单表,包括优惠券金额,订单金额及产生订单的城市代码(注:城市代码包括已开城市Citycode及乱码/NA/不在已开城市代码中的数字)。City_conf表示摩拜所开城市列表,包括城市名称,城市代码及所属大区。请统计每个城市优惠券cover的订单费用。(注:1. 如果优惠券金额大于订单金额则cover的是订单费,否则为优惠券金额。2. 所有归不到城市列表中的订单统一为others)

答:

Orders['cover'] = Orders['Order_fee'].apply(lambda x: str(x)) + '_' + Orders['Coupon_fee'].apply(lambda x: str(x))
Orders['cover'] = Orders['cover'].apply(lambda x: x.split('_')[1] if x.split('_')[0] > x.split('_')[1] else x.split('_')[0])
citylist = City_conf['Citycode']
Orders['city'] = Orders.[Citycode'].apply(lambda x: x if x in citylist else 'others')
 
Covers = Orders[['cover', 'city']]
Covers['cover'] = Covers['cover'].astype('float')
covers_sum = Covers.groupby('city').sum().reset_index()

27、有如下两张表格Metro,Orders,表格结构如下

Metro

Name

Lng

Lat

中关村地铁站

121.442132

24.22421

望京地铁站

121.0284938

24.09839

。。。。

。。。。

。。。。

 

Orders

Id

Lng

Lat

Time

1

121.442132

24.22421

2017-07-01 22:11:14

2

121.0284938

24.09839

2017-07-01 22:11:15

。。。。

。。。。

。。。。

 

 

Metro表示地铁站列表,包括地铁站站名及经纬度坐标等字段。Oders表示订单表,包括开锁经纬度坐标及开锁时间等字段。 请统计每个地铁站周边1km范围内的订单,找出7月1日早上7:00-9:00期间 出行量最大的前10个地铁站。(先验知识:经度和纬度的小数点后两位相等即表示在一公里范围内)

import pandas as pd
 
Metro['lng'] = Metro['Lng'].apply(lambda x: str(x)[0:6])
Metro['lat'] = Metro['Lat'].apply(lambda x: str(x)[0:6])
 
Orders['lng'] = Orders['Lng'].apply(lambda x: str(x)[0:6])
Orders['lat'] = Orders['Lat'].apply(lambda x: str(x)[0:6])
 
table = pd.merge(Orders[['Id', 'Time', 'lng', 'lat']], Metro[['Name', 'lng', 'lat']], on=['lng', 'lat'])
table = table[['Id', 'Time', 'Name']]
table['day'] = Orders['Time'].apply(lambda x: str(x).split(' ')[0][5:])
table['hour'] = Orders['Time'].apply(lambda x: str(x).split(' ')[1][0:5])
 
table = table[table['day'] == '07-01']
table = table[table['hour'] >= '07:00' & table['hour'] < '09:00']
table_top10 = table[['Id', 'Name', 'Time']].copy()
table_top10['count'] = 1 table_top10 = table_top10.groupby('Id').count().reset_index().sort_values(asending=False).head(10)

三、简述题

28、请写出在数据预处理过程中如何处理以下问题

1) 为了预测摩拜每天订单数,我们建立了一个线性回归模型,其中有一个自变量为天气类型(分类变量),分为晴、阴、雾霾、沙尘暴、雨、雪等6种类型,请问如何处理这种变量

<o:p> </o:p>

<o:p> </o:p>

2) 仍然是1) 中的线性回归模型,其中有一个自变量为每天红包车的数量,但是这个变量有1/4的数据是缺失值,请写出至少两种处理缺失值的方法

<o:p> </o:p>

<o:p> </o:p>

3) 依然是1) 中的模型,其中自变量有4个,他们的相关系数矩阵如下:

请问是否有问题?如有,请写出解决方法

1)答:因为天气为离散变量,取值之间几乎没有相关性也没有方向,如果此时应该转换为哑变量,例将晴设置为变量,若晴天则为1,否则为0,此时需要注意的是,为了防止生成的哑变量之前存在相关性,只需要对前面n-1(设离散取值为n)个变量生成哑变量,当前n-1个变量取值均为0时,则表示第n个天气。

2)答:i:因为红包车的数量可看做为离散变量,所以可以用该变量全部取值的均值进行替代;

ii:可按照某个方式分组,再以组的均值进行填充,如以用户id分组,然后用改用户在该变量取值的均值进行填充。

3)答:由相关系数图可知,变量2和变量3之间存在较大的负相关性,会影响模型的结果。

可选择用逐步回归法进行自动判断剔除该变量,或者直接剔除该变量,比较提出前后模型的表现效果,若变好则剔除。

29、摩拜单车的车锁寿命(以小时计)为一随机变量,服从以标准差为300的正态分布。在一批样品中随机抽取 n = 25个车锁进行测试,得出平均寿命为10380小时。

1) 请计算总体平均车锁寿命miu的95%置信区间(confidence interval)

<o:p> </o:p>

2) 在上面的研究中,假设我们有99%的信心认为误差界限(margin of error)不大于60小时,则需要随机抽取多少个车锁才能达到这一结果。

注:

1)答:以双边检验为例:interval = [10380 -1.96*300/sqrt(25), 10380 + 1.96*300/sqrt(25)] = [10262.4, 10497.6]

2)答:60 = 2.575*300/sqrt(n) => n = 165.756 = 166

30、你在公交车站A等3路车,公交车到达车站符合泊松过程,且平均到达时间为10分钟(lambda = 0.1/min)。假设公交车已经运营了一段时间,并且你在随机一个时间到达公交车站,请问

1) 等下一辆车来,你平均需要等多长时间?写出等车时间的概率密度函数

<o:p> </o:p>

2) 等第a辆车来,你平均需要等多长时间?写出等车时间的概率密度函数

<o:p> </o:p>

3) 接2),你在公交车站A等到第a辆3路车来,坐车到公交车站B等6路车,再等b辆6路车来,假设6路公交车到达车站也符合泊松过程,且平均到达时间也为10分钟。设第一阶段等待时间为T1,第二阶段等待时间为T2,则第一阶段等车时间占总共等车时间的比例为W = T1/(T1+T2),请写出W的概率密度函数。(答案有误,尚未解出答案)

1)答:

下一辆车来的时间:p(x=1) = e^0.1 * 0.1 / 1

因为随即一个时间到达公交站,所以服从均匀分布,故平均等待时间为0.5*p(x=1)=0.05*e^0.1

2)答:p(x=a) = e^0.1 * 0.1^a / (a!)

3)答:

p(t1=k1) = e^0.1 * 0.1^k1 / (k1!)

p(t2=k2) = e^0.1 * 0.1^k2 / (k2!)

已知两个泊松分布之和认为泊松分布,且参数相加

则p(t1+t2=k) = e^0.2 * 0.2^k / (k!)

设U=t1, V=t1+t2

则t1=U, t2=V-U

雅克比行列式为1

f(U, V)=f(U<u, V<v)=f(t1<u, t1+t2<v)

猜你喜欢

转载自blog.csdn.net/NJYR21/article/details/81160776
今日推荐