Bu rapor, İstanbul’daki alışveriş verilerinin bir analizini göstermektedir. Veriler, 2021 ile 2023 yılları arasında 10 farklı alışveriş merkezinden toplanmıştır. Veriler, alışveriş alışkanlıklarına dair kapsamlı bir görünüm sağlamak ve alışveriş kalıpları hakkında değerli içgörüler elde etmek için İstanbul’daki çeşitli yaş gruplarından ve cinsiyetlerden toplanmıştır. Veri seti, fatura numaraları, müşteri kimlikleri, yaş, cinsiyet, ödeme yöntemleri, ürün kategorileri, miktar, fiyat, sipariş tarihleri ve alışveriş merkezi konumlarını içerir. Veri seti geniş bir kapsama sahiptir; müşteri demografisindeki eğilimleri belirleme, müşteri satın alma davranışını anlama, tahmin etme ve veri nitelikleri arasındaki ilişkileri keşfetme gibi ayrıntılı bir analiz için çok sayıda fırsat sunar. Veri analizinin amaçlanan amacı, müşteri satın alma davranışındaki eğilimleri anlamak ve belirlemek, müşteriler tarafından hangi ürünlerin ve ödeme yöntemlerinin en sık kullanıldığını, müşterilerin en çok hangi alışveriş merkezlerini ziyaret ettiğini ve alışveriş yaparken farklı müşteri demografilerinin nasıl devreye girdiğini analiz etmektir. Bu tür bilgileri çıkarmak, veri odaklı kararlar almaya, müşterinin deneyimini iyileştirmeye, potansiyel ürün tekliflerini değerlendirmeye ve fırsat alanlarını iyileştirmeye yardımcı olabilir. Daha net ifade etmek gerekirse, bu veri analizi İstanbul’daki farklı demografik gruplarda müşteri davranışlarını etkileyen faktörlerin belirlenmesine yardımcı oluyor.
library(ggplot2)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(lubridate)
library(data.table)
##
## Attaching package: 'data.table'
##
## The following objects are masked from 'package:lubridate':
##
## hour, isoweek, mday, minute, month, quarter, second, wday, week,
## yday, year
##
## The following objects are masked from 'package:dplyr':
##
## between, first, last
##
## The following object is masked from 'package:purrr':
##
## transpose
library(cluster)
library(GGally)
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
library(DBI)
library(RMySQL)
library(XML)
library(RCurl)
##
## Attaching package: 'RCurl'
##
## The following object is masked from 'package:tidyr':
##
## complete
library(rvest)
##
## Attaching package: 'rvest'
##
## The following object is masked from 'package:readr':
##
## guess_encoding
library(magrittr)
##
## Attaching package: 'magrittr'
##
## The following object is masked from 'package:purrr':
##
## set_names
##
## The following object is masked from 'package:tidyr':
##
## extract
# Load data
customerDF <- read_csv("/Users/rabiamolak/Desktop/pazarlama/customer_shopping_data.csv")
## Rows: 99457 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): invoice_no, customer_id, gender, category, payment_method, invoice_...
## dbl (3): age, quantity, price
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(customerDF)
## # A tibble: 6 × 10
## invoice_no customer_id gender age category quantity price payment_method
## <chr> <chr> <chr> <dbl> <chr> <dbl> <dbl> <chr>
## 1 I138884 C241288 Female 28 Clothing 5 1500. Credit Card
## 2 I317333 C111565 Male 21 Shoes 3 1801. Debit Card
## 3 I127801 C266599 Male 20 Clothing 1 300. Cash
## 4 I173702 C988172 Female 66 Shoes 5 3001. Credit Card
## 5 I337046 C189076 Female 53 Books 4 60.6 Cash
## 6 I227836 C657758 Female 28 Clothing 5 1500. Credit Card
## # ℹ 2 more variables: invoice_date <chr>, shopping_mall <chr>
library(roxygen2)
getwd()
## [1] "/Users/rabiamolak/Rabia"
ls(pattern = "function")
## character(0)
## [1] 99457 10
Tarihi yeniden biçimlendirin ve müşterilerin yaşını 10’lu (<20 yaş), 20’li (20 ila 30 yaş), 30’lu (30 ila 40 yaş), 40’lı (40 ila 50 yaş) olarak gruplandırın, geri kalanı 60’lı
# Extract by sampling
customerDF <- customerDF %>% mutate(invoice_date = as.Date(invoice_date,'%d/%m/%Y'))
customerDF <- customerDF %>% mutate(total_sale = price*quantity)
customerDF <- customerDF %>% mutate(age_group = ifelse(age < 20, "10's",
ifelse(age < 30, "20's",
ifelse(age < 40, "30's",
ifelse(age < 50, "40's",
ifelse(age < 60, "50's", "60's")))))) %>%
dplyr::select(shopping_mall, invoice_date, invoice_no, customer_id, gender, age, age_group, category, quantity, price, total_sale,
payment_method)
head(customerDF)
## # A tibble: 6 × 12
## shopping_mall invoice_date invoice_no customer_id gender age age_group
## <chr> <date> <chr> <chr> <chr> <dbl> <chr>
## 1 Kanyon 2022-08-05 I138884 C241288 Female 28 20's
## 2 Forum Istanbul 2021-12-12 I317333 C111565 Male 21 20's
## 3 Metrocity 2021-11-09 I127801 C266599 Male 20 20's
## 4 Metropol AVM 2021-05-16 I173702 C988172 Female 66 60's
## 5 Kanyon 2021-10-24 I337046 C189076 Female 53 50's
## 6 Forum Istanbul 2022-05-24 I227836 C657758 Female 28 20's
## # ℹ 5 more variables: category <chr>, quantity <dbl>, price <dbl>,
## # total_sale <dbl>, payment_method <chr>
summary(customerDF)
## shopping_mall invoice_date invoice_no customer_id
## Length:99457 Min. :2021-01-01 Length:99457 Length:99457
## Class :character 1st Qu.:2021-07-19 Class :character Class :character
## Mode :character Median :2022-02-05 Mode :character Mode :character
## Mean :2022-02-04
## 3rd Qu.:2022-08-22
## Max. :2023-03-08
## gender age age_group category
## Length:99457 Min. :18.00 Length:99457 Length:99457
## Class :character 1st Qu.:30.00 Class :character Class :character
## Mode :character Median :43.00 Mode :character Mode :character
## Mean :43.43
## 3rd Qu.:56.00
## Max. :69.00
## quantity price total_sale payment_method
## Min. :1.000 Min. : 5.23 Min. : 5.23 Length:99457
## 1st Qu.:2.000 1st Qu.: 45.45 1st Qu.: 136.35 Class :character
## Median :3.000 Median : 203.30 Median : 600.17 Mode :character
## Mean :3.003 Mean : 689.26 Mean : 2528.79
## 3rd Qu.:4.000 3rd Qu.:1200.32 3rd Qu.: 2700.72
## Max. :5.000 Max. :5250.00 Max. :26250.00
summary(customerDF[, c("age", "quantity", "price"), on = c("column1", "column2")])
## age quantity price
## Min. :18.00 Min. :1.000 Min. : 5.23
## 1st Qu.:30.00 1st Qu.:2.000 1st Qu.: 45.45
## Median :43.00 Median :3.000 Median : 203.30
## Mean :43.43 Mean :3.003 Mean : 689.26
## 3rd Qu.:56.00 3rd Qu.:4.000 3rd Qu.:1200.32
## Max. :69.00 Max. :5.000 Max. :5250.00
sapply(customerDF[, c("shopping_mall", "gender", "category", "payment_method", "age_group")], function(x) length(unique(x)))
## shopping_mall gender category payment_method age_group
## 10 2 8 3 6
table(customerDF$shopping_mall)
##
## Cevahir AVM Emaar Square Mall Forum Istanbul Istinye Park
## 4991 4811 4947 9781
## Kanyon Mall of Istanbul Metrocity Metropol AVM
## 19823 19943 15011 10161
## Viaport Outlet Zorlu Center
## 4914 5075
table(customerDF$gender)
##
## Female Male
## 59482 39975
table(customerDF$category)
##
## Books Clothing Cosmetics Food & Beverage Shoes
## 4981 34487 15097 14776 10034
## Souvenir Technology Toys
## 4999 4996 10087
table(customerDF$payment_method)
##
## Cash Credit Card Debit Card
## 44447 34931 20079
table(customerDF$age_group)
##
## 10's 20's 30's 40's 50's 60's
## 3780 19263 19287 19153 18931 19043
price_range <- range(customerDF$price, na.rm = TRUE)
cat("Price range: ", price_range[1], " - ", price_range[2], "\n")
## Price range: 5.23 - 5250
price_sd <- sd(customerDF$price, na.rm = TRUE)
cat("Price standard deviation: ", price_sd, "\n")
## Price standard deviation: 941.1846
price_var <- var(customerDF$price, na.rm = TRUE)
cat("Price variance: ", price_var, "\n")
## Price variance: 885828.4
price_iqr <- IQR(customerDF$price, na.rm = TRUE)
cat("Price interquartile range: ", price_iqr, "\n")
## Price interquartile range: 1154.87
ggplot(customerDF, aes(x = price)) +
geom_histogram(binwidth = 500, fill = "skyblue", color = "black") +
ggtitle("Distribution of Price") +
xlab("Price") +
ylab("Frequency")
R’nin çizim özelliklerini kullanarak kutu grafikleri, histogram ve frekans tabloları/grafikleri geliştirin:
customerDF %>% ggplot(data = customerDF, mapping = aes(x = shopping_mall)) +
geom_histogram(binwidth = 5, fill = 'skyblue', col = 'black', stat = "count") + facet_wrap(~ category) +
xlab("Shopping Mall") +
ylab("Frequency") +
ggtitle("Histogram for Shopping Mall by Category") +
theme(plot.title = element_text(face = 'bold', size = 10, hjust = .5),
axis.title = element_text(face = 'italic'),
axis.text = element_text(face = 'bold', size = 5.5, angle = 35))
## Warning in geom_histogram(binwidth = 5, fill = "skyblue", col = "black", :
## Ignoring unknown parameters: `binwidth`, `bins`, and `pad`
customerDF %>%
ggplot(mapping = aes(x = factor(payment_method), y = quantity, fill = factor(payment_method))) +
geom_boxplot(outlier.colour = "red", outlier.size = 2, alpha = 0.7) +
xlab("Payment Method") +
ylab("Quantity") +
ggtitle("Box Plot: Quantities by Payment Method") +
theme_minimal(base_size = 14) + # Minimal tema ve yazı tipi boyutları
scale_fill_brewer(palette = "Pastel1") + # Pastel tonlarında bir renk paleti
theme(
plot.title = element_text(hjust = 0.5, face = "bold"), # Başlık ortalanmış ve kalın
axis.text = element_text(size = 12), # Eksen yazı tipi boyutları
axis.title = element_text(face = "bold"), # Eksen başlıkları kalın
legend.position = "none" # Legend'ı kaldır
)
customerDF %>%
ggplot(mapping = aes(x = category, fill = gender)) +
geom_histogram(binwidth = 5, col = "black", stat = "count", alpha = 0.8) +
facet_wrap(~ gender, ncol = 2) +
xlab("Kategori") +
ylab("Frekans") +
ggtitle("Histogram: Kategori Frekansı ve Cinsiyet") +
theme_light(base_size = 12) +
scale_fill_brewer(palette = "Set2") +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
axis.title = element_text(face = "bold.italic", size = 12),
axis.text = element_text(face = "bold", size = 9, angle = 30),
strip.text = element_text(face = "bold", size = 10),
legend.position = "none"
)
## Warning in geom_histogram(binwidth = 5, col = "black", stat = "count", alpha =
## 0.8): Ignoring unknown parameters: `binwidth`, `bins`, and `pad`
customerDF %>%
ggplot(mapping = aes(x = age_group, fill = category)) +
geom_histogram(binwidth = 5, col = "black", stat = "count", alpha = 0.8) +
facet_wrap(~ category, ncol = 2) +
xlab("Yaş Grubu") +
ylab("Frekans") +
ggtitle("Histogram: Yaş Grubu Frekansı ve Kategori") +
theme_light(base_size = 12) +
scale_fill_brewer(palette = "Set3") +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
axis.title = element_text(face = "bold.italic", size = 12),
axis.text = element_text(face = "bold", size = 10),
strip.text = element_text(face = "bold", size = 11),
legend.position = "none"
)
## Warning in geom_histogram(binwidth = 5, col = "black", stat = "count", alpha =
## 0.8): Ignoring unknown parameters: `binwidth`, `bins`, and `pad`
*** Pasta grafikleri geliştirin:**
frequency_table1 <- customerDF %>%
count(gender) %>%
mutate(percentage = n / sum(n) * 100)
ggplot(frequency_table1, aes(x = "", y = percentage, fill = gender)) +
geom_bar(stat = "identity", width = 1, color = "white") +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(round(percentage, 1), "%")), position = position_stack(vjust = 0.5), color = "white") +
ggtitle("Pie Chart for Gender") + labs(fill= "Gender") +
theme_void()
#İstanbul'daki kadınların erkeklerden daha güçlü bir satın alma eğilimi var. Bu, tüm hane halkı için alışverişe çıkan Genç Bekarlardan ve Evli Kadınlardan gelebilir.
frequency_table2 <- customerDF %>%
count(age_group) %>%
mutate(percentage = n / sum(n) * 100)
ggplot(frequency_table2, aes(x = "", y = percentage, fill = age_group)) +
geom_bar(stat = "identity", width = 1, color = "white") +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(round(percentage, 1), "%")),
position = position_stack(vjust = 0.5),
color = "white", size = 4) +
ggtitle("Yaş Grupları İçin Pasta Grafiği") +
labs(fill = "Yaş Grubu") +
theme_void() +
scale_fill_brewer(palette = "Set3") +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
legend.title = element_text(size = 10, face = "bold"),
legend.text = element_text(size = 9)
)
#20 yaş altı 10'lu yaş grubu hariç, her yaş grubu segment başına %19 ile hemen hemen aynı oranı paylaşırken, 20'li yaşlardan 30'lu yaşlara kadar olan segment, 20 ila 40 yaş aralığındaki müşterilere eşit olarak bakıldığında, biraz daha yüksek bir yüzdeye (%19,4) sahip olup, bu da onların alışveriş merkezlerinin ana müşterileri olduğunu göstermektedir.
frequency_table3 <- customerDF %>%
count(category) %>%
mutate(
category = case_when(
category == "Electronics" ~ "Elektronik",
category == "Clothing" ~ "Giyim",
category == "Home" ~ "Ev",
category == "Beauty" ~ "Güzellik",
category == "Sports" ~ "Spor",
TRUE ~ category # Diğer kategoriler varsa olduğu gibi bırakılır
),
percentage = n / sum(n) * 100
)
ggplot(frequency_table3, aes(x = "", y = percentage, fill = category)) +
geom_bar(stat = "identity", width = 1, color = "white") +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(round(percentage, 1), "%")),
position = position_stack(vjust = 0.5),
color = "white", size = 4) + # Yazı boyutu artırıldı
ggtitle("Kategori İçin Pasta Grafiği") + # Başlık Türkçeleştirildi
labs(fill = "Kategori") + # Legend başlığı Türkçeleştirildi
theme_void() + # Gereksiz görsel elemanlar kaldırıldı
scale_fill_brewer(palette = "Paired") + # Çekici bir renk paleti eklendi
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5), # Başlık vurgulandı ve ortalandı
legend.title = element_text(size = 10, face = "bold"), # Legend başlığı kalın yapıldı
legend.text = element_text(size = 9) # Legend metin boyutları artırıldı
)
#Yukarıda analiz edildiği üzere, Satın Alma Birimleri’nde Giyim %34,7 ile en yüksek kategoridir, bunu Kozmetik (%15,2) ve Gıda ve İçecek (%14,9) takip eder. Ayakkabı ve Oyuncaklar %10,1’i oluştururken, diğer kategorilerin her biri %5’lik paya sahiptir.
frequency_table4 <- customerDF %>%
count(shopping_mall) %>%
mutate(percentage = n / sum(n) * 100)
ggplot(frequency_table4, aes(x = "", y = percentage, fill = shopping_mall)) +
geom_bar(stat = "identity", width = 1, color = "white") +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(round(percentage, 1), "%")), position = position_stack(vjust = 0.5), color = "white") +
ggtitle("Alışveriş Merkezleri İçin Pasta Grafiği") + # Başlık Türkçeleştirildi
labs(fill = "Alışveriş Merkezi") + # Legend başlığı Türkçeleştirildi
theme_void() + # Sade tema
scale_fill_brewer(palette = "Set3") + # Çekici bir renk paleti
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5), # Başlık ortalandı ve vurgulandı
legend.title = element_text(size = 10, face = "bold"), # Legend başlığı kalın yapıldı
legend.text = element_text(size = 9) # Legend metin boyutları artırıldı
)
Alt grupların seçilmesi ve faceting ile bazı grafiklerin çizilmesi
exchange_rate <- 27 # Döviz kuru (1 USD = 27 TL) olarak örnek alındı
gender_vector <- customerDF %>%
group_by(gender, shopping_mall) %>%
summarise(customer = n(),
sales_USD = sum(total_sale * 0.052 / 1000),
sales_TL = sales_USD * exchange_rate, # TL cinsine çevrildi
.groups = "drop") %>%
arrange(desc(sales_TL)) # TL cinsinden satışa göre sıralama
gender_vector %>%
ggplot(aes(reorder(shopping_mall, sales_TL), sales_TL)) +
geom_col(position = 'dodge', fill = 'darkblue', col = 'black', alpha = .7) +
coord_flip() +
facet_wrap(~ gender) +
labs(
title = 'Cinsiyete Göre Alışveriş Merkezi Tüketimi (TL)', # Başlık güncellendi
subtitle = '1 = 1,000$'
) +
ylab('Satışlar (TL)') + # Y ekseni Türk Lirası olarak güncellendi
xlab('Alışveriş Merkezi') +
theme_bw() +
theme(
plot.title = element_text(face = 'bold', size = 10, hjust = .5),
axis.title.y = element_text(face = 'italic'),
axis.title.x = element_text(face = 'italic'),
axis.text.x = element_text(face = 'bold'),
axis.text.y = element_text(face = 'bold'),
strip.text.x = element_text(face = 'bold', color = 'white', size = 7),
strip.background.x = element_rect(fill = 'darkred')
)
#İstanbul alışverişinde en çok alışveriş yapan müşteri segmentinin 59 bin 482 kayıtla Kadın olduğu görülüyor. Bu rakam, Erkek müşteri segmentinden 1,48 kat daha fazla
age_vector <- customerDF %>%
group_by(age_group, category) %>%
summarise(customer = n(),
sales_USD = sum(total_sale * 0.052 / 1000),
.groups = "drop") %>%
arrange(desc(sales_USD)) # sales_USD'yi azalan sırayla düzenledik
age_vector %>%
ggplot(aes(reorder(category, sales_USD), sales_USD)) +
geom_col(position = 'dodge', fill = 'yellow', col = 'black', alpha = .7) +
coord_flip() +
facet_wrap(~ age_group) +
labs(
title = 'Yaş Grubuna Göre Kategori Tüketimi', # Başlık Türkçeleştirildi
subtitle = '1 = 1,000$' # Alt başlık Türkçeye çevrildi
) +
ylab('Satışlar (USD)') + # Y ekseni etiketi Türkçeye çevrildi
xlab('Kategori') + # X ekseni etiketi Türkçeye çevrildi
scale_fill_gradient(low = "lightgreen", high = "darkgreen") + # Gradient renk paleti yeşil tonlarında
theme_light() + # Daha açık tema seçildi
theme(
plot.title = element_text(face = 'bold', size = 10, hjust = .5), # Başlık stil düzenlendi
axis.title.y = element_text(face = 'italic'), # Y ekseni başlığına italik stil verildi
axis.title.x = element_text(face = 'italic'), # X ekseni başlığına italik stil verildi
axis.text.x = element_text(face = 'bold'), # X ekseni metin stil verildi
axis.text.y = element_text(face = 'bold'), # Y ekseni metin stil verildi
strip.text.x = element_text(face = 'bold', color = 'white', size = 7), # Facet başlık stil düzenlendi
strip.background.x = element_rect(fill = 'darkred') # Facet başlık arka plan rengi koyu kırmızı yapıldı
)
#10’lu yaş grubu hariç, 20’li ve 60’lı yaş aralığı alışverişte hedef olarak belirlenirken, 6 yaş grubu arasında en hayati satın alma gücüne (satış tutarı = 695.578 USD) sahip olan 40-50 yaş aralığındaki müşterilerdir. İstanbul’da yaşayan müşteriler 34.487 kayıtla - 1.615.935 USD - giyim alışverişinde en yüksek eğilime sahiptir. Aynı zamanda, Teknoloji 4.996 alıcı ile en yüksek satış tutarına sahip 3. kategoridir ve müşterilerin yüksek teknoloji ürünlerine para yatırdığını göstermektedir.
category_vector <- customerDF %>%
group_by(category, payment_method) %>%
summarise(customer = n(),
sales_USD = sum(total_sale * 0.052 / 1000),
.groups = "drop") %>%
arrange(desc(sales_USD)) # sales_USD'yi azalan sırayla düzenledik
category_vector %>%
ggplot(aes(reorder(payment_method, sales_USD), sales_USD)) +
geom_col(position = 'dodge', fill = 'midnightblue', col = 'black', alpha = .8) + # Renk tonu ve opaklık ayarlandı
coord_flip() +
facet_wrap(~ category) +
labs(
title = 'Kategoriye Göre Ödeme Yöntemi Tüketimi', # Başlık Türkçeleştirildi
subtitle = '1 = 1,000$' # Alt başlık Türkçeye çevrildi
) +
ylab('Satışlar (USD)') + # Y ekseni etiketi Türkçeye çevrildi
xlab('Ödeme Yöntemi') + # X ekseni etiketi Türkçeye çevrildi
scale_fill_manual(values = c('midnightblue', 'orange', 'green', 'darkred')) + # Manuel renk paleti eklendi
theme_minimal() + # Minimalist tema kullanıldı
theme(
plot.title = element_text(face = 'bold', size = 14, hjust = .5, color = 'darkblue'), # Başlık boyutu ve rengi ayarlandı
plot.subtitle = element_text(size = 12, hjust = .5, color = 'gray'), # Alt başlık stili
axis.title.y = element_text(face = 'italic', size = 12, color = 'black'), # Y ekseni başlığına stil eklendi
axis.title.x = element_text(face = 'italic', size = 12, color = 'black'), # X ekseni başlığına stil eklendi
axis.text.x = element_text(face = 'bold', size = 10, color = 'black'), # X ekseni metni
axis.text.y = element_text(face = 'bold', size = 10, color = 'black'), # Y ekseni metni
strip.text.x = element_text(face = 'bold', color = 'white', size = 10), # Facet başlık stil düzenlendi
strip.background.x = element_rect(fill = 'darkgray') # Facet başlık arka planı koyu griye çevrildi
) +
geom_text(aes(label = round(sales_USD, 1)),
position = position_dodge(width = 0.8),
vjust = -0.5, size = 4, color = 'white') # Etiketler için beyaz renk seçildi
category_vector <- customerDF %>%
group_by(category, payment_method) %>%
summarise(customer = n(),
sales_USD = sum(total_sale * 0.052 / 1000),
.groups = "drop") %>%
arrange(desc(sales_USD)) # sales_USD'yi azalan sırayla düzenledik
category_vector %>%
ggplot(aes(reorder(payment_method, sales_USD), sales_USD)) +
geom_col(fill = 'midnightblue', col = 'black', alpha = .8) + # Renk tonu ve opaklık ayarlandı
coord_flip() +
facet_wrap(~ category) +
labs(
title = 'Kategoriye Göre Ödeme Yöntemi Tüketimi', # Başlık Türkçeleştirildi
subtitle = '1 = 1,000$' # Alt başlık Türkçeye çevrildi
) +
ylab('Satışlar (USD)') + # Y ekseni etiketi Türkçeye çevrildi
xlab('Ödeme Yöntemi') + # X ekseni etiketi Türkçeye çevrildi
scale_fill_manual(values = c('midnightblue', 'orange', 'green', 'darkred')) + # Manuel renk paleti eklendi
theme_minimal() + # Minimalist tema kullanıldı
theme(
plot.title = element_text(face = 'bold', size = 14, hjust = .5, color = 'darkblue'), # Başlık boyutu ve rengi ayarlandı
plot.subtitle = element_text(size = 12, hjust = .5, color = 'gray'), # Alt başlık stili
axis.title.y = element_text(face = 'italic', size = 12, color = 'black'), # Y ekseni başlığına stil eklendi
axis.title.x = element_text(face = 'italic', size = 12, color = 'black'), # X ekseni başlığına stil eklendi
axis.text.x = element_text(face = 'bold', size = 10, color = 'black'), # X ekseni metni
axis.text.y = element_text(face = 'bold', size = 10, color = 'black'), # Y ekseni metni
strip.text.x = element_text(face = 'bold', color = 'white', size = 10), # Facet başlık stil düzenlendi
strip.background.x = element_rect(fill = 'darkgray') # Facet başlık arka planı koyu griye çevrildi
)
#İstanbul’da yaşayan müşteriler alışveriş yaparken en fazla nakit
kullanırken, banka kartı üç yöntem arasında en zayıf olanıdır. Bunun
dışında, nakit ve kredi kartı kullanımı arasındaki fark Giyim’de en
büyüktür, Kozmetik, Teknoloji ve Ayakkabı’da ise daha küçük
olabilir.
mall_vector <- customerDF %>%
group_by(shopping_mall) %>%
summarise(customer = n(),
sales_USD = sum(total_sale * 0.052 / 1000),
.groups = "drop") %>%
arrange(desc(sales_USD)) # Sales_USD'yi azalan sırayla düzenledik
mall_vector %>%
ggplot() +
geom_col(aes(reorder(shopping_mall, sales_USD), sales_USD),
fill = 'darkgreen', col = 'black', alpha = .6, width = .7) + # Bar renkleri ve opaklık ayarlandı
coord_flip() + # X ve Y eksenlerini ters çevirir
labs(
title = 'Alışveriş Merkezi Sıralaması', # Başlık
subtitle = '1 = 1,000$', # Alt başlık
y = 'Toplam Satış (USD)', # Y ekseni etiketi
x = NULL # X ekseni etiketi boş bırakıldı
) +
theme(
plot.title = element_text(size = 10, face = 'bold', hjust = .5), # Başlık stili
axis.title.y = element_text(face = 'bold'), # Y ekseni başlığına stil eklendi
axis.text.y = element_text(face = 'bold', size = 7), # Y ekseni metin stil ve boyutu
axis.title.x = element_text(face = 'italic', size = 7), # X ekseni başlığına stil eklendi
axis.text.x = element_text(face = 'bold') # X ekseni metin stil
)
#Veri seti İstanbul’daki 10 alışveriş merkezinden toplandı. Bunlar arasında Mall of İstanbul ve Kanyon, sırasıyla 19.943 kayıt ve 19.823 kayıtla en yüksek trafiğe sahip iki alışveriş merkezidir. 10 alışveriş merkezinden 4’ünde 10.000’den fazla müşteri kaydedilmiş olup bu, bu şehrin en önemli 4 alışveriş merkezini temsil ederken, diğer trafik aralığı 4.800 ile 10.000 müşteri arasındadır.
payment_vector <- customerDF %>%
group_by(payment_method, age_group) %>%
summarise(customer = n(),
sales_USD = sum(total_sale * 0.070 / 1000),
.groups = "drop") %>%
arrange(desc(sales_USD)) # Sales_USD'yi azalan sırayla düzenledik
payment_vector %>%
ggplot(aes(reorder(age_group, sales_USD), sales_USD)) +
geom_col(position = 'dodge', fill = 'blue', col = 'black', alpha = .5) +
coord_flip() +
facet_wrap(~ payment_method) + # Facet wrap ile ödeme yöntemine göre ayırdık
labs(
title = 'Ödeme Yöntemine Göre Yaş Grubuna Tüketim', # Başlık Türkçeye çevrildi
subtitle = '1 = 1,000$', # Alt başlık Türkçeye çevrildi
y = 'Satışlar (USD)', # Y ekseni etiketi Türkçeye çevrildi
x = 'Ödeme Yöntemi' # X ekseni etiketi Türkçeye çevrildi
) +
theme_minimal() + # Minimalist tema kullanıldı
theme(
plot.title = element_text(face = 'bold', size = 14, hjust = .5), # Başlık boyutu ve rengi ayarlandı
plot.subtitle = element_text(size = 12, hjust = .5, color = 'gray'), # Alt başlık stili
axis.title.y = element_text(face = 'italic', size = 12, color = 'black'), # Y ekseni başlığına stil eklendi
axis.title.x = element_text(face = 'italic', size = 12, color = 'black'), # X ekseni başlığına stil eklendi
axis.text.x = element_text(face = 'bold', size = 10, color = 'black'), # X ekseni metni
axis.text.y = element_text(face = 'bold', size = 10, color = 'black'), # Y ekseni metni
strip.text.x = element_text(face = 'bold', color = 'white', size = 10), # Facet başlık stil ayarı
strip.background.x = element_rect(fill = 'darkred') # Facet başlık arka plan rengi
)
customerDF %>%
group_by(shopping_mall, age_group, category) %>% # Veriyi alışveriş merkezi, yaş grubu ve kategoriye göre gruplar
summarise(sales_USD = sum(total_sale * 0.052 / 1000), .groups = "drop") %>% # Toplam satışları hesaplar (USD cinsinden)
dplyr::filter(category %in% c('Clothing', 'Shoes', 'Technology', 'Cosmetics')) %>% # Yalnızca dört kategoriye odaklanır
ggplot(aes(reorder(category, -sales_USD), sales_USD, fill = age_group)) + # Kategoriyi satışlara göre sıralar ve yaş grubuna göre renkler
geom_col(position = 'dodge', col = 'black', alpha = .7) + # Çubuk grafik oluşturur, siyah çerçeve ve opaklık ayarları yapılır
facet_wrap(~ shopping_mall) + # Her alışveriş merkezi için ayrı grafik oluşturur
labs(
title = 'Yaş Grubuna Göre Alışveriş Merkezlerinde Tercih Edilen Kategoriler', # Başlık Türkçeye çevrildi
subtitle = '1 = 1,000$', # Alt başlık Türkçeye çevrildi
fill = "Yaş Grubu" # Yaş Grubu etiketi Türkçeye çevrildi
) +
xlab('Kategori') + # X ekseni etiketi Türkçeye çevrildi
ylab('Toplam Satışlar (USD)') + # Y ekseni etiketi Türkçeye çevrildi
theme_bw() + # Siyah-beyaz tema
theme(
plot.title = element_text(face = 'bold', size = 10, hjust = .5), # Başlık stilini düzenler
strip.background.x = element_rect(fill = 'darkblue'), # Facet başlıklarının arka plan rengini koyu mavi yapar
strip.text.x = element_text(face = 'bold', color = 'white', size = 7), # Facet başlık metnini kalın yapar ve beyaz renk verir
axis.title = element_text(face = 'italic'), # Eksen başlıklarını italik yapar
axis.text = element_text(face = 'bold', size = 7, angle = 20) # Eksen metinlerini kalın ve 20 derece açıyla döndürür
) +
scale_fill_brewer(palette = 'Set2') # Kategorilere renk paleti (Set2)
customerDF %>%
mutate(date2 = invoice_date %>% str_sub(1,7) %>% ym()) %>% # Invoice tarihi üzerinden yıl ve ay bilgilerini alır
group_by(date2, shopping_mall) %>% # Veriyi tarih ve alışveriş merkezi bazında gruplar
summarise(sales_USD = sum(total_sale * 0.052 / 1000), .groups = "drop") %>% # Toplam satışları hesaplar (USD cinsinden)
dplyr::filter(date2 <= '2023-02-01') %>% # Veriyi 2023 Şubat ayına kadar filtreler
ggplot(aes(date2, sales_USD, col = shopping_mall)) + # Tarih ve toplam satışları gösteren grafiği oluşturur
geom_line(linewidth = .5, alpha = .7) + # Çizgi genişliği ve opaklık ayarları
theme_minimal() + # Minimalist tema kullanılır
facet_wrap(~ shopping_mall) + # Alışveriş merkezlerine göre ayrılmış grafikler oluşturur
labs(
title = 'Zaman Serisi Satış Grafiği', # Başlık Türkçeleştirildi
subtitle = '1 = 1,000$' # Alt başlık Türkçeleştirildi
) +
xlab('Tarih') + # X ekseni etiketi Türkçeye çevrildi
ylab('Toplam Satışlar (USD)') + # Y ekseni etiketi Türkçeye çevrildi
theme(
plot.title = element_text(face = 'bold', size = 10, hjust = .5), # Başlık stilini düzenler
strip.background = element_rect(fill = '#fd8d3c'), # Facet başlıklarının arka plan rengini turuncuya ayarlama
strip.text = element_text(face = 'bold', colour = 'white', size = 7), # Facet başlık metnini kalın ve beyaz yapar
axis.title = element_text(face = 'italic'), # Eksen başlıklarını italik yapar
axis.text = element_text(face = 'bold', size = 7, angle = 25), # Eksen metinlerini kalın ve 25 derece açıyla döndürür
legend.position = 'none' # Legend'ı gizler
) +
scale_x_date(date_breaks = '5 months', date_labels = '%Y-%m') # X ekseninde 5 aylık aralıklarla tarih etiketleri
#Her bir müşteri için harcama ve satış (USD cinsinden) bilgilerini görselde temsil eder ve her bir cinsiyet için ayrı grafikler oluşturur.
gender_vector %>%
ggplot() +
geom_point(aes(customer, sales_USD, color = gender), size = 3, alpha = 0.6) + # Nokta boyutu ve opaklık ayarları
facet_wrap(~gender) +
labs(
title = "Cinsiyet Harcama Dağılım Grafiği",
x = 'Müşteri',
y = 'Toplam Satışlar (USD)'
) +
scale_color_manual(values = c('blue', 'pink')) + # Cinsiyete göre renkleri manuel olarak belirler
guides(color = guide_legend(title = "Cinsiyet"))
#Beklendiği gibi, İstanbul’daki kadınların erkeklerden daha güçlü bir
satın alma eğilimi var. Bu, tüm hane halkı için alışverişe çıkan Genç
Bekarlardan ve Evli Kadınlardan gelebilir.
# belirli kategorilerdeki müşteri satın alma davranışlarını görselleştiren bir dağılım grafiği (scatter plot) oluşturur. Satın alınan miktar (quantity) ile toplam satışlar (sales_USD) arasındaki ilişkiyi gösterir ve ödemek için kullanılan ödeme yöntemine göre renk ayrımı yapar
customerDF %>%
group_by(category, age_group, quantity, payment_method) %>% # Kategorilere, yaş grubuna, miktara ve ödeme yöntemine göre grupla
summarise(sales_USD = sum(total_sale * 0.052 / 1000), .groups = "drop") %>% # Toplam satışları hesaplar (USD cinsinden)
ggplot() +
geom_point(aes(quantity, sales_USD, color = payment_method)) + # Miktar ve toplam satışları renk ile ödeme yöntemine göre gösterir
facet_wrap(. ~ category) + # Kategorilere göre ayrı grafikler oluşturur
labs(
title = "Kategoriye Göre Satın Alma Davranışı Dağılım Grafiği", # Başlık Türkçeye çevrildi
subtitle = '1 = 1,000$', # Alt başlık Türkçeye çevrildi
x = 'Miktar', # X ekseni etiketi Türkçeye çevrildi
y = 'Toplam Satışlar (USD)' # Y ekseni etiketi Türkçeye çevrildi
) +
guides(color = guide_legend(title = "Ödeme Yöntemi")) +
theme_bw() + # Siyah-beyaz tema kullanıldı
theme(
plot.title = element_text(face = 'bold', size = 10, hjust = .5), # Başlık stilini düzenler
strip.background.x = element_rect(fill = 'blue'), # Facet başlıklarının arka plan rengini koyu turuncu yapar
strip.text.x = element_text(face = 'bold', color = 'white', size = 7), # Facet başlık metnini kalın yapar ve beyaz renk verir
axis.title = element_text(face = 'italic'), # Eksen başlıklarını italik yapar
axis.text.y = element_text(face = 'bold', size = 7, angle = 20) # Y eksenindeki metni kalın yapar ve 20 derece döndürür
) +
scale_color_brewer(palette = 'Set1') # Ödeme yöntemine göre renk paletini belirler
#Nakit, hem müşteri adedi hem de satış tutarı açısından en yüksek
kullanım oranına sahip, birincil ödeme yöntemi olmaya devam ediyor.
customerDF %>%
group_by(category, age_group, quantity, payment_method) %>% # Kategorilere, yaş grubuna, miktara ve ödeme yöntemine göre grupla
summarise(sales_USD = sum(total_sale * 0.052 / 1000), .groups = "drop") %>% # Toplam satışları hesaplar (USD cinsinden)
ggplot() +
geom_point(aes(quantity, sales_USD, color = payment_method)) + # Miktar ve toplam satışları renk ile ödeme yöntemine göre gösterir
facet_wrap(. ~ category) + # Kategorilere göre ayrı grafikler oluşturur
labs(
title = "Kategoriye Göre Satın Alma Davranışı Dağılım Grafiği", # Başlık Türkçeye çevrildi
subtitle = '1 = 1,000$', # Alt başlık Türkçeye çevrildi
x = 'Miktar', # X ekseni etiketi Türkçeye çevrildi
y = 'Toplam Satışlar (USD)' # Y ekseni etiketi Türkçeye çevrildi
) +
guides(color = guide_legend(title = "Ödeme Yöntemi")) + # Renk rehberi başlığı Türkçeye çevrildi
theme_bw() + # Siyah-beyaz tema kullanıldı
theme(
plot.title = element_text(face = 'bold', size = 10, hjust = .5), # Başlık stilini düzenler
strip.background.x = element_rect(fill = 'darkorange'), # Facet başlıklarının arka plan rengini koyu turuncu yapar
strip.text.x = element_text(face = 'bold', color = 'white', size = 7), # Facet başlık metnini kalın yapar ve beyaz renk verir
axis.title = element_text(face = 'italic'), # Eksen başlıklarını italik yapar
axis.text.y = element_text(face = 'bold', size = 7, angle = 20) # Y eksenindeki metni kalın yapar ve 20 derece döndürür
) +
scale_color_brewer(palette = 'Set1') # Ödeme yöntemine göre renk paletini belirler
## Müşterilerin yaş grubuna göre tercih ettiği alışveriş
merkezleri ilk 4 kategoriyi filtreliyor
customerDF %>%
group_by(shopping_mall, age_group, category) %>%
summarise(sales_USD = sum(total_sale * 0.052 / 1000), .groups = "drop") %>%
dplyr::filter(category %in% c('Clothing', 'Shoes', 'Technology', 'Cosmetics')) %>%
ggplot(aes(reorder(category, -sales_USD), sales_USD, color = age_group)) +
geom_point() +
facet_wrap(~ shopping_mall) +
labs(
title = 'Yaş Grubuna Göre Alışveriş Merkezlerinde Tercih Edilen Kategoriler',
subtitle = '1 = 1.000$'
) +
xlab('Kategori') +
ylab('Toplam Satışlar (USD)') +
guides(color = guide_legend(title = "Yaş Grubu")) +
theme_bw() +
theme(
plot.title = element_text(face = 'bold', size = 10, hjust = .5),
strip.background.x = element_rect(fill = 'darkred'),
strip.text.x = element_text(face = 'bold', color = 'white', size = 7),
axis.title = element_text(face = 'italic'),
axis.text = element_text(face = 'bold', size = 7, angle = 20)
) +
scale_fill_brewer(palette = 'Set1')
#Tüm 4 kategoride her alışveriş merkezinde benzer bir eğilim vardır.
Ayrıntılı olarak, 40’lı (40 ila 50 yaş arası) müşteriler ve 60’lı (60
yaş üstü) müşteriler agresif bir şekilde satın alma yaparken, bunu 20’li
(20 ila 30 yaş arası) ve 50’li (50 ila 60 yaş arası) müşteriler takip
eder; ancak bu model mağazalar arasında değişir - örneğin: Mall of
İstanbul’da 40’lı ve 60’lı yıllar aynı gücü paylaşırken, Kanyon’da 40’lı
yıllar daha önemli bir satın alma gücüne sahiptir ve bu her alışveriş
merkezini çevreleyen demografiden etkilenebilir.
#**Hipotez 1: Yaş ve Cinsiyet Alışveriş Davranışını Etkiler**
shopping_model1 <- lm(quantity ~ age + gender, data = customerDF)
summary(shopping_model1)
##
## Call:
## lm(formula = quantity ~ age + gender, data = customerDF)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.00519 -1.00424 -0.00343 0.99739 1.99839
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.001e+00 1.422e-02 210.998 <2e-16 ***
## age 6.281e-05 2.989e-04 0.210 0.834
## genderMale -3.748e-04 9.139e-03 -0.041 0.967
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.413 on 99454 degrees of freedom
## Multiple R-squared: 4.613e-07, Adjusted R-squared: -1.965e-05
## F-statistic: 0.02294 on 2 and 99454 DF, p-value: 0.9773
ggplot(data = customerDF, aes(x = age, y = quantity, color = gender)) +
geom_smooth(method = "lm", se = FALSE) + # Doğrusal regresyon çizgisi ekler
labs(x = "Yaş", y = "Miktar", title = "Cinsiyete Göre Yaş Üzerinden Miktar Regresyonu") +
guides(color = guide_legend(title = "Cinsiyet"))
## `geom_smooth()` using formula = 'y ~ x'
Erkekler için satın alınan miktar yaşla birlikte artarken, kadınlar için azalmaktadır.
Hipotez 1 için yapılan regresyon analizinin çıktısından şu sonuçlar çıkarılabilir:
Kesim noktası tahmini 3.001e+00, standart hata ise 1.422e-02’dir. Bu, diğer tüm değişkenler (Yaş ve Cinsiyet) sabit olduğunda, yanıt değişkeni (Miktar) için beklenen değeri temsil eder.
Yaş için katsayı tahmini 6.281e-05, standart hata ise 2.989e-04’tür. t-değeri 0.210 ve p-değeri 0.834, Yaş’ın müşteri satın alımlarını tahmin etmede istatistiksel olarak anlamlı olmadığını göstermektedir. Bu, yaş ile alışveriş davranışı arasında anlamlı bir ilişki olmadığına işaret eder.
Cinsiyet (Erkek) için katsayı tahmini -3.748e-04, standart hata ise 9.139e-03’tür. t-değeri -0.041 ve p-değeri 0.967, Cinsiyet (Erkek)’in müşteri satın alımlarını tahmin etmede istatistiksel olarak anlamlı olmadığını gösterir. Bu, cinsiyetler arasında alışveriş davranışında önemli bir fark olmadığını öne sürer.
R-kare değeri 4.613e-07, bu da modelin Miktar üzerindeki varyansın çok küçük bir kısmını açıkladığını gösterir. Düzeltilmiş R-kare değeri -1.965e-05 olup sıfıra yakındır ve modelin veriye iyi uyum sağlamadığını gösterir.
F-istatistiği 0.02294 ve p-değeri 0.9773, genel modelin Miktarı tahmin etmede istatistiksel olarak anlamlı olmadığını, çünkü p-değerinin 0.05’ten büyük olduğunu gösterir.
Bu sonuçlara dayanarak, Yaş ve Cinsiyet’in bu veri setinde alışveriş davranışını anlamlı şekilde etkilemediği ve Miktar üzerindeki tahminlerde istatistiksel olarak anlamlı bir rol oynamadığı sonucuna varılabilir.
#**Hipotez 2: Ödeme Yöntemi Satın Alma Tutarını Etkiler**
shopping_model2 <- lm(price ~ payment_method, data = customerDF)
summary(shopping_model2)
##
## Call:
## lm(formula = price ~ payment_method, data = customerDF)
##
## Residuals:
## Min 1Q Median 3Q Max
## -685.6 -645.4 -483.7 509.5 4563.0
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 690.823 4.464 154.743 <2e-16 ***
## payment_methodCredit Card -2.281 6.730 -0.339 0.735
## payment_methodDebit Card -3.794 8.003 -0.474 0.635
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 941.2 on 99454 degrees of freedom
## Multiple R-squared: 2.572e-06, Adjusted R-squared: -1.754e-05
## F-statistic: 0.1279 on 2 and 99454 DF, p-value: 0.88
ggplot(data = customerDF, aes(x = payment_method, y = price)) +
geom_boxplot(fill = 'lightblue', color = 'black', alpha = .6) +
labs(x = "Ödeme Yöntemi", y = "Fiyat", title = "Ödeme Yöntemine Göre Fiyatların Dağılımı") +
theme_minimal() +
theme(
plot.title = element_text(face = 'bold', size = 12, hjust = .5),
axis.title = element_text(face = 'italic'),
axis.text = element_text(face = 'bold', size = 10)
)
#: Ödeme Yöntemi (Kredi Kartı veya Banka Kartı) bu veri setinde Satın
Alma Tutarını önemli ölçüde etkilemez, çünkü istatistiksel olarak
anlamlı bir öngörücü değildir. Aynı şekilde analiz ederek, Ödeme
Yöntemi’nin (Kredi Kartı veya Banka Kartı) bu veri setinde Satın Alma
Tutarını önemli ölçüde etkilemediği sonucuna varabiliriz, çünkü
istatistiksel olarak anlamlı bir öngörücü değildir.
#**Hipotez 3: Alışveriş Merkezinin Konumu Satın Alma Sıklığını Etkiler**
shopping_model3 <- lm(quantity ~ shopping_mall, data = customerDF)
summary(shopping_model3)
##
## Call:
## lm(formula = quantity ~ shopping_mall, data = customerDF)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.01429 -1.01247 -0.00177 1.00481 2.00926
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.9951913 0.0200017 149.747 <2e-16 ***
## shopping_mallEmaar Square Mall 0.0189429 0.0285501 0.663 0.507
## shopping_mallForum Istanbul 0.0070322 0.0283496 0.248 0.804
## shopping_mallIstinye Park 0.0172818 0.0245808 0.703 0.482
## shopping_mallKanyon 0.0042033 0.0223785 0.188 0.851
## shopping_mallMall of Istanbul 0.0190994 0.0223650 0.854 0.393
## shopping_mallMetrocity -0.0044512 0.0230887 -0.193 0.847
## shopping_mallMetropol AVM 0.0094342 0.0244250 0.386 0.699
## shopping_mallViaport Outlet -0.0004823 0.0283973 -0.017 0.986
## shopping_mallZorlu Center 0.0065821 0.0281694 0.234 0.815
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.413 on 99447 degrees of freedom
## Multiple R-squared: 3.622e-05, Adjusted R-squared: -5.428e-05
## F-statistic: 0.4002 on 9 and 99447 DF, p-value: 0.9356
ggplot() +
geom_col(data = customerDF, aes(x = shopping_mall, y = quantity), fill = 'darkgreen', color = 'blue', alpha = .7) +
labs(x = "Alışveriş Merkezi", y = "Miktar", title = "Alışveriş Merkezlerine Göre Miktar Dağılımı") +
theme_minimal() +
theme(
plot.title = element_text(face = 'bold', size = 12, hjust = .5),
axis.title = element_text(face = 'italic'),
axis.text = element_text(face = 'bold', size = 10, angle = 20)
)
#Konum, alışveriş sıklığında önemli bir rol oynar. İstanbul alışveriş
merkezi ve Kanyon konumu en yüksek işlemlere sahiptir. Aynı şekilde
analiz ederek, regresyon sonucunun alışveriş merkezi konumu ile satın
alınan miktar arasında istatistiksel olarak anlamlı bir ilişki
göstermediği sonucuna varabiliriz. Ancak, bir çubuk grafiği, veri
setindeki verilere göre İstanbul Alışveriş Merkezi ve Kanyon Alışveriş
Merkezi’nin en yüksek satın alma miktarına sahip olduğunu
göstermektedir. Bu, bir çubuk grafiğinin yalnızca verilerin dağılımını
gösterdiğini ve değişkenler arasındaki nedensellik veya ilişkiler için
mutlaka kanıt sağlamadığını göstermektedir.
#**Hipotez 4: Ürün Kategorisi Satın Alma Tutarını Etkiler**
shopping_model4 <- lm(log(price) ~ category, data = customerDF) # Fiyatın logaritmasını alıyoruz
summary(shopping_model4)
##
## Call:
## lm(formula = log(price) ~ category, data = customerDF)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.9636 -0.2680 0.1397 0.4274 0.6613
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.678224 0.008041 457.42 <2e-16 ***
## categoryClothing 2.984729 0.008602 346.97 <2e-16 ***
## categoryCosmetics 0.989195 0.009273 106.67 <2e-16 ***
## categoryFood & Beverage -1.068744 0.009298 -114.94 <2e-16 ***
## categoryShoes 3.682571 0.009837 374.37 <2e-16 ***
## categorySouvenir -0.267887 0.011362 -23.58 <2e-16 ***
## categoryTechnology 4.239165 0.011363 373.05 <2e-16 ***
## categoryToys 0.861943 0.009828 87.70 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5675 on 99449 degrees of freedom
## Multiple R-squared: 0.9006, Adjusted R-squared: 0.9006
## F-statistic: 1.288e+05 on 7 and 99449 DF, p-value: < 2.2e-16
ggplot(customerDF, aes(x = category, y = log(price))) + # Logaritma alınmış fiyatı grafikte kullanıyoruz
geom_boxplot() +
labs(x = "Ürün Kategorisi", y = "Log(Fiyat)", title = "Ürün Kategorilerine Göre Logaritmik Fiyat Dağılımı") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(face = 'bold', size = 12, hjust = 0.5),
axis.title = element_text(face = 'italic'))
``
ggplot(customerDF, aes(x = category, y = price)) +
geom_violin(fill = "lightblue", color = "darkblue") +
labs(x = "Ürün Kategorisi", y = "Fiyat", title = "Ürün Kategorilerine Göre Fiyat Dağılımı") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(face = 'bold', size = 12, hjust = 0.5),
axis.title = element_text(face = 'italic'))
ggplot(customerDF, aes(x = category, y = price)) +
geom_boxplot(fill = "lightgreen", color = "darkgreen") + # Farklı renkler seçildi
labs(x = "Ürün Kategorisi", y = "Fiyat", title = "Ürün Kategorilerine Göre Fiyat Dağılımı") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(face = 'bold', size = 12, hjust = 0.5),
axis.title = element_text(face = 'italic'))