python 数据分析 实际案例_【Python】数据分析基本过程及案例

v2-9bc0a834128ae0755e09d1f10b97146f_1440w.jpg?source=172ae18b

本文目录

  • 一维数组
  • 二维数组
  • 数据分析基本过程
  • 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方法

代码如下

先导入需要的包

v2-c1eb4468b412d1714238c2b64b3c50bb_b.jpg

v2-e6bd2f3b3ceb48a54487868dfc9dfe66_b.jpg

(5)Numpy一维数组和列表的区别

  • Numpy一维数组有统计功能:计算平均值mean(),标准差std()
  • Numpy一维数组可以进行向量化计算:向量相加和向量乘以标量
  • Numpy一维数组中,每个元素必须是同一种数据类型

2.Pandas一维数组

(1)定义一维数组

(2)describe:获取描述统计信息:平均值、标准差、最大最小值等

代码如下

v2-dc89dd50e911c8b52af6eaa21e41d0d0_b.jpg

(3)查询

  • iloc:根据元素位置获取值
  • loc:根据index(索引)获取值

v2-a1edd3b5cf48e42443bcf0dae69b0b01_b.jpg

(4)向量相加

v2-f28821f77066ac3f4128cc30a7b68888_b.jpg

缺失值处理:

  • dropna:删除缺失值
  • 将缺失值进行填充

v2-625d0c8c7315b3890324e89d447656b0_b.jpg

二、二维数组

1.Numpy二维数组

(1)定义二维数组:通过Array创建二维数组

(2)查询某个元素:a[1,1]

(3)切片访问:a[1:3](查询二维数组中,第一行和第二行所有元素)

(4)查询某行所有元素:a[0,:]

(5)查询某列所有元素:a[:,0]

v2-441d74c0d5f3498d4d191860ffdb24e7_b.jpg

(6)Numpy数轴参数:可以使数组按照行或列进行计算

  • 求平均值:mean
  • 分别求每行的平均值:axis=1
  • 分别求每列的平均值:axis=0

v2-c4431fe030e0e28b48a137efbc2348c8_b.jpg

(7)Numpy二维数组中,每个元素必须是同一种数据类型

2.Pandas二维数组

(1)每一列可以是不同数据类型

(2)有类似Pandas一维数组的索引功能

(3)定义二维数组:通过DataFrame创建二维数组

v2-dabea0c85c0a9ebcd874ddd4e5444b85_b.jpg

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

v2-f7a77d386c32fe986969fc5d3b6e8686_b.jpg

(5)计算平均值:mean,计算每一列的平均值

(6)查询

  • iloc:根据元素位置获取值

1)查询某个元素:Dataframe.iloc[0,0]

2)查询第一行所有元素:Dataframe.iloc[0,:]

3)查询第一列所有元素:Dataframe.iloc[:,0]

v2-6d8624abe068d4a93642e5386316300b_b.jpg
  • loc:根据index(索引)获取值,Dataframe.loc[行名称,列名称]

1)查询某个元素:Dataframe.loc[0,'购药时间'],这里的0指的是行名称,而不是下标

2)查询第一行所有元素:Dataframe.loc[0,:]

3)查询第一列所有元素:Dataframe.loc[:,'购药时间']

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

如:Dataframe.loc[0:1,:],Dataframe.loc[:,'商品名称':'应收金额']

v2-9a21c9bf1e86df416625d074ece4dc70_b.jpg

(7)条件判断筛选

  • 构建查询条件
  • 应用查询条件

v2-c27e6fe34ad3747d2133a52408d880ad_b.jpg

(8)查看数据集的描述统计信息

1)读取Excel数据

v2-92816016a9fb9fa784b2c80eee384b8a_b.jpg

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

v2-2ab2a79d79178729530e8154dade44ae_b.jpg

3)查看某列的数据类型:dtype方法

4)查看数据有多少行,多少列:shape方法

v2-25166ac78a0dec83378255fde0f8dce6_b.jpg

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

v2-2d0d520a058a2d25b14c23fb1fd8d143_b.jpg

其中,count:数据总数;25%:下四分位数;50%:中位数;75%:上四分位数

三、数据分析基本过程

  • 提出问题
  • 理解数据
  • 数据清洗:(1)选择子集;(2)列名重命名;(3)缺失数据处理;(4)数据类型转换;(5)数据排序;(6)异常值处理
  • 构建模型:对清洗后的数据进行分析
  • 数据可视化

四、Python数据分析案例

针对某销售数据,分析如下内容

1.提出问题

针对给出的数据表格,我们需要解决以下问题:

求(1)月均消费次数;(2)月均消费金额;(3)客单价;(4)销售趋势

2.理解数据

以下为Excel源文件部分数据展示:

v2-06288f79e446793d5c77f439d5c0acd4_b.png

用Python读取数据,步骤如下:

(1)读取Excel数据

