Python數(shù)據(jù)分析入門(一)——初探數(shù)據(jù)可視化

前言

靜下心算算恤筛,當程序員已經(jīng)有好幾年了官还,不過自大學時代開始,學習對我來說就是個被動接受的過程叹俏,學校的課程妻枕、當時熱門的移動端開發(fā)、數(shù)據(jù)庫的學習粘驰、web學習屡谐、PHP后端學習……需要做什么我便去學什么,到了今天蝌数,突然意識到我是不是該給自己一個明確的發(fā)展方向了愕掏,畢竟歲月不饒人,96年的小朋友都參加工作了顶伞,不精通某一領域始終都會覺得渾渾噩噩饵撑。因為對大數(shù)據(jù)比較感興趣剑梳,而這方面的知識挖掘空間和發(fā)展空間都很大,再加上以前也摸過Python滑潘,所以給自己定了個自學計劃垢乙,也寫一些筆記類的博客做個記錄與學習分享。關于Python的基礎語法這類的東西就不在筆記中額外開文章寫了语卤,我會在代碼示例中穿插著提一些Python的語法追逮,因為這畢竟是一門“腳本語言”,語法的學習并不困難粹舵。這個系列的博客我會盡量地勤快些钮孵,算是對自己的敦促,開始的部分是結合《Python編程:從入門到實踐》這本書上的例子做一些理解眼滤,下一步是根據(jù)《利用Python進行數(shù)據(jù)分析》這本書做一些學習筆記巴席。

開發(fā)環(huán)境

《利用Python進行數(shù)據(jù)分析》中開篇就說到了“你的Python開發(fā)環(huán)境是什么”的問題,作者給出的答案是“IPython外加一個文本編輯器”诅需。這樣的開發(fā)環(huán)境對于一個經(jīng)驗老到的工程師來說漾唉,無疑是最為簡潔易用的,好比我現(xiàn)在工作中诱担,寫Android代碼會使用Android Studio毡证,前輩會使用Source Insight;寫PHP會用到PHPStorm蔫仙,前輩會使用Source Insight料睛;寫web前端會使用VSCode,前輩會使用Source Insight……年輕的程序員有個通病就是過分依賴于使用IDE進行開發(fā)摇邦,我也是個年輕程序員恤煞,所以在這個博客系列中我是用的開發(fā)工具是PyCharm。在這之前我也分別嘗試了在Ubuntu施籍、Windows下搭建《利用Python進行數(shù)據(jù)分析》書中所需要的開發(fā)環(huán)境居扒,過程其實是很繁瑣的,而且使用文本編輯器寫代碼的效率……反正我水平有限丑慎,所以我的看法是喜喂,搭建環(huán)境這個過程是需要親自動手體驗一下的,而實際的生產(chǎn)中竿裂,我更傾向于使用IDE玉吁。

至于下載Python、配置環(huán)境變量腻异、下載PyCharm进副,這些都不在這里多講了。

在這一篇博客中主要使用的開發(fā)包是matplotlib悔常,在PyCharm導入即可影斑,Download的過程可能會有點慢甚至下載不了给赞,搭個梯子就行了,都很簡單矫户。

言歸正傳片迅,初探門徑

什么是數(shù)據(jù)可視化?

數(shù)據(jù)可視化指的是通過可視化表示來探索數(shù)據(jù)吏垮,它與數(shù)據(jù)挖掘緊密相關障涯,而數(shù)據(jù)挖掘指的是使用代碼來探索數(shù)據(jù)集的規(guī)律和關聯(lián)。數(shù)據(jù)集可以是用一行代碼就能表示的小型數(shù)字列表膳汪,也可以是數(shù)以及字節(jié)的數(shù)據(jù)。
——摘自《Python編程:從入門到實踐》

我們可以這樣理解九秀,數(shù)據(jù)可視化和數(shù)據(jù)挖掘都是探索數(shù)據(jù)和分析數(shù)據(jù)的一種手段遗嗽,只不過數(shù)據(jù)挖掘是以代碼為探索途徑,而數(shù)據(jù)可視化是將數(shù)據(jù)轉換為圖形鼓蜒、圖表這樣可視的形式來進行分析痹换。

