7b1a49993019a45be34cdbfdeff02411.png

一、数据分析的基本过程

ea8ad7184e44832dc350384ecb4a7aae.png

二、一维数据分析

1-1、NumPy一维数组

NumPy的N - 维数组对象表示为ndarray。ndarray是Python中一个快速、灵活的大型数据集容器。数组允许在整块数据上进行数学计算。

标准的NumPy导入方式为:

import 

83d26cbae6c79dc16a99f618d2f79444.png

生成数组可以使用array函数。

定义一个一维数组array

a = np.array([2, 3, 4, 5, 6])

数组中的元素与其位置的对应关系如下:

596b36783fa7d5860def1cfdbb59ea1c.png

(1)查询元素

0e5a25b0d387d0e35391cd53364e3999.png

(2)切片访问

87b2872884bace9f88a33b42d4832b34.png

切片访问所指定的区域 [1:3] ,表明查询的元素是从位置 ‘1’ 开始,显示 ‘3-1’ 即2个元素。

(3)循环访问

fb9c54f9ccfd64dd924aeee09903d331.png

(4)数据类型

如果没有进行显式指定,np.array会自动推断生成数组的数据类型。数据类型借呗存储在一个特殊的元数据dtype中。

查看数据类型

faac83231c7b65beb5ae704a9b1b25d2.png

2ba272a72bafd7d47bcd6f2ba54150ac.png

f2bac89b3f79e7b77b111a7e2850bca2.png

(5)查看数组是几维数组

使用ndim查看

ad12f5fdffb53379cf90b5302e3b2e7a.png

1-2、NumPy一维数组与列表的区别

(1)NumPy提供了很多统计功能

聚合函数(也叫缩减函数),比如平均值mean(),标准差std(),和sum()。

7c0df2ca6ae99c72fbdbe1a86deee59a.png

4ce1ce071f7f3e9901884ce38cb53f38.png

a0c10ab18de92a2092b6d469f55cdc5c.png

(2)NumPy数值可以进行向量化计算

定义两个NumPy一维数组

49f079a8009fd7cac184f35ddc8fa3e5.png

向量相加

1592fa949a3f82c0deb56adb815e9f42.png

1b4320786fc5be0b7242a76d8ca95f11.png

向量乘以标量

带有标量计算的算术操作,会将计算参数传递给数组的每一个元素

7c16880fdd6552f7dacdf678e04b44f1.png

b0fab126d844e0ccd466ca4768be3e85.png

同尺寸数组之间的比较,会产生一个布尔值数组:

46fab3f1eb3c400059d75c6415003637.png

(3)NumPy数组内元素必须是同一数据类型,列表可以是不同数据类型。

2-1、Pandas一维数组

Series是一种一维的数组对象,包含了一个值序列和数据标签(索引index)。

标准的Pandas导入方式为:

import pandas as pd

(1)最简单的序列可以有一个数组形成:

obj = pd.Series([4, 7, -5, 3])

9a134614771734946fd8e05a076f0951.png

通过打印该数组发现,索引在左边,值在右边,数值类型在最下边。由于我们没有为数据指定索引,默认生成的索引是从0到N-1(N是数据的长度)。

(2)可以通过values属性和index属性分别获取Series对象的值和索引。

09bcbf55adb97588a4bf874d972a29e1.png

(3)创建一个指定索引的数组

d7bbfb6a2397eb1722e25927c1ccc717.png

331d5fc4d1f4cb90758e4f285766c031.png

获取索引

8fd14f5d054278f9afe302c7310db7a7.png

(4)通过索引访问元素

21e63b7661707d63f92166ed07b15a86.png

(5)可以使用NumPy的函数或NumPy风格的操作,比如使用布尔值数组进行过滤,与标量进行计算,或是应用数学函数。

83bbe5194ca3bbc2c53a0bc82535c5fb.png

cdcf6ff20cbd5bdf7fc7424fefbd3584.png

(6)

iloc属性用于根据位置获取值

8370af7cc255d1011dc373b395f6e489.png

loc属性用于根据索引获取值

