
本文目录
- 一维数组
- 二维数组
- 数据分析基本过程
- Python数据分析案例
- 总结
一、一维数组
Numpy和Pandas包的一维数组
Numpy(Numerical Python)中的一维数组称为Array;Pandas中的一维数组称为Series。
1.Numpy一维数组
(1)查询元素:用下标索引来查询,如a[0]
(2)切片访问:a[1:3](查询一维数组中,下标索引为1~2的值)
(3)循环访问:for i in a:
(4)查看数据类型:用dtype方法
代码如下
先导入需要的包


(5)Numpy一维数组和列表的区别
- Numpy一维数组有统计功能:计算平均值mean(),标准差std()
- Numpy一维数组可以进行向量化计算:向量相加和向量乘以标量
- Numpy一维数组中,每个元素必须是同一种数据类型
2.Pandas一维数组
(1)定义一维数组
(2)describe:获取描述统计信息:平均值、标准差、最大最小值等
代码如下

(3)查询
- iloc:根据元素位置获取值
- loc:根据index(索引)获取值

(4)向量相加

缺失值处理:
- dropna:删除缺失值
- 将缺失值进行填充

二、二维数组
1.Numpy二维数组
(1)定义二维数组:通过Array创建二维数组
(2)查询某个元素:a[1,1]
(3)切片访问:a[1:3](查询二维数组中,第一行和第二行所有元素)
(4)查询某行所有元素:a[0,:]
(5)查询某列所有元素:a[:,0]

(6)Numpy数轴参数:可以使数组按照行或列进行计算
- 求平均值:mean
- 分别求每行的平均值:axis=1
- 分别求每列的平均值:axis=0

(7)Numpy二维数组中,每个元素必须是同一种数据类型
2.Pandas二维数组
(1)每一列可以是不同数据类型
(2)有类似Pandas一维数组的索引功能
(3)定义二维数组:通过DataFrame创建二维数组

(4)从输出结果看,输出的表格列名和定义的字典相比是无序的,下面转换成有序的数据框。

(5)计算平均值:mean,计算每一列的平均值
(6)查询
- iloc:根据元素位置获取值
1)查询某个元素:Dataframe.iloc[0,0]
2)查询第一行所有元素:Dataframe.iloc[0,:]
3)查询第一列所有元素:Dataframe.iloc[:,0]

- loc:根据index(索引)获取值,Dataframe.loc[行名称,列名称]
1)查询某个元素:Dataframe.loc[0,'购药时间'],这里的0指的是行名称,而不是下标
2)查询第一行所有元素:Dataframe.loc[0,:]
3)查询第一列所有元素:Dataframe.loc[:,'购药时间']

- 通过传入列表来查询某几列:Dataframe[['商品编码','商品名称','销售数量']]
- 切片功能来指定范围:Dataframe.loc[行名称1:行名称2,列名称]
如:Dataframe.loc[0:1,:],Dataframe.loc[:,'商品名称':'应收金额']

(7)条件判断筛选
- 构建查询条件
- 应用查询条件

(8)查看数据集的描述统计信息
1)读取Excel数据

2)打印前5或6行:head方法

3)查看某列的数据类型:dtype方法
4)查看数据有多少行,多少列:shape方法

5)查看每一列的描述统计信息:describe方法

其中,count:数据总数;25%:下四分位数;50%:中位数;75%:上四分位数
三、数据分析基本过程
- 提出问题
- 理解数据
- 数据清洗:(1)选择子集;(2)列名重命名;(3)缺失数据处理;(4)数据类型转换;(5)数据排序;(6)异常值处理
- 构建模型:对清洗后的数据进行分析
- 数据可视化
四、Python数据分析案例
针对某销售数据,分析如下内容
1.提出问题
针对给出的数据表格,我们需要解决以下问题:
求(1)月均消费次数;(2)月均消费金额;(3)客单价;(4)销售趋势
2.理解数据
以下为Excel源文件部分数据展示:

用Python读取数据,步骤如下:
(1)读取Excel数据
用dtype方法读取excel文件中的数据,统一按照字符串读入,确保数据正确读取。

(2)打印前几行,查看Excel中的数据是些什么字段,方便理解数据
可以到字段名为:购药时间,社保卡号,商品编码,商品名称,销售数量,应收金额,实收金额。这些字段都不难理解。

(3)查看列的数据类型
(4)查看数据有多少行,多少列

3.数据清洗
数据清洗步骤
- 选择子集:选择所需要的列来进行数据分析
- 列名重命名:若列名需要更改,则可进行重命名
- 缺失数据处理:空值处理
- 数据类型转换:比如将字符串数据类型转换为数值类型
- 数据排序
- 异常值处理
(1)选择子集
我们要分析的这个案例不需要删除某些列,因此举例如下:

(2)列名重命名:DataFrame的rename方法
将列名"购药时间"重命名为"销售时间"

- inplace=False,表示数据框本身不会变,而会创建一个改动后新的数据框,原始数据框不会受影响,默认的inplace是False;inplace=True,原始数据框会改动。
(3)缺失数据处理
- 直接删除数据
- 建立模型来差值补充数据
删除缺失数据:dropna方法

可以看到,删除缺失值后,数据还剩下6575行内容,列数不变。
(4)数据类型转换
- 从上面第一步导入数据可知,我们的数据框里的数据都是字符串类型的,而"销售数量","应收金额","实收金额"这几列明显为数字类型。因此需要将这几列转换为数字类型的数据。用astype方法即可。

- "销售时间"中的星期几需要去掉,只需要“2018-01-01”部分,并转换成日期格式。
单个字符串分割举例如下:用split方法,传入分割符,这里是空格号,字符串中遇到空格号就会被拆分掉。

下面对数据框中“销售时间”全部分割:
1)思路:需要定义一个可以把多个类似上面的字符串进行分割的函数,这里涉及到多个字符串需要怎么来分割呢?该函数首先需要将单个字符串分割组成一个列表,然后输出下标值为0的元素,最后进行循环即可。

2)给函数赋值,输出分割后的“销售时间”


3)修改原数据框的“销售时间”列的内容

5)将销售日期列“2018-01-01”等字符串转换为日期格式
errors='coerce'如果原始数据不符合日期的格式,转换后的值为NaT;format:原始数据中日期的格式

对于不符合日期格式的数据,转换为空值,并再次执行删除空值代码。可以看到,行数由原来的6575行变为6549行。

(5)数据排序
- by:按哪几列排序
- ascending=True降序排列
- ascending=False升序排列
以“销售日期”为标准,对数据排序

重命名行名(index),以方便后续再使用数据框。

(6)异常值处理
获取描述统计信息:

由描述统计信息可以知道,最小值为负数,因此数据中可能存在错误即异常值。下面删除掉异常值:

以上,数据清理步骤的六步已经完成。
4.构建模型
下面我们来回顾一下我们需要解决的问题:
求(1)月均消费次数;(2)月均消费金额;(3)客单价;(4)消费趋势
(1)月均消费次数:总消费次数/月份数(其中同一天内且同一个人所发生的消费算作一次消费)

删除重复值后,行数会减少,因此需要将日期列排序再重命名index。

求出总消费次数:

求月份数:

求得结果如上。
(2)月均消费金额

(3)客单价

(4)销售趋势:将在后续章节详细分析。
5.数据可视化:将在后续章节详细分析。
五、总结


