河南南阳收割机被堵事件:官员缺德,祸患无穷

极目新闻领导公开“记者毕节采访被打”细节:他们打人后擦去指纹

突发!员工跳楼!只拿低保工资!央企设计院集体罢工!

退休后的温家宝

突发!北京某院集体罢工!

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

Python数据分析常见库介绍之Numpy

胡萝卜酱 DataGo数据狗 2022-07-01

       Python可能是我们最常用的工具,但其实它的数据分析并不强,需要安装一些第三方扩展库来增强它的功能。今天的文章就主要介绍在数据分析过程中经常用到的Numpy库。Numpy主要是提供数据支持,以及相应的快速处理的函数。之后文章要介绍的Scipy,Pandas等库都依赖于它。


     安装


      

       如果你使用的是anaconda,那么你通过import可以直接使用Numpy。如果没有的话,你可以下载相应安装包,通过pip语句安装。

#使用命令行安装:
pip install numpy文件名.whl
#安装完成


   基础操作



在进行基础操作之前,首先需要导入Numpy,并简称为np。

import numpy as np #一般以np作为numpy的别名


创建数组



Numpy 的主要对象是多维数组 Ndarray。在 NumPy 中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。通过使用numpy.array可以创建数组,但是numpy.array和标准Python库类array.array并不相同,后者只处理一维数组和提供少量功能。

#创建一维数组
np.array([1,2,3])
# 通过列表创建二维数组
np.array([(1,2,3),(4,5,6)])
# 创建全为 0 的二维数组
np.zeros((3,3))
# 创建全为 1 的三维数组
np.ones((2,3,4))
#创建一维等差数组
np.arange(5)
# 创建二维等差数组
np.arange(6).reshape(2,3)
# 创建单位矩阵(二维数组)
np.eye(3)
# 创建等间隔一维数组
np.linspace(110, num=6)
# 创建二维随机数组
np.random.rand(2,3)
# 创建二维随机整数数组(数值小于 5)
np.random.randint(5, size=(2,3))


数组运算



数组的加减乘除以及指数运算、倒数、相反数、位运算等各类运算都是在各个元素上分别进行的。真正的矩阵乘法采用的是numpy.dot()。

A=np.array([[4,3],[2,1]])
B=np.array([[5,6],[7,8]])
# 矩阵加法运算
A+B
# 矩阵元素间乘法运算
A * B
# 矩阵乘法运算
np.dot(A,B)
# 如果使用 np.mat 将二维数组准确定义为矩阵,就可以直接使用 * 完成矩阵乘法计算
np.mat(A)*np.mat(B)
# 矩阵的转置
A.T
# 矩阵求逆
np.linalg.inv(A)
# 数组的方根的运算(开平方)
np.sqrt(A)
# 数组的方根的运算(立方)
np.power(A, 3)


数据的索引和切片



数组可以被索引和切片,就像列表和其它Python序列。注意索引位置包括开头但不包括结尾。

# 一维数组索引
a = np.array([1, 2, 3, 4, 5])
a[0], a[-1]  #输出第一个数和最后一个数
#返回每列最大值索引
np.
argmax(a,axis=0)
# 一维数组切片
a[0:2], a[:-1]
#  二维数组索引
a = np.array([(1,2,3),(4,5,6),(7,8,9)])
a[0], a[-1]  
#输出第一行和最后一行
# 二维数组切片(取第 2,3 行)
a[1:3, :]

上述代码展示的是最简单的索引和切片。在实际中,还可以使用布尔型条件进行索引,以及对整数数组进行花式索引(Fancy indexing)。此处不做详细介绍。


简单的数组统计



numpy可以通过一个函数能够快速的完成一些数理统计。

a = np.array(([1,4,3],[6,2,9],[4,7,2]))
# 统计数组各列的中位数
np.median(a, axis=0)
# 统计数组各行的算术平均值
np.mean(a, axis=1)
# 统计数组各列的加权平均值
np.average(a, axis=0)
#统计数组各行的方差
np.var(a, axis=1)
# 统计数组各列的标准偏差
np.std(a, axis=0)


    进阶部分



