IPython

Table of Contents

1. Commands

通常%用于测试单行语句,而%%用于块语句

1.1. 功能指令

  • %time: Time the execution of a single statement
  • %timeit: Time repeated execution of a single statement for more accuracy
  • %prun: Run code with the profiler
  • %lprun: Run code with the line-by-line profiler # %load_ext line_profiler
  • %memit: Measure the memory use of a single statement # %load_ext memory_profiler
  • %mprun: Run code with the line-by-line memory profiler
  • `%%cython` 用来编译cython代码, 而且必须放在在cell第一行
    • 调用前用 ` %load_ext cython` 加载cython模块。
  • `@numba.jit` 使用numba jit来加速数值运算。

1.2. 编辑指令

  • `!shell-command` 用来执行外部shell命令,同时可以将结果传给变量比如 `x = !pwd`.
  • %quickref 显示notebook命令
  • %history -n 1-4 历史命令1-4条
  • %debug 进入调试模式,如果需要自动打开可以使用%pdb on
  • %save filename n1-n2 保存历史上执行的命令,按照编号存取
  • %store output_variable > output.txt 把变量内容输出到文件
  • %logstart/off/on/stop 可以保存ipython下面所有执行的命令
  • %reset 清除当前session下面所有的变量
  • %xdel variable 清除当前sesison的某个变量
  • %bookmark <name> <dir> / cd <name> / %bookmark -l 书签系统
  • %who/%whos/%who_ls 列举当前环境下所有的变量
  • %cpaste 格式化粘贴代码
  • %page variable 通过分页器打印变量

2. Tricks

2.1. Biolerplate

import pandas as pd
import numpy as np
%matplotlib inline

import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')

# import seaborn as sns
# sns.set()

# https://matplotlib.org/3.1.0/api/matplotlib_configuration_api.html#matplotlib.RcParams
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.rcParams['figure.figsize'] = (15, 5)
# x,y轴字体大小,x属性字体大小,每个曲线标题字体大小
plt.rcParams['xtick.labelsize'] = 15
plt.rcParams['ytick.labelsize'] = 15
plt.rcParams['axes.labelsize'] = 20
plt.rcParams['legend.fontsize'] = 18

# 或者使用下面这个方式
# plt.rc('font', **{'sans-serif': ['SimHei']})
# plt.rc('axes', **{'unicode_minus': False})
# plt.rc('figure', **{'figsize': (10, 10)})

np.set_printoptions(precision=4)
pd.set_option('display.width', 5000)
pd.set_option('display.max_columns', 60)

2.2. Remote Notebook

UPDATE @ 2016-08-26: 发现下面方法可以用来解决remote ipython notebook的问题.

  • 首先在目标机器dev上启动ipython notebook. `jupyter notebook –no-browser –port=8888`
  • 然后在本机上选择绑定端口比如1000. `ssh -L "*:10000:dev:8888" dev`

之后就可以在本地使用 `http://localhost:10000` 来访问远端的notebook了.

2.3. 绘制图形的一些技巧

绘制图的时候尽可能地将数据组织成为DataFrame,然后调用DataFrame的plot方法画出来。这样可以省去标注等问题,并且只需要记住DataFrame的API即可。比如要绘制两个柱状图

df = pd.DataFrame()
df['a'] = a; df['b'] = b
df.hist(alpha=1, bins = 200, figsize=(20, 10))

尽可能地让plot往DataFrame上靠,而不是将DataFrame拆开以适应plot,虽然df上的方法相比native matplotlib弱很多,但是good enough.


此外如果需要分开两个axes来绘制的话,可以在plot时候加上参数ax

fig, (ax1, ax2) = plt.subplots(1,2, sharey=True)
df_cluster['招商银行'].plot(figsize=(20, 10), ax=ax1, legend=True, color = 'r', linewidth=1)
df_cluster['中信银行'].plot(figsize=(20, 10), ax=ax2, legend=True, color = 'b', linewidth=1)
# df_cluster.plot(figsize=(20, 10), color = 'yb', linewidth=2)