加拿大家园论坛

科长开讲:SQL,Python 和 R 语言,20年老兵三分钟给你讲明白,超越一切大学教授和网络博主

原文链接:https://forum.iask.ca/threads/889759/

wodelaoba : 2019-12-27#1
20年一线老兵,只说干货:

1. 有数据库的时候,就只用SQL;

2. 没有数据库的时候,也没有条件建库的时候,1G以下的CSV可以勉强用EXCEL手工处理,1G以上的就必须用Python或者R等语言了;

3. 5个G的CSV巨型文件,如果只是统计,那么就用R。如果除了统计之外,还需要重新处理排序和归纳数据列表,那就用Python;

4. SQL是查询语言,R是统计语言,Python是多功能编程语言(可以兼任查询和统计的功能,当然也可以像JAVE和C一样编程序);

5. 为什么会没有数据库呢?大型互联网和金融分析,需要当天或者2-3个小时内出结果,客户出于安全等考虑,不会授权给乙方数据库操作权限。所以,你只有一个SFTP上面导出的CSV文件,或者AWS CLOUD直接Read Only文件,10G数据量,2个小时内出结果,你的IT DBA不可能给你资源建库,导入数据,然后慢慢用SQL和BI工具处理,你也没有那么多时间。所以Python和R就是你的好朋友了;

6. 即使是甲方自己的人员,出于Production服务器的运行效率,也不会允许BI或者DA等人员,直接在后台数据库上跑SQL,而且很多最新的Apps后台用的也不是传统的SQL服务器,根本无法用SQL+BI的传统方法;

7. 但是对于一个数据科学家或者Data Engineer,90%还是需要SQL,毕竟那种极端案例不多,不是天天都需要996,711去处理10个G的CSV文件,90%的企业,包括亚麻厂,鸽厂,窗户厂,平时也还是在用SQL+BI+PPT去汇报;

8. SQL是九阳神功,Python和R是倚天剑和屠龙刀,没有SQL,任何人在大数据分析这个行业里,走不长,也走不远,很多大学毕业的小孩,尤其是财务背景的文科生转到BI或者DA,总想弯道超车绕过SQL,那是走不通的,SQL无法被超越和替代,SQL是一切万物的基础体能,3000米都跑不下来,还学踢足球?

凝神静气 : 2019-12-27#2
嗯,酝酿一下
洗耳恭听,搬个小板凳坐下。

glenogre1 : 2019-12-27#3
如果是外行,能看懂吗?

霜岳 : 2019-12-28#4
不懂,点赞,争取看懂,转行程序员。

wodelaoba : 2019-12-28#5
第二课:ETL 和 Data Pipeline

程序员是把鱼苗投入大海(湖泊),BI数据科学家是渔民,把长大的鱼苗从大海里面捞出来。这干工作分三步:

1. 数据准备(传统客户端:ETL,云端:Data Pipeline)
2. 数据分析(传统客户端:SAP BO,Power BI,云端:Python写脚本,AWS自带工具等)
3. 数据可视化(Tableau,Qlikview,PPT等)

传统环境下,分析企业内部数据,进销存ERP,CRM,SCM,财务人事Workday,销售和市场,这些都是企业局域网内部的,相当于淡水湖泊,这时候渔民成为BI,做报表的叫BI Developer,底层数据处理的叫做ETL Developer,核心工具SQL + SSIS + 各种前端BI软件(SAP BO,MS Power BI,Tableau,Qlikview),数据接口叫ODBC,JDBC,数据分析前的准备工作叫做ETL,鱼塘成为数据仓库Date Warehouse(Data Mart)。这个阶段的数据大部分都是结构化的,数据量可控,报告周期:周报,月报,季报,年报。传统环境的数据分析,相当于肉少(数据小),刺多(维度多)。做好了,并不简单。

互联网环境下,目前和未来,数据都向云端转移,从淡水湖泊向大海进军,做报表的叫数据科学家,底层数据处理的叫做Data Engineer,数据接口是各种网络端口和API程序。肉多(数据大),刺小(维度少)。看着复杂,其实相对传统环境反而简单,但是消耗时间,因为数据量不可控,报告周期:日报,6小时报,1小时报。

淡水:ETL,萃取,转移,录入,将不同内部业务系统的各种数据,各种离线的CSV,TXT,PDF,通过清理,整合到数据仓库(鱼塘)的过程。前端的BI人员只需要在数据仓库内就可以轻松找到所需要的所有数据和维度,而且由于重新整合了数据结构,所以BI人员的报表应该不用担心效率问题。

深海:Data Pipeline = 传统ETL + SUM (互联网上各种非结构化数据,赞转评,跳转,点击,Review,下单付款信息,后台仓库的ERP,上传附件,库存数据的毫秒级更新,等等)。最大的特点是,支持公有云上面的各种数据处理整合。亚马逊和微软的公有云业务上都有自己的Data Pipeline产品,其实就是云端的ETL工具。

R语言,SAS软件,SPSS软件,是个人版桌面统计工具(家里的鱼缸),不是企业版的BI工具,更不是互联网公有云上的数据科学分析工具,这里不讨论。SAS应用场景局限在一些金融机构,比如基金经理下面都会带几个助理,这几个助理会有人用SAS类似的统计软件处理数据。大学研究所里,做实验,在个人电脑上用SPSS分析一下实验数据,其实就是超大号的EXCEL。

wodelaoba : 2019-12-28#6
第三课:Data Warehouse (Data Mart) 和 Data Lake,Data Ocean

这个内容,我在第一课 课后答疑 1.2 简单概述了一点。

Database 数据库:封闭的有大门的,里面有整齐货架的标准仓库。

Data Warehouse 数据仓库:为了解决数据库的查询效率缺陷而设计,分区域设计的仓库,将大仓库里的数据按照类型重新在依照同类型分区域摆放。从数据库导入数据仓库的过程叫做ETL。

业务系统运行在数据库上,报表系统运行在数据仓库上。

互联网时代的又出现了,露天堆放的货场,货场的优势就是存数据快,货场可以成为:文本数据库和图数据库。图数据库不是存图片的,图数据库没有表,只有线(列,Column),每条线上都可以堆放不同类似的数据,这是传统数据库上的Column不可思议的,抓数据的时候,不是表和表之间的关联,而是把每条线上所需的点构成软连接,从而形成一个虚拟的临时网络图,故谓之“图数据库”。人类的大脑就是“图数据库”,这种又称为,神经网络。

Data Lake:Database + Data Warehouse + 露天堆放场 (文件数据库)+ 各种离线数据

Data Ocean:Data Lake + 其它任何没有包括的内容

阿里巴巴的所谓自研数据库,叫 Ali Data Ocean,其实是个伪科学。

淘宝和天猫,其实后台的科技含量很低,甚至低于京东,和亚马逊无法比,整体访问量惊人,存储量巨大,但是这都毫无意义。因为天猫上百万商家,都是独立的系统,后面就是一个个开源的MySQL,只是简单的网页页面串联起来。用户在NIKE店下单,只影响NIKE店家的后台进销存系统,不会影响三只松鼠。NIKE,三只松鼠,这些店家都是一个小的MySQL系统,蚂蚁雄兵,聚沙成塔。阿里的模式,可以无穷扩大,而不需要技术突破。阿里的最大科技含量在于他的蚂蚁金服,广告系统,会员系统。蚂蚁金服的数据量不及VISA和万事达信用卡,甚至数据量不及工商银行等,广告系统不及Google的十分之一,FB的五分之一。会员店家系统,确实是他的特长,网络上的万达商城,小商品城嘛。

