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

拓展:从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的端口转发 | 实战SSH端口转发

转发命令:(注意参数对应)

  • 转发到远端: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 入门

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)

 in ()
----> 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)