七月在线公开课笔记-十九-

七月在线公开课笔记(十九)

人工智能—Python AI公开课(七月在线出品) - P3:三节课上手Python第三节 - 七月在线-julyedu - BV17W411K7G8

嗯,好,那么我们今天可能啊因为周日啊听的人比较少,那么也没有关系,我们直接还是把这个今天的课程来讲一讲来讲。那么呃后期加入的同学如果题目有问题啊,少了一个算啊。

这故事我们。那么好,那么我们现在呢就来开始我们的这个呃7月在线公开课,之这个三节课上周python的第三节课啊,python与科学计算。那么我是david。那么之前的两节课呢。

跟大家分别在上上周的周日和上周的周五,分别和大家呃见过面啊,那么前两节课我们主要讲了呃,关于两个大的部分。第一个呢是python的基础与环境的搭建。第二个呢也就是上周五的时候。

我们主要讲了我们的函数与面向对象。啊,函数与面强对象。那么呃我们现在来看一下,我们现在来看一下我们的这个呃函数呃,我们来看一下我们的这个python基础与环境搭建。那么我们再简单的回顾一下啊。

环境搭建呢,之前我建议过大家直接就去使用jupiter notebookotebook这种这种东西啊,notebook这种东西。然后呢notebook。

然后呢呃包括了我们的underconda这个环境安装以及呃jupyter notebookotebook的这个启动,以及具体的使用。这个都跟大家啊去做过演示。

以及在notebook下面如何一步一步的去操作我们的这个python使用我们的python一些简单的语法这些东西跟大家去讲过,以及一些呃python里面比较基础的数据结构。

比如说我们的最简单的数呃字符串类型的数据呃数据类型以及这个整形的呃这个。还有。数值型的,还有我们的这个呃列表元组,还有字符串集合。啊,因为时间的因素在第一节课,也就是在这个地方啊。

python基础与环境搭建这一块和大家讲的这个不是很多啊不是很多。因为上次也是只有一个小时嘛,一个小时的时间。那么。嗯,在上周五的第二节课呢,主要跟大家去讲了一个函数和命向对象。

那么函数和命向对象其实就已经是什么呢?已经是我们将如何去把我们的这个。功能的代码进行一次封装啊进行一次封装。有了这次封装以后呢,我们才能够干嘛呀?我们才能够去不断的去。去调用它,去实现了一个什么呀?哎。

去实现了一个我们的代码的复用啊复用性。那么这是我们函数的作用啊,包括啊上节课带着大家我们一块去定义了几个函数,包括了我们的函数的参数,可变长参数,对吧?哎,可变长的这些参数都跟大家去做过演示,是吧?

还有呢就是面向对象。面向对象呢其实是相当于把我们的数据和功能,再一次进行一个封装啊,再一次进行一种封装。它呢是一种编程的一种思想啊,编程的思想。它呢是对我们客观世界的一种认识。

他把我们的所有的这个呃客观世界呢都认为是一个什么呀面写,认为是一个类啊,首先是抽象成一个类。然后呢,再从这个类中呢去实例化一个一个一个的对象。这样的编程呢呃这这种编程的这种呃思想的好处呢?

就是在于什么呢?在于我们的代码,它的这种可移植性,它的这种我们的编程的效率都会有一个极大的提升。啊,那么这也是我们前两节课所做的一个。给大家去做一个回顾和总结啊,回顾总结。那么呃虽然说说起来很简单。

但是其实python里面有非常多的这些啊细节的东西在里面。那么这些东西你得是你自己真正上手啊,真正上手了以后呢,你才能够去有这种认识啊,有这种认识。好,那么我们呃介绍完了前两节课的回顾和总结。

那么我们介绍本节课,本节课也是我们啊其实在线啊,公开课啊,三节课上手python第三节也是最后一节。那么三节课上手python其实这个难度相当的高啊,相当的高,只不过是因为我要给大家去讲公开课。

我要讲的很简单啊,我要讲的很简单。好,那么我们继续啊我们继续好,那么我们这节课的一个目标是什么呢?这节课的课程目标,就是我们的numb派和pandas苦的介绍。

以及我们要去使用n派来计算一个soft max啊,这样的。

的目标。好,我们来看一看我们的这节课啊,里面的n和padas,这是个什么东西呢?nown反pa是个什么东西呢?那么其实我们讲到科学计算。很多科学计算就会有一个库是逃不开的。那么就是n派这个库。

n派这个库呢的一些简单的介绍呢,我给大家去介绍一下啊,稍等一下。它本身是一个什么numericpython,就是一个什么唉数学的python啊,数学的python。

它的出现其实就是为了解决python在数学运算方向能力偏弱哎,能力偏弱这个问题而去诞生的啊而去诞生的。在n派这个库里面呢,在n派这个库里面呢,我们一会儿我们会对它进行一个介绍。然后呢。

pandas这个库呢,我们它是做一个叫做表格处理,大家都用过这个呃我不知道大家有没有这个经验啊,类似于这个circle啊my circlecle之类的是吧?我不知道大家有没有这个经验啊,啊。

如果用过my circlercle和circle之类型的,大家都知道那种叫做传统的表格型的数据库是吧?哎,传统的关系性数据库啊,关系性数据库,它处理的对象都是表格是吧?表格组成了这个数据库是吧?哎。

那么pandas呢它是在什么呀?它直接在内存中。去对表格进行处理。假设你的表可能是有呃6个G或者5个G,那么这些在数据库中,大家知道我们的这种关键数据库基本都是在我们的磁盘中是吧?哎,我们磁盘中。

他们稍微比较呃读写的比较慢,但是我们pas直接把它们读到内存里面,在内存这个级别对这些表格进行各种各样的处理。你比如说我们的数据清洗是吧?确实去处理是吧?哎等等的。

以及我们的及后面的机器学习都会用到pandas这个库,哎,它是一个基础库。但是我们今天因为时间的关系呢,我们不去过多的介绍pandas,我们主要的精力在n排上。因为什么呢?这两个库很像。

一旦呢你能懂了这一个库,也就稍微难一点的这个n排库,这pandas可以说。哎,就没有问题啊,就没有问题。相对来讲,n排要稍微难一些啊,稍微难一些。好。

那么我们来去看一看我们呃今天我们主要讲的这个n排这个库。今天我们的公开课大概是在呃估估计是在50分钟左右啊,我尽量的在这个比较短的时间里边带大家一块把这个整体的n派这个呃介绍给大家去说过一遍啊,过一遍。

并且呢有操作地方也都带大家操作一下啊,那么让大家对这个n派有一个初步的认识。但但是呃每节课我都会提一个问题,就是什么呢?你想掌握它还是要去练习啊,还是要去自己啊环境搭起来,是吧?把各种各样的东西搭起来。

啊,你自己去做跟老师一样的练习,最后呢你才能够真正掌握这些东西啊,掌握这些东西。好,那么我们来看一下我们今天要讲的这个囊排哈,今天我们讲的这个囊排。好,囊派呢其实呢哎我们的它是针对我们来去稍等一下。

把这个处理一下。嗯,好。好,我们这个囊排这个库呢,首先我们要去使用它,我们怎么去使用呢?叫做import NUMPNP。那同学说老师,我这样可不可以可以没有问题啊,因为这个写起来比较麻烦。

我们给它对模块起了一个什么呀别名是吧我们来去看一下啊,这个时候就怎么样导入进来了是吧?导入进来了。这个时候呢我们来去看一下我们的这个DR或者是hel是吧?哎,大家还记不记得这两个东西是吧?

我们都可以对这个模块啊,也就是囊排这个库哎有认识啊,我们来可以用locs,我们看一下这个时候呢,我们的这个囊排就已经出来了啊,我们这个囊排就已经出来了。n排已经出来了。好。

那么我们来看一下我们这个囊排啊,我们来看一下我们这个NP它是一个模块啊,它是一个模块,上节课我好像没有跟大家提到模块,因为模块其实就是对什么呀?我们的这个一种封装,我们python文件那种封装。

那么具体的大家可以在网上搜一下啊,这个就是说一旦你懂了函数,懂了这个类,那么模块你也一定也会懂啊。因么它就是在这个之上的一个层次啊。好,那么我们呃来进入这个n派。

这时候呢就已经导入到我们notebook里面了啊,导入notebook里面了。好,那么我们来去想一想,我们在正常的python里啊。我们在写什么?找入到白理个库是吧?好,那么现在呢我们来去想一想啊。

我们正常的python,假设要现在我去建一个什么呢?哎,我建1个123,这非常简单的一个什么呀?同学们还记得吗?还记不记得呀?哎一个列表是吧,一个list是吧?那么现在呢我要对这个列表中每一个数字。

我给它加上一个一,我想变成什么呢?我我想变成这样啊,234是吧?我想变成这样,那有的同学说老师,我这样我这样就可以。哎,这样为什么不行啊?我们来看一看啊。它只能什么呀?

list和list的类型之间去加是吧?哎list和list类型之间去加。你同学说,那这样老师我我我这样听就行。我这两个加起来看看行不行,对吧?你看相应位置1加1等于22加1等于33加等于4。

你不就234嘛?ok我给你234,我们来去加一加看一看啊。咦,他并没有大家看到没有啊?它并没有在我们的这个它并没有在我们的这个叫做。两个位置上去加,看到没有?它并没有在这儿。是不是哎他只是把两个列表。

进行了一个什么呀?哎,进行了一个连接扩展。我们想要的什么呀?我们想要的是什么呀?比如说我想要的是什么?同学们。我想要的是不是这个呀?234对吗?我想要的是这个呀,对吗?但是我们看看列表去做这个东西不行。

那这样的是我我我有办法。对吧哎,我们先建一个新的列表。L2是吧,哎,我们L2点。2点atendopend什么呀哎。I。加上一个一。我们再来看这个L2啊。P。我们看这样是不是也不太方便啊?哎。

这样也不太方便。也就是说我们即便是使用循环来讲,我们还要写一个循环是吧?I pen哎,我们来哎稍等一下啊,这个print啊稍等一下,应该是L2L2等于一个空列表啊。哎。

我们看看是不是说我们L是一个空列表啊,这个地方我们就去掉啊。哎,我们是不是即便写一个循环来讲,是不是用起来也是非常的麻烦,对不对?哎。

那么有没有一种办法让我们能够比较简单的去实现刚才我要实现的一个功能的啊,有非常的简单啊,非常的简单,我们还是去建一个叫做123L1,对吗?这个时候呢我们把它作为一个n派里面的一个对象去做处理。

就非常简单。大家看一下啊,叫做NP点array。我们的L1,然后这个时候呢我们叫做L一重新给它定义成这个。好,这个时候呢我们再来看它的这个type变成了什么呀?变成了n派 nD而大家看到了没有啊。

这也是非常非常重要的一个东西啊。ND而什么是NDR啊。我在这方也是跟大家去着重去讲一讲啊,现在先稍等一下啊。好,那么ND而这个N代表是什么呀?我们都知道我们自然数是什么意思啊?哎,从一到多少啊。

把无穷大的整数是吧?就代表一个哎一维二为三为四为5维。那么这个D是什么呢?就是那个为 dimensionmen啊dimen就是这个维的意思啊,就是这个维的意思啊。好。

那么我们现在看看这个时候的L一这个时候的L一还是个什么呀?同学们。这个时候的L一还是一个。这时LE还是一个什么呀?我看看啊type。でも。不认的吧。这个时候的L一还是一个list子的。

但是这个时候的L一就是一个什么了?哎,一个我们的哎它还是python的标准对象。那么第二个L一呢就是一个n排里面的那个re。好,那么现在呢我们就要对这个n排去干嘛呀,去做一个哎L一加上一个一。

我们看看发生什么。234出来了,大家看到没有?234出来了。是不是比刚才我们用python呃列表要简单的很多呀?刚才还记得吗?哎,我们用列表加列表不行,列表加数字不行。那么只有把列表进行循环,是不是?

哎只有把列表进行循环。那么我这地方可不可以这样啊,乘以5可不可以乘以4可不可以?可以,没问题。你看1231乘以4是多少?42乘以483乘以4是12,直接搞定啊,直接搞定啊。

那么这当然这还只是我们的叫做它的什么呀?叫做它的一个最简单的叫做一维数组啊,一维数组。那么我们从这个地方入门,然后呢,我来去给大家一点点的去介绍啊,一点点去介绍。

那么ND array ND array就是刚才我跟大家去说的啊,ND array那么我们来去看一看我们的这个稍等一下啊,我们去构建怎么如何去构建呢,我们来去看一下啊,我们直接把这个先删掉啊。构建ND。

那么刚才我们说了,我们构建NDR怎么构建啊,我们的时可不可以?我们现在就有一个我们的列表python里的列表,这是我们python标准对象了吧,12345是吧?哎,这是我们python标准对象了吧。哎。

我们直接把我们的这个。python的这个对象传给他,他返回的就是一个什么呀,我们看一下就知道了,它就可以什么呀?从我们已有的python的列表里可以有啊,变成了ND尔瑞是吧?ND尔瑞好。

那么我们来去构建呢?刚才我们构建的什么呢?1一维的啊,来看着啊,我来开始把它变成一个二维的啊,234567789。是。好,那么这个时候的ND array呢就变成了一个二维的了。我们来去看一下啊。

大家看一下没有,哎,变成一个二维的了啊,变成了一个二维了。こ。好,这个时候呢我们来去把这个我们的这个ND瑞,我们把它输出看一下啊,二维。那么什么是二维?咱们马上就要去讲,别着急啊别着急。哎。

大家看到没有?这是它的二维啊,它的二维啊。好,那么呃这是它的构建啊。那么它的一些属性呢,我在这里先给大家去讲一讲啊,讲一讲。好,那么什么是它的属性,它的属性,就是它的一些简单的东西啊。

简单它自身带的东西,还记得我们的类吗?每一个呃还记得我们的对象吗?每一个对象都有什么呀,方法和属性是吧?你要是不知道怎么办啊,点完一个点之后,双击t是吧?我们看到是不是有好多东西啊,是吧?哎。

他们哪些东西是我们它的属性,哪些是方法呢?不用不用不用担心啊,我们马上就知道了啊,我们先看一下叫做sha。sha是英文形状的意思是吧?我们来看看它的ship是什么2和5。这是一个topple是吧。

返回的是一个topple型。你看还记得我们的原组形吗?原组形是不是两个括号,中间1个2A也就是一些数字是吧?或者是一些其他的数据类型啊。那么它是一个什么呀?25代表什么意思?同学们有两行。

每一行是多少啊?每一行是五列,我们来看一看啊,大家看看是不是有两行啊。每一行有多少啊,每一行是不是有123455列呀?哎,那么大家能明白啊这个ship的意思了吗?哎,这个ship的意思啊。好。

那么我们再来看一看,除了这个ship还有什么啊。我们把它家先放在这儿啊。好,我们再来去看一看啊。除了这个ship以后,我们还有一个它的叫做ND大M这是个什么东西呢?我们来看一看啊,叫做ND a瑞。

还记得这个ND的D嘛啊,这就是它的一个叫做维度啊,它的这个维度,它的形状呢是二和五,它的维度呢,就是两个维度。也就是说它有行和列这两个维度。那么同学说老师你看我把这个改一下啊,我把这个都删掉,我改一下。

看看它有没有变化啊,大家看一看有没有变化,它的维度是不是变了呀,变成一了,是不是哎,它现在没有行啊,只有列啊,没有行只有列啊。好,我们再去看一看啊,我们再去看一看啊。稍等一下啊。嗯。😊。

我们再去看一看啊,它的这个叫做它最重要的就是这两个啊,最重要的ND尔瑞最重要的属性就是这两个啊。我们再来看一看它的这个size size唉哦,你们稍打一个Z啊。它s是什么意思啊?

就是它这里面的元素的个数有10个。你看我现在再再加上一个啊,看着啊看会报什么错啊,看着啊。哎,我们看一看啊,它的这个size这一块就变成了有问题,看到没有?这个地方看到没有?因为什么呀?

因为我们的矩阵要严格的就是什么呀?行和列,你不能少,也不能多。你说的是两行五列,那么你就一定要有两行五列,明白了吗?哎,那么这是它的size啊,那它这是我们N的基本属性啊。那么同学有问题的话。

就在呃同学要是听起来有问题,就在咱们的这个窗口里弹出啊。我看到后你会立即给大家回复啊。

好,那么呃这是它的基本属性。其中最重要的是这两个啊,这两个是我给他写上啊。最重要啊最重要。最重要一和2,那么size其实我们乘一下就出来了嘛,对吧?没必要知道它是吧?没必要知道它。好。

那么呃为了简短介绍呢,我们现在可以往下再去走一下啊,往下再去走一下。好,那么我们再去看一看我们的这个呃python的构建啊,构建。那么除了从python的数组里构建我们的这个囊派里面是吧?

那呃构建我们的ND array是吧?我们还可以从什么地方来构建呢?每次都用手术太累了,是吧?哎,好累啊,是吧嗯。好,那么我们也可以用一个随机去生成啊,随机去生成。它在这个位置啊。叫做什么呢?二和5。

大家看到了没有?这个地方的R代表什么意思啊?这个地方二代表有。两行这个地方的五呢代表着有5列啊有5列,这是我们使用随机数是什。你看我每一次去运行啊,你看我用这个地方啊,我每一次去运行。

它都会怎么样不一样。为什么因为它是一个随机数啊,那么这个地方的RARAND这是一个随机,如果再加一个N就代表什么意思啊?哎,随机的正态分布的数字啊,符合正态分布的数字啊。

nmal啊nmal的那个简写第一个N啊,第一个N好,那么我们现在可以从什么呀?哎,可以从我们的A一啊。哦,你们现在来去看啊。好,那么现在我们来看一看我们的A一,其实我们的A一的这个type也是什么?

ND是吧?我们这节课都在讲ND啊都在讲D好,那么A一的哎两行五列出来了啊,那么这是我们快速去生成随机数是吧?那有些时候我们不想去生成随机数是吧?或者是我们想去干嘛呀,生成一个哎生成一个这个序列的啊。

生成一个序列的,那么序列的就是A2等于APPNP点什么呢?arrange。arrange多少啊?比如说我用10个吧。我们再来看看这个AR啊,哎,就是跟我们的这个python里面的range是不是很像啊。

哎,左左呃左臂右开是吧?哎,从零开始啊,一定是从零开始啊,没有没有十啊,右边是开的啊,开区间啊是没有十的啊。好,那么这是我们的这个啊这是我们的这个。那么有些时候呢我们也会用这个叫做。

指定这个叫做我们的这个叫做。I space是吧?哎,是拼错了呀,哎,没意思错啊。哎,我们的这个从1到10啊,我们给它生成了多少呢?100个我们来看一看啊。哎,就什么呢?我给了我给你一个开始给你一个结束。

然后呢,当然你给我在这中间生成我指定要的数字啊,我指定要的数字。好,那么这是我们的快速生成。那么快速生成里还有一些其他的啊,你比如说我们的这个我要生成一个全是零的矩阵啊,比如说我们的A4,等1个NP点。

zero是吧哎,zero是吧,我们要生成一个三行,四行五列的。我们再去看一看我们的是不是啊。哎,四行五列大家数一数啊,四行五列非常的快啊,非常的快全是啊。那么如果现在我要生成一个全是七的,怎么办啊。

你就直接feil嘛。是有期嘛,对吧?然后我们看刚才我们的是不是都变成7了。哎,非常的方便啊非常的方便啊非常的方便。好,那么我们再去看一看我们的这个。那么现在呢既然有了啊既然有了我们的这个啊就开始要干嘛。

开始要进行进行什么呀?哎,开始要进行读取了是吧?读取了啊,稍等一下,我把这个做一下。构建endary是吧?哎,构建end好,那么现在呢构建已经构建完了,我们现在要干嘛呀?

我们现在要开始对它进行一个来读取enddiary是吧?ND二倍。来读取。那么同学说老师,我现在全时期,我不知道怎么办是吧?没关系啊没关系。我们还记得我们的A5,我们来建1个NP点arrange是吧?

arrange多少啊?我们的15啊15。然后呢,这个时候呢,我们的A5是个什么东西呢?我们看一下啊,从0到14的,我们对它进行一个变换啊,这个变换我们马稍后会讲啊,别着急,稍后会讲啊。

我们把它reship一下。行。或者是说我们因为这个reship和ship吧,同学们一开始容易搞错啊,我们直接就用sha吧啊,A5点ship等于35。我们再来看看A5变成了什么。哎。

是不是跟刚才的不一样了是吧?哎,跟刚才的不一样了啊,我们把这个地方print一下啊。哎刚才是这样式的是吧,哎,这样式的啊,现在呢是什么呀?现在是这样式儿的是吧?哎,不一样啊,我们给它做了一个变形啊。

变形。好,那么现在呢我们再来去看一下什么呢?读取啊,什么叫做读取啊?我们知道我们的pyython里面的读取是不是有叫切片和索引,还记得吗?哎,那么呃这个我在公开课里面讲的不是很多啊,不是很多。

那么有有这个同学要是听不懂的,这个只能自己百度一下啊,我们的这个切片读取和索引读取。那么同样在我们的这个ND array里面,或者在我们囊派里面对他们的读取也是一样的啊,也是一样的啊。

只不过呢在pyython里面,我们对列表呢是在一维,也就是在行这个维度上,对吧?哎,啊,也就是在在一行一行的这个维度上,但是呢我们到了ND array的时候,我们就可能是二维三维、四维5维。

甚至是更高维度是吧?但是通常我们用到三维或四维就够了是吧?就够了。好,那么现在呢我要去读取什么呢?大家看一下啊,我要读取A5这个ND尔瑞是吧?NDL瑞然后呢呃NDR瑞多维数组是吧?多维数组。好。

那么我们要读取它的。这个。中间的这一行怎么去读取呢?我们来去看一下啊。总计读学啊,哎,我们的。行是第几行啊?我们看第零行、第一行、第二行是吧?我们的列我们是要读取多少?我们是不是要把刚才我说了一个要求。

我要把这个东西全都读取出来,是吧?那是就加一个冒号就行了是吧?加一个冒号就行了。我们看看是不是这个结果啊,哎,56789是吧,完全没有问题啊,完全没有问题。那同学说老师我想这么去读取。

我想只读789怎么办呢?哎,789我们就这么去算嘛,对吧?哎,01对吧?0122到所有789出来了,那同学说老师我想去读什么呢?我想去读取啊,第二行到第三行。对吧。我想去读取第二行到第三行啊。哎。

1213哦,应该这个地方是这样的吧。哎,第二行到第三行啊,01这是第一行是吧?到第三行我就不写三了,我就直接把它读到最后就行了啊,直到最后就行了。好,那么这就是我们的这种啊。

当然我们这是比较简单的叫做什么呀?叫做切片和索引一个混合啊,切片和索引一个混合。你看我这个就是一个混合啊,那么我们来去看一下这样啊。这是什么意思啊?哎,这是一个混合式的访问啊。

这是从什么第一行到第四什么呀?就从这一行啊,这第零行啊,别弄错了啊,因为这个有的时候会比较绕人啊,比较绕人,我再去跟你说一下啊,跟大家说一下,你看我写的是不是一冒号,这个维度是行的维度。

那么就是这个地方。

到最后是不是这两个这是横的维度上是吧?好,第列的维度上是什么维度呢?哎。第0个第一个第二个,那么他就会要哪个呢?

671112啊,671112。那同学说老师我不正反,我跳着访问行不行?我想访问一个这个可以,没有问题啊。那么这个时候呢,就是你看行没变是吧,列是0161出来了是吧?哎,2349和14出来了。啊。

那么这个呢你稍稍有点绕啊,稍稍会有点绕。那么这个呢也会被叫做咱们numb派里面的花式访问啊,花式访问啊,听起来名字很很牛是吧?很牛,但是问题是哎你你把它多动手去练一练,练习一下,你就能明白了啊。

那么呃多练习一下会明白。那么现在我们看一看我们的这种索引有几个逗号啊。是不是就只有一个逗号啊哎一个逗号证明了我们是什么呀?前后分割,我们是有两个维度,我们先选定了一行,对不对?

你比如说现在我不选定了所有,我只选第一行,是不是这是第一行啊,这是第零行是吧?我只要这些哎,没有问题啊,没有问题啊,那么它是什么呢?先选定行,然后呢,你再选定列。那么如果我们现在变了呢?大家看一看啊。

我们现在想一想,我们现在是一个啊4230吧,30吧。嗯,我们现在重新来去做一下我们的这个30啊,我们把它的sha变成什么呢?哎,23。5、我为什么能这么去写呢?2乘以3多少,是不是66乘5多少。

是不是60啊?哎,这个时候哎,235这个时候我再去访问的时候,我就要变成几个维度了呀,我就要变成三个维度了。我中间还要再加一个。你比如说这个地方我再去加一个。我现在要访问2829,我怎么去访问?

2829。首先我要知道他是。在第零个维度上,它是第几个?

0你看这个地方分给你分的块已经分的很清了。大家看一下啊,这是第一个这是第二个。那么O啊,不是这第零个这是第一个是吧?O我们第零个是吧?我们再来看它的行是012是吧?我们的第二第二行。

那么它的最后一个是嘛2829是吧,我们再去我们再去把它的2829这一块给它什么呀,读取出来,也就是什么呢?倒数的,我们可以用这样写0123是吧?我们从第三到所有。哎,sorry啊,我这个冒号是中文了啊。

sorry啊,invo tax啊,这个地方是啊不行的啊,sorry啊。哎,是呃,01230。啊,123对,2314啊,这个地方应该是3吧,试一下啊。因好,超过他了超过他了。三列1314。啊,这个地方错。

282就出来了是吧?2829出来了,这个时候呢就是我们的一个三维的访问啊,三维的访问啊,稍稍有点绕啊稍稍有点绕。那么如果你要是觉得啊这个地方很绕,呃,那么很抱歉啊,哎,对对对,123123哇塞。

咱们有同学很厉害啊,很厉害已经做出来了,是吧?哎,那么这个地方呢稍稍有点绕,如果有问题呢,你可以多试几次就可以了啊,多试几次可以了。那么这是我们python的一个访问啊,访问。

那么当你懂得了派thon的访问,你也会懂得它的这个赋值。你说这个时候呢,我就要把28、29变成99。好,那么这时候呢我们再来去看我们的A5哎,这两个地方就变成99了。哎,你只要能够会访问。

那么你就一定会怎么样会读取,明白我的意思了吗?哎,你只要会访问,你就一定会读取啊,访问和读取。好,那么现在呢我们再来去做一个我们的这个我们的维度的一个操作啊。囊排呃就是NB瑞的一个维度的一个操作啊。啊。

我中间就不休息了,因为我们课的时间也比较短哈比较短。好,那么我们再来回去看我们的这个。少人嗯。看一下啊,我们这个A5,我们还是从这个A5讲起啊,我们现在的A5是什么呀?我们看一看它的这个ship。

大家还记不记得啊,我们一开始讲过这个ship是吧,235是吧?那么现在呢我要把这个ship呢变成5和6。大家再看一看A5变成什么样了,哎,五行六列出来了,是不是五行六列出来了啊,五行六列出来啊。

五行和六列出来了。那么这个时候呢,我们就把它的这个维度哎,我们把它的这个ship变了,它的维度变了没变。我们来看一看啊,肯定是几啊2啊,那么现在呢我们再去更改一下啊,23多少啊。

5我们再看它的NDRM它的这个维度就是3,其实这个这个维度很好记的,就是如果ship有几个有几个这种数字啊,有几个数字,它就有几个维度,明白我意思了吗?哎,就它又就有几个维度啊。

它就有几个维度那么关于这个ND array的这个维度的这个操作呢,其实就是它的这个ship的一个变换啊,ship的变化。那么reship呢呃它其实是也可以用啊,但是它不改变原来数组。

它只是返回一个被reship数组过的一个数组啊。啊,那么我们再来看啊,如果我们现在要把它。怎么说呀?我们现在要把它给它呃进行一个把它变成全部变成一个列表呢。你现在还还是一个多维数组呢,是吧?

有维度这个概念是吧?那么如果我现在要把它变成一个一维数组呢,我们就可以用这个A。还有它里面一个方法叫flattter啊。哎,肯定是我打错了啊。多用泰国键是好东西是吧?哎,那么这个地方呢我们来看一看啊。

它就会把我们所有的东西啊给我们怎么样了。哎,我们之前的我们的这个我们再来看一看啊。我们之前还这这个形状呢是吧?我们现在变成了什么呀?全都变成异位了啊,我们再来看看它的这个那么A5等于啊。

我们来看看A5点ship。哎就变成了30个元素啊,这个时候它就没有sha这个概念了,它就是30个元素的意思啊,30个元素的意思啊,30个元素的意思。那么基本上我们的维度操作呢呃我们也只讲这么多啊。

我们开始进行我们下一个,因为讲的比较快啊,讲的比较快。下一个呢就是NPR呃就是NDR瑞的一个运算啊,NDR瑞的一个运算啊。啊,好,NDR瑞的运算啊,NDR瑞的运算。那么NDR瑞呢。

其实我们知道嗯我们之前经过的这些什么创建读取变换构建是吧?哎,都是为了什么呀?把它去做一些事情啊,把它去做一些事情,什么事情呢?哎,就是一些计算啊就是一些计算。我们还拿A5来说事儿啊。

A5A5现在变成这样了,我们再给它把它变回去啊,5和6啊,可以了啊。好,那么现在呢我要对A5进行一个什么呀?哎进行一个。什么呀?我们要对它进行一个运算啊,我们要有两个数组啊,我们有两个啊A6。

等于什么呢?A6等于NP点什么呀?Rnder。他也是五和6。好,我们同时啊我们先只只看一下A6啊,呃A6这个可能是比较毛是吧?比较毛是吧?好,我们不管它啊,数字比较多,看着比较闹心是吧?好。

那么我们现在就可以将这两个。NDR瑞干嘛呀?直接进行一个相加。直接进行一个相加哎,直接进行一个相加。那么加完了以后的,它的这个结果呢,就是它在它相应的位置上啊,我现在先把这个A股先打出来啊。

你再往下看一看啊。我们再把这个A6打出来啊。我们再把这个A5加A6,因为这个屏幕的问题啊,A5。加上A6。那么我们来去看一看就能看明白了啊,它都是干嘛呀?叫做矩阵的加法啊,矩阵的一个加法。

因为我们现在是二维啊,二维。那么我们来去看零加上一个负的0。36,是不是等于它本身我们来去这么去看啊,我们就对一行就行了啊。

0加上一个负的这个是不是还等于这个呀?一加上1个0。0537,你看是不是等于1。0537是吧?哎,2加上一个负的-一,是不是加上等于0。69是吧?哎,这个数字我就不算了啊,因为它电脑算的比人算的快是吧?

叽里咔啦全都给你算出来啊,那么下面一行也是就是说加法呢,就是说我们矩阵的相应的位置上的数字进行了一个加法,那么减法也是一样啊,减法也是一样,很easy啊,那么你理解的加法就能理解减法一样的。

你看零加上负的还是啊减去这个负的等于正的一加上一个正的,它等于一个什么呀?啊,减去一个这个等于这个是吧?哎,它完全是啊什么位置上。

相同位置上进行了一个加减啊,那么乘法是不是也是一样的?我们来看一看啊。哎,乘法也是一样啊,乘法也是一样啊,乘法也是一样。乘法用起来呢,我们通常我们通常我们会做些什么事情呢?我们会去做这样的一个事情啊。

叫做A一加上1个一。这也是我们刚呃A5加上1个一,这也是我们刚才课程开始的时候,我们去思考的一个问题。python里边,我们如果用列表给它加一很麻烦是吧?但是如果这个列表还是一个双层列表。

我们就得写双层的循环。如果是个三层列表。我们就得写三层的循环是吧?我们还得判断是吧?哎,写起来非常的绕是吧?非常的绕。好,那么但是我们在我们的python里面。那在在在我们的NDR里面。

我直接加上一个一就可以了。哎,直接加上一就可以了。那么这个地方呢,我们管它叫做一个叫做什么呀?叫做广播算法。哎,那么这个地方什么叫做广播算法呢?就是说我们自己想一想,刚才我们老师说了。我们A5加A6。

它是不是有个前提啊,是不是这两个A5和A6的,它的这两个的多维数组的,它的这个是也不是相同的呀。我们再来看一下啊。是不是啊?哎它这个ship是相同的呀,但是你这个A5加上这个一这个一的ship。

那就是一个一啊。那你这是怎么去完成的呢?哎,那么你看假设啊我如果把我的这个A6,我把这个shift稍微改一改啊,稍微改一改。A6是是不是这个呀?你看啊一个是56,一个是55,你看我再去加啊。

A5加上A6。他会报错,你看他说了,你看你这两个ship是不对的是吧?哎,不能够什么呀?哎,广播在一起是吧?哎,你这两个是不对的。好,那么我们就来想想,哎,他既然那为什么我的这个就是可以的。

你看现在把这个ship一对齐就可以了。那为什么我这个一就可以了呢?这就是我们这个ND里面讲到的这个广播算法啊,广播算法,广播算法什么东西呢?哎,非常的简单啊,它就是说哎如果在加的时候。

如果发现我的这个ND瑞所加的这个对象,它在横轴上和竖轴上,哎,如果跟这个没有对齐,那么我就尽量的去把它延展对齐,那么它其实加的这个一是个什么呢?叫做NP once产生了一个叫做五和6的这么一个东西啊。

