R 프로그래밍 2021. 6. 2. 23:44

# 대부분 인스톨이 되어 있겠지만 혹시 안되시는 분들을 위해 패키지 인스톨부터시작 하겠습니다
# 우선은 intall.packages를 활용해 ggplot2를 인스톨 받으신후 라이브러리를 통해 ggplot2를 적용 시키시면 됩니다.
ggplot2 
install.packages("ggplot2")
library(ggplot2)
install.packages("gridExtra")
library(gridExtra)
#grid.arrange(p1, p2, ncol=2)
##########+############################################################################
#저희가 활용할 객체는 ggplot의 객체인 diamonds입니다.
#View를 활용해서 정보를 보도록 하겠습니다.
View(diamonds)
#diamonds에는 질적자료와 양적자료가 있는데, 질적자료 3가지를 찾아주시기 바랍니다.
#혹시 질적자료와 양적 자료가 헷갈리시면 str을 이용해 편하게 구분 하실 수 있습니다.
str(diamonds)
# diamiond의 자료구성입니다.
# 질적자료는 숫자로 표시될 수 없는 자료를 가르킴으로 fctor형인 cut, clarity, color가 있습니다.
# 그외의 자료들은 양적자료로 자료 자체가 숫자로 표현되어 있다. 여기서는 carat,depth,table,price 등이 있습니다.

# 앞에서 배웠던 것을 토대로 cut에 대해 그래프로 표현해 보시기 바랍니다.
# 힌트는 cut은 질적자료이며, x축만 제공하기에 막대형식의 그래프를 사용하시면 됩니다.
# 안되거나 기억이 안나시는 부분은 손들어주시면 보조강사분들이 가겠습니다.

#qplot과 ggplot으로 작성하신 분들이 있을텐데요
#qpolt과 ggplot의 차이는 무엇일까요? 츄파춥스준다.
#qplot은(quick plot)으로 데이터와 표현방식을 함께 기입하여 코드의 길이가 매우 짧으며 간단한 반면에
#ggplot은 데이터 입력후 "+"를 사용해 그래프 형식을 정해주어야합니다. 불편해 보이지만 +를 사용함으로 추가가 용이합니다.
#ggplot이 더 복잡한 작업을 할때 시각화부분에 더 강력하다고 할 수 있습니다.
#말 그대로 qplot은 빠르게 plot 할 때 (그래프를 그릴 때) 사용하는 것이고
#ggplot(grammer of graphic)은 문법대로 더 상세하게 구현할 때 사용한다고 한다


qplot(cut,data=diamonds) 
qplot(cut,data=diamonds,geom="bar",xlab="cut",ylab="count") #geom의 default값이 "bar", ylab으로 이름설정

ggplot(data=diamonds, aes(x=cut))+geom_bar() #이와 같이 작성은 가능하지만


g <- ggplot(data=diamonds, aes(x=cut)) #어떤 데이터를 사용할 것인지만 지정된 상태
g + geom_bar()   #변수에 데이터를 넣은 후 출력형식을 +로  연결해주시면 됩니다.
#이와같이 지속적으로 추가시킬수 있습니다.
# x축만 제공됨으로 y축이 필요한 함수는 추가할 수 없습니다.

# cut의 막대그래프 - 질적 변수인 cut을 기준으로 도수의 크기를 비교한 막대그래프


###########################################################################################


# 방금전에 cut은 질적자료였죠 그럼 carat은 무슨 자료일까요?

# 잘적자료는 바를 사용한다면 양적자료는 무엇을 사용할까요?

# 막대그래프와 히스토그램의 차이가 무엇인가요?

# carat을 그래프로 표현해 보시기 바랍니다.

g <- ggplot(data=diamonds, aes(x=carat))

g + geom_histogram(binwidth = 1 )
g + geom_histogram(binwidth = 0.1 )
g + geom_histogram(binwidth = 0.05 )
# 앞의 히스토그램의 계급의 수를 변경하는 등 작성자의 주관적인 판단에 좌우되어 해석이 좌우된다.

##############################################################################################
#다음은 line을 실습해 보겠습니다.
#line은 질적변수를 사용하지 않고 X축과 Y축 변수가 필요합니다.
#x축은 케럿 y축은 프라이스로 line을 만들어보세요