但是,京东和亚马逊这些直营电商,后面是一个总的大库,不可能像阿里一样,构建几百万个小MySQL来处理。所以,亚麻厂研发出来了云计算AWS,用新型的文本数据库技术突破解决了问题。京东还是要依靠甲骨文,IBM这些传统大厂来用老方法不断优化,开发自营平台,不仅仅是财务,业务和成本的必须,也是技术上的必须,所有都自营,IT后台不好消化。

阿里玩的是机海模式,亚麻是技术突破后的降维打击。

shw019 : 2019-12-28#7
看来是很干净利落的样子。

wodelaoba : 2019-12-28#8
第四课:关系型数据库 vs. 对象数据库 vs. 文本数据库 vs. 图形数据库 vs. 无数据库(纯文本文件)

wodelaoba : 2019-12-28#9
第五课:BI developer 和 Data Scientist

给大家看一道笔试题吧,多伦多温哥华的行情

能做出SQL解法的,可以进入初级BI开发人员的面试,起薪7万加刀
能做出Python和R的解法,可以进入初级Data Scientist的面试,起薪10万加刀
如果都能做出来,可以考虑应聘Data Engineer Level I,起薪11万加刀

Problem: Member can make purchase via either mobile or desktop platform. Using the following data table to determine the total number of member and revenue for mobile-only, desktop_only and mobile_desktop.
The input spending table is
member_id date channel spend
1001 1/1/2018 mobile 100
1001 1/1/2018 desktop 100
1002 1/1/2018 mobile 100
1002 1/2/2018 mobile 100
1003 1/1/2018 desktop 100
1003 1/2/2018 desktop 100

The output data is
date channel total_spend total_members
1/1/2018 desktop 100 1
1/1/2018 mobile 100 1
1/1/2018 both 200 1
1/2/2018 desktop 100 1
1/2/2018 mobile 100 1
1/2/2018 both 0 0


SQL solution:

CREATE VIEW member_spend AS
SELECT
date,
member_id,
SUM(CASE WHEN channel == ‘mobile’ THEN spend ELSE 0 END) AS mobile_spend,
SUM(CASE WHEN channel == ‘desktop’ THEN spend ELSE 0 END) AS desktop_spend
FROM
spending
GROUP BY date, member_id;


SELECT
date,
CASE WHEN mobile_spend > 0 AND desktop_spend = 0 THEN ‘mobile’
WHEN mobile_spend = 0 AND desktop_spend > 0 THEN ‘desktop’
WHEN mobile_spend > 0 AND desktop_spend > 0 THEN ‘both’
END AS channel,
SUM(mobile_spend + desktop_spend) AS total_spend,
COUNT(*) AS total_members
FROM member_spend
GROUP BY
date,
CASE WHEN mobile_spend > 0 AND desktop_spend = 0 THEN ‘mobile’
WHEN mobile_spend = 0 AND desktop_spend > 0 THEN ‘desktop’
WHEN mobile_spend > 0 AND desktop_spend > 0 THEN ‘both’
END;

Python pandas:

spending[‘mobile_spend’] = spending[spending.channel == ‘mobile’].spend
spending[‘desktop_spend’] = spending[spending.channel == ‘desktop’].spend
member_spend = spending.group_by([‘date’, ‘member_id’]).sum([‘mobile_spend’, ‘desktop_spend’]).to_frame([‘mobile_spend’, ‘desktop_spend’].reset_index()

SQL

SELECT
date,
CASE WHEN mobile_spend > 0 AND desktop_spend = 0 THEN ‘mobile’
WHEN mobile_spend = 0 AND desktop_spend > 0 THEN ‘desktop’
WHEN mobile_spend > 0 AND desktop_spend > 0 THEN ‘both’
END AS channel,
SUM(mobile_spend + desktop_spend) AS total_spend,
COUNT(*) AS total_members
FROM member_spend
GROUP BY
date,
CASE WHEN mobile_spend > 0 AND desktop_spend = 0 THEN ‘mobile’
WHEN mobile_spend = 0 AND desktop_spend > 0 THEN ‘desktop’
WHEN mobile_spend > 0 AND desktop_spend > 0 THEN ‘both’
END;

Python pandas

member_spend[member_spend.mobile_spend>0 & member_spend.desktop_spend==0], ‘channel’] = ‘mobile’
member_spend[member_spend.mobile_spend==0 & member_spend.desktop_spend>0], ‘channel’] = ‘desktop’
member_spend[member_spend.mobile_spend>0 & member_spend.desktop_spend>0], ‘channel’] = ‘both’


