Python数据分析(项目式)_第1页
Python数据分析(项目式)_第2页
Python数据分析(项目式)_第3页
Python数据分析(项目式)_第4页
Python数据分析(项目式)_第5页
已阅读5页,还剩78页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NumPy实战NumPy介绍支持多维数组的高效存储与快速访问为科学计算提供各类实用工具丰富的数据查询方法广播机制(用于快速进行科学计算和模型训练)通用的ufunc方法(让代码变得更简洁和通俗易懂)核心数据结构:ndarray(简称为数组)NumPy核心数据结构-ndarray(数组)List采用对象方式存储数据,因此,每一行被视为一个对象。ndarray用一段连续空间存储多维数据。(ndarray=n-dimarray,简称为数组)ndarray可以快速计算指定数据的地址,从而大幅提高数据访问效率。举例:访问数据“5”,ndarray只需要2次内存访问即可,而List需要3次内存访问,思考为什么?思考:ndarray和List各自的优势是什么?数组轴向数组形状与维数的区别维数:与空间类似,指数组中数据的访问方向的数量。一维:只能按照一个方向访问二维:可以按照两个方向访问维数没有限定单个方向上的数据数量。形状=维数+轴向长度(3,

):一维数据,轴向0上有3个数据(4,2):二维数据,轴向0上有4个数据,轴向1上有2个数据广播广播的目的:把两个不同形状的数组按照一个统一的规则变换为相同形状的数组。(3,)(3,)(,)(3,)(3,3)(3,3)(3,)(3,3)(3,1)(3,3)(3,)(3,3)广播过程扩维:扩展维数少的数组,在其形状中添加前缀1,使得其维数与参与计算的数组的最大维数保持一致。复制:对轴向长度为1的维度进行复制,直到其长度与参与计算的所有数组在此轴向上的最大长度保持一致。计算:经过前面两步计算,所有参与计算的数组均被变换为相同形状的数组,可以直接进行计算。广播举例广播举例AB首先确定最终形状:A和B的最终形状均为(4,3)。扩维:A的形状为(4,3),B的形状为(3,),需要将B扩维为(1,3)。复制A无需复制(因为两个轴向长度均大于1)B需要从(1,3)(4,3),需要将0轴长度从14,即沿着0轴进行复制。广播举例AB首先确定最终形状:A和B的最终形状均为(4,3)。扩维:A的形状为(4,1),B的形状为(3,),需要将B扩维为(1,3)。复制A的1轴长度为1,B的1轴长度为3,需要对A的1轴进行复制。B的0轴长度为1,A的0轴长度为4,需要对B的0轴进行复制。广播举例扩维:A的形状为(4,1),B的形状为(2,3),均无需扩维。复制A的1轴长度为1,B的1轴长度为3,需要对A的1轴进行复制。B的0轴长度为2,A的0轴长度为4,无法对B沿着0轴进行复制。复制的前提条件:两个数组对应维度的长度或者相等,或其中一个必须为1。ABA的形状(4,1)(2,3)B的形状

变换数组分配数组元素至各维度时,reshape()默认采取C语言风格,即按从右往左的顺序处理各维度的元素分配访问数组数组访问包括两个步骤:选定数组元素将被选定的数组元素进行形状变换(基于给定的索引形状)第一步:选定数组元素整数类型的索引(如标量,整数数组):将整数作为下标整数切片:以切片范围内的整数作为下标布尔型数组:布尔型数组中为True元素对应的下标避免使用列表作为索引(可以使用一维列表,避免使用多维列表)实例:x[2],x[1:2],x[[2]],x[np.array([[2]])],x[[False,False,True]]不建议使用列表作为索引。访问数组最终输出结果形状:与对应索引的形状保持一致i轴索引结构结果集中i轴形状无i轴形状=查询数组的i轴形状标量索引i轴形状=无切片索引i轴形状=切片索引包含的数值个数整数数组(或者整数数组)索引i轴形状=整数数组索引的形状*布尔数组索引i轴形状=布尔数组索引中True值个数*注意:如果多个轴上使用形状相同的数组索引时,则只保留和设置使用数组索引的第一个轴向的形状,删除使用列表索引的其余轴向形状。NumPy常用工具介绍ufunc介绍查询数组统计计算数组排序ufunc介绍思考:如何使用Java、C、c++实现两个二维数组的求和运算? for(inti=0;i<xxx;i++)for(inti=0;i<yyy;i++)c[i,j]=a[i,j]+b[i,j]通俗易懂的数学算式:c=a+bufunc的目的:将处理多维数组的循环代码

