python数据处理与分析案例,python项目数据分析案例集锦
两个学习道具:
1)本网页可调用全球最大搜索引擎(长按此处可复制):
提前准备:
在notebook中,如果要导入Excel文件,必须先安装一个读取Excel文件的包:xlrd。
安装步骤:
现在进入Python环境,例如conda中当前文件所在的位置
激活py3
然后使用命令安装。
康达安装xlrd
1.提问:
2.了解数据:
2.1读取文件:
#读取Ecxcel数据,先按字符串读取,再转换。
FileNameStr=。/朝阳医院2018年销售数据. xlsx
xls=pd。ExcelFile(fileNameStr,dtype=object )
salesDf=xls.parse(Sheet1 ,dtype=object )
#打印出前5行以确保数据正确运行
salesDf.head()
#有多少行和多少列?
salesDf.shape
#检查每列的数据类型
salesDf.dtypes
3.数据清理
数据清理的步骤
3.1选择子集(loc)
选择我们需要的列;
3.2列重命名(rename())
#首先定义新旧列名之间的对应关系。
ColNameDict={ 药品购买时间:销售时间 }
#然后使用重命名功能修改列名
sales df . rename(columns=colNameDict,inplace=True)
3.3缺失值处理(dropna)
3.缺失数据处理
有3种类型的python缺失值:
1)Python内置的None值
2)在熊猫中,缺失值表示为NA,表示不可用。
3)对于数值型数据,pandas使用浮点值NaN(不是数字)来表示缺失数据。
后面出来数据,如果遇到错误:说foloat有问题,就是有缺失值需要处理掉。
因此,有三种缺失值:无、NA、NaN。
直接删除缺失值。
3.4基本数据类型的转换(astype)
#转换为数值的字符串(浮点型)
Sdf [销售数量]=salesDf[销售数量]。astype(float )
Sdf [应收金额]=salef[应收金额]。astype(float )
Sdf [实收金额]=salef[实收金额]。astype(float )
Print(转换的数据类型:,salesDf.dtypes)
运行“”后,将报告一个警告。关于SettingWithCopyWarning有两列常规信息,一列是警告信息,另一列是错误信息。不要担心警告信息,我们只关注错误类型的信息
3.4.1字符串拆分(split())
3.4.2拆分一列数据
首先定义一个函数。
定义函数:拆分销售日期,得到销售日期。输入:timeColSer销售时间是一种序列数据类型。输出:分割时间,并返回一个系列数据类型
def splitSaletime(时间秒):
时间列表=[]
对于时间秒中的值:
#比如2018-01-01周五,分后:2018-01-01
dateStr=value.split( )[0]
timeList.append(dateStr)
#将列表转换为一维数据系列类型。
timeSer=pd。系列(时间列表)
返回计时器
#获取“销售时间”列
timeser=salef . loc[:销售时间]
#拆分字符串以获得销售日期
dateSer=splitSaletime(timeSer)
#检查裂缝。
dateSer[0:3]
#修改销售时间列的值。
Sdf.loc [:销售时间]=dateSer
#查看结果
salesDf.head()
3.4.3字符串被转换为日期格式(to_datetime())
数据类型转换:字符串转换为日期
# errors= compete 如果原始数据不符合日期格式,则转换后的值为null NaT。
#format是原始数据中日期的格式
Sdf.loc [:销售时间]=pd.to _ datetime (salesf.loc [:销售时间],
格式=%Y-%m-%d ,
错误=强制)
在日期转换期间,不符合日期格式的“”值将被转换为空值。此处,删除列(销售时间,社保卡号)中的空行 。
SDF=salef . dropna(subset=[销售时间,社会保障卡号],how=any )
3.5排序值(reset_index)
排序后,用index重命名索引。
由:由哪些列?
Ascending=True表示升序,
Ascending=True表示降序。
Na_position=True表示排序时,将空值放在最前面一行,这样可以清楚地看到哪里有空值。
官网:3359 pandas . pydata . org/pandas-docs/stable/generated/pandas . data frame . sort _ values.html
#按销售日期升序排序
SDF=salef . sort _ values(by=销售时间,
升序=真,
na_position=first )
打印(“排序数据集”)
salesDf.head(3)
# Rename row name (index):排序后的列索引值是前面的行号,需要按照从0到n的顺序修改为索引值。
sales df=sales df . reset _ index(drop=True)
salesDf.head()
3.6异常值的处理
用describe()方法先看描述性统计分析。
#说明指标:“销售数量”的值不能小于0。
salesDf.describe()
#删除异常值:通过条件判断过滤掉数据。
#查询标准
查询ser=salef . loc[:销售数量] 0
#应用查询标准
打印(删除异常值之前:,salesDf.shape)
salesDf=salesDf.loc[querySer,]
打印(删除异常值后:,salesDf.shape)
出局:
删除异常值之前:(6549,7)
删除异常值后:(6506,7)
4.建立一个模型
回到前四个问题
4.1每月消费次数
为了减少干扰,同一个客户同一天消费多次,只取一次;
因此,需要使用重复数据删除方法(drop_duplicates())。
总消费次数:同一个人在同一天的所有消费都算作一次消费。
#根据列名(销售时间,社区卡号),如果同时两列值相同,则只保留一列,重复数据删除。
KPI 1 _ Df=sales Df . drop _ duplicates(
Subset=[销售时间,社会保障卡号]
)
#总消费次数:多少行?
totalI=kpi1_Df.shape[0]
打印(总消费次数=,总计)
计数月份:时间范围
#步骤1:按销售时间升序排序
KPIL _ DF=KPIL _ DF . sort _ values(by=销售时间,ascending=True)
#重命名行名(索引)
kpil _ Df=kpil _ Df . reset _ index(drop=True)
#第二步:获取时间范围
#最小时间值
Start=KPi1 _ df.loc [0,销售时间]
#最大时间值
End=kpi1 _ df.loc [totali-1,销售时间]
#第三步:计算月数
#天
daysI=(结束时间-开始时间)。天
#月数:运算符“//”表示可分。
#返回商的整数部分,例如9//2。输出结果是4
monthsI=daysI//30
打印(月数:,月数)
#业务指标1:平均每月消费次数=总消费次数/月
kpi1_I=totalI //monthsI
打印(业务指标1:平均月消耗量=,kpi1_I)
4.2月消费金额
平均月消费金额=总消费金额/月数
#总消费金额
total money f=salef . loc[:实收金额]。总和()
#月平均消费金额
monthMoneyF=total money f/month si
打印(业务指标2:月平均消费金额=,monthMoneyF)
4.3客户单价
每顾客交易是指每个顾客在一个商场(超市)购买商品的平均金额,即平均交易金额。
客户单价=总消费金额/总消费次数
TotalMoneyF:总消费金额
TotalI:总消费次数
pct=totalMoneyF/totalI
打印(客户单价:,百分比)
4.4消费趋势(可视化)
未完待续。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。