여행을 다니는 돈이 아깝다고 말한 친구가 갑자기 생각이 났고, 가만히 생각해보니 매년 해외로 떠난 것 같다. 야밤에 공부하다 말고 뭐하는 건지는 모르겠지만 그냥 작성해보고 싶었다.

2013년. 호기심의 시작
무료한 군 상병시절. TV로 우연히 보게 된 헝가리 부다페스트 야경이 시작이었던 것 같다. 이국적인 건물과 화려한 조명들... 무작정 저곳에 가봐야겠다는 생각이 들었다. (이때만 해도 주변에 해외여행을 다녀온 사람은 없었던 것 같은데...?) 유럽여행에 필요한 경비를 모으기 위해 전문하사 6개월 연장과 전역 후에는 투잡을 뛰며 돈을 모았고, 1년 동안 천만원이라는 자금을 마련했다. 돈을 모으기 위해 군대 연장이라는 독특한 선택?을 했지만 동기들과 다 함께 전문하사를 지원해서(사실 내가 꼬드꼇지만) 나름 즐거운 생활이었던 것 같다.

2014년. 나 홀로 유럽
모든 여행의 시작은 비행기 발권 아니겠는가? 되돌릴 수 없는 상황을 만들어두고 계획을 세우기 시작했다. 3개월 전부터 유랑 카페, 여행사 패키지 등을 비교 분석해보며 나만의 여행 일정을 계획했고, 6월 한 달간 유럽여행을 다녀왔다. 현지의 다양한 문화 속에서 그들만의 세계를 느끼고, 여행에서 처음 만난 사람들과 밤새도록 이야기를 나누며 마시는 맥주 등 모든 것이 새로웠고 신기한 경험이었다. 즐거운 시간은 어찌 이리도 빨리 가는지, 꿈에서 빠져나올 때 쯤 나는 복학생 신분으로 학교로 돌아갔다. 돈이 없어서 시작한 카페 아르바이트. 파스쿠찌와의 인연도 이때부터 인 것 같다.

2015년. 꿩 대신 닭
현실 속에 바삐 살면서도 해외여행에 대한 그리움은 계속 남아있었던 것 같다. 때마침 학교에서는 전공심화 해외체험 프로그램이 진행되고 있었고 동아리 사람들과 미국을 목표로 준비했다. 하지만 결론은 처참하게 떨어졌지(이래서 미국은 별로 가고 싶지 않는건가?) 꿩 대신 닭이라고 프로그램을 같이 준비하던 사람들과 카페에서 무작정 결정한 보라카이 여행. 
3대 해변이라 불리는 화이트 비치, 커플들이 가득한 휴양지 보라카이를 남자 4명이서 다녀왔다. 저희 왜 보라카이로 간거죠...? 유럽도 그렇고 보라카이도 그렇고 여행에서 하는 액티비티는 항상 꿀잼이다.

2016년. 재도전
작년의 아쉬움 때문인가? 또 다시 전공심화 해외체험 프로그램에 도전하게 된다. 교수님의 노련한 첨삭 덕분인지 프로그램에 당첨되었고 우리는 인도로 떠나게 되었다. (이때 인도 누가 가자고 했니-_-?) 프로그램에 대해 간단히 설명하자면 사전에 관련 전공 회사, 대학 컨텍을 통해 탐방을 기획해야하고, 교수님 동행, 동기들, 후배들과 함께 팀으로 진행된다. 연인, 친구들과 여행을 가도 싸우기 마련인데 저 조합으로 그것도 인도를 떠날 생각을 했다니 두 번은 못할 것 같다. 팀장 역할을 맡게 되어서 걱정도 많았는데 교수님도 그렇고, 아이들도 모두 잘 따라 와줘서 별탈없이 즐겁게 다녀온 것 같다. 그러고 친구들과 세부도 다녀왔지(얘들아 싸움은 부질없는거야... 흑흑)

