반응형

안녕하세요


빅데이터에 관심이 있으신 분들은 머신러닝과 딥러닝에 수학, 통계가 필요하다는 것을 아실 겁니다.


하지만 어떤 개념이 필요한지 알려주는 사이트가 없었습니다.


그래서 머신러닝 & 딥러닝 & 빅데이터 분석가를 꿈꾸는 학생으로서


이렇게 찾아뵙게 되었습니다!!


그 첫 번째 포스팅!


오늘은

머신러닝의 결정트리와 딥러닝의 신경망 활성화 함수, 오차함수에 사용되는

로그상용로그에 대해 알아보도록 하겠습니다.




우선, 로그란 무엇이며 왜 사용할까요?


로그의 기원은

중세시대 천문학이 자연과학으로 발전될 때,

매우 큰 수로 이루어지는 천체의 관측 자료를

정리하거나 계산을 간단히 하기위해 사용되었습니다.


즉, 로그의 발명은

큰 숫자를 작은 숫자로 표현하기 위해,

덧셈과 뺄셈만큼이나 곱셈과 나눗셈을 간단히 하려는 생각에서 비롯된 것이죠.



<지수와 로그 관계>


위의 logarithm form을 해석해보면,


a를 밑으로 하는 N의 로그라고 합니다.


또, N을 log a N의 진수라고 합니다.



오라클에서도 LOG함수를 지원합니다.



SQL> SELECT log(a, N) FROM dual;

 


위의 dual이란, 결과를 보기위한 가상의(더미) 테이블입니다. 



그럼 로그의 성질을 알아볼까요?



위의 성질이 성립함을 알고 싶으시다면 쉽게 찾아보실 수 있습니다.


여기서는 중요한 부분이 아니므로 pass!



문제1. 2log 3 6 - log 3 (4/9) 의 값을 구하여라.




상용로그란 무엇일까요?


우선 상용의 뜻은 항상 사용한다는 의미입니다.


우리가 가장 많이 사용하는 진법은 2진법도, 8진법도, 16진법도 아닌 10진법이죠?


따라서 상용로그는 로그에서 밑을 10으로 하는 로그라고 합니다!


따라서 다음과 같이 표기합니다.



log10 N = log N

 


즉 밑수가 없는 경우 상용로그라고 합니다!


상용로그도 오라클 로그함수로 사용할 수 있답니다.



문제2. 오라클 SQL문으로 다음의 값을 구하라



(1) log 123


(2) log 0.0345

 



상용로그 표를 보면 풀 수 있는 문제지만


ORACLE, R, PYTHON 등의 응용 프로그래밍 언어를 이용하면

보다 쉽게 풀 수 있답니다.



R과 PYTHON 등의 문법과 딥러닝에 사용하는 방법은


다음에 각 카테고리별로 가 포스팅하겠습니다~




오늘은 여기까지!


다음 포스팅은 2주뒤에 봐요~

반응형
반응형

안녕하세요! 


오늘은

인덱스에 대해 알아보겠습니다.



책에는 목차, 즉 인덱스가 있습니다.

우리는 책의 내용을 찾을 때 이 인덱스를 이용하죠~


SQL 인덱스는 책의 목차와 같은 기능을 합니다.


따라서 인덱스를 검색 속도를 높이기 위해 사용할 수 있습니다.


예제를 통해 인덱스에 대해 알아보도록 하겠습니다.


예제를 위한 테이블입니다.


[ 고객 테이블 ]


고객이름

 나이

  주소 

 총구매액

 전화번호

 추천인

 A

 24

 서울

 30000

 010-0123-4567

 null

 B

 29

 서울

 10000

 010-1234-5678

 A

 C

 26

 파주

 25000

 010-2345-6789

 A

 D

 27

 제주

 1000

 010-3456-7891

 B




우선 인덱스 생성 방식은 2가지 방법이 있습니다.



     자동으로 생성:


        테이블 정의에서 primary key 또는 unique 제약 조건을

        정의하면 공의 인덱스가 자동으로 생성됩니다.



     수동으로 생성:


         행에 엑세스하는 속도를 높이기 위해 유저가

         열의 비고유 인덱스를 생성할 수 있습니다.




