반응형

안녕하세요!


오늘은 R로 머신러닝을 하기에 앞서


그 기본! Basic Part!


머신러닝에 대해 알아보겠습니다.


머신러닝이란,


컴퓨터에 명시적으로 프로그래밍하지 않고 학습할 수 있는 능력을 부여하는 컴퓨터 과학의 하위분야입니다.



먼저

AI(인공지능) 과 ML(머신러닝), Deep Learning(딥러닝)의 차이와 그 범주에 대해 알아볼까요?


AI vs Machine Learning vs Deep Learning출처: https://blogs.nvidia.com



AI란, Artificial Intelligence의 약자로, 사고나 학습 등 인간이 가진 지적 능력을 컴퓨터를 통해 구현하는 기술을 의미합니다.


머신러닝이란, 컴퓨터가 스스로 학습하여 인공지능의 성능을 향상시키는 기술을 의미합니다.


딥러닝이란, 인간의 뉴런과 비슷한 인공신경망 방식으로 정보를 처리하는 기술을 의미합니다.




머신러닝의 원리를 알아보겠습니다.


출처: https://www.networkworld.com


먼저, 그림과 같이 컴퓨터에게 문제와 답을 알려줍니다.


이후, 관련 문제를 내면 컴퓨터가 정답을 알아 맞추게 됩니다.


이것이 가능한 이유는

컴퓨터가 데이터(문제) 답(label)으로 학습하며 직접 프로그램(알고리즘)을 작성하기 때문입니다.




머신러닝의 종류는 크게 3가지로 나눌 수 있습니다.


 

1. 지도학습


2. 비지도 학습


3. 강화학습




1. 지도학습 (Supervised Learning)


훈련데이터와 정답을 가지며, 데이터를 분류/예측하는 함수를 만들어내는 기계학습 방법


종류1. 분류

KNN(K-Nearest Neighbors), 나이브 베이즈, 결정트리, 서포트 벡터머신, 아프리오 알고리즘


종류2. 회귀

선형회귀(Linear Regression), 신경망



2. 비지도학습 (Unsupervised/Predictive Learning)


정답없이 훈련데이터만 가지고 데이터로부터 숨겨진 패턴을 탐색하는 기계학습의 방법


종류: 클러스터링

연관규칙(apriori), k-means



3. 강화학습 (Reinforcement Learning)


어떤 환경에서 정의된 에이전트가 현재 상태를 인식하여 선택 가능한 행동들 중 보상을 최대화하는 행동 혹은 행동 순서를 선택하는 방법





오늘은 여기까지!


다음은 R을 이용한 머신러닝으로 돌아오겠습니다! 

반응형
반응형



안녕하세요~

오늘은 R의 가장 큰 장점이라고 할 수 있는 시각화! 에 대해 다뤄보고자 합니다.

간단하게 그래프의 종류를 알아보면서
분석하고자하는 데이터에 맞는 그래프를 선택하는 방법에 대해 알아보도록 하겠습니다!



<그래프의 종류>



   1. 막대그래프


   2. 원형그래프


   3. 산포도/라인(PLOT)그래프


   4. 지도그래프


   5. 소리를 시각화


   6. 구글에서 제공하는 그래프


   7. 워드 클라우드


   8. 사분위수 그래프 



그래프 그리는 방법은 구글에서 쉽게 찾을 수 있습니다!

(궁금하신 분은 링크를 따라가보세요)



따라서


이번 포스팅에서는

다양한 그래프

막대그래프와 원형그래프, 라인그래프

3가지 R 그래프를 선택하는 방법을 알아봅시다!



1. 막대 그래프


: 데이터의 크기의 차이를 디테일하게 확인해야 할 때



<job 별 토탈월급 비율>



2. 원형 그래프


: 데이터의 비율을 확인할 때



<job 별 토탈월급 비율>


* 참고: 원형 그래프는 비율을 확인할 때 유용하지만 크기의 차이를 그래프로만 확인할 때 잘 표현할 수 없습니다.



3. 산포도 그래프


: 시간의 흐름에 따른 데이터의 변화를 확인할 때

& 데이터 간의 상관관계를 확인할 때



<salary 와 commission의 관계>



<나이와 소득의 관계>



* 추가: 상관관계 확인하는 방법



R >> cor( 소득, 나이)


r = 0.8553024