在了解了Numpy的一些基础操作之后,接下来将介绍Numpy的一些较难的数据处理操作,比如求距离,特征值,规范化等。比如:

#使用 NumPy 打印昨天、今天、明天的日期
yesterday = np.datetime64('today''D') - np.timedelta64(1'D')
today     = np.datetime64('today''D')
tomorrow  = np.datetime64('today''D') + np.timedelta64(1'D')
print("yesterday: ", yesterday)
print("today: ", today)
print("tomorrow: ", tomorrow)
# 使用五种不同的方法去提取一个随机数组的整数部分
Z = np.random.uniform(0,10,10)
print("原始值: ", Z)
print ("方法 1: ", Z - Z%1)
print ("方法 2: ", np.floor(Z))
print ("方法 3: ", np.ceil(Z)-1)
print ("方法 4: ", Z.astype(int))
print ("方法 5: ", np.trunc(Z))

由于Numpy的各类可用函数较多,此处只展示一些在数据分析过程中最常用的一些操作。


缺失值删除



用以数据分析的数据并不能保证是完整的,我们常常面临的是存在缺失值的数据,其中一类最简单的缺失处理方式就是直接删除,在用Numpy删除缺失值时,只需要简单一句代码就可以搞定。

# 生成含缺失值的 2 维数组
Z = np.random.rand(10,10)
Z[np.random.randint(10, size=5), np.random.randint(10, size=5)] = np.nan
print("缺失值总数: \n", np.isnan(Z).sum())
print("缺失值索引: \n", np.where(np.isnan(Z)))
# 从随机数组中删除包含缺失值的行
Z[np.sum(np.isnan(Z), axis=1) == 0]


数据标准化处理



在多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。因此,为了保证结果的可靠性,需要对原始指标数据进行标准化处理。下面将介绍Z-Score,Min-Max标准化以及L2范数标准化处理。

# 使用 Z-Score 标准化算法对数据进行标准化处理
# Z-Score 标准化公式:
# $$Z = \frac{X-\mathrm{mean}(X)}{\mathrm{sd}(X)}$$
# 根据公式定义函数
def zscore(x, axis = None):
    xmean = x.mean(axis=axis, keepdims=True)
    xstd  = np.std(x, axis=axis, keepdims=True)
    zscore = (x-xmean)/xstd
    return zscore
# 生成随机数据
Z = np.random.randint(10, size=(5,5))
zscore(Z)

# 使用 Min-Max 标准化算法对数据进行标准化处理
# Min-Max 标准化公式:
# $$Y = \frac{Z-\min(Z)}{\max(Z)-\min(Z)}$$
# 根据公式定义函数
def min_max(x, axis=None):
    min = x.min(axis=axis, keepdims=True)
    max = x.max(axis=axis, keepdims=True)
    result = (x-min)/(max-min)
    return result
# 生成随机数据
Z = np.random.randint(10, size=(5,5))
min_max(Z)

# 使用 L2 范数对数据进行标准化处理
# L2 范数计算公式:
# $$L_2 = \sqrt{x_1^2 + x_2^2 + \ldots + x_i^2}$$
# 根据公式定义函数
def l2_normalize(v, axis=-1, order=2):
    l2 = np.linalg.norm(v, ord = order, axis=axis, keepdims=True)
    l2[l2==0] = 1
    return v/l2
# 生成随机数据
Z = np.random.randint(10, size=(5,5))
min_max(Z)


通过上面的一些代码演示,相信你一定对Numpy有了一定的了解。Numpy作为Python中相当成熟和常用的库,它的相关教程很多,如果你遇到了什么不能解决的问题,可以自行搜索获得解答。

在下一次的推送中,我们将对Scipy库进行相关的学习。

文章有问题?点此查看未经处理的缓存