R입문(과제 풀이 과정-1)

in kufmba •  7 years ago  (edited)

업무를 하다보면 대량의 데이터를 정리해야할 경우가 가끔 있습니다.

예를 들자면...

  1. 고객의 카드 사용 데이터를 이용하여 연령대, 지역, 업종 등의 최빈도/상관관계
  2. 은행 각 지점의 Data를 분석하여 각 지역 고객의 업종분포, 대출 규모/빈도, 상관관계
  3. 핸드폰의 모델/가격/기능에 따른 사용패턴, 국가별 전략모델 선정 등..

데이터의 해석을 위해서는 유의미한 결과값의 도출이 필요하고, 그 결과값 도출을 위해서
대부분 엑셀을 이용합니다.

다만 통계를 전문으로 하는 분들께서는 통계 프로그램(SPSS, R, SAS 등..맞나요?)이
엑셀보다 좀 더 가볍고 사용이 편하다고 말씀하시고, 저 또한 데이터관련 업무를 하게 될 때는
통계프로그램을 하나는 돌릴 줄 아는 것 있냐는 질문을 종종듣습니다.
(아직까지 저는 숫자다루는데 있어서는 엑셀이 최애(最愛) 프로그램입니다.^^)

이렇게 당장 필요하진 않지만 알아두면 좋긴 하겠다는 생각을 하는데, R수업을 듣게 되었습니다.
휴먼인터페이스 측면에서는 엑셀이 아직 편하지만..
그래도 하나하나 배워가는 입장에서 과제 풀이를 통한 복습을 해봅니다.

먼저 행렬A를 만들어야 합니다.

x=c(6,2)
y=c(1,5)
a<-cbind(x,y)

다음, 행렬 B를 만들어 봅니다.

z=c(3,5)
w=c(1,4)
b<-cbind(z,w)

이제 A+B를 해봅니다.

a+b
x y
[1,] 9 2
[2,] 7 9

AB도 해봅니다. 행렬 AxB의 공식은 a%*%b 입니다.

a%*%b
z w
[1,] 23 10
[2,] 31 22

B의 역행렬도 구해봅니다. 역행렬 공식은 slove(대상)입니다.

solve(b)
[,1] [,2]
z 0.5714286 -0.1428571
w -0.7142857 0.4285714

화면에서는 다음과 같이 표현됩니다.


먼저 블랙보드에서 다운받은 Forbes.RData를 작업하기 원하는 디렉토리에 저장 후 더블클릭합니다.

(이런식이겠지요)
그리고 Forbes.RData가 어떤 내용인지 모르므로 먼저
ls() 명령문을 이용하여 [Forbes1995]라는 이름의 데이터셋이 있는 것을 확인합니다.
Forbes1995 안에 어떤 내용들이 있는지 확인이 필요하므로
summary(Forbes1995) 명령문으로 내용을 확인합니다.

그럼 먼저 변수 sales 의 평균과 표준편차, 그리고 샘플의 수를 구해봅니다.
(참고로, R_intro 파일의 P47, P19(평균=mean), P76(표준편차=sd), P66(length=개수)의 내용을 참조하였습니다)

Forbes1995데이터셋안의 sales 변수는 Forbes1995$sales이므로
이 데이터의 평균, 표준편차, 샘플의 수는 다음의 함수를 이용하여 구할 수 있습니다.

mean(Forbes1995$sales)
[1] 9.709003
sd(Forbes1995$sales)
[1] 18.02351
length(Forbes1995$sales)
[1] 1995

화면으로는 다음과 같이 나오네요

다음 sales, profits, assets, marketvalue 간의 상관행렬 (correlation matrix) 를 구하기 위해서는 Sales, profits, assets, marketvalue 변수들을 하나의 데이터로 묶습니다.

mydata<-Forbes1995[,c("sales","profits","assets","marketvalue")]

