Python for Data Analysis 学习笔记(1)

Tab Completion

从表面上看,IPython shell看起来像标准终端Python解释器的美化版本(用python调用)。 标准Python shell的主要改进之一是tab completion,在许多IDE或其他交互式计算分析环境中都可以找到。 在shell中输入表达式时,按下Tab键将在命名空间中搜索匹配到目前为止输入的字符的任何变量(对象,函数等):


在这个例子中,请注意IPython显示了我定义的两个变量以及Python关键字和内置函数any。 当然,您也可以在键入句点后在任何对象上完成方法和属性:


模块也是如此:


在Jupyter笔记本和更新版本的IPython(5.0及更高版本)中,自动完成显示在下拉框中而不是类似上面的文本输出。

    请注意,IPython默认隐藏以下划线开头的方法和属性,例如魔术方法和内部“私有”方法和属性,以避免混乱显示(并且混淆新手用户!)。 这些也可以制表符完成,但您必须先键入下划线才能看到它们。 如果您希望始终在制表符完成中看到此类方法,则可以在IPython配置中更改此设置。 请参阅IPython文档以了解如何执行此操作。(没明白)

除了搜索交互式命名空间和完成对象或模块属性之外,Tab completion可用于许多上下文。 当输入看起来像文件路径的任何东西时(即使在Python字符串中),按Tab键将完成与您输入的内容相匹配的计算机文件系统上的任何内容:


结合%run命令(请参阅第25页的“%run命令”),该功能可以为您节省许多击键。

Tab completion节省时间的另一个领域是函数关键字参数(包括= sign!)的完成。 见图2-4。


图2-4    Jupyter笔记本中的自动完成功能关键字

我们稍微仔细看看功能。


Introspection

在变量之前或之后使用问号(?)将显示有关该对象的一些常规信息:

In [8]: b = [1, 2, 3]
In [9]: b?
Type: list
String Form:[1, 2, 3]
Length: 3
Docstring:
list() -> new empty list
list(iterable) -> new list initialized from iterable's items
In [10]: print?
Docstring:
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.

Type: builtin_function_or_method


这被称为对象内省(?)。 如果对象是函数或实例方法,则会显示文档字符串(如果已定义)。 假设我们编写了以下函数(可以在IPython或Jupyter中重现):

def add_numbers(a, b):
"""
Add two numbers together
Returns
-------
the_sum : type of arguments
"""

return a + b

然后用? 向我们显示文档字符串:


使用?? (如果可能的话)也会显示函数的源代码:


? 具有最终用法,用于以类似于标准Unix或Windows命令行的方式搜索IPython命名空间。 许多与通配符(*)结合的字符将显示与通配符表达式匹配的所有名称。 例如,我们可以获得包含load的顶级NumPy命名空间中的所有函数的列表:



The %run Command

您可以使用%run命令在IPython会话环境中将任何文件作为Python程序运行。 假设您在ipython_script_test.py中存储了以下简单脚本:

def f(x, y, z):
return (x + y) / z
a = 5
b = 6
c = 7.5

result = f(a, b, c)

您可以通过将文件名传递给%run来执行此操作:

In [14]: %run ipython_script_test.py

该脚本运行在一个空的命名空间中(没有定义任何导入或其他变量),以便该行为应该与使用python script.py在命令行上运行程序相同。 然后可以在IPython shell中访问文件中定义的所有变量(导入,函数和全局变量)(直到引发异常)

In [15]: c
Out [15]: 7.5
In [16]: result

Out[16]: 1.4666666666666666

如果一个Python脚本需要命令行参数(可以在sys.argv中找到),那么它们可以在文件路径之后传递,就像在命令行上运行一样。

    如果您想让脚本访问已在交互式IPython命名空间中定义的变量,请使用%run -i而不是纯运行%。

在Jupyter笔记本中,您也可以使用相关的%load magic函数,该函数将脚本导入代码单元格中:

>>> %load ipython_script_test.py
def f(x, y, z):
return (x + y) / z
a = 5
b = 6

c = 7.5

result = f(a, b, c)


中断正在运行的代码

