Python 知识卡片:Pandas

继续之前的《Python 知识卡片:数据科学入门》,Pandas 最初由 AQR Capital Management 于 2008 年 4 月开发,并于 2009 年底开源出来, 有 NumPy 的加持,让 Pandas 拥有了大量库和一些标准的数据模型,快速便捷地处理数据的函数和方法,可以让我们利用 Python 高效地操作大型数据集,使 Python 成为强大而高效的数据分析环境。Pandas 为了使实际的数据分析更加简单,设计出了快速、灵活而可读性高的数据结构。但可能对于那些刚刚接触 Pandas 的科研人员与学生来说,Pandas 并不是那么容易掌握,尤其是面对这个包里那么多的功能、那么多的选项。这张由 Datacamp 制作的小抄表覆盖了 Pandas 包的基础知识:从数据结构到输入/输出,数据选择,下降指数(Dropping Indices or Columns),数据整理和排序,获取所用数据结构的基本信息,到数据操作的功能应用、数据对齐等等。Python Pandas 库小抄表 PDF 下载。

Python 知识卡片:数据科学入门

这张由 Datacamp 制作的小抄表覆盖了所有 Python 数据科学需要的基础知识。如果你刚开始用 Python,可以留着这张做快速参考。背下这些小抄的代码变量、数据类型函数、字符串操作、类型转换、列表和常用操作。尤其是它列出了重要的 Python 包,给出了用于选择并导入包的小抄代码。查看这份小抄表,你将获得循序渐进学习 Python 的指导。同时,它提供了Python学习的必备包和一些有用的学习技巧等资源。Python 数据科学小抄表 PDF 下载。

经济专业与经济计量学

经济专业的学生要分析统计资料,在标准的统计学课程中所学到的描述性统计,绝大多数学生无法用到实际经济分析中。经济学家发展出比较适用于分析经济资料的统计方法就是经济计量学。若想要比较深入的应用统计方法到经济学研究中,必须进一步学习经济计量学。

—— 原文作者:袁建文(广东财经大学经济学院)

一般人对经济学的直觉反应是:那是一个很高深的理论。然而我们也应该知道,经济学的研究虽然是从严谨抽象的理论出发,但因为研究对象是人的行为,经济学也必须相当“实际”,当我们评断经济理论是否成立时,当然是要看它符不符合人的行为。因此很大一部分经济学研究是以实际资料的观察和分析为中心的。经济专业学生必须有分析资料的能力,经济专业大学课程中,就都有分析资料所需的统计学课程。然而许多学生在标准的统计学课程中所学到的,多是基本的描述性统计以及简单的统计运算,以这样的课程内容,纵使经过一年的学习,绝大多数学生还是无法将所学到的统计方法用到实际经济分析之中。更何况经济专业大学课程需要统计学的地方并不太多,使得大多数学生不太清楚为什么需要必修统计学。在这里我就先稍微描述一下标准统计学课程的内容,然后再说明问题的所在。

经济计量学和统计学

