这次学习我通过将excel表格数据导入python中进行数据清洗并分析,这次数据分析我们通过围绕月均消费次数,月均消费金额,客单价三个指标进行分析:
将数据导入:
import pandas as pd
filenamestr='D:\数据分析学习\数据分析(高级)(Python)\第3关:数据分析的基本过程\朝阳医院2018年销售数据.xlsx'
xls=pd.ExcelFile(filenamestr)
salesDf=xls.parse('Sheet1')
salesDf.head()
并对数据进行清洗
1、选取子集:该项分析不需要选取子集
2、列名重命名:将购药时间更改为销售时间
mingzidic={'购药时间':'销售时间'}
salesDf.rename(columns=mingzidic,inplace=True)
salesDf.head()
3、缺失数据处理:删除缺失值
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')
salesDf.shape
4、数据类型转换:将社保卡号和商品编码两列变成object类型,并且将销售日期进行分割处理为时间格式数据:
salesDf['社保卡号']=salesDf['社保卡号'].astype('object')
salesDf['商品编码']=salesDf['商品编码'].astype('object')
salesDf.dtypes
# 定义分割销售日期列的函数
def splitshijian(xiaoshoushijian):
timeList=[]
for value in xiaoshoushijian:
datestr=value.split(' ')[0]
timeList.append(datestr)
timeser=pd.Series(timeList)
return timeser
timeser=salesDf.loc[:,'销售时间']
#使用函数
dateser=splitshijian(timeser)
salesDf.loc[:,'销售时间']=dateser
#将销售时间列格式转换成时间格式以方便统计
salesDf.loc[:,'销售时间']=pd.to_datetime(salesDf.loc[:,'销售时间'],
format='%Y-%m-%d',
errors='coerce')
salesDf.head()
5、对数据进行排序及重命名行名:
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')
salesDf=salesDf.sort_values(by='销售时间',
ascending=True)
salesDf=salesDf.reset_index(drop=True)
6、处理异常值
shuliangtrue=salesDf.loc[:,'销售数量']>0
salesDf=salesDf.loc[shuliangtrue,:]
salesDf.shape
将数据清洗完成后对数据进行分析:
1、月均消费次数:
sdf1=salesDf.drop_duplicates(subset=['销售时间','社保卡号'])
zxfcishu=sdf1.shape[0]
总消费次数=5342次
sdf1=sdf1.sort_values(by='销售时间',ascending=True)
sdf1=sdf1.reset_index(drop=True)
#得到初始时间和最终时间
starttime=sdf1.loc[0,'销售时间']
endtime=sdf1.loc[zxfcishu-1,'销售时间']
#天数
shidays=(endtime-starttime).days
#月份
shimonth=shidays//30
得出表格跨度的月份为6个月
yjxfcishu=zxfcishu/shimonth
print('月均消费次数=',yjxfcishu)
月均消费次数=890次
2、月均消费金额
xsjin=salesDf.loc[:,'实收金额'].sum()
总消费金额为304010元
yjxfje=xsjin/shimonth
print('月均消费金额=',yjxfje)
月均消费金额=50668.35元
3、客单价
kedanjia=xsjin/zxfcishu
print('客单价=',kedanjia)
客单价=总消费金额/总消费次数=56.91元