즉, 소득과 나이 사이의 상관관계는 매우 높다는 것을 알 수 있습니다.




오늘은 여기까지~


다음은 머신러닝으로 돌아오겠습니다!

반응형
반응형

안녕하세요 오랜만에 돌아왔습니다~


SQL에 이어


데이터 분석, 머신러닝을 위한 R에 대해 포스팅하겠습니다~




우선 R에 대해 알아야겠죠?



BASIC그림 출처: https://vimeo.com/basicagency




가장 먼저

R로 데이터를 로드하고 패키지를 사용하는 방법에 대해 알아보겠습니다.



Tip 1. csv파일을 R에서 로드하는 방법


 

read.csv( "파일위치", header = T)



Tip 2. 변수에 넣기


 

변수이름 <- read.csv( "파일위치", header = T)




Tip 3. 패키지 설치하는 방법


 

install.packages("패키지이름")



Tip 4. 라이브러리 사용하는 방법


 

library("라이브러리이름")






이제 기본적인 R의 자료구조와 연산자 그리고 함수에 대해 알아보겠습니다!



1. R의 자료구조




 

Vector: 같은 데이터 타입을 갖는 1차원 배열구조


Matrix: 같은 데이터 타입을 갖는 2차원 배열구조


Array: 같은 데이터 타입을 갖는 다차원 배열구조


Data Frame: 각각의 데이터 타입을 갖는 컬럼으로 이루어진 2차연 배열구조 (데이터베이스의 table과 유사함)


List: 서로 다른 데이터 구조의 데이터 타입(vector, matrix, array, data frame)이 중첩된 구조





2. R의 연산자



 

산술 연산자: + , - , / , * , ^, %% 등..


비교 연산자: > , < , >= , <= , == , != 


논리 연산자: & , && (and) , | , || (or) , ! (not)




* 참고1: R에서 같음을 비교하는 연산자는 == 이다.

 = (equal) 을 두개 사용해야한다.



* 참고2: &과 &&, | 과 || 의 차이


& 과 | 는 벡터화된 연산에 사용된다.


&& 과 || 는 벡터화 되지 않은 연산에서 사용한다.




3. R 의 기본 함수



 

문자함수: toupper, tolower, substr, gsub, paste , ...


숫자함수: round, tunc, ..


날짜함수: Sys.Date(), defftime, ...


변환함수: as.character, integer, as.Date, as.factor, format, ... 


일반함수: is.na, ifelse, ...


그룹함수: max, min, sum, length, table, ...





이 중 format, ifelse, length 함수에 대해 더 자세히 알아볼까요?



1. format 함수


 

format(as.Date('2018/05/15'), '%A')


결과: "화요일"



* 참고: as.Date는 날짜로 변환시켜주는 변환 함수



format 함수에서 '%A'자리에 쓸 수 있는 것과 의미


'%A' : 요일을 출력 / '%Y' or '%y' : 연도 / '%m' : 달 / '%d' : 일 / '%H' : 시간 / '%M' : 분 / '%S': 초



2. ifelse 함수


 

ifelse( 등급 == 1 , 'A' , 'B' )



ifelse ( 조건 , 조건 True , 조건 False)


* 참고: ifelse는 중첩하여 사용할 수 있다. 



3. length 함수


 

x <- c( 1, 2, 3)


length(x)


결과: 3



벡터이든 행렬이든 전체 원소의 갯수를 출력




추가적으로!


만약 원하는 함수가 패키지에도 존재하지 않을 때!

혹은

나만의 함수를 만들고 싶을 때!




함수를 생성하는 방법에 대해 알아보도록 하겠습니다.



 

함수이름 <- function(parameter, ...) {


(if / for .. 등 연산)


}



*참고: R에서 사용자 정의 함수에서 return문은 필수가 아니다.




예제: 앞으로 다가올 요일의 날짜를 출력하는 함수







오늘은 여기까지~


다음은 시각화로 찾아오겠습니다!



반응형
반응형


안녕하세요


오늘은 SQL 마지막 포스팅으로


SQL에 특화된 프로그래밍 언어인

PL/SQL에 대해 알아보도록 하겠습니다!



PL/SQL이란?


SQL을 확장한 절차적 언어로

관계형 데이터베이스에서 사용되는 Oracle의 표준 데이터 엑세스 언어입니다.