sorry啊,5和6的这么一个东西啊,5和6的这么一个东西我们再去看一下啊。嗯,啊,是我们那个。哎,它其实呢是什么呢?叫做A5加上。它其实是这样的一个东西啊它其实是这样的一个东西。

不知道大家能我不知道大家能不能够呃理解啊,那其实是把一扩展了啊,它其实是把一扩展了。它其实是把一扩展了啊,它相当于把一扩展成一个有五行六列全为一的结果啊,全为一的结果。你看这是不是刚才我们加的结果是吧?

那么你看我把A5加上一个一,肯定跟个结果是怎么样一样的啊一样的啊一样的啊,那么这就是我们的一个广播算法啊,广播算法,那么呃这也是我们的这个N瑞里面一个非常重要的一个东西,叫做什么呢?

叫做U function式啊。啊,you function啊you function。那么什么you function啊?you function其实就是我们的叫做universal function。

universal是什么呀?通用的每一个的,也就是说我们的每一个元素都会应用这个什么呀,这种functionction,还记得方是什么呀?我们昨天操作我们昨天我们上节课说过的,我们的函数啊,函数啊。

那么呃我们讲完这以后呢,我们再来这个讲一讲我们的这个求和不用说了是吧?求和不用说了啊,那么我们的这个我们的矩阵也会有一些我们的叫做dot是吧?什么是dot呀。哎。

我们的NP点dot这个呢其实是我们在这些学习里面会非常哎稍微啊稍等一下我。

稍等一下,我我我光顾着自己讲的哈,就是没有看到啊。这个同学说依旧是黑屏。呃,同学呃有他能看到size啊,我来说一下这个艾米莉的size,其实就是说。元素个数对,没错啊,元素个数啊在维度这里蒙了啊。

在维度这里蒙了。维度呢,其实我在这里大家去说一下啊,维度这是一个我我就拿这个AA5来说说事儿啊。

A5大家看一看啊,其实我们你可不可以把它看成是一个表格。可不可以?哎,这是个表格,我们都知道我们的表格是不是都是有行。是不是啊?有行。是不是有利?对吗?我移动鼠标大家能看见是吧?哎,有行有列列什么呢?

0612221824啊,1731925行什么呢?0123有行有列。那么我们去访问的时候呢,我们在。第一个维度也就是什么?第零个维度的时候,我们是什么呢?我们再我们来看一下,这样你就明白了啊。

看着啊A5点,我们去我着重去说一下,因为我们毕竟是面向。同学可能不太知道的啊,我们看看它的sha,它是不是有5和6。大家我我问一下大家啊,五对应的是什么,大家数一数是不是行啊。对。是不是好啊?

那么这个六对应的什么是不是列呀?那么好,那么既然我知道了,那么现在我要去访问的时候,那么我不就是可以这样了吗?对吧?哎,在行的方向上我只选几啊,我只选一和4,也就第二行和第五行,在列的这个维度上呢。

我只选什么呢?哎。第五个元素我们来看看是不是这样啊,你看着啊,一和四,也就是第一行,这是第零行啊,咱咱都别弄错是吧?哎,第一行和第四行哎,1234号这两行被选中了,明白我意思了吗?我我这样画图啊。

首先我们选中的是这两行。

对吗?好,那么我们再去看一看啊,我只要第五个元素啊,0我们在在我们在这个列的这个维度上,这是第零个是吧?哎,第01234是吧哎。我们看看这个交叉的这个位置,黄线和红线交叉的位置是不是就是十盒。

99啊是不是就出来了?哎,石灰就又出来了。哎,五行六列啊,是二维的。是的啊,五行六列是二维的。就如果一开始大家你要是搞不明白说。那个我这个维度搞不明白,你千万不要再去更高的纬度了啊。

你千万三维也是一样啊。你看三维也是一样啊。那个新同学,我跟你说一下啊,我三次都看到你真的挺感动的啊,一直很很很那什么的同学哈。好,那么我们再来看一个三维的啊,稍等一下啊,我把这个A5点ship。

我们把它变形成235。

是吧235235是吧,这就是一个,我们再看一下它的这个NDRM是不是三维的呀?哎,三维的。好,我们把它先打印一下啊。这是就是一个三维的啊,这就是一个三维的。好,那么我们现在还要去访问它啊。

访问怎么去访问呢?也是一样啊。你看我A5,这个时候呢我先选第零个元素,比如说现在我要8呃,我要这个这个八和这个我要这个八和9这两个吧,假设我就要这两个啊。看着啊。

首先我访问的是不是第零个元素里面的第几行。01是不是第一行要的是第几列,01234是不是3到3到所有的?你说八和九出来了。那如果同学说老师我有四维的一样的呢,你在前面再加一个逗号嘛,是吧?那五维的呢。

你再加个逗号嘛,对吧?哎,但是没必要你一开始搞那么多维度,你能把二维的,你能搞明白了。OK那后边的你就能明白了。那三维的四维都能明白,它其实是一个是一顺百顺的一个关系啊,一顺百顺的一个关系啊,啊。

是明白了是吧?哎,对对对,013道对,是这样的,你看啊,你你你中间不要加这个东西了啊,你中间不要加这个东西,你就直接就是呃按我这个东西就可以了。你我给你改一下啊,就这个。

哎呃这字那么小的,看一眼啊,哎,大大,就是这个啊,你看A5,你看0逗号一逗号3冒号是吧?哎,是代表切片是吧?那么切片的话啊,第一个二是分成两个大表。对,也就是什么意思呢?也就是我把它直接分成了两个大块。

两个大块,它就是呃咱们咱们班级变成了年级,年级变成了什么呢?变成了一个呃年级和年级之间,那么年级再往上是不是就学校了,是吧?哎。哎,对对对,可以啊,你可以按照本身这个n派就是为了我们的代数去做的啊。

我刚才还没讲到这个dot呢,还没讲到这个dot呢是吧?讲到这个dot我们就明白了是吧?好,那么现在我们讲一个运算啊,运算的这个dot啊,稍等一下啊,呃我们先把这个最基本的这个东西先弄弄一下啊。

我们来看看这个A5,我得把这A5再变回去啊,这太讨一厌了啊,呃A5点。shipep等于这个。呃呃这30个是吧,五和6还是5和6啊,5和6。好,那么我们来哎。是一个。然后我看看A5好,这是正常的是吧?好。

那么现在呢我再去建一个啊,我们建1个A6等于NP点啊 random。五和6是吧。好,那么现在呢我们来进行一个dot啊,这个dot是个什么概念呢?就是我们的矩阵的一个什么呀?稍等一下啊,我们看一下A16。

我们看看这个结果就明白了啊。嗯。😊,Rnder稍等啊,是不哦哦。写错了是吧,A反正我的A,我也得重新建一次啊。呃,稍等一下,我把A5重新建一下啊。嗯。第。因为这个举证来讲是相当重要的啊。

举证来讲是相当重要的啊。看看A等一个什么。好。第六。你直接就A5都A5吧。我们看看为什么会报错啊,为什么会报错。我们知道矩阵相乘会有一个什么问题啊?我们的矩阵相乘呃,有同学咱们学过这个啊,对。

我们之前我们学过这个线性代数,不是写错的问题啊,是我这个维独没有对齐,唯独没有对齐啊,我们再来去做一个啊,叫做A6等于NP点random点RND啊。N这个时候呢我变成6和5。啊,变成六和5啊。

然后们这时候再去doote一下,不是写错了啊,是我的这个。本身就是有问题,我写的这个维度是没有对齐的啊。哎,我们这维度是没有对齐的啊,我们再来看一下啊,出现结果了是不是出现结果了。那么这个时候呢。

我们来去看一下啊,我们先去看一下,我们先把这两个分别给大家打印一下啊,打印一下。然后呢我们再来去看啊。A5。稍等一下,A是吧,A6是吧?A6好,那么现在呢我们来去看一下啊。

这个时候我们看看这个结果到底是个什么结果。我们知道矩阵乘法是怎么乘的吗?我们矩阵和矩阵相乘,还记得吗?

哎,刚才我们是怎么加的,我们的普通的我们的加法是不是零加上一个哎什么什么什么是吧?哎,等于一个这个但是这个我们是不不对的啊,我们这是怎么去做呢?是0乘以它加上什么呀?1乘以它,再加上2乘以它。

加上3乘以它加上4乘以它,加上5乘以它,明白我的意思了吗?哎,这就是我们最重要的我们的矩阵的一个,我们叫做哎矩阵的一个dot啊,dot点乘啊,电乘。好,那么dot是不是就是点的,对吧?

呃,之前学过代数的小售,我看同学的反馈啊,之前这呃还记得是吧?哎,五阶对,这样可以。对,哎,这就是我们举证举证的。你如果是学过新代数啊,知道我们举证的这个乘罚就会明白,就是什么呢?

我们的两个假设我们两个矩阵要去做这种运算的话,我们的这两个ship是一定要在哪个维度上对齐的呢?我们来去看一下啊。

A6哎,这个地方有写错啊,这样就对了啊,一定是要在这个两个是要对齐的,明白我的意思吗?你这个可不可以不齐,没有问题,你这个可以不不齐,明白我意思吧?哎,你这个可以是50个都没有问题。

我们来写1个50个啊。可能比较大啊。哎,就非常多是吧?哎,没有问题啊哎,没有问题啊,都是可以的啊。但是你这两个一定是要对齐的啊,就相当于什么呢?我我这边左边的这个数去找你右边的这个数。

它两个数每个位置上先做乘法,然后呢相同的位置做乘法,得到一个数呢,然后保留和下一个相同位置得到乘法,保留,最后呢得到一个结果啊,最后得到一个结果,然后再去乘下一行再去乘啊,这也是我们举证乘法。

如果呃你不熟悉,你可以去百度搜一下,百度搜一下啊,这里不过多的再去讲啊,不过多再讲,那么这最后呢我们再去讲一个叫做啊叫做按照维度去做啊,按照维度去做啊。呃,我看同学们有没有问题啊。哎,对对对。

是是这样的啊,是这样的呃,我可能讲的不是很清楚啊,我努力的去讲清楚,但是我害怕我讲的不清楚啊。啊,那么如果讲的不清楚,那么你可以去这个。

啊,百度上去搜一下他的这个他的这个乘法。其实我这样去画一张图,你就能明白哈,我这样去画张图,你就会明白啊。假设我们现在有两个矩阵啊,假设我们现在有两个矩阵啊。

这两个矩阵的形状可以不一样,对吧?哎,形状可以不一样,但是什么必须一样,我用这个红绿色的句话,这个长度和这个程度必须是一样的,明白我的意思了吗?哎,也就是什么呢?

也就是说我们可以这个里边的东西和它进行干嘛。相乘啊,一个一个乘得到一个结果。然后呢再去和剩下的这个去乘得到了两个结果,然后再去乘再去乘一样的啊,那么这个还是那句话,多练习啊,多练习啊。

你就会懂啊你就会懂。

好,我们来去说我们最后一个了啊,最后一个了叫做按照维度去计算啊,照维度去计算。好,那么现在呢我们再往下走一个啊,还是A5是吧?好,那么现在呢我们来去做一件事情啊,做一件什么事情啊。

我们现在要求我这个A5里面的最大值。那同学说,老师这还不容易,你看我的。我都不用我都不用问,我都知道肯定有这个函数啊,一定是有这个函数是吧?那一定是29是吧?A5里边最大的肯定是29是吧?哎,没有问题。

你看肯定是这个数嘛,对吧?但是我说我现在想去求每一行里的最大值。你比如说咱每一行里边,就因为这个数字呢,我们都是就是整齐的,没有打乱哈。你可以回去,你可以搜一下那个random点shuffle。

它可以把它打乱是吧?哎,我就不打乱了。那么。我现在要求的是每一行的最大值,那么怎么去求呢?我们就可以用NP啊,就是ND瑞典这个N呃。NP啊,sorry啊。是不是反正讨厌啊,max点A5。

然后呢acces等于0,你们去看一下啊,sorryX等于1啊,等于1这个时候呢算出来得到的就是什么呢?5117还有什么呀?还有我们的这个哎2329,它就是按照什么呀?excess是一啊。

他就把这个一这个维度消掉了,什么是一这个维度啊,我们还记不记得零这个维度是行,一这个维度是什么?是列,他把这个列的这个维度消掉了啊,他把这个列的维度消掉了,所以呢就会变成了什么呢?剩下的是不是只有行。

你看5117、23、29是不是有行啊,那么同样的说老师我我现在要你求什么呢?这一列一列一列一列的什么呀?最大值啊,按照列去求。它就是什么?2425,那基本上就是最后一列嘛,因为我们这没有打乱是吧。

所以看的很清楚是吧?哎,那么这就是我们的一个哎按照我们的这个。哎,维度去求啊维度去求。那么你这个维度,所以很重要,你把这搞明白了,后面很多操作都会基于这这个之上哈。那么我们可不可以按照维度去求和呢?哎。

也是可以的,三看到没有?06加12是不是20,20加18是不是3838加24呃,38加啊,这个这个算的不太清楚了啊,我算的不太清楚了啊。

那么基本上呢就是说我们的这个是按照我们的这个维度最后去求出来那么一个什么呀一个结果啊,5117是吧,19,你算一下,最后肯定是85是吧?哎,14这些东西算起来肯定是80。那你说我再按照行去求呢。

也没问题。你看这这这这一行加起来一定是15,这一行加起来一定是多少。那,一定是一个叫做51啊,51。那么这87、123、159。

按照好去求啊按照好去求。好,那么好,那么呃基本上我们今天的这个公开课到这儿基本上就已经结束。但是我们会有最后一个作业啊,最后的作业叫做求soft max啊,soft max之前呢我我今天的这个课呢。

基本上把这个soft max里面东西都讲完了啊,都讲过哈。那么呢我再去大家去过一遍,把这个当做是留给大家的一个作业,大家自己去动动手,基本上就能把我们今天讲的这些东西啊。

哎,都去干什么呀?这个penance就删掉吧啊,干什么呀?就能把我们今天讲的这些东西全都消化掉啊,非常好的一个收获啊,一个收获。好。那么什么是soft max呢?

现在呢我来去定义一个叫做A7等于NP点random点NDN啊。啊,妈。是不是中等弄是吧?我们把它变成1个11个7是吧?哎,我们知道哎,把这是马克当的是吧,别坑我了哈。说的么不对,A7是吧?好。

我们来看一看这个哎这个7有点多了吧,一就行。嗯,我们来看一看这是生成了一个随机数,是不是有正有负,是不是有正有负。那么我如果我们要去对这个东西去进行一个概率化啊,soft max其实就是一个概率化啊。

概率化。那么我们要对它进行一个概率化的处理,怎么去处理它呢?因为有负数没有办法去比较,对不对?我们首先把它干什么呢?我们给它做一个指数运算啊。explanation是吧?哎,我们的A7是吧。

我们的A7把它作为一个指数啊,把它作为一个指数,求得已哪A期重新复值。哎,我们再看看A7就变了啊,就变成什么了?没有负数了,看到了没有?做了一个线性变换。这个大家能看明白吗?我们看一下大家啊。

有问题的话就提啊,有问题的话就提啊。

啊,有问题的话就提啊。好,那么我们来去看一下啊,哎这时候我们就是把它变成了一个线性变换了是吧?啊,变成了一个指数是吧?我们现在要去求的是什么呢?我们要把这个东西啊。我们要把这一行给它求出一个什么呀一个。

既然都是正数是吧?既然都是正数,我们要把它进行一个什么呢?哎,NP点s。我们的这个A7Xces等于一个一。得到了一个什么呀?叫做A7。下划线s我给它付一个值哈,得到1个A7点sum是吧?

我们来看一下A7下划线sum等于1个18。4是吧?然后呢,我们再用我们的这个A7。去除以我们的A7。下环境散了。会得到了一个新的数字啊,会得到了一个新的数组。这个数组会有一个什么特点?大家大家想一想。

这个这个它的特点一定是什么?它加起来一定是一,我们知道概率的总和是不是就是一呀?哎,我们可以把这个结果干嘛呀?我们把这个变成A7下划线soft max。等于A7是吧?

我们把这个A7我们先print一下啊,我们先print一下啊。A7下划线soft max,我们先确认一下啊。好,我们再去求一下,我们看看它是不是我们的17。小的nax啊。是不是一呀,一定是个一是吧?哎。

我们就用这种方法把我们的这些给了我们的数字啊,我们这A7是不是很杂乱的,有占过负的是吧?可能还非常大是吧?但是最后呢我们都会把它变成在一里面的这种操作呢,我们也可以把它叫做归一化啊,归一化啊,归一化。

好,那么这个里面呢其实就是一个概率啊,soft max啊概率。这个在我们机器学习里面的图像识别里面,其实就是比如说这个一列的出现的是什么呢?我们看到它的分数,我们会把这个出现的概率当做是一个出现的分数。

那么假设这一列对应的是猫,这一列对应的是狗。那么狗的呃猫的分数要比狗高,我就会把这张图片认为是什么呢?哎,猫,那么剩下的鱼虫和鸟都不会被人都不会被什么哎出现的概率就非常低。

我们之前可能同学有用过APP什么叫做花瓣侣是吧?哎,我们扫一个花,然后出现了一个什么海棠呃概率百80几是吧?哎,樱桃概率60多是吧?什么什么什么什么玫瑰概率3%是吧?哎,其实就是这个东西啊。

其实就是这个东西。好,那么今天呢我们的公开课呢,整整一个小时,那非常感谢大家的这个啊,耐心的听讲和热情的一个提问哈。好,那么呃用过是吧?那你用过,那么你一会儿就好好再写一写哈,自己去搞一搞是吧?

自己去搞一搞。因为这个也就是咱们记忆学习里非常重要的一个东西啊,sofm啊,ofm。

好,那么我们的作业呢也是我们用来作业写的不不标准啊。哎,狼牌。哎呀,气死我了。1百5比和这个。好,我们的作业是n派实现我们的stm啊。基本上你把这个ntime。在这个里面呢,我给大家去做的是什么呢?

只有一行是吧?那么我要求你去写很多行啊,写很多行。你比如说哎些我这里只有一行五列是吧?你写十行五列,你也你也要去求啊,那么你把这个东西做完,那么我们这节课讲的东西,我可以认为你都ok了,明白我意思了吗?

你都O了。好,那么呃这也是我们呃接在线啊python三节课上手python公开课的最后一节课。那么基本上呢您如果能够从头听到尾,并且您如果能够从啊我们留下的每一个作业,包括我们论坛里的作业啊。

你都能够重新来做一下,至少说python在科学计算方面你已经可以上手了。那剩下的其实就是不断的拿项目去练习啊,啊,拿项目去练习。好,那么非常感谢大家啊,非常感谢大家啊,今天的这个呃热情的这个提问哈。

热情的这个提问。

好,好,那么我们呃最后呢我会把这个作业呢会会把这个notebook呢发到我们的这个AI公开课的这个群里面,大家还可以去下载呃,会去重新的去在自己领脑上去实现一下啊,实现一下。好。

那那么今天的课程就结束了,谢谢。

人工智能—Python AI公开课(七月在线出品) - P4:瑞士军刀pandas之数据分类 - 七月在线-julyedu - BV17W411K7G8

学们啊,欢迎回到我们的拍ython数据分析基础课。在今天的课当中呢,我们会继续带着大家一起学习关于pandas的一些内容。在前面的几节课当中呢。

我们已经算是初步的入门了一下pandadas的所有的data structure。啊,我们讲过了pandadas的 series,我们讲过了pandas的 data frame。啊。

然后我们讲过这个seious呢是一个一维的数据结构。这个data frame呢是一个二维的一张表格。然后我们pandas里面有一个index呢,是专门专门用来标记啊seious和data frame。

嗯,这个data frame呢其实就是我们pas的主要的核心内容。然后我们今天的课呢也是围绕着围绕着这个data frame来进行展开。那我们今天的课当中会给大家介绍三个新的操作啊。

叫做group by aggregate。group by and aggregate呢一般会一起。一起发生。我们会按照group by呢,就是按照一个啊。对一些表按照一些内容进行进行分类。

然后进行汇总啊,group by呢其实就是一个分类的过程。而这个aggregate呢它就是一个汇总的过程。然后我们这个transform呢是对呃表里面进行逐行逐行的操作的一个过程。

那我们啊先这么抽象的讲一下之后呢,我们后面还是具体的开始举例子。我现在先假设啊我们有一个呃我们有一个公司,就比如说我们7月在线的公司,然后我有一张表格呢。

他记录了每一个员工的啊员工的那个薪水的他们收入的流水情况。那我们在开始之前呢,首先记得import pandas SPD。然后我们还要import down派。SNP。这样拿到两个。我们需要的库。

然后我们来创建一个一张表格,这张表格呢它是一个data frame。这个data frame它记录了我们7月在线这个公司员工的流水情况。那我们要存哪些信息呢?我们首先要存这个员工的名字。然后我们还要存。

我们还要存它的年份。我先把这些信息给他写下来。我们讲过这个构造一个data frame的一个最基本的方法呢是。写一个。dictionary of lists。

然后这个dictionary的 key呢会被当做我们的。它的key会被我们当做columns,然后它的里面的数据呢就会被一行一行的展示出来。然后我们再写salary。然后我们再写bonus。

这就是我们的呃这张表格的信息。那我们的姓名呢有july。有。紫尾有。折尾。You hand。有 July外。这些呢都是比较机械的操作。顺便作为给大家给大家作为一个一个复习的机会。然后时间呢。

我们比如写2016年、2016、2016、2017、2017、2017。然后我们的sary呢啊那都是一堆整数。Okay。然后最后我们的 bonus写一些稍微小一点的数字吧。

这样我们就拿到了saries这样一个表格。看看有什么错误啊,他这边错误告诉我们说是eras must all be of the same land。可能不一样长。12345678。

123456788号86123456。这边是明显少了一些,嗯,我们再写1个2017,再写1个2016。这样呢我们就拿到了这样一张表格。

这张表格呢记录了我们每一个员工他每一年拿到的一些薪水和他的bonus。然后呢,我们下面给大家展示一下什么叫做group by。比如我现在想做一件事情,我想按照嗯按照那个。每一个员工做一个分类。

然后给他做这样一个分类的操作。那我可以怎么做呢?我们可以做group by。Name equal to seller。Bian group by。

group by name这样一个colon就这里传进去一个co的名字,然后我们写group by name,我们就看到啊这边少了一个P,这样我们就看到呢我就拿到了一个object。

这个object的名字叫做data frame group by。那这样呢我们可能不太看得明白,group by是一个什么样的object。

但是我们后面呃会再给大家详细的讲解一下这个group bygroup by objectject究竟是一个什么样的东西。但是我们在group败之后呢,我们有一个。

有一个最最常用的操作是做一些aggregate的操作。你可以认为group by呢,我们把这个数据已经分类好了,就是我已经按照名字做了一个划分。嗯。然后划分完了之后呢。我们就可以做一些汇总的操作。

比如我写goodbye name点。大收到了个屁goodbye name点some。我们就会看到他就按照这些名字含着来则伟这三个名字呢做了一个做了一个分类。然后我们把 bonusus呢都加到了一起。

把salary呢也都加到了一起,然后把页也都加到了一起。当然这个页呢把这个年份加在一起,其实没有什么意义。但是我们嗯作为一个例子就先这么放着。然后比如说你不想把这个年份加起来呢,我们可以写group。

by。name,然后我们还是可以把我们的con给它选出来。注意我们的我们这个就像对一个data frame的操作一样。如果我写salleary bonus,然后再写一个sum。

我们就看到他只对salary和 bonus做了一个求和,他就没有把那一个没有什么意义的页那一列拿出来。然后我们看到我们前面的前面的这样的这种写法呢,它默认是给你按照名字进行了排序。然后呢。

我们其实可以我们也可以不排序,怎么样不排序呢?那就是我们在group by的时候,如果我saries点group by。name的时候,我给它多加一个参数,st等于foralse呢。它就不会进行排序。

然后我们再写sum呢,你就发现啊它就按照按照july则尾函这样下来,它就没有做一个默认的排序。然后还有呢,我们我们刚才刚才呢。拿到这个go百。name之后呢,我们直接给它做了一个求和。

这样sum呢是一个求和的操作。但其实呢嗯也有一个写法是直接用agate,然后sum。这样呢我就嗯可以。就这个这个方法呢,其实就相当于是aggregate是可以传,你要传一个function给它啊。

包括你也可以写MP点some。或者就这样呢,我们可以我们可以把一个function传给这个group外,然后它可以一个一个的apply到每一个group里面去。

对每一个group都做这里面的这个function的操作。比如someum呢就是一个求和,也就是这个这个语法呢就是aggregate传一个function进去。

它就可以对每一个组都做你这样一个呃reduce的操作,也就是一个汇总的操作。然后我们这里呢再详细的看一看这个group by它到底是一个到底是一个什么样的object。我们还记得前面有一个group。

Goodbye。name这样一个object,它是一个data frame group by objects。我们可以看一下它的点groups是什么呢?这样我们就可以看到我有三个group。

这三个group呢分别是含jaly跟则尾,然后这里呢分别是带上了它的index。这个index是从哪来的呢?我们直接看一下salaries,你就会发现。第0个第4个第5个第7个是july。

所以你就看到0457呢,这边是july。然后这个函呢它就是第三个位置,然后则尾呢也有有3个3个index,所以这个group by呢,你可以认为它其实就是对于这个data frame呢。

按照index做了一个做了一一遍便利。然后呢,它把它的index取出来分成了几类。然后这几类再归出去呢,你可以做一些agggregation的操作。那我们也可以看一下这个,看一下 lens子啊。

group by name,这样呢你就会发现它一共有3个group by name的这样的group。然后group by呢,我们前面是只group by一个col。

但是这个group by呢它其实可以group by多个col。比如我这里写嗯,我我这里可以写sary start group。Goodupbye。传一个list进去。

这个list呢里面是你想要group by column,然后我有name跟 year。然后这两个group by之后呢,我们再对它呃,我先我先给它分两步写啊,就这个是可以分到一步写的。

比如我写group。By name。也等于这个东西。拿到拿到了这个groupmy name here之后呢,我再对他来做一个。So。这样我们就会看到,你这样就看到了每一个老师。

每一个员工在出来EDU他的 bonusus跟 salaryary做一个汇总是有多多少的一个数字。并且呢它的index我们会发现这个s之后呢,我们看一看这个s之后,它究竟是一个什么样type谱的东西。

你发现它的type也是一个data frame,然后我们会发现这个data frame呢,它的index应该是有两层的index,就是第一层呢是老师的名字,第二层呢是我们的年份。

然后除了这个除了这个s之外呢,其实aggregate的函数还有很多,我们包括group。Gs by。name yeah这是我们刚刚的一个group by object。它除了some之外呢。

我们还有size这个 function。size呢是嗯统计一下一共有多少个records在这个group里面。然后除了size呢还有其实就是如果大家熟悉sql呢,就会非常觉得这种语法非常的熟悉。

就是我们写sql的时候也会写呃select,然后some或者说是average of something,然后from一个table,然后group by some columns这个地方呢。

其实group by跟 aggregate一般都是配套使用的。你先把它分成几类,然后每一类呢给它做一个相应的汇总的操作。比如我们这里汇总的操作,我们可以写命,命呢就拿到了这个平均。

我我先把它都写下来size。然后还有我们的命的操作,算平均数。然后呢,还有我们的。还可以我们还可以求me。medium呢是我们的中位数的操作。然后我们还可以写。

standand deviation这个是我们的标准差。然后注意标准差呢,如果它只有一个records,我们看这个地方的count有很多只有一个records。那如果只有一个records呢。

它就算不出标准差这个东西,对吧?所以这边呢它就变成了NAM。然后我们还有一个非常有用的function叫做describe,它可以统计出各种关于这个goby。各个groupgroup的一些统计信息。

比如group by namee点describe。我们就看到啊,他就他就告诉你这个count是多少,包括命是多少,standard deviation是多少,还有它最小值多少啊,最大值多少啊啊。

这些全部都有。啊,很多很多方式呢大家可以去网上查,有一些呢也可以靠,其实靠名字猜也能猜到。比如说这个last丝呢。他就会把最后一条记录给你拿出来。啊,如果我写这个first呢。

然后把第一条记录给你拿出来。如果我写这个命呢。那就会把最小值给你拿出来。如果我写max呢,那就把最大值给你拿出来啊。

这个是我们比较常用的一些group by跟 aggregategroup by呢是把按照一个co或者几个co把它。把他那些嗯。把它按照它的那些值进行分类,然后分成了几类之后呢。

我们再对它做一些统相应的统计的操作,包括求值求平求平均啊,求最大求最小啊,求和啊之类这样的操作。啊,如果我们想要对一个group做一个iterateerate呢。

我们看一下怎么样可以iterate一个group。其实我们这个。我们可以写for name group in group。Next group by。内。这样我们看一下print一个 name是什么。

你就会发现它的名字呢是我们每一个group的名字,就是含 july则为这三个名字。然后我们还可以把。还有一个很有用的词。我们把group打出来看呢,就会发找到每一个group的信息啊。

我们就看到这个函呢,它是第三个位置啊,然后这个这边呢是jaly的所有的信息,这边是泽伟所有的这个信息。然后我们看一看,我们顺便可以看一看这个print。type group是个什么什么类型?

我们发现它其实都是一个data frame。其实这个嗯group by呢,它就是帮你把一个大的data frame拆成了好几份。

然后每一份呢是按照你要你所指定的那一个con的 value来进行划分的这就是把一个大的data frame拆成几个小的data frame的方法。让我们看一下,如果我想要选择一个特定的group。

我可以怎么做呢?比如我写group by name点get group。这样呢我就可以按照这个group的名字来拿出这个group啊,其实这个这个呢就是相当于我上面拿出来的结尾这样一个group。

然后我们可以看一下它的type究竟是什么。如果我写type。我们就会发现它是一个data frame。就这是说我们刚才上面拿到这个data frame。然后后面我还想嗯说的一点呢。

是这个我们刚才刚才前面忘了讲一点,就是我们在做这个agggregation的时候啊。如果我写,比如说这里的group。group by name yeah点我我是不是可以写aggregate。

然后比如写一个呃n派点min。这样呢我就可以求一个平均。然后如果我们想要做几类操作。比如说我又想求个平均,又想求个标准差MP点STB啊,又想求一个和,比如MP点some呢,你就可以把它作为一个数列啊。

不是作为一个list,然后把这个function function的名字一个一个的放进去,它就可以对这几你想要做的这几项都给你求一个值出来。那我们就看到这个 bonus跟 salary呢。

它求了三个内容。some standard deviation和和命。然后嗯今天课最后这节课最后要给大家讲的一个内容呢是trans transform。我们transform是什么东西呢?

其实它就是对对于呃我们的这个表格呢逐行逐行的做一个操作。然后这个操作并且是嗯跟我们前面讲的group by有点关系。所以我们这里呢先先拿一张大一点的表格来做个演示。啊。

我这边有一个我这边有一个文件夹叫做data。这个data里面呢。呃,token authenticationO那我们。我这个notebook好像还加密了。稍等我来复制一下这个头坑。我这样进去之后呢。

我这边有一个文件叫做MVMVDA点CSV这个是英伟达这一只股票,它的呃数据,这是一个CSV的文件。那我们我们上一节课已经讲过怎么样读1个CSV的文件。嗯。

我们就用我们前面讲过的MBDA equal toPD点read CSSV这样的文件。然后我写data。MBDA点CSV。这样呢我就读进来了我这个英伟达的文件。

然后我们可以看一下NBDA点headhead呢是把这个把这一张表格的前五行给你打出来。那我们就看到这一个。这张表格呢嗯它它就是股票的信息,对吧?这里有open有h,就开盘价、最高价、最低价,还有收盘价。

还有那个嗯调整过,按照按照那些什么分红啊,拆股啊,这一些调整过的一个nmal莱的价格,最后是这个交易量成交量。然后我们。在再讲一些这个read cV。

如果如果我现在想要把第一列这个date这一列当做是我们的index呢,你可以指定index column等于0。这样呢我的第一列date就变成了index。

然后呢还有一个我们现在想要做多做的一步操作呢是我第一第一块地方呢,因为它是一个d对吧?这个date呢它默认读进来其实是读成一个字符串,它并不会给你做任何的操作。

但是我会希望它能够把我的第一列变成一个date time的 objectject这样呢我可以再申明一个pa然后把con的名字传进去。

我想要把date这一些这一个co呢pass成一个date的 objectject这样我们再拿到你看起来还是没有任何的变化。但其实我们会发现它这里有一点区别呢。

就是这个点 index它就变成了一个d time index time index就有一些好处。比如说我拿到了第一个。day time index之后呢,你发现它是一个time stamp。

然后你可以写它的夜,你可以说明它的mon。你可以申明他的day。那,你这在是可以写他的weekday。Weekday。发现他这个周四就是这样多了很多对日期的操作,就是后面可能会嗯有一些用处。

然后我们这里后面就要用它了。比如我现在想要给这只股票呢,按照按照每天按照按照每一年嗯来做一个group by,那我们应该怎么做呢?这个时候其实我们可以这样写NVDA点bro by。Yes。

group by嗯,这个group by应该是什么呢?其实我想要把每一行的这个年份给它拿出来,这个年份怎么样给它拿出来呢?其实我们需要传一个function进去,就你这个group by。

我们知道group by干的是一件什么事情呢?它其实就是逐行逐行的去看,然后按照你那一行的某一个信息来把它拿出来。然后我这个group by呢理论上我应该写一个嗯把我的那些要分的那些名字给它写进去。

