본문 바로가기

코드이야기/R

(12)
[R프로그래밍] R을 이용해 바차트(막대그래프)와 히스토그램(도수분포표) 정복하기 "히스토그램과 바차트의 차이는 무엇인가?", 이 질문에 바로 대답할 수 있으신가요? 히스토그램은 우리말로 하면 도수분포표입니다. 반면, 바차트는 우리말로 막대그래프입니다. 이름만 다를 뿐 그게 그거 아닌가 할 수도 있겠지만 그 쓰임에는 분명한 차이가 있습니다. 히스토그램(이하 도수분포표)은 분포(Distribution)을 표현하는데 사용하는 반면 바차트(이하 막대그래프)는 데이터를 분류(Category)하는데 사용됩니다. 아래 그림을 살펴보시죠. 올해 책을 30권 읽었다고 가정해 보겠습니다. 이 읽은 책에 대한 데이터를 정리하는 방법은 여러가지가 있을 것입니다. 소설, 인문학, 경영서, IT, 예술 등과 같이 장르별로 읽은 책의 권수를 정리 할 수도 있고, 책의 가격대를 비교해 볼 수도 있습니다. 전자는..
[R프로그래밍] 몬테카를로 시뮬레이션으로 원주율(π) 구하기 몬테카를로 시뮬레이션이란 난수를 이용한 시뮬레이션을 여러 번 반복하여 문제의 근사해를 구하는 방법을 말합니다. 수소폭탄의 개발자인 스타니스와프 울람이라고 하는 폴란드계 미국인 과학자에 의해 모나코의 유명한 도박도시 몬테카를로의 이름을 본따 만들어진 것입니다. 수학이나 물리학에 주로 사용되며 엔리코 페르미가 중성자의 특성을 연구하기 위해 이 방법을 사용하기도 하였습니다. 지난 포스팅에서 시뮬레이션의 기본인 난수생성방법을 알아보았습니다. 여기서는 시뮬레이션이 정의와 프로세스, 그리고 R을 이용해 몬테카를로 시뮬레이션을 R로 구현하는 방법에 대해 이야기 하겠습니다. 시뮬레이션의 정의와 프로세스 위키피디아에는 '시뮬레이션은 실제로 실행하기 어려운 실험을 간단히 행하는 모의실험을 뜻한다'라고 정의되어 있습니다. ..
[R프로그래밍] 시뮬레이션의 기본 - 난수생성 동전이 하나 있다고 생각해 보겠습니다. 우리는 동전을 던지면 앞면과 뒷면이 나올 확률이 1/2이라는 것을 알고 있습니다. 그런데 앞면이 계속 나올 때도 있고 뒷면이 계속 나올 때도 있습니다. 동전을 무수히 많이 던지면 앞면과 뒷면이 나오는 횟수는 1/2에 근접해 갈 것입니다. 사진: glennharper 실제로 수없이 많이 동전을 던져 결과를 기록하는 것은 어려울지 모르지만 컴퓨터를 이용하면 쉽게 풀 수 있습니다. 이렇게 어떠한 현상이나 사건에 대한 모형을 만들어 가상으로 수행함으로써 실제 상황에 대한 결과를 예측하는 것을 시뮬레이션이라고 합니다. 동전을 던졌을 때 앞면이 나오는 것을 1, 뒷면이 나오는 것을 0라고 가정하겠습니다. 그럼 동전을 여러번 던지면 아래와 같은 수열을 얻을 수 있습니다. 1 0..
[R프로그래밍] 한국인의 평균키와 몸무게로 회귀분석하기 키가 큰 부모를 둔 자녀들은 키가 클 확률이 높을 것입니다. 그렇다면 세대가 거듭될 수록 키는 무한히 커질까요? 그렇지는 않습니다. 19세기 영국의 화학자인 프랜스시 골턴(Francis Galton, 1822~1911)은 키가 큰 부모들이 낳은 자식들이 키가 점점 더 커지지 않고, 다시 평균으로 회귀한다는 경향을 보고 '회귀(regression)'라는 개념을 사용했습니다. 통계학에서는 '평균으로의 회귀(regression toward mean)'라고 부릅니다. 회귀분석의 개념과 유형 회귀분석은 하나 또는 그 이상의 독립변수(설명변수, 예측변수, 통제변수등으로 불리기도 함)가 한 단위 변할 때, 종속변수에 미치는 영향력을 예측할 때 주로 사용하는 통계분석 기법입니다. 독립변수는 입력 값이나 원인을 말하며,..
[R프로그래밍] 벡터의 의미와 벡터 관련 함수 물리학에서는 양을 스칼라와 벡터로 구분합니다. 스칼라가 크기만 가지고 있는 양인데 반해 벡터는 크기와 방향을 모두 가지고 있는 양을 의미합니다. R에서 벡터는 이와는 약간 다릅니다. R에서의 벡터의 의미, 특징, 그리고 벡터와 관련한 함수들에 대해 이야기해 보겠습니다. 벡터의 의의와 특징R에서의 벡터는 단순한 자료형이 아닙니다. R은 여러 값을 집합으로 처리하는데 막강한 기능을 발휘합니다. 여러 값을 하나로 처리하기 위해 벡터를 사용합니다. 벡터는 C에서 사용하는 배열과 유사합니다. 벡터는 '값들의 집합'이라고 생각하면 됩니다. 실제로 R에서는 스칼라인 하나의 숫자도 하나의 원소를 가진 벡터로 취급합니다. 어떤 벡터 안의 각 수치를 요소라고 부릅니다. R에서 벡터의 특징은 아래와 같습니다. 1. 벡터는 ..
[R프로그래밍] 서울의 기온데이터로 박스플롯 그리기 지난 포스팅에서 Beautiful Soup Library를 활용하여 작년 서울의 기온데이터를 수집했습니다. 오늘은 이 데이터를 가지고 월별로 기온이 어떻게 변했는지 그래프를 그려보겠습니다. 그래프를 그리는 방법은 다양합니다. 엑셀의 차트, 파이썬의 matplotlib 라이브러리, R의 ggplot2 패키지를 활용할 수 있습니다. 저는 R이 가장 쉽고, 편하고, 다양한 결과물을 만들어 낼 수 있어 즐겨 사용하는 편입니다. 오늘 그려볼 그래프는 R의 ggplot2를 이용해 월별 기온변화에 대한 박스플롯 그리기입니다. 데이터 정비하기 우리가 사용할 데이터는 Weather Underground에서 수집한 작년 한 해 서울의 일별 평균, 최고, 최저기온입니다. 그래프를 그리기 전에 먼저 데이터를 살펴보도록 하겠습..
[R프로그래밍] 순환문을 이용해 콜라츠 추측 자동화하기 지난 포스팅에서 종이와 연필로 생각을 그려보는 것이 프로그래밍에 도움이 된다는 말과 함께 조건문과 함수를 활용해 콜라츠 추측을 계산했습니다. 오늘은 순환문을 사용해서 이 콜라츠 추측을 자동으로 계산하고 몇 번만에 임의의 정수가 1이 되었는지 출력하는 프로그램을 작성해 보겠습니다. 읽기 전에 추천 한 번! 블로거에겐 큰 힘입니다 순환문은 크게 2가지로 나눕니다. for문과 while문 입니다. for문은 반복하려는 횟수를 미리 알고있는 경우에 사용합니다. 반면, while문은 반복하려는 횟수는 알수 없지만 특정 조건을 만족하는 동안 어떤 명령을 반복해서 처리할 필요가 있을 때 사용합니다. R프로그래밍에서 for문과 while문의 기본문법은 아래와 같습니다. [for 문] for (반복할 변수 in 반복범위..
[R프로그래밍] 조건문을 이용하여 콜라츠 추측 계산하기 프로그래밍이란 기본적으로 내 생각을 컴퓨터가 이해할 수 있도록 입력하고 동작하게 만드는 일입니다. 프로그래밍을 하기 위해서는 생각이 논리적이로 명확하게 정리되어 있어야 합니다. '생각의 흐름은 명쾌한가?', '누락되거나 중복되는 내용은 없는가?', '이 프로그램은 결과를 올바르게 계산해 낼 것인가?'에 대해서 먼저 종이와 연필로 그려보는 것이 프로그래밍에 큰 도움이 됩니다. 생각이 명료하면 프로그래밍이 즐겁습니다. 프로그래밍 언어를 통해 명령을 내리기만 하면 되기 때문입니다. 대부분의 프로그래밍 언어에서 조건문과 반복문을 사용할 수 있습니다. 조건문은 조건이 '참(True)'일 때 처리하는 명령과 '거짓(False)'일 때 처리하는 명령을 달리 가져갑니다. 반복문은 일정 범위 또는 특정한 조건을 만족하는..