Python Basics for Data Science - PART 3

Python Basics for Data Science - PART 3

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

자료구조: 리스트, 튜플, 딕셔너리

2017 FinanceData http://fb.com/financedata

자료구조

  • 리스트 (list)
  • 튜플 (tuple)
  • 딕셔너리 (dict)

리스트 (list)

[] 대괄호로 표현한다 (bracket 브라켓이라고 읽는다)

리스트는 문자열과 매우 유사하다. 각 요소는 어떤 객체여도 상관없다. 심지어 리스트로 하나의 요소가 될 수 있다. 예를 들어,

ls = ['hello', 10, 20, [1, 2, 3]]
In [1]:
type([])
Out[1]:
list
In [2]:
# 리스트
stocks = ['삼성전자', '현대차', '네이버' ]

print(type(stocks))
print(stocks[0])
<class 'list'>
삼성전자
In [3]:
# 요소 값 변경

stocks[2] = 'NAVER'
print(stocks)
['삼성전자', '현대차', 'NAVER']
In [4]:
# 리스트에 추가

stocks = ['삼성전자', '현대차', 'NAVER' ]
stocks.append('한국전력')
stocks.append('현대모비스')

print(stocks)
['삼성전자', '현대차', 'NAVER', '한국전력', '현대모비스']
In [5]:
# 리스트 슬라이싱 (0부터 시작,  n-1)
stocks = ['삼성전자', '현대차', 'NAVER', '한국전력', '현대모비스']

print(stocks[0:3])
print(stocks[2:3])
print(stocks[4:])
print(stocks[-1])
['삼성전자', '현대차', 'NAVER']
['NAVER']
['현대모비스']
현대모비스
In [6]:
관심종목 =  ['삼성전자', '현대차', 'NAVER', '한국전력', '현대모비스']
print(관심종목)

# 요소 위치(index) 얻기
print(관심종목.index('현대차'))

# 요소 삽입(insert)
관심종목.insert(1, 'SK하이닉스')
print(관심종목)

# 요소 삭제(remove)
관심종목.remove('현대모비스')
print(관심종목)
['삼성전자', '현대차', 'NAVER', '한국전력', '현대모비스']
1
['삼성전자', 'SK하이닉스', '현대차', 'NAVER', '한국전력', '현대모비스']
['삼성전자', 'SK하이닉스', '현대차', 'NAVER', '한국전력']
In [7]:
for 종목 in 관심종목:
    print(종목)
삼성전자
SK하이닉스
현대차
NAVER
한국전력

리스트를 소트(sort) 할 수 있다. reverse 인자를 True로 주면 역순으로 소트한다.

In [8]:
print(관심종목)

관심종목.sort(reverse=True)
print(관심종목)
['삼성전자', 'SK하이닉스', '현대차', 'NAVER', '한국전력']
['현대차', '한국전력', '삼성전자', 'SK하이닉스', 'NAVER']
In [9]:
nums = list(range(5) )
print (nums)
print (nums[2:4])
print (nums[2:]) # 끝까지
print (nums[:2])
print (nums[:])
print (nums[:-1]) # 마지막을 제외하고 전체 
[0, 1, 2, 3, 4]
[2, 3]
[2, 3, 4]
[0, 1]
[0, 1, 2, 3, 4]
[0, 1, 2, 3]
In [10]:
#루프에 인덱스 숫자 매기기 (enumerate)

lst = ['A', 'B', 'C', 'D', 'E']
for i, item in enumerate(lst):
    print (i, item)
0 A
1 B
2 C
3 D
4 E
In [11]:
# 리스트는 덧셈으로 간단하게 병합(merge)할 수 있다.

관심종목01 = ['삼성전자', 'SK하이닉스']
관심종목02 = ['현대차', 'NAVER', '한국전력']
관심종목 = 관심종목01 + 관심종목02
print(관심종목)

관심종목 += ['아모레퍼시픽']
print(관심종목)
['삼성전자', 'SK하이닉스', '현대차', 'NAVER', '한국전력']
['삼성전자', 'SK하이닉스', '현대차', 'NAVER', '한국전력', '아모레퍼시픽']

튜플 (tuple)

튜플: 요소의 값을 변경할 수 없다(immutable)는 점만 제외하고 리스트와 완전히 동일하다.

마치 괄호로 만들어지는 것 처럼 보이지만 ',' 로 만들어진다

