I. Giới thiệu chung về bộ dữ liệu

Bộ dữ liệu a là bộ dữ liệu về giá và sản lượng bơ Hass được bán ra từ năm 2015 - 2018 ở Hoa Kỳ

Bộ dữ liệu bao gồm 18249 quan sát và 12 biến như sau:

  • Date: Ngày quan sát là các ngày cuối tuần

  • AveragePrice: Giá trung bình của một quả bơ

  • Total.Volume: Tổng số bơ bán được

  • X4046: Tổng số bơ có mã số 4046 bán ra

  • X4225: Tổng số bơ có mã số 4225 bán ra

  • X4770: Tổng số bơ có mã 4770 bán ra

  • Total.Bag: Tổng số túi bơ được bán ra

  • Small.Bags: Số túi nhỏ

  • Large.Bags: Số túi lớn

  • type: loại thông thường hoặc hữu cơ

  • year: Năm quan sát

  • region: khu vực quan sát

#đọc file dữ liệu csv
a <- read.csv(file.choose(), header = T)

# Rút trích dữ liệu, tiến hành loại bỏ các biến không cần sử dụng tới
a <- select(a, -c(X,XLarge.Bags)) # xóa các cột X và cột XLarge.Bags
a

Tiến hành chuyển đổi cột year thành hệ số để trở thành biến phân loại, đồng thời tạo ra biến mới là biến month từ cột Date

a$region <- as.factor(a$region)
a$year <- as.factor(a$year) # chuyển biến year thành factor
a$Date <- as.Date(a$Date) # chuyển cột Date thành kiểu ngày
a$month <-  factor(months(a$Date), levels = month.name) #tạo biến phân loại month, month.name: đặt tên cho tháng

II. Phân tích bộ dữ liệu

Tiến hành Trực quan hóa dữ liệu để phân tích dữ liệu, nhằm hiểu rõ hơn về các mối quan hệ, xu hướng và biểu đồ dữ liệu một cách hiệu quả. Sử dụng các công cụ và phương tiện phù hợp để trực quan hóa dữ liệu cho các biến trong bộ dữ liệu.

1. Đồ thị giá trung bình của bơ theo năm

a %>% group_by(year) %>% summarise(m= mean(AveragePrice)) %>% 
  ggplot(aes(x = year,y = m)) +
  geom_col(fill = 'pink', position = 'dodge') +
  geom_text(aes(label = round(m,2)), vjust = 2) +
  labs(x = 'Năm', y = 'Avg_price', title = 'Giá trung bình của bơ từ năm 2015-2018')

  • Giá trung bình của bơ giảm dần từ năm 2015 đến năm 2018

  • Giá trung bình giữa các loại có sự chênh lệch tương đối ít qua các năm

  • Năm 2017 là năm mà bơ có giá trung bình cao nhất trong vòng 4 năm, chứng tỏ năm 2017 là năm thị trường tiêu thụ bơ lớn, điều này làm tăng giá bơ

  • Năm 2016 là năm có giá trung bình thấp nhất (1,34), tức là năm này bơ là thực phẩm không được ưa chuộng nhiều

2. Đồ thị giá trung bình của bơ theo loại ở từng năm

a %>% group_by(type,year) %>% summarise(m = mean(AveragePrice)) %>% 
  ggplot(aes(x = year, y = m, fill = type)) +
  geom_col(position = 'dodge') +
  labs(title = 'Giá trung bình của bơ theo loại')

Đồ thị thể hiện giá của trung bình của 2 loại bơ trong vòng 4 năm:

  • Năm 2017 là năm có giá trung bình của cả 2 loại là lớn nhất: hơn 1,25 đối với conventional và lớn hơn 1,5 đối với organic

  • Bơ thông thường có giá thấp hơn so với bơ hữu cơ

  • Bơ thông thường được ưa chuộng hơn vì giá luôn thấp hơn so với bơ hữu cơ, chênh lệch khoảng ~0,4

3. Đồ thị thể hiện tỷ lệ số lượng bơ được bán theo loại

