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渲染器,可以將由$與$包裹的內容進行渲染併產生最終效果。例如:
希臘字母
希臘字母小寫/大寫 | 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:
mathscr:
mathcal:
mathbf:
取消默認斜體
默認傾斜:$x_{z}$
⇒
取消默認傾斜$\rm x_{z}$
⇒
特殊符號
$\bigcap_{i=1}^{n} \bigcup_{i=1}^n \binom{5}{3}$
⇒
$\forall$
⇒ :全稱量詞,表示任意的
$\exists$
⇒ :存在量詞,表示存在/至少一個
$\partial$
⇒ :偏導符號
$\propto$
⇒ :正比符號
$\mathop{\lim}_{n \to \infty }f(x)$
⇒ :無窮符號及極限
簡單公式
$y=x^2$
⇒
$e^{i\pi} + 1 = 0$
⇒
$e^x=\sum_{i=0}^\infty \frac{1}{i!}x^i$
⇒
獨佔一行:
$$\frac{n!}{k!(n-k)!} = {n \choose k}$$
矩陣
$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}$
輸出結果爲
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.csdn.net/ratsniper/article/details/78954852