tot_members = member_spend.groupby([‘date’, ‘channel’]).size().to_frame(‘tot_members’).reset_index()
tot_spend = member_spend.groupby([‘date’, ‘channel’].agg({‘mobile_spend’:sum, ‘desktop_spend’:sum}).to_frame([‘mobile_spend’, ‘desktop_spend’])
tot_spend[‘tot_spend’] = tot_spend[‘mobile_spend’] + tot_spend[‘desktop_spend’]
output = tot_members.concat(tot_spend[‘tot_spend’])


R dplyr:

output <- spending %>%
group_by(member_id, date)%>%
summarise(mobile_spend = sum(spend[channel == 'mobile']),
desktop_spend = sum(spend[channel == 'desktop'])) %>%
mutate(channel = ifelse((mobile_spend>0 & desktop_spend>0), 'both',
ifelse(mobile_spend==0, 'desktop', 'mobile'))) %>%
group_by(date, channel)%>%
summarise(total_spend = mobile_spend + desktop_spend,
total_member = n())

wodelaoba : 2019-12-28#10
第六课:ETL developer 和 Data Engineer

凝神静气 : 2019-12-28#11
20年一线老兵,只说干货:

1. 有数据库的时候,就只用SQL;

2. 没有数据库的时候,也没有条件建库的时候,1G以下的CSV可以勉强用EXCEL手工处理,1G以上的就必须用Python或者R等语言了;

3. 5个G的CSV巨型文件,如果只是统计,那么就用R。如果除了统计之外,还需要重新处理排序和归纳数据列表,那就用Python;

4. SQL是查询语言,R是统计语言,Python是多功能编程语言(可以兼任查询和统计的功能,当然也可以像JAVE和C一样编程序);

5. 为什么会没有数据库呢?大型互联网和金融分析,需要当天或者2-3个小时内出结果,客户出于安全等考虑,不会授权给乙方数据库操作权限。所以,你只有一个SFTP上面导出的CSV文件,或者AWS CLOUD直接Read Only文件,10G数据量,2个小时内出结果,你的IT DBA不可能给你资源建库,导入数据,然后慢慢用SQL和BI工具处理,你也没有那么多时间。所以Python和R就是你的好朋友了;

6. 但是对于一个数据科学家或者Data Engineer,90%还是需要SQL,毕竟那种极端案例不多,不是天天都需要996,711去处理10个G的CSV文件。
谢谢。虽然是外行,但给了我大方向上的思路。很不错。

glenogre1 : 2019-12-28#12
哭了,第一课都没看懂,赶快溜
许个心愿:哆啦A梦,如果有SQL从0基础开讲的课就好了。

wodelaoba : 2019-12-28#13
如果把上面6节课的精神全部领会,保证你100%可以通过面试,拿到25万美金的Facebook和谷歌Offer。掌握了5节课,就可以拿到18万美金的亚麻或者微软的Offer。

wodelaoba : 2019-12-28#14
哭了,第一课都没看懂,赶快溜
许个心愿:哆啦A梦,如果有SQL从0基础开讲的课就好了。

你跟我在办公室一周,保证你SQL达到中级水平,CS大学本科的那个Level。

toronto-snow-white : 2019-12-28#15
20年一线老兵,只说干货:

1. 有数据库的时候,就只用SQL;

2. 没有数据库的时候,也没有条件建库的时候,1G以下的CSV可以勉强用EXCEL手工处理,1G以上的就必须用Python或者R等语言了;

3. 5个G的CSV巨型文件,如果只是统计,那么就用R。如果除了统计之外,还需要重新处理排序和归纳数据列表,那就用Python;

4. SQL是查询语言,R是统计语言,Python是多功能编程语言(可以兼任查询和统计的功能,当然也可以像JAVE和C一样编程序);

5. 为什么会没有数据库呢?大型互联网和金融分析,需要当天或者2-3个小时内出结果,客户出于安全等考虑,不会授权给乙方数据库操作权限。所以,你只有一个SFTP上面导出的CSV文件,或者AWS CLOUD直接Read Only文件,10G数据量,2个小时内出结果,你的IT DBA不可能给你资源建库,导入数据,然后慢慢用SQL和BI工具处理,你也没有那么多时间。所以Python和R就是你的好朋友了;

6. 但是对于一个数据科学家或者Data Engineer,90%还是需要SQL,毕竟那种极端案例不多,不是天天都需要996,711去处理10个G的CSV文件。

glenogre1 : 2019-12-28#16
你跟我在办公室一周,保证你SQL达到中级水平,CS大学本科的那个Level。
哈哈,今晚可以做个黄粱美梦了。

求办公室地址 :wdb17:

wodelaoba : 2019-12-28#17
哈哈,今晚可以做个黄粱美梦了。

求办公室地址 :wdb17:

你什么背景,要转行吗?

winnerzhu : 2019-12-28#18
看这套路,会讨论大数据技能库?

lovecanada : 2019-12-28#19
坐地下 仰望听讲

盈楚 : 2019-12-28#20
20年一线老兵,只说干货:

1. 有数据库的时候,就只用SQL;

2. 没有数据库的时候,也没有条件建库的时候,1G以下的CSV可以勉强用EXCEL手工处理,1G以上的就必须用Python或者R等语言了;

3. 5个G的CSV巨型文件,如果只是统计,那么就用R。如果除了统计之外,还需要重新处理排序和归纳数据列表,那就用Python;

4. SQL是查询语言,R是统计语言,Python是多功能编程语言(可以兼任查询和统计的功能,当然也可以像JAVE和C一样编程序);

5. 为什么会没有数据库呢?大型互联网和金融分析,需要当天或者2-3个小时内出结果,客户出于安全等考虑,不会授权给乙方数据库操作权限。所以,你只有一个SFTP上面导出的CSV文件,或者AWS CLOUD直接Read Only文件,10G数据量,2个小时内出结果,你的IT DBA不可能给你资源建库,导入数据,然后慢慢用SQL和BI工具处理,你也没有那么多时间。所以Python和R就是你的好朋友了;

6. 即使是甲方自己的人员,出于Production服务器的运行效率,也不会允许BI或者DA等人员,直接在后台数据库上跑SQL,而且很多最新的Apps后台用的也不是传统的SQL服务器,根本无法用SQL+BI的传统方法;

7. 但是对于一个数据科学家或者Data Engineer,90%还是需要SQL,毕竟那种极端案例不多,不是天天都需要996,711去处理10个G的CSV文件,90%的企业,包括亚麻厂,鸽厂,窗户厂,平时也还是在用SQL+BI+PPT去汇报;

8. SQL是九阳神功,Python和R是倚天剑和屠龙刀,没有SQL,任何人在大数据分析这个行业里,走不长,也走不远,很多大学毕业的小孩,尤其是财务背景的文科生转到BI或者DA,总想弯道超车绕过SQL,那是走不通的,SQL无法被超越和替代,SQL是一切万物的基础体能,3000米都跑不下来,还学踢足球?

sql 能不能算这个,admin 设置了奖金求算法:)


wgwt : 2019-12-28#21
没有SAS???

Nan柯 : 2019-12-28#22
搬个板凳,听科长讲课

JackieCanada20100818 : 2019-12-28#23
谦虚是老兵,其实是大侠,仗剑走天涯!

earthvillager : 2019-12-28#24
手动点赞!修炼到第一层,SQL, Python, R都会一些,年薪多少?

未尝不可 : 2019-12-28#25
20年一线老兵,只说干货:

1. 有数据库的时候,就只用SQL;

2. 没有数据库的时候,也没有条件建库的时候,1G以下的CSV可以勉强用EXCEL手工处理,1G以上的就必须用Python或者R等语言了;

3. 5个G的CSV巨型文件,如果只是统计,那么就用R。如果除了统计之外,还需要重新处理排序和归纳数据列表,那就用Python;

4. SQL是查询语言,R是统计语言,Python是多功能编程语言(可以兼任查询和统计的功能,当然也可以像JAVE和C一样编程序);

5. 为什么会没有数据库呢?大型互联网和金融分析,需要当天或者2-3个小时内出结果,客户出于安全等考虑,不会授权给乙方数据库操作权限。所以,你只有一个SFTP上面导出的CSV文件,或者AWS CLOUD直接Read Only文件,10G数据量,2个小时内出结果,你的IT DBA不可能给你资源建库,导入数据,然后慢慢用SQL和BI工具处理,你也没有那么多时间。所以Python和R就是你的好朋友了;

6. 即使是甲方自己的人员,出于Production服务器的运行效率,也不会允许BI或者DA等人员,直接在后台数据库上跑SQL,而且很多最新的Apps后台用的也不是传统的SQL服务器,根本无法用SQL+BI的传统方法;

7. 但是对于一个数据科学家或者Data Engineer,90%还是需要SQL,毕竟那种极端案例不多,不是天天都需要996,711去处理10个G的CSV文件,90%的企业,包括亚麻厂,鸽厂,窗户厂,平时也还是在用SQL+BI+PPT去汇报;

8. SQL是九阳神功,Python和R是倚天剑和屠龙刀,没有SQL,任何人在大数据分析这个行业里,走不长,也走不远,很多大学毕业的小孩,尤其是财务背景的文科生转到BI或者DA,总想弯道超车绕过SQL,那是走不通的,SQL无法被超越和替代,SQL是一切万物的基础体能,3000米都跑不下来,还学踢足球?
SQL不用说了,数据查询处理王牌
R对大型文本文件处理不行,可以说很差,而且极慢,优点免费,好学,安装包极小,处理统计很好,本来就是统计用语言
Python是好语言,应用于各种场面,

python和sql放在一起比,感觉不合适,不是一类东西啊

JackieCanada20100818 : 2019-12-28#26
SQL不用说了,数据查询处理王牌
R对大型文本文件处理不行,可以说很差,而且极慢,优点免费,好学,安装包极小,处理统计很好,本来就是统计用语言
Python是好语言,应用于各种场面,

python和sql放在一起比,感觉不合适,不是一类东西啊
大讲坛啊!!!

J.X : 2019-12-28#27
python有pyodbc之类的api,可以直接用sql啊。我直接有时候做简单的数据库操作,就直接在function里面写sql了,如果复杂了就用sqlalchemy之类的ORM,看来来更简洁一些

dface2010 : 2019-12-28#28
言简意赅 (y)
期待后续的课程,实例更加生动

Mimi2007 : 2019-12-28#29
20年一线老兵,只说干货:

1. 有数据库的时候,就只用SQL;

2. 没有数据库的时候,也没有条件建库的时候,1G以下的CSV可以勉强用EXCEL手工处理,1G以上的就必须用Python或者R等语言了;

3. 5个G的CSV巨型文件,如果只是统计,那么就用R。如果除了统计之外,还需要重新处理排序和归纳数据列表,那就用Python;

4. SQL是查询语言,R是统计语言,Python是多功能编程语言(可以兼任查询和统计的功能,当然也可以像JAVE和C一样编程序);