在任何代码运行时按下Ctrl-C,无论脚本是通过%run还是长时间运行的命令,都会导致引发Keyboard Interrupt。 这会导致几乎所有的Python程序都会立即停止,除非在某些特殊情况下。

    当一段Python代码调用某些已编译的扩展模块时,按Ctrl-C并不总是使程序执行立即停止。 在这种情况下,您必须等到控制权返回给Python解释器,或者在更加恶劣的情况下强制终止Python过程。

从剪贴板执行代码
如果您使用的是Jupyter笔记本,则可以将代码复制并粘贴到任何代码单元中并执行。 也可以从IPython shell中的剪贴板运行代码。
假设您在其他应用程序中有以下代码:

x = 5
y = 7
if x > 5:
x += 1
y = 8
最简单的方法是%粘贴和%c粘贴魔术功能。 %paste将剪贴板中的任何文本作为一个单独的块在shell中执行:
In [17]: %paste
x = 5
y = 7
if x > 5:
x += 1
y = 8
## -- End pasted text --
%cpaste是相似的,除了它给你一个特殊的提示,用于粘贴代码到:
In [18]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:x = 5
:y = 7
:if x > 5:
: x += 1
:
: y = 8
:--
通过%cpaste块,您可以自由地在执行代码之前粘贴尽可能多的代码。 您可能会决定使用%cpaste来查看粘贴的代码,然后再执行它。 如果您不小心粘贴了错误的代码,您可以按Ctrl-C跳出%cpaste提示。

终端键盘快捷键

IPython有许多用于浏览提示的键盘快捷键(这对Emacs文本编辑器或Unix bash shell的用户来说是熟悉的)并且与shell的命令历史进行交互。 表2-1总结了一些最常用的快捷键。 请参阅图2-5,以了解其中的几个示例,例如光标移动。


图2-5    IPython shell中一些键盘快捷键的插图

表2-1    标准的IPython键盘快捷键

键盘快捷键说明
Ctrl-P or up-arrow       在命令历史中向后搜索以当前输入的文本开始的命令
Ctrl-N or down-arrow  在命令历史中向前搜索以当前输入文本开始的命令
Ctrl-R                            Readline风格的逆向历史搜索(部分匹配)
Ctrl-Shift-V                   从剪贴板粘贴文本
Ctrl-C                            中断当前正在执行的代码
Ctrl-A                            将光标移动到行首
Ctrl-E                             将光标移动到行尾
Ctrl-K                             从光标删除文本直到行尾
Ctrl-U                            丢弃当前行上的所有文本
Ctrl-F                             将光标向前移动一个字符
Ctrl-B                             将光标移回一个字符

Ctrl-L                             清屏

请注意,Jupyter笔记本具有大量单独的键盘快捷键,用于导航和编辑。 由于这些快捷方式的发展速度比IPython更快,我鼓励您在Jupyter笔记本的菜单中探索集成的帮助系统。

关于魔术命令

IPython的特殊命令(不是Python本身内置的)被称为“魔术”命令。 这些旨在促进常见任务,并使您能够轻松控制IPython系统的行为。 魔术命令是以百分号%为前缀的任何命令。 例如,您可以使用%timeit magic函数(稍后会详细讨论)来检查任何Python语句的执行时间,例如矩阵乘法:

In [20]: a = np.random.randn(100, 100)
In [20]: %timeit np.dot(a, a)
10000 loops, best of 3: 20.9 μs per loop

魔术命令可以被看作是在IPython系统中运行的命令行程序。 他们中的许多人都有额外的“命令行”选项,可以全部查看(如您所期望的)使用?:

In [21]: %debug?
Docstring:
::
%debug [--breakpoint FILE:LINE] [statement [statement ...]]
Activate the interactive debugger.
This magic command support two ways of activating debugger.
One is to activate debugger before executing code. This way, you
can set a break point, to step through the code from the point.
You can use this mode by giving statements to execute and optionally
a breakpoint.
The other one is to activate debugger in post-mortem mode. You can
activate this mode simply running %debug without any argument.
If an exception has just occurred, this lets you inspect its stack
frames interactively. Note that this will always work only on the last
traceback that occurred, so you must call this quickly after an
exception that you wish to inspect has fired, because if another one
occurs, it clobbers the previous one.
If you want IPython to automatically do this on every exception, see
the %pdb magic for more details.
positional arguments:
statement Code to run in debugger. You can omit this in cell
magic mode.
optional arguments:
--breakpoint <FILE:LINE>, -b <FILE:LINE>
Set break point at LINE in FILE.

