728x90
반응형
※ 출처
-. 해당 내용은 유튜브의 todaycode님의 영상을 참고하였습니다.
-. 더 자세한 내용은 유튜브를 참고 부탁드립니다.
데이터 EDA 연습1¶
★학습한 내용★¶
그래프에서 단위차이가 날때 어떻게 처리해서 분석해야하는지를 배우게 되었다.
In [1]:
import pandas as pd
import numpy as np
import seaborn as sns
import FinanceDataReader as fdr
df_krx = fdr.StockListing("KRX")
In [2]:
# 데이터 확인
df_krx.shape
Out[2]:
(7110, 10)
In [3]:
# DataReader : 일별시세를 받아오는 method
# 삼성전자 2017~2021까지 불러오기
df = fdr.DataReader("005930", "2017", "2022")
df.head(2)
Out[3]:
Open | High | Low | Close | Volume | Change | |
---|---|---|---|---|---|---|
Date | ||||||
2017-01-02 | 35980 | 36240 | 35880 | 36100 | 93012 | 0.001665 |
2017-01-03 | 36280 | 36620 | 36020 | 36480 | 147153 | 0.010526 |
open : 시가 High : 호가 Low : 저가 CLose : 종가 Volume : 거래량 Change : 전일대비
In [4]:
# 시각화를 봐보자
df["Close"].plot();
In [5]:
df_krx = pd.read_csv("krx.csv")
df_krx.shape
Out[5]:
(7110, 10)
종목코드와 종목명을 불러와보자
In [6]:
df_krx[["Symbol", "Name"]].head()
Out[6]:
Symbol | Name | |
---|---|---|
0 | 060310 | 3S |
1 | 095570 | AJ네트웍스 |
2 | 006840 | AK홀딩스 |
3 | 054620 | APS홀딩스 |
4 | 265520 | AP시스템 |
이렇게 조건값을 바로 loc로 넣어서 사용할 수 있구나.. ( 새롭게 알게 된 사실 )
딱 숫자만 어떻게 빼오지.. values로도 안되는데..?
In [7]:
df_krx.loc[df_krx["Name"] == "빅히트", "Symbol"].tolist()
Out[7]:
['352820']
이건 리스트로 받아오는건데.. str로 받아오는 방법은 없는건가?
In [8]:
df_krx.loc[df_krx["Name"] == "빅히트", "Symbol"].tolist()[0]
Out[8]:
'352820'
오~ 이렇게 좋은 방법이 있다니 신기신기!!
그런데 모든 데이터를 다 이렇게 써서 불러올 수 없으니 함수를 만들어야겠구나..!
In [9]:
def item_code_to_item_name(item_name):
"""족목명을 받아 종목코드를 전화해주는 함수"""
item_code_list = df_krx.loc[df_krx["Name"] == item_name, "Symbol"].tolist()
if len(item_code_list) > 0 :
item_code = item_code_list[0]
return item_code
else:
print(f"{item_name}는 유효하지 않는 종목명입니다. 다시 확인해주세요")
return None
그럼 잘 작동하는 확인을 해봐야겠구나 !
In [10]:
print(item_code_to_item_name("N AVER"))
print(item_code_to_item_name("삼성전자"))
print(item_code_to_item_name("셀트리온"))
print(item_code_to_item_name("카카오게임즈"))
N AVER는 유효하지 않는 종목명입니다. 다시 확인해주세요
None
005930
068270
293490
In [11]:
fdr.DataReader(item_code_to_item_name("삼성전자"))
Out[11]:
Open | High | Low | Close | Volume | Change | |
---|---|---|---|---|---|---|
Date | ||||||
1997-02-24 | 974 | 990 | 951 | 957 | 81070 | NaN |
1997-02-25 | 969 | 1022 | 948 | 1014 | 109130 | 0.059561 |
1997-02-26 | 1013 | 1065 | 1006 | 1017 | 227060 | 0.002959 |
1997-02-27 | 1017 | 1031 | 999 | 1019 | 81090 | 0.001967 |
1997-02-28 | 1019 | 1049 | 1001 | 1032 | 148450 | 0.012758 |
... | ... | ... | ... | ... | ... | ... |
2021-02-01 | 81700 | 83400 | 81000 | 83000 | 28046832 | 0.012195 |
2021-02-02 | 84100 | 86400 | 83700 | 84400 | 26302077 | 0.016867 |
2021-02-03 | 84800 | 85400 | 83400 | 84600 | 22112205 | 0.002370 |
2021-02-04 | 83500 | 83800 | 82100 | 82500 | 24171688 | -0.024823 |
2021-02-05 | 83100 | 84000 | 82500 | 83500 | 17139131 | 0.012121 |
6000 rows × 6 columns
In [12]:
def find_item_list(item_name, year=2020):
item_code = item_code_to_item_name(item_name)
if item_code:
df_day = fdr.DataReader(item_code, str(year))
return df_day
else:
return print(f"{item_name}는 유효하지 않는 종목명입니다. 다시 확인해주세요")
In [13]:
stock_daily = find_item_list("빅히트", 2000)
In [14]:
stock_daily.plot()
Out[14]:
<AxesSubplot:xlabel='Date'>
그런데... 그래프가 바닥에 다 깔려있어서 보기가 매우 사납죠..? 어떻게 해야할까요?
In [15]:
stock_daily.plot(subplots=True, figsize=(10,8));
In [16]:
stock_daily.hist(figsize=(10,8), bins=30);
내가 원하는건... 좀더 자세히 보는거였는데..
좋은 방법이 없을까?
secondary_y를 사용하면 될거 같다! 휴
명확하게 보이기 위해 일단 두개만 가지고 와서 그래프를 그려보자
In [17]:
stock_daily[["Close", "Volume"]].plot(secondary_y="Volume");
단위가 1e6으로 나와 있는데
In [18]:
format(1e6, ",")
Out[18]:
'1,000,000.0'
1e6 = 1,000,000 을 의미하며, 이를 과학적 표기법이라고 합니다.
728x90
반응형
'Code > 머신러닝(ML)' 카테고리의 다른 글
[DataScience] 선형변환이란? (0) | 2021.02.06 |
---|---|
[DataScience] 가설함수, 손실함수, 경사하강법(feat. Linear Regression) (0) | 2021.02.06 |
[EDA] 무작정 따라하는 EDA1 (0) | 2021.02.06 |
[DataScience]선형회귀(Linear regression)로 분류를 하지 않는 이유 (0) | 2021.01.30 |
[DataScience] 분산/편향 트레이드오프(Multiple Linear Regression) (0) | 2021.01.29 |