DataFrame 和 Series 简介
pandas是用于数据分析的开源Python库,可以实现数据加载、清洗、转换、统计处理、可视化等功能。
pandas最基本的两种数据结构:
1、DataFrame
可以用来处理结构化数据(SQL数据表、Excel表格)可以简单理解为一张数据表(带有行标签和列标签)
2、Series
用来处理单列数据,也可以把DataFrame看作由Series对象组成的字典或集合可以简单理解为数据表的一行或者一列
wps office 官方的下载网站是什么(wps官网最新怎么下载加载项)
数据集(csv和tsv)
csv和tsv文件格式介绍
csv和tsv文件都是存储一个二维表数据的文件类型。
注意:其中csv文件每一列的列元素之间以逗号进行分割,tsv文件每一行的列元素之间以 进行分割。
加载数据集(csv和tsv)
DataFrame 的行列标签和行列位置编号
获取DataFrame的行标签
获取DataFrame的列标签
可以单独设置某一列为行标签
注意:单独设置行标签不会改变原来的DataFramewps的官网最新下载的地址是什么(wps下载电脑版网址是多少)。
行位置编号:从上到下,从0开始到n-1
列位置编号:从左到右,从0开始到n-1
DataFrame 获取指定行列的数据
loc方法
iloc方法
根据位置编号
[ ]方法
loc和iloc的切片操作
注意:需要确保行索引是的,否则 Pandas 无法正确处理切片操作。
可以下列语句查询索引是否唯一:
如果返回 False,说明索引中有重复值。
下面有两种方法可以解决:
重置索引。
然后可以进行条件过滤
去重处理
keep=‘first’:保留第一个重复值,丢弃后续的。keep=‘last’:保留最后一个重复值,丢弃前面的。
改用条件过滤
series是pandas中用来存储一堆数据的容器。
创建Series
创建series最简单的方式是传入一个python列表
如果传入的数据是一个统一的数字,那么最终的类型是int64如果传入的数据是统一的字符串,那么最终的类型是object如果传入的数据是混合类型,那么最终的类型是object
创建series时,也可以通过index参数来指定行标签
Series常用属性操作
Series常用统计方法
Series 的bool索引
series支持bool索引,可以从series获取bool索引为True的位置的对应数据。
Series 运算
创建DataFrame
可以用字典创建DataFrame
创建DataFrame时可以用colums参数指定列的顺序,也可以使用index参数来指定行标签
也可以使用嵌套列表创建DataFrame,并使用columns参数指定列标签,使用index参数来指定行标签
DataFrame常用属性操作
DataFrame常用统计方法
DataFrame的bool索引
series支持bool索引,可以从series获取bool索引为True的位置的对应的行数据。
结果:
DataFrame的运算
DataFrame行标签和列标签的操作
重新指定行标签
加载数据文件时,如果不指定行标签,pandas会自动加上从0开始的行标签。
可以通过df.set_index(‘列名’)的方法重新将指定的列数据设置为行标签;也可以通过df.reset_index()来重置行标签。
加载数据时,直接指定行标签
加载数据后,修改行列标签
注意:直接修改的话行列标签的数量必须和原来的时一致的。
行操作
添加行
添加行时,会返回新的DataFrame
修改行
删除行时是直接对原来的DataFrame进行修改
删除行
删除行时,会返回新的DataFrame
列操作
新增列/修改列
删除列
删除列时,会返回新的DataFrame
Pickle文件
CSV文件
Excel文件
其它
feather文件
条件查询
分组聚合
排序
补充:Series也可以排序,但是Series的sort_values方法没有by参数。
nlargest 和 nsmallest 函数
基本绘图
在动手进行数据分析工作之前,需要进行数据清理工作,数据清理的主要目标是:
每个观测值成一行每个变量成一列每种观测单元构成一张表格
数据整理好之后,可能需要多张表格组合到一起才能进行某些问题的分析。
行拼接:按照列标签索引对齐
注意:行拼接时,无法对齐的列,默认值设为NaN
Dadaframe 与 Dadaframe 行拼接
Dadaframe 与 Series 行拼接
列拼接:按照列行签索引对齐
注意:列拼接时,无法对齐的行,默认值设为NaN
Dadaframe 与 Dadaframe 列拼接
Dadaframe 与 Series 列拼接
concat 方法的join函数
concat方法的join函数:
默认为outer:无法对齐的行列,默认填充值为NaN。设置为inner:只有能够对齐的行业,才会出现在拼接的结果中。
基本格式
merge方法类似sql中的join语句,用于两个数据集之间按照行列标签索引连接,默认时inner,可以设置为:left、right、outer。
merge 示例
从sqlite数据库中加载table数据
基本格式
join方法类是merge方法的一个特殊情况,被调用的数据集按照行列标签索引和另一个数据集的行标签索引关联,默认是left,可以设置为:right、inner、outer。
wps官网最新的下载的网址怎么找 wps官网最新下载的地方是什么
join 示例
一般情况下优先使用merge方法。
缺失值NaN
注意:缺失值和其它类型的数据不同,它毫无意义,NaN不等于0,也不等于空字符串,两个NaN也不相等。
加载缺失值
缺失值查看
使用Missingno库对缺失值的情况进行可视化探查
安装Missingno
删除缺失值WPS office的官网最新下载的入口的方法
注意:删除缺失值会损失信息,并不推荐删除,当缺失值占比较高的时候,可以尝试使用删除缺失值。
按行删除缺失值
按列删除缺失值
填充缺失值(非时间序列)
使用常量进行填充
使用统计量进行填充
填充缺失值(时间序列)
时间序列在某一列值的变化往往有一定线性规律,绝大多数的时序数据,具体的列值随着时间的变化而变化,所以对于有时序的行数据缺失值处理有三种方式:
前项填充:用时间序列中空值的上一个非空值填充后项填充:用时间序列中空值的下一个非空值填充线性填充:线性插值方法
前项填充
后项填充
线性填充
wide_to_long 整理数据
wide_to_long函数的作用是将列名起始部分相同的列进行拆解,使宽数据变换为长数据(变成多行)。
melt 整理数据
宽数据集变成长数据集
stack 整理数据
stack 和 unstack 简介
pandas进行数据重排时,经常用到stack 和 unstack两个函数。stack的意思是堆叠,unstack的意思是不要堆叠。
stack函数会将数据从表格结构变成花括号结构(返回的是series类型),即将其列索引变成行索引;反之,unstack函数将数据从花括号结构变成表格结构,即将其中一层的行索引变成列索引。
stack 功能演示
Numpy介绍
Numpy是一个开源的Python科学计算库,用于快速处理任意维度的数组。
ndarry比Python原生list的运算效率更高。
Numpy的ndarray
ndarray 的 属性
ndarray 的类型
创建ndarry的时候指定类型:
pandas 的数据类型
pandas是基于Numpy的,很多功能都依赖于Numpy的ndarray实现的,pandas的数据类型很多与Numpy类型,属性也有很多类似。
类型转换
astype函数
astype方法是通过函数,把DataFrame中的任何列转换为其它dtype,可以向astype方法提供任何内置类型或numpy类型来转换列的数据类型。
astype转换为字符串对象
结果:出现了新的一列sex_str
to_numeric函数
分类数据类型 category
category的创建
category类型数据是由固定的且有限数量的变量组成的,比如:性别。
category的排序
我们也可以自定义数据的大小关系
我们也可以重新修改排序规则
apply函数简介
pandas的apply()函数可以作用于Series或者整个DataFrame,功能也是自动遍历整个Series或者DataFrame,对每一个元素运行指定的函数。
pandas提供了很多数据处理的API,但当提供的API不能满足需求的时候,需要自己编写数据处理函数,这个时候可以使用apply函数。apply函数可以接受一个自定义函数,可以将DataFrame的行或者列数据传递给自定义函数处理apply函数类似于编写一个for循环,遍历行列的每一个元素,但比使用for循环高效很多。
Series的apply方法
Series有一个apply方法,该方法有一个func参数,当传入一个函数后,apply方法就会把传入的函数应用于每个元素。
apply也可以接受多参数
DataFrame的apply方法
DataFrame的applymap方法
DataFrame还有一个applymap函数,applymap也有一个func参数接受一个函数,针对DataFrame每个值应用func指定的函数进行操作,分别返回的结果构成新的DataFrame对象
注意:applymap是DataFrame,Series没有。
apply函数的使用案例
函数向量化
@np.vectorize # 函数向量化
lambda函数
使用apply或者applymap对数据进行处理时,当条件比较简单时,没有必要创建一个函数,可以使用lambda表达式创建匿名函数。
分组聚合简介
在SQL中我们经常使用group by 将某个字段按照不同的取值进行分组,在pandas中也有group by 函数;分组之后,每组都会有至少1一条数据,将这些数据进一步处理返回单个值的过程就是聚合。
比如:分组之后计算算术平均数或者分组之后计算频数,都属于聚合。
注意:方式1 只能使用pandas的内置的聚合方式,并且只能进行一种聚合;方式2和3除了能够使用pandas内置的聚合,还可以使用其它聚合方法,并且可以进行多种聚合。
pandas内置的聚合方法
分组聚合示例
分组transform 转换
transform转换需要把DateFrame中的值传递给一个函数,然后由该函数“转换”数据;
aggregate(聚合)返回单个聚合值,但transform不会减少数据量。
分组transform 操作
分组transform 填充缺失值
分组transform练习:减肥比赛
分组过滤
使用groupby方法还可以过滤数据,调用filter方法,传入一个返回布尔值的函数,返回False的数据会被过滤掉。
分组对象
分组对象的基本操作
注意:sex_group 是一个DataFrameGroupBy对象,如果想查看计算过的分组,可以借助groups属性实现。
可以取出一组的全部数据
分组对象的遍历
通过DataFrameGroupBy对象,可以遍历所有分组,相比于groupby之后使用aggregate、transform和filter,有时候使用for循环解决问题跟简单。
注意:DataFrameGroupBy对象下标索引
分组对象的多个分组
数据透视表
数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关。
数据透视表的本质其实就是分组聚合。
下面我们用数据透视表来完成这个:
与分组聚合得出的结果是一致的
Python 中的datetime 对象
Python内置了datetime对象
Pandas 中的datetime 对象
pandas可以使用to_datetime 函数把数据转换成datetime类型。
注意:date是日期对象,但显示的是object类型
我们也可以在加载数据时直接转化
提取datetime的各个部分
日期运算和Timedelta
Ebola数据集中的Day列表示一个国家爆发Ebola疫情的天数。这一列数据可以通过日期运算重建该列。
TimedeltaIndex 对象
Date range 方法
可以看到原始的Date不是连续排列的。
使用date range 方法就可以连续,缺失的数据由NaT,NaN表示。
注意: 使用date_range函数创建日期序列时,可以传入一个参数freq,默认为D,表示日期范围内的值是逐日递增的。
案例:银行数据分析
案例:tesla股票数据分析
案例:丹佛报警记录数据分析
注意:排序后再索引效率会变高,这串代码很重要
resample要求行索引必须是日期类型
所有日期都是该季度的最后一天,也可以用QS改为该季度的第一天
每次读取文件都需要很长时间,调用os包保存为pkl文件,提升读取速度。
注意:KPL是Excel的一次映射 映射完之后是独立的 修改KPL只会影响KPL 等你做完操作之后需要修改后的excel 重新导出。
第一部分:会员存量、增量分析
第二部分:会员增量等级分布分析
wps的官网最新下载的方法
结果同上
第三部分:会员整体等级分布分析
结果同上
第四部分:线上线下增量分析
结果同上
第五部分:地区店均会员分析
第六部分:各地区会销比
第七部分:各地区会员连带率分析
第八部分:各地区会员复购率分析
数据可视化常用库:
Matplotlib(功能强大,代码相对复杂)
Matplotlib是Python编程语言的开源绘图库。它是Python可视化软件包中最突出的,使用最广泛的绘图工具。Matplotlib在执行各种任务方面非常高效。可以将可视化文件导出为所有常见格式(PDF,SVG,JPG,PNG,BMP和GIF)。Matplotlib可以创建流行的可视化类型-折线图,散点图,直方图,条形图,误差图,饼图,箱形图以及更多其他类型的图,还支持3D绘图。许多Python库都是基于Matplotlib构建的,Pandas和Seaborn是在Matplotlib上构建的Matplotlib项目由John Hunter于2002年启动。Matplotlib最初是在神经生物学的博士后研究期间开始可视化癫痫患者的脑电图(ECoG)数据。 Pandas (使用简单,功能稍弱)
Pandas的绘图功能基于Matplotlib,是对Matplotlib的二次封装Matplotlib绘图时,代码相对复杂,使用Pandas绘制基本图表相对比较简单,更加方便Pandas中常用的数据结构 series 和 dataframe 都有plot()方法,用于绘图 Seaborn (推荐使用)
Seaborn是基于Matplotlib的图形可视化python开源库Seaborn是在Matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易Seaborn的API设计偏向探索和理解数据 echarts 和 pyecharts (追求可视化效果,推荐使用)
ECharts,是百度开源,使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表pyecharts 是一个用Python生成 Echarts 图表的类库。
Matplotlib绘图入门
使用 Matplotlib 绘图,首先需要导入 pyplot 模块,该模块包含一系列绘图函数的相关函数
Matplotlib提供了两种方法来作图:状态接口和面向对象:
状态接口
2) 状态接口
matplotlib 数据可视化案例
wps官网下载的地址在哪里
本案例通过 seaborn 模块中的 Anscombe 数据集说明数据可视化的重要性
Anscombe 数据集由英国统计学家Frank Anscombe创建,数据集包含4组数据,每组数据包含两个连续变量每组数据的平均值、方差、相关性都相同,但是当它们可视化后,就会发现每组数据的模式明显不同
从数据的统计量看,变量X,Y,4个子数据集的平均值和标准差基本相同,但是平均值和标准差相同,几个数据集就完全相同么?下面绘制图形来查看一下这 4 个子数据集。
使用 Matplotlib 绘制统计图
单变量绘图(直方图)
在统计学属于中,单变量(univariate)指单个变量。
直方图是观察单个变量最常用的方法。这些值是经过"装箱"(bin)处理的直方图会将数据分组后绘制成图来显示变量的分布状况
双变量绘图(散点图)
双变量(bivariate)指两个变量
散点图用于表示一个连续变量随另一个连续变量的变化所呈现的大致趋势
多变量绘图(二维平面)
二维平面可以用来展示两个变量的数据,如果是多变量,比如添加一个性别变量,可以通过不同的颜色来表示还可以通过圆点的大小来区分变量的不同,但如果变量的大小区别不大,可能通过圆点大小来区分效果不是很好
pandas绘图
pandas 数据可视化简介
pandas库是Python数据分析的核心库:
它不仅可以加载和转换数据,还可以做更多的事情:它还可以可视化pandas 绘图 API 简单易用,是 pandas 流行的重要原因之一
pandas 单变量可视化
单变量可视化: 包括条形图、折线图、直方图、饼图等。
柱状图和分类数据
柱状图是最简单最常用的可视化图表
条形图(柱状图)非常灵活:
高度可以代表任何东西,只要它是数字即可每个条形可以代表任何东西,只要它是一个类别即可。