2、原始数据,经过数据清洗和数据转换后,将原始数据转变为“干净”的数据。数据预处理包括数据清洗和数据转换。.数据可视化作用:通过视觉化呈现数据的方式,不仅能快速抓住要点信息,而且,还可以揭示通过简单统计不能观察到的模式和结论。.数据分析具有三大作用:第一:现状分析。第二:原因分析。第三:预测分析。数组进行重复操作,而repeat。函数是对数组中的每个元素进行重复操作。9.在NumPy中,可以通过unique()函数找出数组中去重后的元素并返回已排序的数组,从而实现去除数组中重复数据的目的。二.编程题.代码如下#-coding:UTF-8importnumpyasnpa=6
3、25,0,1,3,4,7,8,9b=2,卬,3,157,5.9arr_a=np.array(a)print,第1个数组:arr_a)print,第1个数组的去金(去重后的值)数组:,)arr_a_u=np.unique(arr_a)print(arr_a_u)arr_b=np.array(b)print,第2个数组:1arr_b)print,第2个数组的去金(去重后的值)数组:,)arr_b_u=np.unique(arr_b)print(arr_b_u)print,返回主重后的值的重复数量:,)arr_a_u,u_a_inverse=np
4、.unique(arr_a,return_counts=True)print(u_a_inverse)arr_b_u,u_b_inverse二np.unique(arr_b,return_counts=True)print(u_b_inverse).代码如下data_date.csv文件中数据date20-01-201902-02-201903-04-2018#-coding:utf-8-*-importnumpyasnpimportdatetimedate=np.loadtxt(!data_date.csvdtype=np.str,skiprow
5、s=l)listl=foriindate.tolist():y=int(i6:10)m=int(i3:5)d=int(i0:2)a=datetime.date(y,m,d)week=a.isoweekday()list1.append(week)print(listl)arr_week=np.array(listl)print(arr_week)3.代码如下#-coding:UTF-8importnumpyasnpa=1.13.3,5.5,7.7,9.9b=0.0,2.2,44,6.6,8.8arr_a=np.
6、array(a)print(arr_a)cl=arr_aarr_a6c2=arr_aarr_a绑定(binding)或堆叠(stacking)。可使用concat()函数。合并重叠数使用是combine_first()函数,该函数的作用是用函数参数对象中的数据为函数调用对象的缺失数据“打补丁”。即填充函数调用对象中的数据缺失值。.字段拆分是按照固定的字符,拆分已有的字符串。字符分割函数有正序分割列split()函数和逆序分割列rsplit()函数。字段抽取是根据已知列数据的开始和结束位置,抽取出新的列。字段抽取采用slice。函数。记录抽取是指根据一定的条
7、件,对数据进行抽取。记录抽取函数的语法如下:dataframcondition,其中,condition为过滤条件。函数返回值是DataFramo.重塑层次化索引,使用stack。函数会将数据从”表格结构“变成”花括号结构“,即将其行索引变成列索引,反之,unstack()函数将数据从“花括号结构“变成”表格结构“,即要将其中一层的列索引变成行索引。.利用映射实现数据转换的过程:首先创建映射关系,例如,创建字典fruits用于指明水果标识和水果名称的映射关系,然后运用replace。函数,通过fruits映射关系来实现元素的替换;或是利用map()函数,通过构建fruits映射关系
8、来实现元素的添加。.使用join。函数可以将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串。使用split。函数,可通过指定分隔符对字符串进行拆分,使用replace。函数可将字符串中的old(旧字符串)替换成new(新字符串),使用find。函数可查找子字符串,若找到返回从0开始的下标值,若找不到返回T。第9章机器学习库scikit-learn入门一、简答题.机器学习是人工智能的一种类型,从广义上来说,机器学习是一种能够赋予机器学习的能力,这种学习能力是不需要通过编程来实现的。但从实践的意义上来说,机器学习是一种通过利用数据,训练出模型,然后使用模型预测
9、未知属性的一种方法。机器学习的基本流程如图9-2所示。.机器学习的问题分为监督学习和非监督学习两大类。督学习的算法有线性回归、逻辑回归、神经网络和SVM(支持向量机),常见的非监督式学习算法有聚类算法。.scikit-learn的简称为sklearn,scikit-learn库是面向Python的免费机器学习库。sklearn不仅包含有分类、回归、聚类算法,如SVM、随机森林、k-means等,而且还包含有降维、模型选择和数据预处理等机器学习算法。sklearn支持NumPy和SciPy数据结构,以及Matplotlib库。.在sklearn中的数据表示的最佳方式就
10、是数据表。一个基本的数据表就是一个二维数据网格,其中行表示数据集的各个元素,也称为样本,列表示这些元素(样本)的特定定量信息。在scikit-learn模型中,数据除了特征矩阵X之外,通常还使用标签或目标数组。.在机器学习中,所谓特征归一化,就是将各特征的数值进行缩放,使特征的数值大小范围转换为相同的区间。在机器学习中,进行特征归一化原因是在同一个样本中,由于各特征的评价指标不同,往往会使各特征具有不同的量纲和量纲单位,从而造成各特征的数值大小范围不一致。为了消除指标之间的量纲影响,需要对数据进行归一化处理,以解决数据指标之间的可比性问题。.在scikit-learn中,最常用的
11、特征归一化方法有MinMaxScaler()和StandardScaler()0实现特征归一化具体参见示例代码example9-7.py和示例代码example9-8.py。.使用scikit-learn进行机器学习的流程:首先数据清洗,准备好数据集,然后根据机器学习问题选择相应的模型,并进行调整参数训练和测试模型。.超参数是指在模型开始学习过程之前人为预先定义的参数,而不是通过训练得到的参数数据。通过调整超参数来训练模型的过程称为调参。调参就是寻找k取多少值时为最优值。寻找最优超参数的方法,一种是依靠经验取值,另一种是依靠实验确定,如通过交叉验证(cross_valida
12、tion)来验证模型优劣。.交叉验证的原理:先将整个数据集分为训练集和测试集两部分。用不重复抽样将训练集的数据随机分为k份。k-1份数据用于模型训练,剩下那一份数据用于验证模型。重复第三步k次,并保证每重复一次所选择的验证集和训练集是不相同的。重复k次后将得到k个模型和它的评估结果。第10章电影数据分析项目一.编程题.代码如下:#-coding:utf-8-*-importpandasaspdimportmatplotlib.pyplotaspit#加载数据movies_df=pd.read_csv(,d:/data/movie_metadata.csvencodi
13、ng=MGBKH)column_null_number=movies_df.isnull().sum()movies_dfLnonull=movies_df.dropna()movies_dfLnew=movies_dCnonull.drop_duplicates(keep=tfirstt)movies_dfLnew.describe()#第1题plt.scatter(x=movies_dfLnew.duration,y=movies_diLnew.movie_facebook_likes)plt.xlabelCuration*)plt.ylabel(fmovie_faceb
14、ook_likes1)plt.title(,duration&likes,)plt.savefig(,d:/data/duration_likes.png,)plt.showQ2至6题代码如下:#-*-coding:utf-8-*-importpandasaspdimportmatplotlib.pyplotaspit#加载数据movies_df=pd.read_csv(,d:/data/movie_metadata.csvencoding=MGBKH)column_null_number二movies_df.isnull().sum()movies_dfLnonu
15、ll=movies_df.dropna()movies_dfLnew=movies_dfLnonull.drop_duplicates(keep=Tfirst,)movies_dfLnew.describe()#第2题movie_score_20=movies_d_new.sort_values(,imdb_score,ascending=False).head(20)result=movie_score_201director_nameT,Timdb_score1print(result)#第3题director_group二movies_df_new.gr
16、oupby(,director_name!).size()group_head_10=director_group.sort_values(ascending=FaIse).head(10)print(group_head_10)#第4题movie_grose_10=movies_dfLnew.sort_values(,gross,ascending二False).head(10)print(movie_grose_101director_name!,1gross*)#第5题movie_grose_5=movies_dfLnew.sort_values(gros
17、s,ascending=False).head(5)print(movic_grosc_5actor_l_name1gross)#第6题movie_actor_10=movies_dfLnew.sort_values(factor_l_facebook_likes,ascending二False).head(l0)print(movie_actor_10factor_l_nameVactor_l_facebook_likes)7.数据分析的常用工具:目前主流的数据分析语言有Python、R、MATLAB这3种。各有优劣:教材表1-1从语言学习难易程度、使用场景、第
18、三方支持、流行领域和软件成本等方面比较了Python、R、MATLAB这3种数据分析工具。第2章Python与数据分析.Python语言的特点:参见教材2.1.1Python语言的特点。Python程序的执行过程:Python是一种解释型编程语言,每次运行Python命令时,Python的解释器就会启动,此时就会出现Python命令提示符,在该提示符下输入命令,就可直接运行。解释型语言的好处是不需要对代码进行编译链接,只需要编写好程序,就可直接运行,.测试Python软件是否安装成功:参见教材P13页中3测试Python。Python程序的后缀名是py.在Python交互式终
19、端上Python语言的命令提示符是.运用Python语言作数据分析的势:参见教材P8页中2.2Python与数据分析关系.PyCharm和JupyterNotebook这两款数据分析软件各有特点和优势:PyCharm是适合用于开发Python的项目程序,PyCharm是一款专门服务Python程序开发的集成开发环境,它具有配置简单、功能强大、使用方便的优势。JupyterNotebook(又称IPythonNotebook)是一个交互式的在线编辑器,它可以每编辑一行代码就运行一行代码,并且将运行的结果显示在代码的下方,以方便用户查看,非常适合做交互式的数据分析。它的优势
22、串变量连接起来。.Python中可变数据类型有列表(list)和字典(diet),不可变数据类型有整型(int)、浮点型(float)、字符串型(string)和元组(tuple)。.列表创建方法:在Python中创建列表的方法有两种,一种是使用方括号创建,另一种是使用list。函数创建。列表元素提取方法:在列表对象后面紧接方括号i,其中i是指定的索引o列表元素切片操作的格式:序列对象起始元素索引:终止元素索引:步长值。.为列表添加元素的函数有:append。函数、extend。函数和insert()函数,使用append。函数向列表对象中添加元素,该元素会被追加到列表的尾部;
23、使用extend。函数能够将另一个列表添加到列表的末尾,相当于将两个列表进行拼接。使用insert。函数可以在指定位置添加元素。.删除列表中元素有del、pop和remove语句。修改列表中元素最简单的方法是提取该元素并进行赋值操作。.元组创建方法:一种是使用园括号()创建,另一种是使用tuple。函数创建。元组元素提取方法:在元组对象后面紧接方括号i,其中i是指定的索引。元组切片操作的格式:序列对象起始元素索引:终止元素索引:步长值元组解包的格式:varl,var2,,varn=tuple.统计元组中元素出现的次数方法:tuple,count(元素)。获取元素在元组中第1次出
24、现的位置:tuple,index(元素).创建字典的方法:一种是使用花括号创建,另一种是使用diet()函数创建。获取字典元素的方法:一种方法是通过键获取字典元素,即字典键;另一种方法是使用字典get()函数。删除字典元素的方法:使用del语句删除元素,其格式为deldict_namekey,使用pop语句删除字典元素,其格式为dict_name.popkey,使用clear。函数则会删除字典中的所有元素。修改字典元素的方法:可使用键访问赋值来修改,格式dict_namekey=new_value.列表、元组和字典的区别:列表与元组是使用索引来对应元素,而字典主要是通过键
25、来访问对应的元素。列表和字典是可变数据类型,所以可以对列表和字典对象进行元素的增删改查操作。.Python的流程控制语句中是使用缩进来划分语句块,相同缩进的语句组成一个语句块。.Python中没有switch和case语句,多路分支语句只能通过ifelifelse流程控制语句来实现。.break语句的作用是终止循环语句,continue语句作用是告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环。pass是空语句,作用是保持程序结构的完整性。.Python函数定义的语法格式:def函数名(参数列表):函数体.在Python中使用*args和*kwargs可以定义可
26、变参数,在可变参数之前可以定义0到任意多个参数,可变参数永远放在参数的最后面。.局部变量和全局变量区别:在函数体内定义的变量为局部变量,局部变量只能在其被赋值的函数内部访问。定义在函数体外的变量称为全局变量。全局变量可以在函数体内被调用。二.编程题.代码如下:#-coding:UTF-8-*-gradeJist=(李芳,86,80)(张艳,74,75)grade_list.append(王志,87,95)print(grade_list)new_list=foriingrade_list:new_list.append(iO,i1*0.4+i2*0.6)p
27、rint(new_list)gradeist.remove(李芳,86,80)print(grade_list).代码如下:dictl=电视机,:3400J空调,:2300dictl洗衣机】二1200print(dictl)values=list(dictl.values()max_value=max(values)printprint。print。:高价格print。:高价格%max_value)diet空调I=2800print(dictl)deldictl电视机print(dictl).代码如下:defevennumber_sum_function(n):su
28、m,i=0,l#求1到n数字的偶数和sumwhile(ihstack()和vsta中()等函数可实现数组的连接操作,而利用split。、hsplitO和vsplitO等函数可实现数组的分割操作。.在NumPy中,不同形状的数组可以进行四则运算,因为,如果两个数据的形状(shape)不一致时,低维数组会自动将维度扩充到与高维数组一致,然后再按元素逐个运算,这就是数组的广播机制。.说明数组与矩阵的联系和区别:参见教材P85页。10.dot()函数是数组中对应元素相乘的累加和(矢量积),而multiply。函数和星号(*)是将数组中对应元素相乘(数量积)。二.操作题(1)在Wi
29、ndows操作系统下安装NumPy和SciPy软件包。(2)在PyCharm开发工具下安装NumPy和SciPy。三.编程题.代码如下#-coding:UTF-8importnumpyasnpcp_type=np.dtype(,namenp.str,10),(,64)print,数据亲型::cp_type)cp_arr=np.airay(李明(王华dtype二cp_type)print,自定义数据类型的数组:cp_arr).代码如下coding:UTF-8importnumpyasnpa=625,0,1,3,4,7,8,9arr
30、=np.array(a)arr.shape=(2,5)print(arr)print,将arr数组竖直分割为2个大小相等的子数组:print(np.split(arr,2)print(np.vsplit(arr,2).代码如下#-*-coding:UTF-8importnumpyasnpa=6,2,5,0,134,7,8,9b=2,3门,5,7arr_a=np.array(a)arr_a.shape=(2,5)arr_b=np.array(b,dtype=int)arr_b.shape=(1,5)arr_c=arr_a+arr_bprint(arr_c).代码如下coding:UTF-8importnumpyasnpa=6,2,5,0,1,3,4,7,8,9,10,11arr=np.array(a)arr.shape=(3,4)bl=arr:2,:2b2=arr2b3=arrl:,2:print(bl,b2,b3).代码如下coding:UTF-8importnumpyasnpa=6,2,5,0,1,3,4,7,8,9,10,11arr=np.arra