但比如我现在想要按年份来分,那年份并不是我的一个col,那我应该怎么样做呢?其实你可以这样做,我可以写一个mbda functionda这样相当于是一个 function对吧?

比如我写 key等于这个东西,那我现在这个里里面如果再写 key呢,其实它就会默认帮你按照年份来做,我这里还没有执行,它就会帮你按照年份来做划分。我们可以直接加一个aggggregation上去。

比如greg。AGG跟aggregate呢是同一个东西啊。比如我现在要汇总一下MP点命和MP点。STD那我就可以算出这个算出它的平均值和它的标准差。那我们看到它就按照年份做了一个划分。

所以这个key呢它默认其实NBDA进去之后呢,group by它其实是看你的是看的是你那个index的值,然后我把传一个da function进去呢,你就可以把X点E给它拿出来了。

又或者说呢你这边其实直接这样写啊,我直接写一个de key。T这个 function呢,它 takeake the parameter X,然后我写return X点E。这样做出来效果也是一样的。

就lambda呢其实就是这样对于这样一个functionction definition的一个一个另一个啊比较简洁的写法。所以我如果直接把这个lammbda function写进来呢。那也是一样的。

就这个lammbda function呢,其实它是可以帮你定一个functionction,并且把这个functionction直接写成一个参数。啊,那我这边直接是显示前几行,稍微节省一点空间。

那这样呢我们首先定义了一个key,这个key呢它可以帮我们嗯做一个。帮我们算出这个做一个group by。group by之后呢,我们可以算出这个平均值和标准差。然后我后面呢想再做一步想再做一步转化。

这一步转化是什么呢?我想把我们的股票的价格除以当一当年这个股票的平均值,然后啊我想把这把我的股票的价格呢减掉我当年股票的平均值,然后减出来的差呢。

再除以我的一个standendard的 deviation。什么意思呢?如果我写一个function叫做the score呢,我用lammbda function来写。它就是这么个意思啊。

比如我有一个我有一个股票X,我想要把它变成X减掉X减命。然后再除以X减STD。就是X,你可以认为X是一个n派的array,然后这个array呢,它会它要减掉它的命。

然后再除以它的standard deviation。这个是我想要做的这个the score的操作。然后this score操作,我要怎么样我要怎么样去用它呢?我就可以写MVDA点go by。

group by之后是key啊,group by我group by key之后呢,就是按照年份已经划成了几个不同的subgroup,每一个subgroup都是一个data frame。

这个data frame呢都是一个一堆股票的价格啊。然后这一堆股票的价格呢,我想再给它做一个transform。transform就是在这个地方拿上用场,就派上用场。

然后如果我这个地方transform模型,我把这个Z score传进去呢。他就可以。对这一这一系列group全部都做一个the score transformation。

就是把它做一个做做成一个标准化的操作。其实大家可以自己学习一下,就是这个你把X减掉命,然后再除以这个standendard deviation。

就可以把一个一个随机变量转成一个嗯转成一个01分布的那个高斯分布。那我们这里可以写transform。等于这样的一个transform的东西。然后我们再看transform。

我们就看到这个transformed呢,它就变成了一堆啊,其实都是离01比较近的数字。啊,因为他已经除掉了这个平均,减掉了平均值,又除了一个标准差,所以这个是被收的比较小。我们就把这个head给它留下。

然后呢,有了有了这样一些数据之后呢,嗯我们其实后面会讲这个mathpl lab这个画图的软件。但是嗯我们今天这里呢简单的用一下。pas自带的画图的功能。

我先在这个猪里面写一个matpl live就可以matpl live in line,这样我就可以在这个软件里面做一些简单的做图啊,比如说我刚才有个MBDA对吧?如果我写MBDA点plus呢。

我们就可以画出这样一张图来这张图看起来不太好看。为什么呢?因为它线太多了,并且这个volume呢是一个很大的数字,它的股票价格呢都很低,所以你看很多值其实都在下面变成缩成一条线。

所以我可以把NVDA的一个。一个一个部分拿出来,比如我们就把这个adjusted close拿出来。啊,这样呢我就看到了它的它调整调整过后就是复权之后的这个收盘价啊,它就是这么一个走势。

然后我们看到它最近涨得非常的猛,因为英伟达这个芯片做的比较好,最近人工智能和这个术 realityality都比较火,所以它这个股票就涨得非常的猛。嗯,然后我们可以把NVDA给它画出来。

然后我们也可以把我们也可以把我刚刚的这个transform。你再看看这个transform的它长什么样子,这是我调整后的股票价格。调整后的股票价格,比如说我再给它做一个呃。

我我也把它的这个adjustedclo拿出来,然后我点port一下呢,我们就可以发现啊这个这个股票呢。这样按照年度进行一个调整之后呢,它就是上上下下啊,就是你可以看出。嗯。

其实这个第一波下来是没有什么用的,就只是这一年到了下一个年度,我们就可以看到这一年它的那个股票的走势是什么样子的。然后我还可以嗯这些这个plus呢。

它其实take一些 parametersameters。比如我可以看这个呃,我们可以写它的graded等于数。它这个 parameterameter呢非常的多plot。

同学们可以自己去研究plot这个 function。在官网的那个documentation上可以查到。如果我加了个gradere之后呢,你就看上面它是一个白板的这样一个背景。

这边下面呢后面就多了一些实字的背景啊,网格状的背景,这样你就嗯可以有个参照。然后我们还可以写这个fiig size。就是写fiake size呢,它 take它把这个长宽给你输进去。

长宽的单位呢好像是in尺之类的东西。比如我这边随便写两个数字,10。87。4啊,那这张图就变大了一点啊,就这是一些你可以简单的。

对于一些数据呢可以用用pandas来它带着这个plot的这个方来做一个简单的图。然后我们还可以把把这两个两幅图呢给它拼到一起做一个简单的对比。

啊比如说我定义一个compare是一个新的data frame。这个data frame呢它它是分成两部分,一部是我们的 originaliginal。

ADJclo price这个东西呢是我们的MVDA。A DJ close。然后呢,我们还有一张新的。The做 transformed。A D,J, close。

这个ADJclo呢是transformed。A D,J, close。然后我们再看一下这个compare点pl。比如我们也给它写上gradereread等于true。

然后我们给它fiake size等于稍微大一点,10。87。5这样。嗯,我们就看到这张表格呢,它就是两张两两个股票的啊。这这两个呢其实不太好对比,它其实下面还是大致反映出了这个股票它上上下下的情况。

但只是这个scale一下子被缩到零这一块地方啊,做个平均了。然后讲完这个画图之后呢嗯。我们再做个简单的小练手,比如你想把比如我现在想做个transformation。

我想把每一天的股票价格都把它变成说是我们这一年的股票上下的走势。那我们可以随便写一个function,叫做priice。rangeange等于 lambmbda。X是X点max减掉X点 mean。

就是我每一个这个X我对于每一个每一个record X呢,我都把它的最大值跟最小值减一减。然后比如说我用MBDA点group by。key我们还记得刚才的key是按照年份进行划分。

然后我再做一个transform。Price range。那,你就可以把我我们这个transform呢就直接把每一天的这个数字都变成了当年的这个最高最高值减到最低值。这样一个操作。然后这这样一个方式呢。

你也可以用你也可以用别的方法把它写出来,这个有点长,我们就给它写一个head。除了head,你你当然也可以写taille,那就是倒倒数五行。嗯,然后这个这个transform呢。

其实我们其实我们也可以换一个方法来写,对吧?比如说我直接嗯我我们也可以用一个别的写法,比如DF点group by。不是DF是MVDA点group by key,然后点。AT。我直接点。Yeah。

点 transform对。You是 transform。transform里面呢也take一个 function,比如我直接写max减掉MBDA点group by。Yeah。Tea。

然后点 transformform。Mean。这样呢我我也拿到了就最大值减到最低值。所以这个方式的写法呢其实都不是唯一的啊,可以用很多不同的方法来写。那我这边比如说也是headd一下。

也是tailll一下。这两个方呢应该是完全一样的完全一样的信息。然后我们自己也可以再做一些练习。比如我写我随便想1个MBDA。我如果想要goodbye。啊,两个东西我想要按照年份跟月份做一个划分。

那你可以直接写lambda啊。X。然后我们可以写。我们看看能不能这样写,比如兰姆daX,然后我写呃X点。Yeah。🤢,Ext mom。啊,这样也可以拿到一个object。

其实就相当于你拿了一个index之后呢,我把index这个 year跟mon拿出来,然后我给它求一个aggregation。这个aggregation有MP点min和MP点STD。

看一下no results。no results嘛?我们可以看一下NNP点min是什么。Yes。Yes。Yes。啊,也就是说我必须要。给他按照。我们可能必须要写两个T进去,比如我写ET等于。0XX点1。

然后我再写一个monkey等于 lambdaXX点mon。然后我们来看一下一。和这个。么。这样行不行呢?Yes。Okay。再给他。啊,这样就可以了。

就他必须要让你嗯用这样的方式来给他做一个做一个aggregate做一个。呃,group by和 aggregation才可以。那我们这里可以再给它写成AGG,然后把它写成MP点min。和这个MP点啊。

MP点。STB。这样我们就可以拿到每个月的命和stand deviation。啊,同学们都可以就是像我一样自己可以。做各种嗯自己想做的实验,就是你学了一个新的方之后呢,你就想着我可不可以这样变一下。

可不可以那样变一下。就很多时候这个嗯开发者做这个pandas的时候呢,他的想法都是很直观的。就是你这个程序可能你脑子里是这么想的,你这么写出来,发现它就是对的。然后有时候可能是错了呢。Yeah。

一个你自己可以读他那个错误的信息,然后试着去分析究竟是哪个地方写错了。如果实在是分析不出来呢,也可以上网去查相应的资料就可以找出来。嗯,最后呢我们再再做一个小小的操作。

比如说我现在想要把我的我想要把我的嗯。我们刚才画出来的图是一张是一张K线,这是一张每天收盘价的这么一张K线图是吧?比如我想要把它做成一个月K图,那应该怎么做呢?

就我想要把每个月最后一天的这个价格给它拿出来。那其实我是不是可以用我刚刚做的这样一个group by,但是我只要把它的最后一天这个last给它拿出来就行。

那这样我是不是就拿到了每个月每一天的这样一个收盘价?然后呢。然后这样拿到之后呢,我可以再把MVDA它的。我这样拿到之后,如果如果我想要做一个plot会怎么样呢?我们可以看一下,就这是一个呃我就叫mon。

李。Stock。monthly呃NVDA等于这个东西。然后我再把这个monthly NVDA。点stock点plot,我们看一下会怎么样。这样pl出来呢呃不太好,为什么呢?因为。我们还是想把这个ADJ。

扣s拿出来单独看一下。这样呢不是特别好,因为它下面呢居然都是一堆它下面其实默认的index呢是一堆数字,就1999是一个数字,一是一个数字,就它也大致画出了这个曲线,但是下面的日期不太好。

那比如说我想把这个monthly nVDA再给它做一些更加细致的操作。比如怎么做呢?我现在看一下这个monthly MVDA,它是长这个样子的。然后我们看一下它的index是长这样的。比如说这个地方呢。

我们就可以先把它的index呢变成说是我们的,我们想把它它的index呢变成一个月份的这样一种这样一种时间时期。那我可以先把它的每个月给它拿出来。比如说我写for I in monthly。

MVDA点index点values这样我就把我就把这个monly NVD它的那个index里面的数字全部都拿出来了。注意这个I呢,它其实是一个。我们可以看一下这这个东西。

它是这个monthly and video点index,它是一个什么样的东西啊,这样呢我就拿到了一堆values。我们会发现这个valueue呢,它其实就是一堆。它就是一个一个aray,对吧?

啊啊一个list。然后这个list呢,它它每一个每一个项目呢其实都是都是两层,第一个是年份,第二个是月份。那我们拿到了这个年份跟月份之后呢,我们可以给它加起来,比如说str。String I。0加上。

中间一个一条横杠,加上string的。I嗯啊,我们这样就这样呢我就拿到了,我们看一下index长什么样子。我们发现index ok这里有一有一点问题啊,因为这个str呢这边应该是要打上圆括号。

不是这个方括号。那我们这个str。拿到了这对index之后呢,我还可以把这个index转成一个pandas的呃period indexexPD点period index。

这样做index之后呢啊我们还要写一个。Frequency。Frequency等于 M。这样我就可以变成一个按月份按月份算的这样一个index。我们看一下这个index。

它其实就是个peer real indexdex,表示这是按月份排的这样一个peer yield。然后这个时候最后呢我们要做的一件事情是把。

我要把我现在的monthlyMBDA点index等于我新建的这个index。这个时候如果我在pl呢,我们发现下面的日期就变得非常的自然了,就它变成了1999年到2017年,就因为它已经理解了这个日期啊。

它下面是一个月份,而不是一个单纯的数字。嗯,所以这个呢就是我们怎么样把把英伟达的股票给它plot出来做一些简单的运算嗯。所以这个呢就是我们今天讲课所有的内容,我们简单回顾一下。

我们讲了这个group by,讲了这个aggregate,这个是对我们的一系列数据做一个做一个分类,以及做一个归总的操作啊,然后我们还讲了transform,怎么样把里面的每一个数字呢做一些变化。

然后我们举了个例子啊,怎么样对这个英伟达的股票呢做一些操作,包括做一些这个group bytrans,把这个这样呢可以把我们的每天的股票价格变成每月收盘的那个价格。

我们今天的课就讲到这里。

人工智能—Python AI公开课(七月在线出品) - P5:瑞士军刀pandas之数据整合 - 七月在线-julyedu - BV17W411K7G8

欢迎回到我们的排ython数据分析基础班。嗯,在今天的十节课当中呢,我们会继续带着大家一起学习有关pandas方面的内容。我们这节课主要会讲data frame,也就是表格之间的拼接方面的知识。

主要呢包括三个 function是 mergegejo和 concatetnation。嗯。呃,这几个functionction呢他们都是做对表格的拼接做一些操作。那我们就直接开始写代码。我们首先会讲。

concatecation方面的知识。首先我们还是import我们的两个library,import non派。S, and P import。Hands S PD。Yeah。

然后我们先建立三个data frame,比如说我第一个data frame。第一个data frame呢,它是我们传一个。我们传一个 dictionary of lists。就是我们先写上。

城市的一些房价。Partpartments。然后我们写在这个城市买车的价格。是不是。然后我们的index呢是。Yeah。上海。Beijing。这样我们回顾一下。

我们这样DFE呢是一个data frame。然后同样的,我们再创建两个类似的data frame。叫做DF two。我们再创建一个data frame叫做DF three。

这样呢我们就拿到了啊三个data frame。然后如果我们现在假设要做一个操作,就是我想把这三个data frame呢按照把它的行一行一行的叠起来。

就是把这三个data frame拼成一整个data frame。那我们可以怎么做呢?我们就可以用到我们今天的conca这个 function。Yeah。它的写法呢是PD点concat。

然后concat要传一个参数。这个第一个参数呢,它是嗯它的第一个参数是a list of data frames。比如我DF oneDF twoDF three。

这样呢它就会给你返回一个把这三个data frame拼到拼成一个大的dta frame,它默认呢是呃做行和行之间的拼接。然后呢,这个列呢就会互相对齐啊,这个apartments跟car会相应的对齐。

然后行呢它会一个接着一个的往下排。这个是can concateation。然后我们在做这个concatetation的时候呢,我们还可以指定这个concates concates的 keys。

这样呢它就会呃。做一个相应的。加一层相应的key。比如说我写keys equal toX。Why。Z。这样我们就会看到它就会变成有两行这个。有两行有有两层的这样一个index。

第一层的index呢是我们指定的key。第二层的index呢是它原来的key。这个呢是按照。呃,行做一个concatesation。然后我们比如我们这里看到,我比如且它等于result to。

我可以把它第一个呢写成result。这样我有re canre to。然后我如果看result to。点lock。Y呢就可以把Y的这个index拿出来,那就拿到了我们刚才的第二个data frame。

就是DFwo。然后现在呢假设我们要新建一个。data frame这个data frame呢它是。我们把它命名叫做DF4,它它呢是写了每一个城市的这个每个月的薪水大致是什么样一个水平。

那我们现在看到呃DF four呢,它就是每个城市的薪水啊,苏州北京、上海、广州、天津。然后比如说我们想把这个这个dta frame呢。如果我想拿它去跟result做一个评接。我们看到这个result。

它是嗯这样一张一张表格,我希望拿城市去跟它对齐。然后嗯作为一个列去去把这个cearies给它拼上去。这个时候我们应该怎么样做呢。那我们可以啊我我们也可以用同样的concateness function。

刚才的PD点concaconca呢还是要take两t一个 parametermeter这个 parametermeter是一个 list of data frames。

我们的data frame呢是result跟DF。但是如果我直接这么拼呢,你会发现它会按照行来拼接。啊,你看这个比如说上海跟上面的上海其实是重复的,但是它呢并不会发现说我这是一个城市。

它还是会老老实实的往下拼接。那我们呢这里是希望横向的拼接,横向的拼接,我就可以多指定一个primeter叫ex等于一。啊,这样呢它就会横向的做拼接。我们如果不指定呢X等于0。

它就会默认的是一种按照ex等于0。也就是按行这样往下拼接。从第一个第一个坐标题拼,那如果写X等于一呢,它就会这样横向的去拼啊,按列拼接。这样我们看到能够匹配上的,凡是能够匹配上的城市。比如说上海啊。

北京啊,它都匹配上了。像重庆这样的,我没有给它指定salary,我只指定partments跟 cars,我们看这里并没有重庆的sary,然后这个这个位置呢,它就会变成NAM。

所以这个就是呃怎么样用concatenate做行的拼接跟列的拼接。那比如说我们现在出来的这个结果呢,有很多的NAN如果我不想看到这么多的NAN,我觉得这个。较较爱一点。

比如说我写result for等于这个。如果我想如果我不想看到这么多的呃,把这个叫做result three。然后我这边呢。我们可以再写一个result for这个result for呢。

我不想让它出现这么多的NAM,那我就可以定义join的方式是inner innerner join呢嗯大家如果学过sql的就知道有这个两张表格之间的拼接inner join呢就是表示两个完全match上的才会留下。

如果有一方不match的就会被扔掉。而这个就是innerjo的意思。也就是说有一方如果有一方的key存在,另一方 key不存在,那它就干脆把两边都给它都给它扔了。那我们这里看print。

result for我们就会看到这样拼出来的结果呢,它是一定是两边互相match上的,就是北上广这三个城市,剩下那些有一部分没有拼接上的呢,就会把你呃给它扔掉。

然后比如说我现在想只保留左边部分的index,我们现在再写一个result,我只想保留左边的部分。那我们可不可以写left呢?我们发现是不行的,就是left是左边在那个sql里面有左边join。

右边join是吧?包括我们pandas里面呢,其实也后面也会讲到join的这个 function。那我们看到left是不行的。就是如果你想只保留一边的,按照一边的T来做join的。

你可以写join axis,然后这个axs呢是等于DF点。啊。我们这里可以写。我们可以写result点 indexex。如果我写result点index呢,它就会按照。

按照result的 indexdex做一个拼接。那如果我想按照右边部分。那我们先看一下我这个result。啊,我这边要打印result five啊,我刚才看怎么出来的,还是inner drawing呢。

对,因为我这边按照result的index做拼接之后呢,它会默认按照result的那个index帮你打印出来。然后就是左边的都要保留,右边那些呢,即使你没有match上也要放1个NAN上来。

但是右边那些多余出来的城市啊,比如说这个上面我们看到result three。sorry result three呢,我们看到有苏州天津这两个城市,那在按左边按左边为这个主要的index呢。

它就会帮你删掉。那同样的,如果你想要按照这个DF做1个index呢。我们可以把它写成6,然后你可以写DI后点应该。这样呢就按照右边的这个index为主要的index。

左边那些可以出现NAN右边必须要填满。这个是congratation。然后我们还有一个呃相当于是比较简单的写法叫做append。如果我有两个我有两个。

我有两个 datata frameDF oneDF two呢,我可以直接写DF oneD append DF two这样一个简单的写法就完成的也是一个concateation的操作。

那如果我这边写DF one D appendDF four呢,那它其实默认也是往下排。这个DF呢就是append啊,这个append这个方式呢就像这个名字一样,就是在末尾在末尾再给你添加几行。

这个就叫做append。然后如果你知道这个嗯。这几个data frame呢,它都是安行可以对齐下去的呢。我可以写DF点appendDF one啊。

DF twoDF3这样我就可以把两个一起append在下面。然后呢,如果我现在有一个seious,这个seious想要跟这个data frame做 concateation呢,其实也是可以的。

比如我现在写一个seious S one equal toTD点seious啊,这个seious呢我们就比如写嗯也是两个城市index是我们给它定义成上海。和。北京。

然后我们写我们这个index的信息呢,name等于me就表示一顿饭要多少钱?比如我们写上海是60块钱。北京是50块钱,然后我们看一下SE,它是这样一个seious。然后我们想要把这个seious给它。

给它concatenate到这个DF one上面去呢,我们就可以写PD点concatet。然后我们也给他写上DF one跟S1。我们看一下这样会怎么样,这样呢。

它默认是按照按照行去conatulate的。所以它它其实把这个上海北京呢也当做是也把它转成了一个呃也把它转成了一个上海北京作为index。它的con呢是个没有名字的con,然后做了这样一个评级。啊。

但这个其实并不是我们想要的情况。我们想要的呢是给它按行来做评解,啊按照按按列来做评借。所以我们给它写上X等于一呢,它就会啊给你按列做评解。就像我们刚才这样的,它是按行做评借。然后如果我们想要。

A panda。一行到到一个data frame里面去了。那其实我们刚才已经讲过了,我们可以写。呃,S two点sious,然后我写1800012000。000,比如我就写这个是index等于。

APTS和cas。然后呢,它的name是比如说我们就认为是厦门的这个房价跟车车架。然后我们看一下S two,它是这样一个seious。这个时候呢,你的APTS跟cars呢。

它就可以作作为index是跟这个apartments跟car做一个拼接。这样做一个拼接之后呢,比如我写E啊。one点append。That's 2。

就可以直接append append这个se到我们这样一个da frame里面去了。那同学们可以自己多去尝试一下这个concussationend,看一下它究竟是怎么操作。

这个就是对各种表格的拼接做了一些有有各种不同的变化啊,很多你做同样的一件事情,你可以有有时候熟练了之后就会发现用各种不同的方法都可以做到。就这个也是呃很正常的。后面呢我们要给大家讲什么叫做merge。

什么叫做join。 mergege呢嗯其实是我们我们前面的concateation呢,我们已经发现了,比如我要对列和列做这个拼接,它默认拼接的方式呢,是按照index做这个对齐。

然后我们merge呢其实就是一种更加广义的这种concateation。那这个concatesnation呢,未必是按照我们的index来做这个做这个merge,还是可以按照很多别的东西来做merge。

比如说我现在我们我们还是利重复利用一下我们前面写过的这个result啊,比如说我现在重新定一下result,我写result点reset。index大家还记得res indexdex呢。

你就会把这个index这一这一这一个列呃直接p出来,就变成一个普通的con,然后它会填上一些012345这样默认的index。然后我这边呢想把它的con做一个重命名,我要把这个columns等于。

index重命名成一个cities。这个时候呢我们看到它就变成了一个cs apartment cars,然后我把它还是写result equal to这个result。那我们要做的第二件事情呢。

我想呃我们再看一下DF4是个什么样的方东西。啊,我们在对DF4也做同样的操作。我们写DF点reset index。Their rename。rename之后,我把columns。

然后它带一个参带一个参数,这是一个一个key啊,一个 key value pair key呢是我原来的index的名字叫做in原来的co名字叫做index,然后还有我新co名字叫做cities。

我们这样就可以拿到一个拿到一个新的data frame。然后我把它叫做DF。那我现在看到,如果我现在用我们刚才的concateate方法,我们看会发生什么。如果我用PD变concate。

Concat result。跌覆。点啊,我们写X等于1。这样的concussation呢就没有意义了,对吧?因为你看这个它默认是按照这个自己的index做这个concussation。那上海对应的苏州。

北京对应北京、杭州,对应上海就就乱掉了。所以这个时候呢我们不用concussation这个 function。我们pandas里面有一个新的方式叫做merge。这个merge呢它嗯也很类似。

但是我们不需要写这个呃。方框了啊,不用写这个类似的形式,你直接把两个primeter result one跟DF four给它写进去。然后我们要带另一个参数呢叫做onon呢是表示你要用哪个。

用哪一个呃con去给它做拼接。比如这个这个on呢,我们就是cities,用cities这个con做拼接,这样你就可以拿到一个新的呃。新的这样一个表格。这个表格呢它是被 merge出来的。

而不是被conca出来的。所以我们也会发现,其实merge你那个表格大了之后会比conca的效率低很多。因为它默认按照index排序呢,其实效率是比较高的。但是你作按照一个自己定义的con去做做拼接呢。

可能会效率低一些。然后同样的这个merge。这个merge呢,它默认其实是一个inerjo,我们已经发现了,就是有一些拼接不上的都没有被写出来。如果我们写how等于aler呢。

它就会做一个aler join,那就会把那些嗯左右两边匹配不上的也给你留下来。这个是inner join跟outer join。然后这边呢其实pandas的语法有时候是取得比较随意的。

如果你写right呢,那就是个right join。如果你写left呢,就是一个left join,就这个东西跟我们刚才那个conca的时候,用左右两个。index做拼接的写法就有些不太一样。

那同学们要稍微啊注意一下这一点,就这里是用left right来标记这个drain的方式。然后然后呢,我们最后还要给大家讲一个嗯怎么样join by index。怎么样怎么样做一个dwing。

就我们刚才呢是用merge这个function,但是里面其实这个呃。pens呢还有一个呃叫做join的 function。比如说我现在写。我们再给他。看一下我我的DF一呢是我刚才这个DF1。

然后我们再把我的DF4给它变回去。这个DF four呢有一个cities,我再把它写回去就DF four点。Set。Inindex。叫做cities。这样我就又拿回了这个DF four。

再把DF four等于DF four点index set indexdex之后呢,我们现在再写DF one点joinDF four。它就会默认按照index做一个dwing啊。

这个就是其实跟用前面concat merge,你都可以做出同样的效果。但是我们也可以有一个简单的function叫做jowing呢,可以直接帮你做这样一个按照index做一个拼接。

然后这个join呢它也可以带一些参数。比如说我写how等于alern。他就会做一个outer join,它写你写left呢,他会做left join,你写right呢,它会做这个right join。

也就是保留左边的那一些index,以保留左边的index为主呢,还是以保留右边的index为主。那当然呢我们其实也可以用merge来做同样的事情。比如我写PD点mergeDF one DF four啊。

你这个时候 mergege呢,但是我们我们现在这个 mergege啊,我发现DF one跟DF four four呢,它已经没有一个共同的co了。你要用index来 join。

所以我们这里可以specify leftft indexex等于 truee,表示你用左边的index做jo,然后再用right indexdex等于 true。然后我们再写,比如说how等于aler。

how等于aler啊,你也可以做出完全一样的效果,就是用merge跟用join或者用concat都可以做到很多事情都是可以都是可以实现的啊,我们也可以用这个concateation再来复习一下。

我们用conca呢,那我们可以写DF one跟DF four。Yeah。这边去掉啊,它也是一个concatetation,但是我们。呃。是。要写X等于一,对吧?这样也是一个join的过程。然后呢。

但是我们如果要说明index呢,我们要写。我们要写这个inex。Excess等于。啊,是join access对吧?She。是。concatenation。

我们可以用 drawing axis等于 dF one点。index这样呢就会只留下左边。如果我写DF four呢,那就会以留下右边的为主。那么这个呢就是我们今天想讲的啊一些新的关于表格之间拼接的做法。

然后同学们呢可以自己上我们的pandas的官网。我们如果查这个pandas drawing。Conca。我们就会发现有有很多的教程可以学习到很多呃相关的知识。然后同学们可以去看这些。

比 pandas can cat。上上上网查这些嗯具体pandas它有哪些parameter可以使用。我们前面呢其实讲的这个drain accessces。

这个acces这些啊简单的还有key这一些比较常用的parameter。但其实呢它还有很多的parameter可以使用。然后最后讲完了这一些基本的知识之后呢。

我们这节课还想再跟大家一起做一个做做一个呃小型的project。比如说我我们还记得上一次呢,我们给带着大家一起做了一些股票的分析啊。比如说我们上一节课讲了呃。

我们上一节课做了给大家画了一下英伟达的那个股票的走势。那我们今天呢再给大家看三只股票。我这里data这个folder下面呢,有还有几只股票,有这个AAAPLapplegoogle。

还有microsoft这这三家公司。那我们把它一个一个读进来。比如我们先把。先把我们的啊google拿进来。

google equal toPD点read CSSBread datago点CSB这些数据呢我都是从都是从我们的啊。雅虎f上面下载下来。同学们可以自己去自行做下载。

那我们这里可以写啊index column equal to0,应该还记得上一节课的做法,然后我们写pass。Dates equal to。Date。然后我们看一下google点head。

我们就看到这就变成了嗯google这样一张表格。我们可以简单看一下google点sh。但他有3000多行,有6列。那我们可以还记得上一节课是怎么样pl呢?

我们是写mat plot life in line。写完这一行之后呢,我们再写go点。groupookadjust close点plot,这样就可以pl我们的google这样的一个股票的走势。好。

那我们嗯。下面呢再写。再读进来另一只股票,我们要拿AAPL等于。PD点read CSSV。dataAAPL点CSV。同样的index column等于。8。啊等于零。然后我们的pass。

dates要给它写成是date这个co。然后我们再看一下AAPL点。呃,APL点S。我们看一下啊,有9000多行,因为苹果上市的比较早,那我们现在要。

再把这个AEPL的 adjusted column给他adjustclose给它画出来,adjusted closese BM plot。我们发现现在出现了一些问题啊。

他就说这个data frame no numerical data to plot,为什么会no numerical data to plot呢?那我们可以看一下嗯,这个到底是因为什么原因。

比如说我们嗯。Yeah。我们试一下。Yes。我们看一下这个东西它的。B type到底是。发现它Dtype呢,它是一个object。我们回过头去看一看这个。gooogle它的D type到底是什么?

做一个对比啊。电灯菜。我们发现google呢它是一个fat64,就它是一个浮点浮点型的数字。但是apple呢它居然是一个object,这个是什么问题呢?嗯,我们也不知道是什么问题。

那所以我们可以想想办法,我们比如看看做做PD点to。Nummeric。能不能把它全部转成numeric的数值啊,他就告诉你。

unable to pass string now at position165,这个是什么问题呢?嗯,就是说我现在这个str啊它。它是一个呃不能。不能pass的。它是一个n。

它不能够被pass成任何一个数字。那我们看一看这个第165位这个数字到底是什么。我们可以把165这一个位置给它拿出来一看,对吧?你发现它真的是个n,那我们再稍微多拿一点,再拿160到170。啊。

你就会发现这个位置呢它出现了ow这样一个值。这个n呢,而且它真的是一个strrange,就它并不是一个。并不是一个嗯。并不是一个呃其他的NAM这样的数字,就是你都不能我们都我们其实给他点biNA。

给它fil成零之后,我们再做这个pl呢。也是不行的,就是那个那个东西它真的是一个它真的是一个string,而不是1个MAM的值。那这个时候我们怎么办呢?啊,其实也比较简单。

既然我们已经发现了这个事情的原因呢,我们就可以直接把。做这样一个事情。如果我发现。有地方它是ow的,我直接把它填成MP点NAN。Yeah。这样之后我再看AAPL。ADJ。Close。我把它做一个。

我把它做一个B feel,我把它做个F feel吧,就是forward feel。for feel之后呢。这个时候应该总总是可以了,那我就可以做1个AAPL这个adjusted。Close。

Yeah apply。Lambda X。啊,我们可能有没有给应该给大家讲过lammbda这个方式,这个apply呢它就是可以对AAPL的这样一个这样一个data frame做一个逐行逐行的操作。

你每拿到一行的那个数据呢,我们都给它把它转成一个fat的值。Yeah。Yes。这样它就变成了一个float。这个时候我们再试试看能不能pl它点pl。好,我们发现这样就可以po。

就是我把那一个值呢直接用前一天的值来去代掉。这样我AAPL也拿到了。然后同样的方法,我们再把microsoft这给它读出来。microsoft equal toPD点啊。

microsoft equal toPD点read。PD点read CSV。然后我把MSFT点CSV。Index。Colon等于0。Pass。Dates。等于。对这样呢我就拿到了MSFT点。Plot。

我们看一下现在是什么问题,MSFT点。把ADJclose拿出来。看看他报的什么错,他说啊哦MSFT不存在,因为我少打了一个data。这样呢我们看到microsoft也顺利pl出来。

这样我们有了三个三个股票的数据。那我们现在想就可以运用一下今天的方法,我们想把三个plot的值给它放到一起。那我们可以怎么做呢?我们可以写APL。ADJclose,我想要把。Google。

然后还有我们的MSFT这三个公司的股票呢,我想把它放到一起,给它做一个plot。那我怎么样做 plot呢?我们还记得刚才的concatenate这个 function。如果我写PD点canc。

