文科生學Python系列13: matplotlib繪圖/條形圖

第七課 - 數據可視化

本課內容:

matplotlib 繪圖基礎

? ? ? 函數曲線的繪制

? ? ? 圖形細節的設置

案例分析:銷售記錄可視化

? ? ? 條形圖

? ? ?繪制多圖

?? ? 餅圖

? ? ?散點圖

? ? ?直方圖

seaborn 數據可視化包

? ? ?分類數據的散點圖

? ? ?分類數據的箱線圖

? ? ?多變量圖

回顧:在之前課程中, 我們已經接觸到了數據可視化

在第五節課中,我們通過pandas的plot函數對鶯尾花數據進行了可視化。我們繪制了根據品種分類的散點圖和箱線圖。

在第六節課中,我們使用matplotlib繪制了姓名變化趨勢圖,并通過plt的各種選項對圖形進行了美化。

上述例子中可視化都是基于matplotlib來展開的,在本次課程中我們將詳細演示如何使用matplotlib

matplotlib 是Python編程語言的一個繪圖庫,最初由John D. Hunter撰寫。

與Python的深度集成

風格與Matlab接近

官網:http://matplotlib.org/

matplotlib例圖


老師說,我們為什么今天要上新的 matplotlib 的繪圖呢,因為之前學的鳶尾花散點圖用的是Pandas里面自帶的plot圖,在分類數據的分析上,之前學的方法顯得冗余了。為了更好的可視化,不冗余!我們來學新的!

matplotlib 繪圖基礎

導入數據包,設置基礎

以上還是一樣設置基礎數據,每一次都要導入的numpy和 pandas包,不導入后面會跟你說沒有定義,識別不了的哦~ 設置圖形的格式是 retina 的清晰度。運行之后,我們來正式繪圖吧!

在matplotlib 中,繪制一個曲線圖,可以使用plt.plot這個函數,在正弦函數中,主要的是x和y軸兩個軸的數據。所以我們需要先設置x 和 y 。

我們用numpy中的arange函數,設置的是從0到5,間隔為0.1之間的數據。專業點來講,0.1好像叫步長。當時上課這個語句一晃而過,我沒看懂是什么為什么括號里面有三個數字,回放聽終于明白了。。。明明是學過的啊??????

x, y=sin(x)

突然覺得,中學時代不會Python真可惜,或許時不時用它來解決數學問題,數學成績就沒那么差了。周三上課的時候余老師一講到正弦函數我就有點頭大,幸好不是要我計算呀!

plt.plot(x,y)

看到這里才發現,x 和y 用的都是 np 的函數,在np里面定義賦值。為什么不是pandas呢?

老師說因為我們前面設置過自動顯示圖片(終于明白第一張圖的 “%matplotlib Inline” 的作用了。。。),所以這里直接輸入語句,按輸出,就可以看到結果了。我們也可以設置成手動顯示圖片,看下圖:

手動顯示圖片

plt.show( ) 這個語句,設置手動顯示圖片,而且這里沒有 OUT這個顯示了。其實這個我不知道有什么用。

接下來又是(我不懂的)美化啦!

增加 color='g',marker='.',linewidth=2

把函數線的顏色設置成綠色,上課的時候我說為什么它知道g就是綠色啊!老師說用的 green 比 grey 多,所以系統會默認 g 是 green。上課講的時候可沒有color=g 啊,老師用的是簡寫,直接在 plt.plot(x,y) 中的右邊括號里面加上逗號和 'g . -' ,然后就是綠色?點線條了。

現在看到的圖兩軸還是有些是空白,所以需要美化,縮減空白,這里用的是我們第六課用的方法:

xlim,.ylim

plt.xlim(0,5) 和 plt.ylim(-1.1,1.1) 的使用可以讓區間空白改變一點,這次老師教了一種新的方法:

plt.axis([0,5,-1.1,1.1])

plt.axis([0,5,-1.1,1.1]) ,和上節課的xlim, ylim 使用結果一樣,這個語句更短,先定義 x 軸的范圍從0到5,再定義 y 軸的范圍,所以在圓括號里面,有一個方括號,包著四個數字,分別表示兩個軸的范圍。

要是我們需要清晰看到一個點所在的橫縱坐標,需要用網格線進行更精確的定位,在那個點標明文字:

plt.grid(True)

plt.grid(True) 指的是網格線存在哦。

plt.text(3.1,0.3,'sin(x)') ?,指的是在坐標(3.1,0.3)的位置上加上文字說明 sin(x)。

回顧例一,用plot 函數得到一個基本的曲線函數,然后用各種細節設置,讓整個圖變得更加飽滿,包括標題/橫軸/縱軸/網格/文本等設置,這樣的方法稱為函數式的編程,這是模仿matlib的作圖方式。與之相對應的還有面向對象的作圖,它對細節的控制會更加豐富,但對初學者的掌握能力來說,學會函數式的編程比較適時。


例2:繪制 y=x, y=x^2, y=x^3 三個函數的曲線

y=x, y=x^2, y=x^3

我在看預習資料的時候,看不到運行出來的圖,plt.plot(x,x,x,x**2,x,x**3) ,這一句看起來太復雜有點可怕,然而它的意思竟然是,里面的6個數字分為三對xy軸的數。三個函數的x 和 y 竟然可以全部擠在一起,厲害了。

要是想要更好的區分這三個函數曲線,可以用一些設置將它們變得更有辨識度:

plt.plot(x,x,'r--',x,x**2,'bs',x,x**3,'g^')

上課看老師運行這一步的時候,驚呆了。這里就是上面提到過的簡寫了,具體代表什么,# 后面已經說明了。接下來還是繼續美化顯示的圖片了,大家可以自己做一下啦!這里不展示了。

