주식 프로그램 만들기(2) – 차트그리기(1)

첫 코너에서는 데이터 마이닝을 하고 데이터를 다운로드했다.이번 코너에서는 다운로드한 데이터를 시각화하는 작업을 하려구. 추가로 차트를 그리며 거기에 선을 보거나, Text을 추가하거나 할 예정이다.첫번째 코너에서 받은 데이터를 사용하여 추진한다.현재 데이터는 데이터/000700처럼 종목 번호를 파일 이름으로 저장된 상태이다.데이터 다운로드 관련은 아래 주소를 참조한다.https://blog.naver.com/brightcgh/222246171349

주식 프로그램 만들기(1) – 데이터 Mining Python 기초를 배우고 이를 복습하기 위해 주식 프로그램을 만들어 보려고 한다.1차 목표는 주식을 분석하는.blog.naver.com

주식 프로그램 만들기(1) – 데이터 Mining Python 기초를 배우고 이를 복습하기 위해 주식 프로그램을 만들어 보려고 한다.1차 목표는 주식을 분석하는.blog.naver.com

주식 차트 그리는 방법은 여러 가지가 있겠지만 plotly라는 라이브러리를 사용하려고 한다.설치 pip install plotly 아래 주소를 보면 다양한 시각화 예시를 볼 수 있는데 그 중 Python > Financial Charts > Candlestick Charts 항목에 들어가 본다.

PlotlyPythonGraphingLibraryPlotly의 PythonGraphingLibrary는 인터랙티브로 퍼블리케이션 품질 그래프를 만듭니다. 선도, 산점도, 면적도, 막대그래프, 에러바, 박스도, 히스토그램, 히트맵, 서브플롯, 멀티캐스트, 극성도, 버블 charts.plotly.com 작성 방법의 예

코드를 실행하면 아래와 같은 차트를 바로 얻을 수 있도록 예시가 되어 있다.

inportprotly.graph_panda를 inportfromdatetimeimportdatetimedf=pd.read_csv(https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv’)fig=go)로 가져옵니다. 그림(data=[go. 촛대(x=df[‘Date’]), open=df[‘]AAPL.Open’, high=df[‘]AAPL.High’, low=df[‘]AAPL.Low’, close=df[‘]AAPL.Close’]])fig.show()

inportprotly.graph_pandaをinportfromdatetimeimportdatetimedf=pd.read_csv(https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv’)fig=go)としてインポートします。図(data=[go.燭台(x=df[‘Date’])、open=df[‘]AAPL.Open’,high=df[‘]AAPL.High’,low=df[‘]AAPL.Low’,close=df[‘]AAPL.Close’]])fig.show()

inportprotly.graph_pandaをinportfromdatetimeimportdatetimedf=pd.read_csv(https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv’)fig=go)としてインポートします。図(data=[go.燭台(x=df[‘Date’])、open=df[‘]AAPL.Open’,high=df[‘]AAPL.High’,low=df[‘]AAPL.Low’,close=df[‘]AAPL.Close’]])fig.show()

IDE(효율적으로 소프트웨어를 개발하기 위한 통합 개발 환경 소프트웨어 애플리케이션 인터페이스)를 Spyder를 사용하고 있지만 아무래도 fig.show()를 실행해도 그래픽이 뜨지 않아서 검색해보니

플롯 임포트 플롯에서