通俗易懂的数学算式上述操作的ufunc实现:c=a+b查询数组np.where(条件):查询满足条件的数组元素的下标np.extract(条件,数组):查询满足条件的数组元素np.all(布尔型数组,axis):检查指定轴向是否全部为Truenp.any(布尔型数组,axis):检查指定轴向是否存在True统计计算方法名称功能介绍amin()返回数组中的最小值(指定轴向时,按轴向获取,以下同)amax()返回数组中的最大值mean()计算数组元素的算术平均值median()计算数组元素的中位数值average()计算数组元素的加权平均值std()计算数组元素的标准差histogram()计算数组元素的直方统计bincount计算数组中个元素的出现次数digitize()返回数组各元素所属的分类区间下标排序数组方法名称功能介绍sort()基础的排序算法,返回排序后的数组argsort()与sort()类似,区别在于返回排序后的下标sorted()与sort()类似,区别在于适用于可迭代的对象lexsort()对多个序列进行排序,返回排序后的下标partition()(argpartition())对数组进行排序、分区,返回分区后的数组(下标)数据清洗、数据呈现主要内容数据清洗缺失值处理异常值处理数据转换数据替换数据离散化数据可视化基本图表复杂图表数据清洗数据集中通常存在“脏”数据,即有问题的数据。数据采集问题:数据缺失,读数错误数据格式问题:格式不一致,错误格式异常数据:不正常的数据脏数据实例(city_temperature.csv)State列部分数据缺失年份为201气温为-99重复数据、失效数据等等脏数据的危害降低数据集的质量影响机器学习模型的性能增加模型训练的时间影响相应的社会经济活动数据清洗缺失值处理isnull():寻找和显示是否存在缺失值fillna():填充缺失值异常值处理:箱线图箱线图的思想:异常值会有较大的可能性”远远大于“或”远远小于“正常值。因此,将异常值与正常值混在一起排序,则异常值通常会位于排序后的两端。箱线图异常身高过高异常身高过矮正中间的人具有正常的身高(median)正中间那一半的人也具有正常的身高(中间那一半人:Q1到Q3)以正中间那一半人的身高差距(IQR)为基准,将其扩大1.5,容纳极大值和极小值身高,如(2020)中国男性平均身高为169cm,姚明身高为226cm。超出极大值和极小值的数据,均被认为是异常数据。数据转换数据替换:map()和replace(),注意两者对不属于替换数据的处理差异。离散化:cut(),按照预定义的区间将连续数据转换为离散数据重取样:resample()对时间数据按频率进行重取样通常进行下取样,即减少采样频率,如1分钟10分钟,1天1个月下取样会对属于同一个取样区间的数据进行聚合计算,如将采样频率由1天变为一个月,则将一个月内每天的数据进行聚合计算(如mean、max、min等)从而获取当月的数据。数据可视化数据可视化数据可视化画布,用来进行绘画画布中的画图区域一个fig可以有多个axes数据多维化主要内容数据拆分轴向介绍拆分数据数据拼接数据拼接数据联结数据透视表透视表介绍透视表创建轴向介绍DataFrame是一个二维结构,因此,具有两个操作维度DataFrame中的维度定义如下图所示轴向介绍如何理解“沿着轴向进行处理”?(如test.data.mean(axis=0))主要过程:沿指定轴向分解