묶은 데이터의 상관행렬을 찾기위해 cor 함수를 사용합니다.

cor(mydata)
sales profits assets marketvalue
sales 1.0000000 0.4042672 0.4261359 0.6419901
profits 0.4042672 1.0000000 0.2243573 0.5472202
assets 0.4261359 0.2243573 1.0000000 0.4539952
marketvalue 0.6419901 0.5472202 0.4539952 1.0000000

화면으로는 다음과 같이 나오네요.

다음, 파이그래프를 이용한 나라(변수 country)의 분포 보이기
간단히..pie 명령어 쓰면 되네요.

pie(table(Forbes1995$country))

결과값(파이그래프)입니다.

다음, sales와 marketvalue 의 산점도 출력 (sales가 X축, marketvalue Y축)은 plot 명령어를 사용합니다.

plot(Forbes1995$sales,Forbes1995$marketvalue)


P109의 함수에서 abs_절대값함수를 적용했습니다.

dist=function(x,y){
d=sum(abs(x-y))
return(d)
}
x<-seq(1,9,by=2)
y<-seq(2,10,by=2)
dist(x,y)
[1] 5

화면에서는 이렇게 보여지네요.


먼저 이 자료의 내용 파악을 해봅니다.

ls()와 Summary 명령어를 통해 데이터 구조를 확인할 수 있습니다. 다만 앞 문제의 Forbes1995 자료와 달리 ~$ 명령어가 유효하지 않습니다.
EuStockMarkets$DAX를 입력하면 EuStockMarkets$DAX : $ operator is invalid for atomic vectors의 문장이 나오게 됩니다.
그래서 EuStockMarkets[,c("DAX")]를 이용하여 히스토그램을 그리고, xlab으로 x축 이름 표기, main으로 맨 위 "Daily Closing Prices"문구를 표기합니다.

hist(EuStockMarkets[,c("DAX")],xlab="DAX",main="Daily Closing Prices")


결과값은 다음과 같습니다.


이건 쉽습니다.
커브명령어에 코사인함수를 넣고 구간만 지정해주면 됩니다.
수업시간에 배웠던 abline를 넣어줍니다.


총 만나는 점은 4개네요.


이건...복기하는 입장에선 간단하지만 어떤 명령어를 적어야 할지 모르니 2시간 동안 검색해보면서 끙끙 머리 싸맸습니다.
저도 나중에 복습을 위해..시행착오의 과정을 그대로 적어보겠습니다.
curve 명령어를 새로 넣어봅니다. 그래프는 겹쳐지지 않습니다.

그래서 plot 명령어를 넣어봅니다. 호기롭게 red컬러와 type도 o로 추가합니다.
plot(sin,col="red",type="o")

(망했다!!!!라는 탄식이 나옵니다.)

그래프 함수를 뒤져보는 중 Points 함수는 겹쳐짐을 발견, 구문을 작성합니다.

x가 없대요. x부터 지정해야겠어요.
-5부터 5이죠. 시퀀스에 0.1간격으로 정해줍니다.
x=seq(from=-5,to=5,by=0.1)
다시 작성해봅니다.

결과값도 잘 나옵니다.

참고로..이건 점과 선으로 연결된 그래프네요.
과제는 점선이라고 했는데 점만 쓰려면 Type="b"입니다.

위의 둘중 편한대로 사용하시면 되겠네요.


마지막문제인데...간단하네요.

x=seq(1,100,by=2)
sum(x)
[1] 2500

화면은 다음과 같습니다.

R을 생전 처음 접하다보니 정말 기초적인 함수로만 과제를 풀이했습니다.
제가 나중에 복기용도(할 일이 있을지 모르지만)로 작성하였기에 제 의식의 흐름이 불편하셨다면 죄송합니다.

혹시나 다른 분들에게 조금이나마 도움이 된다면 여기까지 작성하는 1시간 반이 조금 더 가치있게 되겠네요.

감사합니다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!