Connecticut abd’nin kuzey doğusunda kalan bir eyalettir.ABD resmi kanallarından elde edilen veri üzerinden Herhangi bir uyuşturucudan dolayı kazayla ölen kişilerin yaşları cinsiyetleri ve ölüme sebebiyet veren etken maddeleri içermektedir.
(Veri kaynağı:)[“https://data.ct.gov/Health-and-Human-Services/Accidental-Drug-Related-Deaths-2012-2018/rybz-nyjw”]
options(warn=-1)#uyarı mesajlarını kapatma
library(readr) #read_csv komutu için
library(tidyverse) #dplyr ggplot gibi kutuphaneler topluluğunun yüklenmesi
library(stringr) #gözlem içindeki verileri seçmek için
library(DT) # daha güzel tablo gösterimi
require(knitr)
Drugs <- read_csv("Drugs.csv")
Verimizi analize hazır hale getirmek için bazı değişkenlerdeki eksik gözlemlerin giderilmesi, yeniden isimlendirilmesi, veya değişkenlerin silinmesi gibi işlemleri yapacağız.
Residence city/country sütunları ile death city/country kısımları aşırı derecede benzer arada bazı farklılıklar olsada ufak bir hata payını kabul ederek bu hataları düzeltebiliriz.
library(dplyr)
Drugs %>% dplyr::select(ResidenceCity,DeathCity) %>% na.omit() %>% #2 değişkendeki değerler birbirleriyle eşitmi kontrol ediyoruz.
count(.$ResidenceCity==.$DeathCity)
| .\(ResidenceCity == .\)DeathCity | n |
|---|---|
| FALSE | 1336 |
| TRUE | 3595 |
Iyi bir oran versede hata oranı beklediğimden de yüksek Bu şekilde eksik verileri doldurmaktansa eksik gözlemleri silerek şehirlerdeki ölümleri incelemek daha anlamlı olur.
sum(is.na(Drugs$Sex))# na gözlemleri toplamak
## [1] 6
unique(Drugs$Sex) #kaç adet eşşiz cinsiyet kategorisi var
## [1] NA "Male" "Female" "Unknown"
Eksik 6 tane gözlem var. Bunları bilinmeyen yapalım.
Drugs$Sex[which(is.na(Drugs$Sex))]="Unknown"
sum(!complete.cases(Drugs$Sex))
## [1] 0
sum(!complete.cases(Drugs$Race))
## [1] 13
Eksik 13 eleman var bunları bilinmeyen olarak güncelleyelim.
unique(Drugs$Race)
## [1] NA "Black" "White"
## [4] "Asian, Other" "Hispanic, White" "Asian Indian"
## [7] "Hispanic, Black" "Unknown" "Other"
## [10] "Chinese" "Native American, Other" "Hawaiian"
Drugs$Race[which(is.na(Drugs$Race))]="Unknown"
sum(is.na(Drugs$Race))
## [1] 0
eksik gözlemler bilinmiyor olarak güncellendi.
Birazdan verideki bazı değişkenleri çıkartacağız.Bunun sebebi verideki bu değişkenlerin analiz esnasında gerekli olmaması ve verinin hacmini büyütmesinden dolayı incelemeyi zorlaştırması.
Drugs<-Drugs %>% select(-c(ResidenceCityGeo,
ID,
InjuryState,
DeathCityGeo,
InjuryCityGeo,
DeathCityGeo
,MannerofDeath,)) #bu değişkenleri veriden çıkarıyoruz.
#-c() select içerisinde kullanıldığında seçme anlamına gelir.
Bağımlıık etkenlerin varlığı ilgili değişlenlerde Y,YES gibi ifadelerle belirtilmiş tüm ifadelerin nasıl doldurulduğunu inceledikden sonra ilgili etken madde varsa 1 yoksa 0 diyerek sorunu çözeceğiz.
apply(Drugs[19:35],2,unique) #apply satır veya sütun üzerinden işlem yapmayı sağlar.
## $Heroin
## [1] NA "Y"
##
## $Cocaine
## [1] NA "Y"
##
## $Fentanyl
## [1] "Y" NA "Y-A" "Y POPS" "Y (PTCH)"
##
## $FentanylAnalogue
## [1] NA "Y"
##
## $Oxycodone
## [1] NA "Y"
##
## $Oxymorphone
## [1] NA "Y"
##
## $Ethanol
## [1] NA "Y"
##
## $Hydrocodone
## [1] "Y" NA
##
## $Benzodiazepine
## [1] "Y" NA
##
## $Methadone
## [1] NA "Y"
##
## $Amphet
## [1] NA "Y"
##
## $Tramad
## [1] NA "Y"
##
## $Morphine_NotHeroin
## [1] NA "Y" "YES" "STOLE MEDS"
## [5] "NO RX BUT STRAWS" "PCP NEG"
##
## $Hydromorphone
## [1] NA "Y"
##
## $Other
## [1] NA "Bupren"
## [3] "lsd, hydromorph" "opiate"
## [5] "BUPREN" "HYDROMORPH"
## [7] "OTHERS" "pcp"
## [9] "PCP" "ketamine"
## [11] "meperidine" "opiate screen"
## [13] "MDMA" "COD"
## [15] "PAROX" "carfentanil"
## [17] "hydromorph" "DUSTER"
## [19] "DIPHENHYDRAMINE" "Buprenor"
## [21] "HYDRO MORPH" "BUPRE"
## [23] "MORPHINE" "morphine"
## [25] "MORPH" "hyd-morph"
## [27] "U47700" "DOX, DIPHEN"
## [29] "opiates" "Buprenor, carfentanil"
## [31] "mdma" "SERT"
## [33] "TAPENTADOL" "4-anpp"
## [35] "methoxyPCP" "N-ETHYL-PENTYLONE"
## [37] "PCP, HYDROMORPH" "Mirtagynine"
## [39] "UK" "HYDROMORP"
## [41] "U-47700" "difluro"
## [43] "DIPHENHYDRAMINE, ZOLPIDEM" "4-ANPP"
## [45] "BUPRENORPHINE" "Difluro"
## [47] "H-MORPH" "BUPRENORP"
## [49] "U-47700 synthetic opioid" "OPIATE"
## [51] "Buprnor" "morphine RX"
## [53] "opioid" "OPIOID NOS"
## [55] "BUPRENOR" "CATHINONE"
## [57] "LOPERAMIDE" "codeine"
## [59] "GHB" "hydromorp"
## [61] "BUTALBITAL" "Morphine"
## [63] "PCP, N-ETHYL-PENTYLONE" "Bupren, HEXADRONE"
## [65] "bupren" "HYDR-MOR"
## [67] "pos 6-mam" "Rx morphine"
## [69] "Bupreno" "MEPERIDINE"
## [71] "others" "morphine no 6mam"
## [73] "U-47700, carfentanil" "uk"
## [75] "mitragine" "BUPRENORPHONE"
## [77] "MDMA, PCP" "DIPHENHY"
## [79] "OPIATE IN HOSP?" "Opiate screen"
## [81] "BUPRENO" "HYDROMORPH, BUPRENOR"
## [83] "QUIET" "HYDROM"
## [85] "difluror" "KET"
## [87] "BUPRENORPH" "bath salt"
## [89] "Mitragynine" "Hydromorph"
## [91] "MORPHINE/HYDROMORPH" "buprenor"
## [93] "2-A" "pcp. Bupren"
## [95] "tapentadol" "buprop"
## [97] "TOPIRAMATE" "KETAMINE"
## [99] "snorted" "HYDRMORP"
## [101] "MDMA, N-ETHYL-PENTYLONE" "BUTALB"
## [103] "BUPREN, DIFLUORO" "zolpidem"
## [105] "Difluor" "Buprenophine"
## [107] "MORPHIINE" "DIPHENH"
## [109] "CODEINE" "Duster"
## [111] "PCP, MORPHINE NOS" "Doxy, phenobarb"
## [113] "PCP, Buprenor" "morphin"
## [115] "DIFLOURO" "DIFLURO"
## [117] "morphine/cod" "MORPHINE RX"
## [119] "Codeine" "MORPHINE, HYDROMORPH"
## [121] "MORPH NOS" "difluoroeth"
## [123] "MORPH/COD" "duster"
## [125] "morphine, no rx in pmp" "phenobarb"
## [127] "HYROMORPH" "ZOLP"
## [129] "Buprno" "mORPHINE"
## [131] "Opiate" "diphen, chlorphen"
## [133] "HYDMORPH" "PSEUDO"
## [135] "MORPH PCP"
##
## $OpiateNOS
## [1] NA "Y"
##
## $AnyOpioid
## [1] NA "Y" "N"
# .,2 yapıldığında her sütuna girilen fonksiyonu çalıştırır.
19:32 sütunlarındaki NA değerler aslında o maddenin bulunmadığını, diğer bütün doldurma biçimleri bulunduğunu belirttiği için Na dışında bütün ifadeleri 1 Na ları 0 yapıyoruz. Analiz esnasındaki ana hedefimiz etken madde kullanım durumlarını kıyaslamak olduğu için etken maddde ile ilgili detayı önemsemiyoruz.
Şimdilik manipülasyon işlemlerimiz yeterli. Analiz esnasına gerekmesi durumda başka manipülasyonlarda yapabiliriz.
Artık verimizi çeşitli grafikler ile daha fazla anlamdırmaya başlayacağız. Çeşitli sorularılarımıza grafiklerle veya tablolarla cevap bulmaya çalışıyor olacağız. Öbcelikli olarak verideki ilk akla gelen değişkenlerin yaş cinsiyet birincil ölüm yeri gibi değişkenlerin dağılımlarını inceleceğiz. Başlayalım
head(Drugs,10)
| Date | DateType | Age | Sex | Race | ResidenceCity | ResidenceCounty | ResidenceState | DeathCity | DeathCounty | Location | LocationifOther | DescriptionofInjury | InjuryPlace | InjuryCity | InjuryCounty | COD | OtherSignifican | Heroin | Cocaine | Fentanyl | FentanylAnalogue | Oxycodone | Oxymorphone | Ethanol | Hydrocodone | Benzodiazepine | Methadone | Amphet | Tramad | Morphine_NotHeroin | Hydromorphone | Other | OpiateNOS | AnyOpioid |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 06/28/2014 12:00:00 AM | DateReported | NA | Unknown | Unknown | NA | NA | NA | NA | NA | NA | NA | substance | NA | NA | NA | Acute fent, hydrocod, benzodiazepine | NA | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 03/21/2013 12:00:00 AM | DateofDeath | 48 | Male | Black | NORWALK | NA | NA | NORWALK | FAIRFIELD | Hospital | NA | NA | NA | NA | NA | Cocaine Intoxication | NA | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 03/13/2016 12:00:00 AM | DateofDeath | 30 | Female | White | SANDY HOOK | FAIRFIELD | CT | DANBURY | NA | Hospital | NA | Substance Abuse | Unknown | UNKNOWN | NA | Acute Heroin and Cocaine Intoxication | NA | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 03/31/2016 12:00:00 AM | DateofDeath | 23 | Male | White | RYE | WESTCHESTER | NY | GREENWICH | NA | Hospital | NA | substance abuse | Residence | RYE | NA | Acute Fentanyl and Morphine Intoxication | NA | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 02/13/2013 12:00:00 AM | DateofDeath | 22 | Male | Asian, Other | FLUSHING | QUEENS | NA | GREENWICH | FAIRFIELD | Hospital | NA | Transdermal Absorption | Other | NA | NA | Fentanyl Intoxication | NA | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 06/29/2014 12:00:00 AM | DateofDeath | 23 | Male | White | BRISTOL | NA | NA | BRISTOL | HARTFORD | Residence | NA | Inhalation | Residence | NA | NA | Heroin Intoxication | NA | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 08/12/2012 12:00:00 AM | DateofDeath | 21 | Female | White | WEST HARTFORD | HARTFORD | NA | WEST HARTFORD | HARTFORD | Residence | NA | Used Heroin | Residence | NA | NA | Heroin Toxicity | NA | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 11/10/2013 12:00:00 AM | DateofDeath | 40 | Female | White | HAMDEN | NEW HAVEN | NA | NEW HAVEN | NEW HAVEN | Hospital | NA | NA | NA | NA | NA | Complications of Cocaine Intoxication | NA | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 04/25/2012 12:00:00 AM | DateofDeath | 40 | Male | White | EAST HARTFORD | HARTFORD | NA | EAST HARTFORD | HARTFORD | Residence | NA | Used Heroin | Residence | NA | NA | Heroin Toxicity | NA | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 05/15/2013 12:00:00 AM | DateofDeath | 50 | Male | White | MONTVILLE | NEW LONDON | NA | MONTVILLE | NEW LONDON | Residence | NA | Ingestion | Residence | NA | NA | Oxycodone Intoxication | NA | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
yaşlara göre ölümlerin dağılımını inceleyelim.
library(plyr)
options(scipen = 1000)
kadin<-plyr::count(Drugs[Drugs$Sex=="Female",]$Age) %>% .[order(-.$freq),1] %>% .[1]
erkek<-plyr::count(Drugs[Drugs$Sex=="Male",]$Age) %>% .[order(-.$freq),1] %>% .[1]
#count bir ifadedeki değerleri saymaya yarayan bir fornkisyon.değişkenleri saydırdıktan
#sonra en çok gözleme sahip gözlemi bulmak için büyükten küçüğe sıralayıp ilk elemanı seçtim.
#verideki cinsiyeti bilinmeyen kişiler çok az olmasından dolayı yatay çizgi olarak gözüküyordu.
#bu sebeple dplyr::filter() komutu ile bu gözlemleri çıkardım.
#density plot ile tablodan çıkan maks min elemanlarının farklılığından ötürü
#1-2 adım kaydırılarak görselin düzgün gözükmesi adına düzeltme yapıldı.
#geom_vline dikey yatay çizgi çizmeyi sağlayan komuttur.
#geom_text grafiklere yazı yazmayı sağlayan foksiyondur.
Drugs %>% filter(Sex==c("Female","Male")) %>% ggplot(.,aes(x=Age))+
geom_density(aes(col=Sex))+
#cinsiyetlere filtre edildi ve dağılım grafiği çizildi
geom_vline(xintercept=kadin+3, size=1, color="red",linetype="dotted")+
#kadınlar için dikey çizgi eklendi
geom_text(aes(x=erkek, y=0, label=toString(erkek)), size=4, angle=0, vjust=1,col="blue", hjust=0)+
geom_text(aes(x=kadin+2, y=0, label=toString(kadin)), size=4, angle=0, vjust=1,col="red", hjust=0)+
geom_vline(xintercept=erkek+1, size=1, color="blue",linetype="dotted")
Verimizde ölen kişilerin kullandıkları uyuşturuculara ait değerler bulunmakta bu değerleri toplayarak bir tablo haline getirelim daha sonra bar grafiği veya pasta grafiği çizerek listeleyelim.
drugs2<-drugs2 %>% select(-Other, everything()) #değişkeni sona alındı.
drugs2[19:34]<-apply(drugs2[19:34],2,as.numeric) #etken maddelerin olduğu sütunlar numeric olarak değiştirildi.Bu sayede bu değişkenleri sayarak bir frekans tablosu oluşturabileceğiz.
freq_table<-apply(drugs2[19:34], 2, sum) %>% data.frame() #her bir uyuşturucunun kaç adet kullanıldığı sayarak uyuşturucu-adet tablosu oluşturduk
freq_table$uyusturucu<-row.names(freq_table) #kullanılan uyuşturucuları değişken olarak ekledik
row.names(freq_table)<-paste(1:nrow(freq_table)) #satır isimlerini düzenledik
colnames(freq_table)[1]<-"adet" #adet kısmı "." olarak gözüküyordu tablo düzeni ve işlem hatalarını engellemek amacıyla "adet" olarak güncelledik.
freq_table<-freq_table %>% select(-adet, everything()) #adet ifadesini sona aldık
freq_table<-freq_table[order(freq_table$adet, decreasing = TRUE),] #tabloyu büyükten küçüğe sıraladık
row.names(freq_table)<-paste(1:nrow(freq_table)) #yerler değiştiği için tekrardan satır numaralarını gncelledim.
head(freq_table,16) #verilerin çıktısını alıyoruz
| uyusturucu | adet |
|---|---|
| Heroin | 2529 |
| AnyOpioid | 2460 |
| Fentanyl | 2232 |
| Cocaine | 1521 |
| Benzodiazepine | 1343 |
| Ethanol | 1247 |
| Oxycodone | 607 |
| Methadone | 474 |
| FentanylAnalogue | 389 |
| Amphet | 159 |
| Tramad | 130 |
| Hydrocodone | 118 |
| Oxymorphone | 108 |
| OpiateNOS | 88 |
| Morphine_NotHeroin | 42 |
| Hydromorphone | 25 |
En çok ölüme sebep veren uyuşturucu eroin daha sonra Opiod içerikli ilaçlar gelmektedir.(bir nevi dopamin salgılatan ağrı kesiciler, vücutta morfin gibi etki gösterirler.) Bu listeyi daha iyi incelebilmek adına bar grafiği oluşturalım.
freq_table %>% ggplot(aes(x=reorder(uyusturucu,adet),adet),y=adet)+ #reorder ile büyükten küçüğe sıraladım.
geom_bar(stat = "identity",fill="#56B4E9")+ #frekans tablosundan değer almasından dolayı stat="identifiy işaretlemeliyiz.
coord_flip()+#değişken isimlerinin kolay okunması için 90° döndürdük.
theme_bw()+
labs(x="Etken Maddeler",
title ="ölüme sebebiyet veren maddelerin kullanım sıklığı")
Elimizdeki veride ilgili maddelerin bağımlılık düzeylerine ilişkin bir bilgi yok fakat vikipedi üzerindeki maddelerin bağımlılık düzeyleri tablosuna bakarsak ilgili maddelerden ölümler şaşırtmayacaktır.
drugs
En çok ölüme sebebiyet veren uyuştucu etken maddeleri aynı zamanda en çok bağılımlılık yapan maddelerdir. Bu durumda insanların aşırı kullanımı ve maddeleri kullanmaktan kaçamalarıda aşırı dozdan/kazayla ölümlere sebebiyet verdiğini anlarız.Bu bilgi ışında etken maddelere göre ortalama ölüm yaşını öğrenelim.
Öncelikli olarak ortalama ölüm dağılımlarını yani yaş değişkeni için histogramı çizelim.
plot(density(na.omit(drugs2$Age)), main="Ölüm yaşlarının dağılımı")
35 yaş civarında ve 50’li yaşlarda ölümler zirveye oturmaktadır.Fakat bu durumu en çok etkilen uyuşturucuları ortalama ölüm yaşlarını bulalım.
AgeDeath<-na.omit( drugs2[,c(3,19:34)]) #yas ve gereki olan etken madde değişkenleri seçildi
uyusturucular<-data.frame("EtkenMadde"=colnames(AgeDeath[2:ncol(AgeDeath)])) #ortalamaların eklenceği tablo oluşturuldu.
#ortalama medyan ve modu bulacağız.R'ın paketleri arasında mod'u hesaplayacak bir formül bulamadım.Bu senenle bu amaçla oluşturulmuş bir fonksiyon buldum.Onu kullanıyorum.
mod <- function(x) {
ux <- unique(x)
tab <- tabulate(match(x, ux))
ux[tab == max(tab)]
}
#döngü açıklaması: 1 numaralı değişken yaş değişkeni olması sebebiyle döngü 2 den başlamaktadır. Bununla beraber indeksleri 2 den başlatamayacağımız için i-1 ile doğru olarak başlatabiliriz.
#döngü her işlemde bir sütunu seçerek o sütunun ortalamasını yeni tablodaki ortalama sütununa atamaktadır.
for(i in 2:(ncol(AgeDeath))){
uyusturucular$ortalama[i-1]<-AgeDeath$Age[AgeDeath[,i]==1] %>% mean()
uyusturucular$medyan[i-1]<-AgeDeath$Age[AgeDeath[,i]==1] %>% median()
uyusturucular$mod[i-1]<-AgeDeath$Age[AgeDeath[,i]==1] %>% mod()
}
print(uyusturucular[order(uyusturucular$ortalama, decreasing = FALSE),])
## EtkenMadde ortalama medyan mod
## 11 Amphet 39.05031 38.0 38
## 3 Fentanyl 40.34350 39.0 33
## 1 Heroin 40.36062 40.0 29
## 4 FentanylAnalogue 41.12853 40.0 30
## 16 AnyOpioid 41.85482 41.0 33
## 2 Cocaine 42.82632 43.0 51
## 9 Benzodiazepine 43.18703 43.0 33
## 7 Ethanol 43.81957 45.0 49
## 10 Methadone 44.34388 45.0 48
## 6 Oxymorphone 44.36111 46.5 50
## 15 OpiateNOS 44.69318 44.0 56
## 5 Oxycodone 46.03295 48.0 50
## 8 Hydrocodone 47.88034 48.0 51
## 12 Tramad 48.47692 50.5 48
## 13 Morphine_NotHeroin 48.64286 50.5 45
## 14 Hydromorphone 49.56000 52.0 32
Ortalamalar ile medyanlar nerdeyse aynıdır yaş değişkenide normal dağılımdan çok farklı olmadığını görmüştük.Aslında eronin ölüm yaşı ortalamasını daha az olmasını beklerdim fakat tabloda 3.sırada gözükmektedir.Bununla beraber modu en düşük olan uyuşturcunun eroin olduğunu görmekteyiz.yaş ortalamasında da 1 senelik bir fark olduğunu düşünürsek en tehlikeli uyuşturucunun eroin olduğunu bir kez daha görmüş olmaktayız. Listenin başında amfetamin, diğer uyuşturculara nazaran veri setinde daha az görülmektedir fakat ölüm ortalamasında başı çektiğini görmekteyiz.
Bunlara ek olarak Ethanol aslında alkol bağımlılığı belirten bir değşkendir.Ortalama ölüm yaşının 45 ve en çok ölümün 49 yaşında olduğunu tablodan görebiliyoruz.Ölüme sebebiyet verenler listesinde 6.sırada ve ilk yasal madddedir.
Ayrıca ölümlerin bu maddeler dışında neler olabileceğine dair bir değişkenimiz daha var fakat bu değişkenin büyük bir kısmının NA olması sebebiyle analizimize dahil etmiyoruz.
Ölümleri zamana göre durumunu resmedeceğiz. Öncelikli olarak zaman ifadesini güncelleyelim.
Veri setimizde bir adet date değişkeni vardır fakat formatını r’ın anlayabileceği bir hale getirmemiz gerekmektedir.
06/28/2014 12:00:00 AM değişken bu formattadır. Burda saat bilgisine ihtiyacımız yok bu sebeble saat ifadelerini değişkenden silip kalan ifadeyi kolaylıkla lubridate paketi ile tarih değişkeni olarak ayarlayabiliriz.
Not:lubridate zaman değişkenleri ile alakalı sorun çözebilmemizi sağlayan bir pakettir.
Öncelikli olarak Date değişkenimiz bir tarih değişkeni bu değişkeni zamanı ifade edecek şekilde güncelleyelim.
zaman_drug<-drugs2[complete.cases(drugs2$Date),] #veri setindeki zaman değişkeni eksik olmayan tüm değişkeni
str_detect(zaman_drug$Date,"^\\d") %>% length() ==length(zaman_drug$Date)
## [1] TRUE
#stringr paketinde \\d ifadesi sayısal verileri temsil eder. "^" ise ilk elemanın seçilmesini ifade etmektedir.yani ilk elemanı sayısal ifade olan değişkenlerin sayısı o sütuna komple eşit mi onu test ediyoruz.
Veri setindeki zaman değişkeninde hatalı bir ifade yok o zaman sadece tarihi içeren kısmı seçip date türüne çevirip ölümlerin grafiğini çizebiliriz.
library(lubridate)
zaman_drug$Date<-substr(zaman_drug$Date, start = 1, stop = 10) #substr ilk kaç elemanın seçileceğini sağlayan bir fonksiyondur.
head(zaman_drug$Date,2)
## [1] "06/28/2014" "03/21/2013"
zaman_drug$Date<-mdy(zaman_drug$Date) #m=month d=day y=years demek, bu şekilde tüm ifadeyi date değişkeni olarak atayabiliyoruz.
head(zaman_drug$Date,2)
## [1] "2014-06-28" "2013-03-21"
min(zaman_drug$Date)
## [1] "2012-01-01"
tarih<-setNames(data.frame(table(zaman_drug$Date)),c("Date","Count"))
tarih$Date<-ymd(tarih$Date)
ggplot(tarih,aes(x=Date,y=Count))+geom_line()
Vaka sayılarının günlük olarak ifade edilmesinden dolayı tablo çok karmaşık bir hal aldı. Vakaları aylık olarak toplayalım ve o şekilde resmedelim.
ay=NA #tablo için değişken oluşturma
adet=NA #tablo için değişken oluşturma
min_deger<-min(zaman_drug$Date) #tabldodaki en erken tarih
max_deger<-max(zaman_drug$Date) #tablodaki en geç tarih
i=1 # döngüde değişecek değer
while(min_deger<date(max_deger+days(1))){
ay[i]=as.character(min_deger) #tarih değişkeni
adet[i]=
nrow(zaman_drug[between(zaman_drug$Date,min_deger,(min_deger+months(1))),])
min_deger=ymd(min_deger+months(1)) #o tarih aralığındaki satır sayılarının adet değişkeni atanması
i=i+1 #döngüdeki artış
{
zaman_tablo<-data_frame("tarih"=ay,"adet"=adet) #while bittikten sonraki oluşturulacak tablo
}
}
zaman_tablo$tarih<-ymd(zaman_tablo$tarih)
head(zaman_tablo) #tablomuz
| tarih | adet |
|---|---|
| 2012-01-01 | 32 |
| 2012-02-01 | 28 |
| 2012-03-01 | 27 |
| 2012-04-01 | 31 |
| 2012-05-01 | 29 |
| 2012-06-01 | 29 |
Tablomuzu oluşturduk şimdi grafiğimizi çizelim.
min_deger<-min(zaman_drug$Date) #tabldodaki en erken tarih
max_deger<-max(zaman_drug$Date)
ggplot(zaman_tablo,aes(x=tarih,y=adet))+geom_line()
Ölümleri incelediğimizde tarihler ilerledikçe ölümlerin artmış olduğunu görmekteyiz. Bununla beraber grafik üzerinde görmek zor olsada kış mevsiminin başlangıcında ölüm oranlarının zirve yaptığı temmuz ayı civarında en düşük seviyeye indiği görülmektedir. Bu durum kış ayında insan bünyesinin daha zayıf olmasıyla alakalı olabilir.
w = table(drugs2$Location) %>% data.frame() #lokasyon sayıları toplandı
ggplot(w,aes(x=reorder(Var1,-Freq),Freq)) + #Freq değişkenine göre sıralandı
geom_bar(stat ="identity",
fill="powderblue")+ #renk verildi
labs(title = "Ölünen yerler",x="lokasyonlar",y="Frekanslar")+ #eksenler isimlendirildi, tittle başlık x, x ekseni,y, yekseni
theme_light()#arka plan düzenlendi.
Hastaların çok büyük bir kısmı evlerinde ölü bulunmuştur. Pek çok kişinin hastaneye gidemeden öldüğünü öğrenmekteyiz.
df_race<-drugs2 %>% filter(Race %in% c("Asian, Other",
"Hispanic, Black",
"Black",
"Hispanic, White",
"White",
"Unknown",
"Asian Indian",
"Other"))
#veri setinde neredeyse bulunmayan grafiği kötü gösteren değişkenler çıkartıldı.
ggplot(df_race,aes(y=Age))+geom_boxplot(aes(fill=Race))+
labs(title = "milletlere göre ölüm yaşları",
x="Etnik kimlikler")
Grafiği incelediğimizde ölüm yaşı en düşük etknik kimliğe sahip olanların hint kökenli asyalılar olduğunu ardından diğer asya kökenli milletlerin geldiğini görmekteyiz.Bununla beraber kazayla ölen en yaşlı etnik kimlik sahibinin siyahilerin olduğunu görmekteyiz.