然后我写X等于一,我是不是就可以把这三只股票都放在一起了?但这里呢有一个小问题啊,就是你上面的每一个名字都叫adjusted close,就这个并不是我想要的那我可以把它的key给改掉。

改成我们想要的AAPL。Ggle Googlegle。还有我们的MSFT。这样你看他的名字就被改掉了。这样这个名字被改掉之后呢,我们这个太长了,我就先把它我要先把它给复制成一个叫做stocks。

然后我再做这个doocks点plot。然后我们就看到这样我拿到了一个plot。那这个pl呢又有一个问题啊,就是它嗯我其实不想看那么多前面的这一些数据,我我就只关心google上市之后这个情况。

因为google上市比较晚嘛,那我们可以想个办法把那些嗯前面看不到的地方给它删掉,我可以怎么做呢?我写val stocks等于我们想把google上市之后的那个第一天给它拿出来。

那我们可以写我们可以用stocks。Stocks。Google。点 first。Baalid index。这样呢就是它的fi valid index,你就会看到这些1980年它都是。我应该打个括号。嗯。

你就看到它的firs valid index呢是2004年8月19号的这一天。那我们可以把这一天之后的数据给它拿出来,之前的数据我就不要了。那我们可以stocks点 indexdex大于这个东西。

你就拿到了这样一个arate。然后呢,我们再把这一堆stocks给它拿出来。stocks。那我们就拿到了04年以后的数据,我把它重命名成violt stocks。等于我们的value的 stocks。

然后我把这个value的 stocks再给它 plot出来。哦,我们也可以用我们上面以前学过的那个方法叫做叫做啊grade等于te,这样可以在它背景后面画上这样一些虚虚实线。

那这样我们就可以比较一下这三只股票的,把这三只股票放在一起,就做一个行情的比较。那这个呢就是我们这一节课想要给大家讲的内容。我们稍微总结一下这节课讲过的内容。

我们主要是介绍了一下对几个data frame或者是data frame跟se之间做一些表格拼接的操作,讲了三个 function,一个叫做merge,一个叫做join。

一个叫做concatesation。然后其实还有一个 function是我们刚刚讲的append这个 function,它其实是concateate的呃另外一个一些简单的写法,包括join呢。

其实也是啊他们之间之间的一个简单的写法。所以嗯同学们呢可以自己之后再复习一下对几个表格之间做一些操作。然后最后我们再讲了一个小的application,就是把股票的数据放在一起。画了一张图。

这之间呢涉及到中间涉及到一些表格拼接的操作。

好,那我们今天的课就讲到这里。😊。

人工智能—Python AI公开课(七月在线出品) - P6:Seaborn可视化数据分析 - 七月在线-julyedu - BV17W411K7G8

好,所以更高级的东西马上就来了。所以我们上一节课呢呃如果想对两个变量的分布去做一个绘制的话,会有一点小小的麻烦,对吧?我相信如果大家啊有做完练习的同学的话,可能可以做得出来。这个这道现在这个问题。

但是它会有一点点的麻烦。OK好,所以这个地方有一个非常棒的一个功能。在C包里头,它叫做双变量的分布。更棒的一个事情是,如果你用C棒里头的join plot去画这个双变量分布的话。

你可以直接用data frame,可以直接用数据帧把两个呃con name给他两个你要去描绘这个联合的两个变量分布的这个列名给它。所以这个地方啊,大家这一段大家可以不用看,我就是指定了一些均值和方差。

然后去产随随机的产出一个这个呃。产出来一个分布啊,这个地方呃你可以去产出一些,比如说高斯分布或者是呃伽ma分布或其他的一些分布啊,然后我用这些分布的这个里面的数啊去。

这个data产出了这个data去建立一个data frame一个数据帧啊,然后给了两个列,两个 column分别叫X和Y呃,我对它去做一个我可以去对它做一个双变量的分布的一个绘制。

而且这个绘制里头有非常多的信息。首先我们刚才看到叫做ditribution对吧?它是一个平直方图或者叫呃平度直方图啊,分布的一个这个这样一个直方图。那如果我去表示两个变量,我怎么去表示呢?

它这个地方非常棒。它这个jo呢可以去把你的两个分布,分别画就是做横向和纵向的一个绘值。所以大家可以看到这个呢实际上就是你X一个分布啊,当是你可以自己去指定啊,你可以把这个地方调换一下顺序。

把Y放在前面X放在后面,那它就是一个呃旋转旋转了一定的角度,对吧?90度之后的一个分布的一状况O。所以这个地方我们的我们用X等于XY等于Ydata等于DF注意啊。

它这个地方传进来的东西是一个一个data frame,一个数据帧。然后前面两个东西X和Y是它的两个colon name两个列名。然后你就做一个jo,你就看到一个非常漂亮的图,就是下面这样一个图。

我们上节课还给大家讲了这个散点图。大家还记得散点图,一般我们用来做什么吗?就是完成什么任务的时候,我们会用散点图。Yeah。我们去看两个变量的分布是不是相关,对吧?对?相关性,对不对?

O所以这个地方它也做它也可以去完成这样的一个事情。它可以给你绘制出来一个散点图啊,就是X和Y的一个分布的散点图,以及X和Y两个的本身的这个直方图可以画在两侧。然后下面有一些更漂亮的图,你可以去做什么呢?

你看这个散点图啊,一般情况下,散点图,散点图非常好,就是它能把每个样本点都戳在上面。但他会有一个问题。你现在的这个样本点数量并没有很多。大家来看一下,并没有特别多。我产我产出的200个点,对吧?

O那如果我现在有20万个点呢,就我如果有20万个点,我如果有200万个点呢?你去做一个会或者是这个地方你直接用这个地方的一个jo plot去画这样个散点图的话会很费劲。我可以告诉你最后就是一团在一起。

然后这个图绘制的过程中呢,因为它有一个一个点往上戳,所以它会这个过程会很耗时,那我们可以用一个更更高级的方法,它这个地方提供了一个更高级的方法。因为你无非就是想看到这两个分布之间的一个相关性嘛。

或者说它比较集中在哪一块,它们会比较密集,对吧?就是X等于多多少的时候,这个Y等于多少的时候,这一块是比较密集的那下面有一个图,大家记住叫做六角相图。都见过呃,都都了解这个蜜蜂。它的这个蜂巢是。

六角形的对吧?很规则的一个形状。所以这个地方会有一个六角相图。那为什么我需要这样的一个图呢?我刚才给大家说了一个场景,我说如果你有200万个点,200万个点,这个事情很很尴尬的,你就让它去画一个散点图。

但是这个六角相图就通过一定的手段去帮你绕过了刚才那个问题,它不直接把每个点戳在上面,它去统计每一个六角箱内出现的点的个数,我用颜色的深浅去表示这个点的个数,我说清楚了吗?

所以六角相图这个地方做这个join plot看注意啊,这个地方有个co就是啊类别是等于HEXO你去指定一下,所以出来的这个就是一个六角相图。这个六角相图呢。这个六角相图。

大家也看到了横轴和纵轴没有太大的这个区别啊,就是是两个distribution,两个分布是吧?两个啊直方图。但是里面的话,我因为刚才我的散点图会怎么样戳不下,就是太多了,这个点太多了。

所以我现在用颜色的深浅去表示这一块区域它出现的点的频次。所以颜色越深,表示说点都集中在这一块。所以通过这样一个图,其实你也是可以看得出来它的一个相关性的对吗?OK其实你在结合的这两个分布来看。

是不是X最有可能出现在哪个位置,是不是这个纵轴沿着这这条线的这个位置,因为它这个时候概率最呃这它的分布最集中嘛,在这块对吧?频次最多嘛,所以OX最集中在这个这个位置,那Y最集中在这个个位置。

所以你看到中心这些点是黑色,对吧?因为我产出的时候是我直接用了一个正呃。就是多维的一个正态分布。OK多维的一个正态正态分布去产出的。所以。大家看到情况就是说。你正态分布嘛,正态分布就集中在中间嘛。

那如果你用个伽ma分布的话,它肯定就是啊偏到一边去了。O所以所以这个地方最黑对不对?最黑就说明它的集中度越高。然后你可以通过这个颜色深浅嘛。你看哪一片哪一片是最集中的,你可以看得到它们有没有相关性。

比如说现在的相关性显然是很强的对吧?对不对?大家可以看到都集中在这个近似的这样一条直线上,O所以记住啊,当你的点很多的时候,你要去呃想要去绘制像散点图一样的效果去了解它的一个两个两个相关性的时候。

两个维度的变量相关性的时候,记住有这样一个六角相图,可以用C棒啊,非常棒。这个功能,然后你还可以去做一个和密度的估计,就是我不仅可以做到。

我可以做一个更平滑的处理。刚才这个处理呢还是一个大家如果仔细想一下,它是一个离散化的处理。对不对?因为我去估测了频度嘛,所以实际上是一个统计,统计的东西是一个离散的结果。

所以你看到这个地方是一些ok每个六角箱里头会有一个具体的啊频次,或者什叫这个number frequency frequency。对吧O所以。😊。

如果你需要去做一个嗯更接近于这个统计的数学家们喜欢的这样的一个东西,他们经常会所谓的这个分布,对吧?所以这个地方你可以画出来一个合密度的估计的一个这样的图,有一点点像大家都知道等高线,对吗?

OK所以它这个地方呢就是呃密度越高的地方,它的颜色会更深啊。当然这个地方有很多参数可以调啊,就默认的参数是这样的。你看这个地方刚才我们的kind kind等于HEX的时候啊,注意它调后面这个kind。

它是一个六角相图。如果你什么都不写的时候,它是一个散点图,对吧?那有另外的kind,比如说这个地方是KDE啊,KDE大家现在应该都。

通过刚才讲的几个这个例子,应该现在已经熟悉这样一个单词了,这样一个缩写了KDE啊,叫 kernelnal啊 density estimationationO所以当你指定说我需要去画一个合密度估计的时候。

它会用非常平滑的方式去处理。刚才大家看到的是什么?两侧上面和就是上方和右侧是什么?这两个直方图,对吧?OK现在它就变成了一个。可密度估计的一个曲线。

然后它会联做对这两个曲线去做一个联合的一个分布的一个绘制。所以你会拿到这样的一个一个啊dsity estimation啊,就是一个可密度的一个估计的一个图。对,然后这幅图的话,我相信大家都能看得懂啊。

你想象一下等高线,想象一下等高线。所以它表示说大概是在这条线啊边缘的,或者说在这个区域内的这个某一个沿着这条线的这些点,它的这个最后的这个概率是啊。差不多的对吧?出现的。ok。然后往下的话。

你可以去做一些呃高级一点的,就是你可以把这些样例点全都画在上面。刚才我们给大家做这个ditribution plot,我说我就做一个呃分布的绘制啊,或者直方图的绘制的时候,我我啊大家还记得说我可以去。

有一个参数叫什么RUG,对不对?我说我可以把实力画出来辅助辅助我们去判断多少个bes。ok。那这个地方C棒呢有一个你可以直接去对吧?RUG还记得那个参数吧,那你直接有个rck plot。

他做的事情就是我可以去把实力,我可以把实力布在左边和下边ok。所以所以这个时候呢,大家可以其实你可以用各种各样的方式去展示你的数据,你可以用平度图吧,对吧?

你可以看到分布O你用一个KDE一个呃 density estimation也可以看得到它的分布,你也可以用这个地方这个地方叫做正任何的方式我们最终的目的是了解我们数据的分布嘛。

所以对你一个画出来的东西也是你看呃你可以去取出来其中的两个se对吧?这个地方是直接取出来的seX和吧?

frame里头取出来对应的X和Y然后你可以去画用X和Y去画一个K大家记得就是 density estimation的个然后底下有两个画出来对应的这所有的实例它会给你标在左侧和下然后下面会有一些更梦幻的结果就是因为你刚才用到的东西是说颜色的深浅嘛。

😊。

可以把背景background设成黑色,然后用呃这个亮度去体现这样一个东西啊。所以对这个地方dark等于one。你看到dark等于one的意思,这个东西是在调它的这个呃底调色板。

或者说它的一个一个它有一个background的一个背景的一个setting,你是可以去调的。然后这个我不我对我不给大家细讲这个里头的这个函数啊,大家去查一下。因为调色版这个东西呢就是一个。

一个类似一个工具箱。这个工具箱呢我要今天给大家讲完了API你们也忘。所以我会集中在对数据的认识,对数据的绘制上。但这个本本身C的一些设定啊,就是颜色的设定啊或者背背景色底板的一些设定啊。

这个东西大家自己去查一下好吧,这个地方函数我已经已经给大家写出来了,就是你可以去用它去做一下调整,所以你看这个地方等于表示说我用这个地方的呃黑色作为一个ground对吧啊等于啊ro然后KDEpl就是我去画一个 estimation的一个pl一个绘图。

然后同样把X和 y给它然后你可以看到这样的结果啊,这我就不多说了,然后你同样可以去配配旁边的东西对吧?你看你可以配上这个你可以去把in配在旁边这都是可以的。

然后啊底下还会有一些其他的,就是其实是一样的,把它配上去。OK你就可以去调一下不同的。呃,刚才提到了有一些参数嘛,有一些参数,所以你去做这个jo这个join plot的时候呢。

你可以去做一些其他的一些设定,拿到结果是不一样的。比如说这个地方你可以把对应的这个X和和Y的这样一些大家还记得这个散点图对吧?

以你不仅可以画出来一个KDE一个 density estimation的一个图,你还可以把这些散这些inense所谓的这些样本点。你可以不在左边和下边,你也同样可以把它戳在这个图上。

所以现在这些这些insense,你是可以直接呃对你你是可以直接mark在上面,就是把它做一个散点散在这幅图上,所以就是可以更清晰的看得到数据的分布,对吧?因为你会发现这个中间颜色比较深的这一块。

它戳的这些点或者说这些这些点确实是个密集的,看到吧?都集中在中间这块,那到了边缘确实是密度会小小一些,所以它有各种有各种各样的手段让你更。

清楚的去看到这个数据到底分布是什么样的。呃,可以再往下看啊,注意啊,我现在给大家讲的工具就是工具,能不能用好工具。这个要大家去练习。比如说现在有200万个样本点,你当然不能去把这行加上,对吧?

你说我再去做一个projo去做一个scattertter把它丢在这个上面,那这个肯定速度就慢了,okK所以就是他有他给了你一个可选项,对吧?有这个功能,比如说都有三点图这个功能,那你用不用。

那是你要自己结合自己的场景去做OK。

然后下面有一个下面我们要讲到一个经常会用到的函数,我自己去呃之前刷数据科学的比赛,然后我要了解我的数据,我会用padas去做个各种各样的统计。然后我会用呃maplib和其实map我也会用啊。

或或者是用到这个地方C泵C bone其实呃会更好用一些C泵比较它功能集成的比较全。所以我这个地方有另外一个函数,一定要掌握的函数叫做peair plot。parpl呢它的功能大家在上节课都见过了。

用mpro都见过了,它就是大家还记得你你有个两个for循环吗?four four两层for循环。去画出来。任何两个维度之间的一个分布或者关联性。对,所以这个功能C帮帮你完成了。你现在不需要再去画。

你现在不需要再去做一个。😡,两层的for循环的一个叠加,然后再用AX对吧?用用用AX点这个去去做这个plot。把它画出来。所以这个地方有一个函数叫做peair plus。

peair plus是一个用了非常非常非常多的一个函数。所以如果你想了解你任何任意的两个维度之间的一个关相关性,但如果有同学对数字本身是敏感的话,那你可以去求一个这个呃互相关。

就是求求求一个斜方差一个矩阵。O然后你可以看得出来他们的一个。啊,或者说一个一个关联的一个举阵,你可以看得到它对应的一个相关性。那如果你想直观的去看这个东西的话。

就要用到这个函数叫做peair plot。所以注意pair plot丢进来的东西啊,就是它可以丢进来一个有。多个。column的这样的一个data frame。ok就是你erase。

这是一个data set,这个data set里头有多个con,有很多列。对吧然后他会把这些数值的列啊,他会把这些数值的列拿过来两两去做一个组合去绘制出来一个。对。

去绘制出来它们的一个关联性和数据本身的分布。所以我们来看一下,大家告诉我说这个地方的这一条对角线上是不是自己和自己看到了吗?对角线上是第一个维度和第一个维度去做。一个胶印对吧?所以这个时候做胶引。

它画的其实就是这个维度的一个分布。大家能明白吧?就是他用的是一个直方图的方式,就绘制出来说这个第一个con,这个数据帧的第一个com它的一个分布。OK那同样的同样对角线的第二个位置呢,大家看到这个地方。

这个是一个第二个维度,这个这个花瓣的这个宽度,它的这个数据的一个分布状况啊,同样是一个直方图啊,这个地方就是第三个维度,第四个维度,对吧?好,我们来看一下任可的两个交叉的维度。那这个交叉的维。

第一个维度和第二个维度的交叉在这儿。在这儿所以大家看到的情况是。一个闪点图,对不对?所以,我我们是不是给大家说散点图其实可以看得到两个维度之间的一个相关性。所以同样这个地方呢大家看到就是散点图。

那你可以看到有一些像这个它就是或者是它这两个维度之间就是比较相关的对吧?或者是它ok这是比较相关的那你看到像这个就是不太相关,对吧?因为它散生一片O糊状。

所以这个peair plotpear plot可以去给一个data frame去做一个两两配对的一个。散点图的绘制,同时对每个维度去做一个distribution的一个配。

一个一个plotO一个分布的一个plot。好,然后这个并不是就是peairre这个东西,它是一个限定词,表示说我要一对儿一对的去画。那除掉最基本的peair plot以外啊。

具啊这个peair plot里头可以配参数啊,具体参数我没有给大家列出来,有很多的参数,你们可以自己去看一下参数,你可以把它调成一个彩色的,很很炫酷。我之前自己呃画过,但是可能会费一点时间。

我我之前画过很高维度的就是很大的样本量下的两个维度的一个,比如说相关性呢去看一个可视化。然后它的一个呃diion是什么样的都去做我它是可以做的啊,可能但是可能也是要花一点时间的。

因为这个地方毕竟要画散点图嘛。所如果样本量很多的时候啊,如果你要用你要用这个peair的话,可能得等一下O他得把点戳ll上去啊,所以。就是p那peair是一个定一个这个我们说定语。

它表示我是一对一对画的那除掉pe的话,你可以去画一个pegrade是网格的意思,对吧?所以paair画的意思就是成对的去画出来它的一个我们叫做KDE吧?就是 estimation的这个图啊。

就有点像这个等高线的图所以他现在画出来东西就是一个更平滑的结果啊,刚才我们的我刚才我们这种方式是离散的结果,对吧?你可以注意到所有的事物你都可以从不同的角度去看。

那你可以你你为了让他看的它每一个样本更清晰你可以去做一些离散离离散画的一个绘制,所以你看到是这样一个结果。那如果你要去绘制一个更平滑的结果的话。

你就要用到这个地方的KDE就是我们所谓的然后去做一个DE个啊,就 estimation的一个所以这个出来的结果呢,你会发现说它的它的分布已经是我们会去用一个。啊。

kernelnal densityty estimation去给给你绘制出来了。然后同时呢我会用这个这结合任何的两个维度去给你画出来一个这个地方的一个我们刚才叫双双变量的一个呃和密度分布的一个图。

对吧?对,所以就是这样的一个结果。你可以看到集中在哪个部分。OK这是一个从刚才的离散到连续的这样的一个不同的这个绘制啊。O所以这个就是我们的第一页。第一页呢我们给大家讲了,就是分布。

我们我们更关注的东西是这个变量的分布,对变量的分布有单变量的分布,有双变量的分布,对吧?那双变量有这个离散的绘制方式,有连续的绘制方式。同时你可以在这个上面去配各种各样的。

instense就是原本的样本点可以直接戳在这个图上,你可以用对吧?刚才我们大家有看到有个图是可以集升这个嗯往下翻啊。OK啊,再下一呃再下一个ok是可以散在上面的对吧?那你可以把insense画在两边。

对不对?刚才大家看了就是所有的这些本身的这些啊sampble这些样本点这些实力也是可以画在两边的啊,所以有各种各样的方式去配。那但是大家虽然看C很炫酷啊,但不要忘了我们的我们我们需要做的事情。

我们为什么有需要可视化这样一个工具。😊,它的核心是为了让我们了解数据的分布。所以。任何一种方式都可以。大家习惯说我去看这个呃cron density estimation。

你就用KDErook如果你习惯去看离散的对离散的分布的话,它就会去。你习惯去画离散的分布的话,它就会你就可以用这个ditriion plot,对吧?那你想对两个两个变量同时去画的话。

就peair记住peair。那pear后面有这个peair plotpaar ok啊,有同学问到这个问题说peair plot的图是对称的高维度的分析,可不可以只画一半节省时间。你想多了。

同学他其实也是画出来一半,然后做了一个镜像,所以并没有像大家那么想的那么傻,他再把另外一侧也画一遍,它只是做了一个镜像而已。这个这个是肯定会考虑到的。所以呃没没有你想的这么这么呃复杂啊,这么原始哈。😊。

人工智能—Python AI公开课(七月在线出品) - P7:如何从Python起步学习AI - 七月在线-julyedu - BV17W411K7G8

在第一页里面,我们来看一下,大家没看到PPT是吧?

呃,层级是初级阶段。没关系没关系。好,那么呃第一个是我们的这个呃呃我们的这个第一个就是关于我们的人工智能的发展背景。那么这个背景呢我不要求说我们讲的有多深,因为要讲生会很费时间。

我只给大家做一个很简单的介绍,也就是说这个人工智能这概念并不是很新很潮的概念。它在上个世纪的50年代60年代就已经提出来了,并且呢已经发展过有之前有两两波发展的一个高峰。那么到了第三波发展高峰。

也就是说我们是从2006年深度学习的这个理论提出到了2013年这个深度学习在图像识别上大放异彩,真正进入到我们的这个工业界啊,包括进入到其他的一些具体的应用为首的这个第三波。

那么我们现在呢就站在这个第三波的这个浪潮上,那这图片稍微有点小啊,因为要处理这个内容。

大家可以大致的看一下啊,我们现在就站在这个蓝色这个风上啊,蓝色这个风扇。那么呃同学说,那么这个机器学习为什么之前会有两波?呃,现在我们到第三波,其实机器学习非常非常依赖硬件资源和这个我们的这个数据量啊。

之前发展并不是理论上有一些瑕疵,或者是理论上啊出现了很多的问题,很多时候呢,往往是因为我们的硬件计算资源跟不上和这个数据量达不到它的一个呃它的一个标准值。所以呢我们就没有办法干嘛呢?

呃像这个社会上或者说像工业上生产商去做一个比较大的推广,比较大的推广。但是呢在13年大家知道13年啊06年开始啊呃2006年开始13年啊,这个期间啊硬件的发展,尤其是什么?

像GPU大家可可能也听说过哈GPU也就是说我们的显卡是吧?显卡的这块的一个飞速的发展还。我们的大数据的平台这个纷纷的去不断的啊升级啊,我们的这个数据量呈现了一个海量。

也就是说这次的浪潮并不是啊这个简简单单的理论上的升级,也有在硬件设备上数据量上的一个同步的共振啊,同学们只要知道说okK我们现在在人民智能的第三波浪潮上就行。

并且呢同学们记住说OK我们这下面这个照片里的老爷爷啊,一个哎一个。

sorry啊sorry,那个字体调大一点,我我放大一些哈呃,这样可以哈呃人工智能的呃大家看看这个老爷爷啊,这是一个大神啊,真正的大神啊,黑客大神,就是他来提出了这个深度学习的这个理论啊。

深度学习的这个概念。好,那么我们继续往下去走第二培。说第二个就是人工智能发展的一个路径。

就是说大家可能说老师,你刚才讲了人工智能从上个世纪50年代就来了,现在又在发展。他这个路径我们怎么去把握呢?其实非常的简单。就是说我们既然说到人工智能,既然说到人工智能。

我们对他的一个定义其实就是什么呢?或者说对他的一个期待,就是说他能够替代人,这个替代呢并不是说呢大家恐惧的那种替代啊,把人给啊全部给代替了哈那种的啊,而是说他在能力上和人越来越接进。

并且呢有超越人的这种能力。这之前的计算机呢可能是在存储和计算方面,他非常的有优势。比如说我们我们通常都知道我们的数据库数据管理系统啊,或者是我们的这个计算能力,计算机是非常的强悍。

但是计算机解决不了一些我们人类非常easy的事情。比如说3岁的小孩现到爸爸妈妈都会认识啊,这是我爸爸,这是我妈妈,这是我的小朋友,对吧?但是计算机做起来非常的困难非常之困难。啊,但是在第三步的浪潮中。

也就是刚才提到深入学习的时候呢,就是说啊计算机开始在。这方面发力啊,开始在这方面来进行发力了啊,他对我们的生活的渗透,那是已经是很深了。我做一个很简单的例子,大家看一看这个呃PDF上也写了。

就是说啊我们的这个打开支付宝啊,积极学习,会做面部识别啊,这个应该还是现在不是很普及哈,那么我们比较普及的,就是大家都用过农村哈,网易云音乐都知道,哎,比如说我爱听什么歌曲。

那么呃呃这个网易就会慢慢的给我推荐推荐什么呀,推荐这个比较我越来越符合我口味的歌曲,对吧?哎,那么呃他会给我找出和我有同样爱好的朋友。这些东西都是应用到我们的机器学习啊,机器学习。

那么其他的包括了您在网上买一个东西,它会有一个推荐。哎,购买了这个呃这个朋友啊,这个这个用户也购买了那个给您推荐一下这些东西都会用到机己学习啊,可以说渗透到我们的一个生活里面啊,生活里面。那么。

那么刚才暂停一下好了啊,那么那么刚才我我来看一下,继续我们的PPT啊,呃应该同学的直播是没有问题哈。好,那么我们看一看我们经器学习到底是什么。刚才老师跟大家去聊了啊,什么啊这个机济学习好神奇啊,是吧?

其实呃我们怎么去了解它呢?首先我们怎么去了解认识什么是机器学习啊,对吧?我们讲了这么多到底是什么,其实我们完全可以从人类的经验上去理解机器学习啊,最简单的一个道理呢?就是说我们人类去学习一样的事情。

我们经常会有说了一句话啊,我们大家去分享一下叫什么呢?叫做哎瑞雪兆丰年。大家肯定听过这句话,对吧?瑞雪兆丰年哈,或者是一句话叫做朝夕朝霞啊,朝霞不出门,晚霞行千里。大家可能也听过这句话啊。

那么这就是我们人类在学习和自然进行交互的过程中,所总结出来的经验。其实学习就是一种经验的一种总结和积累。啊一种经验总结和积累。什么叫经验的总结和积累呢?今年比如说今年是2017年啊,冬天还没到哈啊。

冬天呃还没有到一个入呃山东啊啊,如果山东下一场大雪,那么请问2018年咱们这个庄稼的收成会怎么样呢?哎呃我们会觉得哎201717年下了一场大雪,专呃这个18年的收成会不错。如果2018年没有下雪。

那么这个庄稼的收入会稍微差一些。那么这就是什么呢?这就是一个对于我们经验的一个总结啊,经验的一个总结,像刚才提到了另外一个句子叫做朝霞朝霞行天下晚霞啊,朝霞不出门。

晚霞晚霞行天下讲的也是这样的一个例子啊,讲的也是这样的,这个其实就是我们在工作生活中哎总结出来的一套经验。那么这是人学习东西总结的出来比较经验。那么我们怎么让机器去学习呢。那机器也能去做这样的事情呢?

其实啊机器来讲。也能来做这样的事情啊,这是通过科学家老爷爷他们的不断的努力哈发明一些算法啊,让我们可以从计算机去学习呃计算机去学习一些东西。计算机从哪里学,第一个一定是数据中学啊,一定是从数据中学啊。

我们计算机虽然很快啊,很强,但是它很傻,就是他只能处理数据这,大家也都知道哈,那么首先我们有足量的数据,让他去学学什么啊,去学习一套规律啊,学习什么规律学习你设定目标的规律。

假设我现在就要去预测我今年下了雪,我明年的收成会怎么样,这样的一个事情,我们就可以把它量化成我们的一个学习模型,并且去做这件事情啊,并且去做这件事情。那么这它就叫做机器学习,就是机器学习。

那么呃这个PP这个PDF上呢,啊啊这个PDF上呢有一些简单的啊一些通俗的说法,大家可以。呃,下载的PDF自己看一下哈,看一下。那么我怎么样的去跳出这些东西,用大家都能理解的话去跟大家去说哈。那么好。

那么呃机器学习人变得有智慧。你看这个平这面写的人变得有智慧就要阅历其实就是很简单呢?就是说咱们老嗯经常说句老话叫吃亏是福,什么是吃亏是福啊。吃了亏,我们就能对这件事情讲了记性,这个记性其实就是经验。

对不对?那么这个经验在我们人类的里面是怎么样去交流呢?其实就是通过这个老话吃亏是福或者谚语来交流。在机器里其实就是权重值和数字啊,权众值和数字。他要调教的,其实就这个东西。啊,这是两个互相对应的东西啊。

那么同样是觉得听不懂没关系。我们下边会讲到啊,不要着急。好,那么现在呢我们再来讲一讲这个机器人工智能机器学习深度学习的一个关系啊。那么刚才我们讲了很多的概念,包括人工智能进行学习深度学习,最东都是什么?

他们都是什么鬼啊是吧?都什么概念呢?首先人工智能它是一个很宽泛的领域啊,人工智能咱们天天说AIAI其实就是因RT intelligence是吧?人工智能两个英文单词的缩写是吧?那么这个东西啊。

这个人工智能概念非常的宽泛,非常的宽泛哈,非常的宽泛。那么机器学习是什么呢?机器学习是我们实现人工智能的一种方式方法哎实现它一种方法,用计算机去实现人工智能一种方式方法。那么深入学习又是什么?

深入学习是人工智能下面的一个。子的一种方法叫做神经网络下面的一个子分支啊,神经网络下的一个分支,只不过是因为深入学习实在是太强大了啊,深入学习实在是太强大了。他能做的事情现在来讲。

包括了语言识别、自然语言处理、语音识别、图像处理,他都能够去做。所以呢把它单独拎出来了一下啊,放到了我们经济学习里。还放到我们经济学习里。然后呢这个图呢大家可以看一下。

能够帮助大家哎能够能能够帮助大家去干什么呀?去哎了解他们之间的一个层级关系啊,层级关系啊,我看同学说了就阿是吧吃亏是损失啊,深度学习强大吃亏啊,我认为是负啊,我认为是负哈,那么我们继续往下去说啊。

一会儿你讲到我们的吃挥到底是是什么啊,首先我们来看一看机器学习的分类啊。那么这个大致跟大家说一下,有三大分类,一种是叫啊非监督学习unsupervised learning啊。

第二种呢是supervised learning是什么呢?监督学习,第三种informent的就是我们的强化学习。那么我们只介绍前面的两大类。

那么最最常用的就是我们的supervised learning叫监督学习。这个监督学习是个什么呢?是个什么鬼啊,其实特别简单,那么刚才我给大家举的例子里就已经包含了监督学习的一个思路了和思想了。

例子呢?还记得我跟大家说的这个朝霞行天下嘛,对吧?朝呃朝霞行天下晚霞呃朝朝霞不出名,晚霞晚霞行天下。sorry,我我记混了哈,我们用另外一个例子啊,叫做叫做瑞雪招风年跟大家说吧。好。

那么现在呢呃为什么我说瑞雪招风眠是一个监督学习,首先我有2017年的数据啊,也就是说我现在的数据,那么我这个数据它这个数据要靠什么去验证呢?要靠2018年呃收成,我这么说大家能不明白啊。

我这个数据是要告你比如说今年的这个2017年是不是下雪了啊,意思我 no是吧?下了雪下了多深,下了几次,每次下多深,这些东西都是什么呀?都是我来去预测明年。呃,我来去干嘛呀?

我来去判别明年它的这个产量到底是高还是低的一个什么呢?一个一个什么叫我们叫做一个叫做feature特征啊,一个特征。好,那么这个地方呢就是我们的一个有监督学习的一个小一个小图哈。

那么我们把这个叫做training data。什么叫train datatrain呢就是我从1991980年到2017年所有的冬天的记录拿出来啊,拿出来包括了今年下了几次雪啊,下的雪有多深,有没有下雪。

然后呢次年它的这个收成是不是达到了我们的预期,比如说是丰产yes or no是吧?零合一,对不对?然后这些就叫做training data。那么这个label是什么呢?就是我刚才说的是否丰产。

是否是一个丰收的状态啊,一个丰收的状态。然后呢,我们用一个一个经济学习算法,比如说是我们的一个叫做逻辑回归的一种一种经济学习算法。然后呢我们去学习什么呢?学习我们的这些刚才讲过所有的自变量。

也就是今年下年下雪下了多少啊,下了几次。和这个啊因变量,也就是是否风产YX和Y之间的一个关系。那么我们这些同学中有数学比较好的,可能就会理解,其实这是就是一个方程式。那么这个方程式一旦做出来以后呢。

其实我们求的是什么呀?我们求的就是这些自变量前面的位,也就是我们的权重值。我们学习的就是这个经验,就是这个经验啊,老人一看啊,今年这个雪下的很深,那明天一定是这个啊这个丰收。

那么老人他的这个经验其实也是根据什么呀?下雪的深度,在这个前面加上一个大的权重,这就是经验啊,这就是经验,那么这个经验我们学习到以后干什么呢?预测啊,一定是用来预测。

