@猴子 近日,刚学完Python数据分析课程,以下是课堂笔记。
数据来源:朝阳医院2018年销售数据.xlsx
(为了方便大家的练习,原始数据如下。拜托,一定要点赞哦。)
提取码:rffc
1.提出问题
一切分析都是以解决问题为最终目标,因此,我们搜集了业务方提出的以下需求:
2.理解数据
1)读取数据
#读取Excel数据,统一先按照str读入,之后转换
import pandas as pd
import numpy as np
fileNameStr='E:/朝阳医院2018年销售数据.xlsx'
xls=pd.ExcelFile(fileNameStr,dtype='object')
salesDf=xls.parse('Sheet1',dtype='object')
2)数据信息
打印数据前几行
salesDf.head()
数据行列信息
salesDf.shape
查看列数据类型
salesDf.dtypes
3.数据清洗
1)选择子集
subSalesDf=salesDf.loc[0:4,'购药时间':'销售数量']
subSalesDf
2)列名重命名
colNameDict={'购药时间':'销售时间'}
salesDf.rename(columns=colNameDict,inplace=True)
salesDf.head()
3)缺失数据处理
print('删除缺失值前大小',salesDf.shape)
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')
print('删除缺失后大小',salesDf.shape)
4)数据类型转换
字符串转换为数值(浮点数)
salesDf['销售数量']=salesDf['销售数量'].astype('float')
salesDf['应收金额']=salesDf['应收金额'].astype('float')
salesDf['实收金额']=salesDf['实收金额'].astype('float')
print('转换后的数据类型:\n',salesDf.dtypes)
处理日期-字符串分割
def splitSaletime(timeColSer):
timeList=[]
for value in timeColSer:
dateStr=value.split(' ')[0]
timeList.append(dateStr)
timeSer=pd.Series(timeList)
return timeSer
timeSer=salesDf.loc[:,'销售时间']
dateSer=splitSaletime(timeSer)
dateSer[0:3]
salesDf.loc[:,'销售时间']=dateSer
字符串转换日期
salesDf.loc[:,'销售时间']=pd.to_datetime(salesDf.loc[:,'销售时间'],
format='%Y-%m-%d',
errors='coerce'
)
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')
排序
salesDf=salesDf.sort_values(by='销售时间',ascending=True)
print(salesDf)
重命名行名
salesDf=salesDf.reset_index(drop=True)
每一列的描述统计信息:
salesDf.describe()
通过条件判断筛选出数据
querySer=salesDf.loc[:,'销售数量']>0
print('删除异常值前:',salesDf.shape)
salesDf=salesDf.loc[querySer,:]
print('删除异常值后:',salesDf.shape)
4.构建模型
业务指标1:月均消费次数
月均消费次数=总消费次数/月份数
(规定同一天内,同一个人发生的所有消费算作一次消费。)
求总消费次数:
step1:删除重复数据
step2:有多少行
kpi1_Df=salesDf.drop_duplicates(subset=['销售时间','社保卡号'])
totalI=kpi1_Df.shape[0]
print('总消费次数=',totalI)
求月份数:
step1:排序
step2:获取时间范围
step3:计算月份数
kpi1_Df=kpi1_Df.sort_values(by='销售时间',ascending=True)
kpi1_Df=kpi1_Df.reset_index(drop=True)
startTime=kpi1_Df.loc[0,'销售时间']
endTime=kpi1_Df.loc[totalI-1,'销售时间']
daysI=(endTime-startTime).days
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:客单价=总消费金额/总消费次数
pct=totalMoneyF/totalI
print('客单价:',pct)
5.数据可视化
稍后补充。
记得点赞哦~