In [12]:
t = 1, 2, 3, 4

print(t)
print(type(t))
print(t[1])
(1, 2, 3, 4)
<class 'tuple'>
2

튜플은 리스트와 사용법은 같다. 단, 튜플이 한번 만들어지면 요소의 값을 바꾸거나 추가 혹은 삭제할 수 없다.

t = (1, 2, 3, 4)

t[0] = 10 # 에러 발생
del t[0]  # 에러 발생

딕셔너리 (dict)

{} 중괄호 (brace, 브레이스라고 읽는다)로 표현한다. 하나의 요소는 '키:값' 으로 표현한다.

In [13]:
type({})
Out[13]:
dict
In [14]:
stocks = {'삼성전자' : '005930', 'SK하이닉스' : '000660', '현대차' : '005380'}

# 추가
stocks['NAVER'] = '035420' 
print(stocks)

# 삭제
del stocks['현대차']
print(stocks)
{'NAVER': '035420', '현대차': '005380', 'SK하이닉스': '000660', '삼성전자': '005930'}
{'NAVER': '035420', 'SK하이닉스': '000660', '삼성전자': '005930'}

키(key)와 값(value)는 무엇이든 될 수 있다.

In [15]:
# 키는 (1,0,4) 튜플, 값은  'AAPL' 문자열
dic = { (1,0,4) : 'AAPL' }
dic
Out[15]:
{(1, 0, 4): 'AAPL'}
In [16]:
stock = {
    'name': '삼성전자',
    'market': '코스피',
    'close': [
        ('2017-03-15', 2070000),
        ('2017-03-14', 2068000),
        ('2017-03-13', 2030000),
    ],
    'market-cap': 2919096,
    'PER': 15.17,
}

print (stock['name'], stock['PER'])
print ("시가총액 %d (억원)" % stock['market-cap'])
삼성전자 15.17
시가총액 2919096 (억원)
In [17]:
for p in stock['close']:
    print( "날짜: %s, 종가: %d"% p)
날짜: 2017-03-15, 종가: 2070000
날짜: 2017-03-14, 종가: 2068000
날짜: 2017-03-13, 종가: 2030000
In [18]:
# 딕셔너리는 순서를 보장하지 않는다. (추가한 순서대로  보여지지 않는다)

corps = {}
corps['AAPL'] = 'AAPL Apple Inc.'
corps['GOOGL'] = 'Alphabet Inc.'
corps['GOOG'] = 'Alphabet Inc.'
corps['MSFT'] = 'Microsoft Corporation'
corps['AMZN'] = 'Amazon.com, Inc.'
In [19]:
corps
Out[19]:
{'AAPL': 'AAPL Apple Inc.',
 'AMZN': 'Amazon.com, Inc.',
 'GOOG': 'Alphabet Inc.',
 'GOOGL': 'Alphabet Inc.',
 'MSFT': 'Microsoft Corporation'}
In [20]:
# 딕셔너리를 for 루프로 순회

for c in corps:
    print(c, ':', corps[c])
AMZN : Amazon.com, Inc.
AAPL : AAPL Apple Inc.
MSFT : Microsoft Corporation
GOOG : Alphabet Inc.
GOOGL : Alphabet Inc.

items()를 사용하여 순회하면서 key,value를 차례로 얻을 수 있다

In [21]:
for key, val in corps.items():
    print (key, ':', val)
AMZN : Amazon.com, Inc.
AAPL : AAPL Apple Inc.
MSFT : Microsoft Corporation
GOOG : Alphabet Inc.
GOOGL : Alphabet Inc.

zip

리스트들(목록1, 목록2), 각 항목 짝을 지워 준다.

zip(목록1, 목록2)
In [22]:
z = zip(['a', 'b', 'c'], ['d', 'e', 'f'])
list(z)
Out[22]:
[('a', 'd'), ('b', 'e'), ('c', 'f')]
In [23]:
# 종목(stock_list)과 시가총액(marcap_list) 데이터를 짝을 지워준다
stock_list = ['AAPL', 'GOOGL', 'MSFT', 'AMZN', 'FB']
marcap_list = [7541, 6556, 5429, 4607, 4296]

for stock, marcap in zip(stock_list, marcap_list):
    print(stock, marcap)
AAPL 7541
GOOGL 6556
MSFT 5429
AMZN 4607
FB 4296

댓글