数据处理核心思想:设想用一把斧头,沿着轴向对数据集进行切割axis=0axis=1轴向介绍如何理解:test_data.drop('B',axis=1)#正确代码test_data.drop('B',axis=0)#错误代码Axis=1:将数据集按1轴拆分为行重点:drop(‘B’,axis=1)删除每行中的‘B’列数据将处理后的行数据再拼接为数据集拆分数据np.split():按轴向对数据集进行拆分Axis=1:按列对数据集进行拆分Axis=0:按行对数据集进行拆分思考上述按轴向进行拆分的工作原理(参考前一页PPT)其他数据集拆分方法:依据问题需求选择利用查询对数据集进行拆分利用分组方法对数据集进行拆分利用内置方法或自定义方法进行拆分等等拼接数据将数据按照特定规则进行拼接方法名默认连接方向默认连接方式默认对齐方式concat按行外连接(outerjoin)列标签或索引merge按列内链接(innterjoin)行索引join按列左连接(leftjoin)行索引concat()默认按行进行拼接默认对齐方式--列标签,即对齐列标签相同的数据merge()默认按列进行拼接默认对齐方式—行索引,即对齐行索引相同的数据联接类型内联结:双方共有的数据外联结:左外联接:左表所有数据+右表对应数据右外联接:右表所有数据+左表对应数据全外联接:左表所有数据+右表所有数据数据透视表数据透视表(PivotTable):商业数据分析中常用的表格形式特点:隐匿数据细节,展示数据变动规律优势:创建容易易于理解方便展示数据透视表--pivot_table()pivot_table()为Pandas提供的数据透视表工具,其主要的参数如下:data:进行数据透视的DataFrame。index:指定对数据进行分组的列(0轴)。columns:指定对数据进行分组的列(1轴)。values:指定进行统计计算的列。aggfunc:指定统计计算的类型。index和columns参数对比:两者均指定对数据进行分组的列index参数的分组结果体现于0轴columns参数的结果体现在1轴。数据透视表--cross_table()用来快速统计数据的出现频率pivot_table()和cross_table()对比crosstab()可用于DataFrame,也可用于np.ndarray数据。pivot_table()只能用于DataFrame。crosstab()支持normalize参数,便于计算百分比,pivot_table()没有实现类似的功能。crosstab()默认计算频率,pivot_table()默认计算平均值。crosstab()一次只能进行一种统计计算,pivot_table()支持同时进行多个统计计算。一般来说,如果生成同样的数据透视表,crosstab()运行速度较pivot_table()为快。数据分析主要内容行列处理索引处理统计分析行列处理行、列数据重要性的区别(针对机器学习)行:一个样本数据列:所有样本的一个特征数据删除行数据:不影响其他样本删除列数据:影响所有样本列数据重要度远远大于行数据重要度大部分处理操作集中于列数据处理列处理重命名列标签(或列索引)rename():重命名一个或者多个列标签columns:同时重命名所有列标签删除列drop():删除一个或多个列,注意其的inplace参数的用法新建列data[‘新列标签’]=xxx:Pandas会自动判断是否需要创建一个新列日期数据处理datetime64:日期时间数据类型,提供了了丰富的针对日期时间的操作。原始数据DateTime:pd.to_datetime()常用日期时间处理获取相关信息:.dt.day,.dt.year,.dt.dayofweek等(参考datetime64.dt)加减操作:获取5天之前的日期,获取13:00之后15分钟的时间排序操作:支持按大小排序索引注意区分索引与下标打印DataFrame数据的时候,不会显示下标。索引的作用提供快速访问行列数据的机制提升数据查询、操作的性能支持数据自动对齐功能支持数据联接等复杂数据操纵功能索引常见类型数据均可以被设为索引,如数值类型、字符串类型、日期时间类型等。设置索引:set_index()单级索引、多级索引基于索引的查询单级索引查询列数据:data[‘A’]行数据:data.loc[0]或data.loc[‘0’]多级索引查询查询代码:多级索引查询示例建议严格按照以下代码格式编写多级索引查询代码index1='Guangzhou'index2='2013/7/1'data.loc[(index1,index2),] #注意使用元组表示多级索引:('Guangzhou','2013/7/1’)。如果涉及切片:idx=pd.IndexSliceindex1='Guangzhou'index2=slice('2013/7/1','2013/7/10')index=idx[index1,index2]data.loc[index,]idx=pd.IndexSliceindex1=['Guangzhou','Shanghai']index2=slice(None)index=idx[index1,index2]data.loc[index,]统计分析统计分析的重要性:隐藏过多的数据细节,发现隐含的规律如何比较A和B在同一门课的学习效果?如何比较班级A与班级B在同一门课的学习效果?常见的统计分析查询一年中最热的月份2000-2020年年均气温数据最低气温与最高气温按气温高低排序数据排序默认情况下,Pandas不对行、列数据进行排序排序数据:pd.sort_values()排序索引:pd.sort_index()如果设置了多级索引,则必须先排序索引,才能按索引查询数据统计查询简单统计查询:不分组,直接统计计算所有数据data['日内平均气温'].max()data['日内平均气温'].mean()分组统计查询:先分组,再按组分别统计计算data.groupby('区域').mean()data.groupby('区域').agg({'日内平均气温':'mean'})统计查询—filter()分组后,删除不符合条件的整个分组统计查询-apply()分组后,删除不符合条件的单个记录数据分析介绍

