数据分析-numpy
**numpy:**一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算
**特点:**快速、方便、科学计算的基础库
基本操作
创建数组(矩阵)
import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = np.array(range(1, 6))
c = np.arange(1, 6)
print(a)
print(b)
print(c)
# 上面a,b,c的内容相同,注意arange和range的区别
输出结果:
数组的形状
import numpy as np
a = np.array([[3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9]])
print(a)
print("********")
print(a.shape) # 查看数组的形状 (2,6)表示2行6列
print("********")
print(a.reshape(3, 4)) # 修改数组的形状 修改为3行4列的矩阵
输出结果:
数组和数的计算
import numpy as np
a = np.array([[3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9]])
print(a)
print("********")
print(a+1)
print("********")
print(a*3)
输出结果:
数组和数组的计算
numpy拥有广播机制,在运算过程中,加减乘除的值被广播到所有元素上面
import numpy as np
a = np.array([[3, 4, 5, 6, 7, 8],
[4, 5, 6, 7, 8, 9]])
b = np.array([[21, 22, 23, 24, 25, 26],
[27, 28, 29, 30, 31, 32]])
print(a + b)
print("********")
print(a * b)
输出结果:
numpy读取数据
不是很建议使用numpy去读数据,后面会讲到用pandas去读取数据,功能更强大
CSV:Comma-Separated Value,逗号分隔值文件
显示:表格状态
源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录
由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经常操作csv格式的文件,但是操作数据库中的数据也是很容易的实现的
np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
loadtxt表示从文本文件读内容
fname表示文件的位置
dtype表示文件读出来之后,给它指定一个什么样的类型
delimiter表示数据是怎么样分割开的
unpack:默认是False(()),默认情况下,有多少条数据,就会有多少行,为True的情况下,每一列的数据会组成一行,原始数据有多少列,加载出来的数据就会有多少行,相当于转置的效果
现在这里有一个英国和美国各自youtube1000多个视频的点击,喜欢,不喜欢,评论数量([“views”,“likes”,“dislikes”,“comment_total”]) 的csv,运用刚刚所学习的知识,我们尝试来对其进行操作
数据来源
import numpy as np
# 当前路径下的文件路径
us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
t1 = np.loadtxt(us_file_path, delimiter=",", dtype="int", unpack=True)
t2 = np.loadtxt(us_file_path, delimiter=",", dtype="int")
print(t1)
print("*" * 100)
print(t2)
输出结果:
.png)]
数组的转置
那么问题来了,什么是转置?
转置是一种变换,对于numpy中的数组来说,就是在对角线方向交换数据,目的也是为了更方便的去处理数据
import numpy as np
t2 = np.arange(24).reshape(4, 6)
print(t2)
print("*" * 100)
# 对矩阵进行转置
print(t2.transpose())
# print(t2.T)
# print(t2.swapaxes(0, 1))
输出结果:
那么,结合之前的所学的matplotlib把英国和美国的数据呈现出来?
看到这个问题,我们应该考虑什么?
1.我们想要反映出什么样的结果,解决什么问题?
2.选择什么样的呈现方式?
3.数据还需要做什么样的处理?
4.写代码
numpy索引和切片
直接看代码吧,建议自己敲一敲,就知道每行代码什么含义啦
import numpy as np
# 当前路径下的文件路径
us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv"
t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)
t2 = np.loadtxt(us_file_path, delimiter=",", dtype="int")
print(t1)
print(t2)
print("*" * 100)
# 注意:需明白矩阵是从第0行开始的
# 取行
print(t2[2])
# 取连续的多行
print(t2[2:])
# 取不连续的多行
print(t2[[2,8,10]])
print(t2[1,:])
# 1表示取第2行
# ,左边表示行,右边表示列
# :表示每列都要
print(t2[2:,:])
print(t2[[2,10,3],:])
# 取列
print(t2[:,0])
# 取连续的多列
print(t2[:,2:])
# 取不连续的多列
print(t2[:,[0,2]])
# 取行和列,取第3行,第四列的值
a = t2[2,3]
print(a)
print(type(a))
# 取多行和多列,取第3行到第五行,第2列到第4列的结果
# 去的是行和列交叉点的位置
b = t2[2:5, 1:4]
print(b)
# 取多个不相邻的点
# 选出来的结果是(0,0) (2,1) (2,3)
c = t2[[0, 2, 2], [0, 1, 3]]
print(c)
numpy中数值的修改
import numpy as np
t1 = np.arange(24).reshape(4, 6)
print(t1)
print("*" * 100)
# 数值修改,将矩阵中小于8的值修改为6
t1[t1 < 8] = 6
print(t1)
输出结果:
numpy还有一些其他的知识,之后会在这篇博客上进行补充