魔术功能可以在没有百分号的情况下被默认使用,只要没有变量被定义为与魔术功能相同的名称。 此功能称为automagic,可以使用%automagic启用或禁用该功能。
一些魔术函数的行为与Python函数类似,它们的输出可以分配给一个变量:

In [22]: %pwd
Out[22]: '/home/wesm/code/pydata-book
In [23]: foo = %pwd
In [24]: foo
Out[24]: '/home/wesm/code/pydata-book'
由于IPython的文档可以从系统中访问,我鼓励您通过输入%quickref或%magic来探索所有可用的特殊命令。

表2-2重点介绍了一些在IPython中交互式计算和Python开发中具有生产力的关键问题。

表2-2。 一些经常使用的IPython魔术命令
命令说明
%quickref                          显示IPython快速参考卡
%magic                              显示所有可用魔术命令的详细文档
%debug                             在最后一个异常回溯的底部输入交互式调试器
%hist                                  打印命令输入(和可选的输出)历史记录
%pdb                                 任何异常后自动进入调试器
%paste                               从剪贴板执行预格式化的Python代码
%cpaste                             打开一个特殊提示,手动粘贴要执行的Python代码
%reset                                删除交互式命名空间中定义的所有变量/名称
%page OBJECT                   漂亮的打印对象并通过寻呼机显示
%run script.py                    在IPython中运行Python脚本
%prun statement               使用cProfile执行语句并报告分析器输出
%time statement               报告单个语句的执行时间
%timeit statement             多次运行语句以计算总体平均执行时间; 对于执行时间非常短的计时代码非常有用
%who, %who_ls, %whos    显示交互式命名空间中定义的变量,具有不同级别的信息/详细程度

%xdel variable                    删除一个变量并尝试清除对IPython内部对象的任何引用


Matplotlib集成
IPython在分析计算中流行的一个原因是,它与数据可视化和其他用户界面库(如matplotlib)良好集成。 如果你之前从未使用过matplotlib,请不要担心; 本书稍后会详细讨论。 %matplotlib magic函数配置了它与IPython shell或Jupyter笔记本的集成。 这很重要,因为否则您创建的绘图将不会出现(笔记本),或者直到关闭(外壳)才能控制会话。
在IPython shell中,运行%matplotlib设置集成,以便创建多个绘图窗口而不会干扰控制台会话:

In [26]: %matplotlib
Using matplotlib backend: Qt4Agg
In Jupyter, the command is a little different (Figure 2-6):
In [26]: %matplotlib inline

图2-6    Jupyter内联matplotlib绘图


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这本书主要是用 pandas 连接 SciPy 和 NumPy,用pandas做数据处理是Pycon2012上一个很热门的话题。另一个功能强大的东西是Sage,它将很多开源的软件集成到统一的 Python 接口。, Python for Data Analysis is concerned with the nuts and bolts of manipulating, processing, cleaning, and crunching data in Python. It is also a practical, modern introduction to scientific computing in Python, tailored for data-intensive applications. This is a book about the parts of the Python language and libraries you’ll need to effectively solve a broad set of data analysis problems. This book is not an exposition on analytical methods using Python as the implementation language., Written by Wes McKinney, the main author of the pandas library, this hands-on book is packed with practical cases studies. It’s ideal for analysts new to Python and for Python programmers new to scientific computing., Use the IPython interactive shell as your primary development environment, Learn basic and advanced NumPy (Numerical Python) features, Get started with data analysis tools in the pandas library, Use high-performance tools to load, clean, transform, merge, and reshape data, Create scatter plots and static or interactive visualizations with matplotlib, Apply the pandas groupby facility to slice, dice, and summarize datasets, Measure data by points in time, whether it’s specific instances, fixed periods, or intervals, Learn how to solve problems in web analytics, social sciences, finance, and economics, through detailed examples
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值