1. 程式人生 > >Python資料科學入門-筆記01

Python資料科學入門-筆記01

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 比較

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,則是將本地埠對映到遠端主機埠。

  • win10 下安裝 openSSH
  • 安裝好後 開啟 進入 其 bin 目錄下執行命令來實現轉發

轉發命令:(注意引數對應)

  • 轉發到遠端:ssh -C -f -N -g -L 本地埠:目標IP:目標埠 使用者名稱@目標IP
  • 轉發到本地:ssh -C -f -N -g –R 本地埠:目標IP:目標埠 使用者名稱@目標IP
  • ssh -C -f -N -g -D listen_port [email protected]/ip

SSH埠轉發

接著瀏覽器訪問:

三.jupyter 的使用

1.登入

Jupyter

2.新建 notebook

新建notebook

3.操作演示

操作演示

4.win 系統下啟動 jupyter 服務

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才有意義
    • Ab x p的矩陣, Bp x n的矩陣,

      m * n的矩陣 C 為A與B的乘積,記 C=AB,其中矩陣C中的第 i 行第 j 列元素可以表示為:

      矩陣乘法

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資料科學入門-筆記01

Python資料科學入門 慕課網課程學習筆記 學習環境 win10 + 虛擬機器centos7 + python3 第一節 Annconda 基本介紹 一、Anaconda 介紹 1.Anaconda 介紹 Anaconda

Python資料科學入門-(Pandas)筆記02

第四節 Pandas 入門 慕課網python數科學入門課程學習筆記 一. Series 序列 import numpy as np import pandas as pd s1 = pd.Series([1,2,3,4]) # 建立

Python資料科學入門(matplotlib)筆記04

Python資料科學入門學習筆記——Matloptlib 什麼是matloptlib matloptilib是一個Python包,用於2D繪圖,3D繪圖也可以安裝額外的包,強大流行,有很多擴充套件。

Python資料科學入門(seaborn)筆記05

Python資料科學入門筆記05——seaborn seaborn 是matplotlib的擴充套件 一、seaborn 實現直方圖和密度圖 import numpy as np import p

python資料科學入門與分析

python資料科學入門與分析 第二章 資料科學的Python核心 基本的內建str函式 1.print("hello".capitalize());將第一個字元轉化為大寫,其他字元轉化為小寫 2.print("hello world ".strip());

Python 資料科學入門

不需要昂貴的工具即可領略資料科學的力量,從這些開源工具起步即可。 無論你是一個具有數學或電腦科學背景的資深資料科學愛好者,還是一個其它領域的專家,資料科學提供的可能性都在你力所能及的範圍內,而且你不需要昂貴的,高度專業化的企業級軟體。本文中討論的開源工具就是你入門時

Python 資料科學入門教程:Matplotlib

Matplotlib 入門教程 第一章 Matplotlib 簡介 歡迎閱讀 Python 3+ Matplotlib 系列教程。 在本系列中,我們將涉及 Matplotlib 資料視覺化模組的多個方面。 Matplotlib 能夠建立多數型別的

Python 資料科學入門教程:Pandas

Python 和 Pandas 資料分析教程 大家好,歡迎閱讀 Python 和 Pandas 資料分析系列教程。 Pandas 是一個 Python 模組,Python 是我們要使用的程式語言。Pandas 模組是一個高效能,高效率,高水平的資料分析庫。

Python資料科學入門》 讀書筆記第四章 2018-8-2011:30開始

接著看這本書。。看到第三章的時候,腦闊又疼了。用的時候再說吧,而且R軟體功能很強大。蹦過去了。 接著到了第四章。我一想說第四章講的線性代數。。我特麼高等代數都學過還看這個幹嘛啊。 又到了第五章,將統計,我說真巧,我就是統計專業的。 又到了第六章,一看,哇概率論,他咋知道我的專業是概率論與

python資料科學入門》學習筆記第二章 2018-8-17開始

昨天早晨發現新買不到一週的自行車被偷了,我的2000大洋啊,心在滴血,小偷我草你媽,去學校安保處與派出所報警也花了一上午,下午接到朋友電話,被告知那個她找了新的男朋友,生活真是日了狗了。苟延殘喘。 經過三個來月的python程式設計,雖然能夠寫一些複雜的演算法。但是編寫速度很慢,原因是基本功不紮

python資料科學--numpy入門

numpy庫是python中用於科學計算的核心庫,它提供了一個高效能的多維陣列物件,以及用於處理這些陣列的工具。 匯入numpy模組 import numpy as np 建立陣列 a=np.array([1,2,3]) #建立一維陣列 b=np.array([(1.5

python資料科學--pandas入門

pandas庫建立在numpy之上,為python程式語言提供了易於使用的資料結構和資料分析工具 匯入pandas模組 import pandas as pd pandas資料結構:Series,能夠儲存任何資料型別的一維陣列 DataFrame:可以儲存不同資料型別的二維陣列

Python資料科學手冊學習筆記

Numpy入門 檢視numpy版本 import numpy numpy.__version__ 2.匯入numpy的匯入 import numpy as np 3.建立陣列 import nu

Python資料分析學習筆記(1)numpy模組基礎入門

        numpy模組可以進行高效的資料處理,並提供了陣列的支援,很多模組都依賴他,比如pandas、scipy、matplotlib等,因此這個模組是基礎。 (1)匯入: import numpy (2)建立一維和二維陣列: #建立一維陣列 x=numpy.

Python資料科學手冊》第二章 Numpy入門2.1—2.3

 2.1 理解Python中的資料型別         Python的使用者被其易用性所吸引,其中一個易用之處就在於動態輸入,即在Python中,型別是動態推斷的。這意味著可以將任何型別的資料指定給任何變數。但是這種型別靈活性也指出了一個事實: Python

Numpy入門——Python資料分析mooc筆記

資料 一個數據,表達一個含義 一組資料,表達一個或多個含義 列表和陣列 列表:資料型別可以不同 陣列:資料型別相同 Python已有列表型別,為什麼需要一個數組物件(型別)? 陣列物件可以去掉元素間運算所需的迴圈,使一維向量更像單個數據

python資料結構學習筆記-2017-01-08-01-N皇后問題、迷宮問題和跳馬問題的遞迴解決

        N皇后問題         棋盤ADT #-*-coding: utf-8-*- # 二維陣列實現棋盤ADT from myarray2d import Array2D class Board(object): def __init__(se

Python資料科學手冊》高清中文版PDF+高清英文版PDF+原始碼

下載:https://pan.baidu.com/s/1RDTQxG3vjG2xGsX4Mx-5KA 最新出版的《Python資料科學手冊》。 《Python資料科學手冊》高清中文版PDF+高清英文版PDF+原始碼 高清中文版PDF,474頁,帶目錄和書籤,能夠複製貼上;高清英文版PDF,548頁,帶目

Python資料科學手冊 pdf 中文版下載

Python語言擁有大量可用於儲存、操作和洞察資料的程式庫,已然成為深受資料科學研究人員推崇的工具。本書以IPython、NumPy、Pandas、Matplotlib和Scikit-Learn這5個能完成資料科學大部分工作的基礎工具為主,從實戰角度出發,講授如何清洗和視覺化資料、如何用資料建

Python資料科學手冊電子書

原文:http://www.sohu.com/a/156357633_642762 Preface https://nbviewer.jupyter.org/github/jakevdp/PythonDataScienceHandbook/blob/mas