[파이썬/Python] 나스닥 AI 반도체 주요 기업들 주식 분석하기!📉📈(주가 편)

2025. 1. 25. 10:57·Project/주식 & 비트코인 분석

개요

이전 3개의 포스팅에서 연달아 엔비디아의 주식을 간단하게 분석해 보았다. 

하지만 조금 더 깊고 넓게, 엔비디아가 포함된 한 산업군의 주가를 분석하는 것도 재미있을 것 같았다.

흥미로운 상관관계가 있을지도 모르고, 조금 더 다양한 기법을 적용해볼 수도 있다.

이번 글에서는 나스닥에 상장된 AI 반도체 산업 기업들의 주가 데이터를 가져와서

간단하게 분포까지 확인해볼 것이다.

 

 

데이터 준비

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import yfinance as yf
import datetime as dt

필요한 라이브러리를 import해준다. 보통 사이킷런 말고는 이렇게 미리 해놓는게 편한 듯.

 

start = dt.datetime(2024,1,1)
end =  dt.datetime.now()

datetime의 datetime함수를 사용해서 시작 날짜와 끝 날짜를 지정한다. 1년 정도의 데이터를 분석해보자.

now까지 붙여놓으면 현재 시스템의 날짜를 return한다.

 

comp_list = ['NVDA','QCOM','AMD','AVGO']

for comp in comp_list:
    globals()[comp] = yf.download(comp,start,end)

comp_df = [NVDA,QCOM,AMD,AVGO]
comp_name = ['NVIDIA','QUALCOMM','AMD','BROADCOM']

for comp in comp_df:
    comp.columns = ['Close','High','Low','Open','Volume']

for comp,name in zip(comp_df,comp_name):
    comp['company_name'] = name

df = pd.concat(comp_df,axis=0)
df.head()

주의 : 각각의 변수들의 이름과 구분을 명확히 해야 함!

이 하나의 셀을 통해서 각 회사의 데이터를 개별적으로, 그리고 하나의 데이터프레임으로 저장할 것이다.

 

이번 코드에서 다룰 회사는 엔비디아(NVDA), 퀄컴(QCOM), AMD(AMD), 브로드컴(AVGO) 이다.

첫 줄에서 각 회사의 티커를 문자열로 담아준다. 

 

두 번째 코드에서 globals라는 함수가 등장하는데,

이 함수는 세션의 전역 변수를 딕셔너리 형태로 담는 기능을 한다.

각각의 티커가 key, yf.download가 value가 되는 형식이다. 각각의 데이터를 comp_df 에 담아준다.

 

네 번째 코드에서는 yf.download의 열 이름을 초기화해준다. 미리 해주는게 나음.

 

다섯번째 코드에서는 zip함수가 등장하는데, 받은 이터레이터들에서 하나씩 요소를 빼서 튜플로 return한다.

즉, 데이터프레임 하나, 회사 이름 하나를 뺀 후, 해당 데이터프레임에 사명이라는 열을 만든다.

 

마지막에 concat을 통해 하나의 데이터프레임으로 만든다.

  • comp_list :  티커들이 모인 리스트
  • NVDA, QCOM, AMD, AVGO : 회사별 데이터프레임
  • comp_df : 회사별 데이터프레임이 모인 리스트
  • comp_name : 사명 리스트
  • df : 회사들의 데이터가 전부 모인 데이터프레임

위의 설명으로 정리하겠다.

 


중복 & 결측치 확인

for comp,name in zip(comp_df,comp_name):
    print(f'<{name}>')
    print('duplicated rows:',comp.duplicated().sum())
    print('Missing Values: ')
    print(comp.isnull().sum(), '\n')

zip함수를 통해 회사별 데이터프레임과 회사명을 하나씩 빼주는 for문을 구성하여 중복값과 결측치를 한번에 구한다.

회사명 / 중복값 수 / 결측치 수 순서로 출력된다.

한 코드로 중복값과 결측치 모두 확인하기. 회사별로 총 4개가 출력된다.
한 코드로 중복값과 결측치 모두 확인하기. 회사별로 총 4개가 출력된다.

 


