Programming (29) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [Level 2] ์กฐ์ด์คํฑ ์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์กฐ์ด์คํฑ ์กฐ์ด์คํฑ์ผ๋ก ์ํ๋ฒณ ์ด๋ฆ์ ์์ฑํ์ธ์. ๋งจ ์ฒ์์ A๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ex) ์์ฑํด์ผ ํ๋ ์ด๋ฆ์ด ์ธ ๊ธ์๋ฉด AAA, ๋ค ๊ธ์๋ฉด AAAA ์กฐ์ด์คํฑ์ ๊ฐ ๋ฐฉํฅ์ผ๋ก ์์ง์ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค. โฒ - ๋ค programmers.co.kr def cnt_up_down(chr): cnt_from_a = abs(ord('A')-ord(chr)) cnt_from_z = abs(ord('Z')-ord(chr)+1) return(min(cnt_from_a, cnt_from_z)) def solution(name): cnt = 0 for i in name: cnt += cnt_up_down(i) lst_name = list(name) len_name = len(lst_name) if ls.. [Level 2] ํฐ ์ ๋ง๋ค๊ธฐ ์ฝ๋ฉํ ์คํธ ์ฐ์ต - ํฐ ์ ๋ง๋ค๊ธฐ programmers.co.kr def solution(num, k): max_num = [] for i, n in enumerate(num): while len(max_num) > 0 and max_num[-1] 0: max_num.pop() k -= 1 if k == 0: max_num += list(num[i:]) break max_num.append(n) max_num = max_num[:-k] if k > 0 else max_num return(''.join(max_num)) โท ์ด ๋ฌธ์ ๋ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ํธ๋ ๋ฌธ์ ๋ก, ์ฃผ์ด์ง ๋ฌธ์์ด์ ๋ ๋ฒ์งธ ์ซ์๋ถํฐ ์ด์ ์ ์ซ์์ ๋น๊ต๋ฅผ ํตํด ๊ฐ์ฅ ํฐ ์ซ์๋ฅผ ๋ง๋ค์ด ๋๊ฐ์ผ ํ๋ค. โท ์ ์ฝ๋์.. ๊ธฐ๋ณธ ํจ์ ์ฌ์ฉ๋ฒ R์ ๋ด์ฅ๋ ๊ธฐ๋ณธ ํจ์์ ์ฌ์ฉ๋ฒ์ ๋ํด ์์๋ณด์. โก if ( ) { } else if ( ) { } else { } In: char = 'A' if (char == 'B') { print('if') } else if (char == 'C') { print('else if') } else { print('else') } Out: [1] "else" โก for ( ) { } In: for (i in 1:5) { print(i) } Out: [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 โก ifelse In: char = 'A' ifelse(char == 'A', 'char is A', 'char is not A') Out: [1] "char is A" โท ifelse ํจ์์ ์ฒซ ๋ฒ์งธ ์ธ์๋ ์กฐ๊ฑด์ .. caret ์ฌ์ฉ๋ฒ caret ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฒ์ ์ ์ฉ ๋ฐฉ๋ฒ์ ์์๋ณด์. In: df_iris = iris str(df_iris) Out: 'data.frame':150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... $ Species : Factor w/ 3 levels .. dplyr ์ฌ์ฉ๋ฒ dplyr์ ๋ํ์ ์ธ ํจ์ select, filter, mutate, summarise, group_by, sample_n, sample_frac์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ดํดํ๊ณ ์ ์ฉํ์ฌ ๋ณด์. In: library(dplyr) df_iris = iris str(df_iris) Out: Sepal.Length Sepal.Width Petal.Length Petal.Width Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 Median :5.800 Median :3.000 Median :4.350 Median :1.300 Mean :5.843 Mean :3.057 Mean :3... ๊ฒฐ์ธก์น ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ ๊ฒฐ์ธก์น ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํ์ฌ ์์๋ณด์. โก ๊ฒฐ์ธก์น ํ์ธ In: library(MASS) df_car = Cars93 df_car %>% sapply(function(x) sum(is.na(x))) Out: Manufacturer Model Type 0 0 0 Min.Price Price Max.Price 0 0 0 MPG.city MPG.highway AirBags 0 0 0 DriveTrain Cylinders EngineSize 0 0 0 Horsepower RPM Rev.per.mile 0 0 0 Man.trans.avail Fuel.tank.capacity Passengers 0 0 0 Length Wheelbase Width 0 0 0 Turn.circle Rear.seat.room Luggag.. CSV ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ CSV ํ์ผ์ ์์ฑํ ๋ค, ์ด๋ฅผ ํน์ ๊ฒฝ๋ก์ ์ฐ๊ณ ์ฝ๊ธฐ๋ฅผ ์ํํ์ฌ ๋ณด์. In: df_car = mtcars df_car %>% head() Out: mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Va.. ๋ฌธ์์ด ๋ฐ์ดํฐ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ R์ ๋ด์ฅ๋์ด ์๋ ํจ์์ stringr ํจํค์ง๋ฅผ ํํ์ฌ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณผ ๊ฒ์ด๋ค. โก ๋ฌธ์ ์ด์ด ๋ถ์ด๊ธฐ In: paste('Rooney', 'Song', sep = '_') paste0('Rooney', 'Song') str_c('Rooney', 'Song', sep = '_') Out: [1] "Rooney_Song" [1] "RooneySong" [1] "Rooney_Song" โท paste, paste0 ํจ์๋ ๋ ๋ฌธ์์ด์ ๋ถ์ฌ์ฃผ๋ ์ญํ ์ ํ๋ค. ๋ ํจ์์ ์ฐจ์ด์ ์ paste0 ํจ์๋ ๋ถ์ผ ๋, ์ฌ์ด์ ๋ฌธ์๋ฅผ ์ฝ์ ํ์ง ์๊ณ , ๋ฐ๋ก ๋ถ์ธ๋ค๋ ๊ฒ์ด๋ค. paste ํจ์์ sep ์ธ์๋ฅผ ํตํด ๋ ๋ฌธ์์ด์ ๋ถ์ผ ๋, ์ฌ์ด์ ๋ค์ด๊ฐ ๋ฌธ์๋ฅผ ์ง์ ํ ์ ์๋ค. โท str_c ํจ์๋ st.. ์๊ณ์ด ๋ฐ์ดํฐ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ R์ ๋ด์ฅ๋์ด ์๋ ํจ์์ lubridate ํจํค์ง๋ฅผ ํ์ฉํ์ฌ ์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณผ ๊ฒ์ด๋ค. โก ๊ธฐ๋ณธ ํจ์๋ฅผ ํ์ฉํ ์๊ณ์ด ๋ฐ์ดํฐ ๋ค๋ฃจ๊ธฐ In: date_form = c('%Y%m%d', '%Y.%m.%d', '%Y~%m~%d', '%Y-%m-%d') date_1 = as.Date('20201019', tryFormats = date_form) date_2 = as.Date('2020.10.19', tryFormats = date_form) date_3 = as.Date('2020~10~19', tryFormats = date_form) print(date_1) print(date_2) print(date_3) print(class(date_1)) print(class(date_2).. tidyr ์ฌ์ฉ๋ฒ tidyr ํจ์บ์ง์ ๋ํ์ ์ธ ํจ์ gather, spread, seperate, unite์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ดํดํ๊ณ ์ ์ฉํ์ฌ ๋ณด์. In: library(dplyr) library(tidyr) df_iris = iris df_iris$id = 1:nrow(df_iris) df_iris = df_iris[, c(6, 1:5)] str(df_iris) Out: 'data.frame':150 obs. of 6 variables: $ id : int 1 2 3 4 5 6 7 8 9 10 ... $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $ .. apply, sapply, lapply ์ฌ์ฉ๋ฒ apply, sapply, lapply ํจ์์ ์ฌ์ฉ๋ฒ์ ์ดํดํ๊ณ ์ ์ฉํ์ฌ ๋ณด์. In: library(dplyr) df_iris = iris df_iris_num = iris %>% select(-Species) str(df_iris_num) Out: 'data.frame':150 obs. of 4 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... $ Petal.Width : num 0.2 0.2 0.2 0.. Selenium๊ณผ BeautifulSoup๋ฅผ ํ์ฉํ ํฌ๋กค๋ง BeautifulSoup์ Selenium์ ์ด์ฉํ์ฌ ํผํ ์จ๋ผ์ธ์ ๋ฐ์ดํฐ ์ผํฐ์์ 5์๋ถํฐ 10์๊น์ง์ ํฌ์ง์ ๋ณ ์ ์์ ์ด์ฉ์ ์ ๋ฐ์ดํฐ๋ฅผ ํฌ๋กค๋ง ํ ํ, ํผํ ์จ๋ผ์ธ์ ํฌ์ง์ ๋ณ ์ ์์ ์ ํธ๋๋ฅผ ํ์ธํ ๊ฒ์ด๋ค. ์ ์ ํฌ๋กค๋ง๋ง์ผ๋ก ํด๋น ์ฌ์ดํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ค ๋ถ๋ฌ์ฌ ์ ์๊ธฐ ๋๋ฌธ์ ์ ์ ํฌ๋กค๋ง์ ์ํํ๋ BeautifulSoup์ ๋์ ํฌ๋กค๋ง์ ์ํํ๋ Selenium์ ํจ๊ป ํ์ฉํ์ฌ ํฌ๋กค๋ง์ ์ํํ์๋ค. ์ํ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค. 1. ๋ฐ์ดํฐ ์์ง ๊ณผ์ 2. ํฌ๋กค๋ง 3. ์๊ฐํ 1. ๋ฐ์ดํฐ ์์ง ๊ณผ์ ํฌ์ง์ ๋ณ ์ ์์ ์ด์ฉ์ ์๋ฅผ ์ป๊ธฐ ์ํด์๋ ํผํ ์จ๋ผ์ธ์ ๋ฐ์ดํฐ ์ผํฐ(fifaonline4.nexon.com/datacenter/dailysquad)์ ์ ์ํ ํ, ๋ค์ ๊ณผ์ ์ ํตํด ์ํํ์ฌ์ผ ํ๋ค. (1).. ์ด์ 1 2 3 ๋ค์