数据分析之二:用NumPy进行数据处理

1. NumPy简介


  • NumPy是Numerical Python的简称,用作高性能计算和数据分析,其操作是围绕ndarray这么一个矩阵元素来进行。

  • 针对数据分析的应用,NumPy主要功能体现在如下几个方面:

  1. 用于数据清理和整理、子集构造和过滤、转换等快速的矢量化数组运算
  2. 常用的数组算法,如排序、唯一化、集合运算等
  3. 统计和数据聚合运算
  4. 异构数据的合并/连接/转换

2. 使用NumPy进行数据处理


  • 函数库的导入,以下简写成np
import numpy as np

2.1 矩阵的创建


In [1]: arr = np.array([[1,2,3]])
In [2]: arr
Out[2]: array([[1, 2, 3]])

也可以像下面这样批量生成

In [3]: arr = np.array([[1,2,3]]).repeat(4, axis=0)
In [4]: arr
Out[4]: 
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])
  • 或者我想初始化一个空的矩阵,只需要提供行和列即可,例如想创建3×4的矩阵,用empty或者zeros函数
In [6]: arr = np.empty((3,4))
In [7]: arr
Out[7]: 
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
  • 查看矩阵的维度,行列数以及元素的数据类型
In [10]: arr = np.array([[1,2,3],[4,5,6]])
In [11]: arr
Out[11]: 
array([[1, 2, 3],
       [4, 5, 6]])

In [12]: arr.ndim
Out[12]: 2

In [13]: arr.shape
Out[13]: (2, 3)

In [14]: arr.dtype
Out[14]: dtype('int64')
  • 这里需要理清一个“轴”的概念
    轴(axis)和矩阵空间的维度相关,举个例子,在平面坐标系中,x轴与y轴构成二维的平面,由此,x,y,z三个轴组成三维立体空间;

  • 再来看矩阵,如果矩阵是二维的,那么它由2个轴组成,np将它们表示成0轴和1轴,0轴修饰“列方向”,1轴修饰“行方向”,0轴的长度为列向量长度,1轴的长度为行向量长度,那么以上arr = np.array([[1,2,3]]).repeat(4, axis=0)可以理解成将向量[1,2,3]在列方向上重复多次,生成了4×3矩阵,可以试验一下axis=1的情况,答案是仍然生成一个一维的行向量,因为它是按照行方向延伸的;

  • 推广到三维,不难发现,三维空间可以看做由多个二维平面层叠生成的,则三维空间的0轴修饰“平面”,1轴修饰平面的“列”,2轴修饰平面的“行”。

  • 注:矩阵的创建函数:

array         # 将输入数据转换为ndarray,可以指定dtype
asarray       # 将输入转换为ndarray
arange        # 类似于Python的range函数,可以指定范围和步长
ones          # 初始化为一个全1的数组
zeros         # 初始化为一个全0的数组
empty         #只分配内存空间,但不进行初始化
eye/identity  # 创建方阵,对角线为全1,其余为0

2.1 数据存取


支持Python的下标和切片访问,但是np可以给切片直接赋值,并且切片赋值会影响到原始数组,这是因为切片操作不会对数据进行复制,数据只在内存保留一份,对切片的赋值也就是更改原始内存,如果想在切片上重新分配一块内存区域,可以使用ndarray.copy()函数。

In [22]: arr = np.arange(10)
In [23]: arr
Out[23]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [24]: arr[5]
Out[24]: 5

In [25]: arr[5:8]
Out[25]: array([5, 6, 7])

In [26]: arr[5:8] = 10

In [27]: arr
Out[27]: array([ 0,  1,  2,  3,  4, 10, 10, 10,  8,  9])

2.3 矩阵运算


  • 变换
In [28]: arr = np.arange(15).reshape((3,5))

In [29]: arr
Out[29]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

# 转置操作
In [30]: arr.T                     
Out[30]: 
array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])

# 矩阵乘法
In [31]: np.dot(arr, arr.T)
Out[31]: 
array([[ 30,  80, 130],
       [ 80, 255, 430],
       [130, 430, 730]])
  • 排序
In [40]: arr = randn(8)

In [41]: arr
Out[41]: 
array([-0.04165555, -0.58147668, -0.1026614 , -2.00641289, -0.94810499,
        0.68015849, -0.94358531, -0.12948516])

In [42]: arr.sort()

In [43]: arr
Out[43]: 
array([-2.00641289, -0.94810499, -0.94358531, -0.58147668, -0.12948516,
       -0.1026614 , -0.04165555,  0.68015849])

In [44]: arr = randn(3,4)

In [45]: arr
Out[45]: 
array([[-0.31807417, -0.12209285, -0.35218604,  1.86467014],
       [-0.87586945,  0.48491914,  0.02919893, -0.89746354],
       [ 0.75919047,  0.61933593,  0.22276992, -0.63860342]])

# 沿1轴方向上的排序(行方向,也是sort默认方向)
In [46]: arr.sort(axis=1)

In [47]: arr
Out[47]: 
array([[-0.35218604, -0.31807417, -0.12209285,  1.86467014],
       [-0.89746354, -0.87586945,  0.02919893,  0.48491914],
       [-0.63860342,  0.22276992,  0.61933593,  0.75919047]])
  • 统计
# 创建一个三维矩阵
In [15]: arr = np.random.randint(0,9,[2,3,3])
In [16]: arr
Out[16]: 
array([[[7, 0, 4],
        [3, 1, 7],
        [3, 8, 1]],

       [[2, 3, 5],
        [0, 3, 4],
        [2, 6, 7]]])

# 0轴上相加,也就是平面相加,结果仍然是一个平面
In [17]: arr.sum(axis=0)
Out[17]: 
array([[ 9,  3,  9],
       [ 3,  4, 11],
       [ 5, 14,  8]])

# 1轴上相加,也就是各平面上沿着列方向相加
In [18]: arr.sum(axis=1)
Out[18]: 
array([[13,  9, 12],
       [ 4, 12, 16]])

# 2轴上相加,也就是各平面上沿着行方向相加
In [19]: arr.sum(axis=2)
Out[19]: 
array([[11, 11, 12],
       [10,  7, 15]])

注:数学统计函数:

sum
mean
std/var             # 标准差/方差
min/max
argmin/argmax       #  最小和最大元素的下标索引

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容