统计学教材大致可分为两部分:概率理论和统计推断,概率理论包括随机变量、密度函数、基望值、变异数等的操作和运算,以及对一些统计分布(正态分布以及相关的卡方分布、t 分布、F 分布等)性质的探讨,这些概率概念和其运算都是统计学第二个部分的推断的基础。而统计推论主要是让我们了解总体和从总体所抽出的样本数据的区别,然后解释如何使用样本数据计算各种统计量,以将样本中的信息,简明而正确的表现出来,从而让我们推断出总体的性质。统计推断的内容大致可分为两部分:参数的估计(估计那些表现总体特征的参数数值和假设检验(检验我们对总体性质先期设定的一些假设)。

不论文科还是理科的学生,所学的统计学入门课程都不脱这样的课程安排,我们自然不难想象,在应用这种通常教育型的统计学到经济学研究中时,便很可能有适用性的问题。这个问题可分为两方面来说,第一,统计学可能教得不够深入,所学到的统计方法不足以应付形形色色的经济资料;第二,统计学常常是以自然科学方面的应用为主,对社会科学的研究可能不完全适用。

统计学初学者所碰到的这些问题,其实也就是五六十年前,经济学家刚开始尝试大规模地对经济资料进行统计分析时所碰到的问题。在解决统计学适用性的数十年过程中,经济学家逐渐发展出比较适用于分析经济资料的许多统计方法(或称计量方法,主要以强调解释变量和应变量之间因果关系的回归模型为重心),也就形成了经济学中的一个独立领域———经济计量学。我们应可从这个经济计量学创始的过程里看出,若想要比较深入的应用统计方法到经济学研究中,我们必须进一步学习经济计量学才可。

经教育部经济学教学指导委员会讨论通过、教育部批准,经济计量学已被确定为经济学各类专业的八门核心课程之一。在美国,经济计量学在大多数经济系的课程中都列为必修课程,在经济系硕士和博士(以及不少管理学院的博士)课程中,经济计量学是和微观经济理论以及宏观经济理论并列为必修课的课程。硕士和博士生通常也都会多修一些中高级的计量课程,这是因为经济系硕士和博士研究生除了少数专攻纯理论的人外,其论文几乎毫无例外的都包含有资料分析及论证研究的部分,因此大多数的经济学者从做学生开始,就要有处理计量方法的能力和经验。

经济计量学和计算机

经济计量学对计算机的需求度在经济学的各个领域中可能是最高的,理由非常简单,经济计量学本来就是为分析资料而兴起的学问,而大规模资料的处理正是计算机的主要功能。另一方面,在经济研究日趋复杂精细的今天,高度非线性的经济模型大行其道,对这些模型的估计必须采用数值方法,其实际计算也只有依赖计算机。事实上,一些经济计量学家使用数值方法及计算机的深度,可能让计算机工程师都感到惊讶。近年来经济计量学对计算机的需要更不限于数据处理和模型估计,许多复杂计量方法的发展往往只能以仿真试验来评估,而仿真试验也只有在计算机中才得以进行。

由于计算机的普及,大多数人对计算机都有所认识,几乎所有的大学生对微软公司的软件,如视窗操作系统或是 Office 系列商用软件都有或多或少的接触。我认为对一个经济计量学的初学者,能够使用 Office 系列中的 Excel 或是同类的电子表格软件中回归分析就算是入门了,其学习成本并不高。我也极力建议初学者一定要尽快对计算机上手,用真实资料做一些简单的估计和实证分析,因为只有实际动手,才能培养出对计量研究的感觉,也才能够体会经济理论在实际世界中的用途。用不了几年后,发现真的能在实际资料中找到验证,你会相当感动的。

若要使用更深入的经济计量方法,当然是需要较电子表格软件更为专业的统计或计量软件,但我仍要强调,电子表格软件在任何阶段的计量分析中都有其功用,因为只要数据数目不是太大,电子表格软件可非常轻松地帮我们整理资料并进行图表绘画等初步分析,而这类分析总是很有助于我们对资料的了解,对资料的了解是所有严谨实证分析的基础。

市面上个人计算机版的统计软件(诸如 SAS、SPSS、Minitab 等)不胜枚举,会用的人也很多,这些统计软件对从事实论证计量研究有帮助,不少经济计量学教科书也都推荐使用这些统计软件。事实上,很多经济计量学家的学术研究也全都是靠这些统计软件来进行的。然而也有更多的学者偏好较为专业的经济计量软件(诸如 Eviews、STATA、TSP、RATS 等),这类计量专业软件在经过多年的改进后,都已相当“平易近人”。一个有普通计算机知识的初学者,通常在一个星期内即可学会一个这类的软件。和统计软件相比,计量专业软件的优点是,其操作手册乃至于界面上所用的名词术语多从经济计量学而来,初学者会觉得比较亲切,也比较不容易发生术语意义不明的状况,使用者想要搜寻某个特定的计量方法也比较容易找到。

前述的统计或经济计量软件都是所谓的软件包,软件包的使用手续大致如下:使用者在使用之前,必须要先确定要用的计量方法在这些软件包中存在,然后根据操作手册键入对应的指令,输入资料,并叫出所要用的计量方法执行之,计算结果便会以标准的形式输出。一般来说,软件包的优点是简单方便,缺点则是任何软件包都不可能有使用者所想用的所有计量方法,基本上也不容许使用者对既有的计量方法作较大的修改,因此软件包有相当大的局限性。为补这种缺点,近年来有名的软件包都不断加入新指令,以让使用者比较容易地修改原有的计量方法,或设计一些概念的计量方法。这些新指令实际上已可说是一种程序语言,其操作方式是让使用者用它将所要的计量方法写成计算机程序后执行之。不少比较深入的实证计量研究结果,都是研究者在软件包原有的计量方法之上,增加修正的计算机程序后所产生。

也有不少的经济计量学家是根本不用软件包的,他们偏好以独立的(不附属于任何软件包的)程序语言编写所有要用的计量方法。这类程序语言除了软件工程师所通用的 C、Fortran、Pascal 等之外,还有为经济计量学家所专属的 GAUSS、Matlab、R  CRAN Task View: Econometrics 等个人计算机程序语言。所谓经济计量学家专属的程序语言通常是指该语言的基本组成元素不是数字,而是向量或矩阵,这种结构适合编写计量方法的计算机程序。

学习程序语言通常较花时间,以 R 语言为例,可能需要至少三天的时间去熟悉其基本操作手续,而想要达到可编写出有意义的计算机程序的地步,则需视程序的难易程序花一天到一个星期的时间,测试计算机程序的正确性通常还需更多的时间。学习程序语言的时间成本的确是比较高的,但我们也要知道程序语言的最大优点在于它的弹性;一个经济计量研究者若能掌握一种程序语言,则计算机能帮他做的事基本上将不再有任何的限制。

将传统的商业数据分析工具应用于教学,无可避免的出现在与企业实际工作平台不匹配的情况。譬如:SAS / SPSS / MATLAB 均为严谨高效的数据统计商业应用型工具,好比数据库中的 ORACLE;然而大部分大数据初创企业往往由于资金原因无法购置,而是采用 R 与 Python 这些开源型的数据科学平台,因此,造成企业需要对二次培养的成本。采用 R 与 Python 更匹配基础科学人才培养目标。数据科学与大数据在各细分领域并发性爆发,充分展现了开源生态圈协同开发模式的强大优势与趋势。同时标志着“半成品化”应用工具时代的到来 —— 借助 R 语言与 Python 提供的广泛的计量经济学 CRAN 与数据科学相关的第三方库,大数据应用统计分析人才能更为灵活的为企业定制化更匹配企业业务模型的数据分析模型。同时,R 与 Python 逐步成为贯穿数据科学与大数据,机器学习,深度学习,新一代人工智能,乃至区块链技术一脉相承的语言工具,除了基本数据以外,更多的对象被纳入统计范围内。

计算机是经济计量学不可或缺的组成份子,我建议在学会电子表格软件后,经济计量学的学生应该按照实际需求,在统计软件包、经济计量软件包、以及经济计量专属个人计算机程序语言三类难易程度不同的计算机软件中择一学习。我也建议,一旦决定要学哪一种计算机软件之后,一定要尽可能将之学个透彻,对计算机软件的学习一次搞定是最有效率的做法。

经济计量学和教学

经济计量学在上世纪 90 年代以前的发展大量借用矩阵代数,而近年来则相当广泛地引用概率论数理分析。正因为如此,经济计量学的初学者常为矩阵代数符号所困扰,而要涉猎较深入的经济计量学的过程中,往往觉得数学背景不足,总有一种信心不够不踏实的感觉,以致于写作业、答考题、乃至于读文章时,一碰到未曾见过的数学术语,就觉得相当心虚,最后也就对经济计量学产生了敬而远之的态度。

我在这里便对这个数学问题提出一些看法和建议。首先我要对经济计量学的初学者说,矩阵代数并没有想象中的那么难,事实上经济计量学所需要的矩阵代数,和数学系学生所必修的线性代数课程不太相同。我们应该知道,一般线性代数课程强调的是一个抽象代数体系的建立,学习一个抽象体系可能需要较多的数学直觉(也就是一般人所说的数学细胞),所以大多数文科学生可能不习惯。但是,学习经济计量学所要用到的矩阵代数,对数学背景的要求其实并不是很高,其内容主要是矩阵代数的基本运算规则以及为数不多的运算结果而已。我认为如果教材完备,一个人纵使完全靠自修学矩阵代数,一两个星期也就够了。

矩阵代数让一般初学者头痛的地方是在和统计学观念结合起来以后才发生的,然而我也要指出,并不是因为矩阵代数融合统计学之后,就变成一种困难度加倍的新学问。问题的产生通常只是反应初学者对矩阵代数和统计学原本就已有的问题而已,也就是说,初学者或是对矩阵代数尚不很熟悉,或是对统计学的一些概念还不十分透彻。解决这个问题的方法非常简单,就是多看多做,设法让自己对矩阵代数更为熟悉,并利用这个机会对那些原来只是一知半解的统计学概念也顺便搞懂。很多初学者在通过这一关之后发现,不仅矩阵代数通了,统计学的概念也补强了不少,对统计学变得加倍有信心。

概率理论对经济计量学所产生的问题比较复杂。近一二十年来经济计量理论的发展主力是在时间数列理论方面,翻开近十多年来的主要经济学期刊,经常看到的是单位根检定、不稳定数列、共整合分析、结构改变等名词,这些都是时间数列经济计量学的主要内容,而研究时间数列经济计量理论所需要的数学工具主要就是概率理论。概率理论和矩阵代数的性质极为不同,矩阵代数算是数学中层次较低较浅的“技术”,而概率理论则属于数学中层次较高的“分析”。而时间数列经济计量学所需要的概率理论,就是在数学系或是统计系的课程中来说,也属硕士以上的水准,所以要掌握概率理论以研究时间数列经济计量学,相当程度的教学训练是避免不了的。

幸运的是,时间数列经济计量学在经过多年的发展后逐步成熟,其所需要的概率理论的范围也逐渐确定,已经有不少时间数列经济计量学参考书,将所需要的概率理论做了有系统的整理和介绍,后进人员便不再需要直接去读由数学系教授所写的概率理论教科书,这大大节省了进入这个领域所需的时间成本。我们要知道,数学家感兴趣的概率理论课题,和经济计量学家所需要的不尽相同(这和数学系所教的线性代数和经济计量学所需要的矩阵代数不尽相同是同样道理),经济计量学学生要学习高等概率理论本来就没有比较利益,如果还要花时间去追随数学家所要求的抽象化和一般化,不仅事倍功半,所学到的概率理论还不见得能在经济计量研究中派得上用场。

经济计量学在经济研究中角色

经济学的研究论文,除了小部分属于纯理论的数理推演外,大都包含了实证研究,以证明实际资料中确有支持作者论点的证据。任何理论不论讲起来多么有道理,若是得不到实际资料的佐证,当然是不易被大众接受的。但我们也应注意到,资料是死的,使用资料看资料的人却是活的,分析资料的方式有千百种,我们应该不会太惊讶地看到下述两种情况:同样的一笔资料可被用来左证完全对立的理论;资料中原本并没有支持作者论点的证据,但经过人为的包装组合后却变成有。而当我们评估一篇实证论文的贡献时,除了要看资料是不是能够(最好是强有力的)支持作者的论点外,我们还要判断作者对资料的处理和分析是不是正确的,以避免上述情况的发生。换句话说,我们对论文中所使用计量方法的好坏要给予很大的关注。

有时候原始资料太过纷杂琐碎而看不出所以然来,要经过仔细的筛选处理后,支持某些论点的证据才能显现出来,有时候我们更需根据资料特性,以发展出新的计量方法,这些对计量方法的深入讨论,都变成一篇论文的重要组成部份,和论文的理论部分具有同样的重要性。正因为如此,经济计量学在现代经济学中具有举足轻重的地位,西方几乎每一个经济学家都有处理计量方法的能力和经验。也因为研究人口的众多,经济计量学的发展也就日行千里。

YouTube 推荐算法透视

正如跨象乘云™ 的视频点播推荐系统大数据实训项目工程案例所描述,目前,算法已经成为驱动 YouTube 收入增长最有效的工具,使用神经网络通过大量数据和用户观看记录对用户进行分析,YouTube 的工程师将其描述为目前规模最大、最复杂的商用推荐系统。那这个推荐系统到底是怎么工作的呢?

本质上,过滤气泡(filter bubble,一种网站针对个人化搜索而提供筛选后内容的结果)的生成方式,也是所有推荐算法的工作原理。一小段电脑代码跟踪你正在进行的动作,比如你最常看的视频分类、最长观看时间,然后推荐给你同一类型的视频。内容推荐算法的过程一般包括以下三步:

  1. Item Representation:为每个 item 抽取出一些特征(也就是 item 的 content 了)来表示此 item;
  2. Profile Learning:利用一个用户过去喜欢(及不喜欢)的 item 的特征数据,来学习出此用户的喜好特征(profile);
  3. Recommendation Generation:通过比较上一步得到的用户 profile 与候选 item 的特征,为此用户推荐一组相关性最大的 item。上图内容推荐算法的步骤展示出了推荐算法的基本原理。

Google 前员工 Guillaume Chaslot 自建了一个网站 Algotransparency.org,用来揭示 YouTube 和 Google 算法的工作原理,让这个被称为全世界目前最复杂的商业推荐系统算法透明化。Chaslot 编写了一款软件,旨在为大家提供全球首个探究 YouTube 推荐引擎的窗口,该程序模拟用户在观看一个视频后引发推荐视频链,并跟踪数据。在过去的 18 个月中,Chaslot 利用该计划探索法国、英国和德国选举期间 YouTube 上推广内容的偏差,全球变暖和大规模枪击事件,并在他的网站 Algotransparency.org 上发布了他的调查结果。从目前该网站披露的项目来看,至少在 2016 年美国大选、拉斯维加斯枪击案、德国大选等事件中,YouTube 算法都发挥了重要的作用。

通过该网站的检测,有助于我们更好地了解 YouTube 算法带来的影响,同时带给我们关于机器学习算法透明化的思考:从用户的角度来看,算法透明化是趋势,也是有必要的,这就给破除“黑盒子”问题提出了更迫切的要求。

中国信通院《大数据白皮书(2018年)》

随着信息技术和人类生产生活交汇融合,全球数据呈现爆发增长、海量集聚的特点,对经济发展、社会治理、国家管理、人民生活都产生了重大影响。近年来,我国的大数据在政策、技术、产业、应用等方面均获得了长足发展。 本白皮书是继《大数据白皮书(2014年)》、《大数据白皮书(2016年)》之后中国信息通信研究院第三次发布大数据白皮书。本白皮书在前两版的基础上,集中梳理介绍了我国大数据的最新发展态势和成果。本白皮书首先对我国大数据的发展进行了回顾与梳理,对大数据发展的总体情况进行了研判。白皮书还对大数据的技术发展、行业应用进行了梳理,探讨了利用大数据提升政府治理能力的关键问题,并对数据法律法规体系和地方大数据产业发展的新实践、新动向进行了追踪研究,力求重点介绍我国大数据发展的最新成果。随着近年来数据资产管理的概念逐渐深入人心,本白皮书专门用一章对这一问题进行了探讨。最后,结合我国大数据发展最新状况及问题,提出了进一步促进大数据发展的相关策略建议。

中国信通院《大数据白皮书(2018年)》PDF 格式下载。

NumPy 教程:基础知识

此前,跨象乘云™ 介绍了几篇关于 Python 《数据科学管道与数据分析库:Pandas》的教程,NumPy(Numerical Python)是 Python 中的一个线性代数库。对每一个数据科学或机器学习 Python 包而言,这都是一个非常重要的库,SciPy(Scientific Python)、Mat-plotlib(plotting library)、Scikit-learn 等都在一定程度上依赖 NumPy。对数组执行数学运算和逻辑运算时,NumPy 是非常有用的。在用 Python 对 N 维数组和矩阵进行运算时,NumPy 提供了大量有用特征。

这篇教程介绍了数据科学初学者需要了解的 NumPy 基础知识,包括如何创建 NumPy 数组、如何使用 NumPy 中的广播机制、如何获取值以及如何操作数组。更重要的是,大家可以通过本文了解到 NumPy 在 Python 列表中的优势:更简洁、更快速地读写项、更方便、更高效。本教程将使用 Jupyter notebook 作为编辑器。

安装 NumPy

如果你已经装有 Anaconda,那么你可以使用以下命令通过终端或命令提示符安装 NumPy:

conda install numpy

如果你没有 Anaconda,那么你可以使用以下命令从终端上安装 NumPy:

pip install numpy

安装好 NumPy 后,你就可以启动 Jupyter notebook 开始学习了。接下来从 NumPy 数组开始。

NumPy  数组

NumPy 数组是包含相同类型值的网格。NumPy 数组有两种形式:向量和矩阵。严格地讲,向量是一维数组,矩阵是多维数组。在某些情况下,矩阵只有一行或一列。首先将 NumPy 导入 Jupyter notebook:

import numpy as np

从 Python 列表中创建 NumPy 数组,我们先创建一个 Python 列表:

my_list = [1, 2, 3, 4, 5]

通过这个列表,我们可以简单地创建一个名为 my_numpy_list 的 NumPy 数组,显示结果:

my_numpy_list = np.array(my_list)
my_numpy_list #This line show the result of the array generated

刚才我们将一个 Python 列表转换成一维数组。要想得到二维数组,我们要创建一个元素为列表的列表,如下所示:

second_list = [[1,2,3], [5,4,1], [3,6,7]]
new_2d_arr = np.array(second_list)
new_2d_arr #This line show the result of the array generated

我们已经成功创建了一个有 3 行 3 列的二维数组。使用 arange() 内置函数创建 NumPy 数组与 Python 的 range() 内置函数相似,我们可以用 arange() 创建一个 NumPy 数组。

my_list = np.arange(10)
#OR
my_list = np.arange(0,10)

这产生了 0~10 的十个数字。

要注意的是 arange() 函数中有三个参数。第三个参数表示步长。例如,要得到 0~10 中的偶数,只需要将步长设置为 2 就可以了,如下所示:

my_list = np.arange(0,11,2)

还可以创建有 7 个 0 的一维数组:

my_zeros = np.zeros(7)

也可以创建有 5 个 1 的一维数组:

my_ones = np.ones(5)

同样,我们可以生成内容都为 0 的 3 行 5 列二维数组:

two_d = np.zeros((3,5))

使用 linspace() 内置函数创建 NumPy 数组。linspace() 函数返回的数字都具有指定的间隔。也就是说,如果我们想要 1 到 3 中间隔相等的 15 个点,我们只需使用以下命令:

lin_arr = np.linspace(1, 3, 15)

该命令可生成一维向量。与 arange() 函数不同,linspace() 的第三个参数是要创建的数据点数量。

在 NumPy 中创建一个恒等矩阵

处理线性代数时,恒等矩阵是非常有用的。一般而言,恒等矩阵是一个二维方矩阵,也就是说在这个矩阵中列数与行数相等。有一点要注意的是,恒等矩阵的对角线都是 1,其他的都是 0。恒等矩阵一般只有一个参数,下述命令说明了要如何创建恒等矩阵:

my_matrx = np.eye(6) #6 is the number of columns/rows you want

用 NumPy 创建一个随机数组成的数组

我们可以使用 rand()、randn() 或 randint() 函数生成一个随机数组成的数组。使用 random.rand(),我们可以生成一个从 0~1 均匀产生的随机数组成的数组。例如,如果想要一个由 4 个对象组成的一维数组,且这 4 个对象均匀分布在 0~1,可以这样做:

my_rand = np.random.rand(4)

如果我们想要一个有 5 行 4 列的二维数组,则:

my_rand = np.random.rand(5, 4)
my_rand

使用 randn(),我们可以从以 0 为中心的标准正态分布或高斯分布中产生随机样本。例如,我们这样生成 7 个随机数:

my_randn = np.random.randn(7)
my_randn

绘制结果后会得到一个正态分布曲线。

同样地,如需创建一个 3 行 5 列的二维数组,这样做即可:

np.random.randn(3,5)

最后,我们可以使用 randint() 函数生成整数数组。randint() 函数最多可以有三个参数:最小值(包含),最大值(不包含)以及数组的大小。

np.random.randint(20) #generates a random integer exclusive of 20
np.random.randint(2, 20) #generates a random integer including 2 but excluding 20
np.random.randint(2, 20, 7) #generates 7 random integers including 2 but excluding 20

将一维数组转换成二维数组

先创建一个有 25 个随机整数的一维数组:

arr = np.random.rand(25)

然后使用 reshape() 函数将其转换为二维数组:

arr.reshape(5,5)

注意:reshape() 仅可转换成行列数目相等,且行列数相乘后要与元素数量相等。上例中的 arr 包含 25 个元素,因此只能重塑为 5*5 的矩阵。

定位 NumPy 数组中的最大值和最小值

使用 max() 和 min() 函数,我们可以得到数组中的最大值或最小值:

arr_2 = np.random.randint(0, 20, 10)
arr_2.max() #This gives the highest value in the array
arr_2.min() #This gives the lowest value in the array

使用 argmax() 和 argmin() 函数,我们可以定位数组中最大值和最小值的索引:

arr_2.argmax() #This shows the index of the highest value in the array
arr_2.argmin() #This shows the index of the lowest value in the array

假设存在大量数组,而你需要弄清楚数组的形态,你想知道这个数组是一维数组还是二维数组,只需要使用 shape 函数即可:

arr.shape

从 NumPy 数组中索引/选择多个元素(组)

在 NumPy 数组中进行索引与 Python 类似,只需输入想要的索引即可:

my_array = np.arange(0,11)
my_array[8] #This gives us the value of element at index 8

为了获得数组中的一系列值,我们可以使用切片符「:」,就像在 Python 中一样:

my_array[2:6] #This returns everything from index 2 to 6(exclusive)
my_array[:6] #This returns everything from index 0 to 6(exclusive)
my_array[5:] #This returns everything from index 5 to the end of the array.

类似地,我们也可以通过使用 [ ][ ] 或 [,] 在二维数组中选择元素。

使用 [ ][ ] 从下面的二维数组中抓取出值「60」:

two_d_arr = np.array([[10,20,30], [40,50,60], [70,80,90]])
two_d_arr[1][2] #The value 60 appears is in row index 1, and column index 2

使用 [,] 从上面的二维数组中抓取出值「20」:

two_d_arr[0,1]

也可以用切片符抓取二维数组的子部分。使用下面的操作从数组中抓取一些元素:

two_d_arr[:1, :2] # This returns [[10, 20]]
two_d_arr[:2, 1:] # This returns ([[20, 30], [50, 60]])
two_d_arr[:2, :2] #This returns ([[10, 20], [40, 50]])

我们还可以索引一整行或一整列。只需使用索引数字即可抓取任意一行:

two_d_arr[0] #This grabs row 0 of the array ([10, 20, 30])
two_d_arr[:2] #This grabs everything before row 2 ([[10, 20, 30], [40, 50, 60]])

还可以使用 &、|、<、> 和 == 运算符对数组执行条件选择和逻辑选择,从而对比数组中的值和给定值:

new_arr = np.arange(5,15)
new_arr &gt; 10 #This returns TRUE where the elements are greater than 10 [False, False, False, False, False, False, True, True, True, True]

现在我们可以输出符合上述条件的元素:

bool_arr = new_arr &gt; 10
new_arr[bool_arr] #This returns elements greater than 10 [11, 12, 13, 14]
new_arr[new_arr&gt;10] #A shorter way to do what we have just done

组合使用条件运算符和逻辑运算符,我们可以得到值大于 6 小于 10 的元素:

new_arr[(new_arr&gt;6) &amp; (new_arr&lt;10)]

预期结果为:([7, 8, 9])

广播机制

广播机制是一种快速改变 NumPy 数组中的值的方式。

my_array[0:3] = 50
#Result is:
[50, 50, 50, 3, 4, 5, 6, 7, 8, 9, 10]

在这个例子中,我们将索引为 0 到 3 的元素的初始值改为 50。对 NumPy 数组执行数学运算

arr = np.arange(1,11)
arr * arr #Multiplies each element by itself
arr - arr #Subtracts each element from itself
arr + arr #Adds each element to itself
arr / arr #Divides each element by itself

我们还可以对数组执行标量运算,NumPy 通过广播机制使其成为可能:

arr + 50 #This adds 50 to every element in that array

NumPy 还允许在数组上执行通用函数,如平方根函数、指数函数和三角函数等。

np.sqrt(arr) #Returns the square root of each element
np.exp(arr) #Returns the exponentials of each element
np.sin(arr) #Returns the sin of each element
np.cos(arr) #Returns the cosine of each element
np.log(arr) #Returns the logarithm of each element
np.sum(arr) #Returns the sum total of elements in the array
np.std(arr) #Returns the standard deviation of in the array

我们还可以在二维数组中抓取行或列的总和:

mat = np.arange(1,26).reshape(5,5)
mat.sum() #Returns the sum of all the values in mat
mat.sum(axis=0) #Returns the sum of all the columns in mat
mat.sum(axis=1) #Returns the sum of all the rows in mat

现在,这篇 NumPy 教程进入了尾声!希望对大家有所帮助。

使用 Bing 创建深度学习数据集

Adrian Rosebrock 像我们介绍了如何使用微软的 Bing Image Search API 来建立深度学习图像数据集。Bing Image Search API 是微软 Cognitive Services 的一个组成部分,主要是帮助用户在视觉、语言、文本等手机应用和软件中应用 AI。相比较,利用 Google Images 来构建自己的数据集是一个乏味且需要手动的过程,主要原因是因为多年前,谷歌关停了自己的图像搜索 API ,然而,我们需要的是一个通过查询能够自动下载图像的方案。这里是本文的完整翻译,同时,跨象乘云™ 为你提供了 Adrian Rosebrock 编写的《图像搜索引擎资源指引》,欢迎下载阅读。

人工智能 DIY 套件:用硬纸板打造你自己的智能硬件

大大小小的科技公司纷纷加入 AI 的潮流,但这次有充分的理由。人工智能和机器学习是未来技术不可或缺的组成部分,可能会带给我们现在无法想象的计算机功能。而谷歌已经发现了一个新角色,为新兴工程师配备他们需要了解的 AI 工具并构建他们自己的 AI 解决方案。不,这不是机器人革命的开始。这是 Google 新的 “AIY” 计划的开始,它将为想要试验和了解不同 AI 解决方案的人们(主要是学生)提供全面的 DIY 套件。

Google 正在采取多项步骤中的第一步,帮助教育工作者将 AIY 集成到 STEM 课程计划中,并通过推出新版 AIY 工具包,帮助学生应对未来挑战 ——

语音套件可以让你建立一个语音控制的扬声器,而视觉套件可以让你建立一个摄像头,学习识别人和物体。新套件使得入门更简单,拥有更清晰的指示、更新的应用程序。所有的部件都装在一个盒子里。

为了使设置更简单,这两个套件都经过重新设计,可以与包含在盒子中的新树莓派 Zero WH 以及 USB 连接器电缆和预先配置的 SD 卡配合使用。现在用户不再需要下载软件映像,并且可以更快地运行。更新的 AIY Vision Kit v1.1 还包含树莓派 Camera v2。AIY 是一个非常酷的例子,科技公司采取一些主动行动来帮助和鼓励社区加强他们在学校的 STEM 计划。Google 全新的 AIY Voice Kit 和 Vision Kit 已经在全球各地的 Target.com 和 Target 商店上线,Google 希望在未来几个月内在其他地区推出。

AI 语义技术体验

近日,Google AI 研究机构发布了一款基于人工智能的搜索引擎,该实验项目可以让普通人也能感受最新语义理解和自然语言处理技术的强大能力:它们是目前人工智能技术发展的重要方向。值得一提的是,《奇点临近》一书的作者,谷歌研究院工程总监雷·库兹韦尔也参与了这一工作。Semantic Experiences 网站上有两个示例,展示了这些新的方法如何驱动之前不可能的应用。Talk to Books 是一种探索书籍的全新方式,它从句子层面入手,而不是作者或主题层面。Semantris 是一个由机器学习提供支持的单词联想游戏,你可以在其中键入与给定提示相关联的词汇。此外,谷歌还发布了论文《Universal Sentence Encoder》,详细地介绍了这些示例所使用的模型。最后,谷歌为社区提供了一个预训练语义 TensorFlow 模块,社区可以使用自己的句子或词组编码进行实验。

另外,Google 还发布了该技术体验项目的预训练模型

教育部印发《高等学校人工智能创新行动计划》

教育部日前印发《高等学校人工智能创新行动计划》(以下简称《计划》)的通知。

《计划》指出,人工智能的迅速发展将深刻改变人类社会生活、改变世界。为贯彻落实《国务院关于印发新一代人工智能发展规划的通知》和 2017 年全国高校科技工作会议精神,引导高校瞄准世界科技前沿,强化基础研究,实现前瞻性基础研究和引领性原创成果的重大突破,进一步提升高校人工智能领域科技创新、人才培养和服务国家需求的能力,特制定本行动计划。

《计划》要求,引导高校瞄准世界科技前沿,强化基础研究,实现前瞻性基础研究和引领性原创成果的重大突破,进一步提升高校人工智能领域科技创新、人才培养和服务国家需求的能力,支持高校在计算机科学与技术学科设置人工智能学科方向。

《计划》指出,到 2020 年,基本完成适应新一代人工智能发展的高校科技创新体系和学科体系的优化布局。到 2025 年,高校在新一代人工智能领域科技创新能力和人才培养质量显著提升,取得一批具有国际重要影响的原创成果。到 2030 年,高校成为建设世界主要人工智能创新中心的核心力量和引领新一代人工智能发展的人才高地,为我国跻身创新型国家前列提供科技支撑和人才保障。

《计划》强调,需要完善人工智能领域人才培养体系,包括 ——

完善学科布局。加强人工智能与计算机、控制、量子、神经和认知科学以及数学、心理学、经济学、法学、社会学等相关学科的交叉融合。支持高校在计算机科学与技术学科设置人工智能学科方向,推进人工智能领域一级学科建设,完善人工智能基础理论、计算机视觉与模式识别、数据分析与机器学习、自然语言处理、知识工程、智能系统等相关方向建设。支持高校在“双一流”建设中,加大对人工智能领域相关学科的投入,促进相关交叉学科发展。

加强专业建设。加快实施“卓越工程师教育培养计划”(2.0版),推进一流专业、一流本科、一流人才建设。根据人工智能理论和技术具有普适性、迁移性和渗透性的特点,主动结合学生的学习兴趣和社会需求,积极开展“新工科”研究与实践,重视人工智能与计算机、控制、数学、统计学、物理学、生物学、心理学、社会学、法学等学科专业教育的交叉融合,探索“人工智能+X”的人才培养模式。鼓励对计算机专业类的智能科学与技术、数据科学与大数据技术等专业进行调整和整合,对照国家和区域产业需求布点人工智能相关专业。

加强教材建设。加快人工智能领域科技成果和资源向教育教学转化,推动人工智能重要方向的教材和在线开放课程建设,特别是人工智能基础、机器学习、神经网络、模式识别、计算机视觉、知识工程、自然语言处理等主干课程的建设,推动编写一批具有国际一流水平的本科生、研究生教材和国家级精品在线开放课程;将人工智能纳入大学计算机基础教学内容。

加强人才培养力度。完善人工智能领域多主体协同育人机制。深化产学合作协同育人,推广实施人工智能领域产学合作协同育人项目,以产业和技术发展的最新成果推动人才培养改革。支持建立人工智能领域“新工科”建设产学研联盟,建设一批集教育、培训及研究于一体的区域共享型人才培养实践平台;积极搭建人工智能领域教师挂职锻炼、产学研合作等工程能力训练平台。推动高校教师与行业人才双向交流机制。鼓励有条件的高校建立人工智能学院、人工智能研究院或人工智能交叉研究中心,推动科教结合、产教融合协同育人的模式创新,多渠道培养人工智能领域创新创业人才;引导高校通过增量支持和存量调整,稳步增加相关学科专业招生规模、合理确定层次结构,加大人工智能领域人才培养力度。

TensorFlow 中文社区成立

TensorFlow 中文社区论坛测试版正式上线。作为一个以开源代码推动互联网和人工智能发展的技术,TensorFlow 机器学习框架具有快速、灵活并适合产品级大规模应用等特点而深得全球众多开发者的喜爱。中国也不例外,TensorFlow 在中国的下载次数已经超过百万次。在 Google 开发者大会和 TensorFlow Dev Summit 北京分论坛等会议上,广大开发者反应希望有一个 TensorFlow 开发者自助互助、技术交流的平台,众人拾柴火焰高,以论坛的形式建立一个聚集所有中国 TensorFlow 开发者的线上社区这个想法便孕育而生,并最终实现。

论坛目前包括以下板块:

  • TensorFlow 技术问答:你可以在这个板块提出技术相关的问题,也可解答技术疑难问题。互帮互助,共同进步。
  • TensorFlow 教程分享:提供 TensorFlow 机器学习的教程资源分享和整合。
  • TensorFlow 建议和反馈:来自包括 Google、工业界和学术界的工程师和技术专家们将会通过这个板块聆听开发者们的意见和反馈,与大家进行技术和产品信息的交流;
  • TensorFlow 创新案例展示:分享你个人或者公司的 TensorFlow 使用案例,让更多人知道你的创新并得到更多的意见反馈。

腾讯《2017全球人工智能人才白皮书》

人工智能竞争以顶级人才为根本。作为国家未来的发展方向,AI 技术对于经济发展,产业转型和科技进步起着至关重要的作用。而 AI 技术的研发,落地与推广离不开各领域顶级人才的通力协作。在推动 AI 产业从兴起进入快速发展的历程中,AI 顶级人才的领军作用尤为重要,他们是推动人工智能发展的关键因素。

因此,上至发达国家政府,下至科技巨头 AI 创业公司,无不将 AI 视为提升自身的核心竞争力的根本性战略。能够引领AI发展的顶级人才,环顾全球,尚不足千人,自然成了供不应求的抢手货。

然而,人工智能领域人才分布极不平衡,对人才的拼抢将日益激烈。全球 AI 领域人才约 30 万,而市场需求在百万量级。其中,高校领域约 10 万人,产业界约 20 万人。全球共有 367 所具有人工智能研究方向的高校,每年毕业 AI 领域的学生约 2万人,远远不能满足市场对人才的需求。在这种供需极其不平衡的形势下招募团队,大公司比小公司有优势,国际巨头公司比大公司有优势,在某种意义上,国家比国际巨头还有力量。

美国人工智能领域的人才无论从数量、质量都要远超其他国家,虽然中国政府已经将人工智能上升到国家战略层面,但是仍然不能立即改变我国 AI 人才供需严重不平衡的现状,对此,我国应从政府,企业,高校,协会多种途径实现我国人工智能领域三步走的目标。

要解决人才不足的问题,除了以更好的条件来吸引人才以外,还要加强基础研究的知识储备。人工智能战略的实现,不光需要依赖研发费用和研发人员规模上的持续投入,还需在基础学科的人才培养方面加大力度,尤其是算法和算力领域。只有投入更多的科研人员,不断加强基础研究,才会获得更多的技术优势。

跨象乘云™ 提供腾讯《2017全球人工智能人才白皮书》PDF 版本下载

K12 人工智能教学体验项目

英国 machinelearningforkids 网站搜集了各种和人工智能有关系的机器学习动手项目,目前更新了 19 个,包括人脸识别、聊天机器人、教 AI 玩井字游戏等。虽然不能通过这些项目直接操作计算机,但在虚拟界面上,K12 学生将能感受到这些生活中就能频繁接触到的 AI 系统背后的逻辑。唯一可惜的,是目前只有英文见面,对于中国的 K12 学生而言增加了语言障碍。

ELK 容器化应用日志采集中心

应用一旦容器化以后,需要考虑的就是如何采集位于 Docker 容器中的应用程序的打印日志供运维分析。典型的比如 Spring Boot (轻松创建独立的,生产级的基于 Spring 框架的应用程序)应用的日志收集。这篇文章阐述了如何利用 ELK 日志中心来收集容器化应用程序所产生的日志,并且可以用可视化的方式对日志进行查询与分析,其日志采集对深度学习与新一代人工智能科学研究具有提供了重要的基础数据支持。

ELK 是三个开源项目的首字母缩写:ElasticsearchLogstashKibana,其中 ——

  • Elasticsearch 是一个搜索和分析引擎。
  • Logstash 是一个服务器端数据处理管道,可同时从多个源获取数据,将其转换,然后将其发送到像 Elasticsearch 这样的存储。
  • Kibana 允许用户通过 Elasticsearch 中的图表和图表可视化数据。

目前,ELK 已成为大数据及大型企业级系统日志采集与分析运维的标准配置,Elastic Stack 是 ELK 的下一个发展版本。

教程:可视化 CapsNet

此前,跨象乘云™ 介绍了《取代 CNN?Hinton 开源胶囊网络模型》。Geoffrey Hinton 认为,尽管卷积神经网络(Convolutional Neural Networks)已经做出了令人惊艳的成绩,但还是存在着一些根本性问题。是时候开始思考新的解决方案和改进了。现在就让我们一起来了解一下胶囊网络 —— CapsNet (Capsule Networks)将神经元的标量输出转换为向量输出提高了表征能力,我们不仅能用它表示图像是否有某个特征,同时还能表示这个特征的旋转和位置等物理特征。本文从可视化的角度出发详解释了 CapsNet 的原理的计算过程,非常有利于直观理解它的结构。

在过去的几个月里,Nick Bourdakos 一直沉浸在各种各样的胶囊网络里,觉得现在是时候一起更加深入地探索胶囊网络的实际运作方式了。为了让后面的讨论更加容易,我开发了一款与胶囊网络实现配套的可视化工具,它能够让您看到网络的每一层是如何工作的。如下所示,是 CapsNet 的结构。如果您现在还不理解每个部分的具体含义,不必担心。通过可视化教程,你能一层一层地进行详细讨论并了解 CapsNet 的工作原理。另外,你也可以通过机器之心的机器学习 GitHub 门户,了解更多机器学习的原理。

Architecture of CapsNet
Architecture of CapsNet

GitHub地址项目 GitHub 地址