을 임포트하여#그림. ()그림.show 함수 대신 plot을 사용하면 브라우저를 통해 차트를 볼 수 있다. 이렇게 올린 차트는 확대까지는 된다. 다만 실제 증권사 혹은 네이버에서 제공하는 차트만큼 기능이 다양하지 않은 편.show 함수 대신 plot을 사용하면 브라우저를 통해 차트를 볼 수 있다. 이렇게 올린 차트는 확대까지는 된다. 다만 실제 증권사 혹은 네이버에서 제공하는 차트만큼 기능이 다양하지 않은 편.fig=go.。図(data=[go.燭台(x=df[‘Date’])、open=df[‘]AAPL.Open’,high=df[‘]AAPL.High’,low=df[‘]AAPL.Low’,close=df[‘]AAPL.Close’)))))에 어떤 내용이 들어가는지 확인해보자 https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv에 어떤 내용이 들어가는지 확인해보자 https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv에서 취득한 csv 파일을 df에 포함하고 있는데, 이를 보면 아래와 같은 데이터가 포함되어 있다.go.Candlestick()에 open, high, low, close치만 잘 넣어도 자동으로 차트를 잘 그리고 줄 확인할 수 있다.추가적으로 x값에 값을 넣으면 x축의 값이 표시되게 되어, 기타 text를 넣거나 색을 바꿀 수 있다.go.Candlestick()함수에 대한 자세한 내용은 이하를 참조하세요.https://plotly.com/python/reference/candlestick/Candlestick Traces Pigure 속성 레퍼런스는 Plotly의 Python 오픈 소스 그래프 library.plotly.com입니다.본격적으로 다운로드한 데이터를 시각화해 보자if__name__==”__main__:s_code=”000660″file_path=”data/”+s_codeifos.path.path(file_path):df=pd.read_csv(file_path,file=””)000660종목코드의데이터를열어서df에넣고df를보면아래와같이데이터가들어가게되고,fig=go.。図(data=[go.燭台(open=df[‘Open’])、high=df[‘]High’,low=df[‘Low’],close=df[‘Close’])プロット(図)위와 같이 바로 출력해보면한 번에 차트가 그려지는 것을 볼 수 있다.여기서 몇 가지를 더 Ugrade해야 하는데 x축이 날짜가 아닌 index로 구성되어 있기 때문에 날짜를 알 수 없다는 것이고 날짜가 역순이므로 이를 바꿀 필요가 있다.동방 = 지방. 연근이 자라다[:-1]위의 코드를 사용하면 데이터가 뒤집혀 날짜순으로 승순이 된다. 이 방법 외에 날짜로 Sort하는 아래 방법도 있다.df.sort_values(by=’Date’、inplace=True)이 상태에서 x=df[‘Date’] 파라미터를 넣으면위와 같이 묘하게 차트가 끊어지게 된다. x에 들어가는 값을 날짜로 인식하지 않고 단순히 숫자로 인식하기 때문이다.이런 사태를 방지하기 위해 20210125와 같은 숫자를 2021-01-25와 같은 날짜 형식으로 바꿔야 한다.Data Frame 형식이 아닌 단순한 int 형태라면aaa=20210125bbb=datetime(year=int(str(flash)[0:4])、month=int(str(flash)[4:6])、day=int(str(flash)[6:8])ccc=str(flash)[0:4]+str(flash)[4:6]+str(flash)[6:8]bb처럼 datetime 형식을 만들어 aa를 4개 2개 2개 찢어 year, month, day로 지정해 만드는 방법이 있고 cc처럼 ‘2021-01-25’ 문자를 강제로 만드는 방법도 있다.이것을 데이터 프레임에 적용해야 하는데 단순히Df[‘Date_Conv’] = str(df] d 0:4] + ‘-‘tr(‘df’)[4:6] + ‘-‘tr'[6:8]상기와 같은 코드로는 전혀 원하는 결과를 얻을 수 없다.Data Frame에 있는 값에 적용해야 하는데 Data Frame 자체에 적용하고 있기 때문이다. Data Frame 안에 있는 값에 특정 함수를 적용하고 싶다면 apply를 사용하면 된다.df=df.apply(함수, 축)df=df.apply(함수, 축)여기서 function은 함수 이름을 쓰면 잘, axis는 0또는 1을 넣을 수 있지만 0을 넣으면 열(보라 색)가 들어 1을 넣으면 행(녹색)이 들어간다.apply는 dataframe을 행 또는 줄을 끊고 function에 넣어 연산 후 그 결과를 다시 dataframe으로 재합성하는 것이다. 이를 쉽게 이해하기 위해서, test_print라는 함수를 정의하고 apply시에 어떻게 기능하는지를 살펴보자.deftest_print(print):print(print)df.apply(test_print,axis=0)df.apply(test_print,axis=1)위의 코드를 실행하면 axis=0인 경우위의 코드를 실행하면 axis=0인 경우상기와 같이 반복되어 length 5000개의 Series가 출력됨을 알 수 있다. 즉, axis = 0은 df를 세로로 찢고 1열, 2열, 3열… 마지막열 순으로 계산할 수 있다.상기 코드를 실행하면 axis = 1인 경우이름:15, dtype:objectDate20210125Time15000000Open130000High135000Low129500Close135000Volume5061864Date_Conv2021-01-25Name:14, dtype:objectDate20210126Time15000000Open134000High134000Low128500Close129000Volume6270106Date_Conv2021-01-26Name:13, dtype:objectDate20210127Time15000000Open129500High132000Low127500Close128500Volume5068456Date_Conv2021-01-27Name:12, dtype:objectDate20210128Time15000000Open124000High125500Low121500Close123000Volume6270829Date_Conv2021-01-28Name:11, dtype:objectDate20210129Time15000000Open128500High128500Low121500Close122500Volume7391307Date_Conv2021-01-29Name:10, dtype:objectDate20210201시간 15000000오픈 121000-126000저 118000클로즈 125000볼륨 5620305일자_Conv2021-02-01위와 같이 5000번 반복하여 출력된다. 즉 axis=1는 df를 옆으로 꺾고 1행, 2행, 3줄…마지막 행 순으로 계산한다고 생각된다. Pandas의 Data Frame Type로 행 또는 열로 어기면, 이는 Series라는 Type로 바뀐다. Series라는 Type은 Series[‘Date’]라고 하는 경우 값이 나오기 때문에 다음과 같은 코드가 가능하다.df[‘Date’]를 출력하면 이하와 같이 표시됩니다만,df[Date] 02102161 202102153 2021094 2021084 2021084 99520001234996 20001224997 20001214998 20001117 이름:날짜, 길이:5000df를 행으로 나누어 Series를 정의한 후 ser[‘Date’]를 출력하면 아래와 같이 특정 String이 출력되는 것을 확인할 수 있다.ser=df.loc[0,:]type(ser)出力[20]:panda.core.series.Serieser[‘Date’]出力[21]:20210216이제 apply를 이용해 보자 Date_Conv로 변환할 함수를 먼저 정의해 보자defconv_date(series): 반환값 str(series[”)일자”)[0:4]+”-“+str(series[”’)일자”’)[4:6]+”-“+str(series[”’)일자”’)[6:8]이를 Apply 함수에 넣어 아래와 같이 실행하면 된다.df[‘Date_Conv’] = df.적용(conv_date,axis=1)여기에 conv_date라는 함수를 만들지 않고 apply 함수 자체에 넣을 수 있는데, lambda를 활용하면 된다.lambda는 함수를 리턴하는 것으로 문법은 다음과 같다.lambda <인수>:<조건이 True인 경우 반환 값>else인 경우 반환 값 <조건이 False <조건이 False인 경우 반환 값>conv_date 함수의 arguments는 series이므로 아래와 같이 lambda 문으로 변환할 수 있다.람다 시리즈: str(series[”’) 날짜”’)[0:4]+”-“+str(series[”’) 날짜”’)[4:6]+”-“+str(series[”’) 날짜”’)[6:8]Apply에 이를 적용시키면 아래와 같이 별도로 함수를 정의하지 않아도 사용이 가능하다.df[‘Date_Conv’]=df.apply(dfdaseries:str(series[‘])日付”’)[0:4]+”-“+str(series[”’)日付”’)[4:6]+”-“+str(series[”’)日付’])[6:8]、軸=1)다시 차트 그리기로 돌아가서 데이터의 x에 만들어준 Date_Conv를 넣고 다시 그리니fig=go.。図(data=[go.燭台(x=df[‘Date_Conv’])、open=df[‘Open’]、high=df[‘]High’,low=df[‘Low’],close=df[‘Close’])plot(図)아래와 같이 시간축이 정상인 그래프를 얻을 수 있다.상기를 함수화하면defchart_show(df, i_start, i_number):df[‘Date_Conv’]=df.apply(dfdax:datetime(year=int(x[‘Date’])[0:4]), month=int(x[‘Date’])[4:6]), day=int(str(x[‘Date’])[6:8])축=1)그림=스타트. 그림(data=[go. 촛대 키리(x=df.loc[df.index[i_start:i_start+i_number], Date_Conv’, open=df.loc[i_start:i_start+i_number], open’], high=df.loc[i_start:i_start+i_number], low=df.loc[i_start:i_number], loc[i_start]prot](dfi_number]g)g)상기와 같이 특정 범위만을 볼 수 있는 함수로 응용할 수도 있다.아울러 20일선과 같은 추세선을 긋거나 TEXT를 쓰는 부가적인 것은 다음에 알아볼 예정이다.

error: Content is protected !!