Jupyter notebook 入門教程

原文連接:www.dataquest.io/blog/jupyte…python

Jupyter notebook 是一個很強大的交互式和展現數據科學項目的工具,它能夠做爲一個開發文檔,包含代碼、解釋說明文字、代碼運行結果、數學公式等等,功能很是強大,也是如今很是流行的工具。git

本文會經過一個簡單的數據分析例子來介紹 Jupyter notebook 的使用方法。這裏的例子就是給定一個自 1955 年發佈以來,一共 50 年時間的美國 500 家公司的數據,任務是分析這些公司的利潤變化過程。算法

1. 安裝

最簡單的安裝方式就是經過 Anaconda 進行安裝,Anaconda 是使用最普遍的環境管理工具,而且它能夠預先安裝不少經常使用的第三方庫,包括 numpypandasmatplotlib 等。shell

具體的 Anaconda 能夠查看以前公衆號發表過的一篇文章--Python 基礎入門--簡介和環境配置瀏覽器

除了經過 Anaconda 安裝,也能夠直接採用 pipbash

pip install jupyter
複製代碼

2. 建立你的第一個 Notebook

這一部分將介紹如何運行和保存 notebooks,熟悉 Jupyter notebook 的結構和交互界面。這裏將經過一個例子來熟悉一些核心的用法,更好的瞭解 Jupyter notebook 的使用。微信

運行 Jupyter

在 Windows,能夠經過添加到開始菜單的快捷方式運行 Jupyter ,固然也能夠經過在命令行輸入命令 jupyter notebook 開始運行,而後會在默認瀏覽器中打開一個新的窗口,窗口內容以下:markdown

固然上述還不是一個 notebook,它是 Notebook 的管理界面,用於管理當前文件夾的全部 Notebooks。網絡

注意,這裏僅僅展現 Jupyter 運行時候的所在文件夾內的文件和文件夾,也就是在命令行運行 jupyter notebook 時所在的文件夾,固然這個也能夠改變,運行命令的時候能夠指定文件夾位置,即輸入:數據結構

jupyter notebook filepath
複製代碼

此外,這裏在瀏覽器上的 URL 地址是相似 http://localhost:8888/tree,其中 localhost 是表示本地地址,而後 8888 是端口。

接下來就是建立一個新的 notebook,能夠以下圖所示,在管理界面的右上角位置,點擊 New 菜單,這裏就能夠選擇 Python 3 (或者其餘的版本),而後就能夠建立成功,而且是在新的窗口打開這個 notebook,在默認命名就是 Untitled.ipynb

ipynb 文件

每一個 ipynb 文件都是經過 JSON 格式來描述 notebook 的內容,包括每一個單元及其內容,都是經過 metadata 的格式展現。這裏能夠在打開 ipynb 文件後,菜單中選擇 Edit->Edit Notebook Metadata ,進行編輯。

notebook 界面

如今開始介紹下 notebook 的界面信息,一個新的 notebook 界面以下圖所示。

這裏有兩個術語須要知道--cellskernels ,兩個都是很是重要的術語:

  • kernel :表示計算引擎,用於執行 notebook 中的代碼塊
  • cell :單元塊,用於展現文本或者是代碼。

單元(Cells)

首先介紹的是 Cells ,一個 Cell 就是上圖中綠色框部分,它是 notebook 的主要部分,一般有兩種主要的 cell 相似:

  • code cell :包括須要執行的代碼,以及其運行結果
  • Markdown cell :包含的是 Markdown 格式的文本而且其執行結果

下圖展現了一個簡單的例子,第一行 Jupyter 入門教程 這個就是一個 Markdown cell ,這裏展現的是執行這個 cell 的結果,若是須要執行一個 cell ,能夠點擊 Run 按鈕,或者快捷鍵 Ctrl + Enter 便可,而後下方兩個都是 code cell ,第一個是導入第三方庫,第二個則是打印一段話以及其運行結果。

能夠注意到 code cell 的左側會有一個標籤 In [1] ,這裏的數字表示該代碼塊運行的次序,即在該 notebook 中,若是沒有執行,顯示的是 In [ ] ,若是是該 notebook 第一個運行的代碼塊,則是 In [1] ,若是再次運行,則顯示 In [2] ,依次類推,同個代碼塊屢次執行,這個數字也是會改變的。而 InInput 的縮寫。若是代碼塊運行時間有點久,它會顯示 In [*] ,表示當前代碼塊正在運行中。

對於 notebook,還能夠直接展現變量的數值,或者是函數的返回值,不須要調用 print 函數,以下圖所示,固然它只會打印當前單元的最後一行的內容。

還須要注意的一件事情就是,對於一個單元,若是正在編輯,其邊界框顯示的是綠色,而運行時候則顯示藍色。這裏展現的就是兩種模式,即綠色表示編輯模式,藍色表示命令模式

快捷鍵

