파이썬을 이용한 데이터 분석을 위해 기본적으로 알아야 할 데이터 타입(자료형)과 DATAFRAME에 대해 살펴봅니다.
3-1. String
문자열을 다루기 위한 데이터 타입입니다.
•
싱글따옴표(’)와 더블따옴표(”)
◦
싱글따옴표나 더블따옴표를 사용해 문자열 값을 지정합니다.
◦
문자열 자체에 싱글따옴표가 필요한 경우, 충돌을 피하기 위해 더블따옴표로 문자열을 지정합니다.
▪
Ex)
•
에러: str1 = ‘나는 ‘사과’가 좋아요’
◦
싱글따옴표로 처리된 문자열 내부에 싱글따옴표 사용 불가
•
정상: str2 = “나는 ‘사과’가 좋아요”
◦
더블따옴표로 처리된 문자열 내부에는 싱글따옴표 사용 가능
•
더블따옴표 세개(""")
◦
여러 줄에 걸친 문자열을 정의할 때 사용합니다.
•
문자열 포맷팅
◦
문자열과 외부의 값을 조합하기 위해 문자열 포맷팅 기능을 사용합니다.
◦
%s: 문자열 내에 다른 문자열을 삽입하기 위해 사용
◦
%d: 문자열 내에 정수형 숫자를 삽입하기 위해 사용
◦
str.format: 문자열(str) 안에 {}를 사용하고, format 안에 차례대로 삽입할 문자를 입력합니다.
◦
f-String(Formatted String Literals)
▪
Python 3.6 이상에서 사용 가능합니다.
▪
문자열 앞에 f를 붙이고 문자열 내에 {}를 이용해 문자열 외부의 변수 값을 사용할 수 있습니다.
•
문자열 특수 값 표현
◦
문자열 안에 \t를 사용해 탭을 표현합니다.
◦
\n을 사용해 엔터를 표현합니다.
◦
Raw문자열: 문자열 앞에 r을 사용하면 Raw문자열이 되며, 문자열 안에 \t나 \n이 무시되고 그대로 출력됩니다.
3-1-1. stringTest.py 파일 추가
PyCharm을 실행해 myStartUPQuant 프로젝트에 Class03 Directory와 stringTest.py 추가합니다.
•
myStartUPQuant 폴더에서 마우스 우클릭
◦
New > Directory > Class03 입력 후 엔터
•
Class03 폴더에서 마우스 우클릭
◦
New > Python File > stringTest.py 입력 후 엔터
3-1-2. stringTest.py 코드 입력해보기
코드 작성해보고 실행해보기
# Class03\stringTest.py
# 싱글따옴표와 더블따옴표
print('1. 싱글따옴표와 더블따옴표')
single_quote_str = 'Apple'
double_quote_str = "Microsoft"
print(single_quote_str)
print(double_quote_str)
print('\n')
# 더블따옴표 세 개 사용
print('2. 더블따옴표 세 개 사용')
multi_line_str = """Samsung Electronics
Hyundai Motor
NVIDIA"""
print(multi_line_str)
print('\n')
# 문자열 포맷팅 (%s, %d 사용)
print('3. 문자열 포맷팅 (%s, %d 사용)')
company = 'Tesla'
stock_price = 720
formatted_str = 'The stock price of %s is %d USD.' % (company, stock_price)
print(formatted_str)
print('\n')
# str.format 사용
print('4. str.format 사용')
formatted_str_with_format = 'The stock price of {} is {} USD.'.format(company, stock_price)
print(formatted_str_with_format)
print('\n')
# F-String (Formatted String Literals) 사용
print('5. F-String (Formatted String Literals) 사용')
formatted_str_with_fstring = f'The stock price of {company} is {stock_price} USD.'
print(formatted_str_with_fstring)
print('\n')
# 문자열 특수 값 표현
print('6. 문자열 특수 값 표현')
tab_str = 'Hello\tWorld'
new_line_str = 'Hello\nWorld'
raw_str = r'Hello\nWorld'
print('탭 문자 포함:', tab_str)
print('줄바꿈 문자 포함:', new_line_str)
print('Raw 문자열:', raw_str)
Python
복사
3-2. List
•
여러 데이터를 순서대로 저장할 수 있는 컬렉션(Collection) 타입입니다.
•
Python의 대표적인 데이터 구조 중 하나입니다.
•
특징
◦
다양한 데이터 타입을 저장, 하나의 리스트에 정수, 실수, 문자 등을 혼합해 저장할 수 있습니다.
◦
순서가 존재, 리스트에 값을 추가하는 순서대로 저장합니다.
◦
인덱스 및 슬라이싱, 인덱스를 통해 리스트의 특정 값에 접근하거나, 잘라낼 수 있습니다.
◦
리스트의 일부 내용을 변경할 수 있습니다.
3-2-1. listTest.py 파일 추가
PyCharm을 실행해 myStartUPQuant 프로젝트의 Class03 Directory에 stringTest.py 추가합니다.
•
Class03 폴더에서 마우스 우클릭
◦
New > Python File > listTest.py 입력 후 엔터
3-2-2. listTest.py 코드 입력해보기
코드 작성해보고 실행해보기
# Class03\listTest.py
# 기본 리스트 정의
names = ["Samsung Electronics", "Hyundai Motor", "Microsoft", "NVIDIA", "Tesla", "Apple"]
# 예제 1: 리스트 내 요소에 접근하기
print('1. 리스트 내 요소에 접근하기')
print(names[0]) # 첫 번째 요소 출력
print(names[-1]) # 마지막 요소 출력
print('\n') # 줄바꿈
# 예제 2: 리스트 요소 추가 및 제거하기
print('2. 리스트 요소 추가 및 제거하기')
names.append('Google') # 'Google' 추가
print("Google 추가 후:", names)
names.remove('NVIDIA') # 'NVIDIA' 제거
print("NVIDIA 제거 후:", names)
print('\n')
# 예제 3: 리스트 슬라이싱
print('3. 리스트 슬라이싱')
sub_list = names[1:4] # 두 번째부터 네 번째 요소까지 슬라이싱
print("두 번째부터 네 번째 요소:", sub_list)
print('\n')
# 예제 4: 리스트 요소 반복
print('4. 리스트 요소 반복')
for name in names:
print(name)
print('\n')
# 예제 5: 리스트 내 요소 검색
print('5. 리스트 내 요소 검색')
if 'Apple' in names:
print("Apple is in the list")
else:
print("Apple is not in the list")
print('\n')
# 예제 6: 리스트 길이 확인
print('6. 리스트 길이 확인')
print("리스트의 길이:", len(names))
Python
복사
3-3. Dictionary
•
Dictionary(딕셔너리는) Python에서 사용되는 내장 데이터 구조 중 하나입니다.
•
키(Key)와 값(Value)의 쌍의 구조로 여러 데이터를 저장합니다.
•
순서가 없는 컬렉션이므로, 순서인덱스가 아닌 키(Key)를 통해 데이터에 접근합니다.
•
키는 고유해야 하며, 중복되는 키를 가질 수 없습니다.
•
가변적(mutable)이므로, 생성 후에도 내용을 변경할 수 있습니다.
•
사용 사례 및 장점:
◦
데이터를 키와 값의 형태로 저장하기 때문에, 빠른 검색 및 업데이트가 가능합니다.
◦
JSON 데이터와 유사한 구조를 가지므로, 웹 개발에서 데이터를 주고받을 때 흔히 사용됩니다.
◦
복잡한 데이터 구조를 효과적으로 표현하고 관리할 수 있습니다.
•
기본 사용 방법:
◦
딕셔너리 생성: my_dict = {'key1': 'value1', 'key2': 'value2'}
◦
데이터 접근: value = my_dict['key1']
◦
데이터 추가 및 변경: my_dict['new_key'] = 'new_value'
3-3-1. dictTest.py 파일 추가
PyCharm을 실행해 myStartUPQuant 프로젝트의 Class03 Directory에 dictTest.py 추가하기
•
Class03 폴더에서 마우스 우클릭
◦
New > Python File > dictTest.py 입력 후 엔터
3-2-2. dictTest.py 코드 입력해보기
코드 작성해보고 실행해보기
# Class03\dictTest.py
# 기본 딕셔너리 정의
# 주식 심볼을 키로 하고 회사명을 값으로 하는 딕셔너리
stock_symbols = {
"005930.KS": "Samsung Electronics",
"005380.KS": "Hyundai Motor",
"MSFT": "Microsoft",
"NVDA": "NVIDIA",
"TSLA": "Tesla",
"AAPL": "Apple"
}
# 예제 1: 딕셔너리 내 요소에 접근하기
print('1. 딕셔너리 내 요소에 접근하기')
print(stock_symbols['005930.KS']) # '005930.KS'의 값 출력
print(stock_symbols['AAPL']) # 'AAPL'의 값 출력
print('\n') # 줄바꿈
# 예제 2: 딕셔너리 요소 추가 및 제거하기
print('2. 딕셔너리 요소 추가 및 제거하기')
stock_symbols['GOOGL'] = 'Google' # 'Google' 추가
print("Google 추가 후:", stock_symbols)
del stock_symbols['NVDA'] # 'NVIDIA' 제거
print("NVIDIA 제거 후:", stock_symbols)
print('\n')
# 예제 3: 딕셔너리 키로 반복하기
print('3. 딕셔너리 키로 반복하기')
for symbol in stock_symbols:
print(symbol)
print('\n')
# 예제 4: 딕셔너리의 키와 값으로 반복하기
print('4. 딕셔너리의 키와 값으로 반복하기')
for symbol, company in stock_symbols.items():
print(f"{symbol}: {company}")
print('\n')
# 예제 5: 딕셔너리 내 키 검색
print('5. 딕셔너리 내 키 검색')
if 'AAPL' in stock_symbols:
print("AAPL is in the dictionary")
else:
print("AAPL is not in the dictionary")
print('\n')
# 예제 6: 딕셔너리 길이 확인
print('6. 딕셔너리 길이 확인')
print("딕셔너리의 길이:", len(stock_symbols))
Python
복사
3-4. Pandas와 Dataframe
•
판다스(Pandas)
◦
판다스는 데이터 분석 도구를 제공하는 오픈 소스 라이브러리입니다.
◦
주요 기능
▪
다양한 데이터 형식(예: CSV, Excel 등)의 데이터 읽기 및 쓰기 기능
▪
데이터 정렬, 필터링, 그룹화, 변환 등의 데이터 조작 및 분석 기능
▪
시계열 데이터 처리 기능
◦
사용 이유
▪
데이터 과학, 데이터 분석, 기계 학습 등에서 데이터를 효과적으로 다루기 위해 널리 사용됩니다.
•
데이터프레임(DataFrame)
◦
데이터프레임은 판다스 라이브러리에서 사용되는 기본 데이터 구조
◦
행과 열이 있는 테이블 형태의 구조를 가집니다.
◦
특징
▪
각 열(Column, Field)은 서로 다른 데이터 타입(예: 정수, 실수, 문자열 등)을 가질 수 있습니다.
▪
데이터의 수정, 추가, 삭제가 가능합니다.
▪
라벨을 통한 행과 열의 인덱싱이 가능합니다.
◦
활용 예시
▪
데이터 정리, 데이터 시각화, 통계적 분석, 머신 러닝 모델의 입력 데이터로 사용 등
•
데이터프레임(DataFrame)과 관계형 데이터
◦
구조적 유사성
▪
데이터프레임과 관계형 테이블 모두 '행과 열'의 구조를 가짐.
▪
데이터는 행(레코드) 단위로 저장되며, 각 행은 열(컬럼, 필드)로 구성됨.
◦
데이터 타입의 다양성
▪
데이터프레임의 각 열은 서로 다른 데이터 타입을 가질 수 있음 (예: 정수, 실수, 문자열).
▪
RDB의 테이블 역시 열마다 데이터 타입이 지정되어 있음.
◦
인덱싱 및 검색 기능
▪
데이터프레임은 라벨을 통한 인덱싱을 제공
•
RDB는 기본 키(Primary Key) 또는 인덱스를 사용하여 데이터를 빠르게 찾을 수 있음.
▪
조건부 검색과 데이터 필터링이 가능, 복잡한 쿼리와 분석 작업에 유용함.
◦
데이터 조작 및 변환 기능
▪
데이터프레임은 데이터의 수정, 추가, 삭제가 간편하며, RDB에서도 SQL 명령어를 통해 유사한 작업을 수행할 수 있음.
▪
그룹화, 정렬, 집계와 같은 고급 데이터 조작 기능을 제공함.
◦
단, 관계형 데이터베이스의 테이블은 여러 사람이 동시에 접근해 데이터를 조작할 수 있다.
▪
Dataframe은 기본적으로 로컬에서 혼자 컨트롤한다
3-4-1. 아나콘다 가상환경에 pandas 모듈 추가
•
아나콘다 가상환경에 pandas모듈을 추가 설치합니다.
◦
pip install pandas
▪
Pandas 관련 기능을 처리하기 위한 모듈
◦
앞에서 finance-datareader를 설치했다면 추가 설치하지 않아도 된다.
▪
finance-datareader 설치시 pandas가 기본적으로 같이 설치됩니다.
◦
[2-2. 가상 환경에 FinanceDataReader 모듈 설치하기] 부분 참고
3-4-2. dataframeTest.py 파일 추가
PyCharm을 실행해 myStartUPQuant 프로젝트의 Class03 Directory에 dataframeTest.py 추가하기
•
Class03 폴더에서 마우스 우클릭
◦
New > Python File > dataframeTest.py 입력 후 엔터
3-4-3. dictTest.py 코드 입력해보기
코드 작성해보고 실행해보기
# Class03\dataframeTest.py
# pandas 라이브러리를 'pd'라는 이름으로 임포트합니다.
# pandas는 데이터 조작 및 분석을 위한 Python 라이브러리입니다.
# 'pd'라는 별칭(alias)을 사용하여 pandas 라이브러리의 함수들을 더 간편하게 호출할 수 있습니다.
import pandas as pd
# 데이터를 딕셔너리 형태로 생성합니다.
# 'Symbol'과 'Name'이라는 키를 가지며, 각각 주식 심볼과 회사 이름을 값으로 가집니다.
data = {
"Symbol": ["005930.KS", "005380.KS", "MSFT", "NVDA", "TSLA", "AAPL"],
"Name": ["Samsung Electronics", "Hyundai Motor", "Microsoft", "NVIDIA", "Tesla", "Apple"]
}
# pandas의 DataFrame 클래스를 사용하여 데이터프레임을 생성합니다.
# DataFrame은 행과 열로 구성된 테이블 형태의 데이터 구조를 가지며, 여러 가지 데이터 조작을 위한 메소드를 제공합니다.
df = pd.DataFrame(data)
# 1. 데이터프레임 조회하기.
print('1. 데이터프레임에 저장된 데이터 확인하기')
print(df)
print('\n')
# 2. 데이터프레임의 컬럼 확인하기
# DataFrame.columns 속성을 사용하여 데이터프레임의 모든 컬럼 이름을 확인할 수 있습니다.
print('2. 데이터프레임의 컬럼들 확인하기')
columns = df.columns
print("Columns:", columns)
print('\n')
# 3. 데이터프레임의 인덱스 확인하기
# DataFrame.index 속성을 사용하여 데이터프레임의 인덱스를 확인할 수 있습니다.
print('3. 데이터프레임의 인덱스 값들 확인하기')
indexes = df.index
print("Indexes:", indexes)
print('\n')
# 4. 데이터프레임의 특정 컬럼의 값들 다 조회하기.
# 데이터프레임의 특정 컬럼의 값들은 각각의 시리즈 객체로 구성되어 있다.
print('4. 데이터프레임의 특정 값 조회하기')
symbol = df['Symbol']
print('Type of column in dataframe:',type(symbol))
print(df['Symbol'])
print('\n')
# 5. 데이터프레임에서 특정 로우의 데이터 조회하기
# DataFrame.loc[] 또는 DataFrame.iloc[]을 사용하여 특정 데이터를 조회할 수 있습니다.
# DataFrame에 입력된 데이터는 순서가 정해져 있으며, 0번부터 차례대로 데이터가 인덱싱됩니다.
print('5. 데이터프레임의 특정 로우 출력하기')
print('첫번쨰 로우의 데이터')
print(df.iloc[0])
print('마지막 로우의 데이터')
print(df.iloc[-1])
print('\n')
# 6. 데이터프레임에서 특정 컬럼-특정 로우의 값만 조회하기.
print('6. 데이터프레임에서 특정 컬럼-특정 로우의 값만 출력하기')
print('Symbol컬럼의 두 번째(0부터 시작이므로) 로우의 값 출력:', df['Symbol'].iloc[1])
print(f"Name컬럼의 세 번째 로우의 값은 입니다. {df['Name'].iloc[2]} 여기서는 f-String을 사용했습니다.")
print('\n')
# 7. 루프를 돌면서 데이터프레임의 데이터를 한 로우씩 출력하기
# DataFrame.iterrows() 함수를 사용하여 데이터프레임의 각 행을 순회하고 데이터를 출력할 수 있습니다.
print("Data in each row:")
for index, row in df.iterrows():
# f-String을 이용해 출력합니다.
print(f"Row {index}: Symbol = {row['Symbol']}, Name = {row['Name']}")
Python
복사
이외에도 데이터 분석을 위해서는 다양한 문법과 데이터 타입을 이해해야 합니다. 하지만 이를 익히는 과정이 지루할 수 있으므로 진도를 일단 나가면서, 추가로 공부가 필요한 내용이 나오면 그 시점에 별도 검색을 통해 이해해보기 바랍니다.