인공지능 (AI) 따라잡기

[AI야 놀자] 3편 : Data Analyst GPT로 시총 상위주 시사점 찾기

MoneyManager 2025. 6. 27. 01:49
728x90

 

해당 이미지는 한국거래소 OPEN API 를 활용해 구글시트에서 출력된 자료입니다.

 

한국거래소 KRX OPEN API로

시가총액 상위 10대 기업의

최근 10거래일간

일별 시가총액

가져와 봤습니다.  

 

해당 자료를 가져오는 것도

chatGPT를 활용해

앱 스크립트를 만들었습니다.

 

이제 chatGPT도

어느정도 학습이 되서 그런지

원하는 방향으로 코드를 잘 짜주네요.

 (해당 코드 또는 스크립트는

글 하단에 적어두겠습니다. )


그나저나 뭔가 버튼이 하나 있으면

편할 것 같아서

하드디스크(?) 비슷한

 도형을 하나 선택했습니다. 

 

도형을 클릭하면 

구글시트가

 일을 시작 합니다. 

 

구글시트에서 도형에

스크립트 할당하면

되는데 

아래 그림을

참고해 주세요.  

 

 

이제

A7 셀 쪽에 도형을 클릭하면

3행의 기준일자와 5행의 종목코드를

입력받아

한국거래소 data에서

시가총액을 가져옵니다.

 

출력은 A9:K20까지 출력 설정 


 

개인적으로 데이터 분석할때

1원단위 까지 하는것을 선호하다 보니

단위 변환 없이 그대로 가져왔습니다.  

 

한국거래소 KRX OPEN API는

당일의 data는 지원하지 않아

당일분의 전체 data는

한국거래소 '정보데이터시스템' 에서

추가로 다운로드 받았습니다. 

 

당일 화일은 구글드라이브에 업로드 한 후에

구글시트의 importrange('URL') 함수를 통해

최근일_주가data 시트에 출력 


오늘은 Data Analyst GPT

써 볼 예정입니다. 

 

 

Data Alaiyst GPT를 선택해주고 

프롬프트를 작성해 줍니다.   

 

[프롬프트]

 

아래 데이터는 2025년 6월 26일 한국 증시의 시가총액 기준 상위 10개사의 시가총액을 표시하고 있다. 기사를 작성하려고 하는데 이 데이터에서 어떤 시사점이 있는지 찾아줘.

 

자연어 문장과 구글시트에서 데이터를 복사해 첨부함.

 

1분 58초 동안 데이터를 들여다 보고

답변을 이렇게 내놨네요.

 

[답변 시작]

1m 58s 동안 생각함

톱10 시가총액(6 월 12 일 → 6 월 26 일)에서 읽을 수 있는 다섯 가지 시사점

  1. ‘AI HBM’이 만든 ‘SK하이닉스 효과’
    • 두 주 사이 SK하이닉스 시총이 +24.4 %(+41.9 조 원) 급증하며 200 조 원을 돌파, 톱10 증가분의 72 %를 혼자 책임졌다. AI용 고대역폭메모리(HBM) 수요가 ‘엔비디아 효과’와 겹치며 연일 사상 최고가를 경신한 결과다. gap
      → 삼성전자와의 시총 격차가 181 조 → 143 조 원으로 좁혀졌다. hankyung.commk.co.kr
  2. 톱10 총액 6.5 %↑…사실상 ‘반도체 장세’
    • 10개 종목의 합계 시총은 900.4 조 → 958.8 조 원(+58.4 조 원, +6.5 %).
    • SK하이닉스를 제외하면 증가폭은 **+16.5 조 원(+1.8 %)**에 그쳐, 시장 상승이 특정 테마(반도체)에 집중됐음을 보여준다.
  3. 플랫폼주는 ‘롤러코스터’: 네이버 5위→9위 급락
    • 네이버는 6 월 24 일 46 조 원으로 일시적으로 시총 5위까지 치솟았지만, 26 일 하루 -7.9 %(-3.56 조 원) 급락하며 9위로 밀렸다.
    • 외국인 차익실현과 규제 우려가 동반된 ‘거품 경고’가 작동한 전형적 사례. mk.co.krg-enews.com
  4. ‘원전 모멘텀’의 도약 vs ‘방산 피로감’의 후퇴
    • 두산에너빌리티: 체코‧SMR 수주 기대에 **+18.5 %**로 8위로 점프, 40 조 클럽 합류. weekly.donga.com
    • 한화에어로스페이스: 3월 대규모 유증 이후 상승 피로가 누적되며 **-7.9 %**로 5→7위로 하락. chosun.com
  5. ‘중위권 40 조 클럽’ 4파전
    • KB금융(41.9 조), 한화에어로(41.5 조), 두산에너빌리티(41.4 조), 네이버(41.4 조)가 불과 5,000 억 원 안팎 차이로 엎치락뒤치락.
    • 경기·정책 모멘텀에 따라 톱5 재편 가능성이 열려 있다는 점이 기사화 포인트.

 기사에 활용할 만한 추가 한 줄 아이디어

 