5. 为什么会没有数据库呢?大型互联网和金融分析,需要当天或者2-3个小时内出结果,客户出于安全等考虑,不会授权给乙方数据库操作权限。所以,你只有一个SFTP上面导出的CSV文件,或者AWS CLOUD直接Read Only文件,10G数据量,2个小时内出结果,你的IT DBA不可能给你资源建库,导入数据,然后慢慢用SQL和BI工具处理,你也没有那么多时间。所以Python和R就是你的好朋友了;

6. 即使是甲方自己的人员,出于Production服务器的运行效率,也不会允许BI或者DA等人员,直接在后台数据库上跑SQL,而且很多最新的Apps后台用的也不是传统的SQL服务器,根本无法用SQL+BI的传统方法;

7. 但是对于一个数据科学家或者Data Engineer,90%还是需要SQL,毕竟那种极端案例不多,不是天天都需要996,711去处理10个G的CSV文件,90%的企业,包括亚麻厂,鸽厂,窗户厂,平时也还是在用SQL+BI+PPT去汇报;

8. SQL是九阳神功,Python和R是倚天剑和屠龙刀,没有SQL,任何人在大数据分析这个行业里,走不长,也走不远,很多大学毕业的小孩,尤其是财务背景的文科生转到BI或者DA,总想弯道超车绕过SQL,那是走不通的,SQL无法被超越和替代,SQL是一切万物的基础体能,3000米都跑不下来,还学踢足球?

SQL是我的后院,哈哈哈。

wodelaoba : 2019-12-28#30
python有pyodbc之类的api,可以直接用sql啊。我直接有时候做简单的数据库操作,就直接在function里面写sql了,如果复杂了就用sqlalchemy之类的ORM,看来来更简洁一些

你说的是我一直反对的做法。

Python是编程语言(瑞士军刀),SQL是查询语言(菜刀),Python是给SQL帮忙的。无限的扩展Python编辑器,在里面跑SQL,是本末倒置,或者说,根本不清楚数据分析的目的和原理。

你在瑞士军刀加一个菜刀插件,我为什么不直接用菜刀啊?!

只有在确实不能使用SQL的时候,才考虑借Python帮忙,不能上来直接什么都有Python。

BI,数据分析,数据科学,大数据,核心还是:查询。SQL是最好的查询语言,是亲爹。Python是编程语言,是二叔,R是统计语言,是大姑。二叔和大姑,不能替代亲爹。

Python编辑器上加SQL插件,是二叔穿亲爹的衣服,冒充老爹。傻啊?!想爸爸,直接找亲爹就完了。

wodelaoba : 2019-12-28#31
手动点赞!修炼到第一层,SQL, Python, R都会一些,年薪多少?

多伦多,起薪:10万,可以每周至少一天WFH,20天年假,有奖金等
西雅图,起薪:15万,可以每周至少两天WFH,25天年假,有奖金,RSU等
大湾区,起薪:20万,可以每周至少三天WFH,30天年假,有食堂,奖金,RSU,Option等

J.X : 2019-12-28#32
你说的是我一直反对的做法。

Python是编程语言(瑞士军刀),SQL是查询语言(菜刀),Python是给SQL帮忙的。无限的扩展Python编辑器,在里面跑SQL,是本末倒置,或者说,根本不清楚数据分析的目的和原理。

你在瑞士军刀加一个菜刀插件,我为什么不直接用菜刀啊?!

只有在确实不能使用SQL的时候,才考虑借Python帮忙,不能上来直接什么都有Python。

BI,数据分析,数据科学,大数据,核心还是:查询。SQL是最好的查询语言,是亲爹。Python是编程语言,是二叔,R是统计语言,是大姑。二叔和大姑,不能替代亲爹。

Python编辑器上加SQL插件,是二叔穿亲爹的衣服,冒充老爹。傻啊?!想爸爸,直接找亲爹就完了。
做数据库查询,在python编程里面是非常常见的一个操作,要不然就不会有那么多的库支持这种操作了。针对及其简单的查询直接写sql, 在python项目里面。很多大数据的查询都支持raw sql,所以说还是有它应用的场景

J.X : 2019-12-28#33
还有个原因为什么有时候觉得用raw sql方便时因为像pycharm之类的ide非常强大,支持数据库查询,在python里面写sql语句自动完成和debug非常容易,像sqlalchemy之类的ORM自动提示什么的有时候还不灵。当然只写都是内部生产维护用的代码,要拿个客户还是用orm最好,否则别人看起来头痛

wodelaoba : 2019-12-28#34
这个只是针对及其简单的查询。很多大数据的查询都支持raw sql,所以说还是有它应用的场景

现在推Python是潮流,因为大家想去SQL化。关系型数据库慢慢会边缘化,文件型数据库慢慢成为主流,也许以后真的就是SQL给Python当替补了。

Python = JAVA + SQL,一种语言管所有。程序开发和BI两个团队也合并了。呵呵。

还可以开一节课:Python 和 Java (.net 早就挂了,就不讨论了)

jf9781054 : 2019-12-28#35
手动点赞,尽管什么也没听懂。大学时学的是ALGOL,后来自学了FORTRAN和BASIC,估计给楼主当VOLUNTEER的机会都不够格:confused:

J.X : 2019-12-28#36
手动点赞,尽管什么也没听懂。大学时学的是ALGOL,后来自学了FORTRAN和BASIC,估计给楼主当VOLUNTEER的机会都不够格:confused:
上两门网课你就跟上潮流了,现在这些都是普及教育

雾霾和计划生育都害人 : 2019-12-28#37
现在微软都转向 rust了,用rust能不能代替Python?

J.X : 2019-12-28#38
现在推Python是潮流,因为大家想去SQL化。关系型数据库慢慢会边缘化,文件型数据库慢慢成为主流,也许以后真的就是SQL给Python当替补了。

Python = JAVA + SQL,一种语言管所有。程序开发和BI两个团队也合并了。呵呵。

还可以开一节课:Python 和 Java (.net 早就挂了,就不讨论了)
python这么强大?呵呵,我是做civil工程的,用python处理数据是不二选择

FisherC : 2019-12-28#39
新手程序员拜读 学习了

宇航员 : 2019-12-28#40
Python?
可以简单介绍一下吗?
隔行如隔山
闻所未闻啊

勤快银 : 2019-12-28#41
外行像读天书 还是点赞科长:giggle:(y)(y)

larry318 : 2019-12-28#42
能把深奥的知识从宏观角度讲的这么清楚,赞一个。

月盈亏 : 2019-12-28#43
第一课听懂了
第二课是天书

小虫. : 2019-12-28#44
这个系列讲座好 (y)

dennistan2009 : 2019-12-28#45
SQL是我的后院,哈哈哈。
呵呵。

bowen685 : 2019-12-28#46
不懂,点赞,争取看懂,转行程序员。
你说了我想说的

amoyfanglx : 2019-12-28#47
厉害了,坐等后续。

earthvillager : 2019-12-28#48
多伦多,起薪:10万,可以每周至少一天WFH,20天年假,有奖金等
西雅图,起薪:15万,可以每周至少两天WFH,25天年假,有奖金,RSU等
大湾区,起薪:20万,可以每周至少三天WFH,30天年假,有食堂,奖金,RSU,Option等
科长好厉害,这些职位信息都从哪里找到的?有链接吗?咱也去对号入座一下。咋觉得听着是too good to be true? 我认识的计算机博士都不一定能到那个薪水。

earthvillager : 2019-12-28#49
Python?
可以简单介绍一下吗?
隔行如隔山
闻所未闻啊
python是一种编程语言,对于数据处理和分析是必不可少的技能,网上无数的免费课

