8.16 第四课 Numpy入门
作业:
作业1:
生成一个3行5列的数组,元素值从1到15排列
1. 取出其中的第1行,第3列元素
2. 取出其中的第2行到最后一行
3. 取出其中的第1行到第2行,第1列到最后一列
4. 取出其中的第0行和第2行,第三列
作业2:
给出一组学生姓名,和他们对应的成绩,存储在下方数组中。请计算以下问题:
1. 找出不及格的学生姓名(提示:使用布尔型索引)
2. 找出最高分、最低分,平均分数
3. 将数值成绩转化成字母成绩,大于等于90分为A, 70-89分为B,小于70分为C
数据如下:
names = np.array(["Xiao Ming","Xiao Zhang","Xiao Gang","Xiao Hong","Xiao Pang","Xiao Wu","Xiao Dai",
"Xiao Qian","Xiao Fan","Xiao Wang"])
scores = np.array([ 91, 68, 84, 55, 95, 81, 67, 82, 86, 78])
作业答疑Q&A目录:
1,如何读取文件
2,代码运行出错:转换数组
3,代码理解:randon
4,代码运行出错:In[*]
5,代码运行出错:arr
6,如何读取文件
7,如何读取文件
8,代码理解:%是否支持小数运算
9,代码运行出错:中英切换
10,代码理解
11,如何读取文件
12,如何读取文件
13,代码运行理解:遍历
14,代码理解:dtype
15,代码运行理解:round
16,代码运行理解
17,代码运行出错/死循环
18,代码运行出错
19,如何读取文件
20,代码运行出错
Q 1 :请问,第四课的课件除pdf文件以外的两个文件如何下载,之前老师讲过,给忘了
A:https://github.com/DataLearningTeam/PythonData。里面有个绿色按钮,clone and download。选择其中的download zip即可下载,每次下载的内容都是全部的。
Q 2 : 如上图(图4-1),我转换了一个数组,为什么显示出来的格式是‘0’呢?
A:第一行是不是打错了,np.arry = np.array()
Q 3 :老师,书上92页: data = randn(7,4) ,这句输入后执行显示randn没有定义。这是还要用什么库么?
A:书中有些代码会省略包的导入,如这里省略from numpy.random import randn,没有这句话的情况下,可以使用np.random.randn(7, 4)
Q 4 :老师In[ ]这里面变成“*”而不是序列数字了怎么办?
A1:建议重启一下kerenl,产生这个原因可能是在之前遇到过死循环,或者因为些外界因素导致kernel环境停止。
A2:我Google到的解决方法是,点列表Kernel然后单击Interrupt。,然后按Shift + Enter。
Q 5 :使用“arr”报错。。。请问是什么原因
A:看下英文描述,试着到网上找下错误原因。
NameError: name "arr" is not defined
Q 6 :请问如果我自己要重复那个红酒案例,如何读取‘winequality-red.csv’这个文件?是把那个文件拷贝到自己的github里还是拷贝到本地某个文件夹?
A:拷贝到自己的本地文件夹。
追问Q:下载到本地一个文件夹,解压,按视频中的代码执行程序还是显示winequality-red.csv not found,该怎么办?
A:保存到和你要执行的那个ipynb相同目录下
Q 7 :请教老师,我想下载这个csv文件该如何下载。pdf文件点击进去后有download键可以下载,但csv文件点进去没有啊……
A:直接通过https://github.com/DataLearningTeam/PythonData的clone or download下载
追问Q:这样好像下载的是全部文件?我只想下载这一个csv文件的话,该如何处理呢?
A:进入到每个文件中,然后找到raw,右键选择"链接存储为"
Q 8 :求公约数那题,如上图(图4-2),如何求带小数的公约数,是不是%根本就不支持小数运算
A:小数的公约数怎么定义,定义小数哪一位能被整除?而且小数是有精度问题,计算机表示的小数和真实的数字有差别。这点不用完全理解。可以把小数转为整数,求公约数,然后在转化为小数。
Q 9 :请问上图中(图4-3)列表中的数值不支持汉字,是这样吧?
A:支持的。第一行“1月”后面那个逗号是在汉字输入法下的,是全角,改成半角就好了。
Q 10 :讲解作业部分,有两个问题,请老师帮忙回答下,多谢!
1. 没懂这个关系(图4-4),x[1:2] 可以理解为列表里的第2行[d,e,f],之后的[0]位应该是 d 啊,然后又来个 [1]..不懂了,这个[0]没有意义吗?
2. k= max(n1, n2) 不是限制了k只能是n1与n2之间的那个最大数吗?
A:第一问自己打一遍印象比较深刻,看看x[1:2]是什么x[1:2][1]又是什么。x【1:2】出来是1行三列的array。
第二问,是设定k从n1和n2中较大的那个数开始算起,这样比较省时间,毕竟就算你从1开始,1-max(n1,n2)这个区间里的答案是错误的。在循环里,k被赋予新值
Q 11 :图4-6,想把一个csv文件导入进行处理,因为我所有的数据都是通过excel表格。但在网上找了很多方法,都出现各种各样的问题。下面这个能看懂一点。请老师能帮忙看看能不能用吗?我的csv文件放在附件里。
A:对于numpy,csv文件可以使用genfromtxt方式。
后面介绍pandas,csv也有专门的方法读取。
你介绍的这种方式需要导入csv包,也就是需执行import csv
Q 12 :老师帮帮忙,给点提示也行。我一直读取不了红酒的文件。不知道是储存位置错了还是文件下错了。一点思路都没有啊。
A:把这个文件放到notebook同级目录下。
Q 13 :最后一题的最后一问方法一不知道为什么没有报错(最后一张图)?求解
A:你把scores遍历了,每一个应该是 i ,所以应该是 if i >=90 : 我跟你的方法一样,也犯过同样的错误哈哈
Q 14 :上图(图4-8),为什么输出的值的末尾出现dtype?
A:没关系的 使用print就不会打印dtype了。U1表示numpy里面元素为字符串长度为1。
Q 15 :平均分怎么保留两位小数,使用round为什么没有用呢
A:你没贴round失败的图,我不确定我猜的对不对。试试round(a,2) a是要round操作的数,2是保留2位小数,必须要设置保留几位小数
Q 16 :np.where(scores < 70, 'C', np.where(scores > 90, 'A', 'B'))虽然写出来了,而且运行结果也对。但是对这个方法觉得不理解。
问题一:作为where函数,后两个参数应该是类型一致的。第一层where的第二个参数是'C',那第三个参数应该也是一个字符。但是np.where的返回值是一个array,这怎么可以作为一个参数传入?
问题二:第二个参数的返回值是一个数组吧?为什么是一个字符串呢?
A1:问题一:并未规定后面的两个参数一致。只是np数组要求类型一致。为了保证这一点,第二个参数虽本身不是字符串,但是它的计算结果是字符串。
问题二:这我也不太懂了,我也是从网上查到使用嵌套的,使用if else就很容易理解了,但也不是特别理解。
A2: 老师说了,其实第二三个参数都是数组,只是之前利用了广播,自动扩展成了数组
Q 17 :大家能不能帮我看看(图4-9),print 姓名那行,老说我格式不对……我定义了str啊?
还有个问题,出现死循环*,改完之后你们只用restart就好使吗?我要用restart&run all才可以,可我记得老师上课说用restart就行的……
A1:restart ,然后运行你要用的那一行以及和它相关的,你的函数定义和运行函数命令在2个 in[ ] 里,restart相当于内存格式化,是不是只运行了运行函数那个 in[ ] 所以不起效果。
A2: print把加号改成逗号试试,或者你说把print换成return
Q 18 :图4-10,请问我这错在哪?
A:if冒号少了
Q 19 :请问要把红酒案例那个文件储存到哪里才可以像老师一样打开?或者有别的方式打开吗?
A:和你写的python文件(.py)在同一目录下,如图4-11。不需要打开,python里读取就好了。
Q 20 :如图4-12,为什么会说 np没有被定义呢?
A:有没有import numpy as np?或者有没有中途restart过?把import那个运行一遍再运行你现在出问题的那个,试试
第四课答疑Q&A结束啦!以上整理内容来自新生大学解密大数据团队的Python数据分析课程的作业区和讨论区,还有QQ群。若有错误之处,欢迎指正。