Python Basics for Data Science - PART 2

Python Basics for Data Science - PART 2

( 파이낸스 데이터 사이언스를 위한 파이썬 언어 기초 )

연산자, 문자열, 흐름 제어(if, for, while)

2017 FinanceData http://fb.com/financedata

산술 연산자

산술 연산자(arithmetic operator)는 사칙연산, 나머지, 제곱 등의 연산을 수행한다.

  • +, -, *, / (사칙연산)
  • % (나머지)
  • // (정수 나눗셈)
  • ** (제곱)
In [1]:
a = 15
b = 4

a + b, a - b, a * b, a / b
Out[1]:
(19, 11, 60, 3.75)
In [2]:
# a를 b로 나눈 나머지

a % b
Out[2]:
3
In [3]:
10.5 // 3.5
Out[3]:
3.0
In [4]:
2 ** 10
Out[4]:
1024

부울 연산자

부울 연산자 (boolean operator 혹은 논리 연산)는 and, or, not 연산을 수행한다. 결과는 항상 True 혹은 False 이다.

  • and, or, not
In [5]:
True and False
Out[5]:
False
In [6]:
not False
Out[6]:
True

비교 연산자

비교 연산자 (Comparison operators)는 두 대상의 대소비교 혹은 같은지 여부를 비교한다. 연산의 결과는 항상 True 혹은 False 이다

  • > (크다), < (작다), >= (크거나 같다), <= (작거나 같다)
  • != (다르다), == (같은 값인가), is (같은 객체인가)
In [7]:
1 > 2
Out[7]:
False
In [8]:
print( 10 > 3 )
print( 20 != 20 )
print( 17 < (118 %100) )
True
False
True

== 연산자는 값을 비교, is 연산자 동일한 객체인지 비교한다.

In [9]:
print( [10, 20] == [10, 20] )
print( [10, 20] is [10, 20] )
True
False

문자열

