社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python的数据科学实践 | Numpy

狗熊会 • 4 年前 • 483 次点击  



大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧。本期内容主要由程茜与政委联合推出。


下面我们介绍Python中的Numpy模块。Numpy多用于科学计算中存储和处理大型矩阵,其本身并没有提供很多高级的数据分析功能。但是Numpy却成为了数据科学实践中最常用的模块,其原因是它是众多数据科学模块所需要的基础模块。理解Numpy能够帮助大家去理解很多其他的所需要学习的模块。

01
Numpy数组对象


Numpy提供了两种基本对象,ndarray和ufunc。ndarray为数组,其特点是只能存储单一数据类型,ufunc是对数组进行处理的函数。


1.1 数组的创建

Numpy提供了array函数创建数组,例如

例1

import numpy as np #导入numpy 
a1=np.array([1,2,10,4]) #利用列表构建一维数组
a2=np.array([[1,2,3,4],[4,15,6,17]])#利用列表构建二维数组,可以理解为矩阵

除了创建数组作为一个数据类型是有自己的属性变量的。

表1

大家可以自己尝试着创建一些数组,并且查看其基本属性。


1.2 数组的数据类型

Numpy中,所有数组的数据类型必须一致。Numpy中提供了逻辑、整数、浮点数等多种数据类型,并且每种数据类型的名称均对应其转换函数,可以使用“np.数据类型()”的方式直接转换对应类型的数据对象,例如:

例2

np.float(50# 返回值50.0
np.int(50.35)# 返回值50

数组的数据类型也可以有用户自己定义,比如要创建一个火锅团购的信息清单,它包含的字段有团购名称、团购人数与团购价。它可以事先使用dtype函数字来定义这些字段的类型:

例3

hot=np.dtype([('name',np.str_,10),('number',np.int64),('price',np.float64)])
hot


定义好之后,就可以构造出类似我们平时数据分析的数据形式的数据了。

例4

hotbuy=np.array([('一锅两头牛美味双人餐','35','98'),('小龙腾四海100元代金券','43','79'),('酸汤鱼火锅2-3人餐','1','165')])



02
数据读入


有了上面Numpy数组的基础,相信大家会很容易理解利用Numpy读入数据的方法,下面我们就尝试着利用numpy读入火锅的数据。

例5

import numpy as np
hot=np.dtype([('团购活动ID',np.str_,10),('团购名',np.str_,10),('店名',np.str_,10),('购买人数',np.float64),('团购价',np.str_,10),('

市场价'
,np.str_,10),('地址',np.str_,10)])
raw_data = np.loadtxt('coupon_nm_new.csv',delimiter=",",dtype=hot) #这里的coupon_nm_new.csv数据与原来的数据有差异,原因是为了让大

家理解np只能读入同种类型的数据而重新做了处理。


通过建立自定义字段的数据类型,我们导入了火锅这个数据。

03
数据去重

在数据分析中,难免会出现“脏”数据的情况,重复数据就是“脏”数据的情况之一。海量数据面前总不能一个一个去删除。在Numpy中,可以通过unique函数对数据进行去重。比如如果想知道店名中有没有重复值,如何来处理呢?

例6

np.unique(raw_data[['店名']])


从上图可以发现,去重后,店铺由1855家变为628家。

04
基本索引



4.1 一维数组索引

Numpy中,一维数组索引与上文提到过的list索引方法一致。比如,当我们想找出第3个团购活动的店铺名称时,可以进行如下操作:

例7

#索引第3家店铺
shop[2]
#索引第3家到第5家店铺
shop[2:6]

更多的内容这里就不一一赘述。


4.2 多维数组索引

多维数组每一维度都有一个索引,各维度索引之间用逗号隔开,比如,如何随时调出来每个团购活动的人数?这就可以利用多维数组进行索引。

例8

#建立三维数组arr
arr=np.array([raw_data['团购活动ID'],raw_data['团购名'],raw_data['购买人数']])
#数组转置
arrt=arr.T
#数组索引
arrt[0,0:3]



在这里,首先建立一个关于团购活动ID,团购名、购买人数的三维数组,然后通过转置将数据变形成数据分析中常用的形式,最后通过行列数进行基本索引,调出第一条数据。

当然,除了上述的基本索引,我们还可以通过布尔值进行索引。比如,想找出团购人数为50人的团购活动,就可以通过布尔值进行索引。

例9

raw_data[raw_data['购买人数']==50]


05
利用Numpy进行统计分析


在Numpy中,有许多可以用于统计分析的函数,常见的有sum、mean、std、var、min、max等等。以下我们就以团购价为例来对团购价进行统计分析。

例10

price=raw_data['团购价']
price
price.dtype

此时的数据类型为字符串,要进行统计分析,就需要转换成数值型。

例11

price = price.astype(float)   # 字符串转为浮点型
print (price.dtype)
print (price)

下面,就可以进行统计分析啦!

例12

price=raw_data['团购价']
price.sort()
print('排序后团购价为:',price)
np.sum(price)
np.mean(price)
np.var(price)
np.max(price)
np.min(price)

 利用Numpy可以很轻松的计算出来在本数据集中,西安火锅团购价格均价在122元左右,方差24214.51,波动很大,说明价格参差不齐。最贵的团购价格竟然达到了3999元,真是贫穷限制了我们的想象!

通过上面对于Numpy模块的讲述,可以发现Numpy在用于数据分析时并不是那么顺手,其主要原因是它的数据结构的设置不符合大家采集得到的数据的逻辑,必须要每个元素都是同样的数据类型。Python未解决这个问题,Pandas模块应运而生,下一章将会主要介绍。

好了,今天就讲到这里。


往期精彩回顾
初步搭建数据科学工作环境

Conda的使用

Spyder入门

Jupyter入门

Markdown

简单读写数据

数据类型

数据结构

控制流

函数与模块


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38320
 
483 次点击