python计算循环次数查询_数据分析初探---利用Python进行简单数据分析

数据分析中主要用到的Python中的两个包:numpy和pandas.

本文主要介绍了如何利用Python进行一维数组以及二维数组的分析。用到了以上2个包,并且最后结合某医院的销售案例,简述了利用Python的numpy和pandas如何具体来实现数据分析。

一、一维数据分析:

1.建立数组:

numpy一维数组:

1)查询元素

a[0]->2

2)切片访问a[1:3]->3,4,5

3)循环访问

for i in a

4)数据类型:dtype

2.numpy一维数组与列表的区别:

1).统计功能:平均值mean();标准差()

2).向量化计算:向量相加;乘以标量

3).numpy一维数组中的每个元素都必须是同一种数据类型,而列表中的数据元素可以是不同的数据类型。

3.pandas一维数据:

1)获取pandas一维数据的描述统计信息

stockS.describe()

2)iloc属性用于根据索引获取值

stockS.iloc[0]

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

stockS.loc['腾讯']

4)向量化运算:向量相加

s1=pd.Series([1,2,3,4],index=['a','b','c','d'])

s2=pd.Series([10,20,30,40],index=['a','b','e','f'])

s3=s1+s2

面对缺失值得处理方法:

方法一:删除缺失值

s3.dropna()

方法二:将缺失值进行填充

s3=s1.add(s2,fill_value=0)

二、二维数据分析

既有行也有列

1.numpy二维数据结构:

'''

Numpy二维数据结构:Array

'''

#定义二维数组

a=np.array([

[1,2,3,4],

[5,6,7,8],

[9,10,11,12]

])

二维数组的查询行号跟列号都是从0开始的

1)查询元素:a[0,2]

2)获取第一行:a[:,0]

3)获取第一列:a[0,:]

4)Numpy数轴参数:axis

#如果没有指定数轴参数,会计算整个数组的平均值

a.mean()

#按轴计算:axis=1计算每一行

a.mean(axis=1)

2.Pandas二维数组:数据框(DataFrame)

1)定义数据框

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

第二步:导入有序字典

第三步:再定义一个有序字典

'''

Pandas二维数组:数据框(DataFrame)

'''

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

salesDict={

'购药时间':['2018-01-01 星期五','2018-01-02 星期六','2018-01-06 星期三'],

'社保卡号':['001616528','001616528','0012602828'],

'商品编码':[236701,236701,236701],

'商品名称':['强力VC银翘片','清热解毒口服液','感康'],

'销售数量':[6,1,2],

'应收金额':[82.8,28,16.8],

'实收金额':[69,24.64,15]

}

#导入有序字典

from collections import OrderedDict

#定义一个有序字典

salesOrderDict=OrderedDict(salesDict)

#定义数据框:传入字典,列名

salesDf=pd.DataFrame(salesOrderDict)二维数据框可以计算每列的数值

2)查询:iloc-根据位置获取数据值

#查询第1行第2列的元素

salesDf.iloc[0,1](前面是行索引,后面是列索引)

loc-根据索引获取值

#查询第1行第1列的元素

salesDf.loc[0,'商品编码']

#获取“商品名称”这一列

#salesDf.loc[:,'商品名称']

#简单方法:获取“商品名称”这一列

salesDf['商品名称']

3)数据框查询升级版1--切片功能通过列表来选择某几列数据

salesDf[['商品名称','销售数量']]通过切片功能,获得指定范围的列

salesDf.loc[:,'购药时间':'销售数量']

4)数据框查询升级版2-条件判断

通过条件判断筛选

第一步:构建查询条件

querySer=salesDf.loc[:,'销售数量']>1

salesDf.loc[querySer,:]

第二步:应用查询条件 应用查询条件!!!!(详细见第四部分案例的应用)

三、数据分析的基本过程

1)提出问题--目标:来自生活和工作中的实际问题

2)理解数据--包括:采集数据(根据定义的问题)、导入数据(Excel、数据库或者web api接口中)、查看数据集的统计信息

3)清洗数据(数据预处理):

数据清洗步骤:

--选择子集

--列名重命名

