案例上手 Python 数据可视化
課程亮點
- 6 個常用的數(shù)據(jù)可視化工具使用方法
- 20 個案例貫穿各個工具的學習過程
- 基于 GUI / HTML / Web 網(wǎng)站多種繪圖風格
- 中、美、日三國不同思想的制圖工具
- 從靜態(tài)到交互,滿足不同需要的圖示
課程背景
數(shù)據(jù)可視化是數(shù)據(jù)分析和機器學習的重要環(huán)節(jié),比如數(shù)據(jù)清洗、特征工程、機器學習、數(shù)據(jù)分析(特別是報告)、評估等環(huán)節(jié)都會用到“數(shù)據(jù)可視化”技術。
數(shù)據(jù)可視化同時還廣泛存在于各種商業(yè)、政務、教育等領域的業(yè)務表述之中。因為“圖”才是喜聞樂見、通俗易懂的,也是最直觀的。
不僅如此,數(shù)據(jù)可視化還是獨立的業(yè)務,在現(xiàn)代社會中有各種引人注目的操作,比如將抽象的東西“可視化”、“直觀化”等。
本課程主要向讀者介紹了數(shù)據(jù)可視化中常用工具的使用方法,并且通過多個實戰(zhàn)項目案例,讓讀者更深入地理解可視化的各種方法和技能。
作者介紹
齊偉,蘇州研途教育科技有限公司 CTO,在 Web 開發(fā)、數(shù)據(jù)分析、機器學習領域有比較豐富的從業(yè)經(jīng)驗,并在大學開設過《機器學習實踐》課程。曾出版書籍:《跟老齊學Python:輕松入門》《跟老齊學Python:Django實戰(zhàn)》《跟老齊學Python:數(shù)據(jù)分析》和《Python大學實用教程》(大學教材)。
課程大綱
課程內容
開篇詞:為什么學習可視化,應該怎么學
每一本書或每一個課程,都會有前言或開篇詞,但是,很多學習者不喜歡閱讀前言,這就大錯特錯了,因為在前言中往往會包含一些作者想要表達的核心觀點。
我的日常工作就是寫程序,業(yè)余時間也寫了幾本書,也有幸偶爾會與周邊幾所大學的一些學生分享某些技術。在與我交流的一些程序員、讀者和學生中,會提出很多關于如何學習某項技能的問題——這里指的是軟件開發(fā)或者大數(shù)據(jù)、機器學習方面,不包括諸如人際關系等技能。在這里,我把其中的重要問題和回答,整理出來,供讀者參考。
跟誰學
這里的“誰”,不僅包括“人”,還包括“物”。
先說“物”。
早先學習的媒介比較簡單,就是圖書,要學習什么知識,沒有其他選擇,就是買本書。而現(xiàn)如今,選擇就多了,除了印刷版的圖書之外,還有電子版、音頻和視頻,甚至視頻還分為微課、慕課和課堂實錄等,可謂是五花八門。那么,應該選擇什么媒介來學習呢?
很顯然,上述問題有一個大前提,那就是“自學”,即自己控制學習過程的學習。如果選擇這種學習方式,那就要檢討自我:“是否具有自我控制能力?”。判斷標準也比較簡單,那就是回頭看看在自己的求學過程中,是否運用過這種能力?如果答案是肯定的,那么面對這次自學,就會有信心、有方法了;如果是否定的,并不意味著這次不能自學,而是要為自己的這個“第一次”好好謀劃一番了。
檢討完自己,確立能夠自學,就繼續(xù)下面的操作;否則,請?zhí)^,直接找一個老師,別吝惜多花錢,從長遠來看,最好的投資是跟著老師去學。自學,并非適合任何人。
再回到剛才的問題,選擇哪一種學習媒介?
我的回答是:要了解自己,根據(jù)自己的情況而定。
比如,自己比較擅長閱讀,那么就可以選擇借助書(包括印刷版和電子版)來學習;如果看書時間稍長,就犯困,建議還是選擇視頻媒介稍好一些。但是,即便如此,我也建議要有一本相關的書,因為它能夠讓我們隨意翻閱,可以隨時解決某些棘手問題——或許搜索引擎更適合?非也!對于一個初學者,搜索引擎給出的東西太龐雜了,難以找到答案。
“物”選好之后,就要選“人”了。
不論選擇書還是線上或線下的課程,都有一些大師或名師,俗話說“名師出高徒”——更符合我們內心的應該是“大師出高徒”。因此,要找一個超級牛的人,比如在大廠工作過的頂級開發(fā)者、名校的名教授等,只要看了他們的書、聽了他們的課,就能達到登峰造極之高度,再不濟至少也要快速掌握。
這是很多人的想法,也能理解,誰不希望以最小的投入來獲得最大的產(chǎn)出?最好是“不勞而獲”。
只是殘酷的現(xiàn)實不斷地告訴我們,“大師”和“高徒”之間,不是正相關的。請看下面的思想實驗。
思想實驗是指:使用想像力去進行的實驗,所做的都是在現(xiàn)實中無法做到(或現(xiàn)實未做到)的實驗。例如,愛因斯坦有相對運動的著名思想實驗。思想實驗需求的是想像力,而不是感官。
假設某名校,有一個宇宙級的大師教授人工智能課,每年聽課的學生有 60 人,該大師在該校授課 10 年,累計有 600 名學生。如果“大師”與“高徒”正相關,那么新的宇宙級大師應該至少有幾百名。
但,上述推論與事實不符合。
“名師(大師)出高徒”,只是聽起來很好,符合個人的愿望罷了,但不是客觀真理。
什么原因?
因為他們不是專門針對你的。
所以,選“人”的標準不是看其頭銜,而是看其提供的學習內容是否適合自己。特別是“小白”,更要以通俗易懂的學習資料入手,跟著能“深入淺出”地講述的“好老師”去學。
學什么
這個問題其實很難回答。因為就編程而言,可以學習的東西就很多了,現(xiàn)在又有大數(shù)據(jù)、機器學習、人工智能等領域。
至于學什么,拷問的應該是自己,而不是問別人。檢視自己擅長什么、喜歡什么,未來有什么規(guī)劃,根據(jù)這個來確定學什么。
有的人也列出了一些非常簡明扼要的判斷標準,比如:
- 什么方向工資高,就學什么
- 現(xiàn)在媒體上宣傳什么,就學什么
- 大師說學什么,就學什么
- 招聘網(wǎng)站上什么崗位多,就學什么
是否可以據(jù)此確定學習內容,此處不置可否。還是做一個思想實驗。
假如時光倒退 20 年。在 20 年前,用上面的標準看一看,應該學什么?什么也不需要學,專門買房子(得有好爹)就可以了!
選擇學什么的確很困難。高考報志愿的時候,眾多家長都糾結于孩子要學什么專業(yè)的問題。
除了上帝,誰都不曉得未來什么樣,與其糾結某個具體的專業(yè),不如學“萬人敵”。
籍曰:“書足以記名姓而已,劍一人敵,不足學,學萬人敵。”
——《史記·項羽本紀》
每個領域,都會有一些沉淀下來的基礎知識和技能,這是要學的。此外,更重要的是“學習能力”,學習內容是增長學習能力的載體,學習能力就是“萬人敵”。
因此,本課程從始至終,會貫徹一個宗旨:提升學習能力,不是嘮嘮叨叨地訴說知識點。
怎么學
關于學習方法問題,很多書中都有所論述,此處不詳述,因為方法都差不多,關鍵是能不能執(zhí)行的問題。
學習是一個苦差事,我們從本性上是排斥的。
因此,古人云“書山有路勤為徑,學海無涯苦作舟”。
有了“肯吃苦”的思想準備之后,如下具體操作方案,供讀者參考:
- 認真閱讀書中的每句話,并且反問自己是否理解了,如果沒有理解立刻 Google 相關的信息,這就是把書讀厚的理念。
- 要理解書中的程序示例,逐行理解,甚至于逐行注釋,并且,一定要自己親自敲代碼,千萬不要復制代碼。
- 在上面的基礎上,獨立地把示例程序寫出來,并進行調試。如果遇到了問題,比如報錯了,此時應該“聞過則喜”,因為這是進步的階梯,務必對照書上的講解,反思自己寫的代碼。
- 要閱讀有關技術文檔,不論它是中文的還是英文的——這點很重要,千萬不要因為語言問題而放棄閱讀。
- 用 Google 搜索(這里不是在做廣告,我也不是‘美分’什么的,只是介紹個人的經(jīng)驗),并且不限于使用中文作為搜索關鍵詞。
如果有條件,還建議多參加一些有關技術的專題活動,比如社區(qū)活動等,不僅能擴展自己的視野,還能結交很多同道中人。
為什么學“數(shù)據(jù)可視化”
說的有點多了,現(xiàn)在才回到正題。
如果有志于在大數(shù)據(jù)、機器學習、人工智能領域從業(yè)的話,“數(shù)據(jù)可視化”是必不可少的,因此說不得不學。
接下來就會有另外一個問題:為什么要選擇本達人課作為學習資料?
那就要了解本達人課為讀者做了什么。
深入淺出闡述有關知識點和技能,同時“授人以漁”,這是核心目標。
介紹目前常用的幾種工具,當然不可能窮盡所有工具,挑選了部分具有代表性的。
- Matplotlib
- Seaborn
- Plotnine
- Plotly
- Pyecharts
- Bokeh
在講解的過程中,配以豐富的示例。
其他說明
本達人課的所有程序都是基于 Python 語言(Python 3.x 版)來寫的,需要做好如下準備。
- 準備一臺適合開發(fā)用的計算機,不論是臺式機還是筆記本均可。但是,它是否適合開發(fā)?只要不是太古老的機器,硬件方面都差不多,關鍵是操作系統(tǒng)。本達人課中的所有演示都不是基于 Windows 操作系統(tǒng)(也算是我的偏執(zhí)吧),我不習慣把 Windows 操作系統(tǒng)列位于適合開發(fā)的環(huán)境,倒是在日常辦公方面比較適合,在開發(fā)方面我習慣使用 Linux 或者 Mac OS 操作系統(tǒng)。讀者可根據(jù)自己的喜好選擇。本達人課的所有代碼,是跨平臺的,跟用什么操作系統(tǒng)無關。
- 已經(jīng)能夠使用 Python 語言編程。
- 掌握 Numpy 和 Pandas 的基本知識。
這是學習本達人課內容的前置條件。
這些都準備好之后,就開始學習。
課程大綱
本課程分為七大部分,共計 28 篇(含開篇詞和結尾)。
準備部分(磨刀不誤砍柴,第 0-1 ~ 0-3 課),介紹數(shù)據(jù)科學工程師的工作流程以及數(shù)據(jù)可視化的必要性,并且指導學習者安裝有關工具。通過這部分的學習,能夠對數(shù)據(jù)科學以及從業(yè)者的工作有個總體認識,曉得數(shù)據(jù)可視化的地位,并在本地計算機安裝有關工具。
第一部分(開山鼻祖:Matplotlib,第 1-1 ~ 1-6 課),介紹 Python 語言生態(tài)中雖然古老但依然被使用的數(shù)據(jù)可視化工具 Matplotlib。通過這部分的學習,能夠掌握 Matplotlib 的應用思想和方法,并能夠繪制常用的統(tǒng)計圖。
第二部分(后起之秀:Seaborn,第 2-1 ~ 2-5 課),介紹基于 Matplotlib 發(fā)起而來的一種常用的可視化工具 Seaborn。通過這部分的學習,能夠掌握 Seaborn 的特點,并熟悉常用統(tǒng)計圖的繪制方法。
第三部分(另立門派:Plotnine,第 3-1 ~ 3-3 課),Plotnine 是根據(jù)圖層概念制圖的工具,不同于前面兩部分的工具。通過這部分的學習,能夠理解圖層的概念以及在制圖中的應用,掌握 Plotnine 靈活制作個性化圖示的方法。
第四部分(特立獨行:Plotly,第 4-1 ~ 4-4 課),Plotly 是一款能夠“兩棲作戰(zhàn)”的工具,既能得到靜態(tài)圖片,也能生成動態(tài)交互的圖示,即從這部分開始,制圖工具進入“交互”階段。通過這部分的學習,能夠掌握常用統(tǒng)計圖(具有交互功能)的繪制,并可以生成 HTML 文件。
第五部分(中華武功:Pyecharts,第 5-1 ~ 5-2 課),Pyecharts 是非常好的國產(chǎn)工具——中文文檔,非常可親近。Pyecharts 提供的工具和色彩渲染上,都比前述工具有所突破。通過這部分的學習,能夠掌握 Pyecharts 的使用方法,特別是利用它實現(xiàn)地理信息可視化和基于 Web 項目發(fā)布可視化圖示。
第六部分(島國薄紗:Bokeh,第 6-1 ~ 6-3 課),這是一款來自島國日本的可視化工具,除了完成通常的操作之外,在交互功能上,比 Plotly 和 Pyecharts 更有特色。通過這部分的學習,能夠掌握 Bokeh 的使用方法,特別是 Bokeh 自帶服務,能發(fā)布基于網(wǎng)絡的圖示。
課程寄語
最后送上勵志名言:
努力面前,忘記背后,向著標桿直跑。
當遇到貌似無法克服的困難時,當懷疑自己是否能夠學會時,當受到其他誘惑想放棄時,請來讀一讀這句話。
開始!
第0-1課:數(shù)據(jù)科學工作流程
每門學科,都會有一些前置的信息,這里還要再繼續(xù)嘮叨嘮叨,最好別引起你的反感呦。
愚見,下面的信息,是需要首先明晰的。
- 數(shù)據(jù)分析、人工智能等與數(shù)據(jù)相關的工作,其工作流程是什么?
- “數(shù)據(jù)可視化”,在數(shù)據(jù)科學中占有什么位置?
- 為了學會數(shù)據(jù)可視化的各種技能,都需要哪些前置知識和能力?
拙作《跟老齊學 Python:數(shù)據(jù)分析》一書中,列出了數(shù)據(jù)科學的發(fā)展簡史,從中能體會到人類對數(shù)據(jù)的研究和應用。隨著技術的發(fā)展,本質上是社會生產(chǎn)力的發(fā)展,數(shù)據(jù)驅動決策的觀念越來越深入人心(此處推薦觀看電影《點球成金》)。
都在談論“數(shù)據(jù)科學”,那么什么是數(shù)據(jù)科學?需要有一個明確的說明。
對于概念性的東西,推薦參考“維基百科”或者某些經(jīng)典著作。
下面的定義來自“維基百科”中的“數(shù)據(jù)科學”詞條。
數(shù)據(jù)科學(英語:Data Science),又稱資料科學,是一門利用數(shù)據(jù)學習知識的學科,其目標是通過從數(shù)據(jù)中提取出有價值的部分來生產(chǎn)數(shù)據(jù)產(chǎn)品。它結合了諸多領域中的理論和技術,包括應用數(shù)學、統(tǒng)計、模式識別、機器學習、數(shù)據(jù)可視化、數(shù)據(jù)倉庫以及高性能計算。數(shù)據(jù)科學通過運用各種相關的數(shù)據(jù)來幫助非專業(yè)人士理解問題。
閱讀了詞條的解釋,算是對數(shù)據(jù)科學有了初步的感性認識。
根據(jù)經(jīng)驗,對于專有名詞的英文詞條解釋與其對應的漢語說明,還是有差異的。因此,特別建議再閱讀“數(shù)據(jù)科學”的英文詞條:Data science。
Data science is an interdisciplinary field that uses scientific methods, processes, algorithms and systems to extract knowledge and insights from data in various forms, both structured and unstructured, similar to data mining.
Data science is a "concept to unify statistics, data analysis, machine learning and their related methods" in order to "understand and analyze actual phenomena" with data. It employs techniques and theories drawn from many fields within the context of mathematics, statistics, information science, and computer science.
顯然,中文“數(shù)據(jù)科學”和英文的“Data Science”兩個詞條的內容,從信息量上看,還是有差別的。
根據(jù) Data Science 中的說明,數(shù)據(jù)科學所處理的數(shù)據(jù)包括“Structured”和“Unstructured”(即“結構化的”和“非結構化的”)。數(shù)據(jù)科學中有一個重要環(huán)節(jié),名曰“特征工程”,就是要將一些非結構化的數(shù)據(jù)轉變成通常算法能夠處理的結構化的數(shù)據(jù)。當然,這不是本課程要講述的內容,本課程中使用的數(shù)據(jù)都是“結構化的”數(shù)據(jù)。
通常,科學是基礎理論部分,它不直接產(chǎn)生價值,它的價值會通過工程體現(xiàn)出來。因此,對應著“數(shù)據(jù)科學”的應用,就是“數(shù)據(jù)工程”。那么“數(shù)據(jù)工程”是怎樣的實施流程呢?
下圖是綜合了一些書籍所述和個人工作經(jīng)驗而來的。
圖 數(shù)據(jù)工程流程
圖的優(yōu)勢是能夠把很多信息集中顯示在眼前,給人以直觀視覺化的體驗,這也是“可視化”的優(yōu)勢。但是,圖示也有明顯的劣勢,那就是表述上不嚴謹,容易產(chǎn)生歧義。比如面對一幅山水畫,可能會有各種不同的理解;但是面對 F = ma 這個牛頓第二定律的表達式時,就只能有一種理解,不能仁者見仁智者見智。
因此,通常圖示都要配說明。
理解商業(yè)問題
這是“數(shù)據(jù)工程”的開始,從業(yè)者——數(shù)據(jù)工程師,必須對相應的業(yè)務有所了解,這也是數(shù)據(jù)工程師特有的市場價值之一(高工資是有道理的)。
理解商業(yè)問題,并非是成為業(yè)務高手,而是要能夠從業(yè)務中梳理出與數(shù)據(jù)工程項目有關的環(huán)節(jié),特別是將業(yè)務中某些問題轉化為數(shù)據(jù)問題。
比如,某公司打算開發(fā)一套能夠評價學生學習情況的軟件系統(tǒng),其中應用了所謂“過程性評價”的學習發(fā)展評價方式,要實現(xiàn)這種評價方式,就需要用到數(shù)據(jù)分析、機器學習的有關技能。
面對這個項目,首先問如下幾個問題:
- 哪些類型的數(shù)據(jù)能夠支持“過程性評價”?
- 通過什么渠道可以獲取這些數(shù)據(jù)?
- 所獲得的數(shù)據(jù)可靠程度如何?
以上問題獲得了明確答復之后,再考慮后續(xù)的工作,否則項目就成為了空中樓閣。
通過理解商業(yè)問題,把通常的業(yè)務人員習慣用的描述性語言,轉變?yōu)榫唧w的科學性語言,才能對某些環(huán)節(jié)作出“數(shù)據(jù)性”回復,實現(xiàn)“數(shù)據(jù)驅動決策”目標。
還是用前面的例子來說明,通常的教育工作者或者業(yè)務人員,會對“過程性評價”的結果這樣描述:過程性評價能夠對學生的成長發(fā)展提供指導,而不是一考定終身。
這種說法貌似容易理解,但里面充滿了歧義,列出幾項(包含但不限于):
- 學生成長發(fā)展的指標是什么?是考試成績?心理發(fā)展?身體狀況?
- 如果是考試成績,是周考試成績?月考試成績?學期末考試成績?
- 如果是心理發(fā)展,用什么量表測量?還是憑借主觀觀察?
- 如果是身體狀況,又要測量哪些項目?
- 衡量學生發(fā)展的周期是多長?學年?學期?月?周?日?小時?每次作業(yè)?
顯然,要落實所謂的“素質教育”,需要解決的問題真的太多、太復雜,絕非幾句口號和幾篇文章就能解決的。
若要從數(shù)據(jù)層面解決上述問題,就必須把有關數(shù)據(jù)的問題提煉出來,用準確的語言表述,然后考查業(yè)務是否能夠支持這些問題。
數(shù)據(jù)收集
數(shù)據(jù)收集和前述理解商業(yè)問題,兩者之間是一個互動關系。研究收集數(shù)據(jù)的方法,也是對商業(yè)問題的再度理解。
此外,數(shù)據(jù)收集還包含著從某個數(shù)據(jù)集中獲得數(shù)據(jù)的含義。這里所說的數(shù)據(jù)集,包括但不限于:
- 數(shù)據(jù)庫,包括關系型和非關系型
- 數(shù)據(jù)接口(API)
- 保存數(shù)據(jù)的文件,比如 Excel、CSV 文檔等
以上這些是常用的數(shù)據(jù)集。如何從這些數(shù)據(jù)集中讀取到數(shù)據(jù)?需要的技能應該是:
- 熟練使用 SQL
- 熟練使用某種編程語言(本達人課使用的是 Python 語言)
數(shù)據(jù)清洗和特征工程
假設已經(jīng)通過某種合法的方式“不作惡”的途徑得到了某些數(shù)據(jù),接下來要做的是了解這些數(shù)據(jù),主要通過以下兩種方式:
- 對數(shù)據(jù)進行簡單的描述性統(tǒng)計
- 對數(shù)據(jù)實行可視化,直觀地了解數(shù)據(jù)概況
這里就用到了“數(shù)據(jù)可視化”的技能。
然后就是“數(shù)據(jù)清洗”和“特征工程”,這是另外兩個重要工作了,由于本課程聚焦在“數(shù)據(jù)可視化”上,這里就不詳述了。但是,即便在這兩個工作過程中,也會用到“數(shù)據(jù)可視化”的操作技能。
兩個分支
有了“訓練好”的數(shù)據(jù)之后,根據(jù)商業(yè)問題的目標,可以從事兩個方面的具體工作。
(1)數(shù)據(jù)分析
應用各種數(shù)據(jù)分析的方法,最終得到一份分析報告。
分析結果,除了用數(shù)字表達之外,可視化是不可避免的(又見“數(shù)據(jù)可視化”)。
(2)機器學習
機器學習是另外一個專門領域,目前正火熱中。
通過機器學習算法,實現(xiàn)對數(shù)據(jù)的分類、預測和聚類等操作,在這個過程中,也難免要用“數(shù)據(jù)可視化”表達某種結論。
評估
不論是機器學習,還是數(shù)據(jù)分析,其結果都要進行評估。
對于機器學習而言,有專門的模型評估方式。即便如此,用可視化的方式把結果表達出來,也是一種重要的手段。
根據(jù)評估結果,確定是否采用機器學習所獲得的模型,亦或數(shù)據(jù)分析的報告是否被采納。
以上是數(shù)據(jù)工程項目的基本流程,從中可知,“數(shù)據(jù)可視化”并不是流程中的一個獨立環(huán)節(jié),它是幾個環(huán)節(jié)中必不可少的實現(xiàn)手段。
在實際中,做可視化工作的,除了數(shù)據(jù)科學從業(yè)者,還有美工,甚至還有其他人員,顯然實現(xiàn)可視化的途徑是多樣的。那么,我們將學習什么類型的可視化呢?
請看下一課的內容。
總結
本課介紹了“數(shù)據(jù)科學”的基本概念,并簡述了“數(shù)據(jù)工程”項目的基本流程,從此工作流程可知,本課程的主題 “數(shù)據(jù)可視化”是數(shù)據(jù)分析和機器學習等方面的重要手段,在這些環(huán)節(jié)中都占據(jù)了一定的位置。
第0-2課:數(shù)據(jù)可視化的類別
走在大街上,滿眼都是廣告——說明市場經(jīng)濟發(fā)達,這是好事情。再觀察一下廣告,多是以各種樣式的圖形呈現(xiàn),而不是簡簡單單地把數(shù)字呈現(xiàn)出來——即使是數(shù)字,也想辦法把數(shù)字搞得像圖一樣。這樣做的目的是要吸引人的注意,并且能夠讓人一眼就能看到想要看的。
別以為這是廣告商的策略,其實,他們只是順應了大腦的特點(具體請參考有關心理學和腦科學的研究成果)。
因為大腦的這種喜好,所以才非常有必要“數(shù)據(jù)可視化”,即用某種適合的圖形來表示某些數(shù)據(jù)。
數(shù)據(jù)可視化的類別
通常有兩種可視化數(shù)據(jù)的方式——這是我提出的分類,如有雷同,純屬巧合:
- 藝術性可視化
- 數(shù)學性可視化
以 2018 年的中美“貿易戰(zhàn)”為例,美國的媒體為了向美國老百姓說明中國經(jīng)濟發(fā)展的情況,特別是對美國經(jīng)濟的威脅,一定要使用到中國經(jīng)濟和美國經(jīng)濟相關數(shù)字,那么這些數(shù)字怎么展示?
圖 1 中美 GDP 比較(圖片來源)
這是一張預測中美 GPD 走勢的圖示,看此圖,我想,美國人也沒有什么太被刺激的感覺,因為看看兩條線,未來即使有高低之別,但差別也沒有那么嚇人,況且,預測還可能不準確呢。
這就是數(shù)學性可視化,雖然比較理智的反映了數(shù)據(jù)。但是,給人的印象不是很深刻,或者沒有讓人感到受刺激。
再對比圖 2。
圖 2 藝術性地表示 GDP(圖片來源)
雖然這張圖中也包含了數(shù)字,但是,它同時配置了表示數(shù)字的圖示,并且都很形象,人的視覺無形中就被圖示所吸引了。把數(shù)字本來的抽象意義,用直觀的方式表達出來,更刺激人的大腦。
這就是將原本的數(shù)據(jù)通過“藝術性可視化”的方式進行了表達。目的無非是要從視覺的維度讓人感受到一種震撼。
“藝術性可視化”,它通常不會科學、準確地反映數(shù)據(jù)的含義,而是為了某個目的追求感官刺激,比如圖 3。
圖 3 預測 GDP 變化 (圖片來源)
在本達人課中所要介紹的“數(shù)據(jù)可視化”,肯定不是那種蠱惑人心的可視化,而是本著科學精神的“數(shù)學性可視化”,雖然它可能不如“藝術性的可視化”好看,但是,更趨真實地反映了對象的本質。
常見圖像和用途
“數(shù)學性可視化”,就是要將數(shù)據(jù)用圖像的方式表達。從數(shù)學角度來看,不同的圖像有不同的用途或目的,下面依次簡要說明(此處姑且討論二維圖像)。
散點圖
還記得高中物理課學過的折射定律嗎?也稱為斯涅爾定律,假設不知道,我們就探索一下。用實驗的方式分別測量光線入射某透明介質的入射角和折射角大小,測量多次,于是就得到了入射角和折射角的數(shù)據(jù)集,分別用 alpha 和 belta 表示。
有了這兩組數(shù)據(jù),怎么研究入射角和折射角之間的關系呢?它們之間符合什么函數(shù)關系?
一種常用的方法是:
- 建立一個坐標系,橫坐標表示入射角,縱坐標表示折射角;
- 將入射角及其對應的折射角,作為坐標系中的一個坐標點,在此坐標系中把點標記出來。
這樣就在坐標系中“散落”了很多點,如圖 4 所示:
圖 4 入射角和折射角散點圖
接下來的任務就是觀察這些點在坐標系中的分布,猜測它們應該符合什么函數(shù)關系,比如可能符合某個一次函數(shù)關系等(看起來像符合正比例函數(shù)的關系,人類曾經(jīng)很長時間都這么認為,直到偉大的物理學家斯涅耳揭示了其中的奧秘為止)。
通過這個例子,可以總結如下:
- 繪制散點圖,要有對應的兩組數(shù)據(jù)(二維圖);
- 兩組數(shù)據(jù)所對應的兩個變量是連續(xù)變量;
- 散點圖的用途在于發(fā)現(xiàn)變量之間的關系。
在實際業(yè)務中,散點圖的樣式可能具有多種,而且也不一定都是用來尋找某種函數(shù)關系。比如在地圖上用色彩深淺畫出各個城市的 PM2.5 指數(shù),這也是一種散點圖,通過這種散點圖就能夠看到污染城市的地理分布規(guī)律。
柱形圖
柱形圖(也稱為:柱狀圖),適用于二維數(shù)據(jù)集,但是有一個維度的數(shù)據(jù)需要具有比較意義。比如下面的數(shù)據(jù):
| 廣東省 | 8,987.92 |
| 江蘇省 | 8,590.09 |
| 山東省 | 7,267.82 |
| 浙江省 | 5,176.80 |
| 河南省 | 4,498.82 |
| 四川省 | 3,698.02 |
| 湖北省 | 3,652.30 |
| 河北省 | 3,596.40 |
| 湖南省 | 3,459.06 |
| 福建省 | 3,229.83 |
| 上海市 | 3,013.39 |
| 北京市 | 2,800.04 |
對于這份數(shù)據(jù),就比較適合用柱形圖進行可視化。
圖 5 部分省 GDP 柱形圖
圖中所示的柱子高度,表示數(shù)據(jù)表中各省的 GDP 值。
通過柱形圖,非常明顯地反映了各省 GDP 數(shù)據(jù)的差異。
但是注意,柱形圖不適合大數(shù)據(jù),在橫坐標上如果排滿了柱子,看著多眼暈呀。
條形圖
條形圖,貌似就是柱狀圖橫過來,對于數(shù)值都是大于 0 的數(shù)據(jù)而言,畫出來的條形圖可以這樣理解。但是,下面這種類型的數(shù)據(jù)也是比較常見的。
| 哈爾濱 | ﹣31 |
| 北京 | ﹣2.9 |
| 鄭州 | ﹣4 |
| 濟南 | ﹣5 |
| 南昌 | 3 |
| 長沙 | 2 |
| 廣州 | 10 |
| 臺北 | 14 |
從數(shù)據(jù)表中可以看出,我國部分城市 1 月份最低氣溫,有的在 0℃ 以上,有的在 0℃ 以下。對于這類數(shù)據(jù),用條形圖顯示,結果是這樣的。
圖 6 部分城市最低溫
當然,這份數(shù)據(jù)也可以用前面的“柱形圖”實現(xiàn)可視化。
折線圖
下面這份數(shù)據(jù),是 1961 ~ 2017 年我國的 GDP 年度增長率。顯然,如果用條形圖、柱形圖來實現(xiàn)可視化,效果都不是太好,因為數(shù)據(jù)量有點大了。
| 2017 年 | 6.90% |
| 2016 年 | 6.70% |
| 2015 年 | 6.90% |
| ... | ... |
| 1962 年 | ﹣5.58% |
| 1961 年 | ﹣27.27% |
注:因為數(shù)據(jù)量比較多,所以顯示部分。
對這份數(shù)據(jù)實現(xiàn)可視化,比較好的選擇是繪制折線圖。
圖 7 我國理念 GDP 增長
從圖示結果中,可以看出 GDP 的發(fā)展變化趨勢。
折線圖最典型的應用應該算是在股票方面了,范圍大一點可以說是“金融數(shù)據(jù)分析”方面。
直方圖
直方圖貌似“柱形圖”,但兩者有很大區(qū)別。
直方圖是以各個矩形的面積描述各組的頻數(shù),所有矩形的面積之積為各組頻數(shù)的和。
例如,使用下面的程序構造了一批隨機數(shù)。
import numpy as npmu, sigma = 100, 15x = mu + sigma * np.random.randn(1000)想直觀地了解這個數(shù)據(jù)集中數(shù)字分布的特征,就可以利用直方圖。
圖 8 正態(tài)分布
從圖中可以看出,雖然是隨機生成的,但是數(shù)據(jù)的分布還是有規(guī)律的,這就是統(tǒng)計學中的正態(tài)分布。
餅圖
餅圖常用于表達某些量所占比例的情況。例如:
圖 9 餅圖
圖中顯示了不同量占據(jù)總量的百分比,通過餅狀圖就能夠對比分類數(shù)據(jù)的數(shù)值大小。當然,如果類別太多,會把“餅”分成太多的小份,不美觀,也不易于觀察。
箱形圖
箱形圖又稱盒須圖、盒式圖或箱線圖。
圖 10 顯示了通常的箱形圖的形狀:
圖 10 箱線圖
通過箱形圖,可以觀察到如下信息:
- 數(shù)據(jù)的統(tǒng)計值為中位數(shù)、最大值、最小值等
- 數(shù)據(jù)集中是否存在異常值,以及異常值的具體數(shù)值
- 數(shù)據(jù)是否是對稱的
- 數(shù)據(jù)的分布是否密集、集中
- 數(shù)據(jù)是否有偏向性
還要提到股票,如果仔細觀察,里面也用到了箱形圖。
以上列出的幾種圖形,是常見的,也是基本的。在這個基礎上,還有很多變形,這些變形可能綜合了多種含義,比如堆積柱狀圖,能比較不同量之間的大小,也能部分顯示分布情況。此外,還有一些專用圖形,例如股票中常用的 K 線圖,地理信息中常用的分級統(tǒng)計地圖等。
此外,根據(jù)不同的用途,還可以創(chuàng)造性地開發(fā)新的圖像。
為了便于檢索,把一些圖形的名稱列在下面,供參考:
- 柱形圖
- 堆積柱形圖
- 條形圖
- 氣泡圖
- 直方圖
- 箱形圖
- 熱力圖
- 散點圖
- 雷達圖
- 環(huán)形圖
- 餅圖
- 折線圖
- K 線圖
- 儀表盤
- 詞云
對數(shù)據(jù)進行可視化的時候,要根據(jù)數(shù)據(jù)特征、繪圖目的選擇適合的圖像。
總結
本課將“數(shù)據(jù)可視化”分為“藝術性可視化”和“數(shù)學性可視化”兩類,本達人課主要講述的是“數(shù)學性可視化”,即基于統(tǒng)計學基本知識,運用編程技能實現(xiàn)數(shù)據(jù)可視化。這種方式特別適用于大數(shù)據(jù)的問題中。
本課還列出了常用的統(tǒng)計圖,生成這些統(tǒng)計圖的數(shù)學原理及其所表達的含義,請參閱有關統(tǒng)計學的知識。
第0-3課:做好啟動準備
本達人課不是針對零基礎的學習者,需要具備以下知識。
(1)Python 基礎知識,包括但不限于:
- 掌握 Python 內置的基本對象類型,如數(shù)字、字符串、列表、字典、元組等
- 掌握 Python 的基本語法規(guī)則,如引入模塊的方法、for 循環(huán)語句等
- 掌握 Python 中函數(shù)的編寫方法
- 掌握 Python 中類的基本概念和了解面向對象的思想
這里推薦《Python 快速入門》達人課來學習。
(2)NumPy 和 Pandas 的基本知識,包括但不限于:
- 利用 NumPy 創(chuàng)建數(shù)組,以及數(shù)組相關的方法(或者 Numpy 的函數(shù))
- 利用 Pandas 創(chuàng)建 Series 和 DataFrame 對象,以及相應的操作和方法
以上知識,在拙作《跟老齊學 Python:輕松入門》《跟老齊學 Python:數(shù)據(jù)分析》圖書中均有詳細介紹,可供參考。
有了以上知識作為基礎,接下來要做的是安裝數(shù)據(jù)可視化相關的包(模塊)。在 Python 中,基本安裝方法是使用 pip 安裝,但是在數(shù)據(jù)科學方面,有兩個可供使用的環(huán)境。
Anaconda
官方網(wǎng)站:https://www.anaconda.com/
上圖是官方網(wǎng)站界面的截圖,其中只凸顯了 Anaconda 的作用,它是一個數(shù)據(jù)科學的平臺,而且宣稱是最流行的,此言絕非虛妄。之所以如此受歡迎,就是因為 Anaconda 已經(jīng)融匯了很多常用的工具,比如前面提到的 Numpy、Pandas 等已經(jīng)集成在里面了。所以,只需要下載這個網(wǎng)站的 Anaconda,然后安裝,通常使用的模塊就都包括了——一次安裝,終生受用。
流行,就是因為簡單。
但是,它也絕非十全十美,或者說世界上就沒有十全十美的東西吧。
因為 Anaconda 高度集成化,也會讓你失去對模塊的控制,比如你有強迫癥,非要把程序文件安裝到某個指定位置,這就難度大了。
但是,依然推薦。
pip
這是我喜歡的,所有在本達人課中的安裝演示,都是使用 pip。
除了上面兩個之外,還可以直接下載源碼安裝,源碼通常會在 github.com 這樣的代碼托管網(wǎng)站上。
接下來,就要演示安裝本達人課所用工具的過程了。
特別聲明:
- 本達人課中的所有操作和程序,是在 MacOS 操作系統(tǒng)中進行的
- 完全照搬以下安裝方法,在你的計算機上不一定成功,屆時請多用 Google 找方法
安裝工具之前,先要了解通常的命令:
- 如果使用 anaconda,安裝命令是 conda install modulename
- 如果使用的 pip,安裝命令是 pip install modulename
Jupyter
這是一個網(wǎng)頁版的編輯器。
在 Python 中,有一個“交互模式”,如下所示:
>>> print("Life is short, you need Python.")Life is short, you need Python.這種模式非常方便,但是,寫過的代碼難以保存。因此,它不是一個好的“編輯器”(根本就不是編輯器)。
于是乎,IPython 就應運而生了(不用著急安裝 IPython,在此處它只是一個過程)。后來,在 IPython 基礎上,發(fā)展出了一個基于瀏覽器的 Notebook,用于文本文件編輯,它兼顧了交互模式的優(yōu)點,那就是即時運行,并且能夠如同 IDE 一樣,對代碼實施保存、傳播、再運行等操作。這個編輯器就是這里推薦的 Jupyter。
Jupyter 也是開源免費的。2014年, Fernando Pérez 發(fā)明了它,除了支持 Python 之外,它還可以支持 Julia 和 R,并且可以用于編寫 Markdown 文件。
安裝
pip3 install jupyter注意,后面的所有安裝,我都使用 pip3,表示安裝適用于 Python 3 的版本。
運行
打開終端,到某一個工作目錄,執(zhí)行以下命令:
$ jupyter notebook通常,會自動打開默認瀏覽器,并呈現(xiàn)下圖所示的界面。
在圖示中可以看到一些擴展名為 ipynb 的文件,這些都是已經(jīng)創(chuàng)建的 Jupyter 文件,里面都是一些相關代碼,如果點擊某個文件,就可以在當前環(huán)境中打開。
再觀察上圖的右上角,有“新建”下拉菜單,通過它,可以創(chuàng)建一個全新的編輯界面。
Jupyter 與通常的 GUI 軟件差不多,用鼠標點來點去就可以了。當然,它有一些快捷鍵,如果想了解,可以在網(wǎng)上搜一下。
Matplotlib
Matplotlib 是基于 NumPy 的、Python 語言環(huán)境中的繪圖工具包。它可以用于繪制類似 GUI 軟件的圖像,并且這些繪圖工具的 API 都是基于“面向對象”思想開發(fā)的,與 Python 語言的開發(fā)思想一致(這也是現(xiàn)代編程語言都秉承的思想)。
Matplotlib 的發(fā)明者 John D. Hunter,繼承了 Python 一貫的開源思想。目前 Matplotlib 已經(jīng)由一個委員會來負責,發(fā)明者 John Hunter 于 2012 年 8 月被上帝接走了。
必須向這位偉大的發(fā)明者致以崇高的敬意。
自從 Matplotlib 1.2 之后,就開始支持 Python 3 了。因此,現(xiàn)在所安裝的 Matplotlib 如果沒有特別的版本指定,默認都是適合于 Python 3 的了。
Matplotlib 有一個重要的子模塊,也是我們制圖經(jīng)常用的,名為:pyplot,它是一個類似于 Matlab 的接口(如果學習過 Matplab,就可以直接把其中的用法搬過來了)。其實,Matplotlib 也是參考了 Matlab 中的繪圖功能而設計的專門用于 Python 中的繪圖工具。
Matplotlib 的官方網(wǎng)站:https://matplotlib.org/
安裝
標準方法:pip install matplotlib
理論上講,如果本地缺少某些依賴程序,執(zhí)行上面的命令后,會自動地將依賴的程序安裝上。
在實際中,總會遇到意想不到的,因此,如果遇到安裝不成功的事情,也不要氣餒,慢慢找辦法,一定能成功的。
最基本的條件,計算機要聯(lián)網(wǎng),并且網(wǎng)絡情況別太差了。
檢測是否安裝成功
安裝之后,用下面的方式測試是否安裝好。
在工作目錄中運行 Jupyter,新建一個頁面,并且命名為“chapter0-3”。
然后按照下圖的方式輸入代碼:
為了方便,后面演示的時候,就把每個代碼塊寫成如下的形式,上圖中顯示的是一個代碼塊。書寫的這個代碼塊的方法就是:每寫完一行,回車,然后寫下一行。請不要復制代碼,而是要自己一個一個字母地敲。
%matplotlib inlineimport numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 100, 1000)y = np.sin(x)plt.plot(x, y)寫完這個代碼塊之后,按組合鍵“Shift + Enter”,即執(zhí)行這個代碼塊中的程序。執(zhí)行結果如下圖所示:
從圖中可以看到,在前述代碼塊的下面顯示了執(zhí)行結果。得到的函數(shù)曲線圖,也呈現(xiàn)在了當前的頁面中,這是因為代碼塊中的第一行的設置。如果沒有 inline,只寫 %matplotlib,你會在另外一個窗口看到畫出來的圖。
上述代碼的其他部分,先不用理解,后面會詳細介紹。
執(zhí)行上述代碼,如果能夠得到跟圖中顯示一樣的,就說明 Matplotlib 安裝無誤。如果出現(xiàn)錯誤,請?zhí)貏e認真閱讀報錯信息,然后根據(jù)報錯信息到網(wǎng)上搜索有關解決方案。比如常見的一種錯誤是說缺少 backend,這是因為本地計算機沒有安裝 GUI 的支持框架(推薦閱讀:What is a backend?,可以根據(jù)官方文檔中的說明,安裝一個 backend,比如安裝 tk)。
Seaborn
Seaborn 是基于 Matplotlib 的一個可視化工具,它提供了一些更高級的接口,讓繪圖過程更簡潔。
官方網(wǎng)站:https://matplotlib.org/glossary/index.html#term-tk
有了前面的基礎,安裝 seaborn 就比較簡單了:
pip3 install seaborn安裝完畢,如果要檢驗是否安裝成功,直接使用 import seaborn 命令,不報錯,說明就沒問題了。
Plotnine
Plotnie 是在 ggplot2 的基礎上發(fā)展而來的,這個模塊的繪圖思想和前面兩個有所不同,不過這些現(xiàn)在不需要掌握,只需要安裝它就可以了。
官方網(wǎng)站詳見這里。
官方網(wǎng)站給的安裝方法是:pip3 install plotnine
如果安裝過程沒有那么順利,可以參考我的經(jīng)歷,因為我按照這個官方網(wǎng)站的方法操作也沒有成功。
以下安裝步驟是針對 Python 3.7 的環(huán)境。
- Pandas 要先升級,順便把 Numpy 也升級吧:
- 安裝 Cython:
- 安裝最新的 Pyproj。如果這個不安裝或者不適用于 Python 3.7,則會報出 gcc 錯誤:
這里是下載源碼來安裝的,理論上用 pip3 install pyproj 也行,但是因為源程序的服務器在境外,經(jīng)常性的出現(xiàn)訪問超時現(xiàn)象。
- 如果 geppandas 沒有安裝,也要安裝:
- 最后安裝 plotnine:
經(jīng)歷以上過程之后,如果還沒有安裝好,就只能 Google 了。
完成了坑爹的過程之后,plotnine 安裝完畢。
Plotly
Plotly 是一款能夠實現(xiàn)基于網(wǎng)頁作圖的工具軟件,其底層是 plotly.js,基于 D3.js、stack.gl 和 SVG,因此能夠實現(xiàn)用 JavaScript 在網(wǎng)頁上繪制類似于 Matplotlib 的各種統(tǒng)計圖形。
官方網(wǎng)站:https://plot.ly/
Plotly 原本是收費的軟件,但自 2016 年 6 月開始,提供免費的社區(qū)版。
它能夠實現(xiàn)在線發(fā)布制圖結果,為了實現(xiàn)這個目的,還需要到該網(wǎng)站進行注冊。
注冊完畢,登錄網(wǎng)站,并在界面的右上角用戶名的下拉菜單中選擇“setting”項目,再從左側欄選擇“API Keys”,設置 Username 和 API KEY,記錄下來,以備后用。
安裝方法:pip3 install plotly
Pyecharts
Pyecharts 是國產(chǎn)的可視化工具包。
官方網(wǎng)站:http://pyecharts.org/
難得有中文文檔。
為了獲得更好的效果,先安裝如下依賴:
- 安裝 Nodejs 環(huán)境,請點擊這里下載
- 安裝 phantomjs
而后,使用下述方式安裝:
pip3 install pyecharts在后續(xù)操作中,還要用到其他的模塊,比如主題模塊,可以參考官方文檔進行安裝。因為是中文的,而且文檔內容非常詳細,相信讀者一看便知。
Bokeh
Bokeh 也是當前使用量日益提升的制圖工具,它的核心特點在于能夠基于服務器發(fā)布各種具有強交互性的圖示。
官方網(wǎng)站:https://bokeh.pydata.org/en/latest/
安裝方法:
pip3 install bokeh經(jīng)過上面的一系列折騰,應該已經(jīng)把自己的計算機開發(fā)環(huán)境配置好了。
不過,要說明的是,本達人課所介紹的幾種可視化工具,僅僅是我選擇的,其實還有很多可視化工具沒有納入到本達人課的范疇。我相信,讀者學習這幾種各具特色的工具之后,可以非常快速地掌握任何一種新的工具。
總結
本課主要是為后續(xù)的正式學習做好準備,特別是開發(fā)環(huán)境的配置。在 Python 生態(tài)環(huán)境中做開發(fā),難免還要安裝其他各類包和模塊。
- 通常使用 pip 即可,并且會自動安裝有關依賴。
- 如果出現(xiàn)“訪問超時”這類問題時,可能是網(wǎng)絡不太好,解決方法有兩個:一是換一個速度更快的網(wǎng)絡環(huán)境;二是找個“梯子”(自備,不要詢問我哦)或許就解決問題了。
- 下載相應模塊的代碼(通常官方網(wǎng)站或者 github.com 上都有)直接安裝(比如執(zhí)行:python3 install setup.py)。
- 還有一個重要的解決問題途徑,就是使用 Google 找一找其他人是怎么解決的,參考一下。
結束語:在學習中應用,在應用中學習
本達人課介紹了各具特點的多種實現(xiàn)數(shù)據(jù)可視化的工具,讀者應該根據(jù)自己的需要,有重點地掌握,特別是結合實際的項目需要。
不論哪一個工具,都有完善的官方文檔,那么本達人課充其量是引領入門,要向對該工具有較深入的理解,還需要閱讀官方文檔。
學習和應用是兩個不同的過程。學習某項技能,必須從一招一式開始,或許感到枯燥,但這是基礎;應用則是要根據(jù)實際需要靈活地綜合運用所有技能了。
那“獨孤九劍”中的“破劍式”雖只一式,但其中于天下各門各派劍法要義兼收并蓄,雖說“無招”,卻是以普天下劍法之招數(shù)為根基。
實際項目中的每一行代碼背后,都是對基礎知識和基本技能的深刻理解,因此,非常有必要掌握。只有這樣才能面臨項目時隨機應變。
獨孤求敗如若復生,又或風清揚親臨,能遇到這樣的對手,也當歡喜不盡。使這“獨孤九劍”,除了精熟劍訣劍術之外,有極大一部分依賴使劍者的靈悟,一到自由揮灑、更無規(guī)范的境界,使劍者聰明智慧越高,劍法也就越高,每一場比劍,便如是大詩人靈感到來,作出了一首好詩一般。
程序亦如此!
答疑與交流
為了讓訂閱課程的讀者更快更好地掌握課程的重要知識點,我們?yōu)槊總€課程配備了課程學習答疑群服務,邀請作者定期答疑,盡可能保障大家學習效果,同時幫助大家克服學習拖延問題!
入群請到第1-1課末尾查看入群二維碼,如果群滿,請?zhí)砑?GitChat 小助手伽利略的微信,ID 為 GitChatty6,注明「數(shù)據(jù)可視化」,并將支付截圖發(fā)給她,謝謝。
第1-1課:Matplotlib 初體驗
第1-2課:重新認識坐標系
第1-3課:如何分區(qū)和繪圖
第1-4課:多樣化的圖像
第1-5課:繪制柱形圖和條形圖
第1-6課:繪制箱線圖、餅圖和直方圖
第2-1課:Seaborn 初體驗
第2-2課:分類特征統(tǒng)計圖
第2-3課:關系統(tǒng)計圖和回歸統(tǒng)計圖
第2-4課:數(shù)據(jù)分布統(tǒng)計圖和熱圖
第2-5課:實戰(zhàn)練習
第3-1課:繪圖新概念
第3-2課:幾何對象和美學映射
第3-3課:案例剖析
第4-1課:Plotly 初體驗
第4-2課:繪圖類的應用
第4-3課:3 種統(tǒng)計圖及示例
第4-4課:高級制圖案例剖析
第5-1課:Pyecharts 初體驗
第5-2課:地理信息可視化及擴展應用
第6-1課:Bokeh 初體驗
第6-2課:常用圖形
第6-3課:重在交互
閱讀全文: http://gitbook.cn/gitchat/column/5c6cd09e7fa9074fde9c8909
總結
以上是生活随笔為你收集整理的案例上手 Python 数据可视化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 速度传感器330104-00-06-10
- 下一篇: python rbf神经网络_RBF神经