library("tidyverse")
## Warning: package 'tidyverse' was built under R version 4.2.3
## Warning: package 'ggplot2' was built under R version 4.2.3
## Warning: package 'tibble' was built under R version 4.2.3
## Warning: package 'tidyr' was built under R version 4.2.3
## Warning: package 'readr' was built under R version 4.2.3
## Warning: package 'purrr' was built under R version 4.2.3
## Warning: package 'dplyr' was built under R version 4.2.3
## Warning: package 'stringr' was built under R version 4.2.3
## Warning: package 'forcats' was built under R version 4.2.3
## Warning: package 'lubridate' was built under R version 4.2.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.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("DT")
## Warning: package 'DT' was built under R version 4.2.3
library("ggplot2")
library("AER")
## Warning: package 'AER' was built under R version 4.2.3
## Loading required package: car
## Warning: package 'car' was built under R version 4.2.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.2.3
##
## Attaching package: 'car'
##
## The following object is masked from 'package:dplyr':
##
## recode
##
## The following object is masked from 'package:purrr':
##
## some
##
## Loading required package: lmtest
## Warning: package 'lmtest' was built under R version 4.2.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.2.3
##
## Attaching package: 'zoo'
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## Loading required package: sandwich
## Warning: package 'sandwich' was built under R version 4.2.3
## Loading required package: survival
library("scales")
## Warning: package 'scales' was built under R version 4.2.3
##
## Attaching package: 'scales'
##
## The following object is masked from 'package:purrr':
##
## discard
##
## The following object is masked from 'package:readr':
##
## col_factor
library("WDI")
## Warning: package 'WDI' was built under R version 4.2.3
library("rvest")
## Warning: package 'rvest' was built under R version 4.2.3
##
## Attaching package: 'rvest'
##
## The following object is masked from 'package:readr':
##
## guess_encoding
library("netstat")
library("stringr")
Dữ liệu chi phí sinh hoạt ở mỗi tiểu bang có thể khác nhau tùy thuộc vào yếu tố được phân tích và người thực hiện nghiên cứu Dữ liệu này bao gồm 4 biến và bao gồm 50 tiểu bang được thu thập từ năm 2022:
Tiểu bang (State): bao gồm 50 tiểu bang ở Hoa Kỳ
Annual Mean Wage (All Occupations): Mức lương trung bình hàng năm cho tất cả các ngành nghề thể hiện mức lương mà nhân viên làm việc trong tiểu bang kiếm được mỗi năm
Average Monthly Rent: Giá thuê trung bình hàng tháng cho biết giá trị tổng thể trung bình tiền thuê căn hộ trong tiểu bang
Value of $100: Giá trị $100 phản ánh giá trị của 100 George Washingtons trong tiểu bang. Nếu giá trị của một đô la giảm xuống dưới 100 đô la, thì nó sẽ không đi xa ở trạng thái đó.
col_link <- "https://www.patriotsoftware.com/blog/accounting/average-cost-living-by-state/"
col_page <- read_html(col_link)
col_table <- col_page %>% html_nodes("table.has-fixed-layout") %>%
html_table() %>% .[[1]]
datatable(col_table)
str(col_table)
## tibble [50 × 4] (S3: tbl_df/tbl/data.frame)
## $ State : chr [1:50] "Alabama" "Alaska" "Arizona" "Arkansas" ...
## $ Annual Mean Wage (All Occupations): chr [1:50] "$50,620" "$66,130" "$58,620" "$48,570" ...
## $ Average Monthly Rent : chr [1:50] "$1,055.00" "$1,507.00" "$1,613.00" "$912.00" ...
## $ Value of $100 : chr [1:50] "$114.20" "$94.90" "$103.70" "$115.30" ...
head(col_table)
## # A tibble: 6 × 4
## State Annual Mean Wage (All Occu…¹ `Average Monthly Rent` `Value of $100`
## <chr> <chr> <chr> <chr>
## 1 Alabama $50,620 $1,055.00 $114.20
## 2 Alaska $66,130 $1,507.00 $94.90
## 3 Arizona $58,620 $1,613.00 $103.70
## 4 Arkansas $48,570 $912.00 $115.30
## 5 California $73,220 $2,032.00 $83.60
## 6 Colorado $67,870 $1,633.00 $98.10
## # ℹ abbreviated name: ¹`Annual Mean Wage (All Occupations)`
summary(col_table)
## State Annual Mean Wage (All Occupations) Average Monthly Rent
## Length:50 Length:50 Length:50
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
## Value of $100
## Length:50
## Class :character
## Mode :character
Trong phần này tôi sử dụng lại bộ dữ liệu HousePrices, đây là bộ dữ liệu mà em đã thao tác từ tuần 1 đến tuần 6.
data('HousePrices')
mk <- HousePrices
names(mk) <- c("pr","lot","bed","bat","str","dr","rec","fb","gas","air","gar","pre")
price <- mk$pr
lotsize <- mk$lot
bedrooms <- mk$bed
bathrooms <- mk$bat
stories <- mk$str
datatable(mk)
Tôi tạo một function để tính toán thống kê mô tả cho giá trị của các biến bao gồm: tính toán giá trị trung bình, trung vị, phân vị, phương sai,…
fuc <- function(data, var) {
library(tidyverse)
varr <- data[[var]]
data %>% summarize(
mean = mean(varr,na.rm = TRUE),
median = median(varr,na.rm = TRUE),
quartiles_25 = quantile(varr, c(0.25)),
quartiles_50 = quantile(varr, c(0.5)),
quartiles_75 = quantile(varr, c(0.75)),
sd = sd(varr),
variance = var(varr),
max_value = max(varr),
min_value = min(varr),
skewness = moments::skewness(varr),
kurtosis = moments::kurtosis(varr),
sum = sum(varr,na.rm=TRUE)
)
}
Dùng funtion này để tính toán thống kê mô tả trên bộ dữ liệu HousePrices và funtion này tôi đặt tên là fuc
fuc(mk, "pr")
## mean median quartiles_25 quartiles_50 quartiles_75 sd variance
## 1 68121.6 62000 49125 62000 82000 26702.67 713032635
## max_value min_value skewness kurtosis sum
## 1 190000 25000 1.206503 4.930871 37194392
fuc(mk, "bat")
## mean median quartiles_25 quartiles_50 quartiles_75 sd variance
## 1 1.285714 1 1 1 2 0.5021579 0.2521625
## max_value min_value skewness kurtosis sum
## 1 4 1 1.587718 5.144182 702
fuc(mk, "bed")
## mean median quartiles_25 quartiles_50 quartiles_75 sd variance
## 1 2.965201 3 2 3 3 0.7373879 0.543741
## max_value min_value skewness kurtosis sum
## 1 6 1 0.4945091 3.717276 1619
fuc(mk, "lot")
## mean median quartiles_25 quartiles_50 quartiles_75 sd variance
## 1 5150.266 4600 3600 4600 6360 2168.159 4700912
## max_value min_value skewness kurtosis sum
## 1 16200 1650 1.319121 5.72637 2812045
library(WDI)
Eco <- WDIsearch("Education")
Edu1 <- WDI(indicator = "SE.PRM.UNER.FE")
Edu1 <- na.omit(Edu1)
datatable(Edu1)
str(Edu1)
## 'data.frame': 3395 obs. of 5 variables:
## $ country : chr "Afghanistan" "Afghanistan" "Albania" "Albania" ...
## $ iso2c : chr "AF" "AF" "AL" "AL" ...
## $ iso3c : chr "AFG" "AFG" "ALB" "ALB" ...
## $ year : int 1993 1974 2021 2020 2013 2012 2011 2010 2009 2008 ...
## $ SE.PRM.UNER.FE: num 1117896 888979 5013 1473 2626 ...
## - attr(*, "lastupdated")= chr "2023-06-29"
## - attr(*, "label")= chr [1:16758] "Children out of school, primary, female" "Children out of school, primary, female" "Children out of school, primary, female" "Children out of school, primary, female" ...
## - attr(*, "na.action")= 'omit' Named int [1:13363] 1 2 3 4 5 6 7 8 9 10 ...
## ..- attr(*, "names")= chr [1:13363] "1" "2" "3" "4" ...
Biểu đồ các quốc gia qua các năm
Edu11 <- Edu1 %>% filter(country %in% c("Australia", "Brazil","Indonesia","Cambodia","Chile","Cuba"))
ggplot(data = Edu11, aes(x = year, y = SE.PRM.UNER.FE,color = country, group = country)) +
geom_line() +
geom_point() +
xlab("Năm") +
ylab("Số người") +
ggtitle("Số trẻ em nữ nghỉ học tiểu học của mỗi quốc gia")
Nhận xét: chúng ta có thể lọc một số quốc gia ra để có cái nhìn tổng
quát hơn. Qua biểu đồ tên ta có thể thấy nước Indonesia có tỷ lệ trẻ em
nữ nghỉ học giảm dần qua các năm. còn các quốc gia khác thì số lượng trẻ
em nghỉ học không nhiều.
Indicator này cho chúng ta biết tỷ lệ phần trăm số trẻ em không đi học ở độ tuổi đi học qua các năm ở mỗi quốc gia
Edu2 <- WDI(indicator = "SE.PRM.UNER.ZS")
Edu2 <- na.omit(Edu2)
datatable(Edu2)
Edu22 <- Edu2 %>% filter(country %in% c("Australia", "Brazil","Indonesia","Cambodia","Chile","Cuba"))
ggplot(data = Edu22, aes(x = year, y = SE.PRM.UNER.ZS,color = country, group = country)) +
geom_line() +
geom_point() +
xlab("Năm") +
ylab("%") +
ggtitle("Tỷ lệ số trẻ em không đi học ")
Indicator này cho chúng ta biết tỷ lệ sinh ở tuổi vị thành niên(số ca sinh trên 1000 phụ nữ trong độ tuổi 15-19)
Eco2 <- WDIsearch("GDP")
GDP1 <- WDI(indicator = "SP.ADO.TFRT")
GDP1 <- na.omit(GDP1)
datatable(GDP1)
## Warning in instance$preRenderHook(instance): It seems your data is too big for
## client-side DataTables. You may consider server-side processing:
## https://rstudio.github.io/DT/server.html
Lọc tỷ lệ sinh của mỗi quốc gia từ năm 2012 đến năm 2014
GDP12 <- WDI(indicator="SP.ADO.TFRT", country="all", start = 2012, end = 2014)
head(GDP12)
## country iso2c iso3c year SP.ADO.TFRT
## 1 Africa Eastern and Southern ZH AFE 2014 107.6977
## 2 Africa Eastern and Southern ZH AFE 2013 108.0928
## 3 Africa Eastern and Southern ZH AFE 2012 109.5322
## 4 Africa Western and Central ZI AFW 2014 122.3955
## 5 Africa Western and Central ZI AFW 2013 125.0845
## 6 Africa Western and Central ZI AFW 2012 125.6104
Vẽ biểu đồ thể hiện tỷ lệ sinh ở độ tuổi vị thành niên qua các năm
ggplot(data = GDP1, aes(x = year, y = SP.ADO.TFRT)) +
geom_line(color = "blue") +
geom_point(color = "blue") +
xlab("Year") +
theme_minimal()
Nhận xét: Qua biểu đồ trên ta có thể thấy tỷ lệ sinh ở độ tuổi bị thành niên đang có xu hướng giảm dần qua các năm nhưng không nhiều.
Indicator này cho chúng ta biết về GDP bình quân đầu người(USD cố định năm 2015)
GDP22 <- WDI(indicator = "NY.GDP.PCAP.KD")
GDP22 <- na.omit(GDP22)
datatable(GDP22)
Bên cạnh đó chúng ta có thể lọc tên của một số quốc gia bằng mã quốc gia
GDP23 <- WDI(indicator='NY.GDP.PCAP.KD', country=c('MX','CA','US'), start=1960, end=2012)
head(GDP23)
## country iso2c iso3c year NY.GDP.PCAP.KD
## 1 Canada CA CAN 2012 42315.81
## 2 Canada CA CAN 2011 42037.52
## 3 Canada CA CAN 2010 41156.15
## 4 Canada CA CAN 2009 40368.93
## 5 Canada CA CAN 2008 42063.24
## 6 Canada CA CAN 2007 42098.43
ggplot(GDP23, aes(year, NY.GDP.PCAP.KD, color=country)) + geom_line() +
xlab('Year') + ylab('GDP bình quân đầu người')
## Warning: Removed 21 rows containing missing values (`geom_line()`).
Như vậy ta có thể thấy GDP bình quân đầu người của nước United States và Canada tăng trưởng mạnh qua các năm và Mexico cũng tăng nhưng không cao
Indicator SH.TBS.INCD: cho chúng biết tỷ lệ mắc bệnh lao(trên 100000 người) của các quốc gia qua mỗi năm
Ecu3 <- WDIsearch("Healthy")
He1 <- WDI(indicator = "SH.TBS.INCD")
He1 <- na.omit(He1)
datatable(He1)
Bên cạnh đó chúng ta có thể lọc tên của 4 quốc gia bằng mã quốc gia từ năm 2012 đến năm 2021
He12 <- WDI(indicator='SH.TBS.INCD', country=c("AR","AU","HU","FR"), start=2012, end=2021)
head(He12)
## country iso2c iso3c year SH.TBS.INCD
## 1 Argentina AR ARG 2021 30
## 2 Argentina AR ARG 2020 28
## 3 Argentina AR ARG 2019 29
## 4 Argentina AR ARG 2018 27
## 5 Argentina AR ARG 2017 27
## 6 Argentina AR ARG 2016 27
ggplot(He12, aes(year, SH.TBS.INCD, color=country)) + geom_line() +
xlab('Year') + ylab('Tỷ lệ mắc bệnh lao của mỗi quốc gia')
Nhận xét: Qua biểu đồ ta có thể thấy từ năm 2012 đến năm 2020 Argentina có tỷ lệ mắc bệnh lao tăng mạnh và các quốc gia khác đang có xu hướng giảm dần
Indicator SP.DYN.LE00.FE.IN: Indicator này cho chúng ta biết về tuổi thọ trung bình của nữ qua các năm của mỗi quốc gia
He2 <- WDI(indicator = "SP.DYN.LE00.FE.IN")
He2 <- na.omit(He2)
datatable(He2)
## Warning in instance$preRenderHook(instance): It seems your data is too big for
## client-side DataTables. You may consider server-side processing:
## https://rstudio.github.io/DT/server.html
He22 <- WDI(indicator='SP.DYN.LE00.FE.IN', country=c("AR","AU","HU","FR"), start=2012, end=2021)
head(He22)
## country iso2c iso3c year SP.DYN.LE00.FE.IN
## 1 Argentina AR ARG 2021 78.647
## 2 Argentina AR ARG 2020 79.285
## 3 Argentina AR ARG 2019 80.681
## 4 Argentina AR ARG 2018 80.329
## 5 Argentina AR ARG 2017 80.085
## 6 Argentina AR ARG 2016 79.670
ggplot(He22, aes(year, SP.DYN.LE00.FE.IN, color=country)) + geom_line() +
xlab('Year') + ylab('Tuổi thọ trung bình của nữ qua các năm')
Nhận xét: nhìn chung 4 nước nữ đều có tuổi thọ trung bình cao từ năm 2012 đến năm 2020. Nhưng có 2 nước có tuổi thọ trung bình từ 84 tuổi đến 87 tuổi là nước Astralia và France. Còn nước Argentina và Hungary có tuổi thọ trung bình từ 78 đến 81 tuổi
Dataset: HousePrices - Package AER. Dữ liệu “HousePrices” được lấy từ gói AER. Trong bộ dữ trên liên quan đến giá bán của 546 căn nhà ở thành phố Windsor, Canada trong tháng 7,8,9 của năm 1987.
Dữ liệu trên bao gồm 12 biến:
library("tidyverse")
library("DT")
library("ggplot2")
library("AER")
library("scales")
library("utf8")
## Warning: package 'utf8' was built under R version 4.2.3
data("HousePrices")
library("AER")
data("HousePrices")
mk <- HousePrices
names(mk) <- c("pr","lot","bed","bat","str","dr","rec","fb","gas","air","gar","pre")
price <- mk$pr
lotsize <- mk$lot
bedrooms <- mk$bed
bathrooms <- mk$bat
stories <- mk$str
table(cut(mk$bed, 6),mk$air)
##
## no yes
## (0.995,1.83] 2 0
## (1.83,2.67] 114 22
## (2.67,3.5] 193 108
## (3.5,4.33] 55 40
## (4.33,5.17] 7 3
## (5.17,6] 2 0
mk$pr <- cut(mk$pr, breaks = c(25000,80000,135000,190000), labels = c(" giá thấp", "giá Vừa", "giá cao"))
table(mk$pr)
##
## giá thấp giá Vừa giá cao
## 400 131 12
Nhận xét: Bảng phân tích trên em đã phân giá bán nhà thành 3 mức giá: Ở múc giá thấp là có 400 ngôi nhà có mức giá từ 25000-80000 nghìn đô, ở mức giá vừa là có 131 ngôi nhà có mức giá từ 80000-135000 nghìn đô và ở mức giá cao có 12 ngôi nhà có mức giá từ 135000-190000 nghìn đô.
summary(mk$lot)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1650 3600 4600 5150 6360 16200
sum(mk$lot)
## [1] 2812045
Nhận xét: Em thực hiện lệnh sum để tính tổng xem trong 546 ngôi nhà tổng diện tích là bao nhiêu. Qua câu lệnh trên thì kết quả trả về là 2812045 mét vuông có nghĩa tổng diện tích của 546 ngôi nhà là 2812045 mét vuông.
aggregate(mk$lot,list(mk$bat),FUN ='mean')
## Group.1 x
## 1 1 4921.090
## 2 2 5699.526
## 3 3 6677.000
## 4 4 8960.000
mk$lotsize <- cut(mk$lot, breaks = c(4000,5000,8000,11000), labels = c("S nhỏ","S vừa","S rộng"))
table(mk$lotsize)
##
## S nhỏ S vừa S rộng
## 103 183 42
table(cut(mk$bed, breaks = c(0,1,2,3,4,5,6)))
##
## (0,1] (1,2] (2,3] (3,4] (4,5] (5,6]
## 2 136 301 95 10 2
sum(mk$bed)
## [1] 1619
var(mk$bed)
## [1] 0.543741
sd(mk$bed)
## [1] 0.7373879
quantile(mk$bed, .58)
## 58%
## 3
table(cut(mk$bat, breaks = c(0,1,2,3,4)))
##
## (0,1] (1,2] (2,3] (3,4]
## 402 133 10 1
mk %>% ggplot(aes(x = bathrooms)) +
geom_bar( fill = 'red')+
xlab("Số phòng tắm")+
ylab("Số ngôi nhà")
Nhận xét: Đồ thị cột phía trên thể hiện cho chúng ta biết là có khoảng 401 ngôi nhà đang có 1 phòng tắm, có khoảng 134 ngôi nhà là có 2 phòng tắm, có khoảng 10 ngôi nhà là có 3 phòng tắm và có 1 ngôi nhà đang có 4 phòng tắm
Thêm tỷ lệ phần trăm cho biến số phòng tắm và làm chúng thành cột ngang
mk |> group_by(bat) |>
summarise(n = n()) |>
mutate(pg = scales::percent(n/sum(n), accuracy = 0.01)) |>
ggplot(aes(x = bat, y = pg)) +
geom_col(fill = 'yellow') +
theme_classic() +
labs(x = 'Số phòng tắm', y = 'Tỷ lệ %')
mk %>% count(bat) %>%
mutate(p = scales::percent(n/sum(n), accuracy = 0.01)) %>%
ggplot(aes(x = bat, y = n,fill = bat)) +
geom_col() +
geom_text(aes(label = p),color = 'brown', hjust =0 , size = 3) +
theme_classic() +
labs(x = 'Số phòng tắm', y = 'Số ngôi nhà')+
coord_flip()
mk %>% ggplot(aes(x = bat, y = after_stat(count))) +
geom_bar(fill = 'blue') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Số phòng tắm', y = 'Số ngôi nhà')
table(mk$pr,mk$bat)
##
## 1 2 3 4
## giá thấp 340 56 4 0
## giá Vừa 56 73 2 0
## giá cao 3 4 4 1
table(mk$pr,mk$lot)
##
## 1650 1700 1836 1905 1950 2000 2015 2135 2145 2160 2175 2176 2275
## giá thấp 1 1 1 1 2 1 1 1 6 1 1 1 1
## giá Vừa 0 0 0 0 0 0 0 0 0 0 0 0 0
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 2325 2398 2400 2430 2475 2500 2520 2550 2610 2640 2650 2684 2700
## giá thấp 1 1 2 1 1 1 1 1 2 1 1 1 2
## giá Vừa 0 0 0 0 0 0 0 0 0 0 0 0 0
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 2747 2787 2800 2817 2835 2850 2856 2870 2880 2910 2953 2970 2990
## giá thấp 1 2 2 1 1 1 1 1 2 1 1 1 1
## giá Vừa 0 0 0 0 0 0 0 0 0 0 0 0 0
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 3000 3036 3040 3060 3069 3090 3100 3120 3150 3162 3180 3185 3210
## giá thấp 14 1 1 1 1 2 1 3 4 1 7 3 1
## giá Vừa 0 0 0 0 0 0 0 0 0 0 0 0 0
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 3240 3264 3290 3300 3350 3360 3400 3410 3420 3450 3460 3480 3500
## giá thấp 2 1 1 2 1 1 1 1 4 5 2 5 5
## giá Vừa 1 0 0 0 0 0 0 0 0 0 0 0 1
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 3510 3512 3520 3540 3570 3584 3600 3620 3630 3635 3640 3649 3650
## giá thấp 2 1 5 1 1 1 8 0 7 1 7 1 2
## giá Vừa 0 0 0 0 0 0 0 0 0 0 0 0 0
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 3660 3680 3700 3720 3745 3750 3760 3780 3792 3800 3816 3840 3850
## giá thấp 1 1 0 1 1 3 1 1 1 2 1 1 4
## giá Vừa 0 0 1 0 0 0 1 0 0 0 0 0 0
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 3880 3900 3930 3934 3960 3968 3970 3986 3990 4000 4032 4040 4046
## giá thấp 1 1 1 1 2 1 2 1 1 9 1 6 1
## giá Vừa 0 0 0 0 1 0 0 0 0 2 0 1 0
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 4050 4075 4079 4080 4095 4100 4120 4130 4160 4200 4240 4260 4280
## giá thấp 2 1 1 2 2 2 2 1 2 1 1 1 1
## giá Vừa 0 0 0 0 0 1 0 0 0 0 0 1 0
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 4300 4320 4340 4350 4352 4360 4370 4400 4410 4500 4510 4520 4560
## giá thấp 0 3 1 2 1 1 1 4 2 12 2 1 0
## giá Vừa 2 1 0 0 0 0 0 0 0 1 0 0 1
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 4600 4632 4640 4646 4700 4750 4770 4775 4785 4800 4815 4820 4840
## giá thấp 4 1 0 1 1 1 1 1 1 2 1 1 2
## giá Vừa 1 0 1 0 0 0 0 0 0 3 0 0 0
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 4880 4900 4920 4950 4960 4990 4992 4995 5000 5010 5020 5040 5076
## giá thấp 1 2 1 1 3 1 1 1 1 1 0 1 1
## giá Vừa 1 0 0 0 0 0 0 0 3 0 1 0 0
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 5136 5150 5170 5200 5300 5320 5360 5400 5450 5495 5500 5600 5640
## giá thấp 1 0 1 1 3 2 1 5 1 1 4 1 1
## giá Vừa 0 1 0 1 0 0 0 1 1 0 5 0 0
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 5680 5700 5720 5750 5800 5828 5830 5850 5880 5885 5900 5948 5960
## giá thấp 1 0 1 0 2 0 1 2 2 1 2 1 1
## giá Vừa 0 1 0 0 1 1 0 0 0 0 0 0 1
## giá cao 0 0 0 1 0 0 0 0 0 0 0 0 0
##
## 5985 6000 6020 6040 6050 6060 6100 6210 6240 6254 6300 6321 6325
## giá thấp 1 2 1 1 1 2 3 1 0 0 1 1 0
## giá Vừa 0 21 0 0 0 0 0 0 1 1 0 0 1
## giá cao 0 1 0 0 0 0 0 0 0 0 0 0 0
##
## 6350 6360 6400 6420 6440 6450 6480 6500 6525 6540 6550 6600 6615
## giá thấp 0 4 0 0 1 2 1 0 0 1 0 3 1
## giá Vừa 1 3 1 4 0 0 1 2 1 2 2 6 1
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 6650 6660 6670 6710 6720 6750 6800 6825 6840 6862 6900 6930 7000
## giá thấp 1 0 0 1 1 1 1 1 0 1 1 1 2
## giá Vừa 0 1 1 0 0 1 1 0 1 0 1 0 3
## giá cao 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 7020 7085 7152 7155 7160 7200 7231 7260 7320 7350 7410 7420 7424
## giá thấp 0 1 1 0 0 1 0 1 0 1 0 0 1
## giá Vừa 1 0 0 1 1 1 1 0 1 0 1 0 0
## giá cao 0 0 0 0 0 0 0 0 0 0 0 2 0
##
## 7440 7475 7482 7500 7600 7680 7686 7700 7770 7800 7950 7980 8000
## giá thấp 0 0 0 0 1 0 1 1 1 1 0 2 0
## giá Vừa 2 1 1 0 0 1 0 1 0 1 1 0 1
## giá cao 0 0 0 2 0 0 0 0 0 0 0 0 0
##
## 8050 8080 8100 8150 8250 8372 8400 8500 8520 8580 8800 8875 8880
## giá thấp 1 1 2 1 3 0 3 0 1 0 0 0 0
## giá Vừa 1 0 0 0 1 1 0 1 0 1 1 1 2
## giá cao 0 0 1 0 0 0 0 0 0 1 0 0 0
##
## 8960 9000 9166 9500 9620 9667 9800 9860 9960 10240 10269 10360
## giá thấp 0 1 1 1 0 1 1 1 0 1 1 1
## giá Vừa 0 3 0 0 1 0 0 0 0 0 0 0
## giá cao 1 0 0 0 0 0 0 0 1 0 0 0
##
## 10500 10700 11175 11410 11440 11460 12090 12900 12944 13200 15600
## giá thấp 2 1 0 1 0 0 0 1 1 0 0
## giá Vừa 1 0 1 0 1 1 1 0 0 1 1
## giá cao 0 0 0 0 0 0 0 0 0 1 0
##
## 16200
## giá thấp 0
## giá Vừa 0
## giá cao 1
mk %>% ggplot(aes(x = mk$lot, y = mk$pr)) +
geom_smooth(formula = y ~ x, method = 'lm', color = 'blue') +
geom_point(color = 'orange') +
labs(title = 'Đồ thị dạng Scatter', x = 'Diện tích', y = 'Giá bán')
mk %>% ggplot(aes(x = bat, y = after_stat(count))) +
geom_bar(fill = 'blue') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ str) +
theme_classic() +
labs(x = 'Số phòng tắm', y = 'Số ngôi nhà')
mk |> count(bat, str) |>
mutate(pCH = prop.table(n)) |>
ggplot(aes(x = bat, y = n, fill = str)) +
geom_col(position = 'dodge') +
geom_text(aes(label = percent(pCH, accuracy = .01)), position = position_dodge(1), vjust = 0, size = 3) +
ylab('Số ngôi nhà') +
xlab('Số phòng tắm')
table(mk$bed,mk$bat)
##
## 1 2 3 4
## 1 2 0 0 0
## 2 128 8 0 0
## 3 225 72 4 0
## 4 42 48 4 1
## 5 4 4 2 0
## 6 1 1 0 0
mk %>% ggplot(aes(x = bat, y = after_stat(count))) +
geom_bar(fill = 'purple') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ bed) +
theme_classic() +
labs(x = 'Số phòng tắm', y = 'Số ngôi nhà')
mk %>% count(str) %>%
mutate(pC = percent(n/sum(n),accuracy = 0.01)) |>
ggplot(aes(x = str, y = n)) +
geom_col(fill = 'green') +
geom_text(aes(label = pC),color = 'black', vjust = 2, size = 5) +
ylab('Số ngôi nhà') +
xlab('Số tầng')
Nhận xét: Có khoảng 227 ngôi nhà có 1 tầng(41,58%), Có khoảng 235 ngôi nhà là có 2 tầng(43,49%)
Biểu đồ bên dưới em vẽ biểu độ cột ngang cho biến số tầng của ngôi nhà
mk |> count(str) |>
mutate(pC = percent(n/sum(n),accuracy = 0.01)) |>
ggplot(aes(x = str, y = n)) +
geom_col(fill = 'gray') +
geom_text(aes(label = pC),color = 'yellow', hjust = 2, size = 5) +
ylab('Số ngôi nhà') +
xlab('Số tầng') +
coord_flip()
table(mk$bed, mk$lotsize)
##
## S nhỏ S vừa S rộng
## 1 0 0 0
## 2 32 27 8
## 3 48 113 23
## 4 21 39 10
## 5 1 4 1
## 6 1 0 0
h= table(mk$bed, mk$lotsize)
prop.table(h)
##
## S nhỏ S vừa S rộng
## 1 0.00000000 0.00000000 0.00000000
## 2 0.09756098 0.08231707 0.02439024
## 3 0.14634146 0.34451220 0.07012195
## 4 0.06402439 0.11890244 0.03048780
## 5 0.00304878 0.01219512 0.00304878
## 6 0.00304878 0.00000000 0.00000000
Nhận xét: Ở những ngôi nhà có 1 phòng ngủ và 4 phòng ngủ thì diện tích ngôi nhà chiếm tỷ lệ rất nhỏ dưới 0,3%. Ở những ngôi nhà có 3 phòng ngủ thì diện tích của ngôi nhà chiếm tỷ lệ cao hơn những ngôi nhà có 2 phòng ngủ. Ở những ngôi nhà có diện tích vừa mà có 3 phòng ngủ chiếm tỷ lệ cao 34,5% . Qua bảng tần suất diện tích của ngôi nhà thì ta thấy các ngôi nhà có diện tích nhỏ và vừa mà có 2,3 phòng ngủ chiến tỷ lệ khá cao.
library("tidyverse")
library("DT")
library("ggplot2")
library("AER")
library("scales")
library("utf8")
data("HousePrices")
mk <- HousePrices
datatable(mk)
mk %>% ggplot(map = aes(x = bathrooms, y = price)) +
geom_point()
mk |> ggplot(map = aes(x = bathrooms, y = price)) +
geom_point(color = 'orange', size=2)
mk %>% ggplot(map = aes(x = lotsize, y = price)) + geom_point(color= 'orange') +
labs(title = "Biểu đồ phân tán giữa tổng diện tích và tổng giá bán", x = 'Tổng diện tích', y = 'Tổng giá bán')
mk %>% ggplot(map = aes(x = lotsize, y = price,color='red')) + geom_smooth(formula = y ~ x, method = 'lm', color = 'green') + geom_point(color= 'orange') +
labs(title = "Biểu đồ phân tán giữa tổng diện tích và tổng giá bán", x = 'Tổng diện tích', y = 'Tổng giá bán')
mk %>% ggplot(aes(x = lotsize, y = price)) +
geom_smooth(formula = y ~ x, method = 'lm', color = 'blue') +
geom_point(color = 'orange') +
labs(title = 'Đồ thị dạng Scatter', x = 'Diện tích', y = 'Giá bán')
mk %>% ggplot(aes(x = bathrooms)) +
geom_bar( fill = 'red')+
xlab("Số phòng tắm")+
ylab("Số ngôi nhà")
mk |> group_by(bathrooms) |>
summarise(n = n()) |>
mutate(pg = scales::percent(n/sum(n), accuracy = 0.01)) |>
ggplot(aes(x = bathrooms, y = pg)) +
geom_col(fill = 'yellow') +
theme_classic() +
labs(x = 'Số phòng tắm', y = 'Tỷ lệ %')
mk %>% count(bathrooms) %>%
mutate(p = scales::percent(n/sum(n), accuracy = 0.01)) %>%
ggplot(aes(x = bathrooms, y = n,fill = bathrooms)) +
geom_col() +
geom_text(aes(label = p),color = 'brown', hjust =0 , size = 3) +
theme_classic() +
labs(x = 'Số phòng tắm', y = 'Số ngôi nhà')+
coord_flip()
mk %>% ggplot(aes(x = bathrooms, y = after_stat(count))) +
geom_bar(fill = 'blue') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Số phòng tắm', y = 'Số ngôi nhà')
mk %>% ggplot(aes(x = bathrooms, y = after_stat(count))) +
geom_bar(fill = 'blue') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ stories) +
theme_classic() +
labs(x = 'Số phòng tắm', y = 'Số ngôi nhà')
mk |> count(bathrooms, stories) |>
mutate(pCH = prop.table(n)) |>
ggplot(aes(x = bathrooms, y = n, fill = stories)) +
geom_col(position = 'dodge') +
geom_text(aes(label = percent(pCH, accuracy = .01)), position = position_dodge(1), vjust = 0, size = 3) +
ylab('Số ngôi nhà') +
xlab('Số phòng tắm')
mk %>% ggplot(aes(x = bathrooms, y = after_stat(count))) +
geom_bar(fill = 'purple') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ bedrooms) +
theme_classic() +
labs(x = 'Số phòng tắm', y = 'Số ngôi nhà')
mk %>% count(stories) %>%
mutate(pC = percent(n/sum(n),accuracy = 0.01)) |>
ggplot(aes(x = stories, y = n)) +
geom_col(fill = 'green') +
geom_text(aes(label = pC),color = 'black', vjust = 2, size = 5) +
ylab('Số ngôi nhà') +
xlab('Số tầng')
Nhận xét: Có khoảng 227 ngôi nhà có 1 tầng(41,58%), Có khoảng 235 ngôi nhà là có 2 tầng(43,49%)
Biểu đồ bên dưới em vẽ biểu độ cột ngang cho biến số tầng của ngôi nhà
mk |> count(stories) |>
mutate(pC = percent(n/sum(n),accuracy = 0.01)) |>
ggplot(aes(x = stories, y = n)) +
geom_col(fill = 'gray') +
geom_text(aes(label = pC),color = 'yellow', hjust = 2, size = 5) +
ylab('Số ngôi nhà') +
xlab('Số tầng') +
coord_flip()
Bộ dữ liệu kinh tế là một bộ dữ liệu nó chứa thông tin về số người thất nghiệp, tỷ lệ tiết kiệm cá nhân và tiêu dùng cá nhân theo năm và tháng. Bộ dữ liệu này được tạo ra từ dữ liệu chuỗi thời gian kinh tế của Hoa Kỳ có sẵn từ Ngân hàng Dự trữ Liên Bang St. Louis.
Dữ liệu trên bao gồm 574 quan sát và chứa 6 biến:
library(ggplot2)
data("economics")
Eco <- economics
summary(Eco)
## date pce pop psavert
## Min. :1967-07-01 Min. : 506.7 Min. :198712 Min. : 2.200
## 1st Qu.:1979-06-08 1st Qu.: 1578.3 1st Qu.:224896 1st Qu.: 6.400
## Median :1991-05-16 Median : 3936.8 Median :253060 Median : 8.400
## Mean :1991-05-17 Mean : 4820.1 Mean :257160 Mean : 8.567
## 3rd Qu.:2003-04-23 3rd Qu.: 7626.3 3rd Qu.:290291 3rd Qu.:11.100
## Max. :2015-04-01 Max. :12193.8 Max. :320402 Max. :17.300
## uempmed unemploy
## Min. : 4.000 Min. : 2685
## 1st Qu.: 6.000 1st Qu.: 6284
## Median : 7.500 Median : 7494
## Mean : 8.609 Mean : 7771
## 3rd Qu.: 9.100 3rd Qu.: 8686
## Max. :25.200 Max. :15352
head(Eco)
## # A tibble: 6 × 6
## date pce pop psavert uempmed unemploy
## <date> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1967-07-01 507. 198712 12.6 4.5 2944
## 2 1967-08-01 510. 198911 12.6 4.7 2945
## 3 1967-09-01 516. 199113 11.9 4.6 2958
## 4 1967-10-01 512. 199311 12.9 4.9 3143
## 5 1967-11-01 517. 199498 12.8 4.7 3066
## 6 1967-12-01 525. 199657 11.8 4.8 3018
tail(Eco)
## # A tibble: 6 × 6
## date pce pop psavert uempmed unemploy
## <date> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2014-11-01 12051. 319564. 7.3 13 9090
## 2 2014-12-01 12062 319746. 7.6 12.9 8717
## 3 2015-01-01 12046 319929. 7.7 13.2 8903
## 4 2015-02-01 12082. 320075. 7.9 12.9 8610
## 5 2015-03-01 12158. 320231. 7.4 12 8504
## 6 2015-04-01 12194. 320402. 7.6 11.5 8526
str(Eco)
## spc_tbl_ [574 × 6] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ date : Date[1:574], format: "1967-07-01" "1967-08-01" ...
## $ pce : num [1:574] 507 510 516 512 517 ...
## $ pop : num [1:574] 198712 198911 199113 199311 199498 ...
## $ psavert : num [1:574] 12.6 12.6 11.9 12.9 12.8 11.8 11.7 12.3 11.7 12.3 ...
## $ uempmed : num [1:574] 4.5 4.7 4.6 4.9 4.7 4.8 5.1 4.5 4.1 4.6 ...
## $ unemploy: num [1:574] 2944 2945 2958 3143 3066 ...
`
ggplot(data = economics, aes(x = date, y = unemploy)) +
geom_point(aes(color =uempmed)) +
labs(x = "Date",
y = "Unemployment",
title = "Số người thất nghiệp theo thời gian") +
theme_bw()
Nhận xét: Qua biểu đồ ta thấy có các chấm sáng hơn là thể hiện thời gian thất nghiệp dài hơn, đơn vị tính cho thời gian thất nghiệp trung bình tính bằng tuần. Từ năm 2007-2010 có sự tăng trưởng ở mức cao nhất có nghĩa là thời gian thất nghiệp dài hơn trong thời kỳ suy thoái.
ggplot(data = economics) +
geom_bar(aes(x = date, y = psavert, fill = pop), stat = 'identity') +
labs(x = "Date",
y = "Personal Savings Rate",
fill = 'population',
title = "Tỷ lệ tiết kiệm của dân số mỗi năm") +
theme_bw()
Nhận xét: Tỷ lệ tiết kiệm là số tiền mà một cá nhân tiết kiệm được qua mỗi năm theo tỷ lệ phần trăm. Qua biểu đồ ta thấy được dân số đang tăng qua mỗi năm cho thấy theo thời gian thì dân số không ảnh hưởng đến tỷ lệ tiết kiệm của dân số qua mỗi năm.
library(tidyverse)
Eco <- Eco %>%
pivot_wider(names_from = pce,
values_from = unemploy)
print(Eco)
## # A tibble: 574 × 578
## date pop psavert uempmed `506.7` `509.8` `515.6` `512.2` `517.4`
## <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1967-07-01 198712 12.6 4.5 2944 NA NA NA NA
## 2 1967-08-01 198911 12.6 4.7 NA 2945 NA NA NA
## 3 1967-09-01 199113 11.9 4.6 NA NA 2958 NA NA
## 4 1967-10-01 199311 12.9 4.9 NA NA NA 3143 NA
## 5 1967-11-01 199498 12.8 4.7 NA NA NA NA 3066
## 6 1967-12-01 199657 11.8 4.8 NA NA NA NA NA
## 7 1968-01-01 199808 11.7 5.1 NA NA NA NA NA
## 8 1968-02-01 199920 12.3 4.5 NA NA NA NA NA
## 9 1968-03-01 200056 11.7 4.1 NA NA NA NA NA
## 10 1968-04-01 200208 12.3 4.6 NA NA NA NA NA
## # ℹ 564 more rows
## # ℹ 569 more variables: `525.1` <dbl>, `530.9` <dbl>, `533.6` <dbl>,
## # `544.3` <dbl>, `544` <dbl>, `549.8` <dbl>, `556.3` <dbl>, `563.2` <dbl>,
## # `567` <dbl>, `568.2` <dbl>, `571.6` <dbl>, `576.7` <dbl>, `576.5` <dbl>,
## # `583.5` <dbl>, `588.7` <dbl>, `588.9` <dbl>, `593.9` <dbl>, `600.3` <dbl>,
## # `600.9` <dbl>, `602.7` <dbl>, `609.9` <dbl>, `613.2` <dbl>, `618.5` <dbl>,
## # `620.5` <dbl>, `622.8` <dbl>, `628.7` <dbl>, `634` <dbl>, `632.3` <dbl>, …
cor.test(economics$pce, economics$psavert)
##
## Pearson's product-moment correlation
##
## data: economics$pce and economics$psavert
## t = -31.116, df = 572, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.8213959 -0.7603523
## sample estimates:
## cor
## -0.7928546
Nhận xét: Qua bảng số liệu ta thấy p-value < 2.2e-16 < 0,05. Suy ra bác bỏ H0. Vậy chi tiêu của cá nhân có ảnh hưởng đến tỷ lệ tiết kiệm
Dataset: HousePrices - Package AER. Dữ liệu “HousePrices” được lấy từ gói AER. Trong bộ dữ trên liên quan đến giá bán của 546 căn nhà ở thành phố Windsor, Canada trong tháng 7,8,9 của năm 1987.
Dữ liệu trên bao gồm 12 biến:
library(AER)
data("HousePrices")
mk <- HousePrices
Ở tuần này tôi sẽ thực hiện tính toán các thống kê mô tả
Đánh giá được độ tập trung và phân tán của dữ liệu. Dùng đồ thị để thể hiện tần số của các biến. Kiểm định rằng càng biến có quan hệ phụ thuộc nhau hay không và phân tích quan hệ ấy bằng đồ thị đơn giản
Ở mục này tôi bắt đầu phân tổ biến giá bán nhà và biến diện tích của ngôi nhà. Tôi phân thành 4 tổ và sau đó tôi gán chúng vào mk
mk$price <- cut(mk$price, breaks = c(25000,80000,135000,190000), labels = c(" giá thấp", "giá Vừa", "giá cao"))
table(mk$price)
##
## giá thấp giá Vừa giá cao
## 400 131 12
mk$lotsize <- cut(mk$lotsize, breaks = c(4000,5000,8000,11000), labels = c("S nhỏ","S vừa","S rộng"))
table(mk$lotsize)
##
## S nhỏ S vừa S rộng
## 103 183 42
table(mk$bat, mk$price)
##
## giá thấp giá Vừa giá cao
## 1 340 56 3
## 2 56 73 4
## 3 4 2 4
## 4 0 0 1
k=table(mk$bat, mk$price)
prop.table(k)
##
## giá thấp giá Vừa giá cao
## 1 0.626151013 0.103130755 0.005524862
## 2 0.103130755 0.134438306 0.007366483
## 3 0.007366483 0.003683241 0.007366483
## 4 0.000000000 0.000000000 0.001841621
Nhận xét: Ở những ngôi nhà có 1 phòng tắm thì tỷ lệ giá bán thấp sẽ tập trung đông chiến hơn một nửa 62,6% cao hơn nhiều so với giá vừa(10,3%) và giá cao(0.5%). Với những ngôi nhà có 4 phòng tắm thì tỷ lệ có giá bán thấp, vừa, cao là như nhau chiếm tỷ lệ rất nhỏ dưới 0.2%.
table(mk$bed, mk$lotsize)
##
## S nhỏ S vừa S rộng
## 1 0 0 0
## 2 32 27 8
## 3 48 113 23
## 4 21 39 10
## 5 1 4 1
## 6 1 0 0
h= table(mk$bed, mk$lotsize)
prop.table(h)
##
## S nhỏ S vừa S rộng
## 1 0.00000000 0.00000000 0.00000000
## 2 0.09756098 0.08231707 0.02439024
## 3 0.14634146 0.34451220 0.07012195
## 4 0.06402439 0.11890244 0.03048780
## 5 0.00304878 0.01219512 0.00304878
## 6 0.00304878 0.00000000 0.00000000
Nhận xét: Ở những ngôi nhà có 1 phòng ngủ và 4 phòng ngủ thì diện tích ngôi nhà chiếm tỷ lệ rất nhỏ dưới 0,3%. Ở những ngôi nhà có 3 phòng ngủ thì diện tích của ngôi nhà chiếm tỷ lệ cao hơn những ngôi nhà có 2 phòng ngủ. Ở những ngôi nhà có diện tích vừa mà có 3 phòng ngủ chiếm tỷ lệ cao 34,5% . Qua bảng tần suất diện tích của ngôi nhà thì ta thấy các ngôi nhà có diện tích nhỏ và vừa mà có 2,3 phòng ngủ chiến tỷ lệ khá cao.
Trong phần này chúng ta sẽ tính các đặc trưng đo lường, trung bình, phương sai,độ lệch chuẩn,tổng của các biến bằng lệnh summary, mean, sd,var,quantile,sum để có cái nhìn tổng quan hơn.
Tôi dùng hàm Summary để tóm tắt thống kê cho toàn bộ dữ liệu.
summary(mk$bedrooms)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 2.000 3.000 2.965 3.000 6.000
Nhận xét: Qua bảng tóm tắt trên ta thấy các ngôi nhà có ít nhất 1 phòng ngủ và nhiều nhất là 6 phòng ngủ. Các ngôi nhà có số phòng ngủ trung bình là 3 phòng. Có 25% số ngôi nhà có số phòng ngủ nhỏ hơn 2 phòng, có 50% số ngôi nhà có số phòng ngủ nhỏ hơn 3 phòng và 75% số ngôi nhà có số phòng ngủ nhỏ hơn 3 phòng
summary(mk$stories)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 1.000 2.000 1.808 2.000 4.000
Nhận xét: Qua bảng tóm tắt trên ta thấy các ngôi nhà có ít nhất 1 tầng và nhiều nhất 4 tầng và trung bình các ngôi nhà có 2 tầng. Có 25% số ngôi nhà có số tầng nhỏ hơn 1 tầng, có 50% số ngôi nhà có số tầng nhỏ hơn 2 tầng và 75% số ngôi nhà có số tầng nhỏ hơn 2 tầng
summary(mk$garage)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0000 0.0000 0.0000 0.6923 1.0000 3.0000
Nhận xét: Qua bảng tóm tắt thống kê trên ta thấy số chỗ để xe nhỏ nhất là 0 và lớn nhất là 3 chỗ. Số chỗ để xe trung bình là 3 chỗ. Có 25% số ngôi nhà có số chỗ để xe nhỏ hơn 0, có 50% số ngôi nhà có số chỗ để xe nhỏ hơn 0 và 75% số ngôi nhà có số chỗ để xe nhỏ hơn 1 chỗ.
mean(mk$bathrooms)
## [1] 1.285714
Nhận xét: Số phòng tắm trung bình của ngôi nhà là 1,235714
var(mk$bathrooms)
## [1] 0.2521625
Nhận xét: SỐ 0.2521625 đại diện cho mức độ phân tán của số phòng tắm so với giá bán trung bình
sd(mk$bathrooms)
## [1] 0.5021579
Nhận xét: Số 0,5021579 đo lường mức độ phân tán của giá bán cho số phòng tắm trung bình
sum(mk$bathrooms)
## [1] 702
Nhận xét: Có tới 702 phòng tắm trong 546 ngôi nhà
quantile(mk$bathrooms, .50)
## 50%
## 1
Nhận xét: Hàm quantile dùng để tính phân vị của tập dữ liệu. Kết quả có 50% ngôi nhà có giá bán cho số phòng tắm ít hơn 1 phòng
aggregate(HousePrices$lotsize,list(HousePrices$bedrooms), FUN="mean")
## Group.1 x
## 1 1 3710.000
## 2 2 4636.235
## 3 3 5225.867
## 4 4 5582.063
## 5 5 6291.500
## 6 6 3950.000
Nhận xét: Nhà có 1 phòng ngủ có diện tích trung bình là 3710 mét vuông. Nhà có 2 phòng ngủ có diện tích trung binhg là 4636 mét vuông, 3 phòng ngủ là 5226 mét vuông, 4 phòng ngủ là 5582 mét vuông, 5 phòng ngủ là 6292 mét vuông và 6 phòng ngủ là 3950 mét vuông
aggregate(HousePrices$lotsize,list(HousePrices$garage), FUN="mean")
## Group.1 x
## 1 0 4502.783
## 2 1 5576.357
## 3 2 6226.380
## 4 3 7178.333
Nhận xét: Diện tích trung bình của ngôi nhà có 3 chỗ để xe chiếm diện tích lớn nhất 7178 mét vuông, 2 chỗ để xe là 6226 mét vuông, 1 chỗ để xe là 5576 mét vuông và không có chỗ để xe chiếm diện tích bé nhất là 4503 mét vuông
library(tidyverse)
mk %>% group_by(lotsize) %>% summarise(mk=mean(garage))
## # A tibble: 4 × 2
## lotsize mk
## <fct> <dbl>
## 1 S nhỏ 0.592
## 2 S vừa 0.847
## 3 S rộng 1.48
## 4 <NA> 0.459
mk %>% group_by(lotsize) %>% summarise(mk=var(garage))
## # A tibble: 4 × 2
## lotsize mk
## <fct> <dbl>
## 1 S nhỏ 0.616
## 2 S vừa 0.823
## 3 S rộng 0.743
## 4 <NA> 0.544
mk %>% group_by(lotsize) %>% summarise(mk=sd(garage))
## # A tibble: 4 × 2
## lotsize mk
## <fct> <dbl>
## 1 S nhỏ 0.785
## 2 S vừa 0.907
## 3 S rộng 0.862
## 4 <NA> 0.738
a <- mk$bathrooms
a1 <- a[1:100]
a2 <- a[101:200]
bathrooms1 <- data.frame(sophong=a1,nguoimua="A")
bathrooms2 <- data.frame(sophong=a2,nguoimua="B")
bathroomsnew <- rbind(bathrooms1,bathrooms2)
bathroomsnew
## sophong nguoimua
## 1 1 A
## 2 1 A
## 3 1 A
## 4 1 A
## 5 1 A
## 6 1 A
## 7 2 A
## 8 1 A
## 9 1 A
## 10 2 A
## 11 2 A
## 12 1 A
## 13 1 A
## 14 1 A
## 15 1 A
## 16 1 A
## 17 1 A
## 18 1 A
## 19 1 A
## 20 2 A
## 21 1 A
## 22 2 A
## 23 1 A
## 24 1 A
## 25 1 A
## 26 1 A
## 27 1 A
## 28 1 A
## 29 1 A
## 30 1 A
## 31 1 A
## 32 1 A
## 33 1 A
## 34 1 A
## 35 1 A
## 36 1 A
## 37 1 A
## 38 1 A
## 39 2 A
## 40 2 A
## 41 1 A
## 42 1 A
## 43 1 A
## 44 3 A
## 45 1 A
## 46 1 A
## 47 1 A
## 48 1 A
## 49 1 A
## 50 1 A
## 51 2 A
## 52 1 A
## 53 1 A
## 54 1 A
## 55 3 A
## 56 1 A
## 57 1 A
## 58 2 A
## 59 1 A
## 60 1 A
## 61 1 A
## 62 1 A
## 63 1 A
## 64 1 A
## 65 1 A
## 66 1 A
## 67 1 A
## 68 1 A
## 69 1 A
## 70 1 A
## 71 1 A
## 72 1 A
## 73 1 A
## 74 1 A
## 75 1 A
## 76 1 A
## 77 1 A
## 78 1 A
## 79 2 A
## 80 1 A
## 81 1 A
## 82 1 A
## 83 1 A
## 84 1 A
## 85 1 A
## 86 1 A
## 87 1 A
## 88 2 A
## 89 1 A
## 90 1 A
## 91 1 A
## 92 2 A
## 93 1 A
## 94 2 A
## 95 1 A
## 96 1 A
## 97 1 A
## 98 1 A
## 99 1 A
## 100 1 A
## 101 2 B
## 102 3 B
## 103 1 B
## 104 2 B
## 105 2 B
## 106 1 B
## 107 1 B
## 108 2 B
## 109 2 B
## 110 1 B
## 111 1 B
## 112 1 B
## 113 1 B
## 114 1 B
## 115 2 B
## 116 1 B
## 117 1 B
## 118 2 B
## 119 2 B
## 120 1 B
## 121 1 B
## 122 2 B
## 123 1 B
## 124 1 B
## 125 1 B
## 126 2 B
## 127 3 B
## 128 2 B
## 129 2 B
## 130 2 B
## 131 1 B
## 132 1 B
## 133 1 B
## 134 1 B
## 135 1 B
## 136 2 B
## 137 1 B
## 138 1 B
## 139 1 B
## 140 1 B
## 141 1 B
## 142 1 B
## 143 2 B
## 144 1 B
## 145 1 B
## 146 1 B
## 147 1 B
## 148 2 B
## 149 2 B
## 150 1 B
## 151 1 B
## 152 1 B
## 153 2 B
## 154 1 B
## 155 1 B
## 156 3 B
## 157 1 B
## 158 2 B
## 159 1 B
## 160 1 B
## 161 1 B
## 162 1 B
## 163 1 B
## 164 2 B
## 165 1 B
## 166 1 B
## 167 1 B
## 168 1 B
## 169 1 B
## 170 1 B
## 171 1 B
## 172 1 B
## 173 1 B
## 174 1 B
## 175 1 B
## 176 2 B
## 177 1 B
## 178 2 B
## 179 2 B
## 180 1 B
## 181 1 B
## 182 1 B
## 183 1 B
## 184 1 B
## 185 1 B
## 186 1 B
## 187 1 B
## 188 1 B
## 189 1 B
## 190 1 B
## 191 1 B
## 192 1 B
## 193 1 B
## 194 2 B
## 195 1 B
## 196 1 B
## 197 1 B
## 198 1 B
## 199 1 B
## 200 1 B
hist(mk$bathrooms )
library(AER)
data("HousePrices")
Trong phần này tôi sẽ thực hành một số thao tác là gán dữ liệu, đặt tên cho bộ dữ liệu, sử dụng str để hiển thị cấu trúc của dữ liệu, xem các quan sát đầu, quan sát cuối và tạo các bản tóm tắt cho dữ liệu
Đầu tiên tôi gán dataset HousePrices vào một biến có tên là mk
mk <- HousePrices
str(mk)
## 'data.frame': 546 obs. of 12 variables:
## $ price : num 42000 38500 49500 60500 61000 66000 66000 69000 83800 88500 ...
## $ lotsize : num 5850 4000 3060 6650 6360 4160 3880 4160 4800 5500 ...
## $ bedrooms : num 3 2 3 3 2 3 3 3 3 3 ...
## $ bathrooms : num 1 1 1 1 1 1 2 1 1 2 ...
## $ stories : num 2 1 1 2 1 1 2 3 1 4 ...
## $ driveway : Factor w/ 2 levels "no","yes": 2 2 2 2 2 2 2 2 2 2 ...
## $ recreation: Factor w/ 2 levels "no","yes": 1 1 1 2 1 2 1 1 2 2 ...
## $ fullbase : Factor w/ 2 levels "no","yes": 2 1 1 1 1 2 2 1 2 1 ...
## $ gasheat : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
## $ aircon : Factor w/ 2 levels "no","yes": 1 1 1 1 1 2 1 1 1 2 ...
## $ garage : num 1 0 0 0 0 0 2 0 0 1 ...
## $ prefer : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
head(mk)
## price lotsize bedrooms bathrooms stories driveway recreation fullbase gasheat
## 1 42000 5850 3 1 2 yes no yes no
## 2 38500 4000 2 1 1 yes no no no
## 3 49500 3060 3 1 1 yes no no no
## 4 60500 6650 3 1 2 yes yes no no
## 5 61000 6360 2 1 1 yes no no no
## 6 66000 4160 3 1 1 yes yes yes no
## aircon garage prefer
## 1 no 1 no
## 2 no 0 no
## 3 no 0 no
## 4 no 0 no
## 5 no 0 no
## 6 yes 0 no
tail(mk)
## price lotsize bedrooms bathrooms stories driveway recreation fullbase
## 541 85000 6525 3 2 4 yes no no
## 542 91500 4800 3 2 4 yes yes no
## 543 94000 6000 3 2 4 yes no no
## 544 103000 6000 3 2 4 yes yes no
## 545 105000 6000 3 2 2 yes yes no
## 546 105000 6000 3 1 2 yes no no
## gasheat aircon garage prefer
## 541 no no 1 no
## 542 no yes 0 no
## 543 no yes 0 no
## 544 no yes 1 no
## 545 no yes 1 no
## 546 no yes 1 no
names(mk) <- c("pr","lot","bed","bat","str","dr","rec","fb","gas","air","gar","pre")
price <- mk$pr
lotsize <- mk$lot
bedrooms <- mk$bed
bathrooms <- mk$bat
stories <- mk$str
summary(mk)
## pr lot bed bat
## Min. : 25000 Min. : 1650 Min. :1.000 Min. :1.000
## 1st Qu.: 49125 1st Qu.: 3600 1st Qu.:2.000 1st Qu.:1.000
## Median : 62000 Median : 4600 Median :3.000 Median :1.000
## Mean : 68122 Mean : 5150 Mean :2.965 Mean :1.286
## 3rd Qu.: 82000 3rd Qu.: 6360 3rd Qu.:3.000 3rd Qu.:2.000
## Max. :190000 Max. :16200 Max. :6.000 Max. :4.000
## str dr rec fb gas air
## Min. :1.000 no : 77 no :449 no :355 no :521 no :373
## 1st Qu.:1.000 yes:469 yes: 97 yes:191 yes: 25 yes:173
## Median :2.000
## Mean :1.808
## 3rd Qu.:2.000
## Max. :4.000
## gar pre
## Min. :0.0000 no :418
## 1st Qu.:0.0000 yes:128
## Median :0.0000
## Mean :0.6923
## 3rd Qu.:1.0000
## Max. :3.0000
lot1 <- mk[mk$lot>5000,]
Nhận xét: Kết quả là 236 có nghĩa là các ngôi nhà ở đây có tổng diện tích trên 5000 mét vuông thì có 236 ngôi nhà chiếm tỷ lệ 43,22% trên tổng số.
Tôi dùng lệnh table để tạo một bảng số phòng ngủ của các ngôi nhà được bán và tôi chia chúng thành 5 tổ có khảng cách đều nhau
table(cut(mk$bed, breaks = c(0,1,2,3,4,5)))
##
## (0,1] (1,2] (2,3] (3,4] (4,5]
## 2 136 301 95 10
table(cut(mk$gar,3 ),mk$fb)
##
## no yes
## (-0.003,1] 285 141
## (1,2] 62 46
## (2,3] 8 4
mk$str[4]
## [1] 2
mk[4,2]
## [1] 6650
k <- mk[mk$pr>50000 & mk$pr<90000,]
Kết quả tôi nhận được là có 290 ngôi đang có giá bán từ 50 nghìn đô tới 90 nghìn đô
Để biết được trong tất cả 546 ngôi nhà ở đây thì có bao nhiêu ngôi nhà có 3 phòng tắm thì tôi chọn biến bathrooms. Sau đó tôi gán chúng vào h và kết quả nhận được là có tới 10 ngôi nhà đang có phòng tắm chiếm 1,83% trong tổng số các ngôi nhà
h <- mk[mk$bat == 3,]
bed1 <- mk[mk$bed == 4,]