1. 액셀,R로 데이터 과학 맛보기(22.04.06)
오늘은 액셀과 R을 이용하여 데이터를 잠깐 다뤄보도록 하겠다.
위 링크에서 실습에서 사용되는 전체 파일을 다운받는다.
실습은 데이터를 데이터 테이블 형태로 만들고, 피벗테이블로 변화한뒤, 통계/시각화까지 해볼 것이다.
[EXCEL]
1. mtcars.txt 파일을 열고 안의 텍스트를 복사하여 액셀에 붙여넣는다.
2. 액셀에 붙여놓은 후에 ctrl키를 누럴서 텍스트 마법사로 들어가 기본설정 그대로 마침을 누르면 텍스트들이 정리돼서
액셀에 들어갈 것이다.
- 데이터를 전체 선택한 뒤 [표 서식]에서 표로 만들어준다.
다음으로 데이터를 정제해 볼 것이다. 우선 A열에 자동차의 제조사+모델명이 들어가 있는데 이것을 제조사만 뽑아서 표시할 것이다.
4. 새로운 열을 추가한뒤 이름을 지정해주고, 셀에 아래 코드를 입력해준다.
=IFERROR(LEFT(A2,FIND(" ",A2)-1),"")
우선 IFERROR은 에러가 안나면 앞의 인자값 LEFT(A2,FIND(" ",A2)-1)을 출력하고 에러가 나면 ""을 넣게 된다.
FIND(" ",A2)는 A2셀에서 "" 공백의 위치를 찾는 것이다. A2가 제조사(공백)모델명으로 이루어졌기 때문에 공백을 찾은 것이다. 다음으로 LEFT(A2,X)는 A2의 왼쪽에서부터 X번째까지를 가져오는 것이다. 즉 A2셀의 제조사(공백)모델명에서 제조사까지만 가져오는 것이 된다. 여기까지 하면 새로운 열이 완성됐다.
다음은 WT 열을 다뤄보겠다.
우선 WT열 전체를 선택해주고 [조건부 서식]메뉴에서 적절한 서식을 골라 적용해준다.
- 조건부 서식에서 색조를 선택하면 규칙에 맞게 색상이 자동으로 채워진다. DEFAULT는 숫자가 높을수록 붉어지는 것이다.
이번엔 수치형 변수 간의 관계를 시각화 해볼 것인데, 스케터플롯을 사용할 것이다.
- 시각화 할 두 수치형 변수 열을 선택해주고 [삽입] 메뉴에서 분산형을 선택해준다. 그러면 두 변수간의 관계가 스캐터플롯으로 시각화 될 것이다.
이제 데이터를 집계할 것이다, 액셀의 피벗테이블은 데이터에 다양한 기준과 연산을 적용하여 집계하는 기능이다. 우리는 기어와 실린더의 갯수에 따른 연비에 대한 분석을 해보고자 한다.
7. 데이터를 선택하고 [삽입/피벗테이블]을 선택한다.
8. 오른쪽의 피벗테이블 필드창에서 행,열을 기어,실린더 셀로 정해주고 결과값을 연비(mpg)로 설정해준다.
default는 값을 단순합으로 측정하는데 바꾸고자하면 피벗테이블의 값필드설정에서 집계방법을 바꾸면 된다.
우리가 만든 피벗테이블을 바탕으로 한 그래프를 그려보자
9.피벗에티블을 선택하고 [삽입/세로 막대형]메뉴에서 2차원 세로막대형을 선택해준다.
방금 한 방법을 토대로 제조사별 연비와 가속성능의 평균을 구하려면 그냥 행속성에 제조사를 선택해주고, 값속성에는 연비와 가속성능을 선택해준뒤 집계방법을 평균으로 설정해주고 그래프를 그리면된다.
[R]
다음으로 R을 이용해서 분석을 진행할 것이다. R설치는 예전에 어려움을 겪었던 적이 있어서 싹 다밀고 아래 동영상을 보면서 다시 설치했다.
[데이터 살펴보기]
1. 우선 work directory를 아까 다운받은 자료가 있는 폴더로 설정해준다. 작업폴더는 session탭에서 설정할 수 있다,.
2. source함수를 통해 라이브러리를 불러온다. 그리고 자주 사용하는 패키지들을 미리 설치해준다.
source('dbook.R')
# laod.packages는 dbook.R에 정의되어있는 함수다.
load.packages(c("stringr",'ggplot2','dplyr','knitr'))
우리가 사용할 mtcars가 R에 기본으로 내장된 데이터여서 그냥 mtcars를 치면 불러올 수 있다.
3. summary()함수를 이용하면 데이터에 대한 요약된 정보를 볼 수 있다.
4. 기본 내장 데이터 mtcars를 따로 파일로 저장하고 불러와볼 것이다.
write.table(mtcars,"mtcars_new.txt")
cars=read.table("mtcars_new.txt",header=T)
cars
write.table()로 파일을 저장하고, read.table()로 mtcars데이터 파일을 cars라는 이름으로 불러왔다. 이제는 cars를 출력하면 데이터가 나오게 된다. read.table()의 header이라는 옵션은 데이터의 맨 첫줄을 속성목록으로 지정하는 것이다.
5.데이터프레임으로 된 형태의 r의 데이터를 한 눈에 보자.
head(cars)
이처럼 head의 default는 6개이고 ()안에 n을 넣어주면 원하는 숫자만큼의 데이터가 위에서부터 출력된다.
마찬가지로 tail()함수를 실행하면 밑에서부터 데이터를 불러온다.
6. 데이터의 행과 열을 확인해보자.
rownames(cars)
colnames(cars)
7. 데이터에 접근하기 위해 데이터 속성을 선택해보자.
cars$mpg
[데이터준비하기]
1. 기존 속성들을 이용해서 새로우 속성을 만들어보자.
cars$model=rownames(cars)
rownames(cars)=NULL
cars$model
model이라는 변수에 cars의 row 즉 차들의 제조사이름,모델명을 담아준다.
2. 액셀에서 한 것 과 동일하게 제조사명을 가져올 것이다.
cars$marker=word(cars$model,1)
head(cars)
우선 word(a,b)함수는 맨처음에 설치한 stringr 라이브러리의 함수인데 a에서 b번째 글짜를 가져와준다. 이후 head(cars)를 출력해보면 위에서 만든 model과 marker이라는 새 속성이 추가된 것을 확인할 수 있다.
[데이터 가공하기]
데이터가공에는 필터링, 셀렉션, 집계, 정렬 등을 말하는데, dplr이라는 라이브버리에 모두 포함되어 있다.
1. 데이터에 필요한 행과 열을 선택해보자.
cars.small.narrow =cars %>% filter(cyl==4) %>% select(marker,model,mpg,cyl)
우선 %>%는 기본 연산들을 연결하는 기호이다. 즉 and의 역할을 한다고 생각하면 된다. 우선 filter()함수를 통해서 cyl=4인 데이터만 남기고, select를 통해 그 데이터들 중 marker,model,mpg,cyl속성을 가져온다.
다음으로는 데이터 집계를 해볼 것이다.
2. 집계를 위한 기준속성을 선택하고 계산할 통계값을 적어준다. 우리는 제조사별로 집계한 뒤 연비의 평균을 구해볼 것이다.
markers=cars %>% group_by(marker) %>% summarize(marker.mpg=mean(mpg))
head(markers)
group_by()함수를 통해 marker로 묶어주고, marker.mpg를 mean()함수를 통해 mpg의 평균값으로 할당해준다.
마지막으로 데이터를 특정 속성값을 기준으로 병합해볼 것이다. 우리는 원본데이터 cars와 제조사별 집계 데이터 markers를 제조사명을 기준으로 병합 할 것이다.
3.
cars.markers=merge(cars,markers,by="marker")
head(cars.markers)
merge()함수를 이용해서 cars데이터와 marker데이터를 marker이라는 속성을 기준으로 병합한다.
결과를 보면 아래와 같이 cars.marker라는 데이터에 marker.mpg 속성이 속성이 추가된 것을 볼 수 있다.
[데이터 분석하기]
1. 두 속성간의 분포를 확인해보자. table()함수를 통해 두 속성의 분포를 확인할 수 있다.
table(cars$gear,cars$cyl)
2. 수치형 속성들이므로 분포를 보기위해서 히스토그램을 사용해볼 것이다. 우리는 mpg속성값을 시각화 하였다.
hist(cars$mpg)
아래 결과를 통해 15~20과 20~25사이에 가장 많은 속성값이 존재한다는 것을 알 수 있다.
3. 두 속성 wt와 mpg의 관계를 스캐터플롯을 통해서 시각화 하였다.
plot(cars$wt,cars$mpg)
4. 두 속성이 아닌 여러속성의 관계를 살펴보기 위해서는 ggplot2 라이브러리 안의 함수를 이용해야 한다.
wt와 mpg의 속성의 관계를 x,y축에 표시하고 cyl 값을 모양으로 표시하 것이다.
qplot(wt,mpg,data=cars,shape=factor(cyl))
qplot(a,b,data=c,shape=d)에서 c라는 데이터에서 a,b라는 속성값을 d라는 형태로 출력하는데 factor()함수는 숫자를 카테고리형으로 바꿔준다. cars 데이터에는 cyl값이 4,6,8이 있어서 세가지 모양으로 바뀌었다. 아래 스캐터플롯을 통해서 연비가 실린더 갯수와 무게와 상관관계가 높아보인다는 것을 알 수 있다.(실린더가 낮고, 무게가 적을수록 연비가 높기 때문에)
느낀점
평소 데이터분석을 파이썬만을 이용해서 그런지 너무 재미없었다...
액셀은 써보지도 않았고 r은 잠깐 써봤었는데 c, python,java를 다하고 하다보니까 기본함수 등도 다 다르고 해서 너무 짜증나고 못해먹겠다..후
'데이터분석실습 > 헬로 데이터 과학' 카테고리의 다른 글
헬로 데이터 과학 Day 5 (0) | 2023.10.26 |
---|---|
헬로 데이터 과학 Day 4 (0) | 2023.10.26 |
헬로 데이터 과학 Day 3 (0) | 2023.10.26 |
헬로 데이터 과학 Day 2 (0) | 2023.10.26 |
헬로 데이터 과학 Day 0 (0) | 2023.10.26 |