Python数据分析学习笔记02:Python语言基础、IPython与Jupyter笔记本
在2012年,现在大家习以为常的许多库,比如pandas、scikit-learn和statsmodels,那时都相对不成熟。在2017年,有日益增长的关于数据科学、数据分析和机器学习的文献资料,补充了先前关于通用科学计算的工作,主要针对计算科学家、物理学家和其它研究领域的专业人员。
学习Python编程成为高效软件工程师的好书确实不少。建议采用IPython控制台与Jupyter笔记本来做样例代码的实验,查看文档了解各种类型、函数和方法。
一、Python解释器
Python是一种解释性语言。Python解释器通过一次执行一条语句来运行程序。在命令行键入python命令可以调用标准交互Python解释器:
>>>是python提示符,其后可以键入表达式或语句。
键入exit()或按组合键Ctrl+Z(Windows系统)返回命令行提示符。
运行python程序很简单,调用python,用一个.py文件作为其第一个参数。
编写一个python程序hello_world.py:
运行上述python程序:
一些Python程序员以这种方式来执行他们的Python代码,而那些做数据分析和科学计算的程序员利用IPython或Jupyter笔记本。
- IPython 是一个 for Humans 的 Python 交互式 shell,用了它之后你就不想再用自带的 Python shell 了,IPython 支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多实用功能和函数,同时它也是科学计算和交互可视化的最佳平台。
- Jupyter Notebook 就像一个草稿本,能将文本注释、数学方程、代码和可视化内容全部组合到一个易于共享的文档中,以 Web 页面的方式展示。它是数据分析、机器学习的必备工具。
在IPython里,使用%run命令执行指定的Python程序。
使用Spyder自带的IPython控制台操作:
IPython提示符是 In [数字] ,跟Python提示符 >>> 相对应。
注意:在IPython里,可以按组合键
二、IPython基础
1、运行IPython外壳
你可以通过键入并按回车来执行任意Python语句。如果仅仅键入一个变量,IPython会呈现这个对象的字符串表示。
前两行是Python代码语句;第二条语句创建一个名叫data的变量,指向一个新建的Python词典。最后一行在控制台打印变量data的值。
很多种Python对象格式化后更有可读性,或漂亮打印(pretty-printed),与通常用print函数来打印有所不同。
利用pprint实现漂亮打印效果:
IPython也提供了通过复制粘贴来执行任意代码块或完整Python脚本的手段。当然,你也可以用Jupyter笔记本来处理更大的代码块。
mydict = {'students': [{'name':'Tom', 'age': 18},{'name':'Jerry', 'age': 19}]}
pprint.pprint(mydict)
# 未超长:
{'students': [{'age': 18, 'name': 'Tom'}, {'age': 19, 'name': 'Jerry'}]}
pprint.pprint(mydict, width=20)
将上述代码块全部选中,复制粘贴到IPython控制台,敲回车执行:
step = 0
def move(p1, p2):
global step
step = step + 1
print('Step ' + str(step) + ': ', p1, '->', p2)
def hanoi(n, x, y, z):
if n == 1:
move(x, z)
else:
hanoi(n-1, x, z, y)
move(x, z)
hanoi(n-1, y, x, z)
hanoi(3, 'A', 'B', 'C')
将上述代码块全部选中,复制粘贴到IPython控制台,敲回车执行:
大家可以看到,在IPython里执行代码块还是挺方便的,对于已有的Python程序,简单的复制粘贴敲回车就可以执行。
2、运行Jupyter笔记本
Jupyter项目主要组件之一就是notebook,一种用于代码、文本(有或无标签),数据可视化和其它输出的交互式文档。
Jupyter笔记本与内核交互,内核以任何数量的编程语言实现了Jupyter交互计算协议。Python的Jupyter内核采用IPython系统作为其底层行为。
要启动Jupyter,在终端运行jupyter notebook命令:
在很多平台上,Jupyter会自动在你默认浏览器里打开(除非你启动时带了--no-browser参数)。或者,当你启动了notebook,你可以导航到它给出的http地址,这里是http://localhost:8888/?token=2b9cd7470d199f917f01de16df40907c57c0afc2013e69f6,下图就是在Chrome浏览里Jupyter的登录页面。
要创建一个笔记本,单击【New】按钮,选择Python 3选项。在代码单元格里键入Python代码,然后按组合键Shift-Enter执行,如下图所示:
当你保存笔记本,会创建一个扩展名为.ipynb的文件。这是一种自包含文件格式,包含当前在笔记本里的所有内容(包括任何计算的代码输出)。这些东西可以被其他Jupyter用户加载并编辑。为了加载一个已有的笔记本,将文件放在启动笔记本的同一个目录里,或者其子目录里,然后从Jupyter登录页面双击那个文件名。
刚才,我保存了笔记本,并且重命名为“demo001”,于是在Jupyter当前目录下就有了demo001.ipynb文件。
在启动Jupyter的目录里保存了demo001.ipynb文件:
内容如下所示:
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello python world!\n"
]
}
],
"source": [
"print(\"hello python world!\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"250\n"
]
}
],
"source": [
"a = 100\n",
"b = 150\n",
"sum = a + b\n",
"print(sum)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
打开已有的Jupyter笔记本文件:
3、Tab补全功能
跟标准的Python外壳相比,IPython外壳具有tab补全功能,现在很多集成开发环境或交互式计算分析环境都提供了此功能。
定义了两个变量an_apple与an_example,输入an,按tab键,IPython会提示an_apple any an_example Anaconda3。
在一个对象后面键入英文句点,按tab键会自动提示其方法与属性:
同理,在模块后面键入英文句点,按tab键也会自动提示其函数或常量:
利用tab键也可以自动提示模块的私有属性和方法,但是必须加上一个下划线再按tab键:
结合%run命令,tab键自动补全功能可以为你节省不少敲键次数。
4、对象自省功能
在变量或方法名后加一个?,会显示一些相关信息:
定义一个函数,添加文档字符串;使用?可以显示文档字符串。
用??可以显示函数的源代码:
?还可以结合通配符*搜索IPython的命名空间:
注意,python shell不具有对象自省功能:
5、%run命令——运行Python脚本
6、%load命令——加载Python脚本
7、执行剪贴板里的代码
将上述代码全部选中,然后复制到剪贴板里。
在IPython里,利用魔法命令%paste,可以执行剪贴板里的代码:
8、终端键盘快捷键
Ctrl-L,清屏快捷键,在前面我们就已经提到过。
9、关于魔法命令
IPython提供了一些特殊命令,不是Python内置的,命令以%打头。
魔法命令之后加?也可以自省:
利用%automagic命令可以设置自动魔法命令是ON还是OFF,当设置为ON时,魔法命令可以省掉前面的%;当设置为OFF时,魔法命令不能省掉前面的%。默认情况下,automagic是ON状态,如下图所示:
一些魔法命令执行的结果还可以保存到变量里,如下图所示:
但是有些魔法命令执行的结果无法保存到变量里,只能直接显示在屏幕上,如下图所示: