일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 시각화
- 넘파이
- pandas
- 브루트포스 알고리즘
- 태블로
- Leetcode
- DataFrame
- 유데미부트캠프
- 데이터프레임
- Til
- 유데미코리아
- 그리디 알고리즘
- 파이썬
- 부트캠프후기
- matplotlb
- python
- 데이터시각화
- ndarray
- 판다스
- numpy
- 백준
- 스타터스부트캠프
- 데이터분석
- 유데미큐레이션
- 데이터드리븐
- 정렬
- 취업부트캠프
- Tableau
- 코딩테스트
- 유데미
- Today
- Total
Diary, Data, IT
[TIL] 13일차 TIL(20230222) - ggplot, 가설검정, 상관계수 본문
[TIL] 13일차 TIL(20230222) - ggplot, 가설검정, 상관계수
1. qplot
- 빠르게 데이터 시각화 할 때 사용
- qplot(data=‘사용할 데이터 변수명’, x=‘data에서 x축에 사용할 변수’, y =‘data에서 y축에 사용할 변수’)
- geom요소를 추가하여 그래프의 종류 지정(지정하지 않으면 산점도 출력)
- aes(col = column) 요소를 추가하여 컬럼별로 구분하고 색을 달리하여 출력할 수 있음
2. ggplot
ggplot(data, aes(x = x축, y = y축, col(점, 선 그래프에 사용), fill(막대 그래프, 히스토그램 등에 사용)) +
geom_point()/geom_line() # 그래프의 종류를 명시
- ggplot내에 명시하면 이어서 그리는 모든 그래프에 해당 옵션을 적용
- 그래프의 종류를 명시한 구문 안에 넣으면 해당 그래프에만 옵션을 적용
- 색상 옵션에 컬럼명을 넣으면 컬럼별로 색상을 다르게 지정해서 그래프를 그려줌
2.1 산점도
geom_point(shape, color, fill, size, stroke(테두리 두께), mapping = aes(x, y, col))
ggplot(diamonds, aes(x = carat, y = price, col = cut)) +
geom_point(shape = 11) # 범주별로 다른 색 지정
2.2 선그래프
geom_line(color, size, arrow = arrow())
- arrow 옵션을 지정하면 그래프의 끝을 화살표 모양으로 지정 가능
2.3 바그래프
geom_bar(stat)
- stat = 'count': default, 데이터 내의 각 범주의 수를 세어 바 그래프의 높이로 나타냄
- stat = 'identity': 데이터의 값 자체를 바 그래프의 높이로 사용
2.4 히스토그램
geom_histogram(binwidth)
- binwidth: 히스토그램의 데이터를 나누는 구간의 길이(*막대의 수가 아님)
2.5 박스플롯
ggplot(data, aes(x = x축컬럼, y = y축컬럼)) + geom_boxplot()
- y축만 입력도 가능하고, x축(범주형)과 함께 입력 시, 범주별 데이터의 박스플롯 출력
3. ggplot 기타 옵션들
3.1 변수별로 그래프 나눠 그리기
- facet_wrap(~범주형 컬럼, labeller = label_value, nrow, ncol): 1가지 범주형 컬럼에 대해 그래프를 나눠 그리는 함수
- labeller: 'label_both' 사용시 컬럼명과 범주값 함께 출력
- facet_wrap(범주형 컬럼1 ~ 범주형 컬럼2, labeller, nrow, ncol): 2가지 범주형 컬럼에 대해 그래프를 나눠 그리는 함수
ggplot(diamonds[1:100, ], mapping = aes(x = carat, y = price)) +
geom_point() +
facet_wrap(~cut, labeller = label_both, nrow = 2)
3.2 데이터에 대한 통계값 표기 함수
- stat_smooth(level): 데이터에 회귀선을 그리는 함수, level은 신뢰구간
- stat_summary(fun.y, color, size, geom): x값에 대한 y값의 간단한 통계값을 그래프에 그려주는 함수
fun.y: 구하고 싶은 통계함수(mean, min, max, median 등)
geom: 통계치를 나타낼 시각화 형태(point 등)
3.3 x축 또는 y축 정보를 변형
- coord_cartesian(xlim, ylim): x축과 y축의 범위를 지정
- coord_flip(): x축과 y축을 반전시킨 그래프 출력
- coord_polar(): (x, y)좌표계를 극좌표계로 변환(theta = 'y'를 지정하면 바그래프가 원그래프로 변환)
3.4 그래프 꾸미기 옵션
- ggtitle()
- theme_gray(), theme_bw(): 배경을 회색/하얀색으로 지정
- theme(axis.title.x = element_text(), plot.title = element_text()) : 각 축의 이름, 제목 등의 옵션 지정
ggplot(diamonds, mapping = (aes(x = carat, y = price))) +
geom_point() +
ggtitle('Title of Diamond Dataset') +
theme(axis.title.x = element_text(colour = 'red'), plot.title = element_text(color = 'blue'))
3.5 그래프 여러개 그리기
library(gridExtra)
grid.arrange(g1, g2, ...)
- 각 그래프를 변수에 할당하고 grid.arrange() 안에 함께 그리고자 하는 그래프의 변수명을 입력해주면
해당 그래프들을 화면을 적절하게 분할하여 그려줌
4. 단계 구분도 시각화
library(ggiraphExtra)
ggChoropleth(data, aes(fill = 색으로 나타낼 컬럼, map_id = 지도(위치)를 나타내는 컬럼명), map = 지도 데이터)
- 지도의 영역에 해당하는 데이터들의 분포를 색으로 구분하여 표현
- interactive = T 옵션을 통해 인터렉티브한 그래프로 그릴 수 있음
ggChoropleth(data = crime, aes(fill = Murder, map_id = state),
map = states_map)
5. 간단한 시계열 예측 함수
- library(forecast)
forecast(data, h = 예측할 데이터 개수)
- data는 시간의 흐름에 따른 예측하려는 값(y)를 입력
6. 가설검정
- 모집단에 대한 가설을 모집단으로부터 추출한 표본을 사용하여 검토하는 추론 방법
- 통계량: 판단을 위해서 계산하여 얻는 1종 오류가 발생할 확률의 허용 임계값
6.1 z검정
- z.test(x = data, alternative = 'two.sided', mu, sigma.x, conf.level)
*단측검정시, alternative를 'greater', 'less'로 바꿔서 사용
6.2 t검정
- 모집단의 표준편차를 모를 때, 표본의 표준편차를 사용해서 검정하는 방법
- t.test(x = data, alternative = 'two.sided', mu, conf.level)
6.3 z검정, t검정의 전제(2표본일 때)
- 독립성: 두 집단은 서로 독립니다.
- 정규성: 두 집단은 정규분포를 따른다.
- 등분산성: 두 집단의 분산이 같다.
7. 상관계수
- cor(data, method = ('pearson'/'kendall'/'spearman'))
- cor.test(data, method)
library(corrplot)
col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))
M = cor(iris[, 1:4])
corrplot(M, method = 'color', col = col(150), addCoef.col = 'black', type = 'upper', diag = FALSE)
8. 유용한 전처리 함수
- factor 자료형: 범주형 데이터를 R에서는 factor형으로 지정해서 사용할 수 있음
- stringsAsFactors = F, 데이터를 불러올 때 문자형 컬럼을 factor의 범주형으로 지정할지의 여부를 설정
- rownames_to_column(data, var = 컬럼명): 인덱스에 지정되어 있는 값을 새로운 컬럼으로 만들어주는 함수
library(tibble)이 필요
- tolower(vector): 벡터 내의 문자를 모두 소문자로 바꿔줌
- as.data.frame(): 데이터 프레임 형식으로 변환
- databreaks <- seq(as.Date('2021-01-01'), as.Date('2021-10-01'), by = '1 month') #날짜 형식으로 데이터를 넣어주면 날짜 간격으로도 벡터 생성 가능
9. 워드클라우드 실습
- 형태소 분석의 기본적인 코드
library(KoNLP)
useNIADic() #NIA 사전을 사용하여 분석을 진행
extractNoun() : 문장에서 명사를 추출
- R 4.0이상에서 KoNLP 설치 참고 사이트
R 4.0. 이상 KoNLP 설치순서 │KoNLP 설치 오류 해결 │한글 텍스트 마이닝
R이 4.0 이상에서 한글 텍스트 마이닝을 위한 KoNLP 설치와 활용이 어려워졌습니다. 아래와 같은 순서대로 설치하고, 3. java, rjava 설치 이하 R code 는 R의 콘솔창에 그대로 붙여넣기만 하면 됩니다.
e-datanews.tistory.com
## 필요한 라이브러리 import
library(KoNLP)
library(dplyr)
library(stringr)
useNIADic()
## 데이터 불러오기
txt <- readLines('data/ratings.txt', encoding = 'UTF-8')
head(txt)
result <- strsplit(txt, split = '\t')
head(result)
## 영화평만 가져와서 data벡터에 담음
data <- c(); i<- 1
for (item in result){
data[i] <- item[2]
i <- i+1
}
head(data)
## 영화평 내 특수문자 제거
data <- str_replace_all(data, '[[:punct:]]', "")
data2 <- data[2: 10001] # 일부 데이터만 추출
## 명사 추출
nouns <- extractNoun(data2)
## 명사별 등장 횟수를 데이터 프레임으로 저장
wordcount <- table(unlist(nouns))
df_word <- as.data.frame(wordcount, stringsAsfactors = F)
df_word <- rename(df_word, word = Var1, freq = Freq)
head(df_word)
## factor에서 character로 자료형 변환
df_word$word <- as.character(df_word$word)
str(df_word)
## 단어 수가 2글자 이상인 행만 남김
df_word2 <- filter(df_word, nchar(word) > 2)
str(df_word2)
## 결과가 잘 나왔는지 확인
top40 <- df_word %>% arrange(desc(freq)) %>% head(40)
top40
### 워드 클라우드를 이용한 시각화 ###
library(wordcloud)
library(RColorBrewer)
pal <- brewer.pal(8, 'Dark2') #Dark2 색상 목록에서 8개 색상 추출
set.seed(1234)
wordcloud(words = df_word$word, freq = round(sqrt(df_word$freq)), #빈도 수 차이를 줄여주기 위함
min.freq = 5, max.word = 200, random.order = F,
rot.per = .1, scale = c(4, 0.5), colors = pal)
소감 및 정리
ggplot을 굉장히 오랜만에 사용해보았다. 예전에 사용했던 문법들이 기억나서 반가운 마음도 들었고, 새로 배우는 옵션들도 많아서 새로운 느낌도 들었다. 가설검정과 상관계수같은 통계적인 내용은 이미 익숙한 내용이어서 어렵지 않게 들을 수 있었다. 또 오늘은 실습 위주의 강의들이 많아서 수강하는데 시간이 오래 걸렸었다. 특히 KoNLP 패키지를 설치하는데 애를 먹었는데, 나뿐만 아니라 모두가 같은 문제를 겪고 있었다. 문제를 해결하기 위해서 서로 방법을 공유하면서 다양한 방식으로 시도해보다가 결국 설치를 끝낼 수 있었다. 사실 실습 코드 내용은 굉장히 단순해서 패키지 설치에 더 많은 시간을 들인 것 같기도 하다. 항상 조용히 강의만 듣다가 서로 정보를 공유해가며 문제를 해결하는 계기가 생긴 점은 오히려 좋은 것 같기도 하다 ㅎㅎ
'STARTERS > TIL' 카테고리의 다른 글
[TIL] 15일차 TIL(20230224) - 디자인 씽킹 2일차 (1) | 2023.02.24 |
---|---|
[TIL] 14일차 TIL(20230223) - 디자인 씽킹 1일차 (1) | 2023.02.23 |
[TIL] 12일차 TIL(20230221) - 데이터 전처리, 시각화, dplyr (1) | 2023.02.21 |
[TIL] 11일차 TIL(20230220) - R 기초 (0) | 2023.02.20 |
[TIL] 10일차 TIL(20230217) - RANK, ROLL UP, 공공데이터를 이용한 SQL 실습 (0) | 2023.02.19 |