예제1. 고객이름 컬럼에 인덱스를 생성하세요.




여기서 잠깐!

인덱스를 생성할 때 주의할 점이 있습니다.


우선 인덱스는 검색할 때 꼭 필요한 컬럼에만 인덱스를 걸어줘야 합니다.


자주 사용되는 컬럼에 인덱스를 생성하면 좋겠죠?



하지만


테이블에 인덱스가 많은 경우,

또한 자주 생성, 갱신, 삭제되는 테이블의 경우


인덱스를 생성하면


DML작업 후에 모든 인덱스를 갱신해야하므로

서버의 부담이 늘어납니다.



예제2. 고객 이름, 나이, 주소, 전화번호를 검색할 때 인덱스를 이용하세요.




인덱스를 사용하는 SQL 작성 방법 2가지가 있습니다.



     1. WHERE절 검색에 사용되는 컬럼에 인덱스가 존재하는지

         확인해야한다.


     2. WHERE절 검색에 사용되는 컬럼을 가공하면

         FULL TABLE SCAN을 한다.


     3. WHERE절 검색에 사용되는 컬럼이 가공되지 않았는데도

        인덱스를 엑세스하지 못하는 경우에 암시적 형변환 여부를

        확인해봐야 한다.



인덱스를 생성한 후


쿼리문에서 인덱스를 활용하기위해서는


WHERE절 검색에 인덱스가 존재하는 컬럼을 명시해주어야 합니다.



예제3. 고객이름, 총구매액, 추천인을 검색하는데

총구매액이 가장 높은 고객을 검색하세요.




위와 같이 두가지 또는 세가지의 쿼리의 방법이 있습니다.


과연 어떤 방법이 가장 빠를까요?


여기서 각 쿼리별 시간을 추적해보겠습니다.


 저는 SQLPLUS를 사용하는데요


SQLPLUS명령창에 SET TIMING ON이라는 명령어를 사용하면 시간을 추적할 수 있습니다.


<SQL3 쿼리 시간>




<SQL4_2 쿼리 시간>




<SQL4_3 쿼리 시간>




위의 테이블은 예제를 위해 사용한 테이블과 동일한 DATA를 가진 고객 테이블입니다.


00:00:00.03 의 시간차이를 사소하다고 생각할 수 있습니다.


하지만


빅데이터라면?


만약 천만배, 백만배 이상의 데이터가 존재한다면 그 시간의 차이는 어마어마할 것입니다.



빅데이터를 다루는 분석가는


특히 데이터의 검색 속도를


높일 수 있는 쿼리를 사용해야한답니다~




오늘은 여기까지!


검색의 속도를 높이는 하나의 강력한 방법! 인덱스에 대해 알아보았습니다~



이 글이 도움되셨다면 아래 공감 꾹~ 


#빅데이터분석 #SQL #오라클 #인덱스 #서브쿼리 #검색속도 #빠른검색 #HINT #SET_TIMING_ON

반응형

'SQL' 카테고리의 다른 글

ORACLE | 다중 INSERT문 4가지 방법  (0) 2018.04.17
ORACLE | 치환변수(&) 사용하는 방법  (0) 2018.04.16
ORACLE | VIEW(뷰)  (0) 2018.04.11
ORACLE | SQL제약조건(데이터 정제하기)  (0) 2018.04.10
ORACLE | MERGE문 (DML)  (0) 2018.04.09
반응형


안녕하세요~


코딩하는 euni입니다!


오늘은 오라클 SQL view에 대해 알아보도록 하겠습니다!



뷰는 위의 그림처럼 가상!의 테이블입니다!


더 자세히 알아볼까요?



데이터베이스 객체


뷰는 데이터베이스 오브젝트 5가지 중 하나입니다.



VIEW란?


하나 이상의 테이블에 있는 데이터의 부분 집합을 나타낼 수 있는

리적 테이블 입니다.

(다른 뷰를 기반으로 할 수 있습니다.)


뷰는 자체적으로 데이터를 갖고있지 않지만

테이블의 데이터를 보거나 변경 할 수있습니다.



