EDA
- map: 시리즈만 가능, df[”column1”].map(함수 or dictionary)
- apply: 시리즈와 df둘 다 가능, df.apply(함수)
- applymap df만 가능, df.applymap(함수)
lamda함수: 이름 없는 함수
간단한 기능은 함수를 만들지 않고, lamda 활용
간단한 전처리에 유용
# map과 lamda 연습
def find_year(x):
return x[:4]
#df1["생산연도"] = df1["생산일"].map(lamda x : x[:4])
df1["생산연도"] = df1["생산일"].map(find_year)
df1
tqdm
오래 걸리는 작업 진행 상황을 파악하기 위해 사용
from tqdm.notebook import tqdm
tqdm.pandas()
map을 .progress_map() 형태로 활용
pd.concat()
- 이때 map을 한 결과는 series이기 때문에 리스트로 변형시켜준 후에 concat해야함
- 변수.tolist()
- pd.concat(변수)
pd.merge()
key가 있는 경우 merge
- How의 default는 inner
- inner은 양쪽의 개수가 똑같을 때 활용
df_top10.merge(df_krx, left_on="종목별", right_on="Name",how="left")[['Name','Symbol']]
https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html
리스트컴프리헨션
- 자주 사용됨되니 기본 형태 알아두기
[x for x in range(10)]
pandas 연산
df_norm = (df / df.iloc[0]) -1
시각화 방법 두 가지
# matplotlib API
plt.plot(df_norm) plt.show()
# pandas API
df_norm.plot(figsize =(14,8))
pd.cut() 같은 길이로 나누기: 절대 평가
pd.qcut() 같은 개수로 나누기: 상대평가 - RFM분석 (고객수, 금액대별 인원)
Plotly
Plotly 는?
- 파이썬의 대표적인 인터랙티브 시각화 도구
- Plotly Python Graphing Library | Python | Plotly
# 라이브러리 로드
import plotly.express as px
import pandas as pd
수익률을 막대그래프로 그립니다. 아래 3가지의 결과물은 동일하다
px.bar(df_1, x=df_1.index, y='GOOG')
px.bar(df_1, y='GOOG')
px.bar(df_1["GOOG"])
주요 그래프 사용법
scatter([data_frame, x, y, color, symbol, …])
line([data_frame, x, y, line_group, color, …])
area([data_frame, x, y, line_group, color, …])
bar([data_frame, x, y, color, facet_row, …])
timeline([data_frame, x_start, x_end, y, …])
violin([data_frame, x, y, color, facet_row, …])
box([data_frame, x, y, color, facet_row, …])
strip([data_frame, x, y, color, facet_row, …])
histogram([data_frame, x, y, color, …])
pie([data_frame, names, values, color, …])
treemap([data_frame, names, values, …])
라인그래프
서브 플롯
# px.area 로 수익률 분포를 그립니다.
# facet_col 을 통해 서브플롯을 그릴 수 있습니다.
px.area(df_1, facet_col="company",facet_col_wrap=2)
시간 표현 hover_date
# px.line 으로 전체 데이터의 수익률을 구합니다.
# hover_data={"date": "|%Y-%m-%d"} 로 시간을 표현할 수 있습니다.
px.line(df, x="date", y="GOOG", hover_data={"date":"|%Y-%m-%d"})
슬라이더 사용
fig = px.line(df_1["GOOG"])
fig.update_xaxes(rangeslider_visible=True)
#인터렉티브 슬라이더, 데이터가 많으면 속도가 느려져서 matplotlib을 더 많이쓴다
#개선하는 방법? 샘플링해서 그리기, 대표값을 표시해야 한다면, 그래프에서 계산하지 않고 미리 계산해서 시각화하기
캔들스틱 차트 Candle stick Chart
import plotly.graph_objects as go
# go.Candlestick 을 그립니다.
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
import plotly.graph_objects as go
import pandas as pd
from datetime import datetime
fig = go.Figure(data=[go.Candlestick(x=df['Date'],
open=df['AAPL.Open'],
high=df['AAPL.High'],
low=df['AAPL.Low'],
close=df['AAPL.Close'])])
fig.show()
https://plotly.com/python/candlestick-charts/
OHLC Chart
# go.Ohlc를 그립니다.
fig = go.Figure(data=[go.Ohlc(x=df['Date'],
open=df['AAPL.Open'],
high=df['AAPL.High'],
low=df['AAPL.Low'],
close=df['AAPL.Close'])])
fig.show()
https://plotly.com/python/candlestick-charts/