2017년. 여전히 꿈을 꾸고 삽니다.
대학교 졸업하기 전에 갑작스럽게 인턴생활을 시작했다. 인턴 얘기가 나오고 다음 주에 바로 출근이라니. 하지만 졸업과 동시에 인턴생활도 끝이 났고, 대학교 4학년 말에 고생한 나에 대한 위로인지, 회사 생활에 대한 해방감인지 홧김에 남미로 떠나는 비행기표를 질렀다. 역시 여행은 즉흥이지. 인턴이 끝나고 3주도 지나지 않아 아무런 준비도 없이 남미로 떠났고 걱정과는 다르게 좋은 사람들과 가장 행복한 여행을 다녀온 것 같다. 여행에서 이렇게까지 친해질 수 있구나 라는 걸 깨달은 여행이라고 해야 되나? 즐거운 시간은 항상 순식간에 사라지고 나는 다시 취업준비를 하는 현실에 사는 중이다. 아마 한동안은 이런 장기여행은 힘들 것 같다. 또 다시 이런 여행을 계획한다면 여자친구가 나의 목숨을 노리겠지ㅎㅎㅎ 그렇지만 언젠가는 다시 떠날 테고 다음 여행지는 아프리카가 되지 않을까 하는 생각을 한다.

나는 그 친구와는 다르게 물건보다 경험에 돈을 투자한 것 뿐이고 이것을 후회하지 않는다. 대자연이 주는 힐링(저는 도시보다 자연이 좋습니다. 스위스가 가고싶군요), 숨 막히는 현실에서 벗어난 온전한 나만의 시간, 추억을 공유하는 소중한 사람들. 그 어떤 것과도 바꿀 수 없는 경험이라고 생각한다.

두서없이 그냥 막 쓴 거라 내용만 보시길

에휴 다시 공부해야지


'Daily life' 카테고리의 다른 글

2017 하반기 회고  (0) 2017.11.30
넋두리 01  (0) 2017.08.02

남미 여행 다녀온지 5개월이 지난 것 같다. (_._)


Fastcampus에서 공부를 시작한지 3주차에 접어들었다.


2주 동안 한 학기 분량의 통계를 공부하는건 힘들다....


친구들과 국내여행은 매번 못 가는 것 같다. 언제쯤 갈 수 있으려나?

'Daily life' 카테고리의 다른 글

2017 하반기 회고  (0) 2017.11.30
넋두리 02  (0) 2017.08.22

강의 : [Fast campus] Data Science with R 1기 - 이부일 강사님

공부하면서 배운 내용 복습 겸 정리하는 곳입니다.


# R에서 제공해주는 hflights 패키지 사용
# 예제 데이터 : hflights::hflights
# 패키지::데이터 : 괄호가 없으면 데이터 불러오기

자료의 종류 : 통계적인 관점

  # 질적 자료 vs 양적자료

  # 질적 자료 : 글자(문자), 숫자(의미가 없는 숫자)

  # 양적 자료 : 숫자(의미가 있는 숫자 - 사칙연산이 가능)


일변량(Uni-variate) 질적 자료의 분석

  # 일변량 => 하나의 열


1. 표 = 빈도표 

  # 빈도(frequence), 백분율(percent)


  (1) 빈도 : table(데이터명$변수명)

# R에서 table은 질적자료의 빈도를 구할 때 많이 사용

1
2
3
4
5
> sort(table(hflights$Month),
+      decreasing = TRUE)
 
    7     8     6     3     5    12     1    10     4     9    11     2 
20548 20176 19600 19470 19172 19117 18910 18696 18593 18065 18021 17128
cs


  (2) 백분율 = (빈도/합계) * 100

# prop.table(빈도결과) * 100

# prop = proportional(비율)

# 비율 : 0~1 / 백분율 : 0~100

# 백분율은 소수점 한 자리 까지만 보고서에 작성 

1
2
3
4
5
6
> round(sort(prop.table(table(hflights$Month))*100,
+            decreasing = TRUE),
+       digits = 1)
 
  7   8   6   3   5  12   1  10   4   9  11   2 
9.0 8.9 8.6 8.6 8.4 8.4 8.3 8.2 8.2 7.9 7.9 7.5
cs


     ## prettyR 패키지

# prettyR::freq(데이터명$변수명)

1
2
3
4
5
6
7
> prettyR::freq(hflights$Month)
 
Frequencies for hflights$Month 
        7    8    6      3     5    12    1     10     4     9    11     2    NA
     20548 20176 19600 19470 19172 19117 18910 18696 18593 18065 18021 17128  0
%       9  8.9  8.6  8.6  8.4  8.4  8.3  8.2  8.2  7.9  7.9  7.5    0 
%!NA    9  8.9  8.6  8.6  8.4  8.4  8.3  8.2  8.2  7.9  7.9  7.5
cs

# 결과는 백분율과 유효백분율이 나타남

# 유효백분율 : 실질적으로 응답한 사람(NA제외)

# display.na = FALSE : 유효백분율이 출력되지 않음



2. 그래프 : 막대그래프(세로, 가로), 원그래프

  (1) 막대그래프