运行环境配置主要内容数据分析的目的数据分析的主要过程数据分析环境的搭建JupyterNotebook的使用数据分析介绍处理对象:海量数据处理平台:各种计算机数据处理平台处理工具:Python、R语言等目的:针对海量、结构各异、不规则的数据进行高效处理,发现和提取对人类社会经济活动具有指导意义的规律数据分析的作用获取、处理、统计、整理数据发现、处理、清洗各类异常数据用图表等可视化技巧展示数据特征为人工智能模型提供高质量的输入数据数据分析平台介绍Python语言:简洁、通用、强大、生态完善的新一代编程语言Virtualenv:支持相互隔离的Python环境(Python环境=Python+对应的第三方库)NumPy:支持强大、高效的基础数据存储和访问Pandas:支持丰富、全面、高效的复杂数据处理Matplotlib:支持多层次、可定制、丰富的图表可视化展现数据分析平台搭建安装Python配置Virtualenv安装第三方包第三方包安装Notebook的使用技巧-启动启动(使用当前目录作为主目录)

在命令行窗口里面执行“jupyternotebook”启动(任意指定主目录,例如“d:\test”)

执行“jupyternotebookd:\test”主目录的作用:保存所编写代码的位置Notebook的使用技巧-新建notebookNotebook的使用技巧-另存notebookNotebook的使用技巧-常用命令快捷键功能快捷键功能Tab代码补全或者缩进Shift+Tab代码提示Shift+Enter运行本单元,选中下一单元Ctrl+Enter运行本单元Alt+Enter运行本单元,在下面插入一单元↑光标上移,或者选中上一单元↓光标下移,或者选中下一单元ESC进入命令模式数据加载和检查本章主要内容数据获取

数据加载

属性检查内容查看数据获取数据产生主体:如各类管理机构、公司、研究所等。数据中心社区:如Kaggle、和鲸社区、CSDN等个人收集:如私人博客、私人网站、私人收藏等无论哪一种方式,都需要注意合法合规以及数据隐私问题教学数据集介绍记录了1995-2020年世界上主要城市的日均气温读数。数据包括8列:Region、Country、State、City、Month、Day、Year、AvgTemperature记录条数:2906327数据加载常见的数据集格式:文本文件、Excel文件、CSV文件CSV文件通常采取分号(;)作为字段分隔符,简单易用有些CSV文件会采用其他分隔符,如空格、逗号、制表符等Pandas提供read_csv()方法加载CSV文件数据加载read_csv()在加载数据集时,可能会报错或者给出警告信息下面代码的警告信息是因为第4列(State)数据包括空值解决方法:data=pd.read_csv('d:/dataset/city_temperature.csv',dtype={'State':object})数据加载常见加载异常及解决方法异常解决方法(修改对应的read_csv()参数)分隔符非默认的分号通过sep或delimiter参数指定分隔符,如sep=';’读入内容显示乱码通过encoding参数指定文件编码,中文常用编码包括utf-8、gbk(Windows系统常见)、gb2312等无标题行设定参数header=None数据解析出错设定参数engine='Python'属性检查查看数据集大小:data.shape查看列名:data.columns查看索引:data.index查看各列数据类型:data.dtypes查看头(尾)数据内容:data.head()、data.tail()Panda

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论