-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproje.R
196 lines (120 loc) · 6.49 KB
/
proje.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#Titanik veri seti ile KAGGLE
#veriyi birleştirelim. öncelikle verileri eşitlemek lazım. Bu yüzden test'e survive sütunu ekleyelim
test$Survived = NA #sütunlar eşitlendi
tam.veri = rbind(train,test)
str(tam.veri)
install.packages("dplyr")
library(dplyr)
#veri Transformansyonları
?mutate #mutate () yeni değişkenler ekler ve mevcut olanları korur; transmute ()
#yeni değişkenler ekler ve mevcut olanları çıkarır.
#Yeni değişkenler aynı ada sahip mevcut değişkenlerin üzerine yazılır.
#Değişkenler, değerleri NULL olarak ayarlanarak kaldırılabilir.
tam.veri<-tam.veri %>% mutate(Survived=factor(Survived),Pclass=factor(Pclass),Name=factor(Name),
Sex=factor(Sex))
tam.veri<-tam.veri%>% mutate(Name=as.character(Name))
library(ggplot2)
gorsel.veri<-ggplot(tam.veri[1:891,])
rm(gorsel.veri)#silmek için
#Sınıfa göre hayatta kalıp kalmama
p1= ggplot(tam.veri[1:891,]) + geom_bar(mapping = aes(x = Pclass, fill = Survived),
position = "fill")
#yas ile hayatta kalıp kalmama
summary(tam.veri)
p2= ggplot(tam.veri[1:891,]) + geom_freqpoly(mapping = aes(x = Age, color = Survived),
bins = 50)+theme(legend.position = "none")
#bilet fiyatları ile hayatta kalıp kalmama
p3=ggplot(tam.veri[1:891,]) + geom_freqpoly(mapping = aes(x = Fare, color = Survived),
bins = 100)+theme(legend.position = "none")
#aile ile ve yanlız kişilerin hayatta kalıp kalmama verisi
p4=ggplot(tam.veri[1:891,]) + geom_bar(mapping = aes(x = SibSp+Parch, color = Survived),
position = "fill")+theme(legend.position = "none")
#bütün verileri bir karede incelemek istiyorum
library(ggpubr)
ggarrange(p1,p2,p3,p4)
#NA yazılı hücreleri nasıl doldurabiliriz ?
?is.na#Herhangi bir fonksiyonun NA değeri taşayıp taşımadığını döndürür. 1=TRUE 0=FALSE
sum(is.na(tam.veri$Sex))#Hepsinin sonucu gördüm
?apply #Bir dizi veya matrisin kenar boşluklarına bir işlev uygulanarak elde edilen bir
# vektör veya dizi veya değerler listesi döndürür.Satır bazlı veya sütu bazlı işlem yapar
# 1 yazarsak satır, 2 yazarsak sütun bazlı olur
apply(tam.veri, 2, function(x) sum(is.na(x)))#tablonun kaçtane NA içerdiğini görmek istedim.
median(tam.veri[!is.na(tam.veri$Age),]$Age)#! işareti ile tersine döndürerek sayısal değerleri getirtiyorum NA'lar gelmiyor
## Regular Expressions (Düzenli İfadeler) ##
Unvan<- sub(".*,.([^.]*)\\..*","\\1",tam.veri$Name)
# . herhangi bir karakteri kapsar
# * yanına yıldız burdaki karakterin birden çok tekrar ettiği
# , virgül koydum ayırdım çünkü bir çoğunda virgül vardı ve ayırdım
# . tekrar koydum boşluğu kapsamakta
# ([]) seçim grubu oluşturdum.
# \\noktanın kendisi gelecek dedim
# .* geriye kalan tüm karakterleri ifade etmek için
# \\1 sadece bu grubu çekmek istiyorum dedim
# tam.veri$Name sütununa uygulacam dedim
#https://cheatography.com/davechild/cheat-sheets/regular-expressions/ adresine bakılarak semboller anlaşılabilir.
tam.veri$Unvan<-Unvan
str(tam.veri$Unvan)
#Unvanı faktore ceviriyorum
tam.veri<- tam.veri%>%mutate(Unvan=factor(Unvan))
levels(tam.veri$Unvan)
install.packages("forcats")#faktorleri manipüle etmek için
library(forcats)
library(dplyr)
library(ggplot2)
?fct_collapse #Collapse factor levels into manually defined groups
#fct_collapse ile küçük bir gruba indirgedik
tam.veri=tam.veri%>%mutate(Unvan=
fct_collapse(Unvan,"Miss" = c("Mlle","Ms"),"Mrs" = "Mme",
"Ranked"= c("Major", "Dr","Capt","Col","Rev"),
"Royalty" = c("Lady","Dona","the Countess","Don","Sir","Jonkheer")))
levels(tam.veri$Unvan)
ggplot(tam.veri[1:839,])+ geom_bar(mapping = aes(x = Unvan,fill = Survived),position = "fill")
##NA sütunları dolduralım
tam.veri=tam.veri%>% group_by(Unvan)%>% #na.rm=sil 'NA' demek #1 olmasının sebebi bir 0' a izin veriyoruz 22.0 gibi 2 olsaydı 22.00 olurud
mutate(Age = ifelse(is.na(Age),round(median(Age, na.rm = T),1),Age))
#eğer T ise NA döndür(round = yuvarlama (22.3 ü 22 yapar))
sum(is.na(tam.veri$Age))#NA kontrolu yapıyorum
##Kabinler biliniyor mu bilinmiyor mu ?
kabinBiliniyor = ifelse(is.na(tam.veri$Cabin) == TRUE , FALSE,TRUE)
tam.veri$kabinBiliniyor <- kabinBiliniyor
ggplot(tam.veri[1:891,]) + geom_bar(mapping = aes(x = kabinBiliniyor,
fill = Survived),position = "fill")
#Ben bu bilgiden kabinlerinin bilinmeyenlerin fakir oldukları için kayıt tutulmadığı, önemsenmediği sonucunu çıkarıyorum.
#Fare sütundaki NA sütununu dolduralım. En yakın değerle dolduralım.
tam.veri%>% filter(is.na(Fare))
# Tek bir kişiymiş\ 3.sınıf bir kişi olduğunu düşünüyorum
######################################################################################################
#PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked Unvan
#<dbl> <fct> <fct> <chr> <fct> <dbl> <dbl> <dbl> <chr> <dbl> <chr> <chr> <fct>
# 1 1044 NA 3 Storey, Mr~ male 60.5 0 0 3701 NA NA S Mr
#######################################################################################################
Fare = ifelse(is.na(tam.veri$Fare),round(median(tam.veri$Fare, na.rm = T),1),tam.veri$Fare)
tam.veri$Fare <- Fare
#veri gerçek verilere aktarıyorum
train<-tam.veri[1:891,]
test<-tam.veri
## Validation
#verinin %80 ile algoritma eğitimi için , %20si ile test oluşturuyoruz.
891*0.8 #%80 = 0.8 ->[1] 712.8
train.1<-train[1:710,]
test.1<-train[711:891,]
#Random Forest -Karar Ağaç Algoritması
library(randomForest)
?randomForest
rf<-randomForest(Survived ~ Pclass + Sex +
Age + SibSp + Parch + Fare +Unvan+kabinBiliniyor,
data = train.1, mtry = 3, ntree = 1000)#kaçtane ağaç istiyorum = 1000 adet
#mtry = x -> kaçar tane değişken (sayının kare kökü kadar sayı
# girilmesi gerekli 7 değilken tanımladığımız için x yerine 3 rakamını koydum)
tahminler <- predict(rf,test.1[,c(3,5,6,7,8,10,13,14)])
#gerçek verilere ekliyorum
tahminler.1 <- predict(rf,test[,c(3,5,6,7,8,10,13,14)])
table(tahminler,test.1$Survived)
sum(test.1$Survived == 1)
length(tahminler.1)
Finish.Titanic <- test$PassengerId
Finish.Titanic <- as.data.frame(Finish.Titanic)
colnames(Finish.Titanic) <- c("PassengerId")
Finish.Titanic$Survived <- tahminler.1
write.csv2(Finish.Titanic,"Titanic1.csv",row.names = T)
###################