a %>% group_by(type) %>% summarise(m = mean(Total.Volume)) %>% 
  mutate(pc= scales::percent(prop.table(m))) %>% 
  ggplot(aes(x = '', y = pc,fill = type)) +
  geom_col(color = 'black') +
  coord_polar('y') +
  geom_text(aes(x = 1.3, label = pc ), position = position_stack(vjust = .4)) +
  theme_void()

  • Giải thích câu lệnh: prop.table dùng để tính toán tỉ lệ của số lượng bơ bán ra; scale::percent dùng để định dạng giá trị số thành dạng %

Thông qua đồ thị Pie thể hiện phần trăm bán ra của 2 loại bơ

  • Có 97% loại bơ bán ra là bơ thông thường, trên thị trường loại bơ chiếm đa số, dễ dàng tìm thấy

  • Số lượng bơ hữu cơ có mặt trên thị trường rất ít chỉ 3% trên tổng số bơ được bán ra

4. Đồ thị thể hiện mối tương quan giữa tổng số lượng và tổng số túi bơ được bán

a %>% ggplot(aes(x=Total.Volume, y=Total.Bags)) +
  geom_point() +
  geom_smooth(method ="lm", color="pink") +
  labs(title = 'Mối quan hệ giữa tổng số lượng và số túi bán ra')
## `geom_smooth()` using formula = 'y ~ x'

Số lượng bơ bán ra có cùng mối tương quan với số túi bán ra. Khi số lượng bán ra tăng thì số túi bơ cũng tăng theo

5. Đồ thị thể hiện sự phân tán của số lượng và giá trung bình

a %>% ggplot(aes(x = AveragePrice, y = Total.Volume)) +
  geom_point()

Đồ thị phân tán thể hiện mối quan hệ giữ hai biến AveragePrice và Total.Volume:

  • Biểu đồ phân tán không đồng đều, giữ hai biến có sự phụ thuộc lẫn nhau

  • Số lượng bơ càng nhiều thì giá trung bình của bơ càng thấp. Bơ có mức giá trung bình tập trung 0,5 - 2

6.Đồ thị phân tán số lượng và giá trung bình theo loại

a %>% ggplot(aes(x = AveragePrice, y = Total.Volume, color = type)) +
  geom_point()

7. Đồ thị phân tán và xu hướng chung của số lượng và giá cả theo loại

a %>% ggplot(aes(x = AveragePrice, y = Total.Volume)) +
  geom_point(aes(color = type)) +
  geom_smooth(color = 'black')
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'

8. Đồ thị thể hiện giá bơ trung bình hàng tháng theo loại

# tính giá cả trung bình theo nhóm
av <-  a %>% group_by(year, month, type) %>% # nhóm tập dữ liệu theo year,month,type
  select(year, month, type,AveragePrice) %>% # rút trích các cột
    summarise(Avg = mean(AveragePrice)) # tính giá trung bình

# vẽ biểu đồ
av %>% ggplot(aes(x=month, y=Avg, colour=year,group = year)) +
    geom_line() + 
    theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
    facet_grid(. ~av$type)

Đồ thị thể hiện xu hướng giá cả của 2 loại bơ riêng biệt.

Dựa vào đồ thị, năm 2017 là năm bơ có giá cao nhất, đỉnh điểm là vào tháng 8-2017 và giá có xu hướng giảm vào mấy tháng cuối năm

Kể cả bơ thông thường và bơ hữu cơ, giá của chúng đều giảm mạnh vào cuối năm 2017

9. Đồ thị thể hiện số lượng bơ bán hàng tháng theo loại:

9.1. Đồ thị thể hiện số lượng bơ thường được bán hàng tháng

# tính tần số của Số lượng bơ bán ra theo nhóm
avo <- a %>% group_by(year,month,type) %>% 
   select(year,month,type,Total.Volume) %>% 
   summarise(avg = mean(Total.Volume))