시간별 주가 분포

plt.style.use("bmh")

이제 본격적인 시각화를 진행하자. matplotlib의 기본 스타일은 그럭저럭 볼만하지만,

수치형 데이터를 다룰 때는 격자 무늬가 포함된 스타일이 나을 것이다. 미리 수정해주자.

 

plt.figure(figsize = (15,6))
plt.subplots_adjust(top = 1.6, bottom = 1.55)
for i, comp in enumerate(comp_df, start=1):
    plt.subplot(2,2,i)
    comp['Close'].plot()
    plt.xlabel(None)
    plt.ylabel('Close($)')
    plt.title(f'Closing Price of {comp_name[i-1]}')
plt.show()
  • plt.subplots : 먼저 행 개수와 열 개수를 설정한 후, ax 객체를 받아서 ax[행/열] 형식으로 작성.
  • plt.subplot : 행과 열 개수 설정은 동일하지만, 왼쪽 상단(1)부터 시작해서 지그재그로 작성.

for문으로 그래프를 그리는데는 사실 숫자 하나만 받아서 그리드를 완성하는 후자가 낫다!

각각의 회사에 대한 주가 시계열 분포 그래프. 나중에 나오겠지만, 엔비디아와 브로드컴이 비슷한 양상을 띈다.
각각의 회사에 대한 주가 시계열 분포 그래프. 나중에 나오겠지만, 엔비디아와 브로드컴이 비슷한 양상을 띈다.

 

def close_price_plot(left_limit):
    for i, comp in enumerate(comp_df, start=0):
        comp = comp.iloc[left_limit:,:]
        comp['Close'].plot(label = comp_name[i], alpha = 0.75)
        plt.xlabel(None)
        plt.ylabel('Close($)')
        plt.title('Closing Prices of top AI semiconductor companies')
    plt.legend()
    plt.show()

close_price_plot(0)

사실 시계열 분석에서 중요한 것 중 하나는 시간 스케일을 조정하는 것이다.

함수 정의 코드인 def 와 iloc 를 통해 데이터프레임을 중간에 끊음으로써 스케일 조정을 구현했다.

또한, 위의 코드는 그리드를 사용했지만, 이미지가 너무 넓어지는 것도 좋지 않으므로

label과 legend로 구분하여 한 플롯에 모두 겹치도록 했다.

한 플롯에 모두 표현한 모습. 2024년 후반기에 브로드컴이 무슨 짓을..
한 플롯에 모두 표현한 모습. 2024년 후반기에 브로드컴이 무슨 짓을..

 

같은 산업군의 주가를 모아놓으니 흥미로운 점은,

AMD를 제외한 3개의 주가가 비슷한 그래프 모양을 띈다는 것이다.

후반기 브로드컴의 독주를 제외하면 증감 구조가 일치하는 것을 그래프로 확인할 수 있다.

나중에 상관분석으로 더 깊게 파야할 주제이다.

 


시간별 거래량 분포

plt.figure(figsize = (15,6))
plt.subplots_adjust(top = 1.6, bottom = 1.55)

def volume_plot(left_limit):
    for i, comp in enumerate(comp_df, start=1):
        comp = comp.iloc[left_limit:,:]
        plt.subplot(2,2,i)
        comp['Volume'].plot(color = '#d14358')
        plt.xlabel(None)
        plt.ylabel('Volume')
        plt.title(f'Day Volume of {comp_name[i-1]}')
        #break
    plt.show()

volume_plot(100)

처음 시간별 주가 분포 그리드와 동일한 구조지만, 종가(Close)대신에 거래량(Volume)으로 플롯을 그려보자.

사실 전부 티스토리에 올려서 공유하고 싶지만, 그리드 플롯이 기본적으로 매우 큰 크기를 자랑한다..

그래서 break를 for문 끝에 넣어서 회사 하나의 거래량 그래프만 출력했다.

