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])