import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import requests
page, pagesize = 1, 20
url = f'https://m.stock.naver.com/api/index/KOSPI/price?
pageSize={pagesize}&page={page}'
print(url)
# https://m.stock.naver.com/api/index/KOSPI/price?pageSize=20&page=1
response = requests.get(url)
response, response.text[:200]
# <Response [200]>
: json(str) > list, dict > DataFrame
type(response.text), type(response.json())
# (str, list)
data = response.json()
kospi = pd.DataFrame(data)[['localTradedAt', 'closePrice']]
kospi.tail(2)
def stock_crawling(code='KOSPI', page=1, pagesize=60):
# 1. 웹페이지분석 : 크롬 개발자도구 : URL
url = f'https://m.stock.naver.com/api/index/
{code}/KOSPI/price?pageSize={pagesize}&page={page}'
# 2. request(URL) > response(DATA) : DATA(json(str))
response = requests.get(url)
# 3. DATA(json(str)) > list, dict > DataFrame
return pd.DataFrame(response.json())
[['localTradeAt', 'closePrice']]
kospi = stock_crawling()
kosdaq = stock_crawling('KOSDAQ')
kosdaq.tail(2)
# 1. 웹페이지분석 : 크롬 개발자도구 : URL
page, pagesize = 1, 60
url = f'https://m.stock.naver.com/front-api/v1/marketIndex/prices?\
page={page}&category=exchange&reutersCode=
FX_USDKRW&pageSize={pagesize}'
# 2. request(URL) > response(DATA) : DATA(json(str))
response = requests.get(url)
# 3. DATA(json(str)) > list, dict > DataFrame
usd = pd.DataFrame(response.json()['result'])
[['localTradeAt', 'closePrice']]
usd.tail(2)
len(kospi), len(kosdaq), len(usd)
# (60, 60, 60)
# 데이터전처리 1: 컬럼 : 날짜, 코스피, 코스닥, 환율
df = kospi.copy() # 얕은복사, 깊은복사
df.columns = ['data', 'kospi']
df['kosdaq'] = kosdaq['closePrice']
df['usd'] = usd['closePrice']
df.tail(2)
help(df['kospi'].apply)
df['kospi'][:5]
# 데이터전처리 2 : 데이터타입변경
df['kospi'] = df['kospi'].apply(lambda data:
data.replace(',', '')).astype('float')
df['kosdaq'] = df['kosdaq'].apply(lambda data:
data.replace(',', '')).astype('float')
df['usd'] = df['usd'].apply(lambda data:
data.replace(',', '')).astype('float')
df.dtypes
%config InlineBackend.figure_formats = {'png', 'retina'}
import matplotlib.pyplot as plt
plt.figure(figsize=(20, 5))
plt.plot(df['date'], df['kospi'], label='kospi')
plt.plot(df['date'], df['kosdaq'], label='kosdaq')
plt.plot(df['date'], df['usd'], label='usd')
plt.xticks(df['date'].values[::5])
plt.legend()
plt.show()
min max scaling
latex syntax : https://jjycjnmath.tistory.com/117
from sklearn.preprocessing import minmax_scale
minmax_scale(df['kospi'])
plt.figure(figsize=(20, 5))
plt.plot(df['date'], df['kospi'], label='kospi')
plt.plot(df['date'], df['kosdaq'], label='kosdaq')
plt.plot(df['date'], df['usd'], label='usd')
plt.xticks(df['date'].values[::5])
plt.legend()
plt.show()
# 문제정의 : 원달러환율과 코스피주가는 반대방향으로 움직인다.
# > 원달러환율이 낮으면 > 환전(원>달러) : 원달러환율이 높으면 >
환전(달러>원) > 코스피 구매
# 이 방식이 좋은 투자 방식입니다. -> 책임은 본인의 몫..
df.corr()
https://financedata.github.io/posts/finance-data-reader-users-guide.html#!pip install -U finace-datareader # 설치
import FinanceDataReader as fdr
usd = fdr.DataReader('USD/KRW', '2020')
kospi = fdr.DataReader('KS11', '2020')
kospi.tail(2)
usd.tail(2)
1. 개발자도구 : 웹페이지분석 : url
2. request(url) > response(data) : data(json)
3. data(json) > list, dict > DataFrame