關于matplotlib

matplotlib是一個Python的2D繪圖庫,我們可以通過這個庫將數(shù)據(jù)繪制成各種2D圖形(直方圖都弹、散點圖娇豫、條形圖等)。

小試牛刀

matplotlib是一個功能很強大的繪圖庫畅厢,其提供的一系列功能完善的api可以幫助我們快速地建立起我們所需的圖形冯痢,接下來是幾個簡單的例子,在這些例子中我也會穿插著記錄一下Python的相關語法框杜。

1.先來一個簡單的折線圖

①import matplotlib.pyplot as plt

squares = [1, 4, 9, 16, 25]
②plt.plot(squares, linewidth=5)
③plt.title("Square Numbers", fontsize=24)
④plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14) ⑤plt.tick_params(axis='both', labelsize=12)plt.show()

(代碼中有些行的開頭有標號作為稍后講解代碼的標號浦楣,要運行這些代碼的話先把標號刪掉哦)

這段代碼的執(zhí)行效果是這樣的:

TIM圖片20180810165530.png

先來看看代碼吧:

①導入matplotlib.pyplot模塊并賦予其別名plt,這是Python中常用的小技巧咪辱,目的主要是簡化一些名稱振劳,當然我們也可以這樣寫:

from matplotlib import pyplot

不過這樣一來,在后面調用到pyplot的方法時需要把之前的plt改為全稱pyplot油狂,運行結果不會有任何差別历恐。

②plot()方法:這里將存放了一組平方數(shù)的列表傳入plot(),它將會嘗試根據(jù)這些數(shù)據(jù)繪制出有意義的圖形专筷。再調用show()即可將圖形顯示出來弱贼。實參linewidth=5指定了折線的寬度。

③title()方法:使用此方法為圖標添加標題仁堪,實參fontsize=24指定了文字尺寸哮洽,后面的方法中該參數(shù)含義相同。

④xlabel()和ylabel()方法:為x軸和y軸命名弦聂。

⑤tick_params()方法:設置坐標軸刻度的樣式鸟辅,實參axis='both'表示同時設置兩條軸氛什,也可以指定為x或y單獨設置。

相信大家發(fā)現(xiàn)了一個問題匪凉,我們傳入的數(shù)據(jù)是一組平方值枪眉,而我們起始的數(shù)據(jù)是1的平方,但是x軸的起點卻是0——事實上當你向plot()提供一系列數(shù)字時再层,它會默認x軸的0作為數(shù)據(jù)的起點贸铜,要改變這種默認配置,只需要對代碼稍作修改聂受,再提供一組x軸的值與平方數(shù)一一對應:

import matplotlib.pyplot as plt

input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]
plt.plot(input_values, squares, linewidth=5)
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
plt.tick_params(axis='both', labelsize=12)
plt.show()

來看看運行結果:

TIM圖片20180810162200.png

這樣就好多了對吧蒿秦?

2.再試試散點圖吧

在繪制折線圖的時候,我們使用了plot()方法來接收數(shù)據(jù)蛋济,而對于散點圖棍鳖,則需要使用scatter()方法。我們直接來看看代碼:

import matplotlib.pyplot as plt

①x_values = list(range(1, 101))  # 區(qū)分list()和range()
y_values = [x ** 2 for x in x_values]
②plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, edgecolors='none', s=40)
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
plt.tick_params(axis="both", labelsize=14)
③plt.axis([0, 110, 0, 11000])
# plt.show()
④plt.savefig('squares_plot.png', bbox_inches='tight')

依然根據(jù)標號來看看代碼:

①x_values和y_values碗旅,定義了數(shù)據(jù)源渡处,分別對應x軸的輸入值和y軸的輸出值,相互間的關系為y軸的輸出值為x軸值的平方祟辟。在Python中医瘫,range()方法的含義是產(chǎn)生一個可迭代的對象,它的很多行為都與list相似旧困,比如在遍歷range(1, 101)并打印將會得到1至100的值醇份,但是它與list是有本質區(qū)別的,即它在迭代的情況下返回的是一個索引值而非在內存中真正生成一個列表對象叮喳,所以在Python3中執(zhí)行print(range(1, 101))被芳,你將會得到的打印結果是range(1, 101)而非一個從1到100的列表。所以想要得到一個真正的列表則需要跟list()方法結合使用馍悟。對于這一句[x ** 2 for x in x_values]畔濒,可能看著有些奇怪,但并不難理解锣咒,我們可以將它看成遍歷列表x_values侵状,每次遍歷時將取出一個x值將它做平方放入y_values中生成一個列表。