这时候呢2017年下雪O我们把2017年下的雪的次数雪量都记录下来,我们就可以通过我们学习到的这个模型去做什么呀,去做。预测我看看2018年是否是一个分产的一个年份。啊,我不知道这么说。

大家呃能不能够理解哈,其实这是一个。你们能把这个逻辑想明白,其实是一个非常easy的事情啊,easy的事情。

啊,稍等啊。

啊稍等啊啊稍等那个我们继续往下去讲啊,叫做有监督学习的应用啊,有监督和无监督。刚才呢我们主要讲的是有监督哈,那么我们继续讲讲有监督,有监督主要用在了分类和回归。这个问题主要是放在什么呢?啊。

分类和回归主要是我们要预测问题,预测的问题,什么呀?它的一个目标变量的属性来去定义的。啊,比如说我来预测明年是否分产,我就可以用分类的问题去做。我要去做一个图像分类器。比如说猫狗猪,假设这三种动物。

我给你的图片图片能够分好类,它到底是这三个动物中有哪一种。那么这也是一个分类问题,它处理的是我们的目标变量变量是一个离散值的情况。那么什么回归呢?它主要是处理我们的目标变量是一个连续值的情况。

那比如说最简单的一个事情,就是说我们来预测一下我们的房价。我们最近双十一刚过啊这个啊呃这个天猫又做了很多的销售啊,这个又破了一个记录是吧?好,那么这个时候我想知道我可不可以用以往从10年开始到17年。

现在我们已经知道了啊,17年的数据是多少。我可不可以用这些数据去预测一下天猫2018年双十一的一个销售额呢,可以没问题。但是因为你的这个目标变量是一个连续值,所以呢我们就会用回归的这个模型去学习啊。

那么好,那么继续讲,我监督学习啊,稍等一下,我看看我们的同学有没有提问啊嗯。

课件可以下载啊课件可以下载课件可以这个去呃咱的咱的这个QQ群里下载啊,聚例和分类没啥区别,这是两名这是呃一个人大名小名啊,不要去纠结这个问题哈。好,那么我们继续来去啊。

呃,无监督学习主要是做什么呢?无监督学习。刚才我给大家去说了一个事情是什么呢?呃,全部都是一个什么呢?我给了你一个数据,并且我给了你一个数据的一个标准答案,对不对?啊?我给了你一个标准答案。

那么你去学这些数据和标准答案之间的一个关系。那么这就是一个叫做有监督学习。那么无监督学习呢就是我们的一个我给了你的数据,我现在都不知道这些数据之间有什么关系,也没有答案。那么你能不能帮我去做一些事情呢?

那么这个时候呢,我们就会应用到无监督学习。无监督学习主要有两大类,一个是聚类,一个是降维啊,聚类怎么去理解呢?就是说。呃,假设我现在有一堆的电商里面的这个啊用户的数据啊,用户的数据用用户行为的数据。

那么呃我并不知道,或者是说如果我假设我现在只能按照我们已有的认知去给这些用户去做分类。你比如说啊这个我们的按地区去分类啊,我们的用户按照买购买的商品去分为我们的用户,对吧?

等等的我们已知的这种已知的这种分类方法。但是这些数据中往往蕴藏着一些很有意思的事情啊,就比如说啊他喜欢的某一某一张音乐专辑或者是说这张音乐专辑可能会吸引一部分人的喜欢啊。

或者是某一双啊鞋或者某一类型的衣服会吸引一类人的喜欢。那么这些我在一开始我并不知道这些数据的关系。那么这个时候呢我们就可以用剧类的方式啊,去让数据自己去进行一个分类。刚才通过问到剧类分类啊。

其实就是一个啊分类的问题啊,其是两个名字指的是同一件事儿啊,指的同一件事儿。那么这个这个因为你比较比较有意思的就是沃尔玛,大家知道那个比较有意思的叫啤酒和尿布是吧?

所以一开始谁也想不明白为什么啤酒和尿布往往会被一起购买啊,后来我们可以给他很多解释啊,因为这个呃这个爸爸这个有孩子的。爸爸去超市里去买尿布,往往喜欢带瓶啤酒回家,对吧?啊,后来我们可以给他解。

但在事前我们是不知道这种分类的方法。那么聚类其实就是帮助我们去做这些事情。那么简单讲完剧里,我们大致再说一下降维,什么是降维啊,就是说我们的数据有很多的维度。在一个二维的表里面啊,二维空间里。

一个数据点通常是由两个维度去给它确定它的位置,三维空间呢是三维呃三个数据点。那么如果是在一个数据我们拿过来会有很高的维度,比如说几十维上百维甚至上千维的时候。

那么我们对它的分析起来就会非常的计算量会非常的大啊,这一点是非常的要用的。那么这个时候呢我们就可以运用降维的这种算法,将我们的数据从多维进行一个变换到低维进行转换。那么大家看一下这种PDF图里啊。

左左边的降维是一个三维的图形,到了右边就变成一个二维。虽然进行了一些降维,但是它们的分布还依旧保持着某种次序。大家也能观察得到哈,大家也能观察得到。那么降维通常有PC主成分,还有我们的啊。那么我们来啊。

说一个比较具体的一个小案例哈,叫做爱瑞斯花啊,爱瑞斯花什么呀啊样本啊,样本我们的样本和观测值和实力讲的都是什么呀?123455150,大家看到的是什么呀?大家看到的是这个表的一个呃。表了一个缩引是吧?

哎,然后这些列是什么呢?这个它的这个花瓣的长度,花蕊的长度是吧?哎,都是有一些竖直形,那么这些都是什么呀?就像是我刚才跟大家去讲的,哎,这个瑞雪照丰年,下没下雪,下了多少次雪,每次雪下多深是一样的意思。

他们全部都是一个features。我们也管它叫什么呢?叫做属性或者是维度。而它的这个分类class labelbel,我们管它叫什么呀?叫做目标变量或者是label。也就是说这些数据啊。

从这个呃花瓣的长度,花蕊长度啊,到这花蕊长度宽度,这些都是我们的自变量。而我们的class label是我们的一个因变量。我们要去求的其实就是我们的自变量和因变量之间的一个关系。

那么求到的这个关系就是我们这个多项式前面的一个系数,这个就是我们的经验。一旦学习完了以后,如果现在我再给你一个一组数据,那么你自然而然就会预测出来这个数据,我给你的这个新的数据,它到底是。

这个每一类花啊每一类花我不知道这么说,大家能不能明白啊。

呃,稍稍等一下啊,PCA血压这个别着急,我后面会讲哈,后来会讲稍等一下啊,我们先讲到继续学习常见的算法,大致跟大家说一下,因为时间可能有点超啊,你讲25分钟的已经。那么首先继忆学习常见的算法。

我们听到决策数,决策数其实很简单,我们每天都在决策,今天早上要不要去上班啊,是吧?我不想起床怎么办呀,是吧?啊,每天都在去做决策。只不过决策数是有很多层的决策。我们这个例子里就是买衣服的决策。

你是不是喜欢喜欢就买不行不买价格是不合适,合适就买不合适就不买,是否有尺码啊,有就买没有就不买。那么我们可以继续给它延伸啊,有没有会员打折,有有就买没有就不买,有没有合适的颜色。

买没有就不买。那么我们给它做延伸。那么这个其实就是一个分类的过程啊,分类的过程。那么大家自己可以来看一下,我只简单介绍一下啊,那么回归其实就是刚才我去讲的,像这个爱瑞斯花的这样的一个案例啊。

爱瑞花的一个案例。那么回归呢我们大致的分为简单的线性回归和多元性回归啊,简呃这个简单性性回归,其实就是一个一个自贬量。那么多元呢其实就是多个自贬量啊,那么这个很简单,我们也可以用它去预测我们的这个。

身高和体重的一个三面图,我们可以给它拟合出来一个直线,然后用这个用用我们这个学习到的这个直线去预测你下一个身高和体重啊,你给我一个身高,我们够预测一个体重啊,那么这是一个很简单的应用啊,简单的应用啊。

那么支持向量机。那么大家知道我们的中来老大的博客上就会有这个支持向量机理解它的三层境界哈。那么我就简单的说一下啊,那同学们有兴趣可以去我们老大的博客上看一下,那么SVM是什么样?

SVM其实就是呃解决了线性不可分的问题啊,在一个平面上一个数据分不开啊,大家看得到哎,这个平面上我们这个红点和这个黑呃红着这个钻石块和黑的圆点分开怎么办呢?哎,我我通过了一个核函数映射。

把它映射到一个高维空间中,我再去给它做分割,它解决的这个问题啊,那么神经网络这个事情其实它也是一个分类器,它是什么呢?它是将输入和矩阵相连,矩阵计算的结果和神经元相连,有多少个神经元。

我们就会有多少个分类器,我们可以这量去简单去理解它啊,简单去理解它。那么深入学习。刚才我们也讲到的,其实是我们之前的我们的神经网络隐隐藏。也就是我们神经。数之前由之前我们的一层增加到了多层。

那么增加的这个多层就叫做深度,有了深度啊,那么这也就是我们深入学习这个名字的来历,我不知道大家能不能够理解哈。那,你你不理解,没有关系,我们继续再往后看啊,因为我后面还有。那么像朴素贝尔斯的分类器哈。

那么这也很简单,就是说呃我们可以说呃我怎么样去给大家做一个简单理解,就是我想知道你是什么样的人,我只要看到你身边的朋友就可以了,为什么呢?啊,因为你身上的属性会和你身边朋友很接近。

我一旦知道你身边的朋友,我也就知道了你啊,这是一个比较呃比较呃简单的去理解哈,那么事实上我们的一个应用会有垃圾邮件的处理,是吧?我先定义好一些垃圾邮件,比如说垃圾邮件,你经常会出现一些啊发票啊是吧?啊。

或者是或者是一些什么这个诈骗的一些信息哈。我我也想起来,名词已经好久没收到垃圾邮件了哈。那么如果这个时候我定义出来的这个词里面哈,我我先把这些都定义好,这些就是垃圾邮件。好,那么现在来了一封新邮件。

你的这个。呃,邮件里边出现了和垃圾邮件里边有60%的相似度的时候,那你说你自己是什么?对吧那么我就认为你是个垃圾物件呗,其实就是这么简单的一个道理哈。那么最后我们再看具队刚才说过了哈。

我们就是把它简单跳过啊,因为时间稍微有点长啊。好,那么我们来看看我们的AI学习路径的一个规划。这是我们今天课程的一个第二部分啊。第二部分那个呃对CSDNSVM哈对,前几年这种9爱的这个博客啊。

那么啊谢谢大家谢谢大家好,课件能下载能下载那个咱们都在咱们QQ群里啊,QQ群里。好,稍等一下,我们来开始进入到我们的第二课程。

也就是说啊也就是说咱们啊知道了我们的现在我们的这个人工智能或者是说我们的这个啊啊我们的这个机器学习这一块很热很火,我们想加入它怎么去加入,其实这也是一个AI就其实这就是一个AI学习路径的一个规划啊。

怎么去理解这个问题呢?其实。

呃,的确实在现在2016年的时候,就已经把这套啊AI学习路径已经给做出来了,已经给做出来了。那么这个学习路径呢,其实呃你如果呃咱们群里可能有一些同学之前是学这个呃已经有这种开发经验。

或者是已经有这个数理统计基础的这些同学,是吧?那么呃这些同学如果想入门们AI其实也是有些挑战的。为什么呢?因为我呃因为咱们这个AI这个领域,它本身是一门交叉学科,怎么去理解交叉学科呢。

就是说啊你去做这个事情,你既要懂什么呢?计算机基础的一些编程,你要懂一些啊基本的数理统计为积分析概述,同时你还要懂一些业务啊,那么这种的要求相对来讲就比较高。因为啊我们的大学也好。

或者说我们目前的一些企业也好,嗯真的很难有这种环境能培养出来这样的一些人才啊,这样的一些人才。那么这些同学在学习的时候,也可能会做很多的弯度啊,比如说我就见过很多同学啊有这个开发经验呢。

直接就开始上手S learn上手tflow。那么他们觉得哎按照以前的经验,我们就去写吧,是吧?啊总以为这个东西不就写出来的嘛,但是真正啊真正去做不一样的。像比如说S learn的库封装非常。

简单一个fet一个predict,你能搞定问题是吧?啊,最多我们前面在做做数据清洗,或者是做做数据分割就能搞定。但是它背后的东西你不了解代好代码加起来一共十5行搞定,但是背后的东西不了解。

这样你去学习它,你其实是就是隔绝挠痒,嗯,没有好的效果。所以基于这样的一个问题呢,所以我们。也是其在线创立了咱们的这个AI学习的一个路径,就是给大家去建一个科学高效的学习的一个路径,避免就是盲目的。

尤其是跨阶段的去学习啊,跨阶段的学习,帮助咱们同学在进入这个AI的行业里面,更有效的去做一个啊学习计划。那么下面呢给大家去分享一下啊,简单的分享一下。首先我们看一下啊。

我我把这个我们的学习路径啊一共分成了。1234,一共分成了4个阶段,一共分成了4个阶段啊,那么这四个阶段呢,其实大家可以在7月在线的官网上都可以看得到。

但是呢我呃把这些东西作为一个整合一个整合啊一个整合。那么这些也是我们现在线的一个呃精华在在里给大家做一个分享。首先第一个我们要去进阶的一个点呢?就在python编程基础算法与数据结构,这个是CS方向。

也就是computer science这个方向的。也就是说无论你想去啊无论你是什么样的层次,你必须要懂python,为什么要懂python。因为python是咱们现在整个AI学习领域最火热的这么一个库。

怎么去定义?最火热,就是说他对很多的库支持,他能够使用很多的库。thon自身的语言的优点我就不太多说,同学有有可能会了解到啊,比如说它的语法很很简单,它的这个代码的代码的这个顺序很优美是吧?啊。

写起来非常的就是非常容易上手学是学起来更常的快啊,非常的快。那么这个优点就先不说更重要的它是被很多的第三方户支持。你比如说最简单,你说你你想干什么?如果你想做举个运算,那么我们有安排啊。

这么强大的一个库来支持你。如果你想做这个呃数据的呃清晰分析整理。那么我们有pa。如果你想做经济学习,我们S,如果你想做深度学习,我们有这些东西都有如果你想做数据视全都有。你知道吗?

它就是一站包含了几乎机器学习从开始到结束的所有的东西。所以它是一个必经的一个点啊,它是一个必经的一个点。好,那么。那么算法和数据结构呢就是说它是面试的一个点。就是说我们通常学完这个python以后呢。

我们还要过一过我们的算法和数据结构。在面试的时候通常会被问到同学们,尤其是我们从学校里出来,同学经常会被啊这个面试官问到。有些呃写一个算法是吧?啊,这个数据结构的理解啊都会被面试到,那么这些也是要学。

这些也是要学的一个东西。那么我们现在其实在线有pyython的课程也有算法和数据结构的一个课程。那么这是第一部分啊,第二部分是什么呢?第二部分是一个。

啊,稍等啊,一般不子啊,那个同学别着急别着急啊,我再往往下去讲啊,往下去讲,你就明白了啊,稍等啊。

第二个是数理统计基础啊,数理统计基础。那么数理统计基础就是说这也是很多呃之前做开发的人的一个大坑啊,一个大坑。刚才同学说两个坑哈,其实不止两个坑啊啊,一个大坑是什么呢?就是说呃很多人就是刚才也说了。

就因为数学功底不足,学不下去。最简单的一个道理。刚才我讲到一个叫做线性回归线性回归的时候,我们去求损失函数,损失函数本身是一个凸函数。那么我们对凸函数进行优化,我们会用什么优化。

我们会用一个叫做哎呃就有一个叫做梯度下降的方式进行优化是吧?基地的方式进行优化。那么这个优化又会涉及到呃危机分离的求导。那么这些东西啊都是呃如果你要是用计算机,我们用代码去实现,其实就是两行代码去搞定。

但是你根本当你不懂的时候,当你不懂得两行代码在背后在做些什么的时候,你你去你去写事业代码的时候,即便是完成功能,你的心是很虚的。你的心是呃很很虚弱的,但是你因为你不知道它背后做了些什么。

就能把这个结果出来啊,而真正的说我们去企业去面试的时候,往往不仅要问你呃能不能做出来,也会问你这个背后的它的这个算法或者它这个原理到底是什么,对吧?如果说我们去做一个非突函数的呃优化的时候。

我们就很难找到一个全局的最低点,可能会找到一个我们会采用这个随机提度下降的方式去找一个局部最低点,对吧?那么如果你不太清楚这个东西的话,那么呃让你去呃去面试也好,会去做这个实际项目也好。

嗯这个呃我个人认为不是一个好的一个。一个学习啊,既然已经花了时间,花了精力,那么我们就尽量把这个基础打牢啊,知道啊自己在做什么,更需要知知道自己为什么要这么去做,怎么样去做啊。

这也是我个人认为一个比较好的一种学习和工作的一个方式哈。好,那么这是我们的第二个啊阶段啊,第三个阶段就是涉及到了我们的记忆学习算法了。也就是刚才我看到同学也说了。这个就是说这个涉及到的这些算法。

比如说我们的最大商务模型,这些信息问你的东西啊,最大商模型信息增议是吧?相对商商是吧?还有一些模型调优啊,模型调优。那么还有一些像做呃刚才讲到的像一些啊这个决策数随机分明SBM这些的一个具体的应用啊。

具体的一个应用,包括逻辑回归啊,包括这些剧类分析层呃层次聚类这些东西都是要到切入到一个实战的那,就不再只是说老是今天我们去分享,就能够把这个给大家去说一说了啊,是真正用代码就用这个课程去做。

这是我们第三个阶段啊,最后一个阶段就是实战应用。因为如果没有第四个阶段,我怎么能知道你前三个阶段你学习的效果是怎么样呢?对不对啊,正因为有了第四个阶段。

那么第四个阶段就是说我们会以真正的项目来去考核大家,真正的项目去考核大家。比如说现在我们正在呃正在呃上课的啊,今天应该没有跟明天有啊,明天有明天有线线下课和后天的线上课的这个积极学习啊集训营啊。

进续集训营。这是一个线下课程,以及我们的线上课程,是基行学习实战应用班。那么这个班呢其实就是为了帮助大家去解决什么问题啊,解决我学了之后,我要把它做成项目的这么一个目的你只有用了这个项目。

我才能把之前所有的知识点进行一个贯穿。啊,我才能够把我之前所学一个完整的产品的形式拿出来啊,无论是我自己来去使用,还是我用来去找工作求职,还是转行的这么一个产品。如果没有这个。

那么你前面所有的知识点学习还是处于一个散乱的状态你没有用一个产品把它揉在一起好,那么这就是我们啊这个在我们却实在线啊,为大家规划的这么样的一个叫做啊AI学习路径的这么一个路线图啊。

那么啊今呃今天的课程可能超时了1来分钟哈。啊,不好意思啊,把它原计划是20分钟30分钟左右啊,那么在整个的最后。后呢呃今天的最后呢,我也预祝所有来听课的同学们。你的这个AI学习之路呢。

我们两个希望一个是有起点,希望你们开始。第二个更希望你能有一个结果啊,有一个结果。这个结果刚才我也说过,就是我希望你所有学习的同学最终都能有一个啊最终的产品做出来。好,那么就谢谢大家哈,谢谢大家。好。

那么啊。

啊,与希希也希望大家能继续关注我们齐月在线啊。那么今天的这个今天的这个公开课就到这里,非常感谢大家。好好,再见再见。哎,好好,那课建在咱们QQ群里可以下载啊。科建在咱们QQ群里啊可以下载。🎼嗯。

好,那就这样,再见。

人工智能—Python AI公开课(七月在线出品) - P8:1小时带你熟练python基础语法 - 七月在线-julyedu - BV17W411K7G8

然后OK了以后,我们来讲这样的一个基础的语法啊。那么首先呢第一个啊注释这个啊注释呢呃基本上在啊每个语言里面都有是吧?它的作用呢呃毫无疑问是吧?啊,主要是方便后期的一个什么阅读维护是吧?

其他的它在我们整个程序里面呢,其实呢呃基本上没什么用,它也不解释也不输出是吧?比如说我们这里面做了一个例子是吧?啊,上面用一个井号,然后后面跟着啊一串这样的一个内容是吧?

然后呢下面用了一个print打印了hello world是吧?结果我们运行完了以后输出的结果什么呢?hello word是吧?hello word那也就是呢上面的这一段文字是吧?哎压根没有输出来。

也就是说它不参与我们整个程序的这样的一个呃解释运行是吧,它只是什么起到一个辅助说明的一个作用啊,比如说我们后期的一个代码维护的时候呢啊,这个就显得非常重要。啊,如果说你没有这样的一个东西,呃。

可能后期是吧,你都不知道这个代码是谁写啊吧?可能是你自己写的,你可能自己都不知道啊。那这个是注释,这个内容比较简单。啊,往下来走,就是我们的一个。啊,标识符这一块啊,那么标识符这一块呢呃什么是标识符啊。

其实呢就是一个名字啊,最简单的理解啊就是一个名字。那么这个名字谁来定啊,开发人员在程序里面自定义的一些什么符号是吧?还有一些什么呢?名称是吧?比如说我们这里面什么变量名啊,函数名啊。

这些东西呢通通都可以称作为什么呢?标识符啊,这是它的一个定义啊,那么规则这一块啊,分为两大块啊,这里面我给它分成两大块啊,一个是固定规则啊,这个规则打死的是不能改了啊,固定的啊。

也是什么原则性的问题不能触碰是吧?还有一个什么呢?行业内的规则啊,你可以称之为潜规则,对不对啊,只是潜的是代码而已啊。然后呢,这里面固定的规则啊。有哪一些?我们的标志符由这个字母下划线数字。

由这三个哥们儿组成啊,这三个哥们呢可以任意组成,但是哎前提是什么呢?后面还有一个很重要的字是吧?数字不等开头啊,也就是只要他不开头,这三个哥们可以自由组装啊,那么下面给你们举了一些这个例子是吧?啊。

这个你们可以自己去呃辨别一下是吧?哪一个是可以的,哪一个是不可以的,对吧?像这个在井号的对不对啊,像这个横线啊,注意横线跟下划线啊,这个很容易蒙人,对吧?还包括这个点儿对不对啊,啊,都是不ok啊。

那么除了这个以外,还有一个什么呢?行业内的规则啊,也就是说我们在这个呃实际开发当中的,我们需要去遵循的一些命名规范啊,一般在项目比如说开发之前啊,大家都需要坐在一起吧啊,讨论一下是吧?

比如说像这个命名规则啊。肯定是需要提前就给他定义好了啊,要不然张三这么写是吧?李四这么写,那到后来我们再同步到这个,比如说啊get upub上是吧?或者get上,那么就乱套了,对吧?

那么所以说我们在这个里面提前要把这个内容给它定好啊,那么有哪几条呢,这里面啊三个啊,比较常见的是吧?第一个是建名之意啊,也就是说你在定这个标志符的时候也起名字的时候呢啊,尽量一眼就能啊。

你瞟呀你就知道干嘛。比如说你定义的呃name是吧?就做这个学生的这个名字或者定义 studentent做什么学生对吧?借名之意啊,这点呢呃很重要,那么还有什么呢?驼峰命名法是吧?

那么比如说哈如果说你单纯的按这个建名之意来呢,还不够啊还不够啊,比如说我们这个呢my name。如果说你全部写成小写的my name。那么有可能两个单词就会拿混掉啊,比。说我们的这前面比如说三个字母啊。

可能是一个新的单词啊,这样呢就会产生一些歧义啊,那么我们需要用一些什么呢?特殊的方法帮他们每个单词给他什么隔开,那么隔开怎么来隔,这里面两种方式啊,一个是大头风一个是什么呢?小头风是吧?

这里面有对应的描述是吧?小刀风呢呃第一个单词小写,后面每个单词呢大写啊,首字母大写啊,然后大头风呢是每一个单词的首字母都要去大写啊,那么还有一个什么呢?什么下划线是吧?

下划线现在是比较流行的这样的一个方法是吧?啊,比较流行的方法,那么也就是说我们可以用下划线来进行这样的一个连接啊,这里面少了一个线是吧?你可以把这个哎有了啊,有一个下划线啊,用一个下划线给他们呢连起来。

那么这样呢来区分什么呀?两个单词,一个think,一个什么啊ffer是吧?OK。这是我们的这样的一个标识符啊,那么还有什么呢?啊,关键字这一块啊。

那么关键字呢啊顾名思义它是一些具有特殊功能的这样的一个标识符啊,那么这个呢我们把它称之为什么关键字啊,那么我们在这里面啊只需要知道两个东西就可以了。第一个啊哪一些是关键字。

第二个我们这个关键字不能不能用在哪一些地方啊,知道这两个东西就ok了,是吧?包括像这里面怎么去查看,主要是让你去知道是吧?哪一些是我们的一个关键字,那么像我们在定义这样的一些变量。

或者说标识符的时候是吧?哎,就尽量避免你使用这样的一个关键字来做这样的一个标识符啊,会产生歧义啊,比如说你定义了一个函数的名字叫什么呢?啊,比如说我们这里面呃挑一个啊,比如说什么。挑一个挑一个挑一个啊。

随便挑一个什嘛,比如说这个啊pass对吧?啊,你随便挑一个,然后挑完了以后,你在调这个函数的时候呢,哎会跟我们系统里面所对应的关键字呢产生一个重合。那么他就不知道你到底要调哪一个啊。

OK然后这里面查看关键字呢呃啊方法有很多种了啊,这里面只列了两种,对吧?啊,第一种呢我们可以啊在我们的tminal啊,我们的终端这里面啊,你可以进入到python环境里面。

然后呢呃导入一个什么king word这样的一个关键字包,然后呢通过KW list这样的一个函数来进行这样的一个呃展示是吧?下面呢在这个呃notebook里面也是一样的啊,其实方法都是一样的啊。

只是啊多了一个什么print啊,通过这个print函数呢来完成一个什么呢?输出的这样的一个功能啊。OK这是我们关键字,只需要记住两点就OK了。也一个是什么呢?哎,这个关键字有哪一些常见呢?

比如说啊这个啊这里面啊所列出来的,其实呢啊如果说你对这个计算机语言有一定的了解是吧?这个应该都是很常见的,包括什么t force呀,什么and呀,是吧?lamb命名对吧?啊。

什么tro return等等,是吧?这些呢啊应该都非常少啊。那么第二个需要注意的啊,尽量啊或者说直接就禁止掉了啊,你就不要取这个标志符的时候是吧?哎,跟这个名字重合就OK了啊。

记住这两点基本上就OK了那么第四个是吧,我们的一个呃运算符这一块。那么运算符这一块呢,我们整个这样的一个啊拍里面常见的哈6个啊,这里面啊可以直接看这个左侧的我们的一个导航6个啊,包括什么呢?算术对吧?

还有什么呢?赋值是吧?复合啊,比较逻辑,还有什么呀位运算是吧啊,这是几种比较常见的啊,这个呢都非常简单啊非常简单。像这个算术运算符是吧,就是我们生活中非常常见的加减乘除是吧?然后取于取整自定义是吧。

这个都很简单啊,后面有相对应的描述啊,这个我就不多讲啊,然后呢负值运算符这一块啊。只有一个,那么就是么哎这个等号对吧?啊,这个等号,那么这个等号呢呃。其实在呃。啊。

不是说所有啊绝大部分这样的一个编程语言里面,它都表成着负值啊负值。那么呃怎么去来完成一个赋值呢?比如说哈比如说我们以这个为例吧,下面写了两个啊,来一个什么呢?number3等于一个什么十啊,这个等号呢。

我们在这里面可以把它称之为什么呢?这个负值运算符啊,那么这句话的一个意思,也就是说将我们一个整形的数值十通过这个负值运算符,然后呢,赋值给谁呢?给这个number3这样的一个变量。

或者给它一个什么叫什么标识符也可以。啊啊反过来从右往左来进行我们的一个呃这个读取是吧?那么。这个负值预算符啊主要是做什么样的一个内容啊?其实呢啊顾名思义肯定是么复值。

也就是把右边的内容通过这个负值预算符给左边的这样的一个变量啊。这个也比较简单啊,那么往下来走有一个复合的啊,那么复合运算符呢,基本上跟这个呃复值运算符呢,它俩啊如果说你不细分的话啊,可以放在一起啊。

可以放在一起啊,像这个复合运算符呢,它是相当于把上面的负值跟算术呢?哎,把这两个呃运算符给它挪到一起,是吧?挪在一起啊,会看到什么呀?加等于减等于是吧?还有什么乘等于是吧?除等于余等于等等等等。

那么这个写在一起分别表示什么样的一个意思,也句什么加法负值运算符是吧?加等加法数。比如说我们写一个什么呢?C加等于A,那么这句话等效于谁呢?C等于C加A,也就什么先加再负值。啊。

也就是C加A先加加完了以后,通过这个等号啊,来完成一个从右往左的一个负值这样的一个过程。那么其他的呢都是。一样啊其他都是一样啊,基本上都呃一致。那么啊这个第四个就是什么比较运算符了啊。

这个呢又是生活中比较常见的啊,等于哎这里面呢等于为什么呢?两个等于号啊,稍微注意一下就可以了啊,一个等于是负值啊,两个等于才是我们现实中物中等的哎,等于。比如说你判断两个东西是否相等哎。

两个操作数是否相等是吧?哎,可以就用两个等号来进行判断啊,来进行判断,判断完了以后啊,基本上就会产生一个什么波en类型的这样的一个结果啊,要么是ch,要么是什么呢?forse是吧?

那么这里面是吧有哪一些呢?等于是吧?不等于不等于就是么一个感叹号加个等于这个呢表示什么呢?不等于还有大于是吧?小于啊大于等于小于等于啊,这些东西都啊。很简单啊,过一遍,那么往下来走啊,逻辑运算符这一块。

那么逻辑运算符。啊,基本大部分程序里面啊就仨霍与飞对吧?啊,一般就是霍宇飞。那么霍与飞分别表示什么意思呢?比如说与啊案子啊肯定是吧,并且对吧?或O表示呢或者是吧非也就是说相当于呢取反的这样的一个意思。

那么这个python里面它的一个逻辑运算符这个里面啊。或与非啊,怎么来进行我们的一个表示啊?那么与呢用and来进行这个关键字来进行连,是吧?然后呢,或呢用or这样的一个关键字。然后非呢用not。

那么这个通过这些运算符连接以后会产生一个什么呢?哎,这样的一个同样也是波类型的这样的一个值吧?那么在这里面啊,后面有对应的一个类似于口诀啊,口诀如果比如说这里面啊X andY啊,也就是说X与上一个Y。

如果X为forse,那么X andY它的值就是什么?forse,否则呢它会返回Y的一个计算值啊,这是它的一个规则。那么or呢同样是一样的啊,如果X为sure呢返回che,否则返回Y的一个值对吧?

那么非相当于什么去反,如果它是呃sure它是for,而for呢,它要返回什sure。あ?还有最后一个啊未运算啊,未运算呢你看这个位是吧,哎。他肯定是干嘛的呢?肯定是做我们的一个什么优化用的,对不对?哎。

那么优化那么你想在计算机里面最快,那么肯定是什么呀?哎,用我们计算机本身的一个内容,也就是呢哎转成我们的一个位数啊,二进制来完成我们这样的一个运算。那么它的运算速度是哪最快啊,最快。

那么这个未运算啊怎么来进行算?这里面啊有这样的6啊运算符啊,包括我们的与是吧?还有一个什么呢?或还有什么易或是吧?取反左移还有什么呢?右啊,这几个符号需要去什么呀?记住啊,像这个呢。

一般我们在程序优化的时候才会用它啊,一般正常情况下,你可能如果不涉及到呃这个比如说运算的效率啊啊等等这样的一个内容的时候,可能是呃用的话,用平常的一些方法啊,就OK了啊。

那么用这样的一个未运算在进行计算的时候呢,都需要干嘛呢?先把这里面的内容转成什么呢?二进制啊,这里面我把前面的这个24位给省掉了啊,一般一个int类型是吧?啊,四个8位是吧,我就写这个后8位了啊。

省掉了。那么在这个里面啊。转成我们的二进制了以后是吧,哎,通过这些运算符怎么进行去运算是吧?这里面啊描述的都非常清晰了啊这个呃。可以去啊详细的去阅读一下啊,暗慰语的一个结果,对吧?哎。

怎么去安慰语的对吧?参与运算的两个值。比如说这里面我以A等于60B的值为13。哎,将这两个值先转成什么二进制啊,如果这两个转成二进制了以后,用什么呢?我们的按慰语的运算符进行运算的话。

那么相对应的结果就是什么呢?哎,这里面有口诀了啊,如果相对应的两个位都为一的话,那么结果为一,否则为0。那么哎你可以对着去看,只有一一的地方是一,其他都为0。那么你会发现只有什么?这个是1一。

那么其他都是0。那么根据我们这个二进制的这个口诀是吧?哎,这个什么呢?4不248632啊,按照这种口诀对吧?啊,那么这个什么4加8是不是就搞定了呀,结果一下就是呢出来了,对吧?12啊。

口算就OK那么按位或呢,哎也是一样的啊,它是呢有一个唯一的时候,结果就有一对吧?哎,反过来你再去什么求一下,求完了以后再计算一下结果是吧?啊,这个呢可以去啊自己去啊换一个数字,然后呢去写一写啊。