엔비디아 주식 거래량의 시계열 분포. 매우 변동성이 크지만 우하향한다.
엔비디아 주식 거래량의 시계열 분포. 매우 변동성이 크지만 우하향한다.

 

흥미롭다. 최근에 붐업된 종목 치곤 오히려 거래량의 추세는 우하향한다. 

거래량은 y축 X 1e8 (10의 8승) 으로 계산한다.

 


관련 포스팅

https://skrrdevlog.tistory.com/entry/파이썬-야후-주식API와-파이썬으로-엔비디아-주가분석-시각화-편

 

[파이썬] 엔비디아 주가 분포 & 추세 분석하기 (시각화 편)

개요이전 편에서 야후 금융 데이터를 받아서 필요한 전처리를 모두 수행했다. 올바른 데이터가 모두 갖춰졌다면 분석을 통해서 인사이트를 얻고, 그것을 직관적인 형태로 보고까지 해야한다."

skrrdevlog.tistory.com

https://skrrdevlog.tistory.com/entry/파이썬-야후-주식API와-파이썬으로-엔비디아-주가분석-전처리스케일링-편

 

[파이썬] 야후 주식API와 파이썬으로 엔비디아 주가분석 (전처리/스케일링 편)

개요데이터분석에 대한 기본 개념과 파이썬이라는 언어에 익숙해졌다면, 여러 종류의 데이터를 가지고 연습을 해봐야실력이 늘기 마련이다. 여러 도메인 (경제, 사회, 자연어, 정치 등) 에 대한

skrrdevlog.tistory.com

 

'Project > 주식 & 비트코인 분석' 카테고리의 다른 글

[파이썬/Python] AI 반도체 주식 분석하기!📉📈(이동평균 & 수익률)  (3) 2025.01.28
[파이썬] 엔비디아 주식 예측 머신러닝 모델 만들고 평가까지 (최종)  (11) 2025.01.23
[파이썬] 엔비디아 주식 분포 & 추세 분석하기 (시각화 편)  (16) 2025.01.21
[파이썬] 야후 주식API와 파이썬으로 엔비디아 주가분석 (전처리/스케일링 편)  (2) 2025.01.19
'Project/주식 & 비트코인 분석' 카테고리의 다른 글
  • [파이썬/Python] AI 반도체 주식 분석하기!📉📈(이동평균 & 수익률)
  • [파이썬] 엔비디아 주식 예측 머신러닝 모델 만들고 평가까지 (최종)
  • [파이썬] 엔비디아 주식 분포 & 추세 분석하기 (시각화 편)
  • [파이썬] 야후 주식API와 파이썬으로 엔비디아 주가분석 (전처리/스케일링 편)
흑석동사는시골쥐
흑석동사는시골쥐
문과 경영학도 숫자 배우기 프로젝트
  • 흑석동사는시골쥐
    NaN
    흑석동사는시골쥐
  • 전체
    오늘
    어제
  • 링크

    • 독서 일지
    • 올리고 싶은 거 올려요
    • 분류 전체보기 (75)
      • Coding & Data Analysis (52)
        • Python (23)
        • R (21)
        • Excel & Data (2)
        • Git & Github (4)
        • Certificate (2)
      • Project (15)
        • 일자리 스크래핑 서비스 (8)
        • 최적의 인스타 피드 (2)
        • 주식 & 비트코인 분석 (5)
      • Economics (1)
        • 경제기사 스크랩 (1)
      • Records & Thoughts (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 공지사항

  • 인기 글

  • 태그

    지도
    데이터분석
    Colab
    개발
    비전공자
    파이썬
    FLASK
    웹스크래퍼
    r
    데이터수집
    시각화
    Python
    다항회귀
    git
    주가분석
    주식
    기초
    동아리
    머신러닝
    AI반도체
    데이터
    자격증
    프로그래밍
    adsp공부법
    엔비디아
    ADSP
    심장병 데이터
    전처리
    matplotlib
    코랩
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
흑석동사는시골쥐
[파이썬/Python] 나스닥 AI 반도체 주요 기업들 주식 분석하기!📉📈(주가 편)
상단으로

티스토리툴바