学习笔记整理-大数据算法解析1-Numpy

一、数据分析概念

广义的数据分析包括狭义数据分析和数据挖掘。

1、狭义数据分析是指根据分析目的,采用对比分析、分组分析、回归分析等分析方法,对收集来的数据进行处理与分析,取得有价值的信息,发挥数据的作用,得到一个特征统计量的过程。

2、数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,通过应用聚类,分类,回归和关联规则等技术,挖掘潜在的价值过程。

3132f29e17a6459db57ee83c00f886df.png

3、典型数据分析流程

需求分析-数据获取-数据预处理-分析与建模-模型评价与优化-部署

c8cbe6858dca44379bfc4825cecadc22.png

4、主流的数据分析语言:R、Python、MATLAB

 

R

Python

MATLAB

语言学习难易程度

入门难度低

入门难度一般

入门难度一般

使用场景

数据分析,数据挖掘,机器学习,数据可视化等。

数据分析,机器学习,矩阵运算,科学数据可视化,数字图像处理,web应用,网络爬虫,系统运维等。

矩阵计算,数值分析,科学数据可视化,机器学习,符号计算,数字图像处理,数字信号处理,仿真模拟等。

第三方支持

拥有大量的Packages,能够调用C,C++,Fortran,Java等其他程序语言。

拥有大量的第三方库,能够简便地调用C,C++,Fortran,Java等其他程序语言。

拥有大量专业的工具箱,在新版本中加入了对C,C++,Java的支持。

流行领域

工业界≈学术界

工业界>学术界

工业界≤学术界

软件成本

开源免费

开源免费

商业收费

使用python数据分析包括以下五个优势

①语法简单精炼②拥有强大的库③功能强大④不仅适用于研究和原型构件,同时也适用于构建生产系统⑤python是一种胶水语言

二、Numpy

1、简介

是一个开源的pthon科学计算库,是一个由多维数组对象和用于处理数组的例程集合组成的库。

①数值计算,使用numpy可以直接对数组和矩阵进行操作

②numpy中数组的存储效率和输入输出性能远远优于python中等价的基本数据结构

③大部分代码是c语言写的

④通常与Scipy和Matplotlib一起使用

⑤开源

Numpy提供了两种基本对象:

ndarray:多维数组对象

ufunc:对数组进行处理的函数

2、数组属性

import numpy as np   # 导入NumPy库
arr=np.array([[1,2,3,4],[7,5,6,8]])#创建数组
#①表示数组维数
arr.ndim
#②数组形状几行几列,也可以用于更改数组形状(前提是个数得一样)
arr.shape
#③数组的大小,共有几个元素
arr.size
arr_a.shape=3,2
#数组元素类型
arr.dtype
#数组每个元素的大小(字节为单位)
arr.itemsize

3、数组的创建

numpy.array(object, dtype=None, copy=True, order='K',subok=False,ndmin=0)
#object表示接收的数组,dtype表示所需的数据类型,ndimin表示数组应具有的最小维度
#创建特殊的数组
#①一维数组
print('使用 arange 函数创建的数组为:\n',np.arange(0,1,0.1))
#如果要创建多维数组
print('新的一维数组为:',arr.reshape(3,4))  #设置数组的形状
#使用 arange 函数创建的数组为:
# [0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]注意是左闭右开
#②等差数组
print('使用 linspace 函数创建的数组为:',np.linspace(0, 1, 12))
#③等比数组
print('使用logspace函数创建的数组为:',np.logspace(0, 2, 20))
#全为0
print('使用zeros函数创建的数组为:',np.zeros((2,3)))
#主对角线为1.其余是0
print('使用eye函数创建的数组为:',np.eye(3))
#主对角线为1,2,3,4,其余是0
print('使用diag函数创建的数组为:',np.diag([1,2,3,4]))
#全为1
print('使用ones函数创建的数组为:',np.ones((5,3)))
#创建一个未初始化的数组
arr = np.empty((2, 3))

#使用mat创建,以及bmat合成
matr1 = np.mat("1 2 3;4 5 6;7 8 9")
matr2 = np.matrix([[123], [456], [789]])
print('合成矩阵为:', np.bmat("matr1 matr2; matr1 matr2"))

matr1为: 
[[1 2 3]
 [4 5 6]
 [7 8 9]]
matr2为: 
[[123]
 [456]
 [789]]
合成矩阵为: 
[[  1   2   3 123]
 [  4   5   6 456]
 [  7   8   9 789]
 [  1   2   3 123]
 [  4   5   6 456]
 [  7   8   9 789]]

random模块常用随机数生成函数:

函数

说明

seed

确定随机数生成器的种子。

permutation

返回一个序列的随机排列或返回一个随机排列的范围。

shuffle

对一个序列进行随机排序。

binomial

产生二项分布的随机数。

normal

产生正态(高斯)分布的随机数。

beta

产生beta分布的随机数。

chisquare

产生卡方分布的随机数。

gamma

产生gamma分布的随机数。

uniform

产生在[0,1)中均匀分布的随机数。

4、数组的索引(注意:左闭右开)

arr2 = np.array([[1, 2, 3],
                 [4, 4, 5],
                 [6, 7, 7],
                 [8, 9, 10]])

result = arr2[3:5]
#输出的结果是 [8, 9, 10]

5、变换数组形态

