Kaggle -- Shelter Animal Outcomes

最近在Kaggle上做了一个数据挖掘的比赛,是一个分类的问题,收获良多。故此将比赛的过程记录了下来。

竞赛地址

Kaggle–Shelter Animal Outcomes


题目大意

  在美国,每年大约有760万伴侣动物被动物收容所收容。大多数动物是被它们的主人主动放弃,而另一些则是由于种种的意外情况而进入收容所。最终,有些动物足够幸运找到了新的归宿,但另一些不那么幸运的则最终被安乐死。美国每年大约有270万的猫狗被执行安乐死。
  这次的比赛使用的是来自Austin的动物收容所的数据,其中包括动物的品种,颜色,性别和年龄,要求参赛者预测每只动物的最终结局。这些结局包括:被领养、死亡、安乐死、归还所有者和转移。其中训练集和测试集是随机划分的。
  最后输出测试集种每个动物的每一种结局的可能性即可。


给定数据集描述

  给定的数据集中一共包括10个字段,其字段的含义如下:

  • 数据集说明
    • AnimalID : 动物的ID编号
    • Name : 动物的名称,若动物没有名字次字段为空
    • DateTime : 进入收容所的日期 (例:2014/2/12 18:22:00)
    • OutcomeType : 动物的最终结局 ,有5种可能取值:Adoption(被领养)、Died(死亡)、Euthanasia(安乐死)、Return_to_owner(返回原主人)、Transfer(转移)
    • OutcomeSubtype : 是对动物结局的补充说明,好像没有什么用
    • AnimalType : 动物的类型,只有两种取值即Dog(狗)、Cat(猫)
    • SexuponOutcome : 动物的性别和生育能力,取值Neutered Male(雄性动物不能生育)、Spayed Female(雌性动物不能生育)、Intact Male(雄性动物能够生育)、Intact Female(雌性动物能生育)、Unknown(未知)
    • AgeuponOutcome : 动物的年龄(例如:1 year,3 weeks)
    • Breed : 动物的品种(例如: Shetland Sheepdog Mix、Domestic Shorthair Mix)
    • Color : 动物的毛色(例如:Brown/White、Cream Tabby)

初次尝试

数据准备

  首先当然是将所给的数据集读入进来:

    train_data <- read.csv("train.csv",stringsAsFactors = F)
    test_data <- read.csv("test.csv",stringsAsFactors = F) 

    str(train_data)
    train<-train_data[-1]
    test<-test_data[-1]
    library(dplyr)
    full <- bind_rows(train, test)

  可以看到所读入的数据内容:
  full数据集

特征提取

1.将动物有没有姓名作为一个特征:

full$Name[full$Name==""]<-"No"
full$Name[full$Name!="No"]<-"Yes"
![full$Name](http://img.blog.csdn.net/20170103223736505?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmFpZHVfMzM4OTM4ODA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

2.处理AgeuponOutcome属性

full$TimeValue <- sapply(full$AgeuponOutcome,  
                         function(x) strsplit(x, split = ' ')[[1]][1])
full$UnitofTime <- sapply(full$AgeuponOutcome,  
                          function(x) strsplit(x, split = ' ')[[1]][2])
full$UnitofTime <- gsub('s', '', full$UnitofTime)

full$TimeValue  <- as.numeric(full$TimeValue)

multiplier <- ifelse(full$UnitofTime == 'day', 1,
                     ifelse(full$UnitofTime == 'week', 7,
                            ifelse(full$UnitofTime == 'month', 30,
                                   ifelse(full$UnitofTime == 'year', 365, NA))))

# 转换成天
full$AgeinDays <- full$TimeValue * multiplier

full$AgeinDays
这样就可以将动物的年龄统一为天

3.将SexuponOutcome 拆分成两个特征,即性别和是否能生育,Unknown的情况认为是缺失

full$SexuponOutcome[full$SexuponOutcome=="Unknown"]<- "Unknown Unknown"

full$bear<-sapply(full$SexuponOutcome,  
                 function(x) strsplit(x, split = ' ')[[1]][1])
full$sex<-sapply(full$SexuponOutcome,  
                  function(x) strsplit(x, split = ' ')[[1]][2])

full$bear[full$bear=="Intact"]<-"Can"
full$bear[full$bear=="Spayed"]<-"Cannot"
full$bear[full$bear=="Neutered"]<-"Cannot"

full$bear[full$bear=="Unknown"]<-NA
full$sex[full$sex=="Unknown"]<-NA

sex和bear

4.处理DateTime属性

首先通过lubridate的相关函数获取动物进入收容所的年份、月份、星期以及小时

library(lubridate)
full$Hour    <- hour(full$DateTime)
full$Weekday <- wday(full$DateTime)
full$Month   <- month(full$DateTime)
full$Year    <- year(full$DateTime)

为方便处理将Hour属性压缩:

## 将之划分为早上,下午,傍晚,深夜四类型
full$TimeofDay <- ifelse(full$Hour > 5 & full$Hour < 11, 'morning',
                         ifelse(full$Hour > 10 & full$Hour < 16, 'midday',
                                ifelse(full$Hour > 15 & full$Hour < 20, 'lateday', 'night'))

以同样的方式处理Weekday属性

# 将时间划分为工作日和周末
full$isWorkday<- ifelse(full$Weekday<=5,'WorkDay',
                        ifelse(full$Weekday>5,"Rest",NA))

时间特征

5.处理Breed 属性

#设置属性表示动物是否是混合品种,属性为“Yes”或“No”
full$IsMix <- ifelse(grepl('Mix', full$Breed),"Yes","No")

为方便处理,将动物的品种去掉Mix后设为/之前的品种

# 设置动物的品种为第一个单词
full$SimpleBreed <- sapply(full$Breed, 
                           function(x) gsub(' Mix', '', 
                                            strsplit(x, split = '/')[[1]][1]))

品种特征

6.处理Color属性

# 设置一个属性标志其颜色是否是纯色的
full$isPureColor <- ifelse(grepl('/| ',full$Color),"Pure","Mix")

为方便处理,将杂色动物的杂色的第一种颜色作为动物的毛皮颜色

# 对于杂色的动物,取'/'的前一种颜色作为其颜色属性
full$SimpleColor <- sapply(full$Color, 
                           function(x) strsplit(x, split = '/| ')[[1]][1])

动物颜色特征

7.将AnimalType 直接作为特征

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值