g <- ggplot(data=diamonds, aes(x=carat,y=price))
g+geom_line()
#x,y값만으로 했을때 그래프가 변동이 심하죠 이거는 다른 변동요인 있을 수 있다는걸 뜻합니다.
#컬러변수를 넣어서 확인해볼까요"?
g+geom_line(aes(colour=color))

#캐럿에 따라 가격 상승, 색에따라서 가격 상승
# line여기서 마치고 이어서 point부터는 이용희학생이 진행하겠습니다.






















#############################################
# 이어서 발표하겠습니다.(지옴 지오메틱)
# 포인트 그래프는 x축과 y축을 설정한 뒤 geom_point()를 추가하면 그려집니다.
# 케럿과 프라이스 변수로 포인트 그래프를 만들어보세요.
ggplot(data=diamonds, aes(x=carat,y=price)) + 
  geom_point()
# 수많은 점이 찍힌것을 볼 수 있으시죠?
# 이제 이 그래프에 깨끗한 정도의 변수를 넣어 색을 변경해보겠습니다.
# 변수에 따라 point를 다르게 표현하고 싶다면 aes에서 설정해주면 됩니다.
# aes에 컬러는 클라리티를 넣어 확인해봅시다.
ggplot(data=diamonds, aes(x=carat,y=price, colour=clarity)) + 
  geom_point()
# 클라리티 변수에 따라 포인트들의 색이 변경되었음을 보실 수 있으실겁니다.
# 그래프를 보시면 노란색 점, 즉 결점이 적은 다이아가 위쪽으로 많이 분포해있고,
# 검은색 점이 아래쪽에 많이 분포되어있음을 알 수 있습니다.
# 간단하게 해석해보면 다이아몬드에 결점이 적을수록
# 가격이 높으며, 무게가 큰 것을 찾기 힘들어진다는 것을 알 수 있습니다.

# 이제 추세선을 그려보겠습니다.
# 앞에 있었던 포인트나 라인같이 무수한 데이터들로 이루어진 산포도로는
# 그 경향을 읽어내기가 어렵습니다.
# 이런 경우, 추세선을 통해 그 경향을 읽을 수 있습니다.
# 추세선은 geom=smooth를 통해 표현할 수 있습니다.
# 앞에 그렸던 포인트 그래프에 스무스를 추가하여 보세요.
ggplot(data=diamonds, aes(x=carat,y=price, colour=clarity)) + 
  geom_point()+
  geom_smooth()
# (만약 포인트에 aes를 넣어 만든사람은 한개의 회귀선만 나타난다. ase(colour=clarity)라는
# 옵션은 디폴트로 주어진 것이 아니라 추가적인 레이어에서 새롭게 설정된 값이라서)
# 그래프를 보시면 clarity에 따른 각각의 회귀선이 나타남을 알 수 있습니다.
# 이는 맨 처음 레이어에서 colour=clarity옵션까지 디폴트로 적용되었기 때문입니다.

# 이제 박스플롯을 그려보겠습니다.

# boxplot은 중앙값, 최대값, 최솟값, 사분위를 사용하여 자료의 측정값들이 어떤 모양
# 으로 분포되어 있는지 알려줍니다.
# 클라리티와 케럿에 대한 상자그림을 그려보세요.
ggplot(data=diamonds, aes(x=clarity,y=carat)) + 
  geom_boxplot()
# boxplot을 통해서 이상치나 자료의 대칭성, 산포도, 중앙값등을 한 눈에 볼 수 있습니다.
# boxplot의 색과 크기는 fill,color,width 지정을 통해 바꾸어 줄 수 있습니다.
ggplot(data=diamonds, aes(x=clarity,y=carat)) + 
  geom_boxplot(fill='slategrey',color='darkslategrey',width=0.3)