notebook 有不少快捷鍵,能夠經過菜單中的 Help->Keyboard Shortcuts 查看,也能夠直接用快捷鍵 Ctrl+Shift+P 查看。下面簡單介紹一些快捷鍵:

  • 編輯模式和命令模式能夠經過 EscEnter 進行轉換,通常是按 Esc 進入命令模式,Enter 進入編輯模式

命令模式下:

  • cell 之間上下瀏覽採用上下箭頭,或者 UpDown
  • A 表示在當前 cell 上方插入一個新的 cell ,而 B 則是下方插入新的 cell
  • M 表示變爲 Markdown cell ,而 Y 是表示變爲 code cell
  • 連續按兩次 D 是刪除當前 cell
  • Z 是撤銷操做
  • Shift 加上 Up 或者 Down 能夠一次選擇多個 cells ,接着採用 Shift + M 能夠合併多個 cells

Markdown

Markdown 是一個輕量級的易於學習使用的標記語言,主要用於格式化文本文字。它的語法相似 HTML 語言,是一個很是有幫助的語言,能夠用於添加註釋說明或者添加圖片。

能夠嘗試在 Jupyter notebook 中輸入下面的文字,記住是在 Markdown cell 中:

# This is a level 1 heading
## This is a level 2 heading
This is some plain text that forms a paragraph.
Add emphasis via **bold** and __bold__, or *italic* and _italic_.
Paragraphs must be separated by an empty line.
* Sometimes we want to include lists.
* Which can be indented.
1. Lists can also be numbered.
2. For ordered lists.
[It is possible to include hyperlinks](https://www.example.com)
Inline code uses single backticks: `foo()`, and code blocks use triple backticks:
​```
bar()
​```
Or can be indented by 4 spaces:
foo()
And finally, adding images is easy: ![Alt text](https://www.example.com/image.jpg)
複製代碼

獲得的結果以下圖所示:

若是想添加圖片,有三種作法:

  • 使用網絡上的圖片,添加其網絡連接 URL,好比上述例子就是這種作法,URL 是 www.example.com/image.jpg
  • 採用一個本地 URL,那麼圖片就只能使用在該 notebook 中,好比在同一個 git 倉庫中
  • 菜單欄選擇 「Edit->Insert Image",這種作法會將圖片轉換爲字符串形式並存儲在 .ipynb 文件中,這種作法會增長 ipynb 文件的大小

Markdown 的使用方法能夠參考其發明者 John Gruber 的官方教程:

daringfireball.net/projects/ma…

Kernels

每一個 notebook 都有一個 kernel。當執行一個單元內的代碼的時候,就是採用 kernel 來運行代碼,並將結果輸出顯示在單元內。同時 kernel 的狀態會保留,而且不止侷限在一個單元內,即一個單元內的變量或者導入的第三方庫,也是能夠在另外一個單元內使用的,並非相互獨立的。

某種程度來講,notebook 能夠看作是一個腳本文件,除了增長了更多輸入方式,好比說明文字、圖片等等。

這裏一樣用一個代碼例子進行介紹 kernel 的這種特性,以下圖所示,分別在兩個單元內輸入兩段代碼,第一個單元內時導入 numpy 並定義函數 square(),而第二個單元內就調用了這個函數 square() ,併成功運行輸出結果。

大部分狀況下都是自頂向下的運行每一個單元的代碼,但這並不絕對,其實是能夠從新回到任意一個單元,再次執行這段代碼,所以每一個單元左側的 In [ ] 就很是有用,其數字就告訴了咱們它是運行的第幾個單元。

此外,咱們還能夠從新運行整個 kernel,這裏介紹菜單 Kernel 中的幾個選項:

  • Restart :從新開始 kernel,這會清空 notebook 中全部的變量定義
  • Restart & Clear Output: 和第一個選項相同,但還會將全部輸出都清除
  • Restart & Run All: 從新開始,而且會自動從頭開始運行全部的單元內的代碼

一般若是 kernel 陷入某個單元的代碼運行中,但願中止該代碼的運行,則能夠採用 Interupt 選項。

選擇一個 kernel

Kernel 菜單中一樣提供了一個更換 kernel 的選項,最開始建立一個 notebook 的時候,就是選擇了一個 kernel ,固然這裏可否選擇其餘的 kernel ,取決因而否有安裝,好比 Python 的版本,當你同時安裝了 python3.6python2.7 ,那麼就有這兩個選擇,除了 Python 語言,Juypter notebook 支持的 kernel 還包括其餘超過一百種語言,好比 Java、C、R、Julia 等等。

3. 數據分析例子

如今就開始文章開始說的數據分析例子,即從一份公司財富數據中分析公司的利潤變化狀況。

命名 notebooks

首先,給 notebook 命名一個有意義的名字,好比 jupyter-notebook-tuorial,能夠直接在 notebook 界面直接點擊上方文件名,若是未命名,那就是 Untitle.ipynb ,固然也能夠返回管理界面進行命名,以下所示,選擇 notebook 後,上方會出現一行選項,包括:

  • Duplicate:複製
  • Shutdown:中止該 notebook 的 kernel
  • View:查看 notebook 內容
  • Edit :編輯其 metadata 內容

以及還有一個刪除文件的選項。

注意,關閉 notebook 的界面並不會關掉 notebook 的 kernel,它會一直在後臺運行,在管理界面看到 notebook 仍是綠色狀態,就代表其在運行,這須要選擇 Shutdown 選項,或者命令行裏關掉 Jupyter notebook 的命令。

準備工做

首先導入一些須要用的第三方庫:

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="darkgrid")
複製代碼

pandas 用於處理數據,Matplotlib 用於繪製圖表,而 seaborn 可讓圖表更加漂亮。一般也須要導入 Numpy ,不過在本例中咱們將經過 pandas 來使用。此外,%matplotlib inline 這並非 python 的命令,它是 Jupyter 中獨有的魔法命令,它主要是讓 Jupyter 能夠捕獲 Matplotlib 的圖片,並在單元輸出中渲染。

接着就是讀取數據:

df = pd.read_csv('fortune500.csv')
複製代碼

保存和檢查點(checkpoint)

在開始前,要記得定時保存文件,這能夠直接採用快捷鍵 Ctrl + S 保存文件,它是經過一個命令--「保存和檢查點」實現的,那麼什麼是檢查點呢?

每次建立一個新的 notebook,同時也建立了一個 checkpoint 文件,它保存在一個隱藏的子文件夾 .ipynb_checkpoints 中,而且也是一個 .ipynb 文件。默認 Jupyter 會每隔 120 秒自動保存 notebook 的內容到 checkpoint 文件中,而當你手動保存的時候,也會更新 notebook 和 checkpoint 文件。這個文件能夠在由於意外緣由關閉 notebook 後恢復你未保存的內容,能夠在菜單中 File->Revert to Checkpoint 中恢復。

對數據集的探索

如今開始處理咱們的數據集,經過 pandas 讀取後獲得的是稱爲 DataFrame 的數據結構,首先就是先查看下數據集的內容,輸入如下兩行代碼,分別表示輸出數據的前五行,和最後五行的內容。

df.head()
df.tail()
複製代碼

輸出內容以下所示:

經過查看,咱們瞭解到每行就是一個公司在某一年的數據,而後總共有 5 列,分別表示年份、排名、公司名字、收入和利潤。

接着,爲了方便,能夠對列重命名:

df.columns = ['year', 'rank', 'company', 'revenue', 'profit']
複製代碼

而後,還能夠查看數據量,以下所示:

len(df)
複製代碼

以下圖所示,總共有 25500 條數據,恰好就是 500 家公司從 1955 到 2005 的數據量。

接着,咱們再查看數據集是否和咱們但願導入的同樣,一個簡單的檢查方法就是查看數據類型是否正確:

這裏能夠發現 profit 數據類型竟然是 object 而不是和收入 revenue 同樣的float64 類型,這表示其中可能包含一些非數字的數值,所以咱們須要檢查一下:

輸出結果代表確實存在非整數的數值,而是是 N.A,而後咱們須要肯定是否包含其餘類型的數值:

輸出結果表示只有 N.A ,那麼該如何處理這種缺失狀況呢,這首先取決有多少行數據缺失了 profit :

369 條數據缺失,相比於總共 25500 條數據,僅佔據 1.5% 左右。若是缺失的數據隨着年份的變化符合正態分佈,那麼最簡單的方法就是直接刪除這部分數據集,代碼以下所示

從結果看,缺失數據最多的一年也就是 25 條也不到,相比每一年 500 條數據,最多佔據 4%,而且只有在 90 年代的數據缺失會超過 20 條,其他年份基本在 10 條如下,所以能夠接受直接刪除缺失值的數據,代碼以下:

刪除數據後,profit 就是 float64 類型了。

簡單的數據探索完成了,接下來進行圖表的繪製。

採用 matplotlib 進行繪製圖表

首先繪製隨着年份變化的平均利潤表,同時也會繪製收入隨年份的變化狀況,以下圖所示:

結果看起來有點相似指數式增加,但出現兩次巨大的降低狀況,這其實和當時發生的事件有關係,接下來能夠看看收入的變化狀況,以下圖所示:

從收入看,變化並無像利潤同樣出現兩次波動。

參考 stackoverflow.com/a/47582329/…

結果代表了不一樣公司的差距仍是很大的,存在有收入幾十億,也有虧損幾十億的公司。

其實還有不少問題能夠深刻探討,但目前給出的例子已經足夠入門 Jupyter notebook,這部分例子展現瞭如何分析探索數據,繪製數據的圖表。


參考


最後本文的代碼和數據能夠公衆號後臺回覆「Jupyter」獲取連接地址。

歡迎關注個人微信公衆號--算法猿的成長,或者掃描下方的二維碼,你們一塊兒交流,學習和進步!

相關文章
相關標籤/搜索