Numpy数据包基本使用

文章介绍了Numpy作为Python的数据处理工具,强调了Numpy数组与Python列表在存储和运算效率上的差异,展示了如何利用Numpy进行向量化操作以提升性能。此外,还提到了数据处理中的预处理步骤,包括处理缺失值和异常值的方法。
摘要由CSDN通过智能技术生成

目录

前言

一、Numpy是什么?

二、使用步骤

1.numpy中的array和python列表的区别

2.操作数据

三、数据处理

总结



前言

本文介绍了数据处理包numpy的基础用法以及用于数据处理的实际案例。


一、Numpy是什么?

numpy是一款基于python的数据处理工具,该工具是为了解决数据分析任务而创建的。

二、使用步骤

1.numpy中的array和python列表的区别

代码如下:

import numpy as np

l1=list(range(10))
l2=np.asarray(l1)

print(f"list:{l1}\n array:{l2}")

结果:

结果打印出来可见,二者非常相似,list中间有逗号,而array却没有。实际上,array和list区别很大。在Python中,NumPy的数组(numpy.array)和列表(list)是不同的数据结构,它们具有不同的实现方式和特性。

  1. 存储方式:

    • 列表是一种动态数组,它存储的是对象的引用。列表的元素可以是不同类型的对象,因此列表在存储和访问上的效率较低。
    • NumPy数组是一种固定类型的数组,它在内存中以连续块的形式存储数据。因为元素类型固定,数组在存储和访问上的效率较高。
  2. 运算方式:

    • 列表通常需要使用循环来遍历和处理每个元素。列表的操作是逐个元素进行的,例如使用for循环或列表推导式。
    • NumPy数组支持向量化操作,可以直接对整个数组进行操作,而无需逐个元素处理。这是因为NumPy数组的底层实现是通过高度优化的C语言代码,可以进行并行化和矢量化计算,从而提高运算效率。

由于NumPy数组的向量化操作,可以在底层进行高度优化的计算,因此在处理大量数据和进行数值计算时,通常比列表更高效。另外,NumPy还提供了许多针对数组的强大函数和操作,如广播(broadcasting)、切片(slicing)、聚合(aggregation)等,这些功能在列表中是不可用的。

需要注意的是,列表和NumPy数组都有各自适用的场景。列表适用于存储和操作各种类型的对象,以及进行动态操作和更灵活的数据结构。而NumPy数组适用于进行数值计算、科学计算和大规模数据处理,特别是当处理多维数据时,NumPy的优势更加明显。

一个例子:

import time
import numpy as np
# 记录代码块的起始时间
t0 = time.time()
list1=list(range(100))

# 执行一些操作
for _ in range(1000000):
    list1=list(map(lambda x:x+1,list1))
    pass

# 计算list代码块执行的时间
t1=time.time()
list_time = t1 - t0

arr1=np.asarray(list1)
for _ in range(1000000):
    arr1+=1

t2=time.time()
arr_time=t2-t1

print("list代码块执行时间:", list_time)
print("array代码块执行时间:", arr_time)

 结果如下:

可见,在大体量数据下,二者进行同样操作的时间差距是非常明显的,在这方面,可以并行计算的array有着明显优势

2.操作数据

  1. 对维度操作:最常用reshape和concatenate,此外还有很多,比如np.column_stack(), np.row_stack()np.vstack(), np.hstack(), np.stack()此处不再一一介绍
  2. import numpy as np
    
    a=np.array(range(100))
    print(a)
    print(a.reshape(2,5,10))
    

        

import numpy as np

a=np.array(range(20))
a=a.reshape(2,2,5)
b=np.array(range(20,40))
b=b.reshape(2,2,5)

print("第一维度叠加:\n", np.concatenate([a, b], axis=0))
print("第二维度叠加:\n", np.concatenate([a, b], axis=1))
print("第三维度叠加:\n", np.concatenate([a, b], axis=2))

 另外有一个函数flatten,用于将多维转为一维,经常用于神经网络中对样本特征的展平,其他函数用到的时候再查吧

三、数据处理

一份数据,我们拿到手后往往会发现有很多缺陷,是不能直接就用于计算分析的,还需要提前进行处理,这就是数据清洗,或者说预处理

一份脏数据有如下几个特征:

  1. 数据缺失
  2. 数据异常
  3. 格式错误

比如这样一份数据

raw_data = [
["Name", "StudentID", "Age", "AttendClass", "Score"],
["小明", 20131, 10, 1, 67],
["小花", 20132, 11, 1, 88],
["小菜", 20133, None, 1, "98"],
["小七", 20134, 8, 1, 110],
["花菜", 20134, 98, 0, None],
["刘欣", 20136, 12, 0, 12]
]

就包含了上述几种常见的特征,首先我们要进行处理,先将列表转化为数组,再将数据缺失值填充为该列中位数,然后看”Age“列,明显98异常不符合实际,将该值替换为该列平均数,处理得到如下

raw_data = [
["Name", "StudentID", "Age", "AttendClass", "Score"],
["小明", 20131, 10, 1, 67],
["小花", 20132, 11, 1, 88],
["小菜", 20133, None, 1, "98"],
["小七", 20134, 8, 1, 110],
["花菜", 20134, 98, 0, None],
["刘欣", 20136, 12, 0, 12]
]

data=np.array(raw_data)
data_process=[]
for i in range(len(raw_data)):
    if i==0:
        continue
    data_process.append(data[i,1:])
    pass
data_process=np.asarray(data_process).astype(float)

def median_process(data_process):
    col_median=np.nanmedian(data_process,axis=0)
    data_process[np.isnan(data_process)]=np.broadcast_to(col_median,data_process.shape)[np.isnan(data_process)]
    return data_process
    pass
data_process=median_process(data_process)
print(data_process)
[[2.0131e+04 1.0000e+01 1.0000e+00 6.7000e+01]
 [2.0132e+04 1.1000e+01 1.0000e+00 8.8000e+01]
 [2.0133e+04 1.1000e+01 1.0000e+00 9.8000e+01]
 [2.0134e+04 8.0000e+00 1.0000e+00 1.1000e+02]
 [2.0134e+04 9.8000e+01 0.0000e+00 8.8000e+01]
 [2.0136e+04 1.2000e+01 0.0000e+00 1.2000e+01]]
[Finished in 1.5s]

就差不多了,注意这只是非常简单的例子,实际上有很多的问题处理起来并非这么简单,需要不断的尝试,要你主动去看清数据结构


总结


以上就是今天要讲的内容,本文仅仅简单介绍了numpy的使用,而numpy提供了大量能使我们快速便捷地处理数据的函数和方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值