# (이상치를 없애려면 oulier.shape를 NA로 지정해주시면 됩니다.)
# 중앙값 이외에도 평균을 알고 싶다면 stat_summary를 통해 평균을 추가해줄 수 있습니다.
ggplot(data=diamonds, aes(x=clarity,y=carat)) + 
  geom_boxplot()+
  # fun.y 인자를 설정해주면 x값에 대응하는 y값을 구할 수 있습니다.
  # stat_summary 함수에서 fun.y 인자에 mean을 입력해주면 그래프에 평균값이 나타나게 됩니다.
  stat_summary(fun.y="mean", geom="point", shape=22, size=3, fill="blue")

# 박스플롯에 분포의 형태를 보다 구체적으로 표현하는 방법으로는 violin plot이 있습니다.
# 클라리티와 프라이스의 바이올린 플롯을 그려보세요
ggplot(data=diamonds, aes(x=clarity,y=price)) +
  geom_violin()
# 바이올린 그래프를 보면 분포가 옆으로 나열되기 때문에 아까 봤던 포인트처럼 데이터가
# 무수히 많을 때 분포를 비교하기 힘들었던 자료도 쉽게 비교할 수 있습니다.

# 이렇게 기초 통계와 ggplot2의 그래프들 중 7가지 그래프를 알아봤습니다.

posted by 스노(Snow)
:
R 프로그래밍 2019. 11. 6. 13:42

네이버나 다음 등의 포털사이트에서 2019년 자동차 데이터를 수집하였습니다.

네이버 자동차 데이터 (https://auto.naver.com/car/lineup.nhn?yearsId=130559)

 

변수로는 모델, 가격, 연비(도시),연비(고속도로), 연료타입[가솔린, 디젤, 하이브리드], 제조사, 모델[세단,SUV], 차종, 국산/수입, 마력, 차중량을 사용하였습니다.

 

데이터는 총 303개 모았습니다.

 

수치형 변수들의 산점도

수치형 변수들의 상관계수

자동차 타입별 레이더 차트

비지도학습으로 군집을 6개로 나눈 그래프  (K-means 클러스터링)

Hierarchical 클러스터링(계층화) 결과, 그려진 모양에 맞춰서 빨간색으로 클러스터를 표현했습니다. 분류 시 2개 혹은 3개로 분류하는 것이 좋아보입니다.

 

R 코드와 데이터는 (https://github.com/sealwh/cars)에서 다운받으실 수 있습니다.

posted by 스노(Snow)
:
R 프로그래밍 2019. 11. 6. 11:05

R을 이용하여 Diamond의 데이터로 기하학적 객체들(점, 선, 막대 등)에 미적 특성(색상, 모양, 크기)를 매핑하여 시각적으로 분석합니다.

 

ggplot2

ggplot2는 다음과 같은 다섯 가지 사항으로 그림을 그립니다.

 

data

- 그래프를 그리려는 데이터로 구조는 데이터 프레임이고 데이터의 기록 방식은 long-farmat에 기반한 tidy data여야 합니다.

(aesthetic) Mapping

- 데이터의 요소와 그래프의 요소를 대응시키는 과정으로 그리고싶은 그래프가 필수적으로 요구하는 대응 요소를 만족시키면 됩니다. 하나의 변수가 여러가지 시각적 요소에 대응할 수 있습니다.

geometric object

- 어떤 형태의 그래프를 그릴지 지정해야 합니다. ggplot2에서는 이것을 geometric object라고 하며, 줄여서 geom이라고 합니다.

position

- 그래프의 형태를 지정했다면 그래프에서 각 도형이 어떤 식으로 배치될 지를 결정할 수 있습니다. 이러한 옵션을 position이라고 합니다. 막대그래프나 선 그래프라면 누적 그래프를 그리거나 할 때 position 옵션을 조정해 형태를 변경할 수 있습니다.

statistical transformation

- 값이 어떻게 그래프에 반영되는지 결정하는 옵션입니다. 줄여서 stat 이라고 합니다. 히스토그램과 같이 구간 내에 존재하는 값의 개수를 세거나 밀도를 계산하는 등, 주어진 값을 변형시켜서 그래프에 반영시킬 때 사용합니다.

 

자료 시각화의 핵심

plot = data + aesthetics + geometry

 

data : 무엇을 시각화할 것인가?

geom : 무엇으로 시각화할 것인가? 예)점, 선, 막대 등

aesthetics : 어떤 시각적 특성(visual attributes)를 사용할 것인가? 예) 위치(x,y), 크기(size), 모양(shape), 색깔(col) 등

 

