Python 으로 if 를 활용한 분기문이나 for, while 을 활용한 반복문 프로그래밍에 들어가기에 앞서서, if, for, while 프로그래밍의 기초 지식이 되는 블리언 형식에 대해서 알아보겠습니다. 


이번 포스팅은 어려운건 없구요, 그냥 편안하게 몸풀기 (머리 풀기?) 정도로 읽어보면 좋겠습니다. 

(not 논리 연산자가 살짝 헷갈리기는 합니다만, 전반적으로 매우 쉬움)


블리언 형식(Boolean type)참(True), 거짓(False) 의 두 개 값을 가지는 자료형을 말합니다. 



# (1) Boolean Type

In [1]: a = 2 > 1


In [2]: a

Out[2]: True


In [3]: b = 2 < 1


In [4]: b

Out[4]: False


In [5]: type(a)

Out[5]: bool

 


불리언 값이 (1) 조건문, (2) 논리 연산자, (3) 비교 연산자에서 어떤 경우에 참(True)이고, 어떤 경우에 거짓(False) 인지에 대해서 짚고 넘어가 보겠습니다. 



[ 파이썬 참/거짓 불리언 형식 (Python Boolean Type ]





 (1) 조건문에서의 참, 거짓 (True, False in Conditional statements)


프로그래밍의 조건문에서 참, 거짓을 판단할 때 블리언 False, None, 숫자 0, 비어있는 리스트, 비어 있는 튜플, 비어있는 사전 자료형의 경우에 False 로 판단을 합니다. 


반대로 블리언 True, not None, 0이 아닌 숫자, 값이 있는 리스트, 값이 있는 튜플, 값이 있는 사전 자료형의 경우 True 로 판단을 하구요. 


자료형마다 값이 없이 비어있으면 거짓, 값을 가지고 있으면 참이라고 파이썬은 판단한다는게 재미있습니다. ^^


각 경우 마다 bool() 함수를 사용해서 파이썬이 참(True)과 거짓(False) 중에 어떻게 판단을 하는지 예를 들어서 살펴보겠습니다. 



# (1-1) Boolean False, True

In [6]: bool(False) # False

Out[6]: False


In [7]: bool(True) # True

Out[7]: True

 



# (1-2) None is False

In [8]: bool(None) # False

Out[8]: False

 



# (1-3) Number 0, 0.00 is False

In [9]: bool(0) # False

Out[9]: False


In [10]: bool(0.00) # False

Out[10]: False


In [11]: bool(5) # True

Out[11]: True

 



# (1-4) blank List [] is False

In [12]: bool([]) # False

Out[12]: False


In [13]: bool(['a', 'b']) # True

Out[13]: True

 



# (1-5) blank Tuple () is False

In [14]: bool(()) # False

Out[14]: False

In [15]: bool(('a', 'b')) # True

Out[15]: True

 



# (1-6) blank Dictionary {} is False

In [16]: bool({}) # False

Out[16]: False

In [17]: bool({'a': 'b'}) # True

Out[17]: True

 




  (2) 논리 연산자에서 참, 거짓 (True, False in Logical operators) : not, and, or


파이썬의 논리 연산자(Logical operators)에는 피연산자를 부정하는 not, 두 피연산자 간의 논리곱을 수행하는 and, 두 연산자 간의 논리합을 수행하는 or 의 3가지가 있습니다. 



(2-1) 피연산자를 부정하는 'not' 논리 연산자 


위에서 소개한 조건문에서의 참, 거짓에 not 연산자를 붙이면 참이 거짓으로 바뀌고, 거짓은 참으로 바뀌게 됩니다. 



# (2-1) 피연산자 부정 'not' logical operator


In [18]: not True # False

Out[18]: False


In [19]: not False # True

Out[19]: True

 



숫자 '0'은 거짓(False)라고 했으므로 앞에 부정 연산자 not 이 붙으면 참(True)이 됩니다. 반면, '0'이 아닌 숫자는 참(True)이라고 했으므로 앞에 not 이 붙으면 거짓(False)으로 바뀝니다. 



In [20]: not 0 # True

Out[20]: True


In [21]: not 5 # False

Out[21]: False

 



None 은 거짓(False)라고 했으므로 not None은 참(True)로 평가합니다. 



In [22]: not None # True

Out[22]: True

 



비어있는 문자열, 리스트, 튜플, 사전은 거짓(False)으로 평가한다고 했으므로, 피연산자를 부정하는 not 이 붙으면 참(True)으로 바뀌게 됩니다. 



In [23]: not '' # denial of blank String -> True

Out[23]: True


In [24]: not [] # denial of blank List -> True

Out[24]: True


In [25]: not () # denial of blank Tuple -> True

Out[25]: True


In [26]: not {} # denial of blank Dictionary -> True

Out[26]: True

 



반대로, 문자열, 리스트, 튜플, 사전에 값이 들어있는 경우 참(True)으로 평가한다고 했으므로, 피연산자를 부정하는 not이 붙으면 거짓(False)이 됩니다.  위와 아래의 비어있는 자료형에 not 붙인 경우와 값이 있는 자료형에 not 붙인 경우의 참, 거짓이 처음엔 좀 직관적으로 와닿지가 안던데요, 자꾸 보니깐 그러려니 하게 되네요. ^^'



In [27]: not 'ab' # False

Out[27]: False


In [28]: not ['a', 'b'] # False

Out[28]: False


In [29]: not ('a', 'b') # False

Out[29]: False


In [30]: not {'a' : 'b'} # False

Out[30]: False

 




(2-2) 두 피연산자 간의 논리곱을 수행하는 and 논리 연산자


두 개의 피연산자가 모두 참(True and True)이면 True 이며, 두 피연산자 값 중에서 하나라도 거짓(False)이 있으면 거짓(False) 으로 판단합니다. 



# (2-2) 논리곱 'and' logical operator

In [31]: True and True # True

Out[31]: True


In [32]: True and False # False

Out[32]: False


In [33]: False and True # False

Out[33]: False

 

In [34]: False and False # False

Out[34]: False





(2-3) 두 피연산자 간의 논리합을 수행하는 or 논리 연산자


두 피연산자 중에서 한 개(True or False, False or True)나 혹은 두개 모두(True or True) 이라도 참(True)이면 참으로 평가합니다. 



# (2-3) 논리합 'or' logical operator

In [35]: True or True # True

Out[35]: True


In [36]: True or False # True

Out[36]: True


In [37]: False or False # False

Out[37]: False

 




  (3) 비교 연산자에서의 참, 거짓 (True, False in Comparison operators) : ==, !=, >, >=, <, <=


(3-1) == 비교 연산자


두 피연산자의 값이 같으면 참(True), 서로 다르면 거짓(False)으로 평가



# (3) Comparison(Relational) operators


In [39]: a = 1; b = 2; c = 2 # input data



# (3-1) == : If the values of two operands are equal, then the condition becomes true


In [40]: a == b # False

Out[40]: False


In [41]: b == c # True

Out[41]: True

 



(3-2) != 비교 연산자


두 피연산자의 값이 같지 않으면 참(True), 같으면 거짓(False)으로 평가 (음... 좀 헷갈리지요. ^^;)



In [39]: a = 1; b = 2; c = 2 # input data

# (3-2) != : If values of two operands are not equal, then condition becomes true

In [42]: a != b # True

Out[42]: True


In [43]: b != c # False

Out[43]: False

 



(3-3) > 비교 연산자


: 왼쪽의 피연산자 값이 오른쪽의 피연산자 값보다 크면 참(True), 아니면 거짓(False)



In [39]: a = 1; b = 2; c = 2 # input data


# (3-3) > : If the value of left operand is greater than the value of right operand, 

# then condition becomes true


In [44]: a > b # False

Out[44]: False


In [45]: b > a # True

Out[45]: True


In [46]: b > c # False

Out[46]: False

 



(3-4) >= 비교 연산자


왼쪽의 피연산자 값이 오른쪽의 피연산자 값보다 크거나 같으면 참(True), 아니면 거짓(False)



In [39]: a = 1; b = 2; c = 2 # input data


# (3-4) >= : If the value of left operand is greater than or equal to the value of right operand, 

# then condition becomes true


In [47]: a >= b # False

Out[47]: False


In [48]: b >= a # True

Out[48]: True


In [49]: b >= c # True

Out[49]: True

 



(3-5) < 비교 연산자


왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작으면 참(True), 아니면 거짓(False)



In [39]: a = 1; b = 2; c = 2 # input data

# (3-5) < : If the value of left operand is less than the value of right operand, 

# then condition becomes true


In [50]: a < b # True

Out[50]: True


In [51]: b < a # False

Out[51]: False


In [52]: b < c # False

Out[52]: False

 



(3-6) <= 비교 연산자


왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작거나 같으면 참(True), 아니면 거짓(False)



In [39]: a = 1; b = 2; c = 2 # input data


# (3-6) <= : If the value of left operand is less than or equal to the value of right operand,
# then condition becomes true


In [53]: a <= b # True

Out[53]: True


In [54]: b <= a # False

Out[54]: False


In [55]: b <= c # True

Out[55]: True

 



많은 도움이 되었기를 바랍니다. 

이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾸욱 눌러주세요. ^^


다음번 포스팅에서는 if ~ else 분기문(Branch statement)에 대해서 알아보겠습니다. 



Posted by R Friend R_Friend

댓글을 달아 주세요

 

 

이번 포스팅에서는 Hive 에 내장되어 있는

 

 - (1) 프로젝션 연산자 SELECT ... FROM 

 

 - (2) 비교 연산자 (Relational operators)

 

 - (3) 산술 연산자 (Arithmetic operators)

 

 - (4) 논리 연산자 (Logical operators)

 

 - (5) 복합 연산자 (Complex operators)

 

에 대해서 알아보겠습니다.

 

 

[ HiveQL Operators : 프로젝션 연산자, 비교 연산자, 산술 연산자, 논리 연산자, 복합 연산자 ]

 

 

 

 

(1) 프로젝션 연산자 SELECT ... FROM

 

아래와 같은 테이블을 생성했다고 했을 때,

 

CREATE TABLE IF NOT EXISTS mydb.my_table (
    var_1 STRING COMMENT 'var_1 is this',
    var_2 FLOAT COMMENT 'var_2 is that',
    var_3 INT COMMENT 'var_3 is those',
    var_4 ARRAY<STRING> COMMENT 'arrary is...',
    var_5 MAP<STRING, FLOAT> COMMENT 'map is...',
    var_6 STRUCT<aa:STRING, bb:FLOAT, cc:INT> COMMENT 'structure is...'
COMMENT 'my_table in mydb'
TBLPROPERTIES ('creator'='HongKilDong', 'data'='2016-06-17', ...)
--LOCATION '/user/hive/warehouse/mydb.db/my_table'
)
PARTITIONED BY (year INT, month INT, day INT);

 

 

 

-- SELECT var_nm FROM table

SELECT var_1, var_2 FROM my_table;

 

 

-- ARRAY : ["aaaaaaa", "bbbbbbbb"]

SELECT var_4 FROM my_table;

 

 

-- MAP : {"key1":xx, "key2":yy}

SELECT var_5 FROM my_table;

 

 

-- STRUCT : JSON map {"aa":"xxx", "bb":yy.y, "cc":zzz}
SELECT var_6 FROM my_table;

 

 

 

(2) HIVE 비교 연산자 (Relational Operators)

 

연산자

데이터형

설명 

 A = B

all primitive types

 A와  B가 같으면 TRUE, 그렇지 않으면 FALSE

A != B

all primitive types

 A와 B가 같지 않으면 TRUE, 그렇지 않으면 FALSE

A < B

all primitive types

 A가 B보다 작으면 TRUE, 그렇지 않으면 FALSE

A <= B

all primitive types

 A가 B보다 작거나 같으면 TRUE, 그렇지 않으면 FALSE

A > B

all primitive types

 A가 B보다 크면 TRUE, 그렇지 않으면 FALSE

A >= B

all primitive types

 A가 B보다 크거나 같은면 TRUE, 그렇지 않으면 FALSE

A IS NULL

all types

 A가 NULL 이면 TRUE, 그렇지 않으면 FALSE

A IS NOT NULL

all types

 A가 NULL이 아니면 TRUE, 그렇지 않으면 FALSE

A LIKE B

Strings

 String 패턴 A가 B와 동일하면 TRUE, 그렇지 않으면 FALSE

A RLIKE B

(A REGEXP B)

Strings

 A 또는 B가 NULL이면 NULL,

 A의 어떤 substring이라도 B와 동일하면 TRUE,

 그렇지 않으면 FALSE

 

 

 

-- Retrieve details from DB using relational operators

SELECT * FROM my_table WHERE var_1='HongKilDong';
SELECT * FROM my_table WHERE var_3>=100;
SELECT * FROM my_table WHERE BETWEEN var_2 >= 0.1 and var_2 <= 2.0;
SELECT * FROM my_table WHERE var_1 IS NOT NULL;

 

 

 

(3) HIVE 산술 연산자 (Arithmetic Operators)

 

 연산자

데이터형 

설명 

 A + B

all number types

 더하기 (adding A and B)

 A - B

all number types 

 빼기 (substracting B from A)

 A*B

all number types

 곱하기 (multiplying A and B)

 A/B

all number types

 나누기 (dividing B from A)

 A%B

all number types

 나눈 후의 나머지 반환

 (reminder resulting from diving A by B)

A&B 

all number types

 비트 AND 연산 (bitwise AND of A and B)

A|B 

all number types

 비트 OR 연산 (bitwise OR of A and B)

A^B 

all number types

 비트 XOR 연산 (bitwise XOR of A and B)

~A 

all number types

 비트 NOT 연산 (bitwise NOT of A)

 

 

 

-- 산술 연산자

SELECT (var_1 + var_2) as var_1_2_sum FROM my_table;

SELECT var_1*var_2 as var_1_2_multi FROM my_table;

 

 

 

(4) HIVE 논리 연산자 (Logical Operators)

 

 연산자

데이터형

설명 

 A AND B

(A && B)

boolean 

 A와 B 모두 TRUE이면 TRUE, 그렇지 않으면 FALSE

 A OR B

(A || B)

boolean

 A 또는 B, 또는 A와 B가 모두 TRUE이면 TRUE,

 그렇지 않으면 FALSE

 NOT A

(!A)

boolean

 A가 FALSE이면 TRUE, 그렇지 않으면 FALSE

 

 

-- 논리 연산자

 

SELECT * FROM my_table WHERE var_3>=100 && var_2 <= 2.0;

 

 

 

 

(5) HIVE 복합 연산자 (Complex Operators)

 

 연산자

데이터형

설명 

 A[n]

A : Array

n : int 

 Array A에서 n번째 값을 출력.

 첫번째 값은 index 0 부터 시작함.

 (* 참고 : R은 index 1 부터 시작함)

 M[key]

 M : Map<K, V>

Key has type K

 Key에 해당하는 Value를 출력함

 S.x

S : STRUCT

 STRUCT의 x field를 출력함

 

 


-- subset selection from ARRAY : [index number]

SELECT var_1, var_4[0] FROM my_table; -- index starts from '0' (not from '1')

 

 

-- subset selection from MAP : ["key"]

SELECT var_1, var_5["key1"] FROM my_table;

 

 

-- subset selection from STRUCT : dot notation

SELECT var_1, var_6.aa FROM my_table;

 

 

다음 포스팅에서는 Hive에 내장되어 있는 수학 함수와 집계함수에 대해서 알아보겠습니다.

 

[Reference]

1) Programing Hive, Edward Capriolo, Dean Wampler, Jason Rutherglen, O'REILLY

2) http://www.tutorialspoint.com/hive/hive_built_in_operators.htm

 

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요.

 

 

Posted by R Friend R_Friend

댓글을 달아 주세요