然后还有一个一般在啊像这个呃啊面试的时候啊,像这个笔试的时候啊,可能会碰到这种题啊啊,碰到这种什么这个误运算啊,比如说呃经常有那种是吧?比如说二的3次方等于8,对不对?哎。

怎么用最快的速度来算出二的3次方等于8对吧?很多人一看到这个题就不愣,这个二的3次方等于8,还怎么算出来是吧?它的一个问题点就在哪呢?就让你用什么呢?误因算是吧?你是左移还是右移是吧?啊。

最方便的方式啊来完成这个结果。Yeah。OK这个运算符没什么问题吧,这个应该比较简单啊。这个语跟这个note啊,如果说你是做逻辑的话啊,逻辑逻辑是and or跟notote。啊。

penthon不能用这个做逻辑。对的。啊,稍微跟其他语言稍微有一点不一样,是吧?啊,所以说在这里面你们稍微注意一下就OK了啊啊如果这个没问题的话,我们就过了啊。我们就进入到这个控制语句这一块了啊。

那个幂复制乘法复制。啊,不一样的,幂是什么意思啊?幂我们往上去翻一下,比如说这个算术幂啊,比如说我们以A等于10啊,看着啊,这个A等于10,B等于20是吧?然后呢,我A的B次幂是吧?

那么也就是十的20次方啊,这个跟乘呃。是不一样的。Yeah。OK然后啊如果没什么问题,我们就进行到下一个了啊。逻辑运算有没有优先级啊,这个肯定是有优先级的啊。OK那么我们就进入到这个条件控制啊。

那么条件控制这一块呢啊我们主要讲两个这样的一个内容,是吧?一个是if的,一个是我们的一个一个判断是吧?一个循环这一块啊,两个这样的一个啊大的这样的一个方向啊两个大的方向。那么。这两个方向啊。

我们在呃讲的其实跟其他的语言呢,基本上呃我认为它的一个相似的一个程度呢啊也非常的这样的一个啊高。基本上格式呢都是呃呃可以说是啊一模一样啊,一模一样啊,稍微有那么一点点小的一个呃区别啊,一点点区别。

那么在这里面我们首先先来完成这个啊if啊,if呢在这里面可能稍微有一点区别在于哪呢?这里面有一个什么呢?airF。也有有什么呀?这样的一个内容啊,有一个air。

这个可能是跟其他的呃稍微有一点什么呀不一样的这样的一个内容啊,不一样的内容啊,多了一个这个这个OK那么。其他的基本上都差不多,有的什么if呀、A呀啊等等。那么这里面这个al它主要做什么内容呢?

当这个多条件的时候是吧?我们会使用到这个什么的?air啊,那么这里面衍生出我们这个if语句的这样的一个呃四种格式啊啊,这里面我给它化成这个四种格式啊,四种格式。

那么四种格式这一块基本的格式就是我们直接单纯的用这个if啊,那么当条件不成立的时候呢,我们可以用if else呃,然后呢呃如果有多条件的话,你可以用if if,然后可以做四进一事情二事情三啊。

然后当多个条件并有可能不成立的时候,你可以用最后一种,也就是呢ifair,然后呢,air三个进行这样的一个组合。然后这里面呢写一些啊简单的这样的一个啊例子啊,这个应该是比较简单的啊。

这个应该跟其他语言啊,基本上是一样的啊。你掌握什么呢?基本的格式就OK了啊,那么这个条件控制它是干嘛的啊啊,这里面做了一个总结。也就是说,如果某一些条件满足才能做某些事情啊,当不满足的时候呢。

就不允许做是吧?这个呢就是满判断。那我们生活里面会有很多很多判断。比如说你这个什么密码,对吧?你登录的时候密码对,让你进是吧?密码不对,就不让你进啊,这个就是满一个基本的判断啊。

我们就可以使用下面的这个什么if else,如果这个条件为sure,对不对?哎,就让你做某一件事情,如果为force,哎,就不让你去做某件事情,对吧?啊,等等。🤧呃。

这个衣服呢啊相对来说是啊比较简单的啊是吧在这里面呢你可以去啊,比如说我们写一个吧啊,写一个这样的一个。啊,程序,比如说我就简单写个,比如说在这里面来一个什么呢?if对吧?

比如说写个age大于等于个什么25,对不对?如果这个条件成立的话,是不是哎我可以做某一件事情啊,比如说print是吧?给他一个呃值是吧啊年龄大家爱无可以干嘛呢?呃,领这啊,来一个和。别。Yeah。

你这是吧?但是前提是不是我们要把这个age这个变量给它定出来啊,不管你是定死了,还是通过人为的这样的一个呃输入,是吧?都行啊,比如说我们就给他什么定死,在这里面就来个什么呢?age等于啊,随便写一个值。

比如说你就25吧,它反正是大于等于是吧?条件肯定是OK的是吧?然后呢运行一下,是不是相对应的结果会什么产生出来啊,那么其他的都是一样的啊,都是一样的一个操作啊。那么判断OK了以后是吧,接着是这个循环。

那么循环呢我们主要讲两个啊,一个是我们的where。啊,where还有一个是我们下面所讲的这个什么呢?for啊for循环啊,一个where一个for循环,这是非常主流,非常常见的啊。

那么在这里面我们需要掌握什么呢?这两种循环的一个基本的格式。你掌握基本的格式了以后是吧哎。你才会去写这样的一个啊循环是吧?啊,那么这里面比如说我们的where循环是吧?

where循环或者说呃不管是where还是for,是吧?它俩主要完成的一个动作是什么呢?也就是什么重复性的动作。啊,重复性作,把重复性的动作给大什么归总起来啊,不用一步一步的写啊。

比如说这里面我给大家举了一个这个这个例子是吧?跟媳妇承认错误是吧?然后你媳妇让你去说一万遍是吧?啊,我错了,对不对?那,如果没有写循环之前,对不对?你要是呃比如说打印吧,对吧?

我们可以用print是不是要打印一万次啊,对吧?这个就超麻烦对吧啊,太麻烦。那么如果说我们学过了这样的一个循环,对吧?哎,在这里面我就用where循环啊,我们来写一个呃。这样的一个啊基本内容啊。

比如说我们来定一个I等于个什么零,比如从零开始,然后直接来一个whereI呢小于呃,等于个啊就不等于吧哎,从零开始我们就等于什么1万就okK了,对不对?然后在这里面可以把上面这个内容给大什么打印一下。

是吧?啊,我错了是吧,来一个。OK啊,完事了以后是不是再来一个控制条件啊,对不对啊?来一个控制条件啊,比如说每一次加一次,然后呢让它依次的去循环去执行。好来运行一次。

是不是咔咔咔是不是1万次都已经跑完了,对不对?哎,这个计算机的速度是不是飞快啊,对不对?那你看是吧?啊嗖的一下1万次是不是都已经执行完事了,对吧?那么所以说这个循环呢,它的一个使用。

也就是说我们当我们出现重复的动作的时候啊,我们需要使用循环,它可以呢提高我们的一个效率啊,提高我们的一个效率?啊,这里面呃它的格式是什么呢?怎么去用它啊,上面按照这种写法啊,这就是它的一个基本的格式啊。

这里面有一个什么呢?啊,注意首先你要有一个where的一个关键字啊,有了这个关键字,后面紧跟着是什么条件,你看我这后面I小于1万,这个就是条件啊,当条件满足我的进来,其然不满足,我不进来啊。

这就是它的一个什么基本的一个格式啊,比如说我在这里面再来写一个再写个啥呢?写一个啊简单一点呢,比如说我们写一个这个这个1到100的之间累计和啊,比如说做一个求和计算啊,求和计算啊,那么求和计算。

1到100之间,其实跟个上面基本上一样,作为在这里面是不是加一个求和是不是就O了呀,对吧?啊,比如说在这里面来做一个1到100这个之间的一个求和计算。啊,计算。那么在这里面呃模仿一下。

按照where的一个标准格式I等于一个一啊,再来定一个什么统计变量啊,来统计一下求会的结果是吧?来给来个零零加任何数是不是都是我们的一个零啊,然后呢,在后面是不是接着你就可以哎来搞了,来个循环,对不对?

I小于多少呢?从一开始对不对?我要加到100,那么这里面我就包含100了啊,然后呢在这里面统计一下是不是summer,然后呢加等于一个谁呀?I或者说你可以改一下啊,这个呃符合运算符用的不熟是吧?

我可以把它拆掉,拆成什么呢?summer,然后呢加上一个什么呢?I给他什么分开来写啊,都是一样的啊,那么完事了以后是不是再来一个控制条件,I加等于一个一啊。

最后我们到外面是不是可以来展示一下它的一个结果呀,是吧?比如说我们打一下这样的一个summer。是吧啊打一下这个样的一个3码是吧?OK完事以后,我们来啊运营一下,是不是5050啊,对吧?啊。

也就是说我们呃1到100这样的一个累一计算,是不是通过循环的方式啊,能够帮助我们快速的去完成某一些呃呃这个这个啊所想要的这样的一个结果啊。那么这个呢是我们的一个where。

那么接下来呢我们完成他的一个什么兄弟是吧?啊,for他俩是基本上都是哪啊不分家的啊,那么for循环呢跟where尔循环呢,其实呢除了格式不一样以外,是吧?啊,其实呢他们之间的一个相似度呢很很大是吧?

上面讲了是吧这个呃where循环能做的啊,for循环啊基本上都是可以做的。但是for循环呢一般它做什么呢?便利我们这个呃项目,但是便利项目里面有什么呢?哎,注意有序列啊。

比如说后面我们所讲的这个数据类型里面的什么?这个列表呀字串呀啊字典呀等等。那么这些便利的时候,你用where行不行呢?肯定是行,但是呢没有用for来的方便啊,没有它方便。

那么我们for它的一个基本的格式啊,哎,这个跟其他语言稍微啊区别就比较大了啊,区别比较大了。那么这里面有什么呢?首先啊有一个for这样的一个什么关键字啊,这样的一个关键字。那么有了这个关键字以后。

后面for后面紧跟着是一个什么临时变量啊,临时变量,你可以随便写啊,你可以写t啊,可以写A可以写B可自写C可以写D然后后面再跟一个关键字E,然后呢,后面跟着需要。便利的这样的一个列量或者字符串。

或者你可以把它总称为是一个序列啊,把它总称为是一个序列啊。然后呢,最后你拿到这个结果,你要干嘛,对不对啊?这里边你需要去啊做你根据你的需求,然后呢做对应的这样的一个呃比如说逻辑啊,那么还有是什么呢?

扩展的格式是吧else也就是for跟 else可以一起使用。当循环不满足条件的时候,哎,这里面。可以走alse这里面的一个。内啊比如说这里面我们也来举一个例子啊,来简单的去啊快速的去什么便利一下啊。

比如说我们就变了一个字符串啊,来一个什么呢?我们的name等于一个是吧字符串来一个julylyDU点上一个什么呢?caO然后我现在要拿到这个name字符串,这里面每一个字符,那么怎么办呢?对不对?

你可以一个一个的拿,或者啊后面我们再讲到这个字符串的时候,是不是可以啊切对吧?或者通过缩音下标去拿啊,一个一个拿,但是这种是相对来说是比较麻烦的啊,我们可以直接使用循环便利的方式一步到位对吧?

来一个for啊,注意它的格式啊,for关键字是吧?然后后面紧跟着个临时变量是吧?随便写啊,但是最好遵循这个建民之意的这样一个标准啊,来个X然后呢印上一个对谁呢?我们这个什么name。就OK了。

对吧然后在下面比如说你可以加一些判断呀啊,如果你给以加判断,单纯的想知道这里面有什么是吧,你就可以直接来一个什么呢?print把这个X给到什么打印出来。OK然后我们来运行一次,哎。

可以把上面的这个内容是不是哎全部的都展示出来对吧?啊全部展示出来啊,这个就是什么for循环,它的一个基本的格式啊。那么在讲这个循环的时候啊,这两个循环啊啊除了基本的格式以外,都可以加入什么呢?als。

也就是循环不满足的时候,哎,执行al里面代码,而且呢这两种循环都可以实现循环的嵌套啊,也就是在这一个循环里面,你可以呃嵌几层啊,嵌两层欠三层。但是一般呢不超过三层啊,超过三层相对来说就很复杂了啊。

一般啊不推荐切入三草。如果你要是三成以上啊,最好加一些判断啊,加一些判断。然后这个循环这里面呢有很重要的两个知识点就是什么呢?一个是啊breakack,一个是continue是吧?这两个是吧?

那么broack表什么意思呢?用来结束整个循环。那么continue呢表示结束什么呢?本次循环啊,这是它俩的一个区别啊,这里面我们来写个例子啊。比如说我们先写一个b吧啊,b,我们就拿上面对吧。

把上面这个代码给它啊copy一下。ええ。copy一下,给它粘过来啊,我们在这里面可以什么给它加上一个什么呢?判断的条件啊,比如说来一个if来一个X,如果X等等于谁呢?是吧?我们可以挑一个。

比如说挑这个D吧啊,这种地,那么这个时候我可以直接就干嘛呢?rck是吧?啊,这里面。啊,直接braackO那么然后我们在这里面再来去打印一下这样的一个内容。哎,我们来看看这样的一个效果。

你会发现只打出来GULYE到D这一块后面的内容是不是都没了啊,也就是braack当我们程序这个循环里面,只要一碰到这个们咔就断了啊,就熄火啊,就断掉了。那么与它相对应的,还有哪个哥们呢?哎。

contin。那么这个continue有什么不一样呢?它是用来结束本次循环。啊,注意它俩有本质上的一个区别。那么本次循环什么意思呢?比如说我们刚才啊我把这个break换成continue。哎。

我们再来看一下它的一个变化的一个结果啊,copy一下。我们把这个bra啊换成我们的一个contin。O我们再来去运行一次。哎,你会发现跟刚才这个内容哎不一样。那么不一样在哪呢?上来到D这一块就没了。

那么这个呢哎D也没有,但是D后面的这个U点COM哎出来了,也就是它结束是谁呢?本次啊,等于D的这次它给它干掉了对吧?那么其他的呢照常去运行啊,那么这是这个循环。

这里面的什么brorack跟这个contin。那么我们需要去注意这两个问题啊,这里面列出来这个bra continuein只能在这个循环里面用是吧?除此之外,你不能单独去使用,这是它的一个呃特点啊。

还有一个呢你在如果说哈刚才我们讲到这个for呀,还有where呢都可以用在这个呃循环嵌到啊,都可以用循环嵌到。但是呢你在用循环。嵌套的时候呢,如果使用了这个back或者continue这样的一个关键词。

那么它只对啊最近的这一层循环起作用啊,这个一定要注意啊,它只对最近的,如果它放在外层,那么就对外层,如果放在内层,那么它就对内层这个循环起作用。还有一个很重要的,在写循环的时候。

一定要注意给这个循环一个出口,不要让它产生那死循环,那么像刚才讲的是吧?哎,可能会产生内存溢出,是吧?啊,这是几个需要去注意的这样的一个点啊。OK那么循环这一块OK了吗?啊,我看一下啊。

airs基本没人用啊,不会啊,As用的很频繁啊。🤧啊,一样的啊,for下面加一个el啊,跟它是平级关系,就OK了。感觉没什么用啊,呃有一些啊,你说这个fog else。

如果说他们是在一些特定的一些场景啊,特定一些场景。Braack。就没法执行air呃,是的啊是的。哦,没用过是吧?呃,后面啊有机会你们会用的啊。OK如果这个呃控制语句这块没问题啊,大家扣一个一啊。

我们还有很重要的这个数据结构这一块啊。😊,where尔下面的这个哎等会儿啊,在这个循环代码是以缩进结束嘛,where尔。你说的是where where where。这个嘛缩进结束的什么意思?

就是说python它的一个编码规范啊,python的编码规范就是什么呢?就是它是有首行缩进的,它不像java里面用大括号,它这里面没有大括号的概念,它是通过首行缩进4个空格啊,默认一般都是tamp键。

你按个t键就可以啊,它会自动的帮你去跳四个空格,或者你按四字空格也可以啊。Yeah。今天有课户作业嘛啊,肯定是有的啊。O啊,那我们就接着来讲了啊。那么接下来呢我们就来完成这样的一个。😊,呃,数据结构啊。

那么python里面的数据结构呢分为六大类啊,六大类啊,分别是什么呢?number我们的数字数字类型,还有str周串list,我们的列表,我们的一个DIRCT字典,我们的啊top是吧我们的一个元组。

还有一个s,我们的一个这个集合啊,一共分为这四个大类啊啊六大类啊。那么这6个大类里面又分一些小类了啊,我们先来一个一个的去搞定它啊,先来最简单的啊,最简单的就什么呢?number啊。

那么number这个数值类型里面啊,分为4个int float啊还有一个compplex啊,我们的一个复数啊,分别是整形的是吧?我们的浮点的布尔的还有复数的啊。

那么像在python2里面还有一个long这样的一个长整形。那么现在在python3里面取消掉了啊,没有它了啊,on3里面只有4个啊,这个是很容易混淆的啊。

因为其他语言里面像这个呃int跟这个什么log基本上都是沉对出现对吧啊,包括还有一些java里面还有什么double吧fat啊,但是在python里面这个number只有这4个啊。

int float我们的波en我们的compplex。那么这个东西是吧?我们可以简单的去通过一个小例子啊,我们再来写一个吧。写一个,比如说就呃我们通过内置函数吧。

通过t来简单去测一下这样的一个啊数类型啊。比如说我们写一个A,我们就写一块了啊,CD啊分别等于什么呢?比如说20再来一个啊5。5吧,5。5再来一个啊确或者是么for啊。啊雀再来一个。

比如说我们再来个负数吧啊,负数呃4加上一个啊三勾。OK拿到这些内容。那么拿到这些内容以后,我们可以通过print ok来把这些数据类型啊,我们要来看一下对吧?有哪一些。那么检测一个数据的类型。

我们可以通过哪一个函数呢,对吧?type啊,如果你预习过了,是不是这个type是不是在on里面是不是它的作用是不是超级牛逼的呀,对不对啊,它是不是鼻组级的人物啊,对不对啊?啊。

后面我们再跟大家讲到原类的时候是吧?会再跟大家详细的去介绍这个type。那么现在呢你只需要知道什么呢?哎,我用这个type这个函数可以去查看某一个变量所对应的数据类型啊,就OK了。

那么在这里面我们来一个A对吧?那么后面就啊我就copy了啊。来一个A,这个是B,再来一个C啊,再来个D。那么OK了以后,我们来运行一次,你会发现对应的啊是什么呀?

int float我们的波en我们的compplex啊,我们上面是一样啊一样。这是我们的number啊,这个比较简单啊啊记住就OK了啊。然后第二的数据类型呢,字符串是吧?字符串呢太重要了,对不对啊?

它在这个整个程序里面,它基本上是贯穿始终的是吧?啊,哪哪都要这个们啊,哪哪这个。那么字符串这里面我们需要去掌握哪一些这个内容是吧?首先定义,你知道怎么去写一个字符串,对不对啊,非常简单。

用一个单引号或者是双引号是吧?哎,括起来是吧?里面写一些具体的内容,那么这个呢就要字符串啊,一般我在讲这个字符串的时候呢,喜欢把它形用成什么呢?哎,羊肉串对不对?哎,下调到了是吧?撸两串是吧?

那么这个呢你就当成一个羊肉串,然后呢单引号或者双引号呢,就是这个签啊,把这个里面的字符呢给它串起来啊,不管是ABCD也好,还是45678也好是吧?不管你串的是羊肉还是鸡翅膀是吧?哎,总归它是一个串。

那么啊这是它的一个基本的定义啊,那么。定义OK了以后是吧,这个串有什么样的一个特点啊,那么这里面有一个什么呢?哎下标这样的一个概念啊,下标那么下标什么意思呢?这里面写了一个这个呃比喻是吧?就好比什么呢?

编号是吧?超市里面储物柜的编号,你拿到这个编号可以找到对应的储物空间,那么我们同样这个字串也是好吧?你串起来以后,这里面比如说name等于ABCDEF那么我怎么找到A,我怎么找到B怎么找到C。

怎么找到D,对不对?哎,通过谁呢?下标,或者说你换个词叫什么?索引啊,都一样啊,都一样。那么这个下标怎么来进行确定啊,这个是需要去注意的case呢下标是从什么呢?零来开始啊,不光thon啊,基本上啊。

有下标这样的一个概念的啊,基本上都是什么呀?从零开始啊,那么从零开始怎么去拿呢啊啊,这里面举了一个例子啊,还是以上面这个呢name等于1个ABCDEF是吧?如果你拿这个name中号0。

也就是说通过这个变量名儿。的一个索引下标来取值的话,零所对应的是。A,然后一所对应的是什么呢?B是吧?然后呢,二对应的是C,以此类推啊,以此类推。但是我们在这里面。只需要注意这个就OK了啊。

它是从零开始就可以了啊,那么啊像下面呢这里面有一个呃啊可以按照这个方法,你们可以吧啊试一下啊试一下。可以去什么挨个的去什么获取这里面相对应的值啊,那么还有一个什么呢?我们的一个切片啊切片。

那么这个呢到后期呢也会经常去用啊,比如说你拿到一个很长的数据,对不对?那么拿到一个很长的数据了以后,我怎么去对这个数据来进行这样的一个截取啊,比如说你拿到这么长一个串,对不对?

那么我只需要其中的某一部分,我不是全部都要对吧?那么如果说你通过上面的这样的一个内容来进行这样的一个呃,比如说下标来拿是可以的啊,但是呃可能需要挨个去数或者是比较麻烦,对吧?啊。

那么可以用对应的切片会么方便一些。那么这个切片怎么来进行切哈啊,很简单,它的基本的语法是什么呢?一个中括号,然后里面包含三个参数,一个star,一个啊toptop一个什么吧?

分别表示开始结束我们的一个什么啊布长吧?也就是说怎么来理解呢?从哪儿切切到哪儿,我切多少啊,就跟你买一块什么五花肉一样,对不对?哎啊,羊肉啊,羊肉串是吧?我们来一块羊肉对不对?你要串串了,对不对?

那么串串以后,你要切多大的,从哪开始切到哪结束,要切多大,是吧?哎,这个呢就是切片对吧?但是这个切片我们需要注意一个什么呀?它是左臂右开型。啊,左避右开型。那么什么叫左避右开型呢?也就是它不包含其始。

啊,不包含啊包含起始啊包含起始。然后呢呃这个结束这一块是吧啊,它是呃。不包含的啊,也就是到结束这个前一位啊,包左不包右啊,包含左边的。但是呢不包含右边啊,然后步长这块呢,你就可以什么人为的去设定啊。

到底切多宽切多宽了,那这里面给大家举了一些例子是吧?比如说还是以这个啊为例,是吧?如果说我们啊定义了一个变量name是吧?它的一个负值为ABC你取什么呢?0到3,那么就是什么0123,那么三是取不到的。

那么取什么012,那么拿到结果是不是?1ABC啊,也就是嘛取的是0到2的这个字符。那么0到5也是啊,下面呢0到5是取的什么?0到4的字符对吧?3到5取的是34啊,包左包右,后面都是一样的。

那么还有一个呢?负一,那么负一什么呢?它是从下边开始,然后到倒数。第二个啊倒数第二个啊,反过来的对吧?啊,这是一些基本的一个内容,对吧?啊,如果在这个基础上呢,还想去呃。呃。

扩展的话呢呃来大家扩展一下吧啊,比如说我们再来写几个啊。呃,比如说我们来写几个,呃,还是以这个我们就随便写个变量码啊,来个A是吧?来取一个叫什么ABCD啊,EF啊,还是以这个几个值为例啊。

比如说我们在这里面啊来一个prints,打印谁呢?打印这个A,那么我要取哪一些值呢?我直接来一个冒号3。啊,我直接来个冒号3,那么这句话表示什么呢?意思呢?拿到的结果是什么呢?是不是?哎。

我们先来阅举一下啊,先猜一猜啊,是不是ABC啊啊,应该是ABC那么为什么是ABC呢?那么前面我是不是没写啊,没写省略了默认就什么呀?从零开始啊,默认就是从零开始啊,那么再来写一个。😊。

比如说我们再来一个print A,然后呢,我前面写两个8号,然后呢再写一个2。这个表示什么意思啊?是不是前面第一个冒号前面没有第二个冒号前面没有。那么第三个值是不是对应的,我们上面的格式啊,一个是开始。

一个是结束,一个是步长是吧?那么第三个是步长,那么前面两个没写,那么也就意味着它是默认的从头到尾,那么从头到尾每隔两个切一个,那么拿到的结果是什么?是不是ACE啊,O我们再来去呢试一下,哎。

是不是拿到对应的结果对吧?啊,那么除了这个以外,你可以什么?还可以呢反向的来切啊,比如说我们在这里面啊给它一个print来一个A,比如说还是跟刚才一样的,我来个什么呢?-2。哎,反过来了。

那么-二反过来是什么呢?是不是FDB呀,对吧?啊,反过来写啊,所以说这里面需要去呃掌握一些什么啊特殊的一些呃用法啊,基本的掌握以后是吧,啊,稍微扩展一下啊,基本上就够用。

那么这个啊t呢啊掌握这个下标切片了以后呢,啊,如果你们有时间哈啊尽量去再看一些它的一个常用的一些方法。比如说什么find呀,index呀啊等等,那吧,怎么去查询啊,怎么去查询啊。

包括这里面元素怎么去替换啊啊这样的一个函数啊,可以去看一下这个API。那么往下面来走,这个list这一块啊list这一块。那么list呢啊应该是跟这个str啊啊应该是并列的啊啊。

它的一个使用的频率呢非常高啊,为什么它使用非常方便啊,取值啊存值啊都非常方便啊,那么这个列表的一个使用呢?啊,为什么去用是吧?啊,主要是它在存储数据类型的时候呢啊,就不像这个字符串啊。

或者说我们的一个number这样的一个单一了,它可以存储什呢呃。这个很多这样的一个数据类型是吧?那么在这里面我们需要掌握什么呢?这个列表的基本的格式哈,那么格式什么呢?中号啊,中括二一括起来是吧?

里面你可以写对应的列表项啊,比如说列表一列表2列表N这样的一个基本的一个内容啊,那么下面举个例子是吧?比如说取一个name list这样的一个变量,里面有什么小王小张是吧?小华是吧,三个是吧。

都是什么呀,是不是引号括起来的,是都是我们的逗串是吧?你也可以写一些什么呀?其他的这样的一个呃数据类型啊,都是OK的啊,可以写什么一啊,可以写什么t force呀都行啊,都行。啊。

掌握基本的格式了以后呢,呃我们需要掌握它的一个常见的操作啊,比如说我们针删查改呀,是吧?我们的一个排序啊等等这样的一个内容啊,那么。在这里面我们需要掌握这里面的方法啊啊,比如说我们第一个增加。

那么增加这一块呢,我们使用的有三个方法啊,分别是appendextend,还有insert对吧?那么这三个方法分别表示什么样的一个含义end呢表示像元素啊,或者说像列表里面去添加元素。

默认呢是在啊最后面了,对吧?那么extend一般是合并两个列表,还有一个什么insert往指定的位置去进行我们的一个元素的插入对吧?有什么增加啊,这是针对于不同的场景来完成的什么呢?三个啊。

那么删除呢有D air是吧啊pop是吧?我们的re啊,我们接着来写个例子啊。来写个例子,我们来呃先来定义一个这样的一个呃列量啊,我们就把上面这个吧。上面这个name list啊给大家拿过来啊。拿过来。

那么有了这个列表了以后,我们先来使用第一个是吧?我们的一个append这个方法。那么这个方法啊,也就是么像这个列表里面去添加元素,是吧?那么添加元素呃,可以直接通过什么呢?比如说我们用一个input啊。

往这里面去什么呀添加是吧?或者说我们在这里面可以先事先先辨利一下这个name list这里面的一个内容,是吧?一共小王小张小华对吧?往这里面先去样加一个啊,我们来一个tent等于一个什么呢?啊。

我们直接用一个input吧啊,可以往这里面去什么样输入啊,输入或者说你直接写一个字符串放这里面啊,更方便,我们直接来一个啊,直接来一个这个name。list点上一个什么呢?

啊pen是吧往这里面去什么添加一个什呢字串是吧?比如说来一个什么hello啊,简单一些。那么有了它了以后是吧,我们可以去啊测试一下这个元素有没有被添加进来,对不对?那么有没有被添加进来。

我们可以在这里面去什么直接去便利,或者说呢你可以直接去呃看一下我们这个什么name啊,直接来个printnt啊,printnt在这里面。打一下我们的name list。

OK是不是hello已经被什么呀添加进来了啊,这是一个啊这是一个。那么除了这个以外呢,我们还可以呢?比如说通过extend啊。来进行我们的一个合并啊,比如说我们现在来两个来一个什么A给他一个什么呀列表。

那么这个列表里面有哪两个呢?比如说我们就简单一点12对吧?再来一个B是吧?这里面给他一个什么?34。那么现在我想要把B里面的内容合到什么呢?A里面,那么我们就可以通过exendA点上一个什么呢?

exend,然后呢,哎这里面可以传一个什么呢?我们想要合并的内容,B然后这里面我们再来print一个什么呢?A这样的一个内容来运营一下,你会发现哎原来的这个A的列表是不是发生了对应的变化了呀。

是不是把B给它鉴定过来。好吧。那么还有什么呢?这个。呃,这个这个这个insert啊,那么insert呢是表示啊在指定的位置啊,index前面插入啊,注意它是指定位置的前面啊,不是在后面啊。

前面进行这样的一个插入啊,比如说我们在这里面insert。嗯坐里咩。insert那么insert在插入的时候,比如说我们还是写一个例子啊,写一个啊A吧。等于一个比如说012,然后再来一个B是吧?啊,啊。

就不用B了吧,我们就直接插吧,是吧?来一个A点上一个inertok然后插入哪个元素,是不是要插入哪一个位置,那么你就要来确定两个东西,一个就是什么呢?哎位置。啊。位置啊,那么还有一个什么呢?元素。

你要插入哪一个位置啊,然后插入哪一个元素啊,注意这里面你所插入的是什么呀?位置的前面。啊,注意这个就OK了。然后在这里面,比如说我要插入到哪一个呢?索引为这个这个一吧啊,索引为一,那么索引为一是谁呢?

0一是不是一的前面一的前面我写个几呢?我写个6,我在我写个6,随便写一个啊。然后在这里面我们可以来打印一下哪一个。拿一个print啊,给他一个A这样的一个结果哎。这里面啊这里面空掉了啊。

用了些中文的标点符号是吧?啊,注意啊,然后拿到的结果是什么呢?是不是0612这样的一个结果啊,这样的一个结果。那么像这个是增加里面的三个方法啊,然后呢删除啊是对应的啊,删除是对应的。

删除跟这个增加呢是呃啊基本上是它是添加到。最后一个是吧,这个append加最后一个,那么删除最后一个用哪一个呢?用pop来进行删除,对吧?然后remove呢跟这个insert相对应,它是插入到指定的位。

它是什么?哎,根据元素的值去进行删除。那么如果想要根据下标来删除呢,可以用DE air来进行下标的删除。啊,那么还有一个修改。那么修改这一块呢,因为这个list呢它是一个可变的啊。

也就是说你可以直接的对它进行修改啊,那么还有个查查这一块呢就包含两个地方,一个是in一个是not in它俩是刚好什么?哎相反的,也就是什么包含跟不包含是吧?in呢就是包含啊也是存在是吧?

not in呢就是什么不存在啊,这样的一个啊意思而最后一个什么排序啊,也是你可以对这个列表里面的元素呢啊,按照某一定的规则来进行这样的一个啊排序啊,排序。那么排序这里面用哪个方法呢?shots啊。

s short来进行排序啊,这里面我们可以来啊。写一个排序的啊。写一个白序的,那么来定一个。来1个啊T排序来个A吧。等于一个比如说我们写一个列表啊,来个1235呃,再来个132啊,随便写一个啊。

然后呢我们按照这个数值的大小来进行排序一下A点上一个什么呢?我们的一个shott啊,调用一下这个sshott函数就O了,很简单对吧?然后再来一个print,我们来打一下这个A这样的一个内容。

你会发现它是按照从小到大的顺序来进行排列。那如果说你想要干嘛呢?反转一下,该怎么办呢?我们可以调用另外一个函数,有个什么呢?rere ok调查这个函数。

我们再来去呢打印一下print这样的一个A这样的一个结果对吧?哎反过来,或者说可以直接去看一下这个shott,这里面有一个参数叫什么呢?re啊,你也可以嘛直接去呃传一个re这样一个参数啊,也是O的啊。

那么这个呢是这个list,它的一个呃基本的一个操作是吧?智商改查啊正山改查。啊,前三个有没有问题?append是识别A为列表就。🤧直接操作了,然open的是呢添加元素啊。🤧嗯。

tableable默认补全啊,对,这个table啊是有一个呃可以说是它可以补全,然后呢还可以有一个代码提示的这样的一个功能啊。然后。倒着方向开始切,每隔两个。这个f X in range。

这个range这个函数啊,它是一个怎么说嘞?它是一个范围啊范围。如果说你按照这个10到1的这个方式倒着切啊,倒着切它的一个结果是什么呢?我给大家演示一下啊,我翻到这个上面这个切片这啊,比如说这个切片这。

我给它反过来切,比如说现在有呃从1到5从0到5是吧?比如说我现在从5到一的这样的一个顺序来给大家去呃,比如说切切完了以后,比如说后面还给大家一个什么负数啊,我在这里面演示一下啊,你就理解了。

