又到擺脫重複工作,換個心情,然而並沒有軟用的時間了。這次,教大家如何搭建一個好看的jupyter環境。
安裝Jupyter
先來展示一下我的環境
- python: 3.5.*
- macos: 10.12.4
安裝Jupyter的過程只需安裝Anaconda即可。
測試一下初始設定:
1 |
jupyter notebook |
配置ipython
首先,如果每次你開啟一個nb(notebook)時,如果都需要載入一些模組,一個很好地方法就是配置ipython的配置檔案,可以直接使用以下命令建立配置檔案:
1 |
ipython profile create |
此時你會在~/.ipython/profile_default/
目錄中獲得下面兩個檔案:
ipython_config.py
:開啟任意ipython kernel時都會執行ipython_notebook_config.py
:開啟notebook時會執行
配置方式是在所需要的配置檔案中先鍵入:
1 |
c = get_config() |
然後就可以通過修改c
的屬性來控制所有的配置。
顯然,對大多數分析場景,numpy
, scipy
, pandas
是肯定要載入的,因此,寫到配置中即可:
1 2 3 4 5 6 |
c.InteractiveShellApp.exec_lines = [ "import pandas as pd", "import numpy as np", "import scipy.stats as spstats", "import scipy as sp", ] |
配置matplotlib
還有一個常用功能就是matplotlib
。matplotlib
在notebook中需要使用
1 |
%matplotlib inline |
才可預設在notebook中顯示影像,一個簡單地方法就是在配置檔案中加入,
1 |
c.IPKernelApp.matplotlib = 'inline' |
當然,預設也需要載入matplotlib
1 2 3 4 5 6 7 |
c.InteractiveShellApp.exec_lines = [ "import pandas as pd", "import numpy as np", "import scipy.stats as spstats", "import scipy as sp", "import matplotlib.pyplot as plt" ] |
當然,也可以更多。但這樣可能會影響初始化notebook和ipython shell的速度,這個請大家自己權衡。
matplotlib顯示中文
此外,單獨拎matplotlib
出來的另一個原因是,matplotlib
還有一箇中文顯示的問題。
首先,解決編碼問題。
python 2.7.*
的解決方案是,在配置中加入:
1 2 3 4 |
import seaborn as sns import sys# print sys.getdefaultencoding()# ipython notebook中預設是ascii編碼 reload(sys) sys.setdefaultencoding('utf8') |
python 3.*
出於某些原因,不建議通過sys
模組修改編碼,原因參見這裡。
解決方案是,在shell的配置中重新設定配置變數(bash的話設定檔案.bashrc
,zsh則設定檔案.zshrc
)。方法是末尾新增:
1 |
export PYTHONIOENCODING="utf8" |
當然另一個方法是在啟動notebook時使用
1 |
PYTHONIOENCODING="utf8" & jupyter notebook |
第二個是修改matplotlib的預設字型。
首先我們來看可以使用的字型
1 2 3 4 5 6 7 8 9 10 11 12 |
import matplotlib.font_manager fonts = matplotlib.font_manager.findSystemFonts() l = [] for f in fonts: try: font =matplotlib.font_manager.FontProperties(fname=f) #print(font.get_family()) l.append((f, font.get_name(), font.get_family(), font.get_weight())) except: pass df = pd.DataFrame(l, columns=['path', 'name', 'family', 'weight']) df |
你應該看到下面這樣的表格:
然後找到支援中文的字型名,然後設定matplotlib的預設字型:
1 2 |
import matplotlib as mpl mpl.rc('font', family='Noto Sans CJK SC') |
當然,你可以新增到剛才的配置中,或者採用這個部落格的方法。
此外,如果你使用seaborn
的話,seaborn
在設定配置時可能會覆蓋掉matplotlib
,此時採用以下程式碼即可:
1 2 3 4 5 |
import seaborn as sns sns.set_style('ticks', { 'font.family': ['Noto Sans CJK SC'], }) |
但是,該語句不建議寫在配置中,因為經常需要修改,可能會覆蓋之前的配置。
matplotlib在Retina螢幕中顯示模糊問題
直接使用下面語句即可,
1 |
%config InlineBackend.figure_format = 'retina' |
當然也可在配置中直接加入
1 |
c.InlineBackend.figure_format = 'retina' |
修改notebook樣式
預設的notebook可以逼你心中大喊WTF,這時候你需要一點CSS技能,修改~/.jupyter/custom/custom.css
的內容。
個人認為最需要修改的內容包括
- notebook的預設寬度:notebook預設比較寬,markdown文字會顯得比較少,如果需要對外展示,文字部分會過少。
- notebook的程式碼字型
我的修改規則是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
pre.CodeMirror-line { font-family: 'BlinkMacSystemFont', 'Lucida Grande', 'Segoe UI', Ubuntu, Cantarell, sans-serif } .output_subarea.output_text.output_result>pre { font-family: 'BlinkMacSystemFont', 'Lucida Grande', 'Segoe UI', Ubuntu, Cantarell, sans-serif } .output_subarea.output_text.output_stream.output_stdout>pre { font-family: 'BlinkMacSystemFont', 'Lucida Grande', 'Segoe UI', Ubuntu, Cantarell, sans-serif } #notebook-container { max-width: 830px; padding: 40px; } |
安裝Jupyter常用外掛
這裡推薦兩個jupyter
外掛:
外掛管理器jupyter notebook extensions
github地址在這裡。安裝和介紹也可以參考。
然後你就可以在jupyter主頁裡找到下面的標籤頁管理外掛了:
jupyter Dashboard
如果你的jupyter服務是搭建在主機上,並且平時和業務人員想用notebook地址的方式交付,jupyter dashboard
外掛是一個不錯的選擇。
安裝方法和github地址在這裡。
原本效果如下:
點選如下紅色設定,並點選黃色按鈕後
就可得到如下的報告形式(刪去了業務人員不想檢視的程式碼),然後就可以貼上連線交付報告了:
切換成dashboard模式可以拖拽相關方格來設定位置。
大功告成,現在開工!