작은 따옴표(' single quote) 혹은 큰 따옴표(" double quote)로 표현

In [10]:
s = 'Hello, Python!'
type(s)
Out[10]:
str
In [11]:
print("Hello, 'Python'!")
print('Hello, "Python"!')
Hello, 'Python'!
Hello, "Python"!

탭 문자(\t), 리턴 문자(\n) 등 타이핑해서 입력할 수 없는 특수 문자들을 역슬래시(\)문자와 함께 표시하여 사용할 수 있다. 이를 이스케이프 문자열(escape sequence)라고 한다.

In [12]:
# new line(\n) 문자
s = "Hello, \nPython!"
print(s)
Hello, 
Python!
In [13]:
# 문자열 연결(덧셈)
s = "Hello" + ", World"
print(s)

s = "Hello"
s += ", World"
print(s)
Hello, World
Hello, World
In [14]:
# 문자열의 길이
s = "Hello, Python!"
len(s)
Out[14]:
14

문자열 슬라이스

  • 문자열중의 부분을 지정하기 위해 s[인덱스] 형식으로 사용할 수 있으며, "인덱스"는 0부터 시작한다.
  • s[시작:끝]으로 문자열을 잘라(slice)낼 수 있다. "끝"은 포함되지 않는다.
  • s[시작:끝] 형식을 사용할 때 시작, 끝을 지정하지 않을 수도 있다. "시작"을 지정하지 않으면 '처음부터', "끝"을 지정하지 않으면 '끝까지'라는 의미가 된다.
In [15]:
s = "Hello, Python!"

print(s[0])
print(s[4])
print(s[:])
print(s[0:5])
print(s[7:9])
print(s[-1])
print(s[-5:-1])
H
o
Hello, Python!
Hello
Py
!
thon

문자열 자르기와 바꾸기

  • s.split() 함수는 문자열s 를 공백 문자를 기준으로 잘라 그 결과를 리스트로 반환한다.
  • s.replace(현재문자열, 대체문자열) 함수는 문자열 s에 있는 '현재문자열'을 '대체문자열'로 바꾼다.
In [16]:
# 문자열 분리(split)
s = "화학,출판,전기제품,제약,은행"
s.split(',')
Out[16]:
['화학', '출판', '전기제품', '제약', '은행']
In [17]:
sectors = ['화학', '출판', '전기제품', '제약', '은행']
"|".join(sectors)
Out[17]:
'화학|출판|전기제품|제약|은행'
In [18]:
# 문자열 대체 (replace)
s = "Hello, Python!"
w = s.replace('Python', 'World')
w
Out[18]:
'Hello, World!'
In [19]:
s = '&lt;img width=&quot;300&quot; src=&quot;http://i.imgur.com/tHmNhjm.png&quot;&gt;'
print( s.replace('&lt;', '<').replace('&gt;', '>').replace('&quot;', '"') )
<img width="300" src="http://i.imgur.com/tHmNhjm.png">

if, elif, else

조건에 따라 실행을 달리하기 위한 문으로 if, elif, else 가 있다

In [20]:
ret = 0.1

if ret > 0.0:
    print("상승")
    print('같은 레벨의 들여쓰기로로 블럭을 구분합니다')
else:
    print("하락")
상승
같은 레벨의 들여쓰기로로 블럭을 구분합니다
In [21]:
# True/False를 상승 여부로 가정
# stock01, stock02 True 혹은 False 할당을 바꾸어가면서 실행해보자

stock01 = False 
stock02 = True  

if stock01:
    print("stock01 상승")
elif stock02:
    print("stock02 상승")
else:
    print("stock01 하락, stock02 하락")
stock02 상승
In [22]:
stock01 = True 
stock02 = True  

if stock01:
    if stock02:
        print("stock01 상승, stock02 상승")
stock01 상승, stock02 상승

들여쓰기

  • 파이썬에서 들여쓰기는 매우 중요하다.
  • 같은 칸을 들여쓴 연속된 문장들을 들여쓰기 블럭이라고 한다.
  • 블럭 중간에 공백 라인도 가능하다. 하지만, 들여쓰기 레벨이 달라지면 달라지면 다른 블럭으로 인식된다.
In [23]:
if False:
    print("문장01")
    print("문장02")
print("문장03")
문장03
In [24]:
if True:
    print("문장01")
    
    print("문장02")
문장01
문장02
In [25]:
if True:
    print("문장01")
print("문장02")
문장01
문장02

반복문

  • 주로 while과 for가 있는데 절대적으로 for를 많이 사용한다.
  • for 문은 주로 순회 가능한 객체(iterable object)와 함께 사용한다. list, range 등을 for 문과 함께 자주 사용한다.
In [26]:
values = [1,2,3]

for x in values:
    print(x)
1
2
3

파이썬의 range는 지정한 범위의 정수를 발생시키는데 for 문과 함께 많이 사용한다.

보통 range(시작,끝) 형식으로 사용하는 정수 범위를 만들어낸다. '끝'은 포함되지 않는다.

In [27]:
range(10) # 0~9 (0에서 시작, 10은 미포함)
range(1, 10) # 1~9
range(10, 20, 2) # 10~19, 2씩 건너뛰어서
Out[27]:
range(10, 20, 2)

list()를 사용하여 리스트로 변환할 수 있다.

In [28]:
print(list(range(10)))
print(list(range(1, 10)))
print(list(range(10, 20, 2)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, 12, 14, 16, 18]
In [29]:
for x in range(4):
    print(x, end=', ' )
0, 1, 2, 3, 
In [30]:
for x in range(-2,2):
    print(x, end=', ' )
-2, -1, 0, 1, 
In [31]:
for idx, x in enumerate(range(-3,3)):
    print(idx, x)
0 -3
1 -2
2 -1
3 0
4 1
5 2

목록 조건제시법

목록 조건제시법 (list comprehension)을 사용하면 축약된 형식으로 리스트를 생성할 수 있다.

  • [for ... in ... ] 형식으로 새로운 리스트를 생성하는데 주로 사용한다.
  • 간편하고 축약된 방식으로 표현할 수 있다
In [32]:
#  1~9까지 각 수의 제곱
lst = list(range(1, 19))
lst
Out[32]:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
In [33]:
[x ** 2 for x in lst]
Out[33]:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324]
In [37]:
even_squares = [x ** 2 for x in range(1, 11) if x % 2 == 0]
even_squares
Out[37]:
[4, 16, 36, 64, 100]

while 문

while에 주어진 조건이 True 인 동안 while의 몸체 부분을 실행

while 조건:
  조건이 True인 동안 실행할 내용
In [34]:
count = 0

while count < 5:
    print ("count: ", count)
    count += 1    
count:  0
count:  1
count:  2
count:  3
count:  4

for 문

주로 목록 형태의 자료구조를 순회하면서 for의 몸체 부분을 실행

for 항목 in 목록:
    개별 항목을 가지고 실행
In [35]:
tech_stocks = ['AAPL', 'GOOGL', 'AMZN', 'FB']

for i in tech_stocks:
    print(i)
AAPL
GOOGL
AMZN
FB
In [36]:
for i in range(0, 100, 20):
    print(i)
0
20
40
60
80

댓글