ggplot2 기본 문법

1. 축을 그립니다.  (x축,y축을 정해줍니다.)

ggplot(데이터명, aes(x=변수1,y=변수2))

 

2. 그래프를 그립니다.

geom_bar()            막대 도표를 그립니다.

geom_histogram()   히스토그램을 그립니다.

geom_boxplot()      박스 플롯을 그립니다.

geom_line()            선 그래프를 그립니다.

geom_point()         포인트 그래프를 그립니다.

geom_smooth()      추세선을 그립니다.

geom_violin()         바이올린 박스 플롯을 그립니다.

 

3. 기타 옵션을 수정하여, 그래프를 정교화 합니다.

labs()               범례 제목 수정

ggtitle()            제목 수정

xlabs(), vlabs()    x축,y축 이름 수정

 

diamonds

우선은 ggplot2부터 인스톨 하겠습니다.

 

install.packages("ggplot2")

library(ggplot2)

 

저희가 활용할 객체는 ggplot의 diamonds입니다.

View를 활용하여 정보를 얻을 수 있습니다.

 

View(diamonds)

 

질적자료인지 양적 자료인지 헷갈리시면 str을 이용해 편하게 구분 하실 수 있습니다.

 

str(diamonds)

 

diamonds의 자료구성입니다.

질적자료는 숫자로 표시될 수 없는 자료를 가르킴으로 factor형인 cut, clarity, color가 있습니다.

 

어떤 데이터를 사용할 것인지 지정하시려면 다음과 같이 작성하시면 됩니다.

g <- ggplot(data=diamonds, aes(x=cut))

 

그 후 변수에 데이터를 넣은 후 출력형식을 +로 연결해주시면 됩니다.

g + geom_bar()

 

위에 것을 실행하시면 cut의 막대그래프가 나올 것입니다.

질적 변수인 cut을 기준으로 도수의 크기를 비교한 막대그래프입니다.

 

 

양적자료인 carat은 막대그래프가 아닌 히스토그램을 사용하시면 됩니다.

 

g <- ggplot(data=diamonds, aes(x=carat))

g + geom_histogram(binwidth = 1 )
g + geom_histogram(binwidth = 0.1 ) 

 

히스토그램의 계급수를 변경하는 등 작성자의 주관적인 판단에 해석이 좌우 될 수 있습니다.

 

다음은 line을 실습해 보겠습니다.

x축은 carat, y축은 price로 line을 만들어 보겠습니다.

g <- ggplot(data=diamonds, aes(x=carat,y=price))
g+geom_line()

그래프가 변동이 변동이 심하고 알아보기도 힘든 것을 확인하실 수 있습니다.

한번 color 변수를 넣어보겠습니다.

 

g+geom_line(aes(colour=color))

 

carat의 크기와 색에 따라서 가격이 상승된다는 것을 알 수 있습니다.

 

이번에는 포인트 그래프를 만들어 보겠습니다. 변수로는 carat과 price, clarity를 비교해보겠습니다.

 

ggplot(data=diamonds, aes(x=carat,y=price, colour=clarity)) + 
    geom_point()

그래프를 보시면 노란색 점이 위쪽으로 많이 분포되어있고, 검은색 점이 아래쪽에 많이 분포되어있음을

알 수 있습니다. 간단하게 해석해보면 다이아몬드에 결점이 적을수록 가격이 높으며, 무게가 큰 것은 찾기

힘들다는 것을 알 수 있습니다.

 

이번에는 위에 있는 포인트그래프에 추세선을 그려보겠습니다.

 

ggplot(data=diamonds, aes(x=carat,y=price, colour=clarity)) + 
     geom_point() +
     geom_smooth()

위에 있었던 포인트나 라인그래프같이 무수한 데이터들로 이루어진 산포도로는 그 경향을 정확히 읽어내기가 어렵습니다. 이런 경우, 추세선을 통하여 그 경향을 좀 더 편하게 읽을 수 있습니다.

posted by 스노(Snow)
:
Python 파이썬/머신러닝 2019. 10. 9. 16:25

