相信很多人在jupyter notebook画图,是这样的过程,
画什么图? 散点? 柱状?function是什么?google查一下。
嗯,我还差个标题,标题加在哪里,stackoverflow 看看有没有。
对了,我还要调颜色,调坐标,我还想双轴展示,左右展示。
然后,google看了10几个链接,结果,要么花了半个小时,不停试错,终于画出了想要的图,要么还在一个个点google 搜索的link内容。
如果你有大量时间,当然是没什么问题,但是数据岗位求职时候,那些take home challenge可不会给你这么多时间。
所以,在这种情况下,我们只需要掌握这3个function,我们就能快速画出任何(80%)我们想要画的图。
这三个function就是:sns.relplot
sns.catplot
sns.distplot
我们先看看为什么这3个function那么万能。
第一个:sns.relplot
2个连续变量作图
从最简单的x,y轴作图来说,如果x轴和y轴的feature都是连续变量的话,我们就可以用:sns.relplot。
比如,吃饭总价和小费
我们看到
下图sns.relplot和sns.scatter是一样的。
下图sns.relplot 和 sns.line是一样的。
所以,当两个连续变量做图时,不做任何aggregation的话,
我们用sns.relplot就可以了。
我们只需要通过更改sns.relplot(kind=’scatter’, /kind= ‘line’)就可以达到作图的要求了
第二个:sns.catplot
1个分类变量作图,第2个连续变量
sns.catplot故名思议,cat 指的是categorical的意思,所以,只要你的x轴是categorial变量的话,用catplot基本可以解决80%的作图。
举一个例子:
catplot() 和 stripplot() 可以作出同样的图
这里catplot 和relplot 不同的地方,relplot是将原数据的y值直接展现在坐标系作图,
而catplot既可以在y轴呈现原有y的数值,也可以aggregation原数据y后作图。
可以aggegation成平均,或者aggregation成distribution;
比如:
1、aggegation成平均(点图)
2、求aggegation成平均(柱状图)
这里比较讨巧的地方是,我们在做AB测试分析的时候,需要计算conversion rate,我们可以通过catplot,用上图的方法,直接从原数据自动aggregate出来。
非常方便。
3、另外,catplot还能做max,min的distribtuion
4、当然,像sns.catplot开头的那张也可以对y值直接做plot,不做任何的aggregation
5、sns.plot还可直接计算categorical变量出现的次数:
第三种:sns.distplot
从上面sns.catplot(kind=count)功能我们发现,x轴是分量变量,那如果x轴是连续变量,我可以计数吗?
也就是说,我可以plot出连续变量的frequency 的 distribution吗?
当然可以,其实有2方法,第一种,有pandas的cut function,把连续变量分段,变成分段变量(比如把年龄34,23等变成10-20,20-30,30-40等);
第二种功能就是直接用sns.displot()function。
仔细一看是不是就是PDF和CDF图。
以上就是我们为什么可以用sns.relplot, sns.catplot, sns.distplot来快速完成作图了。
到此为止,我们如果只要一种坐标系的图的话,用这三种function就可以了。
最后再来回味一下:
很多人要问,
如果我想分类展示呢,比如左右2个图?
问题1:
左边是AB测试中的test group,右边是AB测试中的control group,左右分类展示,应该怎么作图?
我们可以用catplot 实现,只需在注明其中参数是col = ‘gender’就可以了
问题2:
对于x轴如果是连续变量,也是希望如上图分类展示,应该如何展示?
这时候,我们需要用到前面没有提到的sns.FacetGrid function
问题3:
左右两张图,左图是AB测试,test和control组的样本量,右图是他们的conversion rate。
这时候,我们就不能用catplot了,因为catplot其中没有参数ax的设定。所以我们不能通过告诉ax[0]就是左边,ax[1]就是右边来实现,因为catplot没有ax参数。
我们只能用cat下一层的function,因为这一层级有ax的参数。
问题4:
重叠展示2张图,比如样本量是柱状图,conversion rate是点图,怎么样在同一张图里实现。
同理,因为catplot没有ax的参数输入,所以我们只能用下一层级的function。
问题5:
有没有非常快速加辅助线的方法?
有,如下。
最后的话,掌握这3种function可以快速作图,但是还是希望有空的话,多看看官方文档,加深认识。
完。