e57cce9a5ef5b5fd9ea816cdaa502f8f.png

(7)向量化运算

89903090973337ce550d1207835dc465.png

e50bda8464ed36bf77b69c1ff26b0aff.png

由结果可知,上述相加是根据匹配索引值进行的,只有相同的索引所对应的值才能相加。

可以使用isnull和notnull函数检查缺失数据。

(8)对于上述情况中出现的空值,我们有两种方法进行处理。

方法1:使用dropna()方法直接将空值删除

6d434496bd96b16f770945f03a0d1eb9.png

方法2:使用add()方法将缺失值进行填充

9439589d795a8720ebab17240cbfad4a.png

用‘0’来填充彼此不匹配的索引下的数值。

(9)Series对象自身和其索引都有name属性

65fcc3d1e457510607c093e5157b73b7.png

f8a97012b5aad37cc0deed1c5d247e60.png

c668fbc6454a48efb7b1771cfd325adf.png

(10)进行描述统计分析

71ea838735c6ad987adb85ae88472344.png

三、二维数据分析

1.NumPy二维数组

NumPy的N - 维数组对象表示为ndarray。

83d26cbae6c79dc16a99f618d2f79444.png

NumPy二维数组的创建还是使用简单的array函数。

9baa2d853ad032d781fb389ede251648.png

f17e9dea5b9596723e1565d68a1ea2eb.png

(1)查询元素

d6ad400a08f2423c889210b03eae211b.png

第一个元素‘0’是行号,第二个元素‘2’是列号。

03f6a277e2b69c63f9ed115b4c67c5e9.png

(2)获取某一行

例:获取第1行

d7db37408675300560f71a2fd818a8e4.png

dbd33373944634e4912ad70597766b40.png

(3)获取某一列

例:获取第1列

f42303ccdedbffb05d7e80150aca03f7.png

8e30f75ca17e52385be43c6fa098fdfd.png

(4)数轴参数

二维数组的索引方式如下:

将“0”轴看作“行”,将“1”轴看作“列”

b3c83c7fc204ab12ae2cbc80a635af9d.png

在不指定数轴参数的时候进行平均值等数学统计计算时,他将会计算所有元素,不考虑其行和列。

ce5b726c73aaf5e15109c4d26a6841f7.png

如果指定轴的话,计算会考虑到是行还是列。

649b104b3c2d6e4c410a84e4b70a7f16.png

941dee586d592cb1f19a89d9da32dd76.png

2、Pandas二维数组

2-1

Pandas的二维使用DataFrame数据框实现。DataFrame表示的是矩阵的数据表,它包含已排序的列集合,每一列可以是不同的值类型。DataFrame即有行索引,又有列索引。在DataFrame中,数据被存储为一个以上的二维块,而不是列表、字典或其他一维数组的集合。

(1)构建

构建DataFrame最常用的方式是利用包含等长度列表或NumPy数组的字典来形成。

a975da86bca218b3621a74e6fe8606ed.png

例如我有一张关于药品销售记录的Excel数据表,我想将它用Python进行分析。

第1步:定义一个字典,映射;列名与对应列的值

47a23a378800099452b8d9b91400a806.png

第2步:定义数据框,参数传入字典

208cf48e5c90ee9c386feca0aa131dd1.png

cd6f05b32ce9603c197a066101c6c9e1.png

产生的DataFrame会自动为Series分配索引,并且列会按照排序的顺序排列。如果指定了列的顺序,DataFrame的列将会按照指定顺序排列。

指定列顺序:

salesDF = pd.DataFrame(salesDict, columns = ['购药时间', '社保卡号', '商品编码', '商品名称', '销售数量', '应收金额', '实收金额'])

第3步:进行分析

计算平均值

7924a35b63adc4e84ae61f338d7a6d0e.png

可以发现Pandas是按照每列进行平均值的计算

描述性统计计算

9dac51d35e5e88a4521a0fdede6e10dd.png

7675400e6ad9034d87efa5e213d5b876.png

(2)使用iloc属性,即根据位置查询值

<1>查询元素

