최근에는 Python 을 활용한 금융분석 양질의 도서를 다수 찾을 수 있다. 여러권의 도서 정리작업을 진행하였고, 데이터 분석 및 기술적 지표를 생성하는 방법등 분량의 다수가 겹치는 부분이 많이 있었습니다. 이들의 내용을 정리하는 페이지 입니다.
이번 페이지 에서는 Pandas 및 Python 기본 함수와 관련된 내용을 정리해 보겠습니다.
Pandas
# DataFrame Filtering
series_valid = df['filter'].isin(names)
df[series_valid]
# DataFrame Filtering 2 (결측치 필터링)
# Nan, 무한대, 음의 무한대 1개라도 포함된 Tuple 은 (~)제외
df[~df.isin([np.nan, np.inf, -np.inf]).any(1)]
with Pandas Series Methods
- .isin([list]) : True/ False 필터링 결과 Series 출력
with Pandas DataFrame Methods
- .where() : True 를 그대로 출력, False 는 other 값으로 대체
- .mask() : False 를 그대로 출력, True 는 other 값으로 대체
- .diff() : 앞뒤 데이터 차이값 생성
- .pct_change() : 앞뒤 데이터 변화율 생성
- .cumsum() : 누적 합 생성
- .cummax() : 누적 최댓값을 비교하여, 최댓값 출력
- .cummin() : 누적 최솟값을 비교하여, 최솟값 출력
- .unique() : 고유값 Series 생성
- .isna().sum() : DataFrame 의 NaN 의 합
- .apply(함수) : 특정 컬럼의 데이터를 함수적용한 결과값으로 새로운 Series 생성
- .agg([‘mean’, ‘std’], axis=0) : max, min, sum, mean 과 같은 통계결과값 컬럼별 생성
- .rank : Series 의 데이터 순위 값 출력
- .apply : 데이터 값들을 바꾼다 (ex> np.sqrt)
- .asfreq : 컬럼별 함수 적용 결과값을 덮어쓴다 (ex> freq=’M’)
- .groupby() : 데이터를 집단별로 묶는다
DateTime
# datetime 모듈의 활용
import datetime
datetime.datetime.today().strftime('%Y-%m-%d')
[Out]: 2021-08-11
datetime.datetime(year=2000, month=1, day=1)
[Out]: 2000-01-01 00:00:00
datetime.datetime.today() - datetime.timedelta(days=7)
[Out]: datetime.datetime(2021, 8, 4, 10, 46, 44, 131681)
Yahoo Finance
Matplotlib
# matplotlib 기본 설정값 변경하기
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'D2Coding'
plt.rcParams['figure.dpi'] = 300
plt.rcParams['figure.figsize'] = (20.0, 5.0)
plt.rc('font', family='NanumGothic')
import matplotlib.pyplot as plt
fig, ax = plt.subplots(3, 1, figsize=(20,12), sharex=True)
df.adj_close.plot(ax=ax[0]) # 주가 Table
ax[0].set(title='SAMSUNG time series', ylabel='Stock Price (원)')
df.simple_rtn.plot(ax=ax[1]) # 단순 수익률 Table
ax[1].set(ylabel='Simple Return (원)')
df.log_rtn.plot(ax=ax[2]) # log 수익률 Table
ax[2].set(xlabel='Date', ylabel='Log Return (%)')
plt.show()
fig = plt.figure()
ax = fig.add_subplot(111, ylabel='Google price in $')
data['close'].plot(ax=ax, color='r', lw=2.)
# Marker 추가하기
ax.plot(
data.loc[data['position'] == 1.0].index,
data.price[data['position'] == 1.0],
'^', markersize=8, color='m')
ax.plot(
date.loc[date['position'] == -1.0].index,
date.price[date['position'] == -1.0],
'v', markersize=8, color='k')
plt.show()
Cuffinks
Install the Python Package
! pip install cufflinks
! pip install chart_studio
! pip install jupyterlab "ipywidgets>=7.5"
! jupyter labextension install jupyterlab-plotly@4.14.3
Initialized the Module
import cufflinks as cf
from plotly.offline import iplot, init_notebook_mode
cf.set_config_file(world_readable=True, theme='pearl', offline=True) # set up settings (run it once)
init_notebook_mode(connected=True) # initialize notebook display
# Plotly from DataFrame
df.iplot(subplots=True, shape=(3,1), shared_xaxes=True, title="SAMSUNG")