宇航员 : 2019-12-28#50
python是一种编程语言,对于数据处理和分析是必不可少的技能,网上无数的免费课
谢谢
你在那里还好吗?
好久不见啦

earthvillager : 2019-12-28#51
删了

金角大王 : 2019-12-29#52
Python = JAVA + SQL ???
这个本大王持保留态度,SQL和蟒蛇, JAVA不是同一个概念
现在推Python是潮流,因为大家想去SQL化。关系型数据库慢慢会边缘化,文件型数据库慢慢成为主流,也许以后真的就是SQL给Python当替补了。

Python = JAVA + SQL,一种语言管所有。程序开发和BI两个团队也合并了。呵呵。

还可以开一节课:Python 和 Java (.net 早就挂了,就不讨论了)

rw777 : 2019-12-29#53
只会九阳神功,估计练到第十层了。沒钱挣。科长提拔下?

风中凌乱的男子 : 2019-12-29#54
现在推Python是潮流,因为大家想去SQL化。关系型数据库慢慢会边缘化,文件型数据库慢慢成为主流,也许以后真的就是SQL给Python当替补了。

Python = JAVA + SQL,一种语言管所有。程序开发和BI两个团队也合并了。呵呵。

还可以开一节课:Python 和 Java (.net 早就挂了,就不讨论了)
在这种 拼CPU的场景下,为何不用 Java + MyBatis xml 里面写SQL ? 难道用CPython?

J.X : 2019-12-29#55
Python = JAVA + SQL ???
这个本大王持保留态度,SQL和蟒蛇, JAVA不是同一个概念
就是光点赞忘了质疑一下,Java和python都是full stack的编程语言。sql就是对数据库的一个查询语言,根本不是一回事吧?

wodelaoba : 2019-12-29#56
第一课 课后答疑 1.1

大学里的计算机教授,博士,工资8-20万,因为这些人是理论大师,写文章可以,编程差点。企业里的这些人,相当于自由搏击徐晓东,理论基础最多就是硕士,但是如果和计算机教授博士,硬刚编程和产品开发,一个徐晓东可以干10个太极宗师雷雷。所以徐晓东能挣到30万以上,比雷雷的工资高多了。

谈编程之前,先学历史课,计算机的三大瓶颈:

1. 存储空间

2000年以前,主要矛盾是存储空间,刚有汽车的时候,主要是怎么把汽车的承载量增大。硬盘和内存厂商挣大钱了,做个U盘都是高科技。

2. 计算速度

2000 - 2010年,承载量上去了,就要解决汽车的速度问题了。PC的Intel,移动的高通,图形的英伟达都挣钱了。

3. 读取传输速度

2010年以后,WEB2.0时代,移动互联网时代。汽车普及了,速度上去了,交通就是大问题了,这么多车,如何提高全路网的效率就是大问题。堆硬件,可以缓解,5G,修410那种16车道的高速!但是关键还是交通秩序问题,所以就有了把并行编程语言Pyhton拿来去替代串行查询语言SQL的潮流。云时代的双雄就是:亚麻AWS和微软Azure。

SQL是一个搬运工,传统的主流关系型数据库相当于一个仓库,仓库里有一个大门,里面是整齐的货架,SQL做的就是把工厂运来的数据,放入仓库内货架上准确的横纵竖三维点上。同时,SQL还需要把仓库内货架上的数据按照要求搬出啦,放在零售商的卡车上运给客户。

上述过程是一个串行过程,甲骨文设计关系型数据库时是上世纪80年代,所以要求必须节省空间,而对速度要求不高。所以,在第三代关系型数据库基础上就有了第四代的对象型数据库。


在这种 拼CPU的场景下,为何不用 Java + MyBatis xml 里面写SQL ? 难道用CPython?

Python = JAVA + SQL ???
这个本大王持保留态度,SQL和蟒蛇, JAVA不是同一个概念

现在微软都转向 rust了,用rust能不能代替Python?

Python?
可以简单介绍一下吗?
隔行如隔山
闻所未闻啊

wodelaoba : 2019-12-29#57
第一课 课后答疑 1.2

第四代的对象型数据库,又称为数据仓库。为了解决从库里面快速筛检理货的问题,把一个大仓库,分散成若干个小区域,每个区域有开小门可以接货车,每个区域只存放特定条件的数据,比如北京地区的手机,上海地区的奶粉,广州地区的面膜,这样的好处是查询方便快速。缺点是:写入速度慢,SQL需要提前思考,把工厂运来的数据放在哪个区域,这就是ETL。

第三代数据库:关系型数据库,DBA管理员,数据库程序员(开发自定义函数,存储过程,触发器等)。

第四代数据库:对象型数据库,BI报表开发人员,ETL程序员,Data Architect数据架构师。

可见,对象型数据库只是解决了查询效率问题,但是对海里数据的录入没有帮助。所以就有了,第五代:文件型数据库。目前Salesforce的web CRM系统就是这种数据库。Google和百度这些搜索引擎,脸书这样的互联网公司用的也是文件型数据库。

第五代数据库:文件型数据库,简单说就是露天暴力堆放,没有货架,没有外墙和大门,卸货的速度解决了,所以又有了查询速度的问题。乱堆之后,怎么拣货啊,大海捞针啊,都没有SQL下脚的地方了?

sherlock : 2019-12-29#58
不明觉厉,给楼主点个赞,留个爪,期待以后能看懂

wodelaoba : 2019-12-29#59
科长好厉害,这些职位信息都从哪里找到的?有链接吗?咱也去对号入座一下。咋觉得听着是too good to be true? 我认识的计算机博士都不一定能到那个薪水。

17万美金,差不多22万加刀了。

Estimated salary
For Senior Data Engineer in Greater Seattle Area at Amazon

  • Base salary
    $136,000/yr
    Range: $118K to $156K
    Range: $118K – $156K
  • Total compensation
    $172,000/yr
    Range: $139K to $214K
    Range: $139K – $214K

https://www.linkedin.com/jobs/view/1655195134/

wodelaoba : 2019-12-29#60
如果去亚麻新厂AWS,工资更高。21万美金,27万多加刀了。大家好好干吧。

Estimated salary
For Senior Data Engineer in Greater Seattle Area at Amazon Web Services (AWS)

  • Base salary
    $137,000/yr
    Range: $116K to $160K
    Range: $116K – $160K
  • Total compensation
    $212,000/yr
    Range: $154K to $291K
    Range: $154K – $291K

https://www.linkedin.com/jobs/view/1621848895

lkkkkk : 2019-12-29#61
学习了·

epie : 2019-12-29#62
如果把上面6节课的精神全部领会,保证你100%可以通过面试,拿到25万美金的Facebook和谷歌Offer。掌握了5节课,就可以拿到18万美金的亚麻或者微软的Offer。
唉 作为一个资深IT从业人士看到这些话真是无语了
骗小白没意思

未尝不可 : 2019-12-29#63
唉 作为一个资深IT从业人士看到这些话真是无语了
骗小白没意思
哈哈,不过科长多少还是言之有物的

earthvillager : 2019-12-29#64
赞力太弱。手动点赞一下。那些17万以上的肯定是给计算机专业做data engineer的。平常人转行拿到那些职位还是有很大难度的。不过试一下也不会少了什么。印度人随便学个hello world都是软件工程师,咱中国人都是太过谦虚,妄自菲薄。反正闲着也是闲着,与其网上打架,不如闭关修炼半年,神功练成拿一个大包裹岂不美哉?

LIGHTBLUE168 : 2019-12-30#65
科长全能 (y) ,搬个板凳,听科长讲课

winnerzhu : 2019-12-30#66
你说的是我一直反对的做法。