--缺失数据处理

--数据排序

--异常值处理

4)构建模型:得出一些业务指标,或者用机器学习的算法训练模型

5)数据可视化:最好的方式是图表

四、通过一个案例学会数据分析的基本过程

实际案例分析前的知识储备

在Python中导入Excel

运用pandas的ExcelFile

代码如下:

查看数据框中的数据有几行几列.shape

查看数据框中的数据类型.dtype

查看数据框中每一列的统计数值.describe()案例:药店销售数据分析

第一步:导入数据分析包

1.提出问题

从销售数据中分析出以下业务指标: 1)月均消费次数2)月均消费金额3)客单价4)消费趋势

#读取Ecxcel数据,统一先按照字符串读入,之后转换

查看数据基本信息-打印出前5行,以确保数据运行正常,同时明确原始数据有几行几列以及其类型。

fileNameStr='./朝阳医院2018年销售数据.xlsx'

xls = pd.ExcelFile(fileNameStr, dtype='object')

salesDf = xls.parse('Sheet1',dtype='object')

salesDf.head()

2.理解数据

了解该数据集有几行几列以及对应的类型

salesDf.shape

salesDf.dtypes

3.数据清洗

1)选择子集(本实例不需要选择子集)

2)列名重命名

首先,创建一个字典,明确旧列名和新列名对应关系

之后将数据框列名重命名

#字典:旧列名和新列名对应关系

colNameDict = {'购药时间':'销售时间'}

'''

inplace=False,数据框本身不会变,而会创建一个改动后新的数据框,

默认的inplace是False

inplace=True,数据框本身会改动

'''

salesDf.rename(columns = colNameDict,inplace=True)

#删除列(销售时间,社保卡号)中为空的行

#how='any' 在给定的任何一列中有缺失值就删除

salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')

4)数据类型的转换

本案例中是将字符串转换为数值(浮点型)

#字符串转换为数值(浮点型)

salesDf['销售数量'] = salesDf['销售数量'].astype('float')

salesDf['应收金额'] = salesDf['应收金额'].astype('float')

salesDf['实收金额'] = salesDf['实收金额'].astype('float')

print('转换后的数据类型:\n',salesDf.dtypes)

'''

运行后,会报警告SettingWithCopyWarning

一般信息有两列,一类是Warning警告信息,一类是Error错误信息。

警告的信息不用管,我们只关注错误类型的信息

'''

以及将销售时间列中的字符串分割后转换成日期型的数据(转换日期过程中不符合日期格式的数值会被转换为空值,需要删除列(销售时间,社保卡号)中为空的行),具体如下代码:

'''

定义函数:分割销售日期,获取销售日期

输入:timeColSer 销售时间这一列,是个Series数据类型

输出:分割后的时间,返回也是个Series数据类型

'''

def splitSaletime(timeColSer):

timeList=[]

for value in timeColSer:

#例如2018-01-01 星期五,分割后为:2018-01-01

dateStr=value.split(' ')[0]

timeList.append(dateStr)

#将列表转行为一维数据Series类型

timeSer=pd.Series(timeList)

return timeSer

#获取“销售时间”这一列

timeSer=salesDf.loc[:,'销售时间']

#对字符串进行分割,获取销售日期

dateSer=splitSaletime(timeSer)

#修改销售时间这一列的值

salesDf.loc[:,'销售时间']=dateSer

'''

数据类型转换:字符串转换为日期

'''

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

#format 是你原始数据中日期的格式

salesDf.loc[:,'销售时间']=pd.to_datetime(salesDf.loc[:,'销售时间'],

format='%Y-%m-%d',

errors='coerce')

'''

转换日期过程中不符合日期格式的数值会被转换为空值,

这里删除列(销售时间,社保卡号)中为空的行

'''

salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')

salesDf.shape

5)数据排序

-按销售日期进行升序排列

'''

by:按那几列排序

ascending=True 表示升序排列,

ascending=False表示降序排列

'''

#按销售日期进行升序排列

salesDf=salesDf.sort_values(by='销售时间',

ascending=True)

