前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据分析篇(三)

数据分析篇(三)

作者头像
不断折腾
发布2019-09-23 11:03:17
4900
发布2019-09-23 11:03:17
举报
文章被收录于专栏:折腾折腾再折腾
简单使用

安装模块

pip install numpy

简单实例:

# 导入模块

import numpy as np

# 创建一个数组,也就是列表

a = np.arange(10)

print(a)

print(a.shape)

输出:

[0 1 2 3 4 5 6 7 8 9]

(10,)

# numpy中的arange函数和range这个函数相似,都是生成一个列表。

# shape:当是一维数组的时候,就会输出一共有多少个值

# 创建一个二维数组

a2 = np.array([[1,2,3],[4,5,6]])

print(a2)

print(a2.shape)

输出:

[[1 2 3]

[4 5 6]]

(2, 3)

# 当我们用array函数创建一个不是一维数组的时候,shape就会输出一个元组,2表示行数,3表示列数。

# 当我们创建成np.array([[1,2,3],[4,5]]),就会只输出一个行数。

# 当我们创建一个三位数组的时候,shape中就会有三个值。

# 当是三维数组的时候第一个值表示分为几块,第二个,第三个值就是行数和列数。

改变数组形状

实例:

# 导入模块

import numpy as np

# 创建一个数组并且把a变成一个2行5列的数组

a = np.arange(10)

a2 = a.reshape((2,5))

print(a2)

输出:

[[0 1 2 3 4]

[5 6 7 8 9]]

# 值得注意的是,reshape的参数是一个元组,并且参数的乘积是我们的数组个数。

# 如果想变成一维的:a3 = a2.reshape((10,))

# 如果不知道里面有多少数字使用 a2.shape[0]*a2.shape[1]或者a2.flatten()即可。

numpy的计算

实例:

import numpy as np

# 创建一个2行5列的数组

b = np.arange(10).reshape((2,5))

b2 = b/0

print(b2)

输出:

[[nan inf inf inf inf]

[inf inf inf inf inf]]

# 此时会报错,他会将我们b中的每一个数都除以0。如果写成b2 = b+5,他就会将我们b中的每一个数加5。

# nan是0/0的结果,inf是一个数字/0的结果。

# 数组和数组之间也是可以进行运算的,形状相同的数组是对应的位置进行计算。不同形状就会报错,

# 但是当我们行是对应的时候,就会按照行计算,当我们的列对应就会按照列计算。

比如我们的b还是这样

b = np.arange(10).reshape((2,5))

c = np.arange(5)

此时是可以进行计算的,b的每一行都会和c中对应的数值进行计算。

再比如:

b = np.arange(10).reshape((2,5))

c = np.array([[1],[2]])

此时也是可以计算的。

查看数组中存放的类型:

比如:

a = np.arange(10)

print(a.dtype)

输出:

int32或或者int64。

还有其他类型:

我们在创建数组的时候是可以指定类型的:

e = np.array([1,2,3,4],dtype='float32')

print(e.dtype) # 就会输出 float32

轴(axis)的概念

一维数组只有一个0轴,二维数组有0轴和1轴,三维数组有0轴和1轴和2轴。

可以把他想象成数学中的x,y,z轴,当我们返回的shape是(2, 3)这里的2就是0轴,3就是1轴。

读取本地数据

我们读取本地数据不常用numpy,但是numpy中对于读取本地数据是有对应的方法的。

读取本地数据是从csv文件中读取,用方法loadtxt来读取。

np.loadtxt()中的参数:

frname:文件名,可以加上路径,和open函数一样

dtype:数据类型

delimiter:分割的字符串,默认为空格,可以修改为其他

skiprows:跳过前几行

usecols:读取指定的列,为元组类型

unpack:如果为True,行变成列,列变成行,意思就是反转,默认为False

实例:

首先我们创建一个csv文件,我们首先在当前文件夹下创建一个文本txt,然后在里面写上:

1,2,3,4,5

6,7,8,9,10

11,12,13,14,15

再将后缀名修改成csv,我们再写上这样的代码:

import numpy as np

txt1 = np.loadtxt('./test.csv',delimiter=',',dtype='int')

txt2 = np.loadtxt('./test.csv',delimiter=',',dtype='int',unpack=True)

print(txt1)

print('...............')

