7个python案例中的数据思维
今天我们也来说下python的7个案例。重点是这些案例反映的思维,在我看来,代码也是思维的一种良好体现
我记得上大学C语言的时候,有个题目是a,b两变量的数据交换。当是我给出的答案是
a,b=b,a,结果惨被打脸。就大部分编程语言而言,这样一个小小的需求,基本上都要通过中间变量去实现。而对于python,a,b=b,a这种写法就已经满足。其实随着学python的深入,会发现这门语言跟人的直觉思考方式非常相似。不信我们来看7个案例
1、计算1+2+…+100的和
普通实现:for循环累计,至少3行代码
Python实现:print(sum(range(1,101)))
解析:
sum函数在无参时,不管内部是什么都是全部相加(range返回的并不是列表,而是自身的对象,这都不重要),所以用一行代码就可以实现。
比如print(sum([1,2],[3,4])),返回值会是10。有没有发现,这种实现方式跟你大脑里面的初步逻辑:1,2,…100先罗列出来,然后直接相加就行了很像。这个过程中不需要用到循环,没学过编程的人也不可能想到循环
2、输入列表[1,2,3,4,5],希望能实现输出是[1,4,9,16,25]
普通实现:先定义一个函数实现平方功能,再for循环调用,至少5行代码
Python实现:
print(list(map(lambdax:x**2,[1,2,3,4,5])))
解析:将平方函数一次性映射与每一个元素,是不是很符合函数的本质,高中的时候,我们学过,函数即直接映射,我们压根不用关心该函数的名称,只需要知道功能就行,是不是很简单粗暴有效。所以python强大就强大在这些地方:各种函数库,你要做的就是搬过来
3、列表[[1,2,3],[4,5,6],[7,8,9]]所有子集展开,输出为[1,2,3,4,5,6,7,8,9]
普通实现:通过索引来实现
Python实现:
print([ jfor i in [[1,2,3],[4,5,6],[7,8,9]] for j in i ])
解析:一层一层分解,先把第一层取出来,看有哪些元素,在此基础上重复操作一次,压根不需要索引。作为分析师,学会对问题进行识别,然后用一些生活中的方法论去解决尤为重要。最怕的就是问题还没想清楚,就直接用户分群聚类(这种情况我见到太多,不想当面吐槽),兄弟,赶紧去面壁
4、x="abc",y="def",z=["d","e","f"],分别求出x.join(y)和x.join(z)返回的结果
解析:
两者的返回值是一样的,都是dabceabcf,join函数能够将列表、元组、字符串中的元素直接进行拼凑,非常好用和人性化。我想到了我第一款正式数据分析软件是SAS,那个时候经常为各种文件格式、变量格式头疼不已,光sas导入文件可能就有各种bug,非常头疼,但还是用了好几年。我们在工作的过程中,往往会形成一种惯性:明明某个业务很有问题,但总是有借口去选择不解决;明明发现自己的分析思路不太体系化,只要能满足当前需要,就选择忽视它。对于分析师产品运营,一直在做业务的优化优化,但如果你自身都没有优化好,你怎么能把工作做的更好。
5、打印出杨辉三角前十行
程序及答案:
解析:
该案例本身的问题非常清晰,难就难在问题的拆解阶段:怎么样去简洁实现杨辉三角。这里用到了两个基础但很混淆知识点,1是列表的+操作是添加,map函数是对列表的每个元素进行操作,而不是列表整体。可以看出,要想进行良好的问题拆解,必须要有扎实的基本功。最近有一位同学遇到一个问题:注册购买率同比下降,而他在看分子分母各自的影响值,这就暴露出问题的拆解阶段需要加强。所以当遇到一个明确的业务问题而无从下手时,就已经说明你对业务的理解要加深:体验产品入手,然后看指标体系,再去和业务沟通。
6、计算2+22+222+2…2222,多少个2由输入控制
解析:
该问题肯定是用循环来解决,难点就是在于怎么样去有效的累积每一个因子。
这里利用小小的字符串相加就很好的实现了每一次的拼接。所以不要小看任何一个知识点。在数据分析中,数据异常是最考验分析师的零散知识点理解深入度。比如趋势异常:你看的是多久趋势,能不能这样环比同比,真的是异常吗。很多时候不是问题多复杂,而是思维固化。最近我也在和很多研发同学聊一些数据异常,他们的反馈是:数据分析师这个思维力太强了,能够打的很开,很快定位到问题
7. 企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
解析:
按照一般的编程逻辑,肯定是通过if elif来分段实现,这是最好理解和最通俗的做法。不过:作为一名分析师,我们的代码、ppt、excel、专题报告还是要有专业度的,所以既要能实现需求,还要能满足审美要求。
这里通过增加辅助列表来实现。实际上,借助额外辅助这种思维非常非常常见。上次文案中的图表制作,就用到了很多辅助线。我们高中做立体几何的时候经常画各种虚拟线,也是这种思想。所以无论你的职位是什么,思维都是想通的,也是需要训练的
好的,今天对python的初步讲解就到这里。顺便提下:上面的代码如果你不太理解,那就先记住他,任何一门学科都是需要记忆力的,而这个也是可以训练的。