来一个什么呢?print来个A。比如说现在我从哪呢?从前面是5,然后呢,到一,是不是这是反过来的,而且呢不光这个顺序是反的,我还哪哎倒着来切。那么这样的话,它的一个结果是什么呢?是不是从五到一。

那么5是哪一个呀?0123455是不是F啊,F到一,然后呢,一是谁呀,是不是B呀,每隔两个切一个,是不是F切一个哎,D切一个是不是就没了呀?一为什么呢?为什么这个B是不是切不到,是不是它是包左不包右。

它不包含一这个所引啊?OK我们来运行一下,是不是它的看它的结果是不是FD这样的一个结果啊。是不拿到这个结果OK啊啊看一下这个你应该就明白怎么去啊弄这样的一个内容啊。呃,老师不能拖堂是吧?还有5分钟是吧?

啊,这5分钟是讲不完了啊啊要拖一下啊。😊,嗯。okK啊,再来一个啊,我们接着往下讲啊这个。😊,啊,字典这一块啊,那么字典呢它是呃跟上面的list呢啊稍微有一点区别啊。

那么这里面呢我们需要去掌握它的一个基本的格式啊,基本的格式那么基本的格式什么呢?刚才我们的列表是一个中括号里面写对应的元素。那么字典它是一个大括,而且里面它的元素的组成啊。

注意是key冒号value这样的一个格式啊,也是建筑都是这样的一个格式是吧?一般是吧像这个字典用在哪呢是吧?比如说我们的啊学生的姓名啊,学号啊,年龄啊,哎像这个东西你存的时候用它就比较方便了啊。

用它比较方便啊,掌握它的一个基本的格式啊,那么基本的格式OK了以后是吧?接着呢你需要去啊知道它的一些常见的一些操作啊?比如说这里面啊简单列了一下,它的列表基本上是一样的,可以存储多个数据。

然后呢呃也是可以进行下标啊,通过下标来进呃这个啊通过下标来找是不OK的。因为它是无序的,你就可以什么直接通过什么呢?king啊来找到这样的一个内容啊,这个就给它啊干掉。然后还有什么呢?呃。

每个元素它的一个特点是什么呢?都是有什么呢?键值对啊两个这样的一个内容啊来进行这样的一个啊组成的啊,然后常见操作呢,你像这些数据结构,无非就是什么呀?这商改查啊,都是呃大同小异的对吧?然后呢。

在这里面我给呃啊列一下这个呃这几个这样的一个常见的一个函数啊,常见的一个函数,比如说我们这个啊增三改查,对吧?我们怎么来进行这样的一个操作啊,那么像这个修改是最简单啊,修改就可以直接的通过键。

然后呢去修改这样的一个啊值啊,可以直接去改的啊。比如说我们还是把这个上面拿一个过来啊,就拿它吧。在这里面啊,我们来做一个这个案例的一个讲解啊。比如说我们就以刚才的这个inform是吧为例啊。

这是一个字典。那么如果说我想要直接去修改它。比如说把这个ID给它改,现在是100,对不对啊?100,我现在想它给它改成比如说200,对不对?那么改成200怎么来改呢?我先定一个新的啊。

比如说来一个什么new ID等于一个什么呀?200对不对?然后直接改通过谁呢?通过kingI进行改是吧?来一个inform是吧?king是哪一个呢?IID原来值等于100,现在等于谁呢?

是不是等于1个200啊,是吧把直接把这个什么new ID给它是吧或者你直接就是么写1个200是不就O了呀,是吧?然后你在这里面可以来打印一下,我们这个in。啊,来个infer。

然后这里面通过king来取下它的值是吧?来打1个ID我们看他现在的值到底是100还是200,是不是已经改掉了。那么如果没改之前啊,我们在这个上面啊来打印一个啊,print一下。这里面给它一个infer。

再来一个哎,中文了。来一个这个ID啊。OK我们再来去呃运行一次啊,是不是100啊,原来是100,现在什么直接可以什么改掉了,是吧?呃,这是我们的一个修改。那么添加哈添加也是一样的啊,哎呀也是一样的。

这里面呃如果说哈就是有一个小问题啊啊,也就是说你去访问一些,比如说不存在的元素啊,不存在元素呃,可能会什么呃爆红,对吧?那么可以使用什么呀?我们的一个啊get这样的一个方法啊,就OK然后还有什么呢?

删除那么删除这一块呢啊给大家列出两个常见的一个函数啊,一个是DEA啊,那么这个DEA呢,它是干嘛呢?哎删除指定元素。这里面写一些注释啊。删除我们所指定。的一个元素,这是第一个。那么除了这个DAL以外。

还有一个什么clean这个函数啊,那么这个clear它是干嘛呢?哎,主要通过它来清空字典啊,相当于什么清空。清空。我们的一个字典啊,这个是删除子原组。如果说你想删除整个字典。

那么就DEL后面紧跟着一个字典名是吧?那么相当于把整个字典干掉。如果说你只想把字典里们的内容给干掉,对吧?但是字典导流,那么可以用呢clear来完成一个什么呢?清空啊,OK然后还有一些常见的方法啊。

比如说我们在这里面如何去获取这里面的king啊,我们的value啊,还有我们king跟value所组成的这样的一个啊,比如说原组的这样的一个。啊,列表啊,那么这里呢我们可以来啊写一个吧。

你在下面我们再来写一个啊。😊,写一个,比如说我们辩论一下,还是以上面这个啊哥们为例吧。我们给它放上来啊,那么放上来了以后,现在这个in four现在有了,我可以什么呃直接去拿到这里面所有的key啊。

比如说怎么去拿这个所有的K呢,我就直接打印了啊,来一个呃print在这里面直接来一个什么呢?in four点上一个什么呢?kings啊,有这样的一个什么呢?函数啊。

那么现在如果说来直接运行是不是拿到name ID sex address是吧?哎,4个 king相对的拿到了。那么如果说我现在想要拿到所有的这对应的值,那么我可以用什么呢?values啊,再来运营词哎。

按长什么100F什么哎地址就可以拿到。那么还有一种什么呢?我想拿到键值对的一个组合。那么哎这里面我们可以用另外一个函数叫什么呢?itesO我们再来运行一次啊。哎,是以元组的方式哎给大家展展示出来啊。

这个就是我们的一个呃字典啊,这里面常见的几个操作啊,其实查询就是么便利啊,也就是么这里面常见的几个方法啊,你想要拿到K,拿到值还是拿到这个限值对的一个组合啊,都是OK的啊。OK那么接下来还有两个是吧。

一个是元组,一个是这个集合。那么这两个呢相对使用的一个频次就没有上面四个这么高了,是吧?一般元组我们用在哪呢?哎,固定不变的地方啊,固定固定不变的地方,用这个元组,那么原因是元组里面的内容,它是什么呀?

哎,不能变啊,不能变,这是它的一个特点啊,元组的元素你是不能进行修改,那么它的一个特点是什么呢?它的格式哈用小括号括起来啊,小括号括起来。那么现在可以总结是吧?小括号括起来是元组是吧。

它里面的数据是不能变的,而且它是一个有序的集合,也就是对应的有索引有下标是吧?然后呢这个中括号括起来是list我们的列表它里面可以存储什么呢?哎呃多种类型的数据是吧?也有索引下表啊。

但是它里面内容是可以直接修改的啊,还有一个大括号的是。什么呢?我们的一个字典是吧?啊,里面是以T冒号 value作为我们一条数据啊,也就是键直对的形式啊,总结一下是吧?然后这个元组这里面是吧?

知道它基本的一个定义了以后啊,可以来做一些什么呀简单的一个啊操作,是吧?既然它是一个有序的是吧?那么可以通过索引下标去什么呀拿它的这样的一个内容啊,你可以正着拿,也可以什么呢?反着去拿啊。

也可以去反着拿。那么这里面我们可以来啊定一个啊定一个这样的一个呃元组。然后我们对它做一些什么常见的一个操作啊。比如说我们来定一个这个啊t。然后可以取一个什么呢?我们的一个名字啊,比如到他们A是吧?

给他一个比如说空的这样一个元组。那么如果是一个空的元组,我们在这里面打印一下它的话,哎哎看看这个里面会出现什么样的一个情况啊,我们来让它运行一次是不是就是一个空的呀。那么如果你这里面有对应的这样的内容。

比如说我写个一写个二写个三是吧?写一个什么字符串,来个什么呢?go是吧?哎,再来个布尔类型的。比如说哎cho,那么再来去运行一次,是不是对应的值,也会打印过来对吧?那么对应的内容现在可以展示了以后。

比如说它是有序的,那么我想去拿这里面的内容,可以通过索引下标来拿,对吧?索引下标跟上面是一模一样啊,比如说这里面拿一个零,对吧?来copy一下。一是吧?然后2啊我就拿前几个了啊。

后面呢你们可以啊自己去拿,然后呢我们来运行一次,是不是123分别都已经拿到了,是吧啊,负面都可以拿到。那么如果说在这里面我想要对它来进行这样的一个呃,比如说删除啊修改啊啊等等这样的一个操作是吧?啊。

可不可以直接进行呢?哎,我们来试一下啊,刚才说了它的元素是不是不能修改,那么如果说是不能修改的话,那么在这里面如果说我们直接对它来修改会产生什么样的一个问题。

那么现在比如说我们要对这个一来进行修改一所对应的索引是不是零,那么现在我要把一改成100啊,改成100,那么我就来一个什么呢?哎ten一O在这里面索引是几呢是呃0O我直接给它负个值。

比如说负一个什么100啊,我们现在直接是不是就来运行一次,咔哎红的爆出来了,是不是?哎,他其实这里面的内容是不是不能进行我们的这个修改OK啊,这里面需要去注意这样的一个内容啊,把它给注释掉啊。

把它注释掉。那么除了这个以外啊,注意这点以外,还可以注意什么呢?比如说删除啊删除呢直接可以使用呢DEL这样的一个方法啊,把它给什么样干掉啊。比如说我们在这里面可以直接DEL一个什么呢?哎。

我们的temp那么一运行这个哥们就被什么干掉啊就被干掉。那么你在下面再来去调用一下这个啊,比如说我们的temp。一这里面的2哎,你会发现是不是给你提示这个已经没有了呀,对吧?O啊。

可以直接通过它来进行我们的一个什么删除的一个操作啊,那么除了这个以外,还有什么呀?比如说拼接,你可以用加号减号乘号除号是吧啊等等这样的一些操作截取给我们字符串呢是啊一模一样啊。

这是这个元组的一个常见的一个操作啊,那么呃除了这个以外啊,我们需要去注意的以外是吧?这个元组呢,我们在这里面啊一定要记住啊,啊里面的元素是不能改啊,如果你想改,你可以把这里面是不是定为什么呀?

比如说这个go那字符串,字符串这也改不了。那么你可以把它定成什么呀?列表啊,如果定成列表哎就可以改了,你可以改里面的那种啊,但是整体的你不能改啊,注意这个就OK了啊。呃,还有最后一个是吧。

我们的set啊,那么set呢呃集合对不对啊,集合是吧?那么集合在这里面啊,它跟我们的列表元组呢啊非常类似,也是可以存储多个数据的是吧?而且它的数据什么不重复的啊,不重复的啊。

然后呢这里面呃怎么去理解这样的一个集合呢啊,我个人理解其实呢它就是一组T的一个集合啊,但是呢它跟字典不一样是吧?它只有K但是呢它没有这个值是吧?啊,这是它的一个特点,是吧?

本质上是什么无序无重复的这样的一个元素的这样的一个呃操作啊,集合的操作。那么这里面常见的有哪一些呢?比如说我们可以对它进行联合教呀差呀啊等等这样的一个呃数学运算啊。

也可以对这里面的内容呢来进行我们的一个呃操作啊,那么这里面我们来试一个啊。来创建一个啊,比如说我们来写一个这样的一个列表啊,来一个set一吧。等一个啊,我们直接调用一个set。

然后在这里面我们可以呃传一个列表吧啊,我们写一个简单一点的是吧?来1个123456是吧?啊,12345啊,再来一个4吧,3吧,O给他搞一些啊啊没有顺序的啊,那么有了以后我们可以直接先来干嘛呢?

来打印一下,我们这个什么呢?S一啊,我们先来看看它的一个结果是不是12345是不是他直接就把这里面重复的元素给干掉来O啊,因为它什么无重复元素啊,无重复元素。像这个啊43是不是都已经有了呀。

它会直接的帮你给干掉啊,干掉,这是它的一个它的一个特点。那么如果说我这里面换一个,我不用什么呢?😊,我不用列表啊,我换回用元组的话,哎,会是什么样的一个情况啊,这里面再来看啊,比如说哎给他换个S2。

这里面换1个S2,我们再来看一下所产生的这个结果,是不是就已经直接报错了呀,对吧啊,直接就什么报错了,对吧?那么。呃呃除了这个啊以外是吧,我们还可以去做一些什么呢?

比如说你可以放一些什么呀字典这样的一个什么呢内容啊,字典的内容。那么字典的这样的一个啊,这里面少一个括号啊,应该是不报错,它也会什么去虫啊,然后呢,还有一个什么字典,那么字典跟它也是什么呀?

一样的一个呃操作,只是呢它是一个什么呢?建职队的啊建职队。那么兼职队呢呃。呃,也来写一个吧,来个S3等于一个我们的set啊,在这里面加什么大括号啊,来个大括号对吧?我们的一个字典。

那么这个字典呢你可以写一个什么呢?K,然后呢对in我们的一个value啊。比如说king我们就用一了啊,然后呢对in的我们的value,比如说写一个go,然后呢再来一个呃二作为我们的king。

然后呢再来写一个啊nice吧。OK然后在这里面我们可以来展示一下这样的一个S3这样的一个结果啊,那么我们可以看到它的结果是不是12,它只显示这里面的king啊,也就是呢不存储啊。

这是它俩的一个啊这个t它的一个啊特点啊特点。那么除了这个以外啊呃还有一些常见的操作,比如说呃支撑查改对吧?啊,怎么去往这个set这里面去什么呀添加一些元素啊,这下面呢我们来啊也来写一下。

比如说我们还是以这个S一为例吧,我们来copy一下啊。第一个我们来添加。Okay。添加那么添加我们用哪一个这样的一个方法呢?at啊,我们把这个给粘过来对吧?啊,那么这里面这个元素呢。

我们就不写重复的了啊,们就写呃12345吧啊,写多了也没用,对吧?那么有了这几个元素了以后,我现在想在这个结合里面插入一个6,那么就什么S1点上一个什么呢?at直接调艾的这个函数,然后呢。

直接扔一卡6扔进去是吧?扔进去了以后是吧,我们可以直接来进行我们的一个打印展示一下吧啊,来个S1是吧?然后我们来运行一次哎6是不是就已经直接插进去了啊,不光可以插入这样的一个整数类型的6,我来插一下。

比如说这样的一个呃元组啊,啊插一个整整的是吧?比如说来个S一点上一个我们的ad是吧在这里面插整个的一个元组啊,比如说随便写一个啊,写个789。OK啊,再来运行一次,哎,你会发现就整个元组咔也给弄过来了。

对吧?啊,这是这个插入啊插入也就是嘛可以理解为什么呀?添加啊,那么如果说在这里面我使用什么呢呃。呃,更新吧啊更新更新呢有哪个函数呢?up date啊,其实都是一样的啊,知道这一种后面的呢都是一样的。

电视诶。分析我们用up。That。OK表示我们的一个更新。那么还有一个什么呢?删除啊,删除我们使用什么呢?remove。啊,这些函数呢大家都可以什么啊自己去什么试一下,按照我们上面这个添加的这个方法啊。

一模一样。你想删哪一个是吧啊,可以啊,直接去删啊直接去删啊。那么啊除了这个以外,还有什么呢?比如说我们常见的还有什么便利啊,便利这个内容。也就是说你可以使用什么呀负循环去什么呀?哎。

拿到这里面的每一个值啊,或者说你想要通过什么索引拿到对应的值啊,也是什么OK那么这里面除了这些常规的这个操作以外,还有上面我们所讲到的这个什么呀联合什么交呀差呀啊对等差是吧。那么这里面呢。

其实呢就是我们刚才所讲这个运算符的时候是吧,哎所涉及到的一些内容对吧,啊比如说在这里面我们的一个交集。啊,交集交集使用什么呢?哎,与这样的一个符号啊,使用与这个符号。

那么使用这个与这个符号呢相当于什么呢?哎,找到两个的一个呢交集啊,这个呢啊跟大家来我来写一个啊,写一个后面的基本上都是一样的啊,哪一个S。二等于一个呃给他来一个set。在这里面啊。

我们写一个字典吧啊写个列表吧,写个123啊,然后呢我们再来写一个copy。写一个S3这来写一个什么呀?比如说啊153了,那么这里面交集的是谁呀?是不是一跟三是它的一个交集啊,对吧?

那么在这里面再来一个什么呢?A4等于个什么呢?这个S2,然后呢与上啊1个S3啊,那么完事了以后,我们来打印一下是吧?我们来测一下这个结果来个什么S4。来测个A4,然后我们来看一下它所产生的一个结果。

是不是就是13呀,拿到它的一个什么交集是吧?啊,交集。那么除了这个交集以外,还有什么呢?我们的一个并级啊,并级。那么并级呢,如果是按照上面这个那么是不是就是1235了呀?那并级用哪一个呢?用这个竖线啊。

竖线啊,就OK了啊,跟上面这个符号是一样的,对吧啊。OK那么这个呢呃啊可以来试一下,我们把它复制一下吧。😊,复制一下,然后呢把这个给它换一下是吧?换成我们的一个竖线啊,我们再来去运行一次啊。

你会发现是不是1235对吧?找到它的一个交集,还有一个并集啊,那么啊以上呢就是这个数据结构的一个啊基本的一个内容啊。呃,有问题啊,可以啊现在来问啊。Yeah。呃。

ad是把789当成一个元素添到这个集合里面啊,是的啊。你说的就是这个并级的概念啊啊基本上都是啊。更新啊更新就是什么呢?up that,也就是把这里面的元素可以什么替换掉,就替换啊替换的意思。啊。

更新怎么用是吧?啊,更新啊,可能你们有一点呃疑问啊,我来带你们写个这个更新吧,来个up啊,那么更新这一块呢其实呢啊是啊跟上面这个ad呢,基本上是一模一样的这个操作啊还是拿这个啊就拿这个S1吧。

我现在要把这个S一里面的一个内容啊,给它什么啊变化一下是吧?变化一下。比如说换一些这个内容,你就可以直接使用这个up date来进行什么呀?换啊,来个S1点上一个什么呢?我们的up啊。

把这个里面你换成什么呢?啊,随便换个元组吧。呃,这里面添加了789是吧,789给它换成678。啊,换成678OK那么完事了以后,可以来啊直接print来打印一下这个什么S1啊。OK啊。

就呃可以直接的来进行这样的一个呃内容的一个啊替换啊,把这里面啊可以加入这样的一个基本的内容啊。啊,加入这个内容。然后呢,如果说你想要换成其他的内容。比如说你想要加个什么90啊,你可以什么再加啊。

比如说你在这里面还可以什么啊不对,你把这里面内容换成什么呢?九换成1是吧?我再来运行一下,90也同样会什么加进来啊,也同样会加起来啊。如果说你还想什么加入一些其他的一些内容是吧?比如说我再来复制一下。

我不想加入这个什么元组了。我想加入一个什么呢?字符串对不对?那么字符串啊,比如说我来一个什么呢?hello是吧?来一个helo啊,同样helo也会什么哎加入进来,但是呢它它是一个什么呀无序的。

而且它是一个去虫的,它会把这个air给到什么哎去掉啊,去掉啊,OK那么。还有什么问题吗?他们有区别吗?啊,有的啊这两个呃。它的一个区别,一个是添加,一个是更新,它可以除了可以往里面去加以外。

还可以去买完成一个替换。黑son里面什么样的。有什么样的重复元素?集合。重复元素集合。嗯。😊,你说这里面可以放重复的元素嘛,它集合本身的一个特点就是不重复的。你就想要不同的类,你就不要用集合。

你可以用其他的像列表对吧?啊,用这些数据类型。呃,然后作业这一块啊,我一会儿呃发给大家,一会儿我在群里面会通知大家啊,我艾特一下,然后呢给你们一个地址,应该都是在呃放在那个吉巴那个这个这个这个。

呃teacher里面的呃这个作业里面。对,加的是元素啊元素。呃,今天的课我们就讲完了啊。呃。啊,大家有问题啊有问题可以在这里面来提啊,或者说可以在这个群里面来问啊,都是OK的啊。Yeah。

作业什么时候完成?那么作业这一块呢?我们是晚上明天哈,明天是有一天的时间你们去做。然后呢,明天晚上的在线的这个呃持训啊,你们把这个这个python,就是说我今天所讲的这些内容,有的一些问题啊。

你们可以去扩展啊,你们可以去找一些呃资料,比如说我刚才给你们讲的这个str周串里面有很多常见的函数,那么find呀index呀,什么R find rd吧这些内容都可以去扩展。然后扩展完了以后。

有不明白的地方啊,然后大家把它给总结一下。然后呃。然后在群里面啊群里面去提问。然后呢,我会呃会有助教老师,然后呢一一的去给大家去啊作答啊。呃,录播什么时候来放?录播啊,一般会呃1到2天吧,1到2天啊。

set里面set迭代里面的元素啊。🤧呃。这个集合里面啊,它可以存放这样的一些,比如说列表呀、元组呀啊字典都是可以去啊去存放。那么存放这些元素呢,它本身就是一个什么啊可以迭代。

也就是说你可以去啊循环便利啊,完成拿到这里面的一个内容啊。呃,如果没什么问题的话,就扣1啊。啊,这个视频会呃就是一两天,然后上传给大家。然后我一会儿把这个课件呃跟这个作业啊一同的发文给大家啊。啊。

一会儿发给你啊,不要着急啊。明天网上是直接做练习题吗?啊,就是答疑啊答疑啊,再见啊,再见再见再见啊,各位早点休息啊。😊,QQ群可能我现在看不见。OK啊啊如果没什么问题的话,呃。

今天的这样的一个课程我们就呃先到这儿了。

人工智能—Python AI公开课(七月在线出品) - P9:Pandas初步:Series与DataFrame操作 - 七月在线-julyedu - BV17W411K7G8

那我们就开始这个课程的形式,大家上过应该知道,我会我会用这个ipadon用这个jupynotebook我们编。我们边上课,我边给大家打代码。啊,大家只要看着我做这个操作就可以。

那我们最最开始首先呢我们我们要用pandas这个我们要用pandas这个library。所以我们第一步要做的操作呢就是。

我们第一步要做的操作就是import pandas SPD就padas它是一个library。然后我也import non派 SNP。那我现在有pandas和 non派这两个library。

因为我我后面会用到一些n派的操作,所以我把这两个两个library都import进来。它是我今天要工作的一一个基础。然后我们首先呢就给大家介绍什么样是一个sese呢它其实就是一个一维的数据结构。

我们知道一个在拍在拍ython里面,一个一维的数据结构,其实就是一个一个list,对吧?比如我可以我可以在这个里面写上各种乱七八糟的信息,我可以写上数字,我也可以写上train,我可以写正数。

我可以写复数,我可以写floating points。然后这是一个这是一个list,我们在拍照里面看一个数值的类型,只要打type就行了。那这个这它的type是一个list。

那我们现在定义了这个list之后呢。serries它其实就是一个对一维数组的一个封装。对一个list似的一个封装。我们可以。用PD点sious,然后把这个把这个list给它传进去。

那我们就构建了一个一维的seious。然后我们看到sious它出来就长成这个样子。就其实它是把这个list给封装了,然后都给它标上了一个index,就是第零个数是其第一个数是baj,第二个数是一个数字。

第四个数是一个数字,然后它的这个数字类型的是object。因为因为这个数据它又有又有数字,又有train,所以它的类型就是一个。是一个object。我们嗯。然后默认的时候呢。

pas会用0到N作为seious的index,但是我们也可以自己来指定一个index。我们也可以自己指定一个index。比如说我刚才上面的那一段代码,我可以把它复制下来之后,我自己默认一段。

我我自己给它指定一个index的类型。我们可以给这个construct函数加上一个。加上一个index这个参数,这个参数比如我写我的index就是ABCDE。那这样的话呢。

我的S就变成了也是一个是 serious object,但是它就变成了一个它就变成了呃。index变成了ABCDE。然后我们看它的这个S type它是一个serious。

然后我们除了可以用这个我们除了可以用list来构造seious之外呢,也可以用一个也可以用一个dictionary来构造一个seious。因为因为这个se它其实本来就是一个se。

它本来就是一个key value pair,对吧?它我们可以看到它左边其实是一个key,右边是一个value,所以它本身就是一个index,类似于index的一个类型,那我现在就在这边先构造一个。

构造一个。Dictionary。我自己编了一个dictionary,比如说嗯。有背ing伤ha深z。Okay。这是一个dictionary的写法,大家可以复习一下,就是dictionary,它是。

用一个这样用一个这样的大括号来表示。我我这个例子是我自己想出来的。我们我们比如说可以写一下每个城市的房价。比如说这个。可能不是很精确,但是我们大致可以大致可以写一写,我们也我们也可以定义一个。比如苏州。

我对于它我不知道它房价是多少,我给他定一个no。然后我们可以看一下,我比如A apartmentpartments等于PD点siouscities。然后我们看这个C呃。

然后我们看这个apostments变成了什么,它也变成了这样一个se。我们可以看一下print apartments,然后我们再print tie。apartments。

我们看到这个 apartmentpartments类型,它是一个se。然后他可以用一个,所以我们前面讲到了用三种方法来来来构建一个seerious,可以直接用一个list。

可以用一个list加上它的index,可以直接用一个dictionary。然后dictionary的 key呢就默认被当做了一个index,它的value被默认当做了右边的这个value。

然后我们讲完了这个构建一个数据之后呢,构建一个seious之后,我们讲如何如何来选择一个数数组啊,来来选择一些数据。比如我们刚才定义了一个apartments,对吧?那我们用了apartments。

它是一个key,其实它这个se就是一个key value pay。那我们可以直接比如。用用它的key去读它的value。比如我知道这个apartsment仓之是是2万,那我这里写杭州,它就变成了2万。

对吧?然后我可以选我我既可以选我可以选一个把它留出来,我也可以选几个我想要要选的把它留出来。比如说我想选我想选两个城市。那两个城市呢,我们里面要再加一个list。

我我传用传一个list作为这个key的参数,然后把它全部都读出来。比如我要拿杭州、beijing。Shenzhen。那这样我就拿到了三个城市的。三个城市的这个。三个城市的房价。

比如我们可以看下这个typepe什么?它的type其实还是一个se,就是我我们在。我们在拿了一个sub sub sub list之后,它的类型还是一个seious,它还是一个key pace。

然后大家应该还记得我们上次讲当派的时候呢,讲到过一个buing indexing。然后pandas当中也可以用go index,具体来说就是比如说我想把所有房价低于5万块钱的首式给选出来。

那我可以写partments小于5万。这样呢我就可以拿到。啊,所有房价是。小于武万的城市。然后他具体是怎么工作的呢?我给我给大家来详细演示一下。比如我们看APTS小于5万。它究竟返回了一个什么值呢?

它其实是一堆te一堆true force的一个一个se,它就写出了呃,我我这里只有广州和杭州两个是小于5万的,别的城市都是都是force。苏州是那,他给的也是force。然后我可以给他付个值。

let's than。5万等于这一个bulling index。然后我可以看一下printless。对5万,那就出现了我刚才的这一堆数据。

那我们啊然后我们拿到了这样这样一个玻ing indexing之后呢,我就可以写ABTS。APTS less。嗯。5万。他就可以选出我想要的这两个两个小于5万的房价的城市。

然后我们讲完了seious的构建seious的数据引用,我们还可以对seious里面的元素进行赋值。复值的方法呢跟你读取它的方法是一样的。其实比如我我给大家演示一个例子。

我们先看一下它本来比如说我要看apartments,深圳。他本来的old value是5万,对吧?那我现在给apartments。深圳我给他付一个值,比如说我给他付成55000。那我们现在再看APP。

我们再看一下这个APTS。深nzhen。它就变含了55000,就这个副值非常straight forward。那我们就不不多展开。Yes。然后呢,我们前面讲过的这个buoleing indexing呢。

它在复值的时候也可以也可以被用到。比如说我现在我我先print一下APTS刚才我们讲到的bulling indexingAPTS小于5万。有这两个城市是吧?

那我可以把这两个城市的value纽直接用这个方法给改了。比如它小于等于5万的城市,我直接把它设成4万。那我们现在再看一下这个APTS变成了什么。这两个广州杭州现在都变成了4万,对吧?

所以这个就是怎么样对用 bullet indexing对它进行复制。讲完了这些基本的b indexing之后呢,我们再来讲一些基本的数据运算。这些数学运算呢跟我们前面讲过的囊派很像。

这个比如说这个passments,它是一个keyvalue pair,它的value全部都是数值类型,那我就可以用直接对它进行做一个总体的加减乘,只我给它除以2,它所有的数字都除以了2。

然后我们嗯这些这些大家都可以比较自然的想到,比如乘以2,那就是乘以2,对吧?如果如果我要算成平方呢,我可以用MP点 square。就是各种各种。

n派的function大概率在pandadas下面都是可以用的。因为padas这个library呢,它其实是写在写在n派上面,所以n派的各种操作它都支持n派不支持的一些操作。

它可能也支持我们可以这样认为,当然不绝对不绝对保证一定可以支持。所以这个n派点 square它也可以被用在apartments上面。那所有的这个这个就变被平方的是吧?

那这个平方doesn't make any sense,但只是作为一个作为一个例子。然后这个sre类型呢,我们也可以用。用这个python里面的s来写,比如说AP7。S乘乘二表平方是吧,2次方。

那这个嗯应该还是这样写,更加方便一些。然后我们再给大家展示一下怎么样做,我们可以对两个seious做一个加法。比如说我现在在新定义一个。我现在新定一个se,它叫做ca。

因为因为比如说每个车每个城市买一辆车大致的成本是不一样的,可能大城市比较贵,小城市的车会不用牌照啊,费用比较便宜一些。那我这边给大家定一个定一个新的sries。然后我们现在可以来算一下。

比如说我要买一套100平米的房子和一辆车要花多少钱?那我们可以写cos加上。APTS乘以。100。啊,这个数数字相当巨大。然后大家可以看我们这里。我们这里有有一点要呃提醒大家特别关注一下。

就是这边为什么会出现那么多NAM呢?这个原因就是我这边的car和我的apartments。我们看到apartments下呢,我只有这5个城市,北京、广州、杭州、上海、深圳。然后在这个ca下面呢。

我也有北京、广州、上海、深圳。只有这四个城市是被重叠的,所以他们可以被加起来。那些不重叠的城市呢,它就直接都变成了MBM。所以这个就是呃为什么只有这四个城市有数字。

剩下那些没有数字的城市都被都被改造成了MAS。然后我们给大家讲一个比较有用的功能。就是数据缺失。我们pandas呢有一个功能,它可以看那那些 key在不在我的这个在不在我的s下面。

比如我可以看hangzhou inDPTS。然后他给你返回的一个处,就是杭州在postssments里面。然后我也可以看杭州。In costs。然后他就返回了一个forse。

大家可能会想为什么我总是写杭州,因为我是杭州人。嗯。那然后我们还有一个还有一个function叫做APTS点not now。他可以看有哪一些数据类型,它返回的不是它的那个数据不是一个no。

那我们刚才的苏州,它是一个noun的类型,所以它会显示是是false。然后其他的数据呢它都是true,就它都不是一个空的类型。

然后相应的我们还有一个还有一个functionction叫做APTS dot is now。就是这些都是对sious进行操作。啊。Yes。然后就会发现这些有数据的都是forse,只有一个空空数据的。

它返回的一个true。你这个这个东西呢就跟我们刚才那个buing index非常相似,我可以把它直接写成APTS点it now。我把it now的东西给选出来,那它是不是就变成了。

他就他就把那些空的空的数据给选出来。同样的,我也可以把APTS点not now给它找出来。那这些非闹的类型也就找出来,然后还可以发挥一下我们的创造力啊。比如APTS点this now。

我可以写它不等于false,它不等于forse。因为刚才这个is now类型我们看到了,它返回它返回出来都是一堆true force。都是一堆tru false的 value。

我直接写它不等于false,那就说明他把那些飞空的类型都给找出,那也也可以写出。is now等于isis now不等于应该是不等于te是吧?我写它不等于true,那他就把所有的。

或者我可以写is now。等于f。就这几种方法都可以把我想要的数据找出来。就是这个有很多种写法可以做同样的事情,想告诉大家一下。然后讲完我然后我们这个series就讲完了。大家如果有什么。

明显没有听明白的问题,可以可以记一下。如果觉得还比较跟得上,也可以打一个一,就说啊大家可以跟得上。那我们接下来就给大家讲。Data frame。Data frame呢它其实就是一个表格。就是一张表格。

因为se呢它是一个。它是一个一维的数组,像我们刚才它都是一个index,加上一个数。然后呢,这个data frame呢它相应的就是一个就是一个二维的数组,可以类比成一张excel的表格。

我们可以我们也可以把data frame呢当做是一1一堆se的组组合。然后我就给大家先举一个例子,我们如何。我们如何来构建一个data frame?