정의

기계학습 또는 머신러닝(machine learning)은 애플리케이션을 수정하지 않고도 데이터를 기반으로 패턴을 학습시켜 결과를 예측하는 알고리즘 기법들의 통칭입니다.

 

 

분류

일반적으로 머신러닝은 지도학습과 비지도학습, 강화학습으로 나눠집니다.

 

지도학습 - 데이터에 대한 레이블(명시적인 답)이 주어진 상태에서 컴퓨터를 학습시키는 방법입니다.

              지도학습의 대표적인 머신러닝은 분류와 회귀가 있습니다.

비지도학습 - 데이터에 대한 레이블(명시적인 답)이 주어지지 않은 상태에서 컴퓨터를 학습시키는 방법입니다.

                 비지도학습의 대표적인 머신러닝은 군집화(클러스터링), 차원축소 등이 있습니다.

강화학습 - 현재의 상태에서 어떤 행동을 취하는 것이 최적인지를 학습시키는 방법입니다.

              행동을 취할 때마다 외부 환경에서 보상이 주어지고, 이 보상을 최대화하는 방향으로 학습을 진행시킵니다.

 

오픈 소스 프로그램 언어

머신러닝 프로그램을 작성할 수 있는 대표적인 오픈 소스 프로그램 언어는 파이썬과 R입니다.

C/C++, JAVA 등의 언어도 머신러닝 프로그램 작성이 가능하지만, 파이썬이나 R에 비해 지원 패키지나 개발 생산성이 많이 떨어집니다.

 

머신러닝 분야에서의 R

- 통계 분석을 위해 특화된 언어이며 많은 사용자들이 생성하고 검증해온 다양한 통계 패키지를 보유하고 있습니다. 

- 데이터 시각화 기능이 매우 뛰어납니다.

 

머신러닝 분야에서의 파이썬

- 쉽고 뛰어난 개발 생산성으로 전 세계 개발자들이 파이썬을 선호합니다.

- 인터프리터 언어의 특성상 속도는 느리지만 확장성, 유연성, 호환성이 뛰어나 다양한 영역에서 사용됩니다.

- 딥러닝 프레임워크인 텐서플로, 케라스, 파이토치 등에서 파이썬 우선 정책으로 파이썬을 지원하고 있습니다.

posted by 스노(Snow)
:
R 프로그래밍 2019. 10. 6. 00:52

mean(x) # x의 평균을 계산합니다.

           # na.rm=TRUE를 추가하면 결측값을 제외하고 계산합니다.

var(x) # x의 분산, n-1로 나누는 값입니다.

sd(x) # x의 표준편차, sqrt(var(x))의 값입니다.   sqrt() : 제곱근

median(x) # x의 중앙값입니다.

range(x); # x의 최소값과 최대값입니다.

max(x) # x의 최대값입니다.

min(x) # x의 최소값입니다.

IQR(x) # 사분위편차입니다. (제3사분위수 - 제1사분위수)

sum(x) # x의 합계입니다.

quantile(x) # x의 분위수를 구합니다. 기본은 최대,최소,사분위수입니다.

summary(x) # x의 요약통계량입니다.

cov(x,y) # x와 y의 공분산입니다.

 

posted by 스노(Snow)
:
R 프로그래밍 2019. 10. 6. 00:41

산술연산자

+ 더하기  - 빼기  * 곱하기  / 나누기
^ 거듭제곱  ** 거듭제곱
%% 나머지  %/% 몫

관계연산자(비교연산자)

<,<=,>,>=   양쪽 값 비교

== 같음  != 같지 않음

논리연산자

|  'OR' 연산자 - 한개만 TRUE여도 결과값이 TRUE로 나옵니다.

& 'AND' 연산자 - 모든 조건이 TRUE일때만 결과값이 TRUE로 나옵니다.

! 'NOT' 연산자 - 반대 논리값이 결과로 나옵니다.

posted by 스노(Snow)
:
R 프로그래밍 2019. 10. 6. 00:01

