從本博客開始,將系統的學習Python的數據分析的六大模塊numpy、scipy、matplotlib、pandas、scikit-learn、keras,有關Python的基礎知識,能夠看個人博客 http://digtime.cn/。
python特色:簡潔,開發效率高,運算速度慢,膠水特性
主要有三點:統計分析方法,提取有用的信息,研究、歸納、總結。
數據分析六大模塊:numpy、scipy、matplotlib、pandas、scikit-learn、keraspython
要利用Python進行科學計算,就須要一一安裝所需的模塊,而這些模塊可能又依賴於其它的軟件包或庫,於是安裝和使用起來相對麻煩。幸虧有人專門在作這一類事情,將科學計算所須要的模塊都編譯好,而後打包以發行版的形式供用戶使用,Anaconda就是其中一個經常使用的科學計算髮行版。程序員
安裝完anaconda,就至關於安裝了Python、IPython、集成開發環境Spyder、一些包等等。macos
對於Mac、Linux系統,Anaconda安裝好後,實際上就是在主目錄下多了個文件夾(~/anaconda)而已,Windows會寫入註冊表。安裝時,安裝程序會把bin目錄加入PATH(Linux/Mac寫入~/.bashrc,Windows添加到系統變量PATH),這些操做也徹底能夠本身完成。以Linux/Mac爲例,安裝完成後設置PATH的操做是網頁爬蟲
# 將anaconda的bin目錄加入PATH,根據版本不一樣,也多是~/anaconda3/bin echo 'export PATH="~/anaconda2/bin:$PATH"' >> ~/.bashrc # 更新bashrc以當即生效 source ~/.bashrc
MAC環境變量設置:bash
➜ export PATH=~/anaconda2/bin:$PATH ➜ conda -V conda 4.3.30
配置好PATH後,能夠經過 which conda
或 conda --version
命令檢查是否正確。假如安裝的是Python 2.7對應的版本,運行python --version
或 python -V
能夠獲得Python 2.7.12 :: Anaconda 4.1.1 (64-bit)
,也說明該發行版默認的環境是Python 2.7。網絡
在終端執行 conda list
可查看安裝了哪些包:數據結構
Conda的包管理就比較好理解了,這部分功能與pip相似。dom
個人編輯器使用的是 Pycharm
,能夠給其設置開發環境和模板,進行快速開發。機器學習
Anaconda 設置:
編輯器
固定模板設置:
# -*- coding:utf-8 -*- """ @author:Corwien @file:${NAME}.py @time:${DATE}${TIME} """
NumPy(Numeric Python)系統是Python的一種開源的數值計算擴展。這種工具可用來存儲和處理大型矩陣,比Python自身的嵌套列表(nested list structure)結構要高效的多(該結構也能夠用來表示矩陣(matrix))。聽說NumPy將Python至關於變成一種免費的更強大的MatLab系統。
numpy特性:開源,數據計算擴展,ndarray, 具備多維操做, 數矩陣數據類型、矢量處理,以及精密的運算庫。專爲進行嚴格的數字處理而產生。
小試牛刀:
# -*- coding:utf-8 -*- """ @author: Corwien @file: numpyTest.py @time: 17/11/5 01:32 """ import numpy as np def main(): lst = [[1, 3, 5], [2, 4, 6]] print(type(lst)) # <type 'list'> np_lst = np.array(lst) print(type(np_lst)) # <type 'numpy.ndarray'> # bool, int, int8, int16, int64 ..., uint8, float, float8 np_list = np.array(lst, dtype = np.float) # 1 numpy property print(np_list.shape) # pirnt: (2, 3) print(np_list.ndim) # pirnt: 2 print(np_list.dtype) # pirnt: float64 print(np_list.itemsize) # pirnt: 8 print(np_list.size) # pirnt: 6 # 2 some arrays print(np.zeros([2, 4])) # print(np.ones([4, 3])) # print("RandNum:") print(np.random.rand(2, 4)) print("RandInt:") print(np.random.randint(1, 10, 3)) print("Randn:") print(np.random.randn(2, 4)) print("Distribute:") print(np.random.beta(1, 10, 100)) # 3 Aarray Opers lst = np.arange(1, 11).reshape([2, -1]) print("Exp") print(np.exp(lst)) print(np.exp2(lst)) print(np.sqrt(lst)) print(np.sin(lst)) print("Log") print(np.log(lst)) lst1 = np.array([10, 20, 30, 40]) lst2 = np.array([1, 2, 4, 5]) print("Add") print(lst1 + lst2) # [11 22 34 45] if __name__ == "__main__": main()
# -*- coding:utf-8 -*- """ @author: Corwien @file: liner.py @time: 17/11/6 00:17 """ import numpy as np # 4 liner from numpy.linalg import * print(np.eye(3)) lst = np.array([[1, 2], [3, 4]]) print("Inv: ") print(inv(lst)) print("T: ") print(lst.transpose()) print("Det:") print(det(lst)) print(eig(lst)) y = np.array([[5.], [7.]]) print("Slove") print(solve(list, y))
matplotlib 是用來繪圖表的,官網 matplotlib.org
# -*- coding:utf-8 -*- """ @author: Corwien @file: matplo.py @time: 17/11/6 00:44 """ import numpy as np def main(): #line import matplotlib.pyplot as plt x = np.linspace(-np.pi, np.pi, 256, endpoint=True) c, s = np.cos(x), np.sin(x) # 餘弦和正弦 plt.figure(1) plt.plot(x, c) plt.plot(x, s) plt.show() if __name__ == "__main__": main()
具備屬性的圖:
# -*- coding:utf-8 -*- """ @author: Corwien @file: matplo.py @time: 17/11/6 00:44 """ import numpy as np def main(): #line import matplotlib.pyplot as plt x = np.linspace(-np.pi, np.pi, 256, endpoint=True) c, s = np.cos(x), np.sin(x) # 餘弦,正弦 plt.figure(1) plt.plot(x, c, color="blue", linewidth=1.0, linestyle="-", label="COS", alpha=0.5) # x 自變量, c 餘弦 plt.plot(x, s, "r*", label="SIN") plt.title("COS & SIN") ax=plt.gca() ax.spines["right"].set_color("none") ax.spines["top"].set_color("none") ax.spines["left"].set_position(("data", 0)) ax.spines["bottom"].set_position(("data", 0)) ax.xaxis.set_ticks_position("bottom") ax.yaxis.set_ticks_position("left") for label in ax.get_xticklabels()+ax.get_yticklabels(): label.set_fontsize(10) label.set_bbox(dict(facecolor="white", edgecolor="None", alpha=0.2)) plt.legend(loc="upper left") plt.grid() plt.axis([-1, 1, -0.5, 1]) plt.fill_between(x, np.abs(x) < 0.5, c, c > 0.5, color="green",alpha=0.25) t = 1 plt.plot([t, t], [0, np.cos(t)], "y", linewidth=3, linestyle="--") plt.annotate("cos(1)", xy=(t, np.cos(1)), xycoords="data", xytext=(+5, +10), textcoords="offset points", arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.1")) plt.show() if __name__ == "__main__": main()
scipy 是一個數值計算庫,官網 https//www.scipy.org,
scipy包包含致力於科學計算中常見問題的各個工具箱。它的不一樣子模塊相應於不一樣的應用。像插值,積分,優化,圖像處理,,特殊函數等等。
scipy能夠與其它標準科學計算程序庫進行比較,好比GSL(GNU C或C++科學計算庫),或者Matlab工具箱。scipy是Python中科學計算程序的核心包;它用於有效地計算numpy矩陣,來讓numpy和scipy協同工做。
在實現一個程序以前,值得檢查下所需的數據處理方式是否已經在scipy中存在了。做爲非專業程序員,科學家老是喜歡從新發明造輪子,致使了充滿漏洞的,未經優化的,很難分享和維護的代碼。相反,Scipy程序通過優化和測試,所以應該儘量使用。
# -*- coding:utf-8 -*- """ @author: Corwien @file: sciTest.py @time: 17/11/7 00:57 """ import numpy as np def main(): #1--integral from scipy.integrate import quad, dblquad print(quad(lambda x:np.exp(-x), 0, np.inf)) # print: (1.0000000000000002, 5.842606742906004e-11) # print(dblquad(lambda t, x:np.exp(-x*t)/t**3, np.inf.lambda x:1, lambda x:np.inf)) if __name__ == "__main__": main()
pandas官網 爲了解決數據分析而建立的庫。
基本操做:
# -*- coding:utf-8 -*- """ @author: Corwien @file: pandasTest.py @time: 17/11/7 00:57 """ import numpy as np import pandas as pd def main(): #Data Structure s=pd.Series([i*2 for i in range(1, 11)]) print(type(s)) dates = pd.date_range("20171110", periods=8) df = pd.DataFrame(np.random.randn(8, 5), index = dates, columns=list("ABCDE")) print df if __name__ == "__main__": main()
打印結果:
<class 'pandas.core.series.Series'> A B C D E 2017-11-10 -0.634174 -0.075550 1.029316 0.548124 1.556995 2017-11-11 1.060133 -0.392410 -0.007274 -0.555487 1.350169 2017-11-12 0.443465 -0.635941 -0.194218 0.195767 -0.732606 2017-11-13 0.760449 -0.526587 0.007155 0.554792 -1.230684 2017-11-14 1.624870 -0.304462 0.646139 0.187635 1.537512 2017-11-15 -1.312318 1.145372 -0.226041 -0.463330 0.446066 2017-11-16 -0.586573 0.803408 -1.565312 1.949908 -0.959705 2017-11-17 0.863814 -0.949896 1.880501 -0.032511 -0.116557 Process finished with exit code 0