# vẽ đồ thị số lượng trung bình hàng tháng của bơ thường
avo %>% ggplot(aes(x = year, y = avg, group = month, fill = month)) +
  geom_col(data = avo %>% filter(type == 'conventional'), position = 'dodge', color = 'black') + 
  labs(x = 'năm', title = 'Số lượng bơ thường trung bình hàng tháng')

Số lượng bơ bán ra hầu như tăng dần theo thời gian. Đặc biệt từ cuối năm 2017 số lượng bơ trên thị trường ngày càng tăng

Số lượng nhiều nhất qua từng năm là : tháng 5-2015 (hơn 1,5 tr), tháng 5-2016 (hơn 2 tr), tháng 2-2017 (hơn 2 tr)

Số lượng bơ thường vào những tháng cuối năm thường ít, chẳng hạn tháng 10,11-2015, tháng 11-2016, tháng 9-1017

9.2. Đồ thị thể hiện số lượng bơ hữu được bán hàng tháng

avo %>% ggplot(aes(x = year, y = avg, group = month, fill = month)) +
  geom_col(data = avo %>% filter(type == 'organic'), color = 'black',position = 'dodge') +
  labs(x = 'năm', title = 'Số lượng bơ hữu cơ trung bình hàng tháng')

Tương tự loại bơ thông thường, bơ hữu cơ có số lượng bán ra tăng dần theo thời gian

Số lượng bơ có mặt trên thị trường nhiều thường ở những tháng đầu năm, chẳng hạn tháng 5-2015, 4-2016

Số lượng bơ hạn chế vào cuối năm, tuy nhiên cuối năm 2017 số lượng bơ bán ra tăng lên rất nhiều

10. Đồ thị phân bổ giá theo năm

a %>% ggplot(aes(x = AveragePrice, fill = year)) +
  geom_density() +
  facet_wrap(~year) +
  labs(title = 'Phân phối giá theo năm')

Thông qua đồ thị, năm 2015 là năm có mật độ giá thấp, hầu như ở mức giá 1-1,5. Trong khi đó năm 2017 có mật độ cao hơn

11. Đồ thị thể hiện tổng số lượng bơ bán theo khu vực

Tiến hành phân tích tổng số lượng bơ trên 4 khu vực, bao gồm Chicago, NewYork, LosAngeles và SanFrancisco.

b <- a %>% group_by(year,month,region) %>% 
   select(year,month,Total.Volume,region) %>%
   summarise(avg = mean(Total.Volume))

ab <- b %>% filter(region %in% c('Chicago','NewYork','LosAngeles','SanFrancisco'))

ab %>% group_by(avg,year) %>% 
  ggplot(aes(x = region, y = avg)) +
  geom_col(position = 'dodge') +
  facet_wrap(~year)

LosAngeles là khu vực có số lượng bơ bán ra nhiều nhất, điều này tương đương lượng bơ có mặt trên thị trường thường được trồng từ khu vực này

Ngược lại với LosAngeles, các khu vực còn lại có số lượng bơ tương đương nhau

Đồng thời, năm 2017 là năm có số lượng nhiều nhất trong 4 khu vực trên

12. Phân bổ số lượng bơ theo khu vực

ab %>% ggplot(aes(x = avg, fill = region)) +
  geom_density()

SanFrancisco là khu vực có mật độ số lượng bơ bán ra thấp, hầu như ở mức nhỏ hơn 500000. Trong khi đó khu vực LosAngeles, NewYork lại có mật độ cao hơn

13. Đồ thị thể hiện tổng khối lượng và giá trung bình theo khu vực

Tạo ra dữ liệu mới thống kê về khối lượng và giá của West, Northeast, Southeast và SouthCentral

m <- a %>% group_by(region,year,month) %>% 
  select(month,year,AveragePrice,Total.Volume,region) %>% 
  filter(region %in% c('West','Northeast','Southeast','Midsouth'))

13.1. Giá trung bình theo khu vực

m %>% group_by(region) %>% summarise(m1 = mean(AveragePrice)) %>% 
  ggplot(aes(x = region, y = m1, fill = region)) +
  geom_col() +
  geom_text(aes(label = round(m1,2)), hjust = 2, color = 'black') +
  coord_flip()

