Python數據科學入門-筆記01
標簽: python
Python數據科學入門
慕課網課程學習筆記
學習環境 win10 + 虛擬機centos7 + python3
第一節 Annconda 基本介紹
一、Anaconda 介紹
1.Anaconda 介紹
Anaconda /,æn?’kɑnd?/
Anaconda 是最著名的Python數據科學平臺,750+ 流行的Python&R包
- 跨平臺,開源,免費,活躍社區
- conda:可擴展的包管理工具
2.Anaconda 中的 conda
a).Conda 的 Environment 管理
- 創建一個新的environment:conda create –name python34 python=3.4
- **一個 environment:activity python34 # win系統中
source activity python34 # linux中
- 退出enviornment: deactivate python34 # win系統
source deactivate python34 # linux 中
- 刪除 environment: conda remove –name python34 –all
b).Conda 的Package 管理
- Conda 的包管理有點類似 pip
- 安裝一個python包: conda install packageName
- 查看已安裝包: conda list / conda list -n python34 # 查看指定環境的包列表
- 刪除一個 python 包: conda remove -n python34 numpy
c). IDE 比較
拓展:從IPython 到 Jupyter
d). 什么是 Ipython
- ipython 是一個強大的 交互式 shell
- 是 Jupyter 的kernel
- 支持交互式數據分析和可視化
- Ipython kernel 主要負責運行用戶代碼,通過stdin/stdut 和ipython shell交互
用 json message 通過 ZeroMQ 和 notebook 交互
e). 什么是 Jupyter Notebook
- 前身是 ipython notebook
- 是一個開源的 web application
- 可以創建和分享包含代碼,視圖,注釋文檔
- 可以用于統計數據統計,分析,建模,機器學習等領域
f).notebook 和 Kernel 之間的交互
- 核心是 notebook server
- notebook server 加載和保存 notebook
g).Notebook 的文件格式 .ipynb
- 由 Ipython Notebook 定義的一種格式(json)
- 可以讀取在線數據,csv / xls 文件
- 可以轉換成其他格式(py,html,pdf,md)
h).查看 .ipynb 文件 NBViewer
- 一個 online 的 ipynb 格式 notebook 展示工具
- 可以通過 URL 分享
- GitHub 集成了 NBViewer
- 通過轉換器輕松集成到 Blogs , emails,wikis ,books
二.環境安裝
1.安裝Anaconda 到 Centos7
官網下載好 Anaconda的 .sh 文件后
使用SecureCRT的sftp上傳到 centos 中
sftp 的一些命令:lpwd 查看本地物理機所在目錄,cld 進入本地目錄,put 上傳文件到 遠程機
- 上傳 安裝文件后,使用 sh 命令按提示安裝 Anaconda
2.Anaconda 基本命令
- conda –version 查看版本號
- jupyter notebook –no-browser 只啟動 服務,不啟動瀏覽器
3.ssh 虛擬機 端口轉發 到本地物理機
如果是桌面版 centos 可直接在虛擬機里訪問即可
或者本地機安裝直接使用
可以將遠端服務器一個端口remote_port綁定到本地端口port,其中-C是進行數據壓縮,-f是后臺操作,只有當提示用戶名密碼的時候才轉向前臺。-N是不執行遠端命令,在只是端口轉發時這條命令很有用處。-g 是允許遠端主機連接本地轉發端口。-R表明是將遠端主機端口映射到本地端口。如果是-L,則是將本地端口映射到遠端主機端口。
轉發命令:(注意參數對應)
- 轉發到遠端:ssh -C -f -N -g -L 本地端口:目標IP:目標端口 用戶名@目標IP
- 轉發到本地:ssh -C -f -N -g –R 本地端口:目標IP:目標端口 用戶名@目標IP
- ssh -C -f -N -g -D listen_port user@hostname/ip
接著瀏覽器訪問:
三.jupyter 的使用
1.登錄
2.新建 notebook
3.操作演示
4.win 系統下啟動 jupyter 服務
5.一些基本操作
第二節 數據科學領域的幾個常用Python庫
數據科學領域 5個 常用Python庫
Numpy/Scipy/Pandas/Matplotlib/Scikit-learn
1.Numpy 特點
- N維數組(矩陣),快速高效,矢量數學運算
- 高效的Index,不需要循環
- 開源免費跨平臺,運行效率足以和 C/Matlab 媲美
2.Scipy 特點
- 依賴于Numpy
- 專門為科學和工程設計
- 實現了多種常用科學計算:線性代數,傅里葉變換,信號和圖像處理
3.Pandas 特點
- 結構化數據分析利器(依賴于Numpy)
- 提供多種高級數據結構:Time-Series,DataFrame,Panel
- 強大的數據索引和數據處理能力
4.Matplotlib 特點
- Python 2D繪圖領域使用最廣泛的套件
- 基本能取代Matlab的繪圖功能(散點,曲線,柱形等)
- 通過 mplot3d 可以繪制精美的 3D 圖
5.Scikit-learn 特點
- 機器學習的 Python 模塊
- 建立在 Scipy 之上,提供了常用的機器學習算法:聚類,回歸
- 簡單易學的API接口
- 另外還有 google 的TensorFlow
第三節 Numpy 入門
1.矩陣回顧
- 基本概念:
- 矩陣:矩形的數組,即二維數組。其中向量和標量都是矩陣的特例
- 向量:是指 1 * n 或者 n * 1 的矩陣
- 標量:1 * 1 的矩陣
- 數組:N 維的數組,是矩陣的延伸
- 特殊矩陣
- 全 0 、全 1 矩陣
- 單位矩陣
矩陣加減運算兩個矩陣必須要有相同的行和列
- 相加/減的
- 行和列對應元素相加減
數組乘法(點乘)
- 數組乘法是對應元素之間的乘法
- 數組乘法是對應元素之間的乘法
- 矩陣乘法只有當矩陣 A的列數與矩陣 B的行數相等時 A× B才有意義
- 設A為b x p的矩陣, B 為p x n的矩陣,
m * n的矩陣 C 為A與B的乘積,記 C=AB,其中矩陣C中的第 i 行第 j 列元素可以表示為:
- 設A為b x p的矩陣, B 為p x n的矩陣,
2.數組的創建和訪問
數組的創建和訪問
import numpy as np
# 創建 列表
list_1 = [1,2,3,4]
list_1
[1, 2, 3, 4]
array_1 = np.array(list_1) #創建一維數組
array_1
array([1, 2, 3, 4])
list_2 = [5,6,7,8]
array_2 = np.array([list_1,list_2]) # 創建二維數組
array_2
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
array_2.shape # 返回數組 維數
(2, 4)
array_2.size # 返回數組元素個數
8
array_2.dtype # 返回數組元素類型 (這里的元素類型一致)
dtype('int32')
array_3 = np.array([[1.0,2,3],[4.0,5,6]]) # 數據類型不同的數組
array_3.dtype # 數據類型不一致,取精確度最高的
dtype('float64')
通過函數創建矩陣
array_4 = np.arange(1,10) # 通過arange() 函數創建 數組
array_4 # np.arange(始,終,步長)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
np.zeros(5) # 一維全 0 矩陣
array([0., 0., 0., 0., 0.])
np.zeros([2,3]) # 二維全 0 矩陣
array([[0., 0., 0.],
[0., 0., 0.]])
np.eye(5) # 5 * 5 單位矩陣
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
數組元素的訪問
a = np.arange(1,10)
a
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
a[1]
2
a[1:5] # 訪問2到5元素
array([2, 3, 4, 5])
b = np.array([[1,2,3],[4,5,6]])
b
array([[1, 2, 3],
[4, 5, 6]])
b[1][2] # 訪問二維數組 注意起始是 0 或者 b[1,0]
6
c = np.array([[1,2,3],[4,5,6],[7,8,9]])
c
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
c[:2,1:] # 二維數組的切片操作
array([[2, 3],
[5, 6]])
3.數組和矩陣運算
快速創建數組
import numpy as np
np.random.randn(10) # 符合標準正態分布
array([-0.44773486, -1.02510785, -1.29485893, -1.26046504, 0.62437175,
-0.32248227, -0.64261711, 0.79787437, 2.40994751, 0.83609302])
np.random.randint(10) # 隨機返回一個 10 以內的數
6
np.random.randint(10,size=(2,3)) # 返回 10 以內的 2 行 3 列 數組
array([[0, 3, 2],
[5, 4, 6]])
np.random.randint(10,size=20).reshape(4,5) # 將 20 個元素的一維變為 二維
array([[3, 5, 9, 8, 4],
[4, 6, 1, 8, 8],
[2, 4, 5, 6, 9],
[2, 5, 4, 7, 6]])
數組運算
a = np.random.randint(10,size=20).reshape(4,5)
a
array([[2, 6, 4, 3, 2],
[0, 6, 3, 4, 0],
[8, 1, 1, 5, 6],
[5, 0, 0, 1, 9]])
b = np.random.randint(10,size=20).reshape(4,5)
b
array([[4, 4, 7, 3, 3],
[2, 4, 2, 1, 5],
[8, 8, 8, 8, 1],
[0, 9, 1, 9, 4]])
a + b
array([[ 6, 10, 11, 6, 5],
[ 2, 10, 5, 5, 5],
[16, 9, 9, 13, 7],
[ 5, 9, 1, 10, 13]])
a - b
array([[-2, 2, -3, 0, -1],
[-2, 2, 1, 3, -5],
[ 0, -7, -7, -3, 5],
[ 5, -9, -1, -8, 5]])
a * b
array([[ 8, 24, 28, 9, 6],
[ 0, 24, 6, 4, 0],
[64, 8, 8, 40, 6],
[ 0, 0, 0, 9, 36]])
a / b # 遇到 被除數為 0 時 --- inf
C:\myapp\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: RuntimeWarning: divide by zero encountered in true_divide
"""Entry point for launching an IPython kernel.
array([[0.5 , 1.5 , 0.57142857, 1. , 0.66666667],
[0. , 1.5 , 1.5 , 4. , 0. ],
[1. , 0.125 , 0.125 , 0.625 , 6. ],
[ inf, 0. , 0. , 0.11111111, 2.25 ]])
創建矩陣
np.mat([[1,2,3],[4,5,6]])
matrix([[1, 2, 3],
[4, 5, 6]])
a
array([[2, 6, 4, 3, 2],
[0, 6, 3, 4, 0],
[8, 1, 1, 5, 6],
[5, 0, 0, 1, 9]])
np.mat(a) # 數組轉換為矩陣
matrix([[2, 6, 4, 3, 2],
[0, 6, 3, 4, 0],
[8, 1, 1, 5, 6],
[5, 0, 0, 1, 9]])
矩陣的運算
A = np.mat(a)
A
matrix([[2, 6, 4, 3, 2],
[0, 6, 3, 4, 0],
[8, 1, 1, 5, 6],
[5, 0, 0, 1, 9]])
B = np.mat(b)
B
matrix([[4, 4, 7, 3, 3],
[2, 4, 2, 1, 5],
[8, 8, 8, 8, 1],
[0, 9, 1, 9, 4]])
A + B
matrix([[ 6, 10, 11, 6, 5],
[ 2, 10, 5, 5, 5],
[16, 9, 9, 13, 7],
[ 5, 9, 1, 10, 13]])
A * B # 只有當矩陣 A的列數與矩陣 B的行數相等時 A× B才有意義
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-28-a4cedde81ed0> in <module>()
----> 1 A * B
C:\myapp\Anaconda3\lib\site-packages\numpy\matrixlib\defmatrix.py in __mul__(self, other)
307 if isinstance(other, (N.ndarray, list, tuple)) :
308 # This promotes 1-D vectors to row vectors
--> 309 return N.dot(self, asmatrix(other))
310 if isscalar(other) or not hasattr(other, '__rmul__') :
311 return N.dot(self, other)
ValueError: shapes (4,5) and (4,5) not aligned: 5 (dim 1) != 4 (dim 0)
a = np.mat(np.random.randint(10,size=20).reshape(4,5))
a
matrix([[3, 4, 1, 5, 2],
[3, 7, 8, 7, 3],
[4, 2, 6, 9, 6],
[4, 4, 5, 2, 7]])
b = np.mat(np.random.randint(10,size=20).reshape(5,4))
b
matrix([[9, 6, 0, 4],
[4, 3, 6, 5],
[4, 6, 1, 8],
[4, 4, 3, 5],
[2, 1, 1, 1]])
a * b
matrix([[ 71, 58, 42, 67],
[121, 118, 74, 149],
[116, 108, 51, 125],
[ 94, 81, 42, 93]])
Array 常用函數
a = np.random.randint(10,size=20).reshape(4,5)
np.unique(a) # 返回 不重復的值
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a
array([[0, 5, 3, 2, 7],
[8, 0, 1, 7, 6],
[2, 0, 9, 8, 2],
[7, 1, 2, 9, 4]])
sum(a) # 返回一個數組 列和
array([17, 6, 15, 26, 19])
sum(a[0]) # 返回某一行和
17
sum(a[:,1]) # 返回某一列和
6
a.max() # 返回最大值
9
max(a[0]) # 第 0 行最大值
7
Array 的 input 和 output
使用pickle序列化 bumpy array
import pickle
import numpy as np
x = np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
f = open('x.pkl','wb')
pickle.dump(x,f)
!ls
Array.ipynb
Untitled.ipynb
x.pkl
鏁扮粍涓庣煩闃佃繍綆?.ipynb
f = open('x.pkl','rb')
pickle.load(f)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
### 使用 save 函數序列化保存
np.save('one_array',x)
!ls
Array.ipynb
Untitled.ipynb
one_array.npy
x.pkl
鏁扮粍涓庣煩闃佃繍綆?.ipynb
np.load('one_array.npy')
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.arange(20)
y
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])
np.savez('two_array.npz',a=x,b=y)
!ls
Array.ipynb
Untitled.ipynb
one_array.npy
two_array.npz
x.pkl
鏁扮粍涓庣煩闃佃繍綆?.ipynb
c = np.load('two_array.npz') # 多個
c['a']
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
c['b']
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])
智能推薦
Python 數據科學入門教程:TensorFlow 目標檢測
TensorFlow 目標檢測 原文:TensorFlow Object Detection 譯者:飛龍 協議:CC BY-NC-SA 4.0 一、引言 你好,歡迎閱讀 TensorFlow 目標檢測 API 迷你系列。 這個 API 可以用于檢測圖像和/或視頻中的對象,帶有使用邊界框,使用可用的一些預先訓練好的模型,或者你自己可以訓練的模型(API 也變得更容易)。 首先,你要確保你有 Tens...
Python基礎+數據科學入門(一)基本語法元素
聲明:該博客參考深度之眼的視頻課程,如有侵權請聯系小編刪除博文,謝謝! 若總結有所失誤,還請見諒,并歡迎及時指出。 Python所使用環境和基本語法元素 該系列python基礎針對之后學習人工智能打造的,所學習的python基礎知識并不全面,僅涉及與人工智能方面相關的python內容 所使用開發環境 以Anaconda為主要開發工具(可自行百度安裝教程),使用Jupyter Notebook 開發...
猿創征文|【Python數據科學快速入門系列 | 05】常用科學計算函數
這是機器未來的第44篇文章 原文首發地址:https://blog.csdn.net/RobotFutures/article/details/126615267 文章目錄 1. 概述 2. 加載數據集 3. 查看數據特征 3.1 查看首5行數據 3.2 查看數據集每個特征的最大值 3.3 查看每個特征的最小值 3.4 查看特征均值 3.5 查看特征百分位數 3.6 查看特征數據分布波動 3.8 ...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
猜你喜歡
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...