arr = np.arange(12).reshape(3,4)
创建的二维数组为:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

print('数组展平后为:',arr.ravel())
数组展平后为:  [ 0  1  2  3  4  5  6  7  8  9 10 11

print('数组展平为:',arr.flatten())  #横向展平
数组展平为: [ 0  1  2  3  4  5  6  7  8  9 10 11]

print('数组展平为:',arr.flatten('F'))  #纵向展
数组展平为: [ 0  4  8  1  5  9  2  6 10  3  7 11

#转置
np.transpose(arr)
arr.T

#组合
print('使用hstack实现数组横向组合后为:', np.hstack((arr, arr1)))  # 使用hstack函数实现数组横向组合
print('使用vstack实现数组纵向组合后为:', np.vstack((arr, arr1)))  # 使用vstack函数实现数组纵向组合
print('使用concatenate实现数组横向组合后为:', np.concatenate((arr, arr1), axis=1))  # 使用concatenate函数实现数组横向组合
print('使用concatenate实现数组横向组合后为:', np.concatenate((arr, arr1), axis=0))  # 使用concatenate函数实现数组纵向组合

#分割
print('使用hsplit函数实现数组按列分割后为:', np.hsplit(arr, 2))  # 使用hsplit函数实现数组横向分割(按列)
print('使用vsplit函数实现数组按行分割后为:', np.vsplit(arr, 3))  # 使用vsplit函数实现数组纵向分割(按行)
print('使用split函数实现数组按列分割后为:', np.split(arr, 2, axis=1))  # 使用split函数实现数组横向分割
print('使用split函数实现数组按行分割后为:', np.split(arr, 3, axis=0))  # 使用split函数实现数组纵向分割

6、数组增删改查

①增

#append()函数该函数是在数组的末尾添加元素,该函数会返回一个新数组,而原数组不变
a = np.array([[1,2,3], [4,5,6]])
[[1 2 3]
 [4 5 6]]

print('向数组添加元素:',np.append(a, [7, 8, 9]))
 [1 2 3 4 5 6 7 8 9]

print(np.append(a, [[7,8,9]],axis = 0))
[[1 2 3]
 [4 5 6]
 [7 8 9]]

print(np.append(a, [[5,5,5],[7,8,9]],axis = 1))
[[1 2 3 5 5 5]
 [4 5 6 7 8 9]]

②删

#delete()函数该函数返回从输入数组中删除指定子数组的新数组,原数组不变。如果未提供轴参数,则输入数组将展开。
a = np.arange(12).reshape(3,4)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

print('删除某个数:',np.delete(a,5))
删除某个数: [ 0  1  2  3  4  6  7  8  9 10 11]

删除行
print(np.delete(a, 1, axis=0))
[[ 0  1  2  3]
 [ 8  9 10 11]]

删除列
[[ 0  2  3]
 [ 4  6  7]
 [ 8 10 11]]

③去重

u = np.unique(a)

7、数组计算

ufunc函数的广播机制

1d18186493c64837b69ba7872734108b.png36e851c3c9a74b26811a1bfcbba292ce.png

print('矩阵相加为:', matr1 + matr2)
print('矩阵相减为:', matr1 - matr2)
print('矩阵相乘为:', matr1*matr2)
print('矩阵对应元素相乘为:', np.multiply(matr1, matr2))
np.random.seed(44)  # 设置随机种子,方便结果复现
arr = np.random.randint(1, 10, size=10)  # 生成随机数
print('创建的数组为:', arr)
创建的数组为: [5 4 2 4 1 5 4 9 8 8]    

arr.sort()  # 直接排序
print('排序后数组为:', arr)
排序后数组为: [1 2 4 4 4 5 5 8 8 9]

arr = np.random.randint(1,10, size=(3, 3))  # 生成3行3列的随机数
创建的数组为: 
[[7 4 8]
 [4 4 7]
 [6 5 6]]

arr.sort(axis=1)  # 沿着横轴排序
排序后数组为:
 [[4 7 8]
 [4 4 7]
 [5 6 6]]

arr.sort(axis=0)  # 沿着纵轴排序
排序后数组为:
 [[4 4 6]
 [4 6 7]
 [5 7 8]]

print('排序后数组为:', arr.argsort())  # 返回值为重新排序值的下标

arr = np.random.randint(0, 10, size=(3,3))
print('创建的数组为:', arr)
print('重复后数组为:', arr.repeat(2, axis=0))  # 按行进行元素重复,重复两次
print('重复后数组为:', arr.repeat(2, axis=1))  # 按列进行元素重复,重复两次

函数

说明

sum

计算数组的和

mean

计算数组均值

std

计算数组标准差

var

计算数组方差

min

计算数组最小值

max

计算数组最大值

argmin

返回数组最小元素的索引

argmax

返回数组最小元素的索引

cumsum

计算所有元素的累计和

cumprod

计算所有元素的累计积

 

8、读写文件

#保存
np.save("../save_arr",arr)
#保存多个
np.savez("../save_arr",arr1,arr2)
#读取,不可以省略扩展名
np.load("../save_arr.npy")

#savetxt函数是将数组写到某种分隔符隔开的文本文件中
np.savetxt("../arr.txt", arr, fmt="%d", delimiter=",")
#loadtxt函数执行的是把文件加载到一个二维数组中
np.loadtxt("../arr.txt",delimiter=",")

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aure_xl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值