Northeast đứng đầu danh sách với giá bơ trung bình cao nhất ở mức 1,6, tiếp theo là Southeast (1,4) và Midsouth là như nhau và thấp nhất là West (1,27)

Khi đó bơ ở vùng Tây Bắc có giá hơn so với các vùng còn lại

13.2. Trọng lượng trung bình theo khu vực

m %>% group_by(region) %>% summarise(m2 = mean(Total.Volume)) %>% 
  ggplot(aes(x = region, y = m2, fill = region)) +
  geom_col() +
  coord_flip()

Khu vực có số lượng bơ bán ra nhiều nhất là West, tiếp theo đó là Northeast, Southeast, Midsouth. Khu vực có giá càng thấp thì số lượng hàng lại càng nhiều

14. Đồ thị thể hiện tỷ lệ giá trung bình của bơ theo loại

a %>% group_by(type) %>% summarise(m = mean(AveragePrice)) %>% 
  mutate(pc= scales::percent(prop.table(m))) %>% 
  ggplot(aes(x = '', y = pc,fill = type)) +
  geom_col(color = 'black') +
  coord_polar('y') +
  geom_text(aes(x = 1.3, label = pc ), position = position_stack(vjust = .4)) +
  theme_void()

Thông qua đồ thị Pie thể hiện phần trăm giá cả của 2 loại bơ

Có 59% loại bơ bán ra là bơ hữu cơ có giá trên trung bình, trên thị trường loại bơ này có giá trị cao vì loại bơ này có số lượng khá ít

Số lượng bơ thông thường có mặt trên thị trường có giá thấp chỉ chiếm 41% trên tổng số

15. Đồ thị thể hiện số lượng trung bình của bơ mang mã số 4046

t <-  a %>% group_by(year, month,type) %>%
  select(year, month, type,X4046) %>% 
    summarise(Avg = mean(X4046))

t %>% ggplot(aes(x=month, y=Avg, colour=year,group = year)) +
    geom_line() + 
    theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
    facet_grid(. ~t$type)

Đồ thị thể hiện xu hướng lượng hàng hóa của 2 loại bơ riêng biệt.

Dựa vào đồ thị, năm 2015 là năm bơ có lượng hàng nhiều nhất, đỉnh điểm là vào tháng 5-2015 đối với bơ thường và số lượng bơ có xu hướng giảm vào mấy tháng cuối năm

Kể cả bơ thông thường và bơ hữu cơ, số lượng của chúng đều giảm mạnh vào cuối năm 2017

16. Đồ thị thể hiện số lượng trung bình của bơ X225 theo loại

a %>% group_by(type) %>% summarise(f = mean(X4225)) %>%
  ggplot(aes(x = type ,y = f)) +
    geom_col(position = 'dodge', fill = 'violet') +
    geom_text(aes(label = round(f)), vjust = .5)

Số lượng bơ có mã số 4225 loại bơ thông thường có số lượng rất lớn, mặt hàng này dễ dàng tìm thấy trên thị trường

18. Đồ thị thể hiện số lượng bơ X4225

a %>% group_by(year,month,type) %>% select(year,month,type,X4225) %>% 
  summarise(x = mean(X4225)) %>% 
  ggplot(aes(x = x)) +
  geom_histogram(fill = 'pink', color = 'blue')
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

a %>% group_by(year) %>% summarise(m = mean(Total.Volume)) %>% 
  filter(year %in% c('2015','2016','2017')) %>% 
  mutate(pc= scales::percent(prop.table(m))) %>% 
  ggplot(aes(x = '', y = pc,fill = year)) +
  geom_col(color = 'black') +
  coord_polar('y') +
  geom_text(aes(x = 1.3, label = pc ), position = position_stack(vjust = .4)) +
  theme_void()

Thông qua đồ thị Pie thể hiện phần trăm số lượng bơ trong vòng 3 năm

Năm 2017 là năm có lượng bơ bán ra nhiều nhất 34,47%, ngược lại năm 2015 là năm có phần trăm nhỏ nhất