915382fb36b43489edc8c18888d8de43.png

d43b42884ddbd512fc90161f82cd5692.png

705cd261eacbe8bf896166bfe90b4078.png

<2>获取某一行

例如获取第一行数据

0e65cfacdfa150ea1789d5abc91bb300.png

d5fd6ddac1e7df82dcf4612e7daac06c.png

b85a0cff111f6f222a7c4efba5325300.png

<3>获取某一列

例如获取第一列

a6501b5802cc95a08eb479a2c2f04cf2.png

87a5e14b3be96185e69472c978808e2a.png

8a5d477feb300d9b9d339d06790b4630.png

(3)使用loc属性,用于根据索引查询值

<1>查询元素

7a707c7cc5ca23570246f00f33321cb5.png

618734f41bc0ce74c04c48a1705f875e.png

ab8a32230166028dfc2e4756109dad8d.png

<2>获取某一行

例如获取第一行数据

a381dc3502235381964e4430ee6d6ff6.png

6c58e3600ade0b94a983616a18f817e2.png

e285e92b03b3b2cdf0f14168e9d4bf01.png

<3>获取某一列

例如获取第一列

5b7dc61378f07cc41bd4760de14c12b3.png

bdfa750459f429d55cc9134063ed6561.png

或者

a6238b1802e525d2a5089bb223f42853.png

8a5d477feb300d9b9d339d06790b4630.png

loc属性更常用。

(4)查询某几列:

方法1:直接列举所要的列名

1806f59b56d280f5b9a90fdcdb4704de.png

方法2::切片功能——指定范围

eb207737a2c56aa2acaacf157c53210a.png

(5)通过条件判断筛选数据

第1步:构建查询条件

1fbc8a2fbeef0f66a7286420ed998f3d.png

查询过程中的结果存放的是布尔类型,符合条件的为True。

第2步:应用查询条件

416d1c5d0b08a7eb79971014fc37601a.png

应用查询条件并展示符合条件所在行所对应的所有列的内容。

879c7a723d92f94fe8550c712722c479.png

2-2 简单案例

将上述的完整数据导入并分析。

84ceb93692b53853d0747cf847739485.png

(1)读取Excel数据

使用完整的药品销售数据

 fileNameStr = 'C:/Users/MACHENIKE/Desktop/数据分析/学习资料/Python数据分析的基本过程/朝阳医院2018年销售数据.xlsx' xls = pd.ExcelFile(fileNameStr) saleDF = xls.parse('Sheet1')

6f7ba4526e872e5b56508e8919d2ee3a.png

(2)打印前5行

方法1:使用head函数

a4e9c93c94174637f8e5e2de37f0dc7a.png

ff09a3e2107a1538f682c02a6c6b241c.png

方法2:使用iloc属性和切片

c6cdd43ea0fb03a759a10377f826455a.png

26243e3f0a4bf932a31a35f01ec663ac.png

(3)查看数据类型

e92200e960a4ba5462095f1dc35beba9.png

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

使用shape属性

5fd5dd6bf2a3cced0f044b8a0fb5412b.png

由此可看出有6578行,7列数据。

(5)每一列的统计数

使用描述统计方法:

2d8e88e3e38c8870885a32967bf1dc81.png

8e086588ede311d0e7d6104a0daa6bfe.png

由于数据类型问题,结果显示有问题,后边完整分析时进行调整。

四、案例

根据数据分析的过程进行数据分析。

使用的数据依然是上述练习中使用到的朝阳医院2018销售数据

84ceb93692b53853d0747cf847739485.png

1、提出问题

09c055de93ed89bfd2f424f9a1896b11.png

2、理解数据

(1)读取Excel数据

a5f50f8130c192f0d50f6c750bffb2e2.png

(2)打印前几行

a4e9c93c94174637f8e5e2de37f0dc7a.png

ff09a3e2107a1538f682c02a6c6b241c.png

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

47a6c900bda23ba75eb9f42f1d5415b8.png

由此可看出有6578行,7列数据。

(4)查看列的数据类型

8e50d8b3f1cad32dc5c7b5258bd77b82.png