그렇다면 PL/SQL을 왜 배워야 할까요?


우선 큰 규모의 화사는 데이터를 대부분 오라클에 저장합니다.


하지만

SQL만으로 데이터를 분석하고 처리하려면 많은 노력이 수반됩니다.



PL/SQL을 사용하면 아래와 같은 장점이 있습니다.



 1. PL/SQL을 이용하면 SQL로 반복해서 해야하는 작업을

보다 단순하게 처리할 수 있습니다.


2. R로 데이터 분석을 하기위해 엑셀 등으로

DB의 데이터를 내려받아 분석하는 것이 아니라,

바로 DB에서 PL/SQL을 이용해서 분석할 수 있습니다.


3. SQL 튜닝 방법 중 하나로 PL/SQL을 사용할 수 있습니다.





PLSQL 기본구조


 

     declare

                선언문 (변수, 예외, 커서 등을 선언한다.)

     

     begin

                실행절 (SQL 문, IF 문, LOOP 문 등을 실행한다.)


     end;

/





예제를 통해 활용해보도록 합시다!


[예제를 위한 테이블]


[ emp ] : 사원테이블


사원명

사원번호

직업

연봉 

부서

 A

1001

 MANAGER

 3000

 파주

 B

1002

 SALESMAN

 1600

 제주

 C

1005

 PRESIDENT

 5000

 서울

 D

1024

 SALESMAN

 1400

 파주

 E

2024

 ANALYST

 3000

 서울 

 F

2215

 SALESMAN

 1350

 서울

 G

2015

 MANAGER

 2900

 일산

 H

1240

 ANALYST

 3000

 파주

 I

3415

 SALESMAN

 1700

 서울




예제1. 사원번호를 입력하면 해당 사원의 월급에 대한 순위가 출력되게 하시오

(단, 없는 사원번호를 입력하였을 때 예외처리를 하시오)



설명)


1. set serveroutput on 을 사용하여 데이터를 출력하는 dbms_output.put_line함수를 이용할 수 있다.


2. accept는 데이터를 입력받기 위한 것으로

&치환변수를 이용하여 값을 입력받는다.


3. exception이란 예외처리하는 것으로

no_data_found란 데이터가 없을 때 발생하는 오류로

오라클에서 지정해 놓은 예외처리 방법 중 하나이다.




예제2. 직업을 입력하면 해당 직업의 토탈월급이 출력되는 함수를 생성하고 실행하시오.



설명)


1. create를 이용하여 함수를 생성한다.


2. 가로의 값은 입력받을 파라미터를 지정하는 것이다.


3. return 값이 꼭 존재해야하며,

여기서는 v_sumsal의 타입인 number로 지정한다.



사용방법)


SQL> SELECT 사원명, 직업, job_sal_sum('SALESMAN') FROM emp;




예제3. 직업, 부서별 토탈월급을 출력하시오

(PL/SQL 프로시져를 이용하세요)



우선 SQL을 이용하면 아래와 같습니다.



SQL> SELECT  직업, sum( decode(부서, '서울', 연봉, 0) ) "서울",

sum( decode(부서, '파주', 연봉, 0) ) "파주",

sum( decode(부서, '일산', 연봉, 0) ) "일산"

FROM emp

GROUP BY 직업;




[결과]


 직업

 서울

 파주

 일산

 MANAGER

 

 3000

 2900

 SALESMAN

 3050

 1400

 

 PRESIDENT

 5000

 

 

 ANALYST

 3000

 3000

 




사용방법)


SQL1> variable v_result1 refcursor;


SQL2> exec job_dept(:v_result1);


SQL3> print v_result3;



설명)


프로시져란 PLSQL 코드를 database에 저장하기 위한 것으로

함수와 달리 return절이 없으며 결과를 반드시 출력하지 않아도 됩니다.


1. 연결 연산자와 함수를 이용하여 SQL문을 완성합니다.


2. 만약 부서가 위의 테이블보다 훨씬 많이 존재한다고 가정한다면,


for loop문을 이용하여 만든 PLSQL문이 보다 효율적이며,

부서가 추가되었을 때에도 코드를 수정하지 않아도 된다는 장점이 있습니다.





PL/SQL을 간단히 다뤄보았습니다!


더 궁금한 점이 있다면 댓글로 남겨주세요~


반응형

+ Recent posts