반응형

안녕하세요


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


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


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


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


그 첫 번째 포스팅!


오늘은

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

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




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


로그의 기원은

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

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

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


즉, 로그의 발명은

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

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



<지수와 로그 관계>


위의 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주뒤에 봐요~

반응형
반응형

추출, 정제하기




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


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

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


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


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

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

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
반응형


SQL이란,



 관계형 데이터베이스 관리 시스템에서


 자료의 검색 및 관리 등을 위해 설계된 프로그래밍 언어입니다.


출처: 위키백과




이러한 SQL 에는 다양한 함수가 존재하는데요.


이러한 함수는 크게 '단일 행 함수'와 '복수 행 함수'로 나뉠 수 있습니다.






오늘은 단일 행 함수의 속하는 다양한 함수 중 문자함수에 대해 알아보겠습니다.





데이터 검색을 할 때 함수가 필요한 이유는 무엇일까요?



그 이유는!



함수를 이용하면 더 다양하게 데이터를 검색할 수 있기 때문입니다.



문제를 통해 이 사실을 확인합시다.


현재 DB에 있는 EMAIL의 형식을 아래와 같이 가정합니다.


                       '아이디 @ naver.com'

'아이디 @ daum.com'

'아이디 @ gmail.com'


 .

 .

 .

 .




과연 함수 없이 다음 문제를 풀 수 있을까요?



문제1. 이메일에서 @가 몇 번째 철자에 있는지 알려주세요!



문제2. 내 이메일 주소를 다른 사람이 알 수 없도록 다른 철자로 변경해주세요!



문제3. 이메일을 입력하다 모르고 처음에 공백을 넣어서 찾을 수가 없습니다. 해결해주세요.




이때 사용하는 함수를 각각 소개하겠습니다.


문제1. 이메일에서 @가 몇 번째 철자에 있는지 알려주세요!






이 때 사용하는 함수가 바로 INSTR 함수입니다.


instr함수는 특정 철자가 단어에서 몇 번째 철자인지 확인하는 함수죠!


(단, 처음 나오는 특정 철자의 자리를 알려준답니다!)



형식: 


 INSTR (string, substring [, position ] )



'string'


 입력할 문자열을 지정하는 부분입니다.



'substring'


 위치를 반환할 문자열을 지정하는 것입니다.



'position'


 탐색을 시작할 string의 위치를 나타내며, 문자 재수 단위로 지정됩니다.

 이 인자가 생략되면 기본값인 1이 적용됩니다. 즉, 선택사항이죠



반환 값은 INT 형식으로 숫자가 return됩니다.


출처: CUBRID




문제2. 내 이메일 주소를 다른 사람이 알 수 없도록 다른 철자로 변경해주세요!





물론 더 좋은 보안 시스템을 이용할 수도 있죠.




하지만,


제가 여기서 강조하고 싶은 부분은 바로 'regexp_replace'함수 입니다.



regexp_replace 함수는 여러개의 철자를 한번에 다른 철자로 변경하는 함수입니다.



형식:


REGEXP_RPLACE ( source_string, pattern [ , replace_string [ , position] ] ) 



'source_string'


 열 이름 같이 검색할 문자열 표현식입니다.



'pattern'


 SQL 표준 정규 표현식 패턴을 나타내는 문자열 리터럴입니다.



'replace_string'


 발견되는 패턴을 각각 변형할 문자열 표현식(열 이름 등) 입니다. 기본값은 빈 문자열 입니다.



'position'


source_string 내에서 검색을 시작할 위치를 나타내는 양의 정수입니다. 이 위치는 바이트가 아닌 문자 수를 기준으로 하기 때문에 멀티바이트 문자도 단일 문자로 계산됩니다. 기본 값은 1입니다.



반환 값은 VARCHAR 형식으로 문자가 return 됩니다.


출처: AWS




추가) 만약 특정 철자만 다른 철자로 변경하고 싶다면 어떻게 해야할까요?



바로 replace 함수를 이용하면 됩니다.


비교해서 알아두면 좋습니다.


replace 함수와 regexp_replace 함수의 차이를 찾아보도록해요~

여기 (엄청 많은 포스팅이 있습니다!)




마지막 문제!!


문제3. 이메일을 입력하다 모르고 처음에 공백을 넣어서 찾을 수가 없습니다. 해결해주세요.





여기서 소개할 함수는 'TRIM' 함수 입니다.


TRIM함수는 특정 철자를 잘라내는 함수 입니다.

TRIM함수의 종류와 기능은 아래와 같습니다.


TRIM()

--> 양쪽 공백을 잘라내겠다

RTRIM()

--> 오른쪽 공백을 잘라내겠다.

LTRIM()

--> 왼 공백을 잘라내겠다.



형식:


TRIM( [ BOTH ] [ 'characters' FROM ] string] ) 



'BOTH'


LEADING : 왼쪽에서 제거  


TRAILING : 오른쪽에서 제거


BOTH : 양쪽에서 제거


특별히 설정해주는 값이 없으면 기본값은 BOTH 입니다.



'characters'


문자열에서 잘라낼 문자입니다. 이 파라미터를 생략하면 공백이 잘립니다.


'string'


자르기 대상이 되는 문자열입니다.



반환 값은 varchar 또는 char 문자열을 return 합니다.


출처: aws, 좋은 블로그






우와! 드디어 끝!!!


여기까지 보신 분들 오늘 남은 시간도  화이팅 합시다!



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



반응형

+ Recent posts