Python是编程语言(瑞士军刀),SQL是查询语言(菜刀),Python是给SQL帮忙的。无限的扩展Python编辑器,在里面跑SQL,是本末倒置,或者说,根本不清楚数据分析的目的和原理。

你在瑞士军刀加一个菜刀插件,我为什么不直接用菜刀啊?!

只有在确实不能使用SQL的时候,才考虑借Python帮忙,不能上来直接什么都有Python。

BI,数据分析,数据科学,大数据,核心还是:查询。SQL是最好的查询语言,是亲爹。Python是编程语言,是二叔,R是统计语言,是大姑。二叔和大姑,不能替代亲爹。

Python编辑器上加SQL插件,是二叔穿亲爹的衣服,冒充老爹。傻啊?!想爸爸,直接找亲爹就完了。
用python连接不同的sql确实很常见和实用。目的也是你提的,能用sql就不用自己写逻辑。python调用sql只是把要运行的query发到对应的数据库,具体还是数据库运行sql,query,并不是用python的interpreter去运行sql。

winnerzhu : 2019-12-30#67
现在推Python是潮流,因为大家想去SQL化。关系型数据库慢慢会边缘化,文件型数据库慢慢成为主流,也许以后真的就是SQL给Python当替补了。

Python = JAVA + SQL,一种语言管所有。程序开发和BI两个团队也合并了。呵呵。

还可以开一节课:Python 和 Java (.net 早就挂了,就不讨论了)
python还替不了。除非学会cython或用c或c++写自己的库,那才能一招鲜吃遍天

wodelaoba : 2019-12-30#68
赞力太弱。手动点赞一下。那些17万以上的肯定是给计算机专业做data engineer的。平常人转行拿到那些职位还是有很大难度的。不过试一下也不会少了什么。印度人随便学个hello world都是软件工程师,咱中国人都是太过谦虚,妄自菲薄。反正闲着也是闲着,与其网上打架,不如闭关修炼半年,神功练成拿一个大包裹岂不美哉?

完全正确。BI Big Data 领域,属于半IT行业,也属于新兴高薪行业,传统行业转行过来的可能性和可操作性比CS要容易很多。

winnerzhu : 2019-12-30#69
现在很多文章神化python在数据分析的地位,其实主要原因是他在人工智能方面的library是最完善和易用的,而且tensorflow ,sklearn呵pytorch这三大神级library。和他本身的功能无关。如果有团队愿意用Java搞出一模一样的library,很多企业会转移用Java或Scala。会python而不会这几个library,其实还是没有用

winnerzhu : 2019-12-30#70
完全正确。BI Big Data 领域,属于半IT行业,也属于新兴高薪行业,传统行业转行过来的可能性和可操作性比CS要容易很多。
我会说big data要求比传统行业更高。要会的东西更多。是传统行业的基础上加上大数据的要求,所以更难转移。你可以提哪些要求是传统行业有的大数据没有。

wodelaoba : 2019-12-30#71
现在很多文章神化python在数据分析的地位,其实主要原因是他在人工智能方面的library是最完善和易用的,而且tensorflow ,sklearn呵pytorch这三大神级library。和他本身的功能无关。如果有团队愿意用Java搞出一模一样的library,很多企业会转移用Java或Scala。会python而不会这几个library,其实还是没有用

SQL
串行计算 - 必杀
非完全开源(Oracle和MySQL都是一个老板,大家拒绝再交保护费) - 杀

JAVA(全能型选手)
并行计算 - 不杀
非完全开源(Oracle是JAVA老板,Google是安卓老板,大家不愿意受控制) - 杀

Python(不完善的全能型选手,不完善才有建功立业的空间,强推)
并行计算 - 不杀
完全开源(没有大佬,大家都可能成为大佬,跑马圈地,冲啊!)- 不杀

.NET(微软的私房菜,虽然开源了)- 杀

J.X : 2019-12-30#72
我会说big data要求比传统行业更高。要会的东西更多。是传统行业的基础上加上大数据的要求,所以更难转移。你可以提哪些要求是传统行业有的大数据没有。
对很多传统行业来说,big data并不一定好入门,主要原因是很多人的工作内容跟big data没有关系。比如我用Python做很多数据处理的自动流程,但是数据的规模跟big data没有关系,在本行业内想过渡到big data处理目前看来是没有指望。其实只要有需求,我相信行业内转big data比科班出身容易,因为需要有对本行业数据和工作流程的了解

winnerzhu : 2019-12-30#73
我会说big data要求比传统行业更高。要会的东西更多。是传统行业的基础上加上大数据的要求,所以更难转移
对很多传统行业来说,big data并不一定好入门,主要原因是很多人的工作内容跟big data没有关系。比如我用Python做很多数据处理的自动流程,但是数据的规模跟big data没有关系,在本行业内想过渡到big data处理目前看来是没有指望。其实只要有需求,我相信行业内转big data比科班出身容易,因为需要有对本行业数据和工作流程的了解
我是传统数据处理和大数据都干过。大数据主要是要理解partitioning和small size fileproblem。有空我开个帖子谈

earthvillager : 2019-12-31#74
好多干货,赞一个

J.X : 2020-01-07#75
第五课:BI developer 和 Data Scientist

给大家看一道笔试题吧,多伦多温哥华的行情

能做出SQL解法的,可以进入初级BI开发人员的面试,起薪7万加刀
能做出Python和R的解法,可以进入初级Data Scientist的面试,起薪10万加刀
如果都能做出来,可以考虑应聘Data Engineer Level I,起薪11万加刀

Problem: Member can make purchase via either mobile or desktop platform. Using the following data table to determine the total number of member and revenue for mobile-only, desktop_only and mobile_desktop.
The input spending table is
member_id date channel spend
1001 1/1/2018 mobile 100
1001 1/1/2018 desktop 100
1002 1/1/2018 mobile 100
1002 1/2/2018 mobile 100
1003 1/1/2018 desktop 100
1003 1/2/2018 desktop 100

The output data is
date channel total_spend total_members
1/1/2018 desktop 100 1
1/1/2018 mobile 100 1
1/1/2018 both 200 1
1/2/2018 desktop 100 1
1/2/2018 mobile 100 1
1/2/2018 both 0 0


SQL solution:

CREATE VIEW member_spend AS
SELECT
date,
member_id,
SUM(CASE WHEN channel == ‘mobile’ THEN spend ELSE 0 END) AS mobile_spend,
SUM(CASE WHEN channel == ‘desktop’ THEN spend ELSE 0 END) AS desktop_spend
FROM
spending
GROUP BY date, member_id;


SELECT
date,
CASE WHEN mobile_spend > 0 AND desktop_spend = 0 THEN ‘mobile’
WHEN mobile_spend = 0 AND desktop_spend > 0 THEN ‘desktop’
WHEN mobile_spend > 0 AND desktop_spend > 0 THEN ‘both’
END AS channel,
SUM(mobile_spend + desktop_spend) AS total_spend,
COUNT(*) AS total_members
FROM member_spend
GROUP BY
date,
CASE WHEN mobile_spend > 0 AND desktop_spend = 0 THEN ‘mobile’
WHEN mobile_spend = 0 AND desktop_spend > 0 THEN ‘desktop’
WHEN mobile_spend > 0 AND desktop_spend > 0 THEN ‘both’
END;

Python pandas:

