https://bigdata-doctrine.tistory.com/3
오늘은 판다스 라이브러리를 통해 이전 시간에 수집한 증권 데이터를 데이터프레임에 저장하고 맷플롯립을 통해 시각화를 한 후 엑셀에 저장해보도록 하겠습니다.
데이터프레임 만들기
#데이터프레임 생성
import pandas as pd
stock_df = pd.DataFrame({"ticker":ticker_list,
"symbol":symbol_list,
"per":pers,
"pbr":pbrs,
"dividend_yield":dividend_yields})
stock_df
데이터 분석에 많이 사용되는 판다스 라이브러리를 통해 데이터프레임을 만들어봅니다.
판다스는 다양한 데이터 분석 도구를 지원합니다.
데이터프레임을 만드는 방법은 두 가지가 있습니다.
하나는 행별로 데이터를 넣는 것, 하나는 열 별로 데이터를 넣는 것입니다.
행별로 데이터를 넣는 경우에는 딕셔너리가 아닌 리스트가 들어있는 리스트 형식을 넣어주면 됩니다.
열 별로 데이터를 넣는 경우에는 위와 같이 리스트가 들어있는 딕셔너리 형식을 넣어주면 됩니다.
column을 key로 지정해주고, 각 column에 들어갈 데이터를 리스트에 넣어 value에 넣어줍니다.
다음과 같이 출력됩니다.
이와 같이 데이터가 데이터프레임 안에 잘 들어온 것을 알 수 있습니다.
데이터프레임을 앞에서부터 10개까지 보고 싶으시면 stock_df.head(10)을 입력하시면 되고
뒤에서부터 10개까지 보고 싶으시면 stock_df.tail(10)을 입력하시면 됩니다.
정렬은 주식 이름의 가나다순으로 되어있는데 이는 pykrx에서 주식에 대한 정렬이 가나다순으로 되어있기 때문입니다.
하지만 여러분들은 이를 per, pbr, 배당률 순으로 보고 싶으실 수도 있습니다.
데이터프레임 순서 정렬하기
# per 오름차순 (NaN 제외)
per_ascending = stock_df.sort_values(by="per", ascending=True)
per_ascending[per_ascending["per"] != None].head(20)
per 오름차순으로 정렬합니다.
sort_values메서드를 사용하여 per오름차순으로 정렬합니다.
per데이터가 None인 것은 제외하고 앞에서부터 20개 출력합니다.
다음과 같이 출력됩니다.
다음은 pbr오름차순으로 정렬해봅니다.
# pbr 오름차순 (NaN 제외)
pbr_ascending = stock_df.sort_values(by="pbr", ascending=True)
pbr_ascending[pbr_ascending["pbr"] != None].head(20)
다음은 배당수익률 내림차순으로 정렬해봅니다.
# 배당수익률 내림차순
stock_df.sort_values(by="dividend_yield", ascending=False).head(20)
증권사가 배당수익률 상위권에 많이 분포해 있는 것을 알 수 있습니다.
간단한 데이터 분석
# 데이터 분석
stock_df.describe()
describe메서드는 간단한 데이터 분석을 도와줍니다.
출력 결과는 다음과 같습니다.
각 데이터의 개수, 평균, 표준편차, 최솟값, 최댓값 등 여러 통계치를 보여줍니다.
None데이터는 개수에 포함되지 않고 따라서 통계치에 포함되지 않습니다.
데이터프레임 시각화
# 데이터프레임 시각화
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(15,10))
for i, col in enumerate(stock_df):
if 2 <= i <= 4:
ax = fig.add_subplot(2, 2, i-1)
ax.title.set_text(col)
if col == "per":
stock_df[col].plot.hist(bins=[0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150])
elif col == "pbr":
stock_df[col].plot.hist(bins=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
elif col == "dividend_yield":
stock_df[col].plot.hist(bins=[0,1,2,3,4,5,6,7,8,9,10,11,12])
plt.show()
matplotlib은 다양한 시각화 도구를 제공합니다.
우리가 구한 증권 데이터를 시각화하기 위해서 히스토그램이 가장 적합할 것 같으므로
히스토그램으로 시각화를 해보도록 하겠습니다.
사이즈는 가로 15px, 세로 10px로 만들어줍니다.
여러 개의 그래프를 보여주기 위해서는 add_subplot 메서드를 사용합니다.
괄호 안에는 2행 2열의 몇 번째 위치에 그래프를 넣을지 적어줍니다.
title.set_text 메서드로 각 그래프에 제목을 붙여줍니다.
히스토그램의 범위를 설정하기 위해서는 bins를 이용합니다.
bins=[0,10,20]은 0~10, 10~20, 20~30의 범위를 가지는 히스토그램을 만들어 줍니다.
출력 결과는 다음과 같습니다.
per은 0~20까지, pbr은 0~2까지 데이터가 몰려있는 것을 알 수 있습니다.
스프레드시트에 데이터 저장
# csv로 저장
stock_df.to_csv(f"{today}_stock_data_df.csv")
지금까지 수집한 증권 데이터를 excel이나 한셀과 같은 스프레드시트 프로그램에 저장할 수 있습니다.
to_csv안에 "스프레드시트 이름.csv"의 형식으로 입력해줍니다.
지금까지 네이버 금융 사이트를 크롤링하고 데이터프레임을 만들고 시각화를 한 후 엑셀에 저장하는 작업까지 해보았습니다.
밑에 코랩 링크 남겨놓을 테니 프로그램을 직접 실행해보고 싶으시다면 위에서부터 차례대로 실행하시면 되겠습니다.
코랩 링크: https://colab.research.google.com/drive/1rUBDEIJOlB2Im8LGpzrQ4X71LUduvduE?usp=sharing
'프로젝트 > 크롤링, 스크래핑' 카테고리의 다른 글
[Python] 셀레니움으로 100대 통계지표 크롤링하기 (1) | 2022.04.04 |
---|---|
[Python] 공공데이터포털 API 사용하여 데이터 수집하기 (17) | 2022.03.27 |
공공데이터포털 오픈 API 사용법 : 인증키 생성, XML 파일 접속 (0) | 2022.03.22 |
[Python] (1)올웨더 기반 효율적 투자선 구현 : 데이터 수집 (0) | 2022.03.05 |
[Python] (1)네이버 금융 증권 데이터(PER,PBR,배당률) 수집 : 크롤링 (5) | 2022.02.10 |