그럼 뷰가 필요한 이유는 무엇일까요?



      1. 보안상의 이유로 특정 데이터를 조회되지 않도록 하고 싶을 때

                  (데이터 엑세스 제한)


      2. 복잡한 쿼리를 간단하게 조회하고 싶을 때

 



뷰에는 단순 뷰복합 뷰 두 가지 유형이 있습니다.


 기능

 단순 뷰

 복합 뷰

 테이블 수

 1개 

 2개 이상

 그룹 함수 포함 여부

 포함하지 않음

 포함

 DML작업 가능 여부

 가능

 불가능할 수도 있음



뷰옵션 2가지



     1. WITH CHECK OPTION

         : WHERE절에서 기술한 조건에 위배되게 VIEW를 수정하지 못한다.

 

     2. WITH READ ONLY

         : VIEW 전체를 수정, 삭제, 입력이 불가한 상태로 만들겠다.





그럼~ 오늘의 예제로 들어가 볼까요?



[ 고객 테이블 ]


고객이름

 나이

  주소 

 총구매액

 전화번호

 추천인

 A

 24

 서울

 30000

 010-0123-4567

 null

 B

 29

 서울

 10000

 010-1234-5678

 A

 C

 26

 파주

 25000

 010-2345-6789

 A

 D

 27

 제주

 1000

 010-3456-7891

 B



예제1. 서울에 사는 뷰(고객_서울)로 생성하고 싶습니다.

(단 전화번호는 중요한 정보로 이 뷰를 사용하는 사람이 볼 수 없게 해주세요.)




위와 같이 하나의 테이블을 기반으로 생성한 뷰를 단일 뷰라고 합니다.


특징: CREATE VIEW문에 subquery를 포함시킵니다.


참고: 하나의 테이블을 사용하여 view를 만들 때

group 함수를 포함한다면 복합뷰입니다!


뷰 수정 방법: create or replace view절을 사용하여

뷰를 삭제하고 다시 생성할 수 있습니다.



예제2. 고객_서울 뷰에서

고객 B의 총구매액을 20000으로 갱신하는 쿼리문을 작성해주세요




위의 결과는 고객_서울 뷰에 반영되었습니다.




그렇다면 고객 테이블에서는 고객 B의 총구매액이 20000으로 갱신될까요?




그 이유는 뷰는 데이터를 갖고있는 것이 아니고

논리적으로 존재하기 때문이죠.


또 다르게 생각해보면,


만약 뷰로 데이터를 갱신하지 못한다면

기반이 되는 기본 테이블로만 데이터 갱신이 가능하게 되고

새로운 테이블을 만드는 것과 다름이 없게됩니다.

 

동일한 데이터의 다른 뷰를 제공하는 것이 뷰의 또다른 장점입니다!




만약! 특정 VIEW의 데이터를  수정, 삭제, 입력을 불가능하게 하고싶다면?




이때 사용하는 것이 VIEW의 옵션 WITH READ ONLY입니다.

물론 권한을 주는 다른 SQL문도 존재합니다.


하지만

뷰를 생성하면서 데이터 손상을 막기위해

미리 제약을 두는 방법도 사용할 수 있답니다!


(WITH CHECK ONLY절도 위와 같은 방법으로 사용할 수 있습니다.)




오늘은 VIEW(뷰)에 대해 알아보았습니다.


데이터 검색 query의 성능을 향상시키려면 인덱스를 생성하는 것을 추천합니다!


내일은 인덱스로 찾아올께요~

반응형
반응형

추출, 정제하기




빅데이터 분석을 하기 위한 과정 중 시간이 가장 많이 드는 과정이 어떤 과정일까요?


안타깝게도.. 데이터 분석을 하는 시간보다

데이터를 정제하는 시간이 더 많이 든다고 합니다!


더 좋은, 명확한, 유용한 결과를 추출하기 위해서죠!


데이터 정제시간을 줄이기 위해,

데이터의 품질을 높이기 위해

DB에서 미리 제약조건으로 데이터를 CONTROL 합니다!


제약조건이란?


테이블의 데이터를 구체화하는 규칙입니다.


출처: 타위키