rm(x) # x변수를 삭제합니다.
ls() # 변수목록을 출력합니다. 
rm(list=ls()) #모든 변수를 삭제합니다. 
getwd() #작업디렉토리의 주소를 출력합니다. 
setwd("D:/R") #작업디렉토리를 변경합니다. 
sink('nomal.txt') #결과값을 작업디렉토리에 텍스트로 저장합니다. 
sink() #저장을 종료합니다. 
# jpeg('파일이름,jpeg'), pdf('파일이름.pdf') 도 있습니다.
# 종료할때는 jpeg(),pdf() 을 실행하시면 됩니다. 
q() #r프로그램을 종료합니다. 
save.image('nomal.RData') #작업디렉토리에 작업공간을 저장합니다.
#변수들을 RData로 저장합니다.
#load('주소') 저장되어있는 RData를 불러옵니다.
savehistory('nomal.Rhistory') # 작업디렉토리에 Rhistory로 저장합니다. # 여태껏 실행시켜온것들을 저장합니다.
#loadhistory('주소') 저장되어있는 Rhistory를 불러옵니다.
source('11.txt', echo=T)  # txt에 저장되어있는 실행문을 실행시킵니다.
print(x) # 명령문의 값을 출력합니다.
example(list) # 함수의 예제을 보여줍니다.
?list #함수의 설명을 보여줍니다.
table(z)#빈도를 table의 형태로보여줍니다.
LETTERS #영문자(대문자)
letters #영문자(소문자)
class(f.y) #변수의 속성을 보여줍니다.
mode(f.y) #변수의 유형을 보여줍니다.
attach(d.f) #특정 데이터 프레임을 활성화 시킵니다.
#데이터 프레임이 활성화되면 데이터프레임안에있는 변수명들을 실제변수처럼사용가능합니다.
detach(d.f) #활성화를 종료합니다.

'R 프로그래밍' 카테고리의 다른 글

[R프로그래밍] 통계관련함수  (0) 2019.10.06
[R프로그래밍] 연산자  (0) 2019.10.06
[R프로그래밍] 자료의 종류  (0) 2019.10.05
[R프로그래밍] R 기초 문법  (0) 2019.10.05
[R프로그래밍] R Studio 사용법  (0) 2019.10.05
posted by 스노(Snow)
:
R 프로그래밍 2019. 10. 5. 02:23

변수에 자료 넣기

x <- 1

x = 1

- x라는 이름의 변수에 1이라는 자료가 들어갑니다.

x변수의 내용 보기

print(x)

x

데이터 타입[벡터]

- 동일한 유형의 데이터를 연속적으로 담을 수 있는 그릇을 '벡터'라고 합니다.

- c()함수를 사용하여 만들 수 있습니다.

 

x <- c(1,2,3,4,5)                # 숫자형 벡터

y <- c("강원","경북","경기") # 문자형 벡터

z <- c(TRUE,FALSE,T,F)       # 논리형 벡터

논리형 벡터는 숫자처럼 인식됩니다. TRUE=1, FALSE=0

 

w <- c(1,"강원",F) # 한 벡터에 숫자와 문자가 함께 포함되어 있다면 벡터의 데이터들은 모두 문자형으로 변환됩니다.

데이터 타입[배열]

- 한 개이상의 백터로 구성되어 있으며, 동일한 데이터 유형을 갖습니다.

- array()함수를 사용하여 만듭니다.

데이터 타입[행렬]

- 행과 열로 구성되는 2차원 배열을 matrix라고 합니다.

- matrix() 함수를 사용하여 만듭니다.

- byrow 옵션으로 행부터 원소를 채울수 있습니다.

- cbind는 옆으로 데이터를 결합하며, rbind는 아래로 데이터를 결합해줍니다.

데이터 타입[데이터 프레임]

- 데이터 프레임은 여러가지 벡터들을 하나로 묶어줍니다.

- 단, 길이가 모두 같아야 합니다.

- 각 속성(벡터)들의 데이터 유형(숫자, 문자, 논리)은 서로 다를 수 있습니다.

- data.frame()함수로 만듭니다.

데이터 타입[리스트]

- 리스트는 모든 형태의 자료들을 하나로 묶어줍니다.

- list()함수를 사용하여 만듭니다.

 

posted by 스노(Snow)
: