[데이터마이닝] Data Manipulation

Zoe·2022년 3월 23일
0

DataMining

목록 보기
1/3
  • 과제 제출하는 법
  • R 돌리는 법
  • hist(rnorm(1000)) : 히스토그램
  • 스크립트 방식 : 파일에 쓰고 한 번에 돌림
  • 폴더 만들기(2022dm2) -> new file -> r script -> 백지나옴 -> # 과제 1: 표준정규분포 자료 생성 및 확인
  • x <- rnorm(100) : 표준 정규 분포 데이터 100개를 만들라
  • mean(x) : # x의 평균은 0에 가깝게 나오는지 확인
  • sd(x) : # x의 표준편차는 1에 가깝게 나오는지 확인
  • hist(x) : # 히스토그램이 종모양인지 확인
  • 프로그램 4줄
  • file save
  • Run : 현재 줄을 돌려라
  • 아니면 모두 복붙
  • #과제 2: 동전 100번 던지기 (100개의 B(1,p))
  • 앞면 이면 성공 뒷면 이면 실패
  • rbinom(100, 1, 1/2) : 100번 던져라
  • sum(x) : # 45 -> 45%
  • sum(x)/length(x) : 0.52
  • set.seed(1234) : 씨드값 고정하는 법
  • file -> new file -> R Markdown -> Document (title에 절대 한글 쓰지 말기) HW00 -> HTML -> 켜지면 --- 밑으로 다 지우기 -> ```친다 -> {r} -> 프로그래밍 -> knit
  • html 은 바이러스에 쉽게 감염됨
  • open in browser -> 오른쪽 클릭 -> 인쇄 -> pdf로 저장
  • run current chunk : output이 밑에 나옴
  • restart R and all chunks
  • ## 문제3 : 표와 수식
  • R에서 많이 쓰이는 함수
  • 표본 평균, 분산
  • $ : 인라인으로 들어옴
  • $$ : 가운데 정렬

2022.03.16

  • 데이터를 구할 때 warm up start -> legal clearance(법적으로 문제가 없는지, 개인 정보 처리를 잘 했는지) 법적인 문제가 있으면 그만두기 -> Access to data -> do you understand the data(자기가 잘 아는 데이터) -> data is clean(데이터 정제) -> question is clear(목적이 명확하냐)
  • 위 과정 이후 분석 시작
  • sklearn
  • 통계학이든 데이터 사이언스든 요리책과 비슷
  • 요리책 : 된장, 재료, 순서
  • 분석 방법을 많이 알아야 함
  • classification(분류분석) / regression(회귀분석) : 지도 학습(supervised learning), supervisor가 있는 것, 종속 변수가 있는 경우
  • clustering(군집분석) / dimensionality reduction(차원축소) : 비지도 학습(unsupervised learning), Y(맞추고 싶은 변수, 종속 변수)가 없는 경우
  • 80kg, B형, 남자 : 몇 cm일까? -> 맞추고 싶은 변수가 있음 = 지도 학습
  • 80kg, B형, 180cm : 남자일까 여자일까? -> 지도학습임. 그 사람의 성별을 맞추라고 했으므로
  • 다음 달 매출을 맞춰라 : 지도학습
  • Y가 있냐 없냐 가 중요
  • 연속형, 이산형(명목형, 범주형)
  • 범주형(이산형)을 맞추려고 하면 왼쪽(classification)으로 가고 아니면 오른쪽(regression)으로 간다 (category)
  • 회귀분석 : 종속 변수(ht) ~ 독립 변수(ht + bld)
  • 분류분석 : gnd{F, M} ~ wt + bld
  • 회귀분석 : SVR, Lasso
  • 분류분석 : SVR, ...
  • 비지도 학습 : 내가 맞추려고 하는 y가 없는 것, 개인정보 x만 있음 -> 뭘 할 수 있음?
  • x, n, p : n명에 대한 p개의 개인 정보
  • 변수를 분석(요약)하는 방법 vs 관측치를 분석(요약)하는 방법
  • 과목들을 묶기 시작 -> 변수 요약 -> 차원축소
  • 변수 요약하는 방법 : dimensionality reduction(차원축소)
  • mbti 맞추기 : 지도학습 -> 분류분석
  • 사진 압축 : 사람이 중요하기 때문에 끄트머리는 잘라냄 -> 차원축소(손실있는 압축)
  • 내가 살아보니 세상에는 3종류의 사람이 있더라 -> 변수만 가지고 사람을 나누는 것 -> 군집분석
  • 자리 앉는 것을 보고 학점 예측하기 -> 소수 그룹 군집화 -> 군집분석
  • 개념을 집어넣고 자동으로 나눈다 -> 특징에 따라 사람 그룹이 나뉨 -> 군집분석
  • 문서 분류 : 군집분석, 글에 따라 긍정적인 것 부정적인 것 나뉨
  • 군집분석 : 코에 걸면 코걸이 귀에 걸면 귀걸이, 평가가 모호함, 내가 말하기 나름, 예술에 가까운 경지

✅ 데이터 전처리 하는 방법

1️⃣ pipe

  • pipe(%>%)
  • z <- f(x, y) : f(함수이름), x(인수1), y(인수2)
  • z <- x %>% f(y)
  • pipe를 쓰는 이유 : tidyverse는 안에 함수가 많음, 첫번째 인수가 90% 데이터프레임, 결과값도 거의 90% 데이터프레임
  • DataFrame %>% ???( ) %>% ???( )
  • f(df, a, b)
  • g(df, c)
  • h(df, d, e)
  • tmp <- f(df, a=1, b=1)
  • tmp2 <- g(tmp, c=0)
  • result <- h(tmp2, d=1, e=0)
  • 위 과정은 옛날 방식
  • h(g(f(df, a=1, b=1), c=0), d=1, e=0)
  • 파이프로 바꾸기: df %>% f(a=1, b=1) %>% g(c=0) %>% h(d=1, e=0)
  • DF %>% sample_n(200) %>% vis_miss() : 내 데이터 셋에서 200개 뽑은 다음 결측치를 보여줘
  • DF %>% sample_n(200) %>% miss_var_summary() : 내 데이터 셋에서 200개 뽑은 다음 결측치의 요약본을 보여달라
  • DF %>% group_by(gnd) %>% summarize_at(c('ht','wt'), list(mn=mean, sd=sd), na.rm=TRUE)

2️⃣ dplyr

  • 자료를 처리하는 패키지
  • pipes : x %>% f(y) == f(x, y)
  • 요약 통계 : summarise
  • 그룹별 : group_by
  • 관측치 처리 : filter(관측치를 선택할 때 쓰는 것 ex. 여자만 가져오기/ WHERE와 같음)
  • 변수를 처리 : select(변수 선택, 키와 체중을 가져와라)
  • arrange(정렬)
  • mutate(데이터 셋에 변수를 추가하거나 변경함)
  • combine tables : 표들 간 Join
  • left join, right join, inner join

3️⃣ ggplot2

Data Manipulation

✅ R 자료처리

1️⃣ 패키지 로딩

  • rmd 식
  • library(tidyverse)
  • --Conflicts-- : 함수 이름이 충돌, 어디 있는 패키지의 함수를 써야 하나 경고문
  • dplyr::filter
  • dplyr::select
  • sessionInfo()

2️⃣ 읽기

  • 데이터 읽는 것 : read.csv, read_csv -> 구분 어떻게?

  • R base : data.frame -> read.csv

  • tidyverse : tibble -> read_csv

  • tidyverse의 결과는 전부 tibble, 옛날 방식의 결과는 data.frame

  • 일단 데이터를 주면 read csv

  • 데이터를 읽었다고 침

  • data.frame -> DF

  • head(DF) -> 앞의 6개만 보여줌

  • nm, sx, bd, ht, wt

  • lable : 변수의 유형

  • chr : 문자

  • dbl : double 실수형

  • dim(DF) : n = 8, p = 5

  • DF$nm : 이름 다 뽑아냄

  • colnames(DF) : 변수이름 다 뽑아냄

3️⃣ 복사

  • DF2 <- DF

4️⃣ 변수이름 변경

  • DF <- rename(DF, gnd=sx, bld=bd)
  • DF <- DF %>% dplyr::rename(gnd=sx, bld=bd) : pipe쓴 것, 요즘 쓰는 방식

5️⃣ 변수유형 변경 (astype(유형))

  • 문자로 되어 있는 것을 이산형으로 바꿔야 함
  • 이산형 변환 : factor
  • mutate : 데이터셋에 추가하거나 변경하는 일
  • mutate(추가, 변경)
  • DF <- DF %>% mutate(gnd=factor(gnd), bld=factor(bld))
  • str(DF)
  • 값을 쫙 읽고 수준이 뭔지 봄. 알파벳 순으로 sort {F, M}. F=1, M=2로 바꿈// 2levels
  • 혈액형 : 값을 쫙 읽고 수준{A, AB, B, O} //4 levels

6️⃣ 변수 계산

  • mutate : 변수를 변경하거나 기존에 있는 변수로 새로운 변수를 계산
  • BMI : 키하고 체중으로 BMI계산하여 데이터셋에 추가할 예정
  • DF <- DF %>% mutate(bmi=round(wt/(ht/100)^2, 1)

7️⃣ 다른 변수로 코딩 변환

  • ifelse(조건, T일 때 처리, F일 때 처리)

  • bmi 표가 있음

  • 새로 만든 bmi로 판정(obesity)이라는 새로운 변수 만들 것임

  • obesity : 문자 -> factor로 바꿔야 함

  • 수준 재지정 : DF$obesity <- factor(DF$obesity, levels=c('저체중', '정상', '과체중', '비만'))

  • 수치벡터로 변환 : as.numeric(DF$obesity)

  • 최근 방식???

  • isobese : 비만 가변수, 비만(bmi>=25)이면 'Y', 아니면 'N'

  • DF <- DF %>% mutate(isobese = factor(ifelse(bmi>=25, 'Y', 'N')))

8️⃣ 기술 통계

  • 데이터 다 읽고 나면 탐색 해야함

  • 방법이 많음

  • DF$ht : 키를 보여 달라. 벡터로 나옴

  • DF[.'ht'] : tibble로 return

  • summary(DF[,'ht']) :

  • dplyr::summarize(DF, n=n(), ht_mean=mean(ht), ht_sd=sd(ht), ht_var(ht))

  • mean(평균), sd(표준편차), var(분산)

  • 조회 : 질의, 쿼리, old(DF[DF$nm=='Km', 'ht']

  • DF[조건(행), 조건(열)] : T인 것만 추출

  • filter(행), select(열)

  • DF <- filter(DF, 조건1, 조건2, ...)

  • DF[DF$nm %in% c('Km', 'Pk'), 'ht']

  • summarize_at : 특정 변수

  • summarize_if : 조건에 맞는 변수

9️⃣ 분포 시각화

  • 분포를 그림으로 그림
  • base vs ggplot
  • 여러분들 편한 대로
  • hist(DF$ht)
  • ggplot(DF, aes(x=ht)) + geom_histogram()
  • ggplot(DF, aes(x=,y=)) col=, shape +
  • geom_???(aes()) +
  • bins=30 : 30개로 잘라달라
  • y=density : 비율로 쌓기 -> 확률밀도함수
  • geom_density(aes(x=ht)) : 부드러운 히스토그램
  • 상자 그림 : boxplot(DF$ht)

🔟 기술통계 groupby

  • 남녀별 평균 내는 것이 나음
  • DF %>%
    group_by(gnd) %>%
    summarize_at(c('ht'), list(ht_n=length, ht_mean=mean, ht_sd=sd))

1️⃣1️⃣ 분포시각화 groupby

  • 그림을 그릴 때도 성별로 따로 그리고 하면 구별이 잘 됨

  • 데이터셋을 쪼개서 여자 그림 남자그림 따로 그리고 합침

  • 반면 ggplot을 쓰면 데이터셋을 안 쪼개고 자기가 한 번에 해줌

  • ggplot(DF) + geom_histogram(aes(x=ht), fill='white', color='black') + facet_grid(gnd~. )

  • boxplot(ht~gnd, data=DF) : x=ht, y=gnd

  • 산점도 : ggplot(DF, aes(x=wt, y=ht, col=gnd, shape=gnd)) +
    geom_point(size=3) -> 색깔도 구별하고 모양도 구별함

1️⃣2️⃣ 빈도표와 교차표

  • 성별의 빈도표

  • 성별 혈액형 교차표

  • table()

  • xtabs()

  • gndfreq <- table(DF$gnd)

  • 교차표 : 행합계, 열합계, 총합계 -> 마진테이블

  • margin.table(gndfreq)

  • prop.table(gndfreq) -> 빈도가 아니라 비율표

  • barplot(gndfreq)

  • xtabs(X ~ 행변수 + 열변수 + 층변수, ... data= )

  • 교차표 : 행변수, 열변수

  • gbtbl <- table(DFgnd,DFgnd, DFbld)

  • gbtbl <- xtabs(~fnd+bld, data=DF)

  • margin=1 (행) margin=2(열)

  • prop.table

  • 과제 해보기

  • 데이터분석은 수학문제처럼 답이 딱 정해져있는 것이 아님

  • 분석가마다 다름

profile
iOS 개발자😺

0개의 댓글