spending[‘mobile_spend’] = spending[spending.channel == ‘mobile’].spend
spending[‘desktop_spend’] = spending[spending.channel == ‘desktop’].spend
member_spend = spending.group_by([‘date’, ‘member_id’]).sum([‘mobile_spend’, ‘desktop_spend’]).to_frame([‘mobile_spend’, ‘desktop_spend’].reset_index()

SQL

SELECT
date,
CASE WHEN mobile_spend > 0 AND desktop_spend = 0 THEN ‘mobile’
WHEN mobile_spend = 0 AND desktop_spend > 0 THEN ‘desktop’
WHEN mobile_spend > 0 AND desktop_spend > 0 THEN ‘both’
END AS channel,
SUM(mobile_spend + desktop_spend) AS total_spend,
COUNT(*) AS total_members
FROM member_spend
GROUP BY
date,
CASE WHEN mobile_spend > 0 AND desktop_spend = 0 THEN ‘mobile’
WHEN mobile_spend = 0 AND desktop_spend > 0 THEN ‘desktop’
WHEN mobile_spend > 0 AND desktop_spend > 0 THEN ‘both’
END;

Python pandas

member_spend[member_spend.mobile_spend>0 & member_spend.desktop_spend==0], ‘channel’] = ‘mobile’
member_spend[member_spend.mobile_spend==0 & member_spend.desktop_spend>0], ‘channel’] = ‘desktop’
member_spend[member_spend.mobile_spend>0 & member_spend.desktop_spend>0], ‘channel’] = ‘both’


tot_members = member_spend.groupby([‘date’, ‘channel’]).size().to_frame(‘tot_members’).reset_index()
tot_spend = member_spend.groupby([‘date’, ‘channel’].agg({‘mobile_spend’:sum, ‘desktop_spend’:sum}).to_frame([‘mobile_spend’, ‘desktop_spend’])
tot_spend[‘tot_spend’] = tot_spend[‘mobile_spend’] + tot_spend[‘desktop_spend’]
output = tot_members.concat(tot_spend[‘tot_spend’])


R dplyr:

output <- spending %>%
group_by(member_id, date)%>%
summarise(mobile_spend = sum(spend[channel == 'mobile']),
desktop_spend = sum(spend[channel == 'desktop'])) %>%
mutate(channel = ifelse((mobile_spend>0 & desktop_spend>0), 'both',
ifelse(mobile_spend==0, 'desktop', 'mobile'))) %>%
group_by(date, channel)%>%
summarise(total_spend = mobile_spend + desktop_spend,
total_member = n())
会用python pandas就能够应聘数据科学家?表示严重怀疑,data science工作提的最多的是linear regression, machine learning, or cloud deployment什么的,不否认我相信会Pandas肯定也能学会这些,但是招人的公司不这样想啊,他们都是想找有技术有经验,来了就能用的,不会只考你会不会Pandas就让你做data science的工作的。不写自己会scikit-learn, spark的话面试都不会给你机会吧

peter_123 : 2020-01-12#76
谢谢大师的讲解,我是机械制造行业,行业不太景气,想改行可以吗?是不是行业离的太远?谢谢

lkkkkk : 2020-01-12#77
我是传统数据处理和大数据都干过。大数据主要是要理解partitioning和small size fileproblem。有空我开个帖子谈
期待

ca2008 : 2020-01-16#78
传统行业转数据分析师难度大吗?不是转做科学家。

wodelaoba : 2020-01-16#79
传统行业转数据分析师难度大吗?不是转做科学家。

技术上没有难度,关键在于那些年轻人是否给大家伙机会。

A___ : 2020-01-17#80
如果把上面6节课的精神全部领会,保证你100%可以通过面试,拿到25万美金的Facebook和谷歌Offer。掌握了5节课,就可以拿到18万美金的亚麻或者微软的Offer。
这纯粹瞎扯,现在大厂考算法都考成什么样了都。

J.X : 2020-01-18#81
传统行业转数据分析师难度大吗?不是转做科学家。
传统行业最好在自己行业内找数据分析和自动化编程的机会

wodelaoba : 2020-01-18#82
传统行业最好在自己行业内找数据分析和自动化编程的机会

Why? 传统行业数据分析,15万最多封顶了,HiTech互联网上不封顶,20多万都是平均值,人往高处走,水往低处流。

J.X : 2020-01-18#83
一步一步来。我就是传统行业的,现在都在怎么想进入互联网行业,行业之间有壁垒,慢慢积累,慢慢找机会

ca2008 : 2020-01-19#84
我想转行做数据分析,怎么上手快点?
比如学sql 面试时会被考sql

ca2008 : 2020-01-19#85
40多岁的移民转IT 有机会吗?比如做DBA之类 或Python 开发。

宇航员 : 2020-01-19#86
传统行业最好在自己行业内找数据分析和自动化编程的机会
好贴!
不能沉底啊!
大家怎么不讨论了啊?
宇航员说几句(句句金言):

1. 在自己行业内

这几个字很重要
科长 所言都仅仅是工具而已
当然由于普通人不会这些工具,才导致了所谓的数据科学家等的出现

2. 如果你通晓本行业情况,可能比纯数据科学家更受欢迎。

比如,保险行业要招一个数据科学家
宇航员会用科长提到的R和Python
那么,宇航员如果去竞聘,肯定秒杀非保险行业的人,甚至科长这样的技术大拿

原因正如科长指出的:学习这些工具,仅需3分钟
(当然是夸张的说法,但是时间不长,是肯定的,就像学习开车,不是造车)
而你要学习保险知识,则需要数年的慢慢积累。

与大家商榷。
希望深入讨论。
谢谢大家!

未尝不可 : 2020-01-19#87
第五课:BI developer 和 Data Scientist

给大家看一道笔试题吧,多伦多温哥华的行情

能做出SQL解法的,可以进入初级BI开发人员的面试,起薪7万加刀
能做出Python和R的解法,可以进入初级Data Scientist的面试,起薪10万加刀
如果都能做出来,可以考虑应聘Data Engineer Level I,起薪11万加刀

Problem: Member can make purchase via either mobile or desktop platform. Using the following data table to determine the total number of member and revenue for mobile-only, desktop_only and mobile_desktop.
The input spending table is
member_id date channel spend
1001 1/1/2018 mobile 100
1001 1/1/2018 desktop 100
1002 1/1/2018 mobile 100
1002 1/2/2018 mobile 100
1003 1/1/2018 desktop 100
1003 1/2/2018 desktop 100

The output data is
date channel total_spend total_members
1/1/2018 desktop 100 1
1/1/2018 mobile 100 1
1/1/2018 both 200 1
1/2/2018 desktop 100 1
1/2/2018 mobile 100 1
1/2/2018 both 0 0


SQL solution:

CREATE VIEW member_spend AS
SELECT
date,
member_id,
SUM(CASE WHEN channel == ‘mobile’ THEN spend ELSE 0 END) AS mobile_spend,
SUM(CASE WHEN channel == ‘desktop’ THEN spend ELSE 0 END) AS desktop_spend
FROM
spending
GROUP BY date, member_id;


SELECT
date,
CASE WHEN mobile_spend > 0 AND desktop_spend = 0 THEN ‘mobile’
WHEN mobile_spend = 0 AND desktop_spend > 0 THEN ‘desktop’
WHEN mobile_spend > 0 AND desktop_spend > 0 THEN ‘both’
END AS channel,
SUM(mobile_spend + desktop_spend) AS total_spend,
COUNT(*) AS total_members
FROM member_spend
GROUP BY
date,
CASE WHEN mobile_spend > 0 AND desktop_spend = 0 THEN ‘mobile’
WHEN mobile_spend = 0 AND desktop_spend > 0 THEN ‘desktop’
WHEN mobile_spend > 0 AND desktop_spend > 0 THEN ‘both’
END;

Python pandas:

spending[‘mobile_spend’] = spending[spending.channel == ‘mobile’].spend
spending[‘desktop_spend’] = spending[spending.channel == ‘desktop’].spend
member_spend = spending.group_by([‘date’, ‘member_id’]).sum([‘mobile_spend’, ‘desktop_spend’]).to_frame([‘mobile_spend’, ‘desktop_spend’].reset_index()

SQL

SELECT
date,
CASE WHEN mobile_spend > 0 AND desktop_spend = 0 THEN ‘mobile’
WHEN mobile_spend = 0 AND desktop_spend > 0 THEN ‘desktop’
WHEN mobile_spend > 0 AND desktop_spend > 0 THEN ‘both’
END AS channel,
SUM(mobile_spend + desktop_spend) AS total_spend,
COUNT(*) AS total_members
FROM member_spend
GROUP BY
date,
CASE WHEN mobile_spend > 0 AND desktop_spend = 0 THEN ‘mobile’
WHEN mobile_spend = 0 AND desktop_spend > 0 THEN ‘desktop’
WHEN mobile_spend > 0 AND desktop_spend > 0 THEN ‘both’
END;

Python pandas

member_spend[member_spend.mobile_spend>0 & member_spend.desktop_spend==0], ‘channel’] = ‘mobile’
member_spend[member_spend.mobile_spend==0 & member_spend.desktop_spend>0], ‘channel’] = ‘desktop’
member_spend[member_spend.mobile_spend>0 & member_spend.desktop_spend>0], ‘channel’] = ‘both’


