学而思python分几个level_Python LEVEL4:数据分析标准步骤

Catalog:数据分析思维框架(5步)

1.提出问题 (定义问题,明确需求/计算公式)

2.理解数据1.采集数据(根据问题采集相关数据)

2.导入数据 excel/api接口/web链接

3.查看数据集信息(描述统计信息)从整体上理解数据

3.数据清洗( 6步数据预处理)1)选择子集(暂未用到)

2)列名重命名

3)缺失数据处理

4)数据类型转换***重点***

5)排序

6)异常值处理

4.构建模型,对清洗后的数据进行分析(kpi指标)1.简单分析--得到业务指标

2.复杂分析--机器学习算法训练模型(后文详述)

5.数据可视化(后文详述)

操作案例:

1.提出问题:已知医院药品销售数据,求月均消费次数#月均消费次数=总消费次数 / 月份数

月均消费金额#月均消费金额 = 总消费金额 / 月份数

客单价#客单价=总消费金额 / 总消费次数

消费趋势#可视化作图(后文详述)

2.理解数据

#导入数据分析包

import pandas as pd

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

fileNameStr='A:/BaiduNetdiskDownload/第4关数据分析的基本过程(1)/朝阳医院2018年销售数据.xlsx'

xls = pd.ExcelFile(fileNameStr, dtype='object')#(赋值名,类型)

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

'''查看数据基本信息'''

#默认打印前5行,确保数据运行正常

salesDf.head()

#有多少行,多少列

salesDf.shape

#查看每一列的数据类型

salesDf.dtypes #这里的类型统一是对象

3.数据清洗(6个清洗方向)

1)选择子集

本案例不需要选择子集,如果需要选择前5列数据,使用如下代码

#subSalesDf=salesDf.loc[0:4,'购药时间':'销售数量']

2)列名重命名

#定义字典:旧列名和新列名对应

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

#inplace=False,原数据框不变,创建新数据框,默认inplace是False

#inplace=True,改变原数据框

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

salesDf.head()#重新查看列名变化

3)缺失数据处理

print('删除缺失值前大小',salesDf.shape) #观察

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

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

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

print('删除缺失后大小',salesDf.shape) #观察

4)数据类型转换

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

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

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

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

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

'''运行后,会报警告SettingWithCopyWarning一般信息有两类,一类是Warning警告信息,一类是Error错误信息。警告信息不用管,只关注错误类型信息'''

字符串转换为日期数据类型(百度关键词:python 分割字符串 string)

5步

***第1步***定义函数:分割函数

#split函数(对单个字符串分割):遇到空格把数据分开,返回两个列对象,然后按序号提取列数据

#需要重新定义分割整列字符串的函数

'''分割销售日期,获取其中一部分输入:timeColSer 销售时间这一列,是Series数据类型输出:分割后的时间,返回也是Series数据类型'''

def splitSaletime(timeColSer):

timeList=[]

for value in timeColSer: #for 循环遍历 分割

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

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

timeList.append(dateStr)

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

timeSer=pd.Series(timeList) #重新赋值

return timeSer #返回值series类型 列表

***第2步***使用函数

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

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

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

dateSer=splitSaletime(timeSer) #使用函数处理 所选中的列

'''

注意:

如果运行后报错:AttributeError: 'float' object has no attribute 'split'

是因为Excel中的空的cell读入pandas中是空值(NaN),这个NaN是个浮点类型,一般当作空值处理。

所以要先去除NaN 再进行分隔字符串

'''

***第3步***重新赋值

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

salesDf.loc[:,'销售时间']=dateSer #新数据列对原始数据列赋值

salesDf.head() #check

***第4步***数据类型转换:字符串转换为日期

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

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

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

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

errors='coerce')

salesDf.dtypes #check

***第5步***删除空值

#转换日期时,不符合日期格式的数值被转换为空值,这里删除列(销售时间,社保卡号)中为空的行

#如果数据比较珍贵/或缺失值较多,不能直接删除,就需要把缺失数据分离、赋值,进行二次清洗

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

salesDf.head() #check

5)排序

print('排序前的数据集')

salesDf.head() #check

'''

by='参照该列排序'

ascending=True 表示降序排列,

ascending=False表示升序排列

'''

#按销售日期升序排列

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

ascending=True)

print('排序后的数据集')

salesDf.head(3)

6)异常值处理

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

salesDf.describe()

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

#查询条件

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

#应用查询条件

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

salesDf=salesDf.loc[querySer,:]

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

4.构建模型(简单数据分析)业务指标1: 月均消费次数=总消费次数 / 月份数

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

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

'''

当日去重

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

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

'''

kpi1_Df=salesDf.drop_duplicates(

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

)

#去重后,总消费次数:有多少行

totalI=kpi1_Df.shape[0]

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

总消费次数= 5342

# 3步 计算月份数:时间范围

#第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)

月份数: 6

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

kpi1_I=totalI // monthsI

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

业务指标1:月均消费次数= 890

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

#总消费金额

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

#月均消费金额

monthMoneyF=totalMoneyF / monthsI

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

业务指标2:月均消费金额= 50771.710000000145

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

#客单价(per customer transaction):商场每个顾客平均购买商品金额。注意,客单价是平均交易金额。

#totalMoneyF:总消费金额(不用去重)

#totalI:总消费次数(要当日去重)

pct=totalMoneyF / totalI

print('业务指标3:客单价=',pct)

业务指标3:客单价= 56.909417821

Sum up:

1.数据清洗占用60%时间,[数据类型转换]是重点,需要多次操作;

2.对于[时间类型转换]理解不够透彻,需要反复研究;

3.选择子集,复杂数据分析,数据可视化 后文继续学习;

4.文章的功能:便于回顾,结构要精简清晰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值