①numpy模块:numpy是Python支持对大量数组进行科学计算的第三方库。其核心是ndarray对象,这个对象封装同种类型的n维数组,且将许多操作留在编译代码中执行,运行效率高。故numpy善于对大量数据进行科学计算。是基于python数据分析的三大模块之一。
②使用场景:numpy模块通常与matplotlib(绘图库)一起使用,在matplotlib绘制图表前进行对数据进行计算处理。也被称为matplotlib模块绘制图表伴侣。
③为什么要用numpy:Python中除了列表其他容器都在数据分析中都不太合适,但列表传递的是引用,虽然长度及元素类型灵活但速度就不怎么快。显然numpy更适合大量数据和高频计算,但ndarray创建固定,元素同种类,改变相当于重建。
ndarray(N-dimensional array)意思是n维数组,保存同种类数据,一旦写入,不能改变。
④实例应用:没有人出题我想到的也比较雷同,无非对一组数的,期望,方差,标准差的计算,这些方法倒不必急于一时。我们以简单学生成绩单为例进行的操作,难度主要是了解CSV文件并导入数据,以及格式化结构数组,矩阵运算倒不多!
tip:导入数据的一个关键点:结构数组 dtype,结构中的字段占据连续的内存空间,每个结构体占用的内存大小相同,在python中只能是元组。np.dtype({})中,必须是'names'和'formats',不允许自己给名,否则会报出如下错误:ValueError: entry not a 2- or 3- tuple。
⑤总结:现在对numpy的理解就是数组的计算,日常如果就是简单的加减乘除或者统计分析,Excle足矣,实在不行录一个宏优化下,甚至不用VBA。
import numpy as np def load_csv(): datas = [] header = [] with open('F:/python学习文件/实验文件夹/numpy/统计样本.csv', 'r', encoding='utf-8-sig') as f: # 把Excel文件直接保存成CSV文本,导入 # 文本保存时包含了BOM(Byte Order Mark,字节顺序标记,出现在文本文件头部)用utf-8会出现\ufeff字符(没啥影响) # 按行读取最后一个元组元素有换行符\n for index, line in enumerate(f.readlines()): if index == 0: header = (line.split(',')) # 输出一个列表,存放表头,每个表头是字符串 else: datas.append(tuple(line.split(','))) # 输出一个列表,每个元素是每行数据的元组,元组元素是字符串数据 print(header) # print(datas) # 把datas变成矩阵,datas本质是一个列表中间存放了38个元组数据,定义列名和每列的数据类型 result = np.array(datas, dtype={'names': header, 'formats': ['S4', 'i', 'i', 'i', 'i', 'i', 'f']}) # print(result) return result # 生成的是一个(38,)38行1维数组,每个元素是元组并被header对应命名 stu_s = load_csv() chinese = stu_s['语文'] math = stu_s['数学'] print(f'语文平均分是{np.mean(chinese):.2f},数学最高分是{np.max(math)}') print(stu_s.dtype) print(stu_s.shape) print(math) j = 0 for i in stu_s['地理\n']: if i < 60: j += 1 print(f'地理不及格的人数为{j}') print(np.extract(stu_s['地理\n'] < 60, stu_s['地理\n']))
以下为输出信息: