又到擺脫重複工作,換個心情,然而並沒有軟用的時間了。這次,教大家如何搭建一個好看的jupyter環境。
安裝Jupyter
先來展示一下我的環境
python: 3.5.*
macos: 10.12.4
安裝Jupyter的過程只需安裝Anaconda即可。
測試一下初始設置:
jupyter notebook
配置ipython
首先,如果每次你打開一個nb(notebook)時,如果都需要載入一些模塊,一個很好地方法就是配置ipython的配置文件,可以直接使用以下命令創建配置文件:
ipython profile create
此時你會在~/.ipython/profile_default/目錄中獲得下面兩個文件:
ipython_config.py:打開任意ipython kernel時都會運行
ipython_notebook_config.py:打開notebook時會運行
配置方式是在所需要的配置文件中先鍵入:
c = get_config()
然後就可以通過修改c的屬性來控制所有的配置。
顯然,對大多數分析場景,numpy, scipy, pandas是肯定要載入的,因此,寫到配置中即可:
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中需要使用
%matplotlib inline
纔可默認在notebook中顯示圖像,一個簡單地方法就是在配置文件中加入,
c.IPKernelApp.matplotlib = 'inline'
當然,默認也需要載入matplotlib
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.*的解決方案是,在配置中加入:
import seaborn as sns
import sys# print sys.getdefaultencoding()# ipython notebook中默認是ascii編碼
reload(sys)
sys.setdefaultencoding('utf8')
python 3.*出於某些原因,不建議通過sys模塊修改編碼,原因參見這裏(http://stackoverflow.com/questions/3828723/why-should-we-not-use-sys-setdefaultencodingutf-8-in-a-py-script)。
解決方案是,在shell的配置中重新設置配置變量(bash的話設置文件.bashrc,zsh則設置文件.zshrc)。方法是末尾添加:
export PYTHONIOENCODING="utf8"
當然另一個方法是在啓動notebook時使用
PYTHONIOENCODING="utf8" & jupyter notebook
第二個是修改matplotlib的默認字體。
首先我們來看可以使用的字體
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的默認字體:
import matplotlib as mpl
mpl.rc('font', family='Noto Sans CJK SC')
當然,你可以添加到剛纔的配置中,或者採用這個博客的方法。
此外,如果你使用seaborn的話,seaborn在設置配置時可能會覆蓋掉matplotlib,此時採用以下代碼即可:
import seaborn as sns
sns.set_style('ticks',
{
'font.family': ['Noto Sans CJK SC'],
})
但是,該語句不建議寫在配置中,因爲經常需要修改,可能會覆蓋之前的配置。
matplotlib在Retina屏幕中顯示模糊問題
直接使用下面語句即可,
%config InlineBackend.figure_format = 'retina'
當然也可在配置中直接加入
c.InlineBackend.figure_format = 'retina'
修改notebook樣式
默認的notebook可以逼你心中大喊WTF,這時候你需要一點CSS技能,修改~/.jupyter/custom/custom.css的內容。
個人認爲最需要修改的內容包括
notebook的默認寬度:notebook默認比較寬,markdown文字會顯得比較少,如果需要對外展示,文字部分會過少。
notebook的代碼字體
我的修改規則是:
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地址在這裏(https://github.com/ipython-contrib/jupyter_contrib_nbextensions)。安裝和介紹也可以參考。
然後你就可以在jupyter主頁裏找到下面的標籤頁管理插件了:
jupyter Dashboard
如果你的jupyter服務是搭建在主機上,並且平時和業務人員想用notebook地址的方式交付,jupyter dashboard插件是一個不錯的選擇。
安裝方法和github地址在這裏(https://github.com/jupyter/dashboards)。
原本效果如下:
點擊如下紅色設置,並點擊黃色按鈕後
就可得到如下的報告形式(刪去了業務人員不想查看的代碼),然後就可以粘貼連接交付報告了:
切換成dashboard模式可以拖拽相關方格來設置位置。
大功告成,現在開工!
來源作者:三次方根
來源地址:segmentfault.com/a/1190000009305646