안녕하세요. 데이터 요리사, 루나입니다.
pandas의 기본 기능을 얼마나 알고 계신가요?
다음 문제를 스스로 해결해보세요.
- 이 글은 '파이썬으로 시작하는 데이터 분석'에서 배우는 문제를 일부 소개합니다.
- pandas의 자세한 설명은 책의 내용을 참고해주세요.
- '더보기'를 클릭하시면 샘플 답안을 확인하실 수 있습니다.
- 제시한 답안은 샘플 답안입니다. 동일한 코드를 사용하지 않아도 정답일 수 있습니다.
1 | 준비 - 삼성전자 주가 데이터 불러오기 |
야후 파이낸스로부터 삼성전자 주가 데이터를 다운로드 받습니다.
2020년 1월 1일부터 2021년 6월 30일 데이터를 다운 받았습니다.
만약 다른 종목이나 날짜를 조정하고 싶다면 get_datat_yahoo()의 파라미터를 조절하여 설정해주세요.
!pip install yfinance
import numpy as np
import pandas as pd
import yfinance as yfin
from pandas_datareader import data
yfin.pdr_override()
df = data.get_data_yahoo('005930.KS', start = '2020-01-01', end = '2021-06-30')
※ 참고 ※
pandas-datareader가 2021년 7월부터 제대로 동작하지 않고 있습니다.
기존에 pandas-datareader만 사용하여 야후 파이낸스의 주가 데이터를 다운로드 받으셨던 분은
위의 수정된 코드를 사용하여 데이터를 다운로드 받아서 사용해주세요.
1 | 데이터프레임(df)의 평균, 표준편차, 사분위수 등 주요 통계 지표를 확인하세요. |
더보기
df.describe()
2 | 종가('Close') 기준 최대값을 구하세요. 종가('Close') 기준 최소값을 구하세요. 종가('Close') 기준 평균값을 구하세요. |
더보기
# 최대값 구하는 방법(1)
df['Close'].max()
# 최대값 구하는 방법(2)
max(df['Close'])
# 최소값 구하는 방법(1)
df['Close'].min()
# 최소값 구하는 방법(2)
min(df['Close'])
#평균값
df['Close'].mean()
3 | 총 데이터의 개수(row의 개수)를 확인해 보세요. |
더보기
# 방법1
df.shape[0]
# 방법2
len(df)
4 | 특정 컬럼만 선택해 보세요(예: ‘Close’ 컬럼만 선택, ‘Higt’와 ‘Low’ 두 개의 컬럼 선택). |
더보기
# 하나의 컬럼만 선택
df['Close']
# 두 개의 컬럼 선택
df[['High', 'Low']]
5 | 상위 3개의 로우만 선택해 보세요. |
더보기
df[:3]
6 | 시작가('Open') 대비 종가('Close')가 높았던 날의 데이터만 선택하세요. |
더보기
df[df['Open'] < df['Close']]
7 | 종가('Close') 기준 가장 주가가 높았던 날의 데이터(로우)를 선택하세요. |
더보기
df[df['Close'] == max(df['Close'])]
8 | 종가('Close') 기준 주가가 90,000원 이상이었던 날짜를 반환하세요. |
더보기
df[df['Close'] > 90000].index
9 | 2021년 1월 15일의 데이터를 반환하세요. |
더보기
df.loc['2021-01-15']
10 | 2021년 1월 11일의 고가('High')와 저가('Low') 값을 반환하세요. |
더보기
df.loc['2021-01-11', ['High', 'Low']]
11 | 데이터프레임(df)의 100번째 데이터를 선택하세요. |
더보기
df.iloc[100]
12 | 데이터를 날짜 역순으로(최신 데이터가 위에 위치하도록) 정렬하세요. |
더보기
df.sort_index(ascending=False)
13 | 종가('Close') 데이터를 가격이 높은 순서대로 정렬하세요. |
더보기
df['Close'].sort_values(ascending=False)
14 | 인덱스 컬럼을 0부터 순차적으로 증가하는 정수로 변경하세요. |
더보기
#방법 1: 인덱스 값이 신규 컬럼으로 생성
df.reset_index(inplace=True)
# 방법 2: 새로운 필드 df['Date']를 만들어 index를 할당
df['Date'] = df.index
15 | 컬럼명을 Date는 ‘날짜’로, ‘High’는 ‘고가’로, ‘Low’는 ‘저가’로 변경하세요. |
더보기
df.rename(columns={'Date': '날짜', 'High': '고가', 'Low': '저가'})
16 | 날짜(‘Date’) 컬럼을 삭제하세요. |
더보기
df.drop(columns=['Date'], inplace = True)
17 | 'diff' 컬럼을 생성하고, 종가(‘Close)와 시가(‘Open’)의 차이를 계산하여 채워주세요. |
더보기
df['diff'] = df['Close']-df['Open']
18 | 'Date' 필드에 저장된 값을 파싱하여 'Year', 'Month', 'Day' 필드에 저장하세요. |
더보기
df['Year'] = [d.year for d in df['Date']]
df['Month'] = [d.month for d in df['Date']]
df['Day'] = [d.day for d in df['Date']]
19 | 모든 데이터를 소수점 둘째자리까지 표시하세요. |
더보기
format = lambda x: '%.2f' % x
df.applymap(format)
20 | 거래량 필드를 생성하고 세 자리수마다 콤마(,)가 들어가도록 변경하세요(예: 16949183-> 16,949,183). |
더보기
df['거래량'] = df['Volume'].apply(lambda x : "{:,}".format(x))
21 | 주가 데이터를 월(“Month’)별로 그룹핑하고, 거래량(‘Volume’)의 평균값을 표시하세요. |
더보기
df['Volume'].groupby(df['Month']).mean()
22 | 결측치가 있는지 확인하고, 결측치가 있을 경우 결측치를 처리하세요. |
더보기
#결측치 확인
df.isnull().sum()
#결측치 삭제
df.dropna()
#결측치가 있는 경우 값 치환
df.fillna({'High': 90000, 'Low': 50000})
23 | 12월의 데이터와 11월의 데이터를 별도의 데이터프레임(dec_df, nov_df)으로 만들고 두 데이터프레임을 하나의 데이터프레임으로 이어 붙이세요. |
더보기
dec_df = df[df['Month']==12]
nov_df = df[df['Month']==11]
nov_dec_df = pd.concat([nov_df, dec_df])
pandas의 기능을 활용하시는데 친숙해지셨나요?
데이터프레임과 자주 만나다보면 자연스럽게 익숙해지실테니
너무 조급해마시구요~
오늘도 수고하셨습니다!
함께 보면 좋은 글 |
※ 이 글의 내용을 상업적으로 무단 활용, 편집하는 것은 금지하고 있습니다. 강의, 출판 등 상업적 이용이 필요하신 경우, 문의 바랍니다.
728x90
'Kaggle·데이터분석예제' 카테고리의 다른 글
파이썬 기본 문법, 10분 안에 정리하기 (1) | 2021.06.01 |
---|---|
주피터 노트북 사용법, 테마 셋팅방법 (0) | 2021.06.01 |
Mecab 윈도우 설치 방법 (0) | 2020.11.03 |
Kaggle 파일 제출하기 (0) | 2020.08.30 |
Kaggle-Colab 연동방법 (0) | 2020.08.30 |