<제약조건의 종류>


 

     1. PRIMARY KEY: 중복된 데이터와 null값이 입력되지 않게 막는다.

 

     2. UNIQUE: 중복된 데이터가 입력되지 않게 막는다.


     3. NOT NULL: null값이 입력되지 않게 막는다.


     4. CHECK: 미리 정의된 데이터만 입력되도록 막는다.


     5. FOREIGN KEY: 참조하는 컬럼에 거는 제약




<제약조건을 생성하는 시점>


1. 테이블이 생성되는 시점


2. 테이블 생성 후


주의!

테이블 생성후 제약조건을 사용하기 위해서는

기존에 존재하는 데이터 중 제약에 위반된 데이터가 없어야 합니다.




( 테이블 생성시 )


1. PRIMARY KEY 제약조건 주기


조건: 고객테이블을 생성하며

column은 고객번호, 고객이름, 나이, MOBILE, 주소로 만든다.

PK: 고객번호


      

     SQL1> CREATE TABLE 고객

              ( 고객번호  number(10) PRIMARY KEY,

                고객이름  varchar2(20),

                나이        number(3),

                mobile     varchar2(13),

                email       varchar2(20),

                주소        varchar2(40) );




(테이블 생성 후)


2. UNIQUE 제약조건 주기


조건: 고객테이블에서 mobile 컬럼에 unique 제약조건(customer_mobile_un)을 준다.



     SQL2> ALTER TABLE 고객

               ADD CONSTRAIN customer_mobile_un

               UNIQUE(mobile);

 



(테이블 생성 후)


3. NOT NULL 제약조건 주기


조건: 중요한 데이터로, 꼭 입력받아야하는 데이터인 고객이름에

not null제약조건(customer_cname_nn)을 준다.


 

      SQL3> ALTER TABLE 고객

                MODIFY 고객이름 CONSTRAIN

                customer_cname_nn NOT NULL;




(테이블 생성 후)


4. CHECK 제약조건 주기


조건: email에 @과 .을 포함하는 데이터만 입력 또는 수정되게 한다.

(customer_email_ck)



     SQL4> ALTER TABLE 고객

               ADD CONSTRAIN customer_email_ck

               CHECK (email LIKE '%@%.%');

 



(테이블 생성시 & 테이블 생성 후)


5. FOREIGN KEY 제약조건 주기


조건:  구매 테이블에는 고객번호, 구매품목, 갯수 COLUMN을 가진 구매 테이블을 만든다.

구매 테이블의 고객번호는 고객테이블의 고객번호를 참조한다.




     SQL5_1> CREATE TABLE 구매

                ( 고객번호  number(10),

                 구매품목  varchar2(30),

                 갯수        number(5) );


     SQL5_2> ALTER TABLE 구매

                 ADD CONSTRAIN order_cname_fk

                 FOREIGN KEY(고객번호) REFERENCES 고객(고객번호);

 



<제약조건 이름>


위에서 계속 제약조건의 이름을 지정하였습니다.

order_cname_fk와 같이 말이죠.


그 이유는

이 제약 조건을 나중에 필요가 없어서 제거(DROP)하거나

잠시 중지(DISABLE)시킬 때

제약조건 이름을 사용하기 때문입니다.

 

물론 제약조건의 이름을 주지 않은

고객번호와 같이 제약조건을 준 경우


ORACLE에서 자동으로 SYS_Cn형식으로 이름을 생성합니다.


제약 조건을 확인하는 방법도 있습니다.



     SQL> SELECT table_name, constraint_name, 

                        constraint_type, status

               FROM user_constraints

               WHERE table_name = '테이블명';

 


하지만 조금 귀찮겠죠..?



오늘은 여기까지!!


뿅!

반응형

'SQL' 카테고리의 다른 글

ORACLE | 인덱스 (INDEX)  (2) 2018.04.12
ORACLE | VIEW(뷰)  (0) 2018.04.11
ORACLE | MERGE문 (DML)  (0) 2018.04.09
ORACLE | 서브쿼리 2탄 - MULTIPLE COLUMN SUBQUERY  (0) 2018.04.06
ORACLE | 서브쿼리 1탄 - SINGLE / MULTI ROW SUBQUERY & EXISTS  (0) 2018.04.06

+ Recent posts