# barplot(빈도결과) - 기본 세로 막대그래프

# 그래프에 다양한 arguments를 추가

1
2
3
4
5
6
barplot(sort(table(hflights$Month), decreasing = TRUE),
        col  = "skyblue",
        main = "월별 운항의 현황",
        ylab = "운항 횟수",
        ylim = c(025000)
)
cs

   # 막대 색깔 : col = "color"

# 그래프 제목 : main = "제목"

# y축 제목 : ylab = "축제목"

   ylab = y label의 약자

   y축 제목은 꼭 써야한다.

# y축 눈금 : ylim = c(최소값, 최대값)

   ylim = y limit의 약자

   y축의 최소값은 0으로 해야된다.

   * 절단효과 : 최소값을 올리게 되면 전체적인 차이가 더 크게 보일 수 있기 때문


# 가로 막대 그래프 : horiz = TRUE

1
2
3
4
5
6
7
barplot(sort(table(hflights$Month), decreasing = TRUE),
        col   = "skyblue",
        main  = "월별 운항의 현황",
        xlab  = "운항 횟수",
        xlim  = c(025000),
        horiz = TRUE
) 
cs

가로 막대 그래프로 변경 했기에 xlab, xlim 으로 바꿔야 함

젤 위에 가장 큰 값을 주어야 한다. => 내림차순


  

(2) 원그래프

# pie(빈도)

# 원 그래프는 조각이 5개 이하인 경우에만 사용

1
2
3
pie(sort(table(hflights$Month), decreasing = TRUE),
    radius     = 1.0,
    init.angle = 90)
cs

# 반지름 : radius = 0.8 (기본값)

# 첫 번째 조각의 각도 : init.angle = 



  일변량(Uni-variate) 양적 자료의 분석


1. 표

  # 구간의 빈도, 백분율

  # 최소값, 최대값

