栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

数据分析numpy

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据分析numpy

目录

什么是numpy

数组的创建

 数组的形状

 数组的计算

数组的转置

​编辑

 numpy读取本地数据

索引和切片操作

 数值的修改

数组的拼接与行列交换

 数据拼接的应用

 numpy中的随机方法


什么是numpy

一个在Python中做科学计算的基础库,重在数值计算,也是大部分Python科学计算库的基础库,多用于在大型多维数组上执行数值运算。

数组的创建
import numpy as np
import random

t1 = np.array([1,2,3,4])
print(t1,type(t1))

#t2和t3是两种不同的表示方式,可以定义一样的数据
t2 = np.arange(10)
print(t2,type(t2))

t3 = np.array(range(10))
print(t3,type(t3))

t4 = np.arange(4,10,2)
print(t4,type(t4),t4.dtype)

t5= np.array(range(5),dtype=float)
print(t5,type(t5),t5.dtype)

t6= np.array(range(5),dtype="i1")#i1表示int8如果内存不够大 可以定义变量的dtype
print(t6,type(t6),t6.dtype)

#numpy中的布尔类型
t7 = np.array([1,0,0,1,1],dtype=bool)
print(t7,t7.dtype)
#调整数据类型.astype
t8 = t7.astype("int8")
print(t8,t8.dtype)

#numpy中的小数
t9 = np.array([random.random() for i in range(10)])
print(t9,t9.dtype)

#保留两位小数
t10 = [float("%.2f"%i) for i in t9]
print(t10)

 数组的形状
#numpy可以表示多维数组对象
import numpy as np

t1 = np.array([[[1,2,3,4],[4,5,6,7]],[[1,2,3,4],[4,5,6,7]],[[1,2,3,4],[4,5,6,7]]])
print(t1)
print(t1.shape)#.shape表示数组的形状即(l,m,n)
#数组的shape属性中有几个数,该数组就是个几维数组

#reshape属性可以用来改变数组的形状,且数组的形状只能变成正好的(相乘结果固定),否则会有错误
#变为三维数组
t2 = t1.reshape(2,3,4)
print(t2)
#变为二维数组
t3 = t1.reshape(4,6)
print(t3)
#变为一维数组
t4 = t1.reshape(24)
print(t4)
#变为几维数组,reshape中就有几个数

#查看某个数组中的元素个数
print(t1.flatten().shape) #转换为一维数组.flatten()方法

 

 数组的计算
#数组的计算
import numpy as np

t1 = np.array([[0,2,3,4],[4,5,6,7],[1,2,3,3]])
print(t1.shape)

#与数字计算(广播)
print(t1+2)
#print(t1/0)#inf表示无限、无穷的意思

#数组之间
#形状一样的数组,对应元素相加减
#2*3的数组±1*3的数组,每一行都±1*3的数组
#2*3的数组±2*1的数组,每一列都±2*1的数组
#不一样行不一样列的数组相加减会报错
#(3,3,2)可以和(3,2)进行计算,可以和(3,3)进行计算
t2 = np.array([1,1,1,1])
print(t1-t2)
t3 = t1-t2
print(t1*t2)#乘法和加法的规则一样
#如果希望得到矩阵的乘法结果需要借助特定的函数计算

数组的转置
import numpy as np
#普通数组的转置方法
a = np.arange(24).reshape(4,6)
print(a)
#以下三种方法都是实现数组的转置
print(a.T)
print(a.transpose())
print(a.swapaxes(1,0))#交换轴

 numpy读取本地数据

轴:一维数组有一个0轴,二维数组有0轴和1轴(0表示行,1表示列),三维数组有0轴、1轴和2轴(0轴表示的块,1轴表示行,2轴表示列)

计算一个2维数组的平均值,必须指定哪个方向上的数字的平均值

 三维的轴

 numpy读取.csv文件数据,(.csv文件采用逗号分割值)

读取文本文件数据

np.loadtxt(frame,dtype=mp.float,delimiter=None,skiprows=0,usecols=None,unpack=False)

frame:文件路径

dtype:以什么数据格式将.csv文件中的数据读取到数组中,默认np.float

delimiter:分割字符串,默认是任何空格,CSV改为逗号

skiprows:跳过前x行,一般跳过第一行表头

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

unpack:转置效果

索引和切片操作
#numpy读取本地数据
import numpy as np

us_file_path = './US_video_data_numbers.csv'
uk_file_path = './GB_video_data_numbers.csv'

#t1 = np.loadtxt(us_file_path,dtype='int',delimiter=",",unpack=True)
t2= np.loadtxt(us_file_path,dtype='int',delimiter=",")
print(t2)
print("*"*100)

#取第i行数据t2[i-1]
print(t2[2])
#取不连续的多行eg:取第2行,第3行,第6行,第8行t2[[2,3,6,8]](两个冒号表示步长)
print(t2[[2,3,6,8],:])
#取连续的多行,切片操作
print(t2[2:])
print("*"*100)

#取第i列数据t2[:,i-1]
print(t2[:,3])
#取连续的多列
print(t2[:,2:])
#取不连续的多列
print(t2[:,[0,3]])
print("*"*100)

#通过行列取某个数
a = t2[2,3]
print(a,type(a))
#取多行多列3-5行,2-4列
t3 = t2[2:5,1:4]
print(t3)
#取多个不相邻的点
t4 = t3[[0,1,2],[0,2,1]]
print(t4)

 

 数值的修改

(三元运算符)

import numpy as np
#普通数组的转置方法
a = np.arange(24).reshape(4,6).T
print(a)
print(a[a>20])#返回大于20的数组成的数组
a[a<10]=3 #小于穷的数被修改为3之后的数组
print(a)
print("*"*100)

#三元运算符操作
x = 3 if 3<2 else 4
print(x)
#numpy中的三元运算符操作
t = np.where(a<=3,100,300)#如何元素小于3就替换为100,否则替换为300
print(t)

 clip剪枝

#如果想把数组中小于10的数字替换为0,大于20的数字替换为20,
#类似于剪枝操作,,numpy中的clip操作
import numpy as np
#普通数组的转置方法
a = np.arange(24).reshape(4,6).T
t = a.clip(10,18)
print(t)

#np.nan是一个float类型的数据,如果有缺失,或者做了不合适的计算,用nan表示,比如/0操作
#因为nan不是一个数,所以相关计算都无法得到数字。所有涉及nan的操作,返回的都是nan
print("*"*100)
t = t.astype(float)
t[3,3]=np.nan
print(t)

 

数组的拼接与行列交换
#numpy读取本地数据
import numpy as np

us_file_path = './US_video_data_numbers.csv'
uk_file_path = './GB_video_data_numbers.csv'

t1 = np.loadtxt(uk_file_path,dtype='int',delimiter=",")
t2= np.loadtxt(us_file_path,dtype='int',delimiter=",")

#数组的拼接
#竖直拼接,要求数组的列数相同!增加数组的行数
t3 = np.vstack((t1,t2))#两个括号!!!
print(t3)
#水平拼接,要求数组的行数相同,增加数组的列数
t4 = np.array([[1,2,3],[3,4,5,],[4,5,6]])
t5 = np.array([[2,3],[3,4],[4,5]])
t6 = np.hstack((t4,t5))  #水平拼接
print(t6)
print("*"*100)

#数组的行列交换
print(t4)
#交换数组两行
t4[[1,2],:] = t4[[2,1],:]
print(t4)
#交换数组两列
t4[:,[1,2]] = t4[:,[2,1]]
print(t4)

 数据拼接的应用
#numpy的应用
import numpy as np

us_file_path = './US_video_data_numbers.csv'
uk_file_path = './GB_video_data_numbers.csv'

#加载国家数据
uk_data = np.loadtxt(uk_file_path,dtype='int',delimiter=",")
us_data = np.loadtxt(us_file_path,dtype='int',delimiter=",")

#为两组数据添加国家信息
#构造全为0的数组,代表UK,全为1的数组,代表US
zero_data = np.zeros((uk_data.shape[0],1)).astype("int")#不用科学计数法表示
ones_data = np.ones((us_data.shape[0],1)).astype("int")

#将添加的国家信息拼接到对应国家的数组中
uk_data = np.hstack((uk_data,zero_data))
us_data = np.hstack((us_data,ones_data))

#拼接两组国家的数据
all_data = np.vstack((uk_data,us_data))
print(all_data)

 numpy中的随机方法
#numpy的随机方法
import numpy as np

#创建一个全为0或1的数组
t1 = np.zeros((3,4))
t2 = np.ones((2,3))
print(t1,t2)
print("*"*100)

#创建一个对角线为1 的正方形数组(方阵)
t3 = np.eye(3)
print(t3)
print("*"*100)

#获取数组中每一行或者每一列最大值最小值的位置
t4 = np.array([[2,4,5,7],[5,6,9,2]],dtype="int")
print("每一行最大值位置为{0},每一行最小值位置为{1}".format(np.argmax(t4,axis=0),np.argmin(t4,axis=0)))
print("每一列最大值位置为{0},每一列最小值位置为{1}".format(np.argmax(t4,axis=1),np.argmin(t4,axis=1)))
思维导图 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931830.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号