数据分析练习题目4

1. sql部分

image-20200625210909113
  1. 插入多条记录的语句

    INSERT INTO house_info (`house_id`, `hold_ucid`, `del_type`, `hold_shop_code`) 
    VALUES 
    ('24', '9904', '二手', '1004'),
    ('25', '9905', '二手', '1005'),
    ('26', '9906', '新房', '1006'),
    ('27', '9907', '新房', '1007'),
    ('28', '9908', '新房', '1008');
    
  2. 插入店铺信息表

    INSERT INTO shop_info (shop_id, area) 
    VALUES 
    ( 1001, '宝安'),
    ( 1004, '南山'),
    ( 1005, '南山'),
    ( 1006, '宝安'),
    ( 1007, '南山'),
    ( 1008, '龙岗');
    
  3. 先看看两个表的样子

    image-20200625212730362
    image-20200625212857910
  4. 表格连接外加分类汇总

    select 
    a.area, 
    sum(if(b.del_type='二手', 1, 0)) as 二手房源量,
    sum(if(b.del_type='新房', 1, 0)) as 新房房源量
    FROM
    shop_info a inner join house_info b
    on a.shop_id = b.hold_shop_code
    group by a.area;
    
image-20200625213250190
image-20200625210935367
image-20200625210951210
  1. 看一看电话的表格的基本的样子

    image-20200625215200935

    我们发现里面有很多是重复的,所以需要考虑的是最后一次的接通。最后一次的接通在30天以外或者根本没有接通过。

    1.1 先把最后一次的接通数据找出来

    select house_id, max(tele_date)  -- max得到的肯定就是最后一次
    from telephone_info
    where is_connected = 1
    group by house_id;
    
    image-20200625215248755

    然后拿着这个表和house_info ,左连接,然后再筛选里面的30天开外的和NULL的。

    
    with temp AS
    (select house_id, max(tele_date)  as last_call
    from telephone_info
    where is_connected = 1
    group by house_id)
    select 
    a.house_id, date_format(last_call, '%Y-%m-%d') as 电话拨打时间  -- date_format  设置格式。。
    from house_info a left join temp b
    on a.house_id = b.house_id
    where (DATEDIFF(now(),last_call) > 30) or (last_call is NULL);
    
    
    image-20200625215945299

2、python基础

1.下面这段代码的输出结果是什么?请解释

def extendList(val,list=[]): 

    list.append(val) 

    return list 


list1 = extendList(10) 

list2 = extendList(123,[]) 

list3 = extendList('a') 



print("list1 = %s" %list1)  

print("list1 = %s" %list2) 

print("list1 = %s" %list3) 
  • [10] 因为list没有传入

  • [123] 因为list传入的是空的

  • ['a'] 因为没有传入list

    实际的答案竟然是

    image-20200625221114334

    原因在于多次调用默认参数的时候,默认的那个list参数竟然是同一个,然后list又是可变类型的变量,所以直接在变量身上就地修改了。

2.

2.1下面这段代码输出什么?

num = 9 
def f1(): 
 num = 20 
def f2(): 
 print(num) 
f2() 
f1() 
f2()

9

9

需要global标记才能是这个变量引用全局的变量

2.2在以上代码的基础上如何进行修改使得

def f1(): 
    global num
    num = 20 

输出结果为:

9

20

2.3以下两段代码运行之后结果是否相同?为什么?

第一段:

l=[] 

for i in range(10): 
   l.append({'num':i}) 
print(l) 

第二段:

l=[] 
a={'num':0} 
for i in range(10): 
   a['num']=i 
   l.append(a) 

print(l) 

一个结果 是

[{num:1}, {num:2},{num:3},{num:4},...]

另一个的结果是

[{num:9}, {num:9},{num:9},{num:9},...]

3、python进阶

1.python的传参是传值还是传址

引用

2.如何判断同一个DataFrame中的一列是否包含另一列的元素(举例说明)

生成的代码

import pandas as pd
import numpy as np

s1 = pd.Series(list('ABCDEF'))
s2 = pd.Series(list('EFGHIJ'))

df = pd.DataFrame({'key1':s1, 'key2':s2})
df
image-20200625223314980

判断的代码,用类似sql中自关联

merged = pd.merge(df, df, left_on='key1', right_on='key2')
print(merged)
print("有交集吗={}".format(merged.shape[0] > 0))
image-20200625223904216

3.尝试将以下SQL语句功能用Pandas表达(提示:结合DataFrame的GROUP BY、agg、filter函数)

SELECT user_id, buy_month, mean(price), sum(pro_count) 

FROM sales_tab 

WHERE sex='male'

GROUP BY user_id, buy_month 

HAVING count(*) > 1  # 只考虑当月购买次数多余1 的情况

3.1 原始数据

df = pd.DataFrame({'user_id':[1, 2, 3, 2, 3] ,
                   'buy_month':[1, 2, 2, 2, 2],
                   'sex':['male', 'male', 'male', 'male', 'male'],
                   'price':[1, 2, 3, 4,5],
                   'pro_count':[1, 1, 1, 1, 1]
                  })
df
image-20200625230856437

3.2 where字句 与loc对应

#  相当于where
df = df[ df.sex=='male']
df
image-20200625230933824

3.3 groupgy等价

# group by 
groups = df.groupby( ['user_id', 'buy_month'])
groups.size()
image-20200625231008830

3.4 聚合函数等价于agg

# agg 相当于sql的聚合函数
month_agg = groups.agg({ 'price':'mean', 'pro_count':'sum', 'user_id':'count', 'buy_month':'count'})
month_agg_renamed = month_agg.rename(columns = {'price':'某人某月购买商品的平均价格', 'pro_count':'某人某月一共买了几件', 'user_id':'某人某月发生几次购买'})
month_agg_renamed
image-20200625231055992

3.5 loc再次筛选相当于having

# 针对汇总的字段 再做一次筛选就相当于 sql中的having
month_agg_renamed[ month_agg_renamed['某人某月发生几次购买']>1]
image-20200625231153371
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容