1
2
3
> range(hflights$ArrDelay,
+       na.rm = TRUE)
[1-70 978
cs

  

  # 구간의 개수 구하는 법

1. Sturge's : 1+3.3*log10(데이터의 개수)

1
2
> 1 + 3.3*log10(length(hflights$ArrDelay))
[118.67801
cs


2. sqrt(데이터의 개수) 

1
2
> sqrt(length(hflights$ArrDelay))
[1476.9654
cs

... 기타 등


  # 구간의 폭 = 계급의 폭

  # (최대값 - 최소값) / 구간의 개수

  # 첫 번째 구간에는 최소값 포함, 마지막 구간에는 최대값이 포함되어야 함    

1
2
3
4
5
> range(hflights$ArrDelay, na.rm = TRUE)
[1-70 978
 
> diff(range(hflights$ArrDelay, na.rm = TRUE))
[11048
cs

  # diff(숫자)

  # diff( c(1, 3, 5) ) => 3-1 / 5-3 => 2개씩 짝 지어서 계산됨

1
2
> diff( c(135)
[12 2
cs


  # cut을 통해 내가 원하는 구간별로 나눌 수 도 있다.

1
2
3
4
5
hflights$ArrDelay.group = cut(hflights$ArrDelay,
                              breaks = seq(from = -120,
                                           to = 1020,
                                           by = 60),
                              right = FAㅣSE
cs


2. 그래프

  (1) 히스토그램(Histogram)

i. hist(데이터명$변수명) : Sturge 공식 적용

1
hist(hflights$ArrDelay)
cs


ii. hist(데이터명$변수명, breaks = 구간의 개수)

1
2
hist(hflights$ArrDelay,
     breaks = 100)
cs


iii. hist(데이터명$변수명, breaks = 구간의 정보)

1
2
3
4
5
6
hist(hflights$ArrDelay,
     breaks = seq(from = -120,
                  to = 1020,
                   by = 60),
     xlim = c(-1201020))
 
cs

  

  (2) 상자그림(Boxplot) : 이상치 유무 판별

i. boxplot(데이터명$변수명)

1
boxplot(hflights$ArrDelay)
cs


ii. 집단별 상자그림

# boxplot(데이터명$변수명 ~ 데이터명$변수명)

# boxplot(     양적자료        ~      질적자료      )

# R의 관점에서 factor형태로 되어 있어야 한다.

1
2
boxplot(hflights$ArrDelay ~ hflights$Origin)
boxplot(hflights$ArrDelay ~ hflights$Month)
cs

# boxplot을 통해 각 이상치를 제거할까? 변환할까? 등을 판별


3. 기술통계량 = 요약통계량 => 숫자

  # Descriptive Statistics = Summary Statistics


  # 모수(Parameter)       vs  통계량(Statistics)

  # 모집단(Population)   vs  표본(Sample)


  # 기술통계량, 요약통계량 => 표본에서 나온 것

  # 모수는 모집단이 어떻게 형태인지 알려주는 수많은 숫자들

  # 모집단의 평균, 표준편차, 최소값, 최대값... 등 => 모수 (하지만 현실에서는 대부분 알 수 없다.)

  # 표본에서 나온 평균, 표준편차, 최소값, 최대값... 등 => 통계량

  # 양적 자료를 바탕으로 다양한 숫자를 만들어내는 것 = 통계량

  # 통계적 추론 : 표본으로 부터 나온 통계량을 바탕으로 모집단의 모수들을 추측


  (1) 중심 = 대표값

# 평균, 절사평균, 중위수(중앙값), 최빈수(최빈값)

# 절사평균 : 평균은 이상치(Outlier)에 영향을 많이 받는다. -> 이상치를 뺀 평균

# 최빈수 : 동일한 값이 많이 나타난 수


i. 평균

# mean(데이터명$변수명, na.rm = TRUE)

1
2
> mean(hflights$ArrDelay, na.rm = TRUE)
[17.094334
cs

# 하지만 이 평균을 가지고 분석을 시행하기에는 위험하다.

# 이상치(Outlier)의 존재 때문


ii. 5% 절사평균(Trimmed Mean)

# mean(데이터명$변수명, trim = 0.05, na.rm = TRUE)

# 작은쪽, 큰쪽 각 5%씩 절사해서 90%의 평균을 계산하여 분석

# 5%는 바꿔도 되는 기준

1
2
3
4
5
> mean(hflights$ArrDelay, trim = 0.05, na.rm = TRUE)
[13.121585
 
> mean(hflights$ArrDelay, trim = 0.1, na.rm = TRUE)
[11.847091
cs


iii. 중위수

# median(데이터명$변수명, na.rm = TRUE)

1
2
> median(hflights$ArrDelay, na.rm = TRUE)
[10
cs

# 중위수 0을 기준으로 일찍 오거나 늦게 온 비행기가 50%씩 존재한다.


iv. 최빈수(Mode)

  1) which.max(table(데이터명$변수명)

1
2
> which.max(c(1053200))
[14
cs

  # 벡터의 가장 큰 값 200의 index를 알려준다.


1
2
3
> which.max(table(hflights$ArrDelay))
-4 
54 
cs

  # -4가 54번째 있었다.

  # ArrDelay 데이터에서 4분 일찍 도착한 게 가장 많았다.


  2) prettyR::Mode()

1
2
> prettyR::Mode(hflights$ArrDelay)
[1"-4"
cs


  (2) 퍼짐 = 산포 = '다름' 

# 통계는 '다름'이 존재하기에 분석한다. 이 다름의 차이를 수치화 하여 나타냄

# 이 '다름'은 왜 발생했을까?

# 범위, 사분위수범위, 분산

# 표준편차(평균과의 차이), 중위수 절대편차(중위수와 차이)

# 범위와 표준편차는 이상치(Outlier)에 영향을 많이 받는다.

# 중위수 절대편차는 이상치(Outlier)의 영향을 적게 받는다.


i. 범위(Range)

1
2
> range(hflights$ArrDelay, na.rm = TRUE)
[1-70 978
cs

# R에서 range()는 최소값, 최대값 2개를 알려준다.

# diff()를 통해 2개의 차이를 계산

1
2
> diff(range(hflights$ArrDelay, na.rm = TRUE))
[11048
cs

# 범위는 이상치의 영향을 많이 받는다.

# 그래서 나온게 사분위수 범위


ii. 사분위범위 = 사분위수범위 = IQR(Inter Quartile Range)

# IQR(데이터명$변수명, na.rm = TRUE)

1
2
> IQR(hflights$ArrDelay, na.rm = TRUE)
[119
cs

# 범위(1048) , 사분위범위(19) 의 차이는 다르다.

# 사분위범위를 보고 항공기들은 19분정도 늦거나 일찍 도착하네 라고 생각 할 수 있음.


iii. (표본) 분산(Variance)

# 모든 데이터에서 평균을 빼고 제곱을 한다.

# 데이터 - 평균 : 편차(Deviation) => 편차를 다 더하면 0 => 따라서 제곱한 값을 사용

# 통게는 데이터의 합계가 아닌 '자유도'로 나눈다

# df : degree of freedom

# var(데이터명$변수명, na.rm = TRUE)

1
2
> var(hflights$ArrDelay, na.rm = TRUE)
[1943.013
cs

# 분산은 각 데이터 제곱을 통해 계산하므로 ArrDelay의 결과는 '분의 제곱'이다.


iv. (표본) 표준편차(SD : Standard Deviation)

# sd(데이터명$변수명, na.rm = TRUE)

1
2
> sd(hflights$ArrDelay, na.rm = TRUE)
[130.70852
cs

# 평균은 7분 정도 늦는데, 각 데이터들마다 평균과의 차이가 다름

# 여기서 평균과의 차이는 약 30분(표준편차)

# 즉, -27분 ~ 37분 범위 안에서 대부분 도착한다.

# 표준편차가 작다 - 평균이랑 가까운 데이터들

# 표준편차가 크다 - 평균이랑 먼 데이터들


v. 중위수 절대편차(MAD : Median Absolute Deviation)

# mad(데이터명$변수명, na.rm = TRUE)

1
2
> mad(hflights$ArrDelay, na.rm = TRUE)
[113.3434
cs

# 중위수 절대편차를 기준으로 비행기들이 13분 늦거나 일찍오는구나 라고 생각


  (3) 분포의 모양

# 데이터는 하나가 아니라 여러개다.

# R의 기본 기능에서는 못 구함 - 왜도, 첨도

i. 왜도(Skewness) : 대칭여부

# 왜도가 0에 가까운 값이라면 '데이터들이 대칭이다' 라고 볼 수 있다.

# 왜도가 0에서 멀어진다면 ' 데이터들이 비대칭이다'라고 볼 수 있다.

# 왜도 > 0 : 이상하게 큰 애가 있다면 오른쪽으로 긴 곡선

# 왜도 < 0 : 이상하게 작은 애가 있다면 왼쪽으로 긴 곡선


ii. 첨도(Kurtosis) : 중심이 얼마나 뾰족한가?

# 첨도가 0에 가까운 값이라면 중심이 보통높이

# 첨도 > 0 : 중심이 높아진다 -> 비슷한 데이터가 많이 있다.

# 첨도 < 0 : 중심이 낮아진다 -> 비슷한 데이터가 적다.


# psych::describe(), describeBy()

# R에서 by가 있다면 항상 집단별로 무엇을 한다는 의미

1
2
3
> psych::describe(hflights$ArrDelay)
   vars      n mean    sd median trimmed   mad min max range skew kurtosis   se
X1    1 223874 7.09 30.71      0    1.85 13.34 -70 978  1048 5.04    55.57 0.06
cs

# 결과 중 se : standard error(표준오차) : 0.06

# 지금 표본에서 평균이 7.09분이 나왔는데,

# '다른 표본'을 뽑으면 평균이 지금 표본의 평균과 달라질 것이다.

# 그렇다면 얼마나 달라질까를 알려주는 값 -> 표준오차


# psych::describeBy(데이터명$변수명, 데이터명$변수명)

# psych::describeBy(양적자료, 질적자료)

1
2
3
4
5
6
7
8
9
10
> psych::describeBy(hflights$ArrDelay, hflights$Origin)
 
 Descriptive statistics by group 
group: HOU
   vars     n mean    sd median trimmed   mad min max range skew kurtosis   se
X1    1 51309 7.49 31.95     -1    1.77 11.86 -44 822   866 4.98    46.08 0.14
---------------------------------------------------------------- 
group: IAH
   vars      n mean    sd median trimmed   mad min max range skew kurtosis   se
X1    1 172565 6.98 30.33      0    1.87 13.34 -70 978  1048 5.05    58.88 0.07
cs


# summary(데이터명$변수명)

# 질적 자료 = 빈도, 백분율 / 만약에 factor라면 빈도만 알려줌

# 양적 자료 = 6개(최소값, 최대값, 평균, 123사분위수)


# by(양적자료, 질적자료, 함수명)

1
2
3
4
5
6
> by(hflights$ArrDelay, hflights$Origin, mean, na.rm = TRUE)
hflights$Origin: HOU
[17.487946
---------------------------------------------------------------- 
hflights$Origin: IAH
[16.977301
cs

# 공항이 2개가 있는데 각 공항에 대하서 ArrDelay에 대한 평균을 구해줘

# 질적자료를 기준으로 양적자료에 함수를 적용한 결과를 알려줌

+ Recent posts