관점핵심 문장
시장 집중도 “삼성전자·SK하이닉스 두 종목이 톱10 시총의 59 %를 차지, ‘양강 체제’가 더 공고해졌다.”
섹터 로테이션 “6월 마지막 주, ‘AI 반도체 → 차익실현 → 원전/배당’으로 수급이 빠르게 이동했다.”
경고음 “외국인 순매수의 방향이 바뀔 경우, 네이버 사례처럼 중위권 종목의 변동성은 더 커질 수 있다.”
 

이 다섯 가지 메시지를 중심으로 ‘AI 광풍이 끌고, 원전·방산이 밀고, 플랫폼은 조정받는’ 6월 말 코스피 시가총액 지형 변화를 정리하면 읽는 재미와 시황 인사이트를 모두 잡을 수 있습니다.

출처
 

[답변 끝]

답변이 매우 마음에 들어요.

  

여러분들 생각은 어떠신가요?

 

Data Analyst GPT

또 만나요.

 

 

해당 내용을

후배 기자에게 주고

기사 발제에

참고하라고 했습니다. 


 

아쉬움이 남아서

구글시트 날짜를 바꿔 볼께요.

 

데이터를 쉽게 가져온다는 것을

보여드리기 위해

일자를 매월말

입력하고 버튼을 눌러봤습니다. 

 

솔직히 처리 속도는 조금 아쉽지만,

일일히 해당일자 데이터 다운로드 받고

또 찾고 하는 번거로움에 비하면 엄청 편하죠.

 

나중에 데이터를 다운받아서

SQLite 라는 DB관리

프로그램이 좋다는 소문이 있던데

살펴봐야겠습니다. 

 

그나저나 

만약 아래의 도표를 직속상사가

빨리 만들어서 보내라고 한다면....

 

 


[chatGPT가 짜준 스크립트]

 

해당 스크립트를 복사해도

바로 실행되지 않을 수 있습니다.   

 

일단 한국거래소 OPEN API 싸이트에서

인증키를 받으셔야 하고, 

서비스도 개별로 다 승인 받아야 하거든요.

(유가증권시장, 코스닥시장, 코넥스 사용)

 

하지만, 뭐 어렵지는 않아요. 

돈 들어가는 것도 없구요.

 

스크립트에서 

const KEY  = "A1E5960AXXXXXXXXXXXXXXXE1B0F22618D96FEA5";

이 부분을 본인이 받은

인증키로 수정해서 사용하세요

 

 

 

 

/**

 *  시트  : 일자별_종목별_주가
 *  날짜  : B3:K3 (텍스트 yyyymmdd)   ← 최대 10개
 *  코드  : B5:K5 (6자리 텍스트)      ← 최대 10개
 *  출력  : A10 셀부터  ─ 행=날짜, 열=종목코드, 값=TDD_CLSPRC(종가)
 */
function fetchDailyClosePrices() {

  /* ───────── 기본 설정 ─────────────────────────── */
  const SH   = SpreadsheetApp.getActive()
                 .getSheetByName("일자별_종목별_주가");    // ★ 새 시트명
  const KEY  = "A1E5960AXXXXXXXXXXXXXXXE1B0F22618D96FEA5";

  /* 3개 시장 End-Point */
  const EPS  = [
  ];

  /* ───────── 입력값 읽기 ──────────────────────── */
  const dates = SH.getRange("B3:K3").getValues()[0]
                .map(v => v.toString().trim())
                .filter(Boolean);                         // 날짜 배열

  const codes = SH.getRange("B5:K5").getValues()[0]
                .map(v => v ? v.toString().padStart(6,"0") : "")
                .filter(Boolean);                         // 6자리 코드

  if (!dates.length || !codes.length) {
    SpreadsheetApp.getUi().alert("날짜(B3:K3)와 종목코드(B5:K5)를 모두 입력해 주세요.");
    return;
  }

  /* ───────── 결과 배열 시작 ────────────────────── */
  const out = [["기준일자", ...codes.map(c => "'" + c)]]; // 헤더(코드 → 텍스트 고정)

  /* ───────── 날짜 루프 ─────────────────────────── */
  dates.forEach(date => {
    const row = [date];

    codes.forEach(code => {
      let closePrc = "데이터없음";

      for (const ep of EPS) {
        try {
          const res = UrlFetchApp.fetch(`${ep}?basDd=${date}`, {
            headers:{ "AUTH_KEY": KEY }, muteHttpExceptions:true
          });
          const list = (JSON.parse(res.getContentText()).OutBlock_1) || [];

          const hit  = list.find(o =>
            (o.ISU_SRT_CD && o.ISU_SRT_CD === code) ||
            (o.ISU_CD && o.ISU_CD.slice(-6) === code)
          );

          if (hit && hit.TDD_CLSPRC) {        // ★ 종가 필드
            closePrc = hit.TDD_CLSPRC;        // 원본(콤마 포함)
            break;
          }
        } catch(e){ Logger.log(e) }
      }
      row.push(closePrc);
    });

    out.push(row);
  });

  /* ───────── 시트 출력 ────────────────────────── */
  SH.getRange("A10:K25").clearContent();
  SH.getRange(10,1,out.length,out[0].length).setValues(out);
}

 

 

728x90