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群。若有錯誤之處,歡迎指正。