做者 | Will Koehrsenjavascript
如何僅使用一行代碼製做漂亮、互動性強的圖表?java
程序員的沉沒成本論python
沉沒成本謬論是人類衆多的認知偏見之一。 它指的是咱們傾向於持續將時間和資源投入到失去的緣由中,由於咱們已經花了不少時間去追求無用的事情。沉沒成本謬論適用於當咱們花了不少成本也不會起做用的項目或工做。好比,當存在效率更高,互動性更強的選擇時,咱們依然繼續使用Matplotlib。git
在過去的幾個月裏,我意識到我使用Matplotlib的惟一緣由是我花費了數百小時去學習它複雜的語法。這種複雜性讓做者在StackOverflow上遭受了數小時的挫折去弄清楚如何格式化日期或添加第二個y軸。幸運的是,在探索了一些選項後,一個在易用性,文檔和功能方面顯著的贏家是Plotly庫。程序員
在本文中,咱們將直接上手使用Plotly,學習如何在更短的時間內製做出更好的圖表。github
本文的全部代碼均可以在GitHub上找到(https://github.com/WillKoehrsen/Data-Analysis)。 圖表都是交互式的,能夠在NBViewer(https://w.url.cn/s/ALOvpfv)上查看。工具
Plotly簡介佈局
Plotly Python包(https://plot.ly/python/)是一個基於plotly.js(https://plot.ly/javascript/)構建的開源庫,然後者又創建在d3.js(https://d3js.org/)上。咱們將用一個名爲cufflinks的封裝器來使用Pandas數據。所以,咱們的整個堆棧是cufflinks> plotly> plotly.js> d3.js,這意味着咱們能夠經過d3的交互式圖形功能去得到Python編碼的效率。學習
(Plotly自己就是一家擁有多種產品和開源工具的圖形公司。其Python版本的庫能夠無償使用,咱們能夠在離線模式下建立無限的圖表,在線模式下最多能夠建立25個圖表,用於共享。)編碼
本文中的全部工做都是使用Jupyter notebook完成的,其中的plotyl+cuffilinks能夠在離線模式下運行。 在使用pip命令安裝了plotly和cufflinks以後,在Jupyter中運行如下命令:
單變量分佈:直方圖和箱線圖
單變量—單因素—圖是開始分析數據的標準方法,直方圖是繪製分佈圖的首選圖(雖然它有一些問題-https://w.url.cn/s/AkZpZF1)。在這裏,使用做者Medium文章的統計信息(你能夠看到如何獲取你的統計數據,或者你也可使用個人-https://w.url.cn/s/AQRA3Kp),製做了關於文章點贊數量的交互式直方圖(df是標準的Pandas數據幀):
對於那些習慣使用Matplotlib的人來講,咱們所要作的就是添加一個字母(使用iplot而不是plot),咱們就能夠獲得一個更好看的交互式圖表! 咱們能夠點擊數據來獲取更多細節,放大圖的各個部分,咱們稍後會看到,能夠選擇要高亮的內容。
若是咱們想要繪製疊加的直方圖,使用以下代碼,一樣很是簡單:
經過使用一點點Pandas相關的操做,咱們能夠作一個條形圖:
正如咱們所看到的,咱們能夠將Pandas與plotly+cufflinks結合起來。可對按出版物每一個故事的粉絲,繪製箱線圖:
交互性的好處是咱們能夠根據須要探索和分組數據。 在箱線圖中有不少信息,若是沒有觀察數字的能力,咱們會錯過大部分的信息!
散點圖
散點圖是大多數分析方法的核心。它容許咱們看到變量隨時間演變的過程或兩個(或更多)變量之間的關係。
時間序列
至關一部分的真實數據會有一個時間維度。 幸運的是,plotly+cufflinks的設計考慮了時間序列的可視化。 接下來使用下面的代碼製做一個關於做者TDS文章的數據框,看看趨勢是如何變化。
在這裏,咱們僅用一行代碼作了不少不一樣的事情:
自動獲取時間序列x軸
添加輔助y軸,由於咱們的變量有不一樣的範圍
將文章標題添加爲懸停信息
咱們還能夠很是輕鬆地添加文本註釋:
對於使用第三個變量來上色的雙變量散點圖,咱們可使用以下命令:
咱們可使用log軸(指定爲繪圖佈局)(參見Plotly文檔-中的佈局細節-https://plot.ly/python/reference/)以及數值變量來調整氣泡,讓圖表更復雜一點:
更進一步的工做(詳見notebook-https://w.url.cn/s/AS8rPTo
),咱們甚至能夠在一個圖表上放置四個變量(不建議-https://w.url.cn/s/ALRC02Y)!
和以前同樣,咱們能夠將pandas與plotly + cufflinks結合起來,用於得到有用的圖表。
有關添加功能的更多示例,請參閱notebook或文檔。 咱們可使用單行代碼在文本中添加文本註釋,參考線和最佳擬合線,而且仍然能夠進行全部的交互。
進階圖表
如今咱們將製做一些你可能不會常用的圖表,它可能會使人印象深入。咱們將使用plotly figure_factory(https://w.url.cn/s/ACGcXLa
),也僅使用一行代碼來製做這些使人難以置信的圖。
散點矩陣
當咱們想要探索許多變量之間的關係時,散點矩陣(也稱爲splom)是一個很好的選擇:
這個圖也是能夠徹底人機交互的,用於探索數據。
相關性熱力圖
爲了可視化數值變量之間的相關性,咱們會計算相關性,而後製做帶註釋的熱力圖:
還有不少不一樣類型的圖。cufflinks還有幾個主題,咱們能夠用來製做徹底不一樣的風格。例如,下面咱們在「空間」主題中有一個比率圖,在「ggplot」中有一個展開圖:
咱們還能夠獲得3D圖(表面和睦泡):
你甚至能夠製做餅圖:
在Plotly Chart Studio中編輯
當你在Notebook中製做這些圖時,你會注意到圖表右下角有一個小連接,上面寫着「Export to plot.ly」。 若是單擊該連接,你將會進入到Chat Studio,在那裏您能夠修改圖並進行最終演示。 你能夠添加註釋,指定顏色,並清理全部不相關的內容來獲得一張出色的圖。而後,你能夠在線發佈圖,以便任何人均可以經過連接找到它。
下面是我在Chart Studio中發佈的兩個圖表:
上面提到的一切,並非該繪圖庫的所有功能! 所以做者建議讀者查看plotly和cufflinks文檔,以得到更使人難以置信的圖形。
Plotly interactive graphics of wind farms in United States (Source)
總結
關於沉沒成本謬論最糟糕的部分是你只能意識到在你退出這項努力以後浪費了多少時間。幸運的是,如今做者犯了長時間堅持使用Matploblib的錯誤,而你沒必要!
在考慮繪圖庫時,咱們一般想要如下的一些東西:
一、僅用一行代碼就能夠快速探索數據
二、用於子集化/調查數據的交互元素
三、根據須要深刻挖掘細節
四、輕鬆定製最終演示文稿
截至目前,在Python中完成全部這些操做的最佳選擇是 Plotly庫。 Plotly容許咱們快速進行可視化,並幫助咱們經過交互更好地探索咱們的數據。 此外,必須認可的是,繪圖應該是數據科學中最使人愉快的部分之一! 使用其餘庫時,繪圖變成了一項繁瑣的任務。可是使用plotly庫時,能夠爲製做一張好圖而愉悅!
A plot of my enjoyment with plotting in Python over time
如今是2019年,是時候升級您的Python繪圖庫,以便在數據可視化中實現更優的效率,功能和美學。