tot_members = member_spend.groupby([‘date’, ‘channel’]).size().to_frame(‘tot_members’).reset_index()
tot_spend = member_spend.groupby([‘date’, ‘channel’].agg({‘mobile_spend’:sum, ‘desktop_spend’:sum}).to_frame([‘mobile_spend’, ‘desktop_spend’])
tot_spend[‘tot_spend’] = tot_spend[‘mobile_spend’] + tot_spend[‘desktop_spend’]
output = tot_members.concat(tot_spend[‘tot_spend’])


R dplyr:

output <- spending %>%
group_by(member_id, date)%>%
summarise(mobile_spend = sum(spend[channel == 'mobile']),
desktop_spend = sum(spend[channel == 'desktop'])) %>%
mutate(channel = ifelse((mobile_spend>0 & desktop_spend>0), 'both',
ifelse(mobile_spend==0, 'desktop', 'mobile'))) %>%
group_by(date, channel)%>%
summarise(total_spend = mobile_spend + desktop_spend,
total_member = n())
哈哈,科长的太强调编程语言了,有点忽悠人
在我眼里,这个行业到了一定的年限,
基本上语言已经不是考核重点了,都是共通的,
再新的语言,稍微花一点时间学一下,就能上手了

宇航员 : 2020-01-19#88
很佩服科长:深入浅出,提纲挈领。
确实秒杀大学教授,尤其是众多加拿大混子教授。

宇航员 : 2020-01-19#89
哈哈,科长的太强调语言了,
在我眼里,这个行业到了一定的年限,
基本上语言已经不是考核重点了,都是共同的,
语言也确实很重要
所以,科长功不可没,居功至伟。
比如,我们众多加拿大技术移民就是在语言上吃了大亏
虎落平川糟印度人欺负

宇航员之所以能在精算领域所向披靡游刃有余
就是因为宇航员英语(和同类人比而已)出类拔萃

未尝不可 : 2020-01-19#90
语言也确实很重要
所以,科长功不可没,居功至伟。
比如,我们众多加拿大技术移民就是在语言上吃了大亏
虎落平川糟印度人欺负
我说的是编程语言,

未尝不可 : 2020-01-19#91
这纯粹瞎扯,现在大厂考算法都考成什么样了都。
科长还是有干货的,不过喜欢夸张的说,

宇航员 : 2020-01-19#92
我说的是编程语言,
我当然明白
编程语言之于专业人员
恰恰类似于英语之于技术移民

我没有想到你连这个也没看不懂
出乎意料啊

宇航员 : 2020-01-19#93
科长还是有干货的,不过喜欢夸张的说,
科长当然有本领
这是不争的事实

对于有本事的人, 我不反感(甚至鼓励他们)傲气
人家有资本啊:何况科长那么风趣?
这在技术人员(也就是书呆子)中,是非常难得的品质,是极其聪惠的体现
比如:宇航员
非常难得!

所以,我建议大家:

1. 人啊,一定要全面,文理都通,才能游刃有余。例子:江泽民
2. 要时刻紧盯技术发展前言科技,更新知识。

谢谢大家!

未尝不可 : 2020-01-19#94
我当然明白
编程语言之于专业人员
恰恰类似于英语之于技术移民

我没有想到你连这个也没看不懂
出乎意料啊

啥啊,面试软件工程师,

一个会一种编程语言的,作出了一道算法题

一个会2种编程语言,只能解出简单的数据查询

你会选哪一个?

asania : 2020-01-19#95
呵呵,说的我都想改行了!不过编程需要天赋,弱弱问一句,没有天赋的非IT人士,能有机会吗?

peter_123 : 2020-01-20#96
行业跨度太大,的确难度不小,因为经验没有连续性,一切从0开始。

Mayeye : 2020-01-20#97
呵呵,说的我都想改行了!不过编程需要天赋,弱弱问一句,没有天赋的非IT人士,能有机会吗?

没有机会,别问了,哥就是没有coding天赋的,虽然我还磨了一个软件工程的master出来,但事实印证不擅长就是不擅长。 我花了2年认清了这个现实,然后在另一条道路上去发力和投入,并不后悔。而且我的工作领域一直多少和软件相关,只是不擅长做码农并不是你和整个IT行业绝缘了。

科长和宇航员两个直炮筒已经精辟的帮我们点到了实质,软件始终都是工具,只搞纯软在将来也就是民工的角色,交叉学科,交叉职业是吃香的趋势,具备其他专有行业背景,再懂点编程,你就是香饽饽大拿。职场上掌握议价权。

和投资一样,自我职业的规划切忌人云亦云,每个人都是特殊的一块料,一窝蜂去挤某一个不一定适合自己的行当都不会达到预期。不过先清晰地认识自己,倒是必要的第一步。

asania : 2020-01-20#98
没有机会,别问了,哥就是没有coding天赋的,虽然我还磨了一个软件工程的master出来,但事实印证不擅长就是不擅长。 我花了2年认清了这个现实,然后在另一条道路上去发力和投入,并不后悔。而且我的工作领域一直多少和软件相关,只是不擅长做码农并不是你和整个IT行业绝缘了。

科长和宇航员两个直炮筒已经精辟的帮我们点到了实质,软件始终都是工具,只搞纯软在将来也就是民工的角色,交叉学科,交叉职业是吃香的趋势,具备其他专有行业背景,再懂点编程,你就是香饽饽大拿。职场上掌握议价权。

和投资一样,自我职业的规划切忌人云亦云,每个人都是特殊的一块料,一窝蜂去挤某一个不一定适合自己的行当都不会达到预期。不过先清晰地认识自己,倒是必要的第一步。
谢谢回复。说得太好了。点了一个赞,可是好像赞力为“0”了。

zhangyazhuo : 2020-02-22#99
科长,继续出题

lottery : 2020-02-23#100
科长处处洋溢着对SQL的无比热爱

peter_123 : 2020-02-23#101
继续

游客. : 2020-12-15#102
K K, 才看到此贴。

Mayeye : 2020-12-15#103
科长当然有本领
这是不争的事实

对于有本事的人, 我不反感(甚至鼓励他们)傲气
人家有资本啊:何况科长那么风趣?
这在技术人员(也就是书呆子)中,是非常难得的品质,是极其聪惠的体现
比如:宇航员
非常难得!

所以,我建议大家:

1. 人啊,一定要全面,文理都通,才能游刃有余。例子:江泽民
2. 要时刻紧盯技术发展前言科技,更新知识。

谢谢大家!
长者躺枪 :ROFLMAO: