数据分析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)))

思维导图 

 

NumPy和Pandas是Python中两个用于数据分析的重要库。NumPy是一个数学库,提供了多维数组对象和用于处理这些数组的函数。它是大多数数据科学工具和库的基础。Pandas是一个数据处理和分析库,它建立在NumPy之上,提供了用于处理和操作结构化数据的高级数据结构和函数。 NumPy的主要特点是它的多维数组对象(也称为ndarray),它可以存储相同类型的元素。这使得NumPy非常适合进行数学和统计计算,以及处理大规模数据集。NumPy还提供了许多用于数组操作的函数,包括索引、切片、聚合操作、线性代数、傅里叶变换等。在数据分析中,NumPy常用于数据清洗、转换和计算。 Pandas是基于NumPy构建的,它提供了两个主要的数据结构:Series和DataFrame。Series是一维标记数组,类似于带有标签的NumPy数组。DataFrame是一个二维表格,类似于Excel或SQL表。Pandas提供了丰富的功能,包括数据的读取和写入、数据清洗、数据过滤、数据聚合、数据可视化等。 Pandas的优势在于它的表格结构和灵活的数据处理能力。它可以处理不同类型的数据(整数、浮点数、字符串等),并且可以进行缺失值处理和重复值处理。此外,Pandas还提供了强大的数据操作功能,如合并、拼接、分组和透视等。 综上所述,NumPy和Pandas是两个在数据分析中广泛使用的Python库,它们提供了高效的数据处理和分析工具,能够满足不同场景下的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值