본문 바로가기

Python/▶ Python & Pandas

5주차 plotly

728x90

📝Plotly 는?

  • 파이썬의 대표적인 인터랙티브 시각화 도구
  • 자바스크립트의 동적인 시각화 기능
  • seaborn과 사용법 비슷

출처 : rougier/python-visualization-landscape: Adaptation of Jake VanderPlas graphic about python visualization landscape (github.com)

 

📝Plotly.express ( = px ) 라이브러리

 

✅ px.data.iris()

  • DataFrame형태를 입력으로 넣고, 구성요소만 지정해주면 쉽게 구현이 가능
  • px.data 제공 데이터셋중 하나인 iris 불러오기
import plotly.express as px
import pandas as pd
df = px.data.iris() #px.data에서 기본 제공하는 데이터셋 중 하나인 iris(붓꽃) 데이터
fig = px.scatter(df, x="sepal_width", y="sepal_length", color='petal_length')
fig.show()

 

 

✅ px.data.stocks()

더보기
  • px.data 제공 데이터셋중 하나인 stock 불러오기 
  • '구글' 종목만 가져오기
df = px.data.stocks()
fig = px.line(df, x='date', y='GOOG', height=300 ) # height로 그래프의 높이 지정
fig.show()

 

 

 

  • 종목 전체 가져오기(px)
# set_index로 date컬럼 앞에 순차적으로 번호 부여(인덱스)해서 x축으로 설정)
px.line(df.set_index('date'), height=300)

  • 종목 전체 가져오기(판다스)
df.plot(figsize=(12,4),grid = True)

 

 

✅ 종목들의 일별 수익률

df_1 = df.set_index('date') -1
# 시작한 날을 기준으로 삼기위해 -1

 

  • 종목들의 일별 수익률 - (판다스로 시각화)
df_1.plot(kind ='bar', figsize=(16,6))

지저분..

 

  • 종목들의 일별 수익률 - (plotly.express로 시각화)
px.bar(df_1,height=400)

 

✅ facet_col

# px.area 로 수익률 분포를 그립니다.
# facet_col 을 통해 서브플롯을 그릴 수 있습니다.
# facet : 측면, 양상

px.area(df_1,facet_col = 'company', facet_col_wrap = 2)

 

 

✅ hover_data

  • 그래프에 커서 대면 나오는 데이터 (날짜) 수정
  • 연월일 형식앞에 | 붙여주는 건 plotly의 약속!!! API 규칙!
hover_data={"date": "|%Y-%m-%d"}
px.line(df, hover_data={'date': '|%Y-%m-%d'})

 

✅ Range_slider

  • x축 과 y축의 설정정 위해서는 각각 update_xaxes 메소드update_yaxes 메소드를 활용
fig = px.line(df_1['GOOG'], title = '구글 주가')
fig.update_xaxes(rangeslider_visible=True)

 

📝Simple Candlestick (캔들스틱)

  • 캔들스틱 차트(영어: Candlestick chart) 또는 봉차트
  • 일본식 캔들스틱 차트는 주식을 비롯한 유가증권과 파생상품, 환율의 가격 움직임을 보여주는 금융 차트

출처 : 위키백과
출처 : Candlestick charts in Python

# plotly.graph_objects 를 go라는 별칭으로 불러옵니다.
# go.Candlestick 을 그립니다.
import pandas as pd
import plotly.graph_objects as go
from datetime import datetime

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
df

 

✅ 애플의 캔들스틱

data = go.Candlestick(x=df['Date'], open=df['AAPL.Open'],
                high=df['AAPL.High'],
                low=df['AAPL.Low'],
                close=df['AAPL.Close']

# plotly.graph_objs 의 타입을 가진 데이터 형태를 
# go.Figure() 안에 넣어주기
go.Figure(data)

 

📝 OHLC(Open-High-Low-Close)

{"originWidth":1644,"originHeight":868,"style":"alignCenter","caption":"출처 : OHLC Charts

# go.Ohlc
# go.Candlestick 자리에 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()

Candlestick 과의 차이점은 자세헤 보면 막대가 시가종가로 나뉘어져있다.

 

 

✅ Rangeslider 제외하기

# Rangeslider를 제외하고 Candlestick을 그립니다.
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.update_xaxes(rangeslider_visible=False)
fig.show()

 

 

📝데이터 직접 수집한 주가 시각화하기

# FinanceDataReader 로드하기
import FinanceDataReader as fdr

 

fdr.StockListing : 종목 리스트 확인

# fdr.StockListing('S&P500')
# S&P 500에 들어가 있는 종목들의 리스트 확인 가능

✅fdr.DataReader : 특정 종목 불러오기

# 특정 주가 불러오기
# FinanceDataReader의 DataReader는 미국 주식의 경우 종목코드대신 티커(Ticker)를 사용합니다.
# 티커는 약자와 비슷합니다.(마이크로소프트:MSFT, 스타벅스:SBUX 등)

✅전일비에 대한 히스토그램

 

px.histogram(tsla_norm[['High', 'Low']])

✅ 전일비에 대한 히스토그램 + marginal = 'box'

# 대표값을 표현하는 그래프에 대한 단점을 보완해서 만들어진 그래프 가 boxplot
# box => 4분위수를 시각화 할 때 사용!

px.histogram(tsla_norm[['High', 'Low']], marginal='box')

📝 다양한 distribute 표현

 

✅ scatterplot 

px.scatter(df_maang_norm, x='GOOGL', y='META', marginal_x ='box', marginal_y ='violin')

✅ scatterplot_matrix

- 모든컬럼들끼리 scatter(분산도)를 펼쳐서 보여줌

px.scatter_matrix(df_maang_norm)

pd.plotting.scatter_matrix(df_maang_norm, alpha=0.1);

 

✅ px.box

# px.box
px.box(df_maang_norm)

✅ px.violin

# px.violin
px.violin(df_maang_norm, height=300, box=True, points='all')

💡

boxplot : 사분위수, 중위값(상자 안의 밴드), 이상치(점으로 표현)

violinplot : 커널 확률 밀도

 

 

 

✅ px.strip

# px.strip
px.strip(df_maang_norm)

px.histogram

# px.histogram
px.histogram(df_maang_norm, nbins = 50,
            facet_col='company', facet_col_wrap=2)

728x90

'Python > ▶ Python & Pandas' 카테고리의 다른 글

6주차 시각화(KOSIS의 산업별 통계)  (0) 2023.02.07
6주차 Seaborn  (0) 2023.02.06
5주차 TIL ( Pandas : 시각화 )  (0) 2023.01.31
4주차 WIL  (1) 2023.01.19
TIL ②일차  (0) 2023.01.11