②scatter()方法:和上一個例子中的plot()方法類似毅整,都是負責接收數(shù)據(jù)繪制圖形趣兄,我們可以通過傳入實參c、edgecolors悼嫉、s來分別指定散點顏色艇潭、散點邊緣顏色和散點大小,對于顏色可以直接傳“red”、“blue”這種簡單的顏色蹋凝,也可以傳入rgb色值鲁纠。在本段代碼中,則是利用顏色映射(colormap)來設置顏色鳍寂,即代碼中的實參cmap改含,結合c=y_values,繪制出的散點將根據(jù)y軸值由小到大顏色逐漸加深迄汛,基本顏色為藍色捍壤。

③axis()方法:指定每個坐標軸的取值范圍,[x_min, x_max, y_min, y_max]鞍爱。

④savefig()方法:可以注意到鹃觉,在這個例子中,我將show()方法注釋掉了睹逃,改為savefig()方法帜慢,這個方法將把繪制結果儲存在項目目錄下,第一個參數(shù)指定了圖形文件名稱唯卖,第二個參數(shù)表示將圖表多余的空白區(qū)域裁掉。

運行結果當然是在項目目錄下生成了一個圖表躬柬,內容如下:

squares_plot.png

結語

這是這個系列的第一篇文章拜轨,算是簡單的起個頭,內容不復雜允青,注解也很詳細橄碾。之前說過這一系列的博客我會寫得頻繁些,所以每一篇文章的內容不會太多颠锉,但求理解細致法牲,希望在這個過程中自己的學習能夠更扎實些,讀者們也能學到些東西琼掠。最后作為讀書筆記拒垃,還是把書上這一節(jié)的小練習貼出來,大家可以試試自己敲敲:

1.數(shù)字的三次方被稱為其立方瓷蛙。請繪制一個圖形悼瓮,顯示前5 個整數(shù)的立方值,再繪制一個圖形艰猬,顯示前5000 個整數(shù)的立方值横堡。

2.給你前面繪制的立方圖指定顏色映射。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末冠桃,一起剝皮案震驚了整個濱河市命贴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖胸蛛,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件污茵,死亡現(xiàn)場離奇詭異,居然都是意外死亡胚泌,警方通過查閱死者的電腦和手機省咨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玷室,“玉大人零蓉,你說我怎么就攤上這事∏铉停” “怎么了敌蜂?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長津肛。 經(jīng)常有香客問我章喉,道長,這世上最難降的妖魔是什么身坐? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任秸脱,我火速辦了婚禮,結果婚禮上部蛇,老公的妹妹穿的比我還像新娘摊唇。我一直安慰自己,他們只是感情好涯鲁,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布巷查。 她就那樣靜靜地躺著,像睡著了一般抹腿。 火紅的嫁衣襯著肌膚如雪岛请。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天警绩,我揣著相機與錄音崇败,去河邊找鬼。 笑死房蝉,一個胖子當著我的面吹牛僚匆,可吹牛的內容都是我干的。 我是一名探鬼主播搭幻,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼咧擂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了檀蹋?” 一聲冷哼從身側響起松申,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤云芦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贸桶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舅逸,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年皇筛,在試婚紗的時候發(fā)現(xiàn)自己被綠了琉历。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡水醋,死狀恐怖旗笔,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情拄踪,我是刑警寧澤蝇恶,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站惶桐,受9級特大地震影響撮弧,放射性物質發(fā)生泄漏。R本人自食惡果不足惜姚糊,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一贿衍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧救恨,春花似錦舌厨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躏哩。三九已至署浩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扫尺,已是汗流浹背筋栋。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留正驻,地道東北人弊攘。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像姑曙,于是被迫代替她去往敵國和親襟交。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內容