php空值怎么定义,函数参数的各种语法特征?
一、函数的基本语法
语法
function functionName(类型限定 参数列表) : 返回值类型
{
}
案例:计算两个数之和。
function sum (int $a, int $b) : string
{
return $a + $b;
}
echo sum(1, 2); // 3
二、函数的分类
2.1 命名函数
命名函数自动提升到脚本顶部,在全局任何地方都能调用。// 按函数名称调用
demo1('残破的蛋蛋');
// 声明一个demo1函数
function demo1($name) {
echo "My name is ${name}.";
}
以上代码会输出:My name is 残破的蛋蛋.2.2 匿名函数
没有指定具体函数名称的函数叫匿名函数,也叫闭包函数。$var = function () {
// TODO
}
以上声明的就是一个匿名函数,它需要把函数赋给一个变量,然后通过变量去调用。$demo2 = function () {
echo "Hello World!";
}
$demo2(); // Hello World!
匿名函数通过变量调用,以上结果为:Hello World!。三、函数的参数
3.1 必选参数
function person1 (string $name) : string
{
return "Hello, ${name}!";
}
echo person1('残破的蛋蛋')."<br>"; // Hello, 残破的蛋蛋!
echo person1(123)."<br>"; // Hello, 123!
echo person1(true)."<br>"; // 报错
上述第三次函数调用报错的原因是:当限定了传入的参数类型为字符串时,标量(单值)会自动转换成字符串,但是布尔型、数组、类是无法自动转换的。3.2 可选参数
在定义函数的时候声明了参数,如果在调用的时候没有指定参数或者是少指定了参数,那么就会出现缺少参数的报错。在PHP中,支持函数的默认方式调用,即为函数的参数指定一个默认值,在调用函数的过程中如果没有指定参数的值,那么在函数中会使用参数的默认值。function person2 (string $name, int $age = 20, string $sex = "男") {
echo "我的名字是:${name},年龄:${age}岁,性别:${sex}。<br>";
}
// 我的名字是:残破的蛋蛋,年龄:20岁,性别:男。
person2('残破的蛋蛋');
在上述案例中我们确实为person2()函数声明了三个参数,但是我们只传了一个参数,其他两个参数都使用的是默认值。当调用函数传参的过程中,实参和形参是按照参数传递的顺序一一对应的,如果实参个数少于形参,则后面的形参不会被传值。当使用默认参数时,必须放在非默认参数的后面,否则可能会导致函数不会按照预期的执行。3.3 不定参数
语法
function functionName (...$args) {
// TODO
}
function person3 () {
// 获取传递给函数的所有变量数组
$args = func_get_args();
// 遍历每一个传入的参数
foreach ($args as $key => $arg) {
$num = $key + 1;
echo "第${num}个参数是:${arg}<br>";
}
}
person3('残破的蛋蛋', 30, '男');
// 第1个参数是:残破的蛋蛋
// 第2个参数是:30
// 第3个参数是:男
从PHP5.6以后,可以不使用func_get_args()函数获取可变参数,使用“…”运算符来实现可变长度的函数。function person4 (...$args) {
print_r($args);
}
person4('残破的蛋蛋', 30, '男'); // Array ( [0] => 残破的蛋蛋 [1] => 30 [2] => 男 )
这是一个非常实用的功能,当一个函数的参数过多时,可以不用逐一地传递参数,实用可变参数就可以传参了。四、函数的返回值
通常情况下,函数只允许有一个返回值,原则是“单值”返回的,如果想返回多值怎么办?那么只能在返回值的类型上打主意了,可以通过以下方法来操作。4.1 返回一个数组
function success () : array
{
return ['status' => 1, 'message' => '验证成功'];
}
$res = demo1();
echo $res['status'] ? $res['message'] : '验证失败!'; // 验证成功!
4.2 返回一个对象
function user () : object
{
return new class () {
public $name = 'admin';
public $email = 'admin@abc.cn';
};
}
$user = user();
printf("name = %s,email = %s", $user->name, $user->email); // name = admin,email = admin@abc.cn
4.3 序列化字符串
4.3.1 php内置的序列化函数
如果有一些数据需要进行网络传输或保存到文件或数据表中的时候要用到序列化函数。如果这个序列化的数据只在php程序中使用,应该使用php内置的方法就可以了。function result() : string
{
return serialize(['status' => 1, 'message' => '验证成功']);
}
echo result(); // a:2:{s:6:"status";i:1;s:7:"message";s:12:"验证成功";}
在php中使用时要还原成原来的类型,也就说反序列化:$arr = unserialize($str);
print_r($arr); // Array ( [status] => 1 [message] => 验证成功 )
4.3.2 JSON格式字符串
将数据转为通用的JSON格式字符串,这样的话就可以与其他语言进行数据交换了,例如:JS,JAVA…function demo4() : string
{
// JSON_UNESCAPED_UNICODE 显示中文,否则显示的是编码过的中文字符
// \u9a8c\u8bc1\u6210\u529f
return json_encode(['status' => 1, 'message' => '验证成功'], JSON_UNESCAPED_UNICODE);
}
$str = demo4();
echo $str; // {"status":1,"message":"验证成功"}
如果当前脚本接收到一个前端或其它接口发送过来的json格式的数据,可以使用json_decode进行解析。解析的目的是将外部的json还原成php能够处理的数据类型。$res = json_decode($str);
// 默认将外部的JSON解析成Object类型。
var_dump($res);
printf('status = %d, message = %s<hr>',$res->status, $res->message);
结果:
如果不用对象的方式访问,也可以给json_decode()函数传入第二个参数:true。$res = json_decode($str, true);
printf('status = %d, message = %s<hr>',$res['status'], $res['message']);
结果:
五、函数的作用域
在JS中作用域有三种:全局、函数、块作用域,而在PHP中,只有全局和函数一种作用域。全局变量也称为外部变量,是定义在函数外部的。它的作用域从变量定义处开始。$name = '残破的蛋蛋'; // 声明一个$name的全局变量
$email = '826350863@qq.com'; // 声明一个$email的全局变量
// 声明一个user函数
function user () {
echo "我的名字是:${name},邮箱是:${email}";
}
// 调用函数
user();
结果:
以上结果我们发现报错了,这是因为在上面的代码中,在函数user()外面声明了两个全局变量$name和$email,但是在PHP中,不能直接在函数中使用全局变量,所以在user()函数中使用的变量$name和$email相当于新声明的两个变量,并且没有被赋值,是两个空值,所以会报错。在函数中如果要使用全局变量可以使用global关键字或者$GLOBALS关键字。如下所示:function user1 () {
// 在函数内部使用global关键字引入全局变量,多个变量之间用逗号隔开
global $name, $email;
echo "我的名字是:${name},邮箱是:${email}";
}
user1(); // 我的名字是:残破的蛋蛋,邮箱是:826350863@qq.com
function user2 () {
// 在函数内部使用global关键字引入全局变量,多个变量之间用逗号隔开
echo "我的名字是:{$GLOBALS['name']},邮箱是:{$GLOBALS['email']}";
}
user2();
以上两个函数user1()和user2()都可以正常的输出结果:我的名字是:残破的蛋蛋,邮箱是:826350863@qq.com。在$GLOBALS数组中,每一个变量都是一个元素,变量名就是它的键名,变量值就是对应的键值。$GLOBALS是一个超全局变量。六、闭包
匿名函数就是闭包(官方手册写的),闭包可以访问函数外部的自由变量/父级作用域的变量。$demo2 = function () use ($name, $email) {
return sprintf('name = %s<br>email = %s', $name, $email);
};
echo $demo2();
结果
闭包支持引用传参:参数前加&,示例如下:echo "当前name的值是:${name}<br>";
$demo3 = function ($myName) use (&$name) {
// 闭包中将引用参数更新后,会实时映射到外部的原始参数中
$name = $myName;
echo "现在name的值是:${name}<br>";
};
echo $demo3('拤碎的蛋蛋');
// 输出:
// 当前name的值是:残破的蛋蛋
// 现在name的值是:拤碎的蛋蛋
结果
闭包use禁止使用以下三种参数:超全局不让用$_GET
$this
与当前参数重名不让用
闭包经常用作函数的返回值,示例如下:// 闭包经常用作函数的返回值
function demo4 ($site) {
return function ($color) use ($site) {
return sprintf('<h3 style="color:%s">%s</h3>', $color, $site);
};
}
第一种调用方式:var_dump(demo4('PHP中文网'));
$closure = demo4('PHP中文网');
echo $closure('red');
第二种调用方式:// 通过高阶函数调用:柯里化
echo demo4('PHP中文网')('red');
结果:
七、回调函数
回调函数是指调用函数时传递的不是一个标准的变量,而是将另外一个函数作为参数传递到调用的函数中。call_user_func_array()调用回调函数,并把一个数组作为回调函数的参数。语法:
call_user_func_array ( callable $callback , array $param_arr ) : mixed
案例
class Person {
// 实例方法
public function getName(string $name) : string
{
return "My name is ${name},";
}
public static function age(int $age): string
{
return "年龄是:${age}岁。";
}
}
// 调用实例方法
// 注意,这里必须是要实例化的,除非是static
$str = call_user_func_array(['Person', 'getName'], ['残破的蛋蛋']);
// 调用静态方法
$str .= call_user_func_array(['Person', 'age'], [18]);
// 下面的用法跟上面相同
// $str .= call_user_func_array('Person::age', [18]);
echo $str; // My name is 残破的蛋蛋,年龄是:18岁。
八、静态变量
通常函数中的变量随着函数的调用结束就会自动销毁了,通过下面的案例我们可以得出这个结论:function demo1 () {
$i = 1;
echo "$i <br>";
$i++;
}
demo1(); // 1
demo1(); // 1
demo1(); // 1
demo1(); // 1
以上代码,无论调用多少次demo1()函数结果都是输出1,说明在第2、3、4次调用函数中并没有执行到$i++,每次函数调用都是从$i = 1开始的。如果我们想要让结果保留到下次调用,那么就需要使用到静态变量了,示例如下:function demo2 () {
static $i = 1;
echo "$i <br>";
$i++;
}
demo2(); // 1
demo2(); // 2
demo2(); // 3
demo2(); // 4
以上结果分别输出了1、2、3、4,说明函数中的静态变量不会随函数调用结束而消失,而是进入到了下一次的函数调用中,这种场景可以应用在函数的多次调用中的数据共享/数据通信。前端好入门还是Python好入门?
你好,老修来分享一下你的问题。
相对而言前端会比较容易些,前端:HTML,CSS,Javascript。
HTML文体语言:Javascript:Python:Python需要学哪些基础?Python基础
1、变量的定义与命名方法,行和缩进
2、基本输入输出:print/input
3、基本数据类型:int(整型)、long(长整型)、float(浮点型)、complex(复数)、String(字符串)None(空值)
4、基本算法:+、-、*、/、**、//
运算符:算术运算符比较(关系)、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符、运算符优先级
5、字符编码、格式化
6、条件与循环语句:if--else;for--in、while--break/continue;嵌套使用、pass语句
7、组合数据类型:List(列表)、Tuple(元组)、Dictionary(字典)、set(集合)
8、自定义函数:def、局部变量、6种参数、return语句、调用函数
9、迭代器与生成器
总结相对的前端要好学,但它们俩呢,还不是一个概念呢!你光会前端,是不行滴,同学,还是要掌握一门语言呐。
c语言和PHP?
计科专业从事嵌入式开发多年,从现在的市场行情以及就业的机会上讲php的就业空间还是大于C语言,但并不意味着C语言就已经被淘汰掉了,相反因为高级语言在应用领域使用的范围比较广泛,倒是显得很多底层的编程语言成了稀缺的物种,毕竟对于底层的维护也是一项很重要的工作,况且C语言的使用范围并不是很狭窄,特别是在嵌入式领域还是被广泛的使用中,像华为这种通讯设备厂家对于C语言的使用概率还是非常高的,所以不能简单的认为哪种编程语言最好,还是取决于个人的爱好和兴趣,如果真的对于哪种编程语言就是感兴趣,就可以忽略市场大方向的需求了,因为只要还在市场存在的编程语言证明其还有存在的价值。
而且编程语言之间是相通的,如果已经掌握了一种编程语言在很短的时间内就能切换到另外一种编程语言,毕竟编程思想和编程模式有着太多的相似之处,比如利用php编程编写网络的并发代码,如果已经掌握了大部分的模式再切换到C语言去编程,虽然使用的工具有很大的差异,但是起码从内心上有底,毕竟已经有成熟的案例可以对照学习的过程也能加快好几倍,所以程序员的能力的强弱比较的不是掌握编程语言的数量关键还是实际编程中解决问题的能力,解决问题的能力显得比较笼统,像在项目选择使用什么样子的框架,编程过程中遇到编译不过的语法,解决客户提出棘手的问题,这些都属于解决问题的能力,所以和这些能力相比编程语言已经弱化许多了。
对于这两种编程语言的选择,简单做个介绍如果是想从事后台服务器的php是必选的编程语言,如果是想从事底层的开发C语言是必备编程语言,先要从方向上明确这样在选择的时候不至于犯很大的错误,其实在早期的php编程中也是接近于面向过程的编程,在语法习惯上也是和C语言有很多相似之处,但后续编程语言基本上向着面向对象的趋势在发展所以后来转向面向对象的编程了,相对来讲php属于集成化的编程语言在实际编程过程中可以有很多的类库来使用,对于新手来讲php早期更加容易做出一些复杂的功能。
C语言基本上接近于比较原始的编程语言,想要实现很多功能都需要自己动手去写,但是C语言最大的优势在执行的效率高,而且编程语法非常的灵活所以讲C语言对于底层编程特别的合适,像操作系统代码都是C语言来完成,执行的效率高而且还能灵活多变,但C语言在图形编程方面需要借助于很多成型的图形库,还是更加适合在后台默默的工作,现在比较流行大型算法从效率的角度考虑还是以C语言为主要的编写为主。
在早期大学教程中第一门编程相关的编程语言几乎都是C语言,随着高级语言的流行现在大学的开设的编程语言的种类也多了,再加上编程语言向着集成化的发展,让很多人觉得C语言都是老古董的存在了,个人还是建议如果想长期在编程行业去工作,不妨对这门编程语言学习掌握一下,对于了解底层实现原理还是有着极大的好处,知其然知其所以然,对于了解的编程的框架还是有着极大的好处的,所以如果有时间建议掌握C语言,从知识的纵观程度上还是有着极大的好处的,希望能帮到你。
如何学习数据分析?
想要成为数据分析师,给大家分享一份初级的入门指南!
它包含Excel、数据可视化、数据分析思维、数据库、统计学、业务、以及Python。
这七part 的内容刚好涵盖了一位数据分析师需要掌握的基础体系,也是一位新人从零迈入数据大门的知识手册。
第一part:Excel
每一位数据分析师都脱离不开Excel。
它是日常工作中最常用的工具,如果不考虑性能和数据量,它可以应付绝大部分分析工作。虽然现在机器学习满地走,Excel依旧是无可争议的第一工具。
Excel的学习分为两个部分。
掌握各类功能强大的函数,函数是一种负责输入和输出的神秘盒子。把各类数据输入,经过计算和转换输出我们想要的结果。
在SQL,Python以及R中,函数依旧是主角。掌握Excel的函数有助于后续的学习,因为你几乎在编程中能找到名字一样或者相近的函数。
在「数据分析:常见的Excel函数全部涵盖在这里了」中,介绍了常用的Excel函数。
清洗处理类:trim、concatenate、replace、substitute、left/right/mid、len/lenb、find、search、text
关联匹配类:lookup、vlookup、index、match、row、column、offset
逻辑运算类:if、and、or、is系列
计算统计类:sum/sumif/sumifs、sumproduct、count/countif/countifs、max、min、rank、rand/randbetween、averagea、quartile、stdev、substotal、int/round
时间序列类:year、month、weekday、weeknum、day、date、now、today、datedif
搜索能力是掌握Excel的不二窍门,工作中的任何问题都是可以找到答案。
第二部分是Excel中的工具。
在「数据分析:Excel技巧大揭秘」教程,介绍了Excel最具性价比的几个技巧。包括数据透视表、格式转换、数组、条件格式、自定义下拉菜单等。正是这些工具,才让Excel在分析领域经久不衰。
在大数据量的处理上,微软提供了Power系列,它和Excel嵌套,能应付百万级别的数据处理,弥补了Excel的不足。
Excel需要反复练习,实战教程「数据分析:手把手教你Excel实战」,它通过网络上抓取的数据分析师薪资数据作为练习,总结各类函数的使用。
除了上述要点,下面是附加的知识点,铺平数据分析师以后的道路。
了解单元格格式,数据分析师会和各种数据类型打交道,包括各类timestamp,date,string,int,bigint,char,factor,float等。
了解数组,以及相关应用(excel的数组挺难用),Python和R也会涉及到 list,是核心概念之一。
了解函数,深入理解各种参数的作用。它会在学习Python中帮助到你。
了解中文编码,UTF8、GBK、ASCII,这是数据分析师的坑点之一。
第二part:数据可视化
数据分析界有一句经典名言,字不如表,表不如图。
数据可视化是分析的常用技巧之一,不少数据分析师的工作就是通过图表观察和监控数据。首先了解常用的图表:
Excel的图表可以100%绘制上面的图形,但这只是基础。
在「数据可视化:你想知道的经典图表全在这」中介绍了各类数据分析的经典图表,除了趋势图、直方图,还包括桑基图、空间图、热力图等额外的类型。
数据可视化不是图表的美化,而是呈现数据的逻辑之美,是揭示数据的内在关联。了解图表的维度和适用场景,比好看更重要。比如桑吉图就是我一直推崇的图表,它并不知名,但是它能清晰的揭露数据内在状态的变化和流向。案例是用户活跃状态的趋势。
Excel的图表操作很傻瓜化,其依旧能打造出一份功能强大的可视化报表。「数据可视化:教你打造升职加薪的报表」教给大家常用的Excel绘图技巧,包括配色选取,无用元素的剔除、辅助线的设立、复合图表等方法。
Excel图表的创造力是由人决定的,对数据的理解,观察和认知,以及对可视化的应用,这是一条很长的道路。
图表是单一的,当面板上绘制了多张图表,并且互相间有关联,我们常称之为Dashboard仪表盘。
上图就是用分析师薪资数据为数据源绘制的Dashboard,比单元格直观不少。我们常常把绘制这类Dashboard的工具叫做BI。
BI(商业智能)主要有两种用途。一种是利用BI制作自动化报表,数据类工作每天都会接触大量数据,并且需要整理汇总,这是一块很大的工作量。这部分工作完全可以交给BI自动化完成,从数据规整、建模到下载。
另外一种是使用其可视化功能进行分析,它提供比Excel更丰富的交互功能,操作简单,而且美观,如果大家每天作图需要两小时,BI能缩短大半。
在「数据可视化:手把手打造BI」教程中,以微软的PowerBI举例,教大家如何读取数据,规整和清洗数据,绘制图表以及建立Dashboard。最后的成果就是上文列举的分析师案例。
BI还有几个核心概念,包括OLAP,数据的联动,钻取,切片等,都是多维分析的技巧,也是分析的核心方法之一。
后续的进阶可视化,将和编程配合。因为编程能够提供更高效率和灵活的应用。而BI也是技术方向的工具,了解技术知识对应用大有帮助。
第三part:数据分析思维数据分析能力的高低,不以工具和技巧决定,而以分析思维决定。
在一场战争中,士兵装备再好的武装,进行再严苛的训练,若是冲锋的方向错了,那么迎接他们的唯有一败涂地。
分析思维决定一场「数据战争」中的冲锋方向。只有先养成正确的分析思维,才能使用好数据。
既然是思维,它就倾向于思考的方式,Excel函数学会了就是学会,分析则不同。大多数人的思维方式都依赖于生活和经验做出直觉性的判断,以「我觉得我认为」展开,好的数据分析首先要有结构化的思维。
麦肯锡是其中领域的佼佼者,创建了一系列分析框架和思维工具。最典型地莫过于金字塔思维。
这篇文章简述了该思维的应用,「快速掌握麦肯锡的分析思维」。你能学会结构化思考,MECE原则,假设先行,关键驱动等方法论。
除此以外,还有SMART、5W2H、SWOT、4P4C、六顶思考帽等,这些都是不同领域的框架。框架的经典在于,短时间内指导新人如何去思考,它未必是最好的,但一定是性价比最优的。数据分析思维,是分析思维的引申应用。再优秀的思考方式,都需要佐证和证明,数据就是派这个用处的,「不是我觉得,而是数据证明」。
现代管理学之父彼得·德鲁克说过一句很经典的话:如果你不能衡量它,那么你就不能有效增长它。如果把它应用在数据领域,就是:如果你不能用指标描述业务,那么你就无法有效增长它。每一位数据分析师都要有指标体系的概念,报表也好,BI也好,即使机器学习,也是围绕指标体系建立的。
下图就是一个典型的指标体系,描述了用户从关注产品、下载、乃至最后离开的整个环节。每一个环节,都有数据及指标以查询监控。
不同业务背景需要的指标体系不同,但有几个建立指标的通用准则。这篇文章深入介绍了「如何建立数据分析的思维框架」。你将区分什么是好指标、什么是坏指标、比率和比例、指标的结构、指标设立的维度等概念。
数据分析不是一个结果,而是一个过程。几乎所有的分析,最终目的都是增长业务。所以比分析思维更重要的是驱动思维落地,把它转化为成果。
数据分析思维是常年累月养成的习惯,一周时间很难训练出来,但这里有一个缩短时间的日常习惯。以生活中的问题出发做练习。
这家商场的人流量是多少?怎么预估?
上海地区的共享单车投放量是多少?怎么预估?
街边口的水果店,每天的销量和利润是多少?怎么预估?
这些开放性问题起源于咨询公司的训练方法,通过不断地练习,肯定能有效提高分析思维。另外就是刷各种CaseBook。
优秀的数据分析师会拷问别人的数据,而他本身的分析也经得起拷问。
第四part:数据库
Excel很容易遇到瓶颈,随着业务的发展,分析师接触的数据会越来越多。对大部分人的电脑,超过十万条数据,已经会影响性能。何况大数据时代就是不缺数据,这时候就需要学习数据库了。
即使非数据岗位,也有越来越多的产品和运营被要求使用SQL。
很多数据分析师戏称自己是跑SQL的,这间接说明SQL在数据分析中有多核心。从Excel到SQL绝对是处理效率的一大进步。
教程内容以MySQL为主,这是互联网行业的通用标准。其实语法差异不大的。
新手首先应该了解表的概念,表和Excel中的sheet类似。「写给新人的数据库指南」是一篇入门基础文章,包括表、ID索引、以及数据库的安装,数据导入等简单知识。
SQL的应用场景,均是围绕select展开。增删改、约束、索引、数据库范式均可以跳过。新手在「SQL,从入门到熟练」教程会学习到最常见的几个语法,select、where、group by、if、count/sum、having、order by、子查询以及各种常用函数。
数据还是分析师薪资数据,它可以和Excel实战篇结合看,不少原理都是相通的。
想要快速掌握,无非是大量的练习。大家可以在leetcode上做SQL相关的练习题,难度从简单到困难都有。「SQL,从熟练到掌握」教程中将会带领大家去刷一遍。
join对新手是一个很绕的概念,教程会从图例讲解,逐步提高难度。从一开始的join关联,到条件关联、空值匹配关联、子查询关联等。最后完成leetcode中的hard模式。
如果想要更进一步,可以学习row_number,substr,convert,contact等函数。不同数据平台的函数会有差异,例如Presto和phpMyAdmin。再想提高,就去了解Explain优化,了解SQL的工作原理,了解数据类型,了解IO。知道为什么union比or的效率快,这已经和不少程序员并驾齐驱。
第五part:统计学
很多数据分析师并不注重统计学基础。
比如产品的AB测试,如果相关人员不清楚置信度的含义和概念,那么好的效果能意味着好么?如果看待显著性?
比如运营一次活动,若不了解描述统计相关的概念,那么如何判别活动在数据上的效果?可别用平均数。
不了解统计学的数据分析师,往往是一个粗糙的分析师。如果你想要往机器学习发展,那么统计学更是需要掌握的基础。
统计知识会教大家以另一个角度看待数据。如果大家了解过《统计数据会撒谎》,那么就知道很多数据分析的决策并不牢靠。
在第一篇教程「解锁数据分析的正确姿势:描述统计」,会教给大家描述统计中的诸多变量,比如平均数、中位数、众数、分位数、标准差、方差。这些统计标准会让新手分析师从平均数这个不靠谱的泥潭中出来。
箱线图就是描述统计的大成者,好的分析师一定是惯用箱线图的常客。
第二篇「解锁数据分析的正确姿势:描述统计(2)」将会结合可视化,对数据的分布进行一个直观的概念讲解。很多特定的模型都有自有的数据分布图,掌握这些分布图对分析的益处不可同日而语。
直方图和箱线图一样,将会是长久伴随分析师的利器。
统计学的一大主要分支是概率论,概率是度量一件事发生的可能性,它是介于0到1之间的数值。很多事情,都可以用概率论解释,「概率论的入门指南」和「读了本文,你就懂了概率分布」都是对其的讲解。
包括贝叶斯公式、二项概率、泊松概率、正态分布等理论。理论不应用现实,那是无根之木,教程中会以运营活动最常见的抽奖概率为讲解,告诉大家怎么玩。
其实数据分析中,概率应用最广泛和最全面的知识点,就是假设检验,大名鼎鼎的AB测试就是基于它的。俗话说得好,再优秀的产品经理也跑不过一半AB测试。
何为假设检验?假设检验是对预设条件的估计,通过样本数据对假设的真伪进行判断。
产品改版了,用户究竟喜不喜欢?调研的评分下降了,这是用户的评价降低了,还是正常的数据波动呢?这些都是可以做假设检验的。它可以说是两面两篇文章的回顾和应用。
「数据分析必须懂的假设检验」依旧以互联网场景讲解各种统计技巧的应用。假设检验并不难,通过Excel的几个函数就能完成。它的难点在于诸多知识点和业务的结合使用,实际公式不需要掌握的多透彻,了解背后的意义更重要。
统计学是一个很广阔的领域,包括方差分析,时间序列等,都有各自不同的应用。大家若感兴趣,可以去阅读各类教材,没错,教材是学习统计学最优的方式。我这类文章堪堪算入门罢了。
第六part:业务
对于数据分析师来说,业务的了解比数据方法论更重要。举个例子,一家O2O配送公司发现在重庆地区,外卖员的送货效率低于其他城市,导致用户的好评率降低。总部的数据分析师建立了各个指标去分析原因,都没有找出来问题。后来在访谈中发觉,因为重庆是山城,路面高低落差比较夸张,很多外卖人员的小电瓶上不了坡…所以导致送货效率慢。这个案例中,我们只知道送货员的送货水平距离,根本不知道垂直距离。这是数据的局限,也是只会看数据的分析师和接地气分析师的最大差异。业务形态千千万万,数据分析师往往难窥一二。我的公众号业务部分也涉及了不少,大家可以通过这几篇文章了解。
一篇文章读懂活跃数据;深入浅出,用户生命周期的运营;获取新增用户,运营都应该知道的事;运营的商业逻辑:CAC和CLV;从零开始,构建数据化运营体系;读懂用户运营体系:用户分层和分群,这些都是互联网运营相关的内容,或多或少涉及了不少业务方面的概念,数据分析人员可以选择性的挑选部分内容。了解业务的数据分析师在职场发展上会更加顺利。
而在「最用心的运营数据指标解读」中,我尝试总结了几个泛互联网领域的指标和业务模型,它们都是通用的框架。
产品运营模型:以移动端APP为主体,围绕AARRR准则搭建起数据框架。包括Acquisition用户获取、Activation用户活跃、Retention用户留存、Revenue营收、Refer传播,以及细分指标。
市场营销模型:以传统的市场营销方法论为基底,围绕用户的生命周期建立框架。包括用户生命周期,生命周期价值、用户忠诚指数、用户流失指数、用户RFM价值等。
流量模型:从早期的网站分析发展而来,以互联网的流量为核心。包括浏览量曝光率、病毒传播周期、用户分享率、停留时间、退出率跳出率等。
电商和消费模型:以商品的交易、零售、购买搭建而起。包括GMV、客单价、复购率、回购率、退货率、购物篮大小、进销存,也包含SKU、SPU等商品概念。
用户行为模型:通过用户在产品功能上的使用,获得精细的人群维度,以此作为分析模型。包括用户偏好、用户兴趣、用户响应率、用户画像、用户分层,还包含点赞评论浏览收藏等功能的相关指标。
除了上述的几个常见模型,数据分析还有其他分支。比如SEO/SEM,虽然可以归类到流量模型,但它并不简单。比如财务分析,商业的各种成本支出也需要专人负责。
在业务知识外,业务层面的沟通也很重要。业务线足够长的时候,沟通往往成为老大难的问题。
业务学习没有捷径,哪怕掌握了诸多模型,不同行业间的业务壁垒会是分析师们的门槛。金融的各类专有领域知识,电子商务不同产品的特性,这些都会影响到分析报告的质量。
在早期,新人最好选择一到两个领域深入了解其业务,然后以此拓展边界。
第七part:Python/R
第七周是最后的学习环节。
是否具备编程能力,是初级数据分析和高级数据分析的风水岭。数据挖掘、BI、爬虫、可视化报表都需要用到编程。掌握一门优秀的编程语言,可以让数据分析师升职加薪,迎娶白富美。数据分析领域最热门的两大语言是R和Python。R的优点是统计学家编写的,缺点也是统计学家编写。涉及各类统计函数和工具的调用,R无疑有优势。但是大数据量的处理力有不逮,学习曲线比较陡峭。
Python则是万能的胶水语言,适用性强,可以将分析的过程脚本化。Pandas、Numpy、SKLearn等包也是非常丰富。
这里的教程以Python为主。
「开始Python的新手教程」将会教大家搭建数据分析环境,Anaconda是功能强大的数据科学工具。Python建议安装Python3+版本,不要选择Python2了。
Python的语法相当简洁,大家print出第一个hello world顶多半小时。就像在Excel上进行运算一样方便。
「开始Python的数据结构」介绍给大家Python的三类数据结构,列表list,元组tuple,以及字典dict。万变不离其宗,掌握这三种数据结构以及相对应的函数,足够应付80%的分析场景。函数式编程为Python一大特色,Python自身就提供不少丰富的函数。很多都和Excel的函数相通,掌握起来非常迅速。另外还有控制流,for、while、if,通常配合函数组合使用。
「了解和掌握Python的函数」教大家如何自定义函数,丰富的函数虽然能偷懒,但是不少场景下,还是需要自己动手撸一个。
能够调第三方包解决,就使用第三方的函数。如果是一个频繁使用的场景,而第三方依靠不了,就自己编一个函数。如果是临时性的场景,写得粗糙点也无所谓。毕竟分析师的代码能力不要求工程师那么严格,所以Python的学习尽量以应用为主,不用像分析师那么严格。
包、模块和类的概念属于进阶知识,不学也不要紧。
「Python的数据分析: numpy和pandas入门」介绍了数据分析师赖以生存的两个包,numpy和pandas,其他Python知识可以不扎实,这两个最好认真掌握。它是往后很多技能树的前置要求。
array,series,dataframe是numpy和pandas的三个数据结构,掌握它们,便算是入门了。后续的两篇教程都是实战。
「用pandas进行数据分析实战」以分析师的薪资作为实战数据。Excel、BI、SQL,一路走来,大家想必对它无比熟悉,这也是最后一次使用它了。教程通过Pandas的各类功能,绘制出一副词云图。
最后一篇教程,将结合以往的知识点,包括业务指标,可视化,描述统计学等内容。「用Python分析用户消费行为」,完成它,不说登堂入室,但也是一位合格的数据分析师了。
它使用某网站的用户消费数据,计算各类常见指标:用户的客单价、人均购买量、回购率、复购率、留存率、平均生命周期等,真正做到融会贯通。用一份数据报告作为毕业作品,也是七周系列最好的结业证书了。
对于没有技术基础的同学,第七part最吃力,但已经完成到这一步,不妨让自己咬咬牙学习下去。
最后
如果能够看完到这里的同学,相信你是对数据分析真正感兴趣的。