-重命名行名(index):排序后的列索引值是之前的行号,需要修改成从0到N按顺序的索引值

#重命名行名(index):排序后的列索引值是之前的行号,需要修改成从0到N按顺序的索引值

salesDf=salesDf.reset_index(drop=True)

salesDf.head()

6)异常值处理

描述指标:查看出“l销售数量”值不能小于0,并删除异常值

#描述指标:查看出“销售数量”值不能小于0

salesDf.describe()

#删除异常值:通过条件判断筛选出数据

#查询条件

querySer=salesDf.loc[:,'销售数量']>0

#应用查询条件

print('删除异常值前:',salesDf.shape)

salesDf=salesDf.loc[querySer,:]

print('删除异常值后:',salesDf.shape)

4.构建模型

利用Python分析Excel中的数据,得出一些业务指标,或者用机器学习的算法训练模型

业务指标1:月均消费次数=总消费次数 / 月份数

-总消费次数:同一天内,同一个人发生的所有消费算作一次消费

'''

总消费次数:同一天内,同一个人发生的所有消费算作一次消费

#根据列名(销售时间,社区卡号),如果这两个列值同时相同,只保留1条,将重复的数据删除

'''

kpi1_Df=salesDf.drop_duplicates(

subset=['销售时间', '社保卡号']

)

#总消费次数:有多少行

totalI=kpi1_Df.shape[0]

print('总消费次数=',totalI)

-计算月份数:时间范围

#第1步:按销售时间升序排序

kpi1_Df=kpi1_Df.sort_values(by='销售时间',

ascending=True)

#重命名行名(index)

kpi1_Df=kpi1_Df.reset_index(drop=True)

#第2步:获取时间范围

#最小时间值

startTime=kpi1_Df.loc[0,'销售时间']

#最大时间值

endTime=kpi1_Df.loc[totalI-1,'销售时间']

#第3步:计算月份数

#天数

daysI=(endTime-startTime).days

#月份数: 运算符“//”表示取整除

#返回商的整数部分,例如9//2 输出结果是4

monthsI=daysI//30

print('月份数:',monthsI)

#业务指标1

kpi1_I=totalI // monthsI

print('业务指标1:月均消费次数=',kpi1_I)

指标2:月均消费金额 = 总消费金额 / 月份数

#总消费金额

totalMoneyF=salesDf.loc[:,'实收金额'].sum()

#月均消费金额

monthMoneyF=totalMoneyF / monthsI

print('业务指标2:月均消费金额=',monthMoneyF)

指标3:客单价=总消费金额 / 总消费次数

'''

totalMoneyF:总消费金额

totalI:总消费次数

'''

pct=totalMoneyF / totalI

print('客单价:',pct)

指标4:消费趋势,画图:折线图(指标4的计算需要用到pandas的高级功能,pandas更多高级功能以及绘图等更多高级数据分析功能,在之后的课程《分组计算和数据可视化》中详细介绍)

---在进行操作之前,先把数据复制到另一个数据框中,防止对之前清洗后的数据框造成影响

groupDf=salesDf

第一步:重命名行名(index)为销售时间所在列的值

groupDf.index=groupDf['销售时间']

第2步:分组

gb=groupDf.groupby(groupDf.index.month)

第3步:应用函数,计算每个月的消费总额

mounthDf=gb.sum()

第四步:

mounthDf

ps:学习中用到的2个主要的软件包:numpy和pandas---选自《利用Python进行数据分析》

(一)、numpy

在大数据分析应用中,最应该关注的功能如下:用于数据整理和清理、子集构造和过滤

常用的数据算法,如排序、唯一化、集合运算等

高效的描述统计和数据聚合/摘要运算

用于异构数据集的合并/连接运算的数据对齐和关系型数据运算

将条件逻辑表述为数组表达式(而不是带有if-elif-else分支的循环)

数据的分组运算(聚合、转换、函数应用等)。

(二)、pandas

pandas是基于numpy构建的,让以numpy为中心的应用变得更加简单

pandas在代码中的缩写为pd,常用的数据结构为Series和DataFrame。

后续将不定时更新关于Python数据包及相关知识。。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值