实验二 Numpy数值计算1 .实验类型设计研究2 .实验目的和要求(1) 掌握Numpy数组对象的创建和随机数的生成;(2) 掌握Numpy数组对象的索引与变换;(3) 掌握Numpy中读/写文件的方法;(4) 能利用Numpy进行简单的统计分析3 .实验内容题目一:创建数组并计算• 创建100个服从正态分布的随机数,数组形态为2维数组•创建两个数组,进行四则运算题目二:电子商务数据统计分析项目介绍:随着社会经济的发展,人们对服装的需求越来越多样化,而女性服装的变化也 成为值得分析的一个关注点这个项目的目的是对女性的服装进行分析,以了解 客户对女性服装的态度数据集分析项目的数据集内容主要是客户对服装的评论,数据集包括23486行和8个特征 变量(列数,不包含索引列),而每一行包含了一个客户对服装的评论和其他相 关信息• Clothing ID:服装的唯一 ID号• Age:评论者的年龄• Rating:评论员对服装的评级,从1到5, 1最差,5最好• Recommended IND:服装是否被评论家推荐,推荐为1,不推荐为0• Positive Feedback Count:正反馈计数• Division Name:服装高级分类的分类名称• Department Name:服装部门名称的分类名称• Class Name:服装分类名称基于Numpy,完成以下内容:1) 使用numpy相应的读文件数据方法,根据给定列Clothing ID> Age、 Recommended IND> Class Name获得相应的数据集,并统计Clothing ID的评论 数,我们希望仅对评论数大于300的Clothing ID的数据进行分析,要求输出评 论数大于300的Clothing ID与相应的评论数,结果按照评论数从大到小排列。
2) 统计在评论数大于300的Clothing ID评论中,对应评论者的年龄段分布, 其中年龄段包括:青少年(小于20岁)、青年(20-39岁)、中年(40-59岁)、老年(大 于60岁)输出格式:在Clothing ID为xx的评论中,青少年评论数有xx条,青 年评论数有xx条,中年评论数有xx条,老年评论数有xx条3) 计算评论数大于300的Clothing ID的受欢迎程度计算公式为:推荐数/总 评价数比如Clothing ID=1的有10条评论,其中有5条为被推荐,则Clothing ID=1的评论次数为10,推荐次数为5,该服装的受欢迎程度为:5/10=0.5要求 输出Clothing ID与受欢迎程度4) 使用numpy相应的写文件数据方法,将上述的Clothing ID的统计信息保 存到csv文件中其中标题栏为:ID,类别,受欢迎指数,总评论数,青少年评论数,青年评论数,中年 评论数,老年评论数4.实验背景知识NumPy(NumericalPython)是高性能科学计算和数据分析的基础包它是本课介 绍的几乎所有高级工具的构建基础具体应用参考课程代码4.1数组创建1)用array函数来创建数组可以将列表、元组、嵌套列表、嵌套元组等给定的python序列转化为数组In [1]: import numpy as np#创建_个—维数页,参数Python的单元素List a = np. array ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])aOut [1]:array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])In [2]:#创建- b = np.b-个二维数组,参数为Python的嵌套List array ([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])Out [2]:array(er[1, 2, 3, 4, 5],[6, 7, 8, 9, 10]])2) 使用numpy函数创建数组a) arange函数:类似于python的range函数,通过指定开始值、终值和步 长来创建一维数组b) linspace函数:linspace函数通过指定开始值、终值和元素个数来创建一 维数组c) logspace函数:创建等比数列d) zeros:创建一个用指定形状用0填充的数组e) eye:创建一个主对角线为1,其它为0的数组f) diag:创建一个除对角线全为0的数组g) ones(shape):创建一个用指定形状用1填充的数组3) 通过生成随机数的np.random模块创建数组a) np.(shape):生成0到1之间的n个随机数b) np. (shape)返回一个符合标准正态分布的数组(均值0,方差1)c) np.nt (m,n,size)生成一个给定上下限范围的随机数数组([m,n))左闭右4.2数组常用属性返回血。
表示数组的维数返回tuple表示数组的尺寸,对于国而列的矩阵,形状为(n,m)返回血表示数组的元素总数,等成眺状的乘积返回data-type描述数组中元素的类型返回int表示数组的每个元素的大小(以字节为单位)o数组类型转换astype()函数new_a = a.astype(new_type)In [119]: a np.0065((2,3,4), dtype np.int)In [120]: aOut[120]:In [121]: b = a.astype(np.float)In [122]: bOut[122]:array([[[l, 1, 1, 1],[L L L 1]> [1> 1, 1, 1]]>[[L L 1, 1], [1> L 1, 1]> [1, L L 1]]])array([[[ 1., 1.],[1・,1.L [l.]]>[[1・,L, L, 1.],[i・,i., i・,i・L[1・・1・,1・,1・]]])astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致4.3索引与切片4.3.1基础索引1) 一维数组:和Python的List 一样In [3]: x = np. arange(lO)xOut [3]: array (EO, 1, 2, 3, 4, 5, 6, 7, 8, 9])In [4]: #使用下标索引来访问列表中的值#正索引:从左向右0, 1, 2, 3. #负索引:从右向左,T, -3print (x [2], x[9], x[T], x[TO])2 9 9 0In [5]: #使用切片来访问特定范围内的元素#切片语法:[start:stop:step],其中start代表起始索引;stop代表终止索引;step代表步长 x[2:9]Out [5]: array ([2, 3, 4, 5, 6, 7, 8])2)多维数组:多维数组每一个维度有一个索引,各个维度之间用逗号隔开In [9]:X = np.arange (20). reshape(4, 5)XOut [9]:array ([ [ 0, 1, 2, 3, 4],[5, 6, 7, 8, 9],[10, 11, 12, 13, 14], [15, 16, 17, 18, 19]])In [10]:#分别用行坐标、列坐标,实现行列筛选 print (X[0, 0], X[2, 3], X[-1, 3])0 13 18In [11]:#行 筛选print (第三行:,X⑵)print (倒数第三行:,X [-3])第三行:[10 11 12 13 14]倒数第三行:[5 6 7 8 9]In [13]:#筛选列X[:, 2]Out [13]:array([ 2, 7, 12, 17])In [12]:#筛选多行X[:-2]Out [12]:array ([[0, 1, 2, 3, 4],[5, 6, 7, 8, 9]])In [24]:X = np.arange (20). reshape(4, 5)Xarray([[ 0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19]])Out[24]:In [25]: #筛选多行,列可省略X[[0, 2]] # 等同于X[[O, 2]f :]Out [25]: array ([ [ 0, 1, 2, 3, 4],[10, 11, 12, 13, 14]])In [26]:#筛选多列,行不能省略X[:, [0,2,3]]Out [26]:array ([ [ 0, 2, 3],[5, 7, 8],[10, 12, 13],[15, 17, 18]])In [27]: #同时指定行列-列表#返回的是[(0,1), (2,3), (3, 4)]位置的数字 X[[0, 2, 3], [1, 3, 4]]Out [27]: array ([ 1, 13, 19])4.3.3条件索引单条件:In 131]: X = np. arange(20). reshape (5,4)Out[31]: array([[ 0,1,2,3],[4,5,6,7],[8,9,10,11],[12,13,14,15],[16,17,18,19]])In [32]: X % 4 = 0False, False], False, False],False, False],False, False],False, False]])Out[32]: array([[ True, False, [True, False, [True, False, [True, False, [True, False,In [33]: # X % 4 == 0的boolean数组,既有行,又有歹0 #因此返回的是一维结果X[X % 4 = 0]Out [33]: array ([ 0, 4, 8, 12, 16])多条件:条件与条件之间一定要加括号! ! !!In [38]:x = np. arange (10)xOut [38]:,array ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])In [47]:Out[47]:condition = (x%2=0) | (x>7)conditionTrue,array([ True, False, True, False, True, False, True, False, True])In [48]: x [condition]Out [48]: array ([0, 2, 4, 6, 8, 9])4.4 ndarray数组形态变换1. 改形reshape:在不改变数据的情况下为数组赋予新的形状 resize:改变自身数组的形态2. 展平ravel:将多维数组变一维数组,横向展平flatten:将多维数组变一维数组,可以横向展平,也可以纵向展平3. 组合hstack:数组横向组合vstack:数组纵向组合 concaten。