Anaconda Jupyter Lab环境配置,安装及使用
简单介绍
官网:https://www.anaconda.com/
简单来说,Anaconda是包管理器和环境管理器,Jupyter notebook 可以将数据分析的代码、图像和文档全部组合到一个web文档中,事实上Anaconda 和 Jupyter notebook已成为数据分析的标准环境。
参考文章:初学 Python 者自学 Anaconda 的正确姿势是什么?
怎么在mac 系统上使用Python?怎么安装Anaconda?
正常安装及启动
- 清华镜像下载
- 命令行启动
jupyter notebook
或点击快捷图标方式启动
Google免费Notebook CoLab
https://colab.research.google.com/notebooks/welcome.ipynb#scrollTo=-Rh3-Vt9Nev9
https://research.google.com/colaboratory/faq.html
Jupyter 和 Colaboratory 有什么区别?
Jupyter 是一个开放源代码项目,而 Colaboratory 是在 Jupyter 基础之上开发的。通过 Colaboratory,您可以使用 Jupyter 笔记本并与他人共享,完全不需要在您自己的计算机上下载、安装或运行任何内容,只要有浏览器就可以使用。
Docker方式安装及启动
- 安装Docker
- 拉取镜像:
docker pull jupyter/datascience-notebook
- 启动容器
docker run -p 8888:8888 jupyter/datascience-notebook
其它Python IDE
Notebook的更多使用 More…
Latex in markdown cell
LaTex符号大全
LaTeX实现的原理类似于HTML,Notebook中的Markdown格式解释器中内置Latex渲染器,可以将由$与$包裹的内容进行渲染并产生最终效果。例如:
∫ a b f ( x ) d x \int_a^bf(x)dx ∫abf(x)dx
希腊字母
希腊字母小写/大写 | LaTeX形式 | 希腊字母小写/大写 | LaTeX形式 |
---|---|---|---|
α A | \alpha A | μ N | \mu N |
β B | \beta B | ξ Ξ | \xi \Xi |
γ Γ | \gamma \Gamma | o O | o O |
δ Δ | \delta \ Delta | π Π | \pi \Pi |
ϵ ε E | \epsilon \varepsilon E | ρ ϱ P | \rho \varrho P |
ζ Z | \zeta Z | σ Σ | \sigma \Sigma |
η H | \eta H | τ T | \tau T |
θ ϑ Θ | \theta \vartheta \Theta | υ Υ | \upsilon \Upsilon |
ι I | \iota I | ϕ φ Φ | \phi \varphi \Phi |
κ K | \kappa K | χ X | \chi X |
λ Λ | \lambda \Lambda | ψ Ψ | \psi \Psi |
不同字体
mathbb:$\mathbb{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz}$
mathscr:$\mathscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz}$
mathcal:$\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz}$
mathbf:$\mathbf{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz}$
输出结果为
mathbb:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
,
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
\mathbb{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz}
ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz
mathscr:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
,
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
\mathscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz}
ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz
mathcal:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
,
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz}
ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz
mathbf:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
,
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
\mathbf{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz}
ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz
取消默认斜体
默认倾斜:$x_{z}$
⇒
x
z
x_{z}
xz
取消默认倾斜$\rm x_{z}$
⇒
x
z
\rm x_{z}
xz
特殊符号
$\bigcap_{i=1}^{n} \bigcup_{i=1}^n \binom{5}{3}$
⇒
⋂
i
=
1
n
⋃
i
=
1
n
(
5
3
)
\bigcap_{i=1}^{n} \bigcup_{i=1}^n \binom{5}{3}
⋂i=1n⋃i=1n(35)
$\forall$
⇒
∀
\forall
∀ :全称量词,表示任意的
$\exists$
⇒
∃
\exists
∃:存在量词,表示存在/至少一个
$\partial$
⇒
∂
\partial
∂:偏导符号
$\propto$
⇒
∝
\propto
∝:正比符号
$\mathop{\lim}_{n \to \infty }f(x)$
⇒
lim
n
→
∞
f
(
x
)
\mathop{\lim}_{n \to \infty }f(x)
limn→∞f(x):无穷符号及极限
简单公式
$y=x^2$
⇒ y = x 2 y=x^2 y=x2
$e^{i\pi} + 1 = 0$
⇒ e i π + 1 = 0 e^{i\pi} + 1 = 0 eiπ+1=0
$e^x=\sum_{i=0}^\infty \frac{1}{i!}x^i$
⇒ e x = ∑ i = 0 ∞ 1 i ! x i e^x=\sum_{i=0}^\infty \frac{1}{i!}x^i ex=∑i=0∞i!1xi
独占一行:
$$\frac{n!}{k!(n-k)!} = {n \choose k}$$
n ! k ! ( n − k ) ! = ( n k ) \frac{n!}{k!(n-k)!} = {n \choose k} k!(n−k)!n!=(kn)
矩阵
$A_{m,n} =
\begin{pmatrix}
a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\
a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m,1} & a_{m,2} & \cdots & a_{m,n}
\end{pmatrix}$
输出结果为
A m , n = ( a 1 , 1 a 1 , 2 ⋯ a 1 , n a 2 , 1 a 2 , 2 ⋯ a 2 , n ⋮ ⋮ ⋱ ⋮ a m , 1 a m , 2 ⋯ a m , n ) A_{m,n} = \begin{pmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \cdots & a_{m,n} \end{pmatrix} Am,n=⎝⎜⎜⎜⎛a1,1a2,1⋮am,1a1,2a2,2⋮am,2⋯⋯⋱⋯a1,na2,n⋮am,n⎠⎟⎟⎟⎞
Notebook中的Magic开关
- 为实现一些快捷操作,提升效率。Notebook中提供了Magic开关,能极大得优化我们使用Notebook的体验。
- Magic 开关分为两大类:%line magic & %%cell magic
Magic开关总览
%lsmagic
%quickref
Line Magic
%config ZMQInteractiveShell.ast_node_interactivity='all'
%whos
%reset
Cell Magic
%%timeit 50
for item in range(100):
a=item
del a
%%time
for item in range(100000):
a=item
del a
%%SVG
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 450 400" width="500" height="200">
<rect x="80" y="60" width="250" height="250" rx="20" style="fill:red; stroke:black; fill-opacity:0.7" />
<rect x="280" y="110" width="250" height="250" rx="40" style="fill:blue; stroke:black; fill-opacity:0.5;" />
</svg>
%%javascript
alert("hey");
%%html
<table>
<tr>
<th>Header 1</th>
<th>Header 2</th>
</tr>
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>
<marquee style='width: 30%; color: blue;'><b>Hey There!!!</b></marquee>
%%system
dir
!dir
%matplotlib inline
import numpy as np
from matplotlib import pyplot as plt
ys = 200 + np.random.randn(100)
x = [x for x in range(len(ys))]
plt.plot(x, ys, '-')
plt.fill_between(x, ys, 195, where=(ys > 195), facecolor='g', alpha=0.6)
plt.title("Fills and Alpha Example")
plt.show()
%matplotlib
Jupyter notebook扩展
Jupyter notebook功能扩展Nbextensions
python -m pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user --skip-running-check
添加对R语言的支持
在安装完R后,进行conda install -c r r-essentials
,再新建notebook测试
添加对Julia语言的支持
先安装Julia,运行Julia,using Pkg;Pkg.add('IJulia');using IJulia;notebook()
即可
添加对C的支持
conda install -c QuantStack -c conda-forge xeus-cling
,Try it Online
%%writefile a.py
for item in range(10):
print(item)
Python简介,解释执行,运行方式
安装Python
官网:https://docs.python.org/3/download.html
教程:https://www.runoob.com/python3/python3-tutorial.html
Python简介
Python源码目录结构
- Include: 这个目录包括了 Python 的所有头文件。
- Lib:这里是 Python 标准库,都是用 Python 实现的。
- Modules:用 C 语言编写的模块,比如 cStringIO / tkinter 高性能实现
- Objects:Python 内建对象,如 int / list 的实现
- Parser:Python 解释器的 Scanner 和 Parser
- Python:Python 解释器的 Compiler 和执行引擎,运行核心
Python解释与运行
Python解释器interpreter
运行在系统线程上的C语言函数+超大循环。每个字节码指令均对应一个完全由C实现的逻辑。
Python解释器在执行过程
先对文件中的Python源代码进行编译,编译的主要结果是产生的一组Python的字节码(byte code),pyc文件是字节码在磁盘上的表现形式,是进行import module时对py文件进行编译的文件结果(如果之前编译过,且源文件又没有变化,则直接运行该pyc文件),而编译结果就是Python中的PyCodeObject对象,然后PyCodeObject对象交给Python虚拟机(Virtual Machine),由虚拟机按照顺序一条一条地执行字节码,从而完成对Python程序的执行动作。
python: .py -->(编译器)–>.pyc–>解释器(虚拟机)–>返回结果
在编译好的Python环境中,编译器和解释器都被封装进了python36.dll中,由python.exe调用
延伸阅读:Python解释器
默认用到的都是用C语言实现的对Python的解释器CPython。也有用Python实现的python解释器PyPy,.Net实现的IronPython
- CPython解释器中的两个栈:
- 执行栈Evaluation Stack:存储指令操作数
- 块栈Block Stack:存储循环,异常等信息
字码基于栈式虚拟机,没有寄存器概念,转译简单,没有另类优化。不能被CPU执行,每条字节码对应C实现的机器指令。
Python 实现了栈式虚拟机 (Stack-Based VM) 架构,通过与机器⽆关的字节码来实现跨平台执⾏能⼒。
这种字节码指令集没有寄存器,完全以栈 (抽象层⾯) 进⾏指令运算。
Python的两种运行方式
1.解释式运行:如PyCharme,或命令行下python pyname.py
- 下方新建py文件
%%writefile test.py
import sys
print('the file run name ',sys.argv[0],'The time that file should run:',sys.argv[1])
for i in range(int(sys.argv[1])):
print(i,'times run')
!python test.py 2
2.交互式运行
- 命令行Python,bpython,ipython,notebook
延伸阅读 PyCodeObject <module>
对Python编译器来说,PyCodeObject对象是其真正的编译结果,而pyc文件只是对象持久化表现形式
Python程序的字节码在运行时以PyStringObject的形式保存在PyCodeObject的co_code域里。co_code域只含有指令而不包含别的程序数据;变量名、常量等数据均放在别的域里。
#内置函数compile可以编译Python代码
#source_code为py源文件内容
source_code=\
'''
#this is documents
base_string='cccc.com'
def test1(a,b):
return a+b
def test2(c):
x=7
print(c**2+x)
'''
co=compile(source_code,'test_compile8.py','exec')
exec(co)#类似于import test_compile.py,即执行了这个文件到当前会话
test1(2,6),test2(7)#可以看到test1,test2名称已经导入当前名字空间
type(co)#code code类对象
co#<code object <module> at 0x000001FC85732300, file "test_compile.py", line 3> 该对象的一些信息
co.co_names#返回这个PyCodeobject对象内符号名集合,('base_string', 'test1', 'test2')
co.co_consts#返回这个PyCodeobject对象内常量集合
co.co_code
#co_code是指令序列,是一串二进制流,co_code只含有指令而不包含其它数据,如变量名、常量,数据放在别的区域里。
#opcode-“字节码”:指令以字节为单位,最多表示256个不同的字节码指令。
dir(co)#co.__dir__() 更多PyCodeObject对象查看
co?
##也可以直接从文件读源码,然后用compile编译为PyCodeObject
src=open('test.py').read()
co1=compile(src,'test.py','exec')
co1
dir(co1)
co1.co_filename
co1.co_filename
#对co_code的翻译:opcode-“字节码”:指令以字节为单位,最多表示256个不同的字节码指令。
import opcode
print(opcode.opmap)
# dir(opcode)
#更好的翻译Disassembler
延伸阅读:使用Disassembler反汇编模块
- 文档: https://docs.python.org/3/library/dis.html
- Disassembler格式及解读
- 第一列表示以下几个指令在py文件中的行号;
- 第二列是该指令在指令序列co_code里的偏移量;
- 第三列是指令opcode的名称,分为有操作数和无操作数两种,opcode在指令序列中是一个字节的整数;
- 第四列是操作数oparg,在指令序列中占两个字节,基本都是co_consts或者co_names的下标;
- 第五列带括号的是操作数说明。
opcode | oparg | opcode | opcode | oparg |
---|---|---|---|---|
1 byte | 2 bytes | 1 byte | 1 byte | 2 bytes |
import dis
dis.dis(co)#反汇编module test_compile
# dis.dis(test1),dis.dis(test2)#反汇编module test_compile下的函数
Python内置及三方库的管理及使用
模块Module与包Package
- 模块:一个模块就是一个Python源码文件(也可能是对c语言文件编译生成的pyd文件)
- 包:组织一堆相关功能的模块,并包含
__init__.py
文件的目录。
模块的导入
一个模块本质上是一个py文件
%%writefile m.py
a=123
_b='str'#
def m_fun():
return globals()
%whos
import m
m.__name__
__name__
#修改源码后不升效?试下reload
import m
from imp import reload
reload(m)
m.a
#一个进程只对应一个模块的实例,无论被导入多少次,每个模块在整个解释器进程仅有一个实例存在。
#在不同的命令行窗口,不同的notebook是不同的解释器进程
for i in range(5):
import os
print(id(os))
#reload也是一样
for i in range(5):
import os
print(id(reload(os)))
模块名为__main__
???
__name__
正常情况下模块名__name__为对应的文件名,但当模块作为程序入口时,name__被修改名__main
因此使用if name=’main’:实现自适应。
if __name__=='__main__':
dosomething
扩展阅读:使用type函数自定义模块(非从文件中导入)
import types
mm=types.ModuleType('MyModule')
type(mm),type(__builtins__)
mm.name='f'
mm.__name__
扩展阅读:模块与名字空间
每个模块都有一个全局名字空间。
如果直接在模块级别执行,那么当前名字空间和全局名字空间相同
globals()固定指向模块的名字空间
locals() is globals() #每个模块都有一个全局名字空间。如果直接在模块级别执行,那么当前名字空间和全局名字空间相同。
True
import m
globals() is m.m2_fun() #globals()固定指向模块的名字空间
False
包的导入 import 的使用
import this#Python之禅
Python内置包
import sys
list(sys.modules.keys())
import requests
r=requests.get('http://www.google.com')
html_code=r.text
import os
os.system('mkdir os_test')
使用浏览器查看内置包
cmd命令行下运行,python -m pydoc -p 1234
三方包的管理
!pip list #列出所有的package
批量安装Package
创建requirements.txt文件,将所需安装的包的名字都分行放在里
pip install -r ./requirements.txt
如何高效得使用帮助
- 官网文档 https://docs.python.org/3/
- dir与tab的使用
- help, ?,shift-tab的使用
str1='cccc.com'
str1.rjust?
help(exec)
?exec
延伸阅读: PEP- Python增强建议书
PEP是Python Enhancement Proposals的缩写。一个PEP是一份为Python社区提供各种增强功能的技术规格,也是提交新特性,以便让社区指出问题,精确化技术文档的提案。
https://www.python.org/dev/peps/
https://www.python.org/dev/peps/pep-3104/
https://blog.youkuaiyun.com/ratsniper/article/details/78954852