라이브러리 불러오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import FinanceDataReader as fdr
상장종목 목록 가져오기
url = "https://finance.naver.com/sise/entryJongmok.naver?&page=1"
이 url로 상위 10개 종목 불러오기
df_top10 = pd.read_html(url)[0].dropna()
df_top10
전체 상장종목에서 종목 코드와 종목명만 가져오기
fdr.StockListing('KRX').head(3)
df_krx = fdr.StockListing('KRX')[['Name', 'Code']]
df_krx.head()
merge를 통한 시가총액 상위 10개 종목 만들기
- merge는 key값이 일치하는 것으로 합침
- 이름이 같으면 on 사용하고, 다르면 left_on과 right_on 사용
일별시세를 수집하기 위해 종목코드가 필요 -> 종목코드를 찾자
df_10 = df_top10.merge(df_krx, left_on = '종목별', right_on = 'Name')[['Name', 'Code']]
df_10
isin을 사용해서 찾기
df_krx[df_krx['Name'].isin(df_top10['종목별'])]
일별 시세 수집
fdr.DataReader('005930', start = '2022')['Close']
여러 종목이 종가 수집
- 종목코드로 수집 가능
반복문을 사용해서 여러 종목의 종가 수집
item_list = [fdr.DataReader(code, start = '2022')['Close'] for code in df_10['Code']]
df = pd.concat(item_list, axis = 1)
df
- item_list 안에 시가총액 순위 별로 종가가 들어있음
- 순서대로 가져왔기 때문에 df_10['Name']을 columns 에 넣어도 가능
df = pd.concat(item_list, axis = 1)
df.columns = df_10['Name']
df
시각화 폰트 설정
# 한글폰트 사용을 위해 설치
!pip install koreanize-matplotlib
import koreanize_matplotlib
# 그래프에 retina display 적용
%config InlineBackend.figure_format = 'retina'
import matplotlib.pyplot as plt
plt.style.use('ggplot')
- 그래프의 다양한 style 설정 : https://matplotlib.org/stable/tutorials/introductory/customizing.html
- 폰트를 포함하고 있는 스타일을 지정하게 되면 폰트 설정이 초기화 되어 한글폰트가 깨지는 문제 발생
- 한글폰트 사용을 위해 추천하는 스타일 사용! -> 'fivethirtyeight', 'ggplot'
print(plt.style.available)
>> ['Solarize_Light2', '_classic_test_patch', '_mpl-gallery', '_mpl-gallery-nogrid', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']
여러 종목 한 번에 시각화 하기
df.plot(figsize = (12, 6))
plt.legend(bbox_to_anchor = (1, 1))
plt.legend(bbox_to_anchor = (1, 1)) -> 범주박스 위치
# 2개의 종목 비교하기 : "삼성전자", "LG화학" 을 plot으로 시각화 합니다.
df[['삼성전자', 'LG화학']].plot()
2축 그래프 사용하기
df[['삼성전자', 'LG화학']].plot(secondary_y = ['LG화학'], figsize = (12, 6))
[더하기]
판다스의 describe()를 통해 수치 데이터의 기술통계 구했을 때 알 수 있는 것은?
- 빈도수, 평균, 표준편차, 최솟값, 1사분위수(25%), 2사분위수(50%, 중앙값), 3사분위수(75%), 최댓값
- 'count', 'mean', 'std', 'min', '25%', '50%', '75%', 'max'
pivot() / pivot_table() / groupby() / crosstab()
- pivot() 은 형태만 변경하고 연산을 하는 기능이 없음 -> 연산을 하기 위해서는 pivot_table()을 사용해야 합니다.
- pivot_table()은 groupby()를 사용하기 쉽게 만들어 놓은 기능이며, crosstab()은 pivot_table() 을 사용하기 쉽게 만들어 놓은 기능입니다.
'AI SCHOOL > Python' 카테고리의 다른 글
[Python] Plotly / FinanceDataReader (1) | 2023.02.02 |
---|---|
[Python] FinanceDataReader - 2 (0) | 2023.02.01 |
[Python] 서울 코로나 데이터 분석(EDA) - 2 (0) | 2023.01.31 |
[Python] 서울 코로나 데이터 분석(EDA) - 1 (0) | 2023.01.30 |
[Python] Open API 사용하여 서울시 다산 콜센터 자주 묻는 질문 목록 데이터 수집 (0) | 2023.01.24 |