data frame呢首先它可以用一个dictionary得到我们刚才的dictionary。我们刚才seious dictionary是怎么做的?我们回过去看一下。

seious dictionary是我直接传了这样一个key value pair,它就进去了,是吧?就只有一个key value pair。啊,这个value呢它都是一个一个值。

然后我们现我们现在要讲的这个data frame呢,它跟它的区别就是我现在需要一个需要一个。把这个dictionary搞得稍微复杂一些,dictionary可以传一个list似进去。

比如说我现在写city啊,这么多c,然后我写夜一个时间,然后population这个数据都是我猜的,未必准确。但是我们做举个例子。比如我现在可以建一个dataframe。

data那我现在就拿到了一个data frame。这个data frame它长这个样子。我们可以看一下这个data frame它是一个什么类型的东西。我看一下typepe datata frame。

他就会告诉你,这是一个这是一个pandadas的 data frame。那我们拿到了一个dta data frame。然后有了data frame啊,这个是其中的一种做法。我们data frames。

我们很明显可以看到这个data frame它其实分成了两个部分。你再回过来看一下这个data frame,它有行有列,它行被自动标成了012345。

然后它的列就用这个用这个我们的key来表示它的列就是city population业。然后这个行跟然后这些行跟列的这个列的顺序呢,我们还可以指定它。比如我可以写PD到tda frame。

Data common。等于。我们有夜,有city,有。Population。这边少打了一个引号cityE cityity population,那我就可以把这个那把这些列的顺序。

按照我这里指明的这个顺序来排。它传第一个参数是我要传的data,第二个参数是我要指定的coon类型。Yeah。我 call了哎。还可以我还可以指定一个不存在的colloncollon。

然后我们看一看会发生什么。比如我现在指定一个con叫做这个城市。比如这个城市,它政市政府欠款多少d。那我这边写了一个dt,但是我的数据里面并没有dt。

它就默认全部都给你了一个NAN not number,就表示它不存在。然后我们这个我们这个data frame呢,它的每一个列叫做一个colon,它的每一个行叫做什么呢?

它每一个行其实这个前面的数字叫做它的index。index是个什么东西呢?其实它就跟serious的 indexex一样。我们sious前面讲到这些北j光ang州、杭州伤海都是它的index。

然后这个data frame里面呢,它的这些012345也都是它的index。这个index是我可以自己来人为的指定的。比如我可以写index等于。1。2。我可以写1,2,th3e。4。5。

six就是我我可以直接写死这样一堆inex,那它的index就被换掉了。跟着one two, three ,four, five , six。这个是我们介绍完怎么样创建一个data frame。

然后创建完data frame呢,同样我们来我们来看我们怎么样从data frame里面把数据给它读出来。它的方法也比较直观,但是要注意,我们现在又有肉,又有howlon。

我如果写fend to city。ok我这里有没有frame to啊,我前面还没有复制一个frameam to。ok我们我们给他我们把这个frame叫做frameme two。

这是一个data frame,它是frame to,然后我写frameam to点city,它就把我所有想要的城市给找出来了。我们再给大家看一下frameme to长什么样子。

frame to长这个样子,然后我写frameme to点 city,它就把每一个城市拿出来了。然后我们看一下这个。这个fend to the city它的type到底是什么?我们看。😊,Type。

frameme two。那我们可以看到它的这个frame two,其实它也是一个data frame。也就是说他读了一读了一列之后,它还是一个data free。哦,sorry,出了点问题。

我感到怎么这么奇怪。因因为它其实我我要给大家看的是我读了一列之后,它其实就变成了一个serious。就是说它它的每一个列其实都是一个serious的类型。啊除了可以用这种方法来写这个来读一个列呢。

我也可以直接这样打死这样打C。Frame a frame to the city。它也可以出这个CD,就是我可以用这种呃方括号的方式写出来,也可以直接这样写出来,就这是一个stax sugar。

人工智能—推荐系统公开课(七月在线出品) - P1:从零开始写代码:使用MovieLens的电影评分数据实践FM - 七月在线-julyedu - BV1Ry4y127CV

哦,我们开始了啊。嗯,今天从零开始呢。我们就从数据开始。我们从找手据开始啊。我明天找个数据集来。应能看到吧,我们去找一个。我能是手机。未蓝色手一机。找一个小点的。你知的。让后我们下载一下这个。

先看一下说明,下载的时候看一下说明。前面的没必要看,我们就看一下。他的。介绍。😊,大家大家大家看一下啊,因为我们要知道这个文件的结构才才好去写,就是写文件读取这一这一部分。

因为我们要做呃就写写就是需要快速的写一个简化版本,所以我们就不用到达所有的特征了。我们就只用它这个评分评分文件。然后看一下评分数据里面呢是这样一个结构。用户ID电影ID还有一个评分。然后是那个呃时间戳。

那我们知道哟。嗯,6000个用户,然后3000多个电影。然后呢,这个评分是在5分5分的范围,应该是1到5分。好吧。电影这个下载好了,你们来。这个嗯。

这是这是在哪个?

嗯。

嗯。哇,这个。

Oh。

行,就在这写吧。就在这个。

Yeah。我们来看一下这个我这个文件。

。嗯。哦等一下,我不知道这个字体小不小。

大家觉得这个字体小吗?

小的话,我再调大一点。好,我们可我们继续啊。😊,啊,这个结构很简单,就是1个ID用ID,然后那个然后电影ID,然后还有一个评分。

然后现在我们来写一个函数,呃,不是开始写写代码。我们就写在一个文件里就可以了。

就叫FM。

今系。

嗯,正好卡住卡在卡在范围内可以。嗯。好,我们先写一个读取文件的这样一个一个函数。我们尽量少的。就是尽量少。调用库。但是可能这个库必须得要。你们要要文件路径。我愿。不去。这个这个V我这个VI。

大家稍等一下啊。稍等一下。

我这个环境里面VI好像都没有都没有配置。颜色和换行都没有。

然后我们再去找一个。真的是从从零开始,我们环境呢都要配置一下。对啊。我们找一个模板找一个模板来。来配置一下。

嗯。

,Okay。咦。😊。

嗯。

哦,弄错了弄错了。

So。嗯。

啊,少了一个点儿。嗯。

是点这个刚才两个两个名字打错了。

这样应该好好了好了。

我们继续啊。然后接下来就可以自动换行了。😊,然后我们要把我们的数据读取进来。呃,读取进来之后呢,我们要先想好我们用什么样的结构来存储它。呃,因为我们最终一个每一套训练数据的就是一个3元组。

所以我们直接用那个嗯用pathon list来存存储就好了。让我定一个。定一个list 。然后呢,我去读这个文件。从这个路径里面读文件。然后先把它切分了。先把前后的空格去掉。

因为我们看到那里面它是用两个冒号来分开来分割的。所以我们用两个冒号做分割服。这样完了之后呢,我们知道用户的ID是是第一项。嗯。把它转换int。然后呢。我没有爱吧。因为是ID。

然后那个电影的ID呢是第二项。对。哎,等一下,我先把那个。页面放在后面,我这有问题。大家可以看到嗯。然后评分是第三项。呃,评分虽然是它是1到5的呢,但是我们还是把它弄成一个浮点型。Oh。

然后把它添加到这个里面去。做成作为一个3元组。嗯。嗯,就可以了。嘢。试一下这个函数。什么情况?그。Yeah。Oh。然后我们打印前5项,看一下这个函数有没有问题。

当时writings。

嗯,大家看。数据读进来了,没有问题。

。然后接下来呢,我们定义我们这个的预测函数,也就是刚才FF呃。

FM模型里面的。

这个函数。我们定一个函一个F函数来。做这个为了简单呢,我们看看把现现象。我们我们先把线性象跟这个呃就是这个常寿先先忽略掉。因为最关键的是这个二次项目。

我们先就是先主要的是就是在里面定义这个二次项就可以了。然后在定二次项之前呢,我们得把我们这个参数的数据结构给定义出来。因为这是两个矩阵嘛。就是用户和电影的那个影影特征矩阵。

然后我们先定义一下。举证。在这之前,我们先定义一下那个。

定义几个那个呃超参数。嗯。因为用户是大概多少个?少我一晚了吧。然后电影呢。而5000多个就6000吧。然后K呢。是我们这个引特征的维度。然后我们就订一场午。刚才有同学问这个K怎么选?

这个K是根据实际数据交叉验证出来的。这个没有人知道你的数据适合用多少。有的数据适合用高一点的,比如说用20,但有的数据可能用二就最好了。所以这个要根据情况来的。嗯,先定这两个就行了。

然后我们这个参数呢,因为要进行一些简单的向量运算,所以我们呃还是。不能直接用他的。这个是list。我们还是打入一个。MPY吧。我们用它里面的这个array来存储我们的参数。

然后用户的影像量嗯定义成这样子,就是M乘K嘛。然后我们用。Yeah。Yeah。因为它的ran函数来呃随机一个举证。MK。M行开裂。嗯。然后呢。V是电影的影特征矩阵。And。嗯,好,这样参数就有了。哼。

然后我们定一个函数。嗯,就定义成叫F吧。然后F呢。有两个参数。就是I和J。然后这个函数呢定义就是I用户I对电影界的评分。那他应该定义成什么样子呢?嗯,因为我没有新印象,其实很简单。就是他们两个。

这个I和J。对应的引特征做内机。对呢隐藏着做内机就可以了。如果在这里面写内机的话,嗯就要写成这个样子。要唉。嗯。啊,不。嗯。大家看这个没问题吧。对,K是超超参数是定义出来的。

然后如果你想确定你的K是多少的话,你是要做交叉验证,就是K取不同的值,然后做交叉验证K哪个好?代表是影特征的维度。我们就是把这个返馈值跟评作为预测评预测值的,就是评预测的评分。

你看我们的函数就这样定义的,因为我们是做评分预测,平分预测是一个回归问题。所以呢这个FX就就就等于X。我们前面不做变换了,所以说呢就是这个项。然后呢,同时呢,我们又把这个前面的项给忽略掉了。

就只剩二次项了。二次项了。又同时呢因为我们只有2个ID特征。只有用户的ID和电影的ID两个特征是非零的。所以呢这么多求和项也就退化成了一项。就是用户的引特征和电义的隐特征相做内机。

所以我们这里简化完简化完,就剩这么一个简单的式子了。

就是两个两个箱子做内机。是。好,我们继续啊。Oh。嗯,为了明确起见呢,我们我我在这里把我们的损失函数写出来。损失函数。因为我刚才在PPT里面没有明确的写损失函数。因为嗯就是凡是回归问题。

它的损失函数其实都是都是就是那个呃。就军方损失函数嘛。所以它的损失函数呢就是预测值。Yes。减去。真实值。打电花。对吧。Yeah。그。呃,一般情况下呢,我们还会加一个就是一个正则项。嗯。下。啊。

还是还是不要改就这样。然后我们还要加一个正则项。政策下呢。我觉得写平方了,然后等可理解就行。Yeah。Yeah。然后前面加了加2分之1无所谓的。所以它是这样这样一个一个损失函数。

这这个损时函数大家有没有问题?就是一个平方损失,再加一个。平方损失再加一个正则项。所以我们要优化的就是这样一个目标。那我们要优化这样一个目标的时,目标化目目标呢我们就要对它求梯度。

嗯。求梯度这个事情,我们直接放在训练函数里面。

这里没有定义。这个。😊,reg是regulation是那个对叫可以叫惩罚系数,也可以叫那个政策化系数。这个先随便定一个值,这个值也是超参啊。这个值也是超参,这个值也是要交叉验证取出来的。呃。

不交叉验证选出来的。好吧嗯。就没问题了。好。有这个事在上面,我们就可以写我们的。训练。训练函数了。训练函数呢我们是直接导进一个数据集进去。

。直接导进一个数据集,然后我们去循环。I谢二。对。然后我们去去便历这样一个数据集。然后从里面取出3元组。你这个是什么那个又不会给我换好。不说紧,还先不办天继续吧。然后取出三元组之后,然后我们要做的事情。

就是。就是更新。You I。和VG要做的事情就是就是更新参数嘛。对吧。😊,那根新参数我们就要对上面求导数。最上面这个求导数在求导数之前呢,我们先因为导数里面第一项是预测嘛,P是等于FIJ。这个没问题吧。

因为预测值是用我们这个F函数定义出来的。P等于这个。啊,为了一致,我们这个不显示Y,这是R。二是真实评分。二是真实评分。然后这个P呢是预测曲。然后拿预测值减去真实值的平方,就是平方误差。对吧。

然后我们把这上面这这个整个式子,然后对UI求导对UI求导。看看同意什么。对于哀求岛呢,我们写成GI。GI前面这个平方向求环导之后呢,其实就是P。减去2。Yeah。我觉得求导过程我就直接写。

大家有问题可以直接问P减去2。因为P本身的定义是U和V的做内积。所以这个内机还就是内机还需要对这个UI做求导。内基对YUI做求导之后呢。它就等于VJ了。Yeah。这是前面前面一项的求导。然后呢。

212分之1我就去掉了,2分之1我就不没写了。然后后面这半项这个正则项的求导。就是。2分之1。啊,不不呃,没有2分之1,就是有这个。乘以。Your I。Yeah。这一行大家看看有没有问题。Yeah。

这行GI呢是这个损失函数对于UI的导数。

好,我们继续。然后。

相对应的把机械那个。也写出来,这前面都是一样的,完全对称的两是的。我我如果写错了,大家提醒我。Your爱。所以。Yeah。嗯。是。

Yeah。好,有了梯度之后,我们就要做梯度下降,梯度降就是。让这个电量。

U爱对,加一个空行。

在UI的基础上减去。7度减去梯度的时候呢,你要我要乘上一个步长。呃,一般是兰姆达一为兰姆达在那个。呃。🤢,在pason里面是关键词,我们就换一个吧。嗯嗯 step。所以最大。

然后所以我们要定一个再定一个超餐。

再定一个超声。这里我都是先随便写的啊,不一定是不一定有效的。

先定一个小的补偿。

然后UI是这样更新。

然后。喂。谢。😊,这样更新。Oh。Yeah。然后就写完了。然后我们的训练函数就写完了。😊,大家发现有没有觉得太简单了。Yeah。然后这个函数运行一次呢,我们就迭代了迭代迭代完了一次。

就把这个数据就过一遍,然后更新一下就完事儿了。我们的主要部分已经写完了。现在我们为了看我们的成序效果呢,还需要写一个函数。因为我们需要看。我们的误差,所以我们写一个函数呢。家啊。什么停止?

因为他把这个数数据集过滤完一下,过滤完一遍停止了。Yeah。我写了一个函数叫MSE。MSEMS对我们要写1个IMSE函数,然后呢能够判断我的预测就是最后预测的误差是多少。好,能看到我的训练效果。

然后IMSE的话。嗯,需要两个参数。一个是数据集。还有一个我在这个。对啊,我们是单纯的气度下降。最单纯最单纯的梯度下降。

Yeah。

一个数据,然后还有一个预测的这这那个这个数据跟预测呢是一是每一行是对齐的,每一行是对齐的。明量对齐的,然后我们就可以算一下。嗯,需要有一个。需要有个求和的变量,还有一个技数的。

。Yeah。

因为我们要要要要对对这两个呃同时做访问,所以我们用下标来循环。

用下边来循环这个数据,然后呢有。等于啊不不写那个了。Yeah。这样我们换个变量。因为我们I和G要用到索引的,所以还是换一个。IJ和2。等于。That。

K。能取得DK个数据。然后呢,再取得。Yeah。

再取得DK个预测值。然后把它的平方加起来平方加起来就是P减去。

2。

的平方加起来嗯。然后再。

诶。😊。

加等于1,然后直接返返回。然后这个。最后这个求和的平和那个。Oh。然后那个开个开方。Okay。啊,这样我们有一个数据集和一个预测的话就可以。就可以算出它的RMSE了。

然后。只漏的。还需要一个什么函数呢?那我们还需要一个预算函数。这个预测函数是可以直接预预测的预测的那个值。

嗯。对,再写一个预测函数。Yeah。Yeah。然后给一个数据,然后我们预测。预测完了之后也是放到一个list里面。然后嗯定一个。等于这个。这种时不时的就不会缩进了。然后变利这个数据集,然后我们去做预测。

然后就是。FI键对吧?嗯。用FI键是预测值。Yeah。그。

嗯,应该有这几个函数就差不多了。

嗯,我们我们还没有跑过,先先跑先测试一下这个。

诶唔讲晒啊。

哦。在下面。

行,我在最下面。把数据集。然后load进来之后呢,我们先测试一下我们那个函数。就是这个函数预测函数。Oh。做了2是吗?

Yeah。Oh。我没看到啊,一会儿一会儿运行一下,看看看看吧。然后我们再打印一下。

Yeah。大家看下面一行就是预预测值,应该应该可以。这个时候的预测值呢没有经过任何训练,就是随机初始化之后的两个矩阵做内基算出来的。然后有了预的折后之后呢,我们就可以。看他的RMSE了。

然后我直接打印一下。打印一下。IE。看一下初始的IMSE是多少。Oh。

그。初始的IMC是4。36,大家看这个是很大的对吧?嗯因为因为总共那个就是呃就是1到5分嘛,它MS是4,所以还是很大的。待会我们会我们我们待会跑的时候会发现一些问题,我们我们自己要想一下该怎么调参数。

嗯。Yeah。因为我们是做随机梯度下降,所以我们的初始值呢要选在一个比较好的点上。因为FM它是一个非线性模型,所以我们只能找到它的局部最右键。它是有个二次二次模型。

我们是是是没办法找到它的那个全局自由解的,只能到局部自由解。所以我们的初始值一定要选好。大家看刚才我们还没有做训练的情况下,初始的这个东西就变成了4,这说明什么?说明我们的选的很不好,对吧?因为。

因为我们就做了一个继学模型的时候呢,我们通常会做一个最简单的baseline。这样我们可以大概知道我们的数据集就是最差最差不能差,不能比这个结果差。因为我的评分是1到5分,我的best line最简单。

我就做成1个2。5。😊,2。5最终算我就对所有的评分都预测成2。5。那我最终IMSE是不可是不可能很大的。因为它1到5分嘛,可能也就是2左右。所以说我初始出来一个4。就不行了,这这很不好。

那我问大家现在需要改哪里呢?竖始值没选好。那我们其实就要改初始值,对吧?在改什么地方,在第几行。😊,Yeah。对,UV的竖入值。我们刚开始呢是用这样一个,就是也是01的标标准的那个正态分布。

它是用标准正态分布去试始化。这个一般情况下呢,我们是。因为你想标准字段分布是有正有负的。然后他两个做内机之后呢。这个就是就是一个两个两个标准正正在正态分布出来的。现在他们做内机之后。

大概是大概的值多少呢?呃,我们改这个初始值的时候呢,有两种方法呃,有几有好几种方法。一个是呢我我把它变大,还有一个是把它变小。那我呢它我们应该是变大还是变小?Yeah。对,这位同同学说的很好,那是。嗯。

如果如果那那个两两个向量做内机的话。然后如果是他们最最他们的范围是从负一到正一的。所以呢我们这个肯定不是最优的这个,因为我们知道它是1到5之间,1到5之间。所以我们把把我们这个初始值呢。

大概的给它放到1到5之间去。对吧他不是均值是零吗?然我们给他。你啊。是1到5之间大概是4,然后乘4加上一。So。s。哎,不对,我我弄错了。嗯。Yeah。

我们如果要把它的那个就是就是随机的那个内机的范围弄到1到4的话,单项应该怎么写?Yeah。嗯。😊,嗯。Yeah。Oh。Oh。

大家觉得这个怎么样?

Oh。嗯,这个比刚才好了一点,最开始4。36,然后是我刚才那个直接乘2之后,它变得更大了。🎼。因为这个跟我们的维度也有关系,因为我们维度是5。5吧。嗯。哦这个小了一点。是这样。

就是我们我们那个标准的标准的联域分布呢,它最终是-1到1。然后如果你给它如如果你给它整个向量乘上2的话呢,它的它最后做那做完内积之后就是-2到2-2到2了。嗯,那个。这位同学说。

用不用runN也用run。嗯,我们一般情况下都会用高斯分布去初始化我们的这样一个一个变量。

这是为什么呢?你注意看啊,因为我们在正则化的时候呢,适用的平方正则。嗯。当你用平方正则项的时候,其实你在假设你的参数是符合的是高斯分布。大家记住这一点,如果你是用平方证则。

你其实在假设你的参数符合这个呃这个高级分布。好吧,我们继续。因为因为我们没有加线性项跟那个呃跟那个常数项,所以全靠内机的话,这个东西是效果是不会特别好的。所以我们先不不管这个了,先做下面的。

然后我们开始寻开始。开始做训练。随便。🎼Yeah。

随便循环几次,然后做一个训练。上。

And。然后。然后再打印。

。Okay。啊,这个好慢。Yeah。Yeah。그。Yeah。🤧大家看出问题了。

我们这个完全没有任何变化。

回去看一下问题出到哪儿了。Yeah。如果你的那个。就是这个这个程序运行完,它的意思是没有任何变化的话呢,你可以先改一下这个东西。

你把你的步长给大一点。嗯。嗯。

Okay。

。不长改大一点,还没有作用的话,肯定是出问题了。我们来看看。

有喂。

你起来看看有没有是问题在哪儿。爱声。

哦,我我看看啊。

这个。Ui。😔,没没有,我们这个因为我们这个U和V是全局变量。然后。在这里的话,肯定是要肯定是对他做了修改的。

瞓下。叫i。

Yeah。呃,我们这个I键就是索引。

也就是用户ID和物品ID。啊,你说这个是吗?

哦,这个不用加下表了。因为它是一个3元组,在这儿就直接把它解成解成一个3元组了。

对,这儿这儿不用加下表,我看看数据。应该也没有问题。

Yeah。你说这个是吗?这里那个IJ就是下标啊。

I键就是优和V的下标。

UI把I直接当下标了。Yeah。Yeah。我们在这里打印一下。还有细。嗯。

嗯,等一下,我看一下群里面的。

那个data里面的IJ就是就是影店里面的IJ,这这个是一样的。

所以所以这个是这里这里是没有问题的。

然后看看。

食唉。这个梯度计算也没有错。

我系最会车。哦,我知道我我知道问你在哪儿了。😊,我太太大意了,我们这里训练完了之后,我们训练完了之后,根本就没有重新做预测。

大家看到了吗?嗯。我训练完了之后,根本没有重新做预测,就直接算RMSE了。所以他肯定是一样的。

太晕了。我们家的这一行应该就不一样了,来看看效果。

呃,第二次就变小了很多。Yeah。

哎,多远几次看看。好像出现这种情况呢,我们程序呢就没有大问题了。但是呃我们做机器学习不是这个样子的。

Yeah。

因为我们是需要训练集和测试级的。我们这里是呢只有一个数据集,在上面做训练,也在上面做预测。对吧。啊,我们刚才就。😊,嗯。Yeah。接下来呢我们就。把训练集和数据集给分开,然后看一下效果怎么样。

然后再分析一下问题。呃。Of us。我把倒数。总共有多少行?

看看大概有多少号。这个。

。哦,好的好。我100万哈。

。这样我把我把最后20万行作为测试集,前面80万行呢作为训练集。

。然后训练级呢是。그。

付20万。Yeah。啊,不不。是从从头开始到付20万。然后测试集。

这集是后面的。这些不要了。は。然后呢,我们把测试集。和训练集分开预测。Yeah。그。然后打印的时候也是打印两个。就是我们做机器学习的问题的时候,呃,一定要把训练集和测试集的误差一起打印出来。

这样才好分析问题。Yeah。测设计。Yeah。我们把这个。嗯。😊。

复制复复制到前面来。就不用写那么次嗯。所以我每次在训练前呢打印一下。

Yeah。把最后一个删掉。嗯。啊,应该应该可以了吧,我们再跑一下。

哎,这次好像挺顺利的,训练训练集和测试集都都减小了,而且减小的不比较明显。

Yeah。Yeah。我们再多运几轮看看会出现什么情况,大家可以分析一下。

看起来是跑不动了。

Yeah。一般情况下呢,如果我们的模型比较好的话,我们至少也可以让训练级。可以让训练级的呃那个。那个误差变得很小,因为我们这里的情况,大家看训练集和测试集之间的差距不是很大。

所以呢还没有出现过拟合的现象。

如果过拟滑的过拟合的话呢,我们待会可以调一下参数,让它出现过拟荷,看看是什么情况。

因为现在没有出现过拟盒,而纯粹的就是我训练级下不去。呃呃,但我不确定这个这个这个训练题还下不下得去,现在就是下不去的情况下。😊,嗯,大家觉得应该挑哪个参数,可以让训练机再下去一点。

就是你这时候可以先不管测试集。因为没有过拟合的现象,然后你就要想办法调参数,让。

对有同学说调K对吧?那K是调调大还是调小呢?如果如果单纯的想让训练级下去调可以调大还是调小。对我要把K调大一点。😊。

因为我要我要。让让训练级单纯的变小,其实就是我想象的过拟盒过拟盒,我要把电那个模型调的复杂一点。

就把它调大。看一下效果。大家看这是什么问题啊。😡,这应该是溢出了。

一说的呢,一般情况下就是我的步长太大了。所以我。加个零看看。

嗯。

哎,你看这一次。

一下子就比刚才最最好值接好了很多。刚才在1。1的时候就停住了。

对吧。就次一下就变成1。021。03了。

啊很想我。再抛几张看看。嗯。

大家注意这里有一个现象,就是那个如果我没弄错的话,我前一个是训练级的误差,后面一个是测试级的误差。

就是有时候测试级的误差可能会比训练级的会小一点,这个是正常的。

对,有了FM就是特征工程要做的东西就少了很多,你再也不需要手动做交叉了。你只要把原始特征处理好就完事了。

在原人当能处理好就完事了。如果预测效果好了,怎么使用预测好的模型?你你这个怎么使用是啥意思啊?你说你如果是说在线上怎么使用的话,那你这个模型我说的FM模型可以用在召回阶段,也可以用在排序阶段。

那最直接的就是用在排序阶段吧。那你预测出来评分,然后做排序就好了。

好,这个太顺利了。我我觉得我们是我想把它。造出一个过拟合的效果。大家觉得我怎么样设置参数,能把它搞成过拟盒的。

嗯。对。数据我们就不变了,就还是用这个吧。这个数据集可能确实不容易过拟合,但是我们就是能观察到一些趋势就行了。这位同学说的很好,我不要正则向。对。我不要真能像。

看看效果。

如果大家有疑问,为什么不用智能相机能过拟盒的话。

然后可以提出来。有稍微多看几轮。

4。13差不多,这个数据看来真的不容易过离合。

对。

说明这个数据集就是质量太好了,这个是因为是mobilline挑出来的数据集,然后它的。这样我们如果想让他看到。Okay。你说的统计客征如果是是指那些次数吗?访问次数。有浏览次数关于次数的这些特征呢?嗯。

这个s这个事情呢,它影响的是收敛速度。然后呢,它跟过敏合。呃,不会不会不会说影响过你喝。但是我们先可以先看一下这个的效果。比如说我们把这个东西设的特别大。

设别大的话。它的效果就是跑偏了呀,压就跑过了,跑过头了,看看看看结果是多少。

你直接直接一出了。然后。

0。1。

嗯。Yeah。Yeah。Yeah。

Yeah。그。我怎我们怎么一下就选到了最优值呢?

Yes。所以实验这个就不成功。你你如果是把它弄的特别小的话呢,这个效果大家也可以想到就是那个。我我刚才设0。1是不行的。

0。07。

P。

又失败了。好咩。

照这个样子,想到过你河就比较难了。嗯,真的就只能说把数据弄少一点,不过那个那个我们就不测试,我们再测试一个参数,我把这个K改成30。

看看会不会有过拟河的现象出现。

Okay。Yes。训练数据少是过拟合,石灰是容易过你合。

训练数数据少是容易过拟合。

而不是请你喝。你如果只有一个训练数据,那我预测的可准了,我可以预测误差为0。

对吧。没有用。

嗯,看来是不行了,这这个只能说这个数据级的。质量太高了。哎,你那个这位同学又说反了,模型复杂的时候是容易过你合。模些越复杂,越容易过你去。对对。模型越复杂,越容易过硬合。你想想那个例子。

我总共9个数据点,然后我用一个9次函数,我是可以精确的过每一个点的。但是我用一个一次函数呢,大家就可以拟合出一个差不多的直线。所以说你的模型复杂的话呢,是会过内合的。性别年龄那个。呃,不是。

FM是可以把所有特征放进去的。但是你要把所有的风同时放进去呢,我们实现的要要稍微复杂一点。😊,嗯,这里我们只是用到了用户ID和电影ID。所以呢其实它是等价于SVD的,就是所谓的最原始的SVD模型。

也就是我PPT里面那个。呃,就是那那个呃那那个链接上面那个那个模型最原始最原始做nextflix比赛,一直盘踞前几名的模型,就是我刚才写的这个。如果大家早生十年的话,十几年的话。

用这个模型说不定可以拿好多钱。嗯。好吧,那今天就先调到这儿吧,我们。

我待会儿把这个代码发给大家,然后呢,数据集我就发个链接给大家,自己去下载就可以了。

你看我们这我们这里总共就这几个可以变的地方。😊,就是K,然后还有初始值,还有这个我们这个数据质量太好了,他对这些参数都不是很敏感。都能收收敛到比较好的那个部分。然后线性部分这个大家感觉就自己加吧。

因为它比这个因为加那个比这个要简单。就相当当于就给大家一个作业,大家自己加线性线性的部分,然后就看看效果怎么样。对。我们写的这个简单模型里面就没有什么可以调的了。

Yeah。嗯,最后这位同学讲这个呢嗯差不多是这个意思,但是其实不是SVD不需要年龄性别这些特征。是SVD,它加不了多的特征。他加不了别的特征。Yeah。分装裤,待会儿待会儿我那个现在就可以找。

等我说完这段话。😊,SVD是加不了其他的特征。就最开始出现SVD这个算法的时候,大家想的都是去那个分解平分矩阵。那我我还有好多数据用不上呢。用户的年龄性别,就你说的这些我很想用,但是我用不上。

很长一段时间内都没有人想通怎么去用。就是用户的其他特征,还有电影的标签特征,怎么样和SVD结合起来用。你知道吗?不是说。不是不需要用,是想用,不知道怎么用。就是我说的就是一层窗户纸。过了好多年。呃。

FM应该是哪一年?10年左右吧,10年左右。嗯,从006年到1也就45年时间。终于有终于有一个人就死的把这事想清楚了。然后提出了这样一个统一的FM模型。

要提出来你你如果从前面我说的从信息回归到二次回归去理解的话,其实是一个很自然的一个一个一个演化。但是就是大家都没想清楚这个事儿。在过在那个10年之前的56年之间,大家都致力于设计不同的矩阵分险模型。

比如说SVD加加这样的模型。然后写重复的代码,就没有人想清楚怎么样统一的。不管用户有多少特征,不管电影有多少特征,哎,我都加到我的矩分分解模型里面去。只有FM做到了。

另外这个同学总是执着于找FFM的封装库,我都我都说了,你去github找一堆。

그。你看你去找一下。嗯。各种语言的都有。

그。可以再去研究一下。拜拜。这他还不上。Yes。还有FFM的实现。Yeah。啊,有有有同学问到一个关键的问题,嗯,LFM就是引语音模型或者叫引引音子模型。LFM是一大类模型。就是银语模型有很多很多种。

然后FM只是其中一个。你比LFM就是一类算法。比如说我说聚类算法。那剧律上还有很多呀,那有开面,有高速混合,对吧?这些都是具体的分类算法。然后FMLF模型是是一类模型。

就说凡是你这个模型里面包含隐隐藏的这个就是引变量的,或者叫隐或者叫隐叫什么叫引因子吧,它都叫这个模型。sse里面的LFM其实就是FM嗯,我那我不是很确定啊,我我们可以去看一眼。Yeah。嗯。

ent套里面有SVD,还有啥?没没有没有你说的叫它称之为LFM的模型啊。没有吧。Yeah。所以你不要看他叫什么,你你你你在提LFM的时候,一定要去看他说的LFM是是表达什么意思啊。

比如说你你说矩阵分解模型,矩阵分解模型是一类模型。但是很多人拿它特指SVD啊。你看这里面有SVDSVD加,它都是矩证风险模型。但是有些文章里或者有些作者,他把他提到举证风险的时候,特指SVD。

然后像你说的这个英语模型,它在它的课程或者是它这个场景里面,它特指某一个,比如说就特指FM。是或者可以直接特制SVD。嗯。所以你要看它特指的是哪个东西,你直接拿出来说FFM的话是不确定的。

它是不确定指向某一个算法的。因为它是一大类算法。好吧。大家如果没问题的话呢,真的可以去自己实现一个。今天给大家演示这段代码,其实就是说这个很多机器学习的段代码其实就是挺短的,比你写了很多。

可能刷的let code要短。그。所以没事,自己多实现几个算法。好,如果没问题的话,今天就这样。然后本来是要给大家看一些那个就是呃。就是矩阵呃,不是不是呃,就是推荐系统的那个框架的。然后我们下次课吧。

下次课一起再过过几个那个推荐系统的事例。行,没问题。咱们今天就这样。

有问题线下找我。

posted @ 2024-10-23 18:36  绝不原创的飞龙  阅读(7)  评论(0编辑  收藏  举报