1.Veri Setinin Açıklaması

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

Ön işleme verileri:

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

Ön tanımlayıcı istatistik analizi

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

Kategorik değişkenler için benzersiz düzey sayısı:

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

Kategorik değişkenlere ait frekans tablosu:

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

Değişkenlik Ölçüleri:

price_range <- range(customerDF$price, na.rm = TRUE)
cat("Price range: ", price_range[1], " - ", price_range[2], "\n")
## Price range:  5.23  -  5250

Fiyatın standart sapmasını ve varyansını hesaplayın

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

Fiyatın çeyrekler arası aralığını hesaplayın:

price_iqr <- IQR(customerDF$price, na.rm = TRUE)
cat("Price interquartile range: ", price_iqr, "\n")
## Price interquartile range:  1154.87

Dağıtım:

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

Cinsiyete Göre Alışveriş Merkezi Tüketimi

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

Yaş Grubuna Göre Kategori Tüketimi

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.

Kategoriye Göre Ödeme Yöntemi Tüketimi

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.

Alışveriş Merkezi Sıralaması

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.

Ödeme Yöntemine Göre Yaş Grubuna Tüketim

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
  )

Müşterilerin yaş grubuna göre tercih ettiği alışveriş merkezleri ilk 4 kategoriyi filtreliyor

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.

Regression

#**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'

Grafik Analizi

Erkekler için satın alınan miktar yaşla birlikte artarken, kadınlar için azalmaktadır.

Regresyon Analizi Çıktıları

Hipotez 1 için yapılan regresyon analizinin çıktısından şu sonuçlar çıkarılabilir:

Kesim Noktası (Intercept)

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ş

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)

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.

Çoklu R-kare ve Düzeltilmiş R-kare

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 ve p-değeri

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.

Sonuç

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'))