精华内容
参与话题
问答
  • 分享知识要点:lubridate包拆解时间 | POSIXlt利用决策树分类,利用随机森林预测利用对数进行fit,和exp函数还原训练集来自Kaggle华盛顿自行车共享计划中的自行车租赁数据,分析共享自行车与天气、时间等关系。数据...

    编辑推荐:

    来源于cnblogs,介绍了利用决策树分类,利用随机森林预测,

    利用对数进行fit,和exp函数还原等。

    分享

    2018080741.png

    知识要点:

    lubridate包拆解时间 | POSIXlt

    利用决策树分类,利用随机森林预测

    利用对数进行fit,和exp函数还原

    训练集来自Kaggle华盛顿自行车共享计划中的自行车租赁数据,分析共享自行车与天气、时间等关系。数据集共11个变量,10000多行数据。

    https://www.kaggle.com/c/bike-sharing-demand

    首先看一下官方给出的数据,一共两个表格,都是2011-2012年的数据,区别是Test文件是每个月的日期都是全的,但是没有注册用户和随意用户。而Train文件是每个月只有1-20天,但有两类用户的数量。

    求解:补全Train文件里21-30号的用户数量。评价标准是预测与真实数量的比较。

    2018080742.png

    1.png

    首先加载文件和包

    library (lubridate)

    library (randomForest)

    library (readr)

    setwd ("E:")

    data <-read_csv ("train.csv")

    head (data)

    这里我就遇到坑了,用r语言缺省的read.csv死活读不出来正确的文件格式,换成xlsx更惨,所有时间都变成43045这样的怪数字。本来之前试过as.Date可以正确转换,但这次因为有时分秒,就只能用时间戳,但结果也不行。

    最后是下载了"readr"包,用read_csv语句,顺利解读。

    因为test比train日期完整,但缺少用户数,所以要把train和test合并。

    test$registered=0

    test$casual=0

    test$count=0

    data<-rbind(train,test)

    摘取时间:可以用时间戳,这里的时间比较简单,就是小时数,所以也可以直接截字符串。

    data$hour1<-substr

    (data$datetime,12,13)

    table(data$hour1)

    统计一下每个小时的使用总数,是这样(为什么介么整齐):

    2018080749.png

    6-hour1.png

    接下来是运用箱线图,看一下使用者和时间,周几这些的关系。为什么用箱线图而不用hist直方图,因为箱线图有离散点表达,下面也因此运用对数求fit

    从图中可以看出,在时间方面,注册用户和非注册用户的使用时间有很大不同。

    2018080743.png

    5-hour-regestered.png

    2018080744.png

    5-hour-casual.png

    2018080745.png

    4-boxplot-day.png

    接下来用相关系数cor检验用户,温度,体感温度,湿度,风速的关系。

    相关系数:变量之间的线性关联度量,检验不同数据的相关程度。

    取值范围[-1,1],越接近0越不相关。

    从运算结果可以看出,使用人群与风速呈负相关,比温度影响还大。

    2018080746.png

    cor.png

    接下来就是将时间等因素用决策树分类,然后用随机森林来预测。随机森林和决策树的算法。听起来很高大上,其实现在也很常用了,所以一定要学会。

    决策树模型是 一种简单易用的非参数分类器。它不需要对数据有任何的先验假设,计算速度较快,结果容易解释,而且稳健性强,不怕噪声数据和缺失数据。

    决策树模型的基本计 算步骤如下:先从n个自变量中挑选一个,寻找最佳分割点,将数据划分为两组。针对分组后数据,将上述步骤重复下去,直到满足某种条件。

    在决策树建模中需要解决的重要问题有三个:

    如何选择自变量

    如何选择分割点

    确定停止划分的条件

    做出注册用户和小时的决策树,

    train$hour1<-as.integer(train$hour1)

    d<-rpart (registered~hour1,data=train)

    rpart .plot(d) >

    2018080747.png

    3-raprt-hour1.png

    然后就是根据决策树的结果手动分类,所以还满占代码的...

    train$hour1

    <-as.integer(train$hour1)

    data$dp_reg=0

    data$dp_reg[data$hour1 <7.5]=1

    data$dp_reg[data$hour1> =22]=2

    data$dp_reg[data$hour1 >=9.5 & data$hour1<18]=3

    data$dp_reg[data$hour1> =7.5 & data$hour1<18]=4

    data$dp_reg[data$hour1> =8.5 & data$hour1<18]=5

    data$dp_reg[data$hour1> =20 & data$hour1<20]=6

    data$dp_reg[data$hour1> =18 & data$hour1<20]=7

    同理,做出 (小时 | 温度) X (注册 | 随意用户) 等决策树,继续手动分类....

    2018080748.png

    3-raprt-temp.png

    年份月份,周末假日等手动分类

    data$year_part=0

    data$month <-month(data$datatime)

    data$year_part [data$year=='2011']=1

    data$year_part [data$year=='2011' & data $month>3]

    = 2

    data$year_part[data$year=='2011' & data $month>6]

    = 3

    data$year_part[data$year=='2011' & data $month>9]

    = 4

    data$day_type=""

    data$day _type [data$holiday ==0 & data$workingday==0]

    ="weekend"

    data$day_type[data$holiday==1] ="holiday"

    data$day_type[data$holiday ==0 & data$workingday==1]

    ="working day"

    data$weekend=0

    data$weekend [data$day= ="Sunday"|data$day=

    =" Saturday "] =1

    接下来用随机森林语句预测

    在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。

    随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,再在其中选取最优的特征。这样决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。

    ntree指定随机森林所包含的决策树数目,默认为500,通常在性能允许的情况下越大越好;

    mtry指定节点中用于二叉树的变量个数,默认情况下数据集变量个数的二次方根(分类模型)或三分之一(预测模型)。一般是需要进行人为的逐次挑选,确定最佳的m值―摘自datacruiser笔记。这里我主要学习,所以虽然有10000多数据集,但也只定了500。就这500我的小电脑也跑了半天。

    train<-data

    set.seed (1234)

    train$logreg <-log(train$registered+1)

    test$logcas <-log(train$casual+1)

    fit1 <-randomForest (logreg~hour1+ workingday

    + day + holiday + day_ type+ temp_reg+ humidity

    + atemp + windspeed + season+ weather+ dp_ reg+

    weekend + year+year _part ,train ,importance =

    TRUE , ntree = 250)

    pred1 <-predict (fit1,train)

    train $logreg <-pred1

    这里不知道怎么回事,我的day和day_part加进去就报错,只有删掉这两个变量计算,还要研究修补。

    然后用exp函数还原

    train$registered<-exp(train$logreg)-1

    train$casual<-exp(train$logcas)-1

    train$count<-test$casual+train$registered

    最后把20日后的日期截出来,写入新的csv文件上传。

    train2<-train[as.integer

    (day(data$datetime))> = 20 ,]

    submit_final <-data.frame (datetime= test$

    datetime ,count= test$count)

    write.csv(submit _final,"submit_ final.csv

    ", row .names = F)

    展开全文
  • 分享知识要点:lubridate包拆解时间 | POSIXlt利用决策树分类,利用随机森林预测利用对数进行fit,和exp函数还原训练集来自Kaggle华盛顿自行车共享计划中的自行车租赁数据,分析共享自行车与天气、时间等关系。数据...

    分享

    1240

    知识要点:

    lubridate包拆解时间 | POSIXlt

    利用决策树分类,利用随机森林预测

    利用对数进行fit,和exp函数还原

    训练集来自Kaggle华盛顿自行车共享计划中的自行车租赁数据,分析共享自行车与天气、时间等关系。数据集共11个变量,10000多行数据。

    https://www.kaggle.com/c/bike-sharing-demand

    首先看一下官方给出的数据,一共两个表格,都是2011-2012年的数据,区别是Test文件是每个月的日期都是全的,但是没有注册用户和随意用户。而Train文件是每个月只有1-20天,但有两类用户的数量。

    求解:补全Train文件里21-30号的用户数量。评价标准是预测与真实数量的比较。

    1240

    1.png

    首先加载文件和包

    library(lubridate)

    library(randomForest)

    library(readr)

    setwd("E:")

    data<-read_csv("train.csv")

    head(data)

    这里我就遇到坑了,用r语言缺省的read.csv死活读不出来正确的文件格式,换成xlsx更惨,所有时间都变成43045这样的怪数字。本来之前试过as.Date可以正确转换,但这次因为有时分秒,就只能用时间戳,但结果也不行。

    最后是下载了"readr"包,用read_csv语句,顺利解读。

    因为test比train日期完整,但缺少用户数,所以要把train和test合并。

    test$registered=0

    test$casual=0

    test$count=0

    data<-rbind(train,test)

    摘取时间:可以用时间戳,这里的时间比较简单,就是小时数,所以也可以直接截字符串。

    data$hour1<-substr(data$datetime,12,13)

    table(data$hour1)

    统计一下每个小时的使用总数,是这样(为什么介么整齐):

    1240

    6-hour1.png

    接下来是运用箱线图,看一下使用者和时间,周几这些的关系。为什么用箱线图而不用hist直方图,因为箱线图有离散点表达,下面也因此运用对数求fit

    从图中可以看出,在时间方面,注册用户和非注册用户的使用时间有很大不同。

    1240

    5-hour-regestered.png

    1240

    5-hour-casual.png

    1240

    4-boxplot-day.png

    接下来用相关系数cor检验用户,温度,体感温度,湿度,风速的关系。

    相关系数:变量之间的线性关联度量,检验不同数据的相关程度。

    取值范围[-1,1],越接近0越不相关。

    从运算结果可以看出,使用人群与风速呈负相关,比温度影响还大。

    1240

    cor.png

    接下来就是将时间等因素用决策树分类,然后用随机森林来预测。随机森林和决策树的算法。听起来很高大上,其实现在也很常用了,所以一定要学会。

    决策树模型是 一种简单易用的非参数分类器。它不需要对数据有任何的先验假设,计算速度较快,结果容易解释,而且稳健性强,不怕噪声数据和缺失数据。

    决策树模型的基本计 算步骤如下:先从n个自变量中挑选一个,寻找最佳分割点,将数据划分为两组。针对分组后数据,将上述步骤重复下去,直到满足某种条件。

    在决策树建模中需要解决的重要问题有三个:

    如何选择自变量

    如何选择分割点

    确定停止划分的条件

    做出注册用户和小时的决策树,

    train$hour1<-as.integer(train$hour1)

    d<-rpart(registered~hour1,data=train)

    rpart.plot(d)

    1240

    3-raprt-hour1.png

    然后就是根据决策树的结果手动分类,所以还满占代码的...

    train$hour1<-as.integer(train$hour1)

    data$dp_reg=0

    data$dp_reg[data$hour1<7.5]=1

    data$dp_reg[data$hour1>=22]=2

    data$dp_reg[data$hour1>=9.5 & data$hour1<18]=3

    data$dp_reg[data$hour1>=7.5 & data$hour1<18]=4

    data$dp_reg[data$hour1>=8.5 & data$hour1<18]=5

    data$dp_reg[data$hour1>=20 & data$hour1<20]=6

    data$dp_reg[data$hour1>=18 & data$hour1<20]=7

    同理,做出 (小时 | 温度) X (注册 | 随意用户) 等决策树,继续手动分类....

    1240

    3-raprt-temp.png

    年份月份,周末假日等手动分类

    data$year_part=0

    data$month<-month(data$datatime)

    data$year_part[data$year=='2011']=1

    data$year_part[data$year=='2011' & data$month>3]=2

    data$year_part[data$year=='2011' & data$month>6]=3

    data$year_part[data$year=='2011' & data$month>9]=4

    data$day_type=""

    data$day_type[data$holiday==0 & data$workingday==0]="weekend"

    data$day_type[data$holiday==1]="holiday"

    data$day_type[data$holiday==0 & data$workingday==1]="working day"

    data$weekend=0

    data$weekend[data$day=="Sunday"|data$day=="Saturday"]=1

    接下来用随机森林语句预测

    在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。

    随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,再在其中选取最优的特征。这样决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。

    ntree指定随机森林所包含的决策树数目,默认为500,通常在性能允许的情况下越大越好;

    mtry指定节点中用于二叉树的变量个数,默认情况下数据集变量个数的二次方根(分类模型)或三分之一(预测模型)。一般是需要进行人为的逐次挑选,确定最佳的m值—摘自datacruiser笔记。这里我主要学习,所以虽然有10000多数据集,但也只定了500。就这500我的小电脑也跑了半天。

    train<-data

    set.seed(1234)

    train$logreg<-log(train$registered+1)

    test$logcas<-log(train$casual+1)

    fit1<-randomForest(logreg~hour1+workingday+day+holiday+day_type+temp_reg+humidity+atemp+windspeed+season+weather+dp_reg+weekend+year+year_part,train,importance=TRUE,ntree=250)

    pred1<-predict(fit1,train)

    train$logreg<-pred1

    这里不知道怎么回事,我的day和day_part加进去就报错,只有删掉这两个变量计算,还要研究修补。

    然后用exp函数还原

    train$registered<-exp(train$logreg)-1

    train$casual<-exp(train$logcas)-1

    train$count<-test$casual+train$registered

    最后把20日后的日期截出来,写入新的csv文件上传。

    train2<-train[as.integer(day(data$datetime))>=20,]

    submit_final<-data.frame(datetime=test$datetime,count=test$count)

    write.csv(submit_final,"submit_final.csv",row.names=F)

    大功告成!

    github代码加群

    原来的示例是炼数成金网站的kaggle课程第二节,基本按照视频的思路。因为课程没有源代码,所以要自己修补运行完整。历时两三天总算把这个功课做完了。下面要修正的有:

    好好理解三个知识点(lubridate包/POSIXlt,log线性,决策树和随机森林);

    用WOE和IV代替cor函数分析相关关系;

    用其他图形展现的手段分析

    随机树变量重新测试

    学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群

    626062078,我们一起学Python!

    完成了一个“浩大完整”的数据分析,还是很有成就感的!

    展开全文
  • 分享知识要点:lubridate包拆解时间 | POSIXlt利用决策树分类,利用随机森林预测利用对数进行fit,和exp函数还原训练集来自Kaggle华盛顿自行车共享计划中的自行车租赁数据,分析共享自行车与天气、时间等关系。数据...

    分享

    1240

    知识要点:

    lubridate包拆解时间 | POSIXlt

    利用决策树分类,利用随机森林预测

    利用对数进行fit,和exp函数还原

    训练集来自Kaggle华盛顿自行车共享计划中的自行车租赁数据,分析共享自行车与天气、时间等关系。数据集共11个变量,10000多行数据。

    https://www.kaggle.com/c/bike-sharing-demand

    首先看一下官方给出的数据,一共两个表格,都是2011-2012年的数据,区别是Test文件是每个月的日期都是全的,但是没有注册用户和随意用户。而Train文件是每个月只有1-20天,但有两类用户的数量。

    求解:补全Train文件里21-30号的用户数量。评价标准是预测与真实数量的比较。

    1240

    1.png

    首先加载文件和包

    library(lubridate)

    library(randomForest)

    library(readr)

    setwd("E:")

    data<-read_csv("train.csv")

    head(data)

    这里我就遇到坑了,用r语言缺省的read.csv死活读不出来正确的文件格式,换成xlsx更惨,所有时间都变成43045这样的怪数字。本来之前试过as.Date可以正确转换,但这次因为有时分秒,就只能用时间戳,但结果也不行。

    最后是下载了"readr"包,用read_csv语句,顺利解读。

    因为test比train日期完整,但缺少用户数,所以要把train和test合并。

    test$registered=0

    test$casual=0

    test$count=0

    data<-rbind(train,test)

    摘取时间:可以用时间戳,这里的时间比较简单,就是小时数,所以也可以直接截字符串。

    data$hour1<-substr(data$datetime,12,13)

    table(data$hour1)

    统计一下每个小时的使用总数,是这样(为什么介么整齐):

    1240

    6-hour1.png

    接下来是运用箱线图,看一下使用者和时间,周几这些的关系。为什么用箱线图而不用hist直方图,因为箱线图有离散点表达,下面也因此运用对数求fit

    从图中可以看出,在时间方面,注册用户和非注册用户的使用时间有很大不同。

    1240

    5-hour-regestered.png

    1240

    5-hour-casual.png

    1240

    4-boxplot-day.png

    接下来用相关系数cor检验用户,温度,体感温度,湿度,风速的关系。

    相关系数:变量之间的线性关联度量,检验不同数据的相关程度。

    取值范围[-1,1],越接近0越不相关。

    从运算结果可以看出,使用人群与风速呈负相关,比温度影响还大。

    1240

    cor.png

    接下来就是将时间等因素用决策树分类,然后用随机森林来预测。随机森林和决策树的算法。听起来很高大上,其实现在也很常用了,所以一定要学会。

    决策树模型是 一种简单易用的非参数分类器。它不需要对数据有任何的先验假设,计算速度较快,结果容易解释,而且稳健性强,不怕噪声数据和缺失数据。

    决策树模型的基本计 算步骤如下:先从n个自变量中挑选一个,寻找最佳分割点,将数据划分为两组。针对分组后数据,将上述步骤重复下去,直到满足某种条件。

    在决策树建模中需要解决的重要问题有三个:

    如何选择自变量

    如何选择分割点

    确定停止划分的条件

    做出注册用户和小时的决策树,

    train$hour1<-as.integer(train$hour1)

    d<-rpart(registered~hour1,data=train)

    rpart.plot(d)

    1240

    3-raprt-hour1.png

    然后就是根据决策树的结果手动分类,所以还满占代码的...

    train$hour1<-as.integer(train$hour1)

    data$dp_reg=0

    data$dp_reg[data$hour1<7.5]=1

    data$dp_reg[data$hour1>=22]=2

    data$dp_reg[data$hour1>=9.5 & data$hour1<18]=3

    data$dp_reg[data$hour1>=7.5 & data$hour1<18]=4

    data$dp_reg[data$hour1>=8.5 & data$hour1<18]=5

    data$dp_reg[data$hour1>=20 & data$hour1<20]=6

    data$dp_reg[data$hour1>=18 & data$hour1<20]=7

    同理,做出 (小时 | 温度) X (注册 | 随意用户) 等决策树,继续手动分类....

    1240

    3-raprt-temp.png

    年份月份,周末假日等手动分类

    data$year_part=0

    data$month<-month(data$datatime)

    data$year_part[data$year=='2011']=1

    data$year_part[data$year=='2011' & data$month>3]=2

    data$year_part[data$year=='2011' & data$month>6]=3

    data$year_part[data$year=='2011' & data$month>9]=4

    data$day_type=""

    data$day_type[data$holiday==0 & data$workingday==0]="weekend"

    data$day_type[data$holiday==1]="holiday"

    data$day_type[data$holiday==0 & data$workingday==1]="working day"

    data$weekend=0

    data$weekend[data$day=="Sunday"|data$day=="Saturday"]=1

    接下来用随机森林语句预测

    在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。

    随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,再在其中选取最优的特征。这样决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。

    ntree指定随机森林所包含的决策树数目,默认为500,通常在性能允许的情况下越大越好;

    mtry指定节点中用于二叉树的变量个数,默认情况下数据集变量个数的二次方根(分类模型)或三分之一(预测模型)。一般是需要进行人为的逐次挑选,确定最佳的m值—摘自datacruiser笔记。这里我主要学习,所以虽然有10000多数据集,但也只定了500。就这500我的小电脑也跑了半天。

    train<-data

    set.seed(1234)

    train$logreg<-log(train$registered+1)

    test$logcas<-log(train$casual+1)

    fit1<-randomForest(logreg~hour1+workingday+day+holiday+day_type+temp_reg+humidity+atemp+windspeed+season+weather+dp_reg+weekend+year+year_part,train,importance=TRUE,ntree=250)

    pred1<-predict(fit1,train)

    train$logreg<-pred1

    这里不知道怎么回事,我的day和day_part加进去就报错,只有删掉这两个变量计算,还要研究修补。

    然后用exp函数还原

    train$registered<-exp(train$logreg)-1

    train$casual<-exp(train$logcas)-1

    train$count<-test$casual+train$registered

    最后把20日后的日期截出来,写入新的csv文件上传。

    train2<-train[as.integer(day(data$datetime))>=20,]

    submit_final<-data.frame(datetime=test$datetime,count=test$count)

    write.csv(submit_final,"submit_final.csv",row.names=F)

    大功告成!

    github代码加群

    原来的示例是炼数成金网站的kaggle课程第二节,基本按照视频的思路。因为课程没有源代码,所以要自己修补运行完整。历时两三天总算把这个功课做完了。下面要修正的有:

    好好理解三个知识点(lubridate包/POSIXlt,log线性,决策树和随机森林);

    用WOE和IV代替cor函数分析相关关系;

    用其他图形展现的手段分析

    随机树变量重新测试

    学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群

    626062078,我们一起学Python!

    完成了一个"浩大完整”的数据分析,还是很有成就感的!

    展开全文
  • 数据分析中,很基础又关键的一步就是数据清洗,对原始数据处理会花掉整个分析过程的很一部分时间,这是因为如果前期数据没有处理好,会影响后续的分析以及建模。那么当我们拿到一份数据,该如何对数据进行处理...

    d78700b13c7ab089adadb1b8cddc3bb0.png

    数据分析笼统来说,大概分为五个步骤:提出问题、理解数据、数据清洗、构建模型、数据可视化。在数据分析中,很基础又关键的一步就是数据清洗,对原始数据的处理会花掉整个分析过程的很大一部分时间,这是因为如果前期数据没有处理好,会影响后续的分析以及建模。那么当我们拿到一份数据,该如何对数据进行处理和分析呢?下面以药店销售数据为例,进行如下分析:

    导入pandas、numpy包及excel原始数据:

    import pandas as pd
    import numpy as np
    filename = r'C:安装包朝阳医院2018年销售数据.xlsx'
    salesDf = pd.read_excel(filename, sheet_name='Sheet1', dtype = 'object')
    salesDf.head()
    salesDf.shape

    a6265267058521d45ed7c0699c3db845.png

    1.提出问题

    通过这些数据我要分析什么?这个可能一开始是来自于老板或者其他部门的需求,他们提出需求后,我们来进行分析,在这个案例里,我们收到的需求是分析“月均消费次数”、“月均消费金额”、“客单价”、“消费趋势”。

    2.理解数据

    明确了分析目的之后,对原始数据进行观察,这个数据是一个6578行、7列的数据集。列属性分别为:购药时间、社保卡号、商品编码、销售数量、应收金额、实收金额,type为object;除此之外,还要观察数据结构以及数据的一些逻辑关联,形成一个大概的分析思路后,再进行下一步数据清洗工作。

    #查看数据集的shape及列属性的type
    salesDf.shape
    salesDf.dtypes

    3.数据清洗

    数据清洗是要反复多次,才可以拿到我们想要数据,大致有如下6个步骤:

    • 选择子集合

    就是选择我们需要的字段,将多余的字段删掉

    • 列名重命名

    有一些列名可能不是很直观,我们可以更改为更好理解的列名,如:将本案例中的‘购药时间’改为‘销售时间’。

    salesColStr = {'购药时间':'销售时间'}
    salesDf.rename(columns=salesColStr, inplace=True)
    salesDf

    c8122e665b0c91f5c2b9d051c838620c.png
    • 缺失数据处理

    python中数据有3种缺失值:

    ①None;②Na 表示 not available;③NaN 浮点型 not a number 表示缺失数据

    再回到我们的案例中,我们要分析“月均消费次数”、“月均消费金额”、“客单价”、“消费趋势”,所以销售时间、社保卡号、消费金额 都不可以缺失,如果缺失了就是无意义的数据。在删除缺失值的过程中,要经常用shape监控删除后的数据集的大小变化。

    salesDf = salesDf.dropna(subset=['销售时间','社保卡号'],how='any')
    • 数据类型转换

    观察列属性的type,将金额数量转换成float,将日期的星期去掉,日期和星期之间是用空格隔开的,所以用split进行拆分,然后用pandas的to_datetime函数将目标字段type转换为datetime,并将格式设为'%Y-%m-%d'。转换完成后执行dtypes查看是否转换成功,然后再查看一下新的数据集,是否空值,如果有空值记得drop掉。

    salesDf['销售数量'] = salesDf['销售数量'].astype('float')
    salesDf['应收金额'] = salesDf['应收金额'].astype('float')
    salesDf['实收金额'] = salesDf['实收金额'].astype('float')
    def splitSalesTime(timeColStr):
        timelist=[]
        for value in timeColStr:
            dateStr=value.split(' ')[0]
            timelist.append(dateStr)
        timeSer = pd.Series(timelist)
        return timeSer
    timeColStr = salesDf.loc[:,'销售时间']
    datetime = splitSalesTime(timeColStr)
    salesDf.loc[:,'销售时间'] = datetime
    salesDf.loc[:,'销售时间'] = pd.to_datetime(salesDf.loc[:,'销售时间'],format='%Y-%m-%d',errors='coerce')
    salesDf.dtypes
    salesDf
    salesDf = salesDf.dropna(subset='销售时间',how='any')
    salesDf.shape

    c83460509335d4d5a95554a31b672f98.png

    4cc716b5335aaccc028c669c750dbf2a.png
    • 数据排序

    由于我们要分析“月均消费次数”和“月均消费金额”这两个跟销售时间有关的指标,所以我们先对新的数据集按“销售时间”进行排序,排序后发现index就乱掉了,reset一下index就可以。

    salesDf = salesDf.sort_values(by='销售时间',ascending=True)
    salesDf = salesDf.reset_index(drop=True)
    salesDf.head()

    3988df375ec42c844b6dc110d5d975f3.png
    reset之前的index

    63ca86b5d514fd8a3f7412d7e854e5de.png
    reset之后的index
    • 异常值处理

    得到我们想要的数据集后,下一步可以进行简要的统计描述分析,执行descibe()函数,可以得到平均数、标准差、最大值、最小值以及四分位数。能从执行结果中最为直接的看到,最小值销售量、应收金额、实收金额都是负数,这个是不符合常理的,所以我们要将这个异常值用条件切片的方式剔除。

    salesDf.describe()

    5ba26f97ee326a6df63b8e442536a066.png
    剔除异常值前的结果
    #剔除异常值
    salesDf = salesDf.loc[salesDf.loc[:,'销售数量']>0,:]
    salesDf.describe()

    d6195da1a74480fa67416d731dd4c45e.png
    剔除异常值后的结果

    4.构建业务指标

    • 业务指标1:月均消费次数(所有人的总消费天数/月份数)

    指标解读:月均消费次数,是一个人一天无论消费几次都记一次,其实就是消费天数的衡量,然后进行累加,最后把所有人的消费次数加在一起与月份做除法。需要注意的是数据中存在一天消费多次的人群,需要进行去重。

    第一步,用 drop_duplicates() 去重,得到新子集 kpil_Df 并重复之前的操作进行排序和reset index;

    kpil_Df = salesDf.drop_duplicates(subset=['销售时间','社保卡号'])
    kpil_Df = kpil_Df.sort_values(by='销售时间',ascending=True)
    kpil_Df = kpil_Df.reset_index(drop=True)

    第二步,求总消费次数 totalI;

    totalI = kpi1_Df.shape[0]

    第三步,求月份数monthI。注意日期相减后要加 '.days' 用来转化成 int;这里month是用地板除求商。

    startTime=kpi1_Df.loc[0,'销售时间']
    endTime=kpi1_Df.loc[totalI-1,'销售时间']
    daysI=(endTime-startTime).days
    monthI=daysI//30

    最后,可得到月均消费次数为平均890次/月

    kpi1_I=totalI // monthsI
    print('月均消费次数=',kpi1_I)

    业务指标2:月均消费金额(总消费金额/月份)

    指标解读:用总消费金额与月份做除法。(注意:之前去重得到结果不影响月份,月份可以沿用之前处理好的monthI,但消费金额要用 salesDf 这个数据集来计算)

    执行如下代码,可得到月均消费结果为50,668.35元

    totalMoneyF=salesDf.loc[:,'实收金额'].sum()
    monthMoneyF=totalMoneyF / monthsI
    print('月均消费金额=',monthMoneyF)

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

    指标解读:客单价(per customer transaction)是指商场(超市)每一个顾客平均购买商品的金额,客单价也即是平均交易金额。

    执行如下代码,可得到 客单价≈56.91元

    pct=totalMoneyF / totalI
    print('客单价:',pct)

    业务指标4:消费趋势

    指标解读:每个月消费额的波动趋势,要按月份进行聚类分析

    先复制一份 salesDf 数据,避免聚类时对已清洗好的数据造成影响

    groupDf = salesDf

    第一步,重命名行名(index)为销售时间所在列的值

    groupDf.index = goupDf['销售时间']

    第二步,按销售月份进行分组

    gb = groupDf.groupby(groupDf.index.month)

    第三步,计算每个月的消费总额,并绘制折线图

    mounthDf=gb.sum()
    mouthDf
    import matplotlib.pyplot as plt
    monthDf.plot(kind='line')

    bab941dc063586bf1dd876b5361c25af.png

    8f126ff94444168aba756461c91f33ec.png

    从折线图中,我们可以看到1、4、6月份消费额较高,2、7月消费额较低,具体原因还要结合实际业务情况进行进一步分析。

    到这里 月均消费次数、月均消费金额、客单价格、消费趋势 这4个业务指标的数据,我们已经全部得到啦。

    展开全文
  • 系列文章总目录:Python数据分析及可视化实例目录强大到没有朋友的科学计算库,不知道怎么介绍ta!牛张若愚出了厚本的《Python 科学计算》第二版《python科学计算第二版》完整版-CSDN下载里面包罗万象,就不做搬运...
  • Python数据分析实战(高清版)PDF百度网盘链接:https://pan.baidu.com/s/1nlHM1IW8MYg3z79TUwIsWg提取码:ux8t复制这段...本书展示了如何利用Python 语言的强大功能,以最小的编程代价进行数据的提取、处理和分析,...
  • 问题是这样的, 我是我们学校的寒招队伍的负责人。但是管理的人数实在是太多了。所以在这个地方的,我就想用下脚本去帮助自己进行管理。从效果来看,还是非常方便的。 故事情节: 这次,我和两三个小伙伴们要...
  • 原标题:python序列处理场景案例Python数据结构和算法解决方案拓展解决方案拓展什么是序列序列的例子案例一:将序列分解为单独的变量案例二:从任意长度的可迭代对象是分解元素Python数据结构和算法Python内置了...
  • 这篇文章主要介绍了Python使用Pandas读写Excel实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下Pandas是python的一个数据分析包,纳入了大量库和一些...
  • 学习python数据处理(NumPy) 前言 NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 NumPy 是一个运行速度非常快的数学库,...
  • 最近在弄一个项目分析的时候,看到有一个后缀为”.sqlite”的数据文件,由于以前没怎么接触过,就想着怎么用python来打开并进行数据分析与处理,于是稍微研究了一下。 SQLite是一款非常流行的关系型数据库,由于它...
  • 语料库方法已经成为语言学、新闻传播学、教育学等人文社会科学研究领域不可或缺的重要研究手段。Python语言具有强大的语料数据处理...本书通过浅显语言和丰富实例,深入浅出介绍了常用语料数据处理方法。目录文科...
  • Python 与 Excel 表格综合实例处理校运会报名 Excel 表格,多表整合、数据汇总及统计实例前言:需求:主要思路及实现代码:1、先获取目标文件路径下的所有Excel文件:2、读取所有Excel表格数据:3、按需求汇总数据...
  • (1)没有高深理论,每章都以实例为主,读者参考书中源码运行,就能得到与书中一样的结果。...《Python数据分析与可视化从入门到精通》以“零基础”为起点,系统地介绍了Python数据处理与可视化分析方面...
  • 偶然间发现各路牛的一些python创作,不得不说python是一个比较全面的语言,附上网址以后可能需要用到python视觉处理,爬虫数据分析的时候可以用的上吧2333python小项目:...
  • CSDN全站首发——Python数据处理与特征工程 课程聚焦数据科学中,数据清洗与分析前的特征提取过程,解决数据科学中最重要的原始数据清洗和特征提取。 ...
  • 空间数据处理常常是复杂而费时的,而且其过程具有很强的重复性,基于窗口的应用程序极程度上限制了处理数据的能力,有必要进行自动化的处理。任何可以支持COM的脚本语言都可以执行ArcGIS的地理处理工具,如...
  • 今天小编就为大家分享一篇Python使用pandas处理CSV文件的实例讲解具有很好的参考价值希望对大家有所 帮助 一起跟随小编过来看看吧 Python中有许多方便的库可以用来进行数据处理尤其是Numpy和Pandas,再搭配matplot...
  • 图像的数组表示 RGB 图像一半用RGB色彩模式,即每个像素点的颜色由红(R)、绿(G)、蓝(B)组成...是一个具有强大图像处理能力的第三方库,可使用 pip install pillow 进行安装,在Anaconda 中是已经安装好的;Image
  • Python中有许多方便的库可以用来进行数据处理,尤其是Numpy和Pandas,再搭配matplot画图专用模块,功能十分强大。 CSV(Comma-Separated Values)格式的文件是指以纯文本形式存储的表格数据,这意味着不能简单的使用...
  • 数据分析离不开数据库,如何使用python连接MySQL数据库,并进行增删改查操作呢?我们还会遇到需要将大批量数据导入数据库的情况,又该如何使用Python进行大数据的高效导入呢?本文会一一讲解,并配合代码和实例。一...
  • Python金融大数据分析

    2017-11-27 13:37:43
    , 《Python金融大数据分析》总计分为3部分,共19章,第1部分介绍了Python在金融学中的应用,其内容涵盖了Python用于金融行业的原因、Python的基础架构和工具,以及Python在计量金融学中的一些具体入门实例;...
  • 图片验证码算是网络数据采集上的一道拦路虎,虽然有诸多公开的ORC接口、云打码平台,一旦规模应用起来,还是内部写程序进行识别处理比较好。而自己写代码进行识别的话,又有很多种方案,比如最近火热的神经网络,...

空空如也

1 2 3 4 5 ... 20
收藏数 488
精华内容 195
关键字:

python 大数据处理 实例

python 订阅