用dtype方法读取excel文件中的数据,统一按照字符串读入,确保数据正确读取。

v2-250809c1be420a22ccab3e57583d89f8_b.jpg

(2)打印前几行,查看Excel中的数据是些什么字段,方便理解数据

可以到字段名为:购药时间,社保卡号,商品编码,商品名称,销售数量,应收金额,实收金额。这些字段都不难理解。

v2-e92e6c9b621e2829fc4686bc93bd2fa5_b.jpg

(3)查看列的数据类型

(4)查看数据有多少行,多少列

v2-64822899197f4bde50ba3f25f93d101e_b.jpg

3.数据清洗

数据清洗步骤

  • 选择子集:选择所需要的列来进行数据分析
  • 列名重命名:若列名需要更改,则可进行重命名
  • 缺失数据处理:空值处理
  • 数据类型转换:比如将字符串数据类型转换为数值类型
  • 数据排序
  • 异常值处理

(1)选择子集

我们要分析的这个案例不需要删除某些列,因此举例如下:

v2-a49b33e7af48d616ada3f8d46fbed72c_b.jpg

(2)列名重命名:DataFrame的rename方法

将列名"购药时间"重命名为"销售时间"

v2-5172827895479a8c23b10a6e29e4e65c_b.jpg
  • inplace=False,表示数据框本身不会变,而会创建一个改动后新的数据框,原始数据框不会受影响,默认的inplace是False;inplace=True,原始数据框会改动。

(3)缺失数据处理

  • 直接删除数据
  • 建立模型来差值补充数据

删除缺失数据:dropna方法

v2-80b12170f8081833ae75c0ced8d82a8d_b.jpg

可以看到,删除缺失值后,数据还剩下6575行内容,列数不变。

(4)数据类型转换

  • 从上面第一步导入数据可知,我们的数据框里的数据都是字符串类型的,而"销售数量","应收金额","实收金额"这几列明显为数字类型。因此需要将这几列转换为数字类型的数据。用astype方法即可。

v2-9b0bde78631a9588ba62619a37fe6376_b.jpg
  • "销售时间"中的星期几需要去掉,只需要“2018-01-01”部分,并转换成日期格式。

单个字符串分割举例如下:用split方法,传入分割符,这里是空格号,字符串中遇到空格号就会被拆分掉。

v2-166bbe574ec57837c10b0a2560c6f0f3_b.jpg

下面对数据框中“销售时间”全部分割:

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

v2-5a4fc14748df9ff40bedd7238c26f752_b.jpg

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

v2-092402d30f54788c6f580a2e15ecef37_b.png

v2-1e8334d156d7e345e16b7f76a9e7753c_b.jpg

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

v2-60e9e49ba9bf948ea55d543a9045e5b5_b.jpg

5)将销售日期列“2018-01-01”等字符串转换为日期格式

errors='coerce'如果原始数据不符合日期的格式,转换后的值为NaT;format:原始数据中日期的格式

v2-e5125ff768418eba8d346b99f6572e49_b.jpg

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

v2-f6aa3f1d49d04e70e28863b51003998d_b.jpg

(5)数据排序

  • by:按哪几列排序
  • ascending=True降序排列
  • ascending=False升序排列

以“销售日期”为标准,对数据排序

v2-2d3d44ae66baa56df9b3d2fc92160298_b.jpg

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

v2-e53fd2d7a5082c9142d94c5763559582_b.jpg

(6)异常值处理

获取描述统计信息:

v2-225d7390372580f5b792ec42d845aef0_b.jpg

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

v2-4040df156d208310cb09d3d967f8e2b2_b.jpg

以上,数据清理步骤的六步已经完成。

4.构建模型

下面我们来回顾一下我们需要解决的问题:

求(1)月均消费次数;(2)月均消费金额;(3)客单价;(4)消费趋势

(1)月均消费次数:总消费次数/月份数(其中同一天内且同一个人所发生的消费算作一次消费)

v2-943fa90ed02d4a918e5ae071cbc9cb6b_b.jpg

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

v2-5df2be68e7e09d501db44fda0944d9c9_b.jpg

求出总消费次数:

v2-f6c61f753707e44fb066ff3f230d0517_b.jpg

求月份数:

v2-9000f15bd33b14475ce9d57bffe43fcb_b.jpg

求得结果如上。

(2)月均消费金额

v2-38c3c4d28bf98545fb2b89cbe0fe86b3_b.jpg

(3)客单价

v2-a6c71a53fa88fd41a68dc6e03f15ebcd_b.jpg

(4)销售趋势:将在后续章节详细分析。

5.数据可视化:将在后续章节详细分析。

五、总结

v2-4cd43844b0782ec9535ca107b1a7857e_b.jpg

v2-5573fe29da87bd753cb62beecd2ca62d_b.jpg

v2-39284c2fb16aa28c3095493a3891e95e_b.jpg