如下图,数据分析的基本过程:
1、提出问题,拿到一份数据首先要明确分析的内容是什么,而不是一股脑就开始分析,明确的分析目标,指定明确的思路,才是开始数据分析的第一步。
2、理解数据,通过导入数据,先最简单的认识数据,比如数据格式是否符合要求,是否存在异常值,缺失值。
3、数据清洗,根据分析的目标,对数据先进行基本的清洗处理,使数据满足分析的格式需要。
4、构建模型,清理完数据就可以开始对数据进行分析,根据之前第一步提出问题,明确分析目标和思路,是否通过高级方法机器学习构建模型分析?或者简单的数据分析?
5、数据可视化,把所分析的内容用图表的方式呈现更直观。
这一章的重点:
1、数据的处理工作,需要结合《利用python进行数据分析》学习Numpy,Pandas的基本入门知识, 以及数据的清理,转换,合并,重塑的操作,这里建议认真学习第4章,第5章,第7章的内容,在这里不过多阐述。
2、通过猴子课程的案例分析《医院药店销售数据分析》的实操,对以上提到的数据分析的基本流程有个认识。以下是实操代码。
1、提出问题
月均消费次数
月均消费金额
客单价
消费趋势
2、理解数据
用pd.ExcelFile读取excel数据
filename=r'C:\Users\Administrator\Desktop\朝阳医院2018年销售数据.xlsx'
xls=pd.ExcelFile(filename,dtype='object')
saleDf=xls.parse('Sheet1',dtype='object')
saleDf.head()
3、数据清洗
选择子集
列名重命名
缺失数据处理
数据类型转换
数据排序
异常值处理
选择子集
subsaleDf=saleDf.loc[0:4,'购药时间':'销售数量'] #确定行数,列名的切片,起始位置:结束位置
subsaleDf
列名重命名
colNameDict={'购药时间':'销售时间'} #字典
saleDf.rename(columns=colNameDict,inplace=True) # inplace参数改变原数据格式
saleDf.head()
缺失值数据处理
saleDf=saleDf.dropna(subset={'销售时间','社保卡号'},how='any')
#删除指定列subset参数的缺失值,any有一个就删除
saleDf.shape
数据类型转换
saleDf['销售数量']=saleDf['销售数量'].astype('float') #熟悉一下转换数据类型的方法
saleDf['应收金额']=saleDf['应收金额'].astype('float')
saleDf['实收金额']=saleDf['实收金额'].astype('float')
print(saleDf.dtypes) #注意有s
def splitSaletime(time):
timeList=[]
for value in time:
value2=value.split(' ')[0]
timeList.append(value2)
timeSeries=pd.Series(timeList)
return timeSeries
timeSeries=splitSaletime(saleDf['销售时间'])
timeSeries.head()
saleDf['销售时间']=timeSeries
saleDf.head()
saleDf['销售时间']=pd.to_datetime(saleDf['销售时间'],format='%Y-%m-%d',errors='coerce')
#转换时间数据的格式,之前为分隔后为字符串
type(saleDf['销售时间'][0]) #可以看到返回的时间为Timestamp类型
数据排序
saleDf=saleDf.sort_values(by='销售时间',ascending=True)
saleDf.head()
saleDf=saleDf.reset_index(drop=True) #drop为True则默认插入新的整数索引
saleDf.head()
异常值处理
querySer=saleDf['销售数量']>0 #逻辑索引
saleDf=saleDf.loc[querySer,:]
saleDf.shape
4、构建模型
月均消费次数=总消费次数/月份数 (同一天内,同一个人,两次消费算一次)
kpil_Df=saleDf.drop_duplicates(subset=['销售时间','社保卡号']) #duplicates移除重复行
total=kpil_Df.shape[0]
total #删除同一天内同一个人的重复消费次数,计算出总的消费次数
kpil_Df.head()
kpil_Df.tail()
kpil_Df=kpil_Df.sort_values(by='销售时间',ascending=True)
kpil_Df=kpil_Df.reset_index(drop=True)
startTime=kpil_Df.loc[0,'销售时间']
endTime=kpil_Df.loc[total-1,'销售时间'] #获取时间的销售时间范围
days=(endTime-startTime).days #用days打印出时间格式中的日
months=days//30
print(days,months)
print('月均消费次数',total//months)
月均消费金额=总消费次数/月份数
totalmoney=saleDf['实收金额'].sum()
print("月均消费金额",totalmoney/months)
客单价=总消费金额/总消费次数
print('客单价',totalmoney/total)