eac42c1dd6619db3ef964b30b9f5f83d.png

3、清洗数据

9b9c2ff451b4d6e3bb28d5f38e2747f2.png

(1)选择子集

本案例不需要选择子集,所有数据均有用。

如果需要选择子集的话,需要使用loc属性和切片的功能。

90bcdd87c1a1cf36dfc26f1d903897cc.png

e06d3467547f37748733b6aec8edc2a8.png

(2)列名重命名

将“购药时间”重命名为“销售时间”

b0f5fa40ee2285cb157082a1d0d35780.png

06489694efd5ced52dfcf61ff0168314.png

0292fe0e44bc6b569b9e12ba7921f8b5.png

(3)缺失数据处理

缺失数据的处理方式有两种:

  • l 直接删除缺失数据
  • l 如果缺失数据太多,建立模型使用插值的办法进行处理

aa5935452ca29d46f07df2213d8b2230.png

由于缺失值不多,在此选择将缺失值删除

0501d254829e1fb1e3bd44289fd2660c.png

(4)数据类型的转换

为了方便计算,将销售数量、应收金额、实收金额的数据类型转换,字符串转换为数值(浮点数)

f8aea76c91c61b49430054dde85c2eae.png

e8f9d05f031bdc07db48bd77ade11174.png

(5)处理日期

查看部分数据可知日期格式为

0a574bd9c5f04d7ef1070beb7be4dd11.png

修改成只有年月日的格式

1245cdd8c0d0274a277a1d96da5ec124.png

e05b2046d05a8de7aaa7a9bb40c5910e.png

12351d0adeed4ce6191040bf3c77e900.png

88e49ef2938612f4fb96ca9b34bea4c8.png

将销售日期这一列的数据类型转换成日期类型

5cc232327d68e490af138e782acde962.png

01cb7e1559683aeac48997f9d35d295a.png

ccb5673667d36c436febd67aa44d8808.png

(6)排序

按照日期进行排序

078da3e16387dcd54c189a2550296163.png

d185e40977be866f5d782a6acbf3c5a2.png

4e2b6b26255579eff88c6d28b80bc6c1.png

(7)异常值处理

我们可以通过描述统计信息对数据有一个整体的把控。

e67f64bdf894633b134a04e7afdd0311.png

e3c777cf2a2f53cba739d0eecc615dd5.png

根据描述统计信息结果来看,最小值出现了负数,按照正常销售来说不应该存在销售数量小于0的情况,需要根据销售数量进行进一步的筛选、删除。

0af6b0dcd4a587ed53a485d0a0c4edcb.png

4、构建模型

e969fe377b53cc674e0a6fbbf7bc7e8c.png

5、数据分析

(1)月均消费次数

353073f88e10498cb74e75a2805369f8.png

第1步:删除重复数据

028a31739908efdeda06668059dd76ef.png

第2步:有多少行

e4d35b976d6624b7d1cf8614ac385a7c.png

有多少行就有多少消费次数

2bfe3d0c0275c3a70ad3b9bf25092f80.png

即总消费次数为3317

第3步:按销售时间升序排序

3ab59b23ab2a631186f644b3192f9f5c.png

第4步:获取时间范围

1320046274ec77b3f3bc8ae18eaad3da.png

第5步:计算月份数

cbd2a6799e8f5d707b9cbccfa32fbc58.png

第6步:月均消费次数

be3da3f80180618df73755cae7612996.png

即月均消费次数为552

(2)月均消费金额

ed0b7d082794143c960e5c0c5781f7da.png

第1步:计算总消费金额

ef14b6ea75c2eaf44d8416a6dafbbfd7.png

第2步:计算月均消费金额

b938667e9a38afdbaa7e9ee0dd3dd872.png

这里的结果整合成了两位小数。

即月均消费金额为50668.35元。

(3)客单价

da4ca044968dacb67607126d881bed2e.png

85aef7fde51c83632b8f52215811e5e6.png

即客单价为91.65。

五、总结

484aa0c77a451656b97deaba05d8861a.png
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