9.6 第七課作業
作業1:
模仿課上的例子,根據公司小數數據畫出交易總數最高10個公司條形圖。
提示:可以使用sort_values(by= quantity) 來實現。
作業2:使用seaborn包畫圖
畫出花萼寬度和長度的散點圖,使用品種劃分數據
畫出花萼的長度的箱線圖,使用品種劃分數據
作業3(選做):波士頓房價數據的可視化
from sklearn import datasets
boston_dataset = datasets.load_boston()
著名的機器學習數據集,大家嘗試觀察數據,提出自己的觀點。建議的作業方式依然是以文章鏈接的方式來做。
答疑Q&A目錄:
1,代碼理解:max函數
2,代碼理解:subplot(121)
3,代碼理解:inplace=True
4,代碼運行
5,代碼運行出錯:讀取文件
6,代碼運行出錯
7,代碼運行出錯
8,代碼運行:填充圖像面積
9,代碼運行:圖表
10,代碼運行:刪除圖表字符
11,圖表理解:離散化
12,代碼理解:tick / barh
13,代碼運行出錯:無效句法
14,代碼理解:空格
15,代碼運行出錯
16,代碼理解
Q 1 :我自己實現了一下agg自帶的max函數。有個問題是,之前老師有些max=None,但是這么寫報i和max不是一個類型。有點郁悶。
# 手動實現max
def manual_max(arr):
max = 0
for i in arr:
if (i > max):
max = i
return max
#manual_max(iris.sepal_length)
iris.groupby('species').agg({'sepal_length':[manual_max]})
A:對,不是一個類型,所以我有個判斷
if max is None:
max = i
類似這樣的操作。
Q 2 :在一張圖上畫了兩個圖,就是那個aaa_subplot。我的問題是,ax1 /ax2只是在產生的時候得到,但是這兩個變量在后面的函數中并沒有使用。那么怎么知道是畫在第一個地方還是畫的第二個?
A:ax1后面的subplot(121)代表一行兩個圖的第一個圖
ax2后面的subplot(122)代表一行兩個圖的第二個圖
Q 3 :第七次課程里面,求銷售額最高的10個公司那個例題,老師用的更換名字的代碼,最后面的inplace=True的作用是什么啊?我把inplace=True刪掉,輸出的結果也是一樣的。
A :inplace=True相當于把前面修改過的名字傳回到原數據中。
Q 4 :第6課選做作業里面,如何表示非星期六或星期天?求解答。
A :tips[(tips[day] != "Sun") & (tips[day] != "Sat")]
Q 5 :讀取文件的時候出現了上圖(圖1)錯誤提示,怎么辦?
A :從QQ群里面下載文件,估計你這個文件有問題。
Q 6 :我用自定義函數agg,為什么會報錯?對照例子看了好多遍,都沒發現問題(參照上面兩個圖)
A:首先,第一個圖返回的不是一個統計量,非標量,需要使用更通用的apply方法,還有一個問題,arr.mean(),這個是求按分組求各列的平均值,但是species是字符串型,無法計算平均值。
二圖,錯誤原因也是因為返回的值非標量,需要使用通用的apply方法,而不是agg。
追問Q:還是沒弄懂,我按照老師的方法,只是定義的函數我改成了delta_iris,而不是range_iris。結果就出錯了,難道和定義的名字還有關系嗎?我徹底瘋了,這個問題困惑了4個小時了。過不去了…………
A:和名字沒關系,主要是理解apply和agg的區別,多嘗試不同的案例試試。
Q 7 :按老師的操作,列名變成了數字,圖4,這是什么原因?
A:注意,這里columns寫錯了。
Q 8 :作業7.1與7.2還是簡單的,主要就是把例題中的名字換一下再運行下。目前有個關于圖像的填充問題一直沒得到解決:y=sin(x)如圖顯示(圖5),如何填充這個圖像下側的面積?
A:試試如下代碼:plt.fill_between(x, y, y2=-1),是不是你想要的效果。
Q 9 :問題,超過9張圖,能畫在一張畫布上嗎?(圖6)
A :可以的,你可以試試,三行三列。
Q 10 :想用.show()把sns箱圖結果里的字去掉,未果,如上圖(圖7),求教sns里怎么去掉?
A:可以的,要把plt.show()放在最后一行
Q 11 :選做題,1看下房價和犯罪率的關系:其實不大懂數學和讀圖,猜一下這個圖是房價30-50之間的犯罪率最低,房價低于30或是最高50的地區比較容易發生犯罪,所以買房子盡量避開貧民區和土豪的地。。
A:如果你要畫房價與犯罪率的箱圖,首先需要把房價按區間分組離散化,比如0.1-0.2之間是一組,不然這圖感覺就是奇葩的散點圖,什么也說明不了
Q 12 :問題:圖9,標注1,為什么這個tick改的就是y軸呢?也沒指明x還是y
標注2,為什么這里的plt.yticks, 只把第二圖里的y軸改掉了,格式上沒有縮進,程序怎么識別的是要改第二個而沒把第一個圖的y軸也給隱藏呢?
另外,barh(x, y)里,x是不是x軸,y是不是y軸?貌似由bar變成barh,x和y跟著反過來了。。。但是下面的plt.x/yticks,還是按照barh之后的x/y來的。。
A:label的意思是標簽,柱形圖的標簽只存在與一個位置,另一個是數值啊,所以不用指定。
visible為什么不影響第一張圖,你可以理解為有個畫筆吧,當調用了add_subplot(121),相當于畫筆開始畫第二幅圖了。
barh和bar的方法定義你可以看下,他們的變量都不是表示x, y,也就是并沒有說開頭兩個參數是代碼x、y,只是表示一個是標簽一個是數值。
Q 13 :這里一直提示 America那里有一個 無效句法,但是我不知道問題在哪里。哪位同學可以幫我看下啊
A:變量名不能有空格,可以用North_American代替North American
Q 14 :使用unique統計的時候,這里有空格(圖11)。是因為這里不是變量名,是dadaframe的一個數值,所以允許?
A :是的。
Q 15 :我遇到一個人均平均消費水平的問題,最后一列的結果總是不對,有人能看出原因嗎?(圖12)
A :取值運算中 . 與[ ] 不一定等價 。改成圖13.
Q 16 :為什么這個結果顯示不是0呢?(圖14)
A:圖15,我這么理解的,是內部計算是保留精讀的問題,這里math.pi*360/2pi 不等于180,所以結果不是0。math.asin(np.sin(math.pi))用反函數求了對應的弧度,和正弦值相等,符合弧度無窮小時,正弦曲線呈現y=x的性質。不知道這樣夠不夠說明清楚了。嘗試用了degree轉換,但沒成功
以上內容整理來源:新生大學 —— 解密大數據團隊的《Python編程&數據科學入門》線上課程 第七課《Matplotlib入門》的 作業區/討論區以及QQ群聊記錄。