小結:

上述代碼展示了matplotlib的一些基本功能,我們可以通過使用plt自帶的各種函數來控制圖形的細節,比如是否加網格,坐標的標簽等等。

我們在后續課程中還會向大家展示其他常用圖形

案例分析:銷售記錄可視化

導入并觀察數據

每次看到數據導入我就特別害怕,因為每次都會卡我很久,久到我會想“要不這文章就這樣吧,老子不寫了?!?每一次的坑我都記得非常清楚,紅酒質量的,鳶尾花的,全美嬰兒姓名的,這次是銷售數據。

這次卡了多久?

一小時30分鐘。

讀取數據失敗的我,拿起等了我3個小時三明治,一邊吃一邊苦悶地想,這樣的事情真是太丟人了啊,同一個坑,掉第四次。吃完這次終于上網查怎么在jupyter導入excel數據了(以前我都在干嘛??。┑遣]有查到要的答案,終于在我們課程的討論區,看到一個同學回復的答案!老淚縱橫?。。?/p>

怎么導入數據到jupyter

試了一下,上載成功的文件在jupyter打開是一片空白,而且把這個空白的文件下載到電腦了,我以為操作出了問題,試了幾次,一模一樣。把代碼敲進去試著運行,竟然!成功運行了。。。詭異!

讀取excel數據文件

這是一份一家公司在某個時間段段交易數據。行首對應的分別是客戶賬號/公司名稱/商品貨號/每次交易的購貨量/每個商品的交易價格/交易總額/交易時間。

要是你是一個數據分析師,想要在這份數據里面得到一些信息,你會從哪方面著手呢?

我們可以用之前學過的一些函數進行對整份數據進行分析:

df.info()

這是一份有1500條信息的數據,沒有缺失值。

查看與之交易的公司數量

要是需要看與之交易的公司有哪些,可以把上面運行語句的 len( ) 去除掉。

要是需要看某家公司的交易量,也是可以用函數進行輸出的:

Barton LLC交易量(1)
Barton LLC交易量(2)

這個輸出比較長,分兩張展示首尾,最后一行可以看出,一共82筆交易。

銷售額最高的10個公司

交易總額和交易次數的輸出

先用語句求出我們要的數。套路都是我們之前學過的:用groupby分組,也就是找到交易量的公司,先圈出范圍“name”,然后是“ext price” 。然后使用agg進行聚合運算:sum求交易總額,count計算交易次數。

但是在上面我們可以看到,行首的格式不是很對,這里需要調整一下:

reset_index 重置索引

這里在前面一行加了 ' \ '這樣的符號,老師說這樣加上去可以讓它換行,看了結果,應該是讓name 這個詞在行首回到了好看的位置。reset_index 重置索引,里面寫的 “在這里取消了name作為索引”,我沒理解明白,也就是前面是用name來索引的?用name來索引和這一步的操作,作為索引來說,有什么不同?

這時候我們已經得到銷售總額的數據了,但是我們的題目是需要銷售總額前十的,所以我們需要對銷售總額進行排序。

sort_values進行排序

這里學到一個新的函數了,用 sort_values 進行排序。

好吧,前十還沒出來:

top10

這一步加了挺多東西上去的。重新再句首賦值 top10,后面輸出 top10。在第27條輸出了排前的銷售額,才能直接在這一步的第二行代碼最后直接使用切片的方式 [:10] 來運算。

然后是對行首名稱對修改,把首字母都大寫了,替換的方式是使用字典的鍵值對,格式是 {之前的值:替換上的值} ,老師運行的第一遍沒有加上inplace=true,結果就是并沒有修改成功,然后解釋,因為rename那一行算是里面默認的副本,要是沒有inplace=true ,那是運行不成功的。

我們總算把銷售額前十的公司輸出來了!

條形圖

top10公司銷售總額的條形圖

plt.barh(np.arange(10),top10.Sales,height=0.5)

新的圖!之前我們學過有scatter散點圖,plot折線圖,還有啥來著?今天的直方圖是bar,哦,垂直的是bar,水平方向的直方圖是barh。

所有的代碼,其實都能看懂。但是要我自己不偷看打出來,真的是。。。心虛。

添加標題和橫縱坐標的說明。并且,為了讓圖看起來更加知道相對應的值是什么,我們修改了坐標的刻度:

plt.yticks(np.arange(10),top10.Name)

覺得單看這個圖好專業啊!這時候余老師講了上課的第二個“冗余”,就是圖和代碼之間那串黑體字。這時候終于能夠確切理解 冗余 這個詞的表達力!要是不想看到這些多余的字,我們可以這樣做:

plt.show()

有一種,把多余的毛發剃掉的感覺一樣?。。。。?!清爽!

然餓,老師這時候又去改X軸坐標了:

plt.xticks

其實這一段不是很明白,替換掉的值,不像上面用字典來替換,用的是兩個列表,后面一個列表里面的元素還是字符串。這是我們之前學過的??疑惑。

這個圖的風格是默認的風格,老師說可以讓我們嘗試一下其他風格,選擇之前看看有哪些是可以被選擇的。這樣的東西竟然都有語法,太可怕了?。。?/p>

plt.style.available

然后老師選了 ggplot,據說是 “愛原冢(音譯)”的風格,來看看吧

plt.style.use('ggplot')

默認顏色變了,而且還有底版了:淺灰色+網格。


作業7-1:

模仿上面的例子,畫出交易總數最高的10個公司的條形圖。

提示:可以使用sort_values(by= quantity) 來實現。



啊啊啊,血槽空了,我去補補血,剩下這兩天盡快更新!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容