print(txt2)

输出结果:

[[ 1 2 3 4 5]

[ 6 7 8 9 10]

[11 12 13 14 15]]

...............

[[ 1 6 11]

[ 2 7 12]

[ 3 8 13]

[ 4 9 14]

[ 5 10 15]]

如果我们写爬虫将今年最受欢迎的电影的票房都爬取下来,就可以读取数据,再用matplotlib来一个可视化。

就会看到效果。

numpy中的切片和索引

在python基础中列表有切片和索引,在numpy中同样也有。

对于一维数组:

import numpy as np

a = np.arange(10)

s = slice(1,8,2) # 从索引 1 开始到索引 8 停止,间隔为2

print (a[s]) # [1 3 5 7]

同时也可以这样写:

import numpy as np

a = np.arange(10)

b = a[1:8:2] # 从索引 1 开始到索引 8 停止,间隔为 2

print(b) # [1 3 5 7]

也可以用索引来取值:

a = np.arange(10)

b = a[1]

c = a[1:]

d = a[1:5]

print(b) # 1

print(c) # [1 2 3 4 5 6 7 8 9]

print(d) # [1 2 3 4]

对于二维数组和三维数组等

创建以一个二维数组:

attr = np.array([[1,2,3],[4,5,6],[7,8,9],[11,22,33],[44,55,66]])

a1 = attr[1]

a2 = attr[1:]

a3 = attr[1:3]

a4 = attr[[1,3,4]] # 取不连续的多行也就是2,4,5行

print(a1) # [4 5 6]

print(a2) # [[ 4 5 6] [ 7 8 9] [11 22 33] [44 55 66]]

print(a3) # [[4 5 6] [7 8 9]]

print(a4) # [[ 4 5 6] [11 22 33] [44 55 66]]

此时我们用索引就是取的一整个数组

取列值:

a5 = attr[:,0] # 取第一列的值

a6 = attr[:,1:] # 取连续的多列

a7 = attr[:,[0,2,3]] # 取不连续的列

a8 = attr[1,2] # 获取第2行第3列

a9 = attr[1:3,0:2] # 获取第2行到第3行 的第1列到第2列

a10 = attr[[1,2],[1,0]] # 获取第2行的第2列的值和第3行的第1个值

# 可以看成一个坐标1,1 和2,0,相当与x和y,只是从0开始

# 其实上面的取行就是省略的列的:同样我们a1的值也可以写成a1 = attr[1,:]

...的作用也可以取列值

attr = np.array([[1,2,3],[4,5,6],[7,8,9],[11,22,33],[44,55,66]])

print(attr)

print("*"*20)

print(attr[...,1]) # 取第二列元素

print("*"*20)

print(attr[1,...]) # 取第二行元素

print("*"*20)

print(attr[...,1:]) # 取2列和后面的列的数据

# 此种操作常用于取列值

输出:

[[ 1 2 3]

[ 4 5 6]

[ 7 8 9]

[11 22 33]

[44 55 66]]

********************

[ 2 5 8 22 55]

********************

[4 5 6]

********************

[[ 2 3]

[ 5 6]

[ 8 9]

[22 33]

[55 66]]

修改操作

很简单,重新赋值即可

比如:

attr[1,2] = 1111 # 就是把第2行的第3列修改成1111

attr[attr<5] = 5555 # 会修改所有小于5的值为5555

attr[attr>25] = 6666 # 会修改所有大于25的值为6666

在列表中有三元运算符,那么在numpy中也是有的

# 把大于10的修改为4444,小于10的修改为0

attr1 = np.where(attr>10,4444,0)

print(attr1)

# 如果你取得不是一个单独的值:就会全部修改

裁剪(clip)

比如:

attr = np.array([[1,2,3],[4,5,6],[7,8,9],[11,22,33],[44,55,66]])

print(attr)

attr1 = attr.clip(9,22)

print("*"*20)

print(attr1)

输出:

[[ 1 2 3]

[ 4 5 6]

[ 7 8 9]

[11 22 33]

[44 55 66]]

********************

[[ 9 9 9]

[ 9 9 9]

[ 9 9 9]

[11 22 22]

[22 22 22]]

# clip就会把小于9的替换成9,把大于22的替换成22.假如存在nan值,是不会被替换的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python入门到放弃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档