시가총액 상위 종목 구하기
코스피 종목별 시가총액 누적 비율을 계산하여 전체 코스피 시장에서 시가총액 기준 상위 N%를 차지하는 종목을 추출하는 함수 top_kospi_company()를 작성하고, 상위 50%를 차지하는 종목을 추출합니다. 시가총액 누적 비율은 먼저 종목별 누적 합계를 계산하고, 이룰 전체 코스피 시가총액을 나누어 구할 수 있습니다.
비주얼 스튜디오 코드에서 새로운 파일을 만들고, 파일명을 'step_3_1.py'로 지정합니다. 다음 코드를 입력한 뒤 대화형 창에서 실행합니다. 시가총액 기준 코스와 상위 50%를 차지하는 종목 리스트를 구할 수 있습니다.
from pathlib import Path
import pandas as pd
from step_1_1 import OUT_DIR # 이전에 작성한 모듈을 불러옵니다.
from step_2_2 import OUT_2_2
OUT_3_1 = OUT_DIR / f"{Path(__file__).stem}.csv"
def top_kospi_company(df_raw: pd.DataFrame, prop: float) -> pd.DataFrame: # 08
df_raw["시가총액"] = df_raw["시가총액"].str.replace(",", "").astype(int) # 09
df_raw["조단위"] = df_raw["시가총액"] / 10_000 # 억 단위를 조 단위로 변경 # 10
df_raw = df_raw.sort_values("시가총액", ascending=False) # 내림차순 정렬 # 11
df_raw["누적비율"] = df_raw["시가총액"].cumsum() / df_raw["시가총액"].sum() # 12
df_sliced = df_raw.loc[df_raw["누적비율"] <= prop] # 슬라이싱 # 13
return df_sliced.filter(["종목명", "시가총액", "조단위", "누적비율"]) # 필터링
if __name__ == "__main__":
df_raw = pd.read_csv(OUT_2_2)
df_top = top_kospi_company(df_raw, 0.5) # 시가총액 기준 상위 50% 종목 추출
df_top.to_csv(OUT_3_1, index=False) # CSV 파일로 저장
08 시가총액 기준 코스피 상위 N%를 차지하는 종목을 추출하는 함수 top_kospi_company()를 정의합니다.
09 네이버페이 증권에서 수집한 데이터는 콤마(,)를 포함한 문자열이므로 이를 함수로 반환해야 합니다. '시가총액' 열에서 함수 str.replace()를 호출하여 콤마를 제거하고, astype() 함수를 사용하여 정수로 변환합니다.
10 '시가총액' 열을 조 단위로 변경하고, 그 결과를 '조단위' 열에 저장합니다.
11 누적합이나 누적비율을 게산할 때는 데이터의 순서가 중요하므로 사전에 데이터를 정렬해야 합니다. 함수 sort_values()를 사용하여 '시가총액' 열을 내림차순으로 정렬합니다.
12 함수 cumsum()를 호출하여 종목별 시가총액 누적합을 계산하고, 이를 위해 시가총액 합으로 나누어 누적비율을 계산합니다.
13 '누적비율' 열의 값이 매개변수 prop보다 같거나 작은 데이타를 추출하고 변수 df_sliced에 저장합니다.
이 코드를 실행하면 'output' 폴더에 'step_3_1.csv' 파일에 생성됩니다. 이를 비주얼 스튜디오 코드에서 열면 다음과 같이 21개의 종목이 추출된 것을 알 수 있습니다.
| 종목명,시가총액,조단위,누적비율 삼성전자,11649847,1164.9847,0.22969789479804725 SK하이닉스,6977356,697.7356,0.36726914225361673 현대차,1160977,116.0977,0.39015991264819383 삼성전자우,1055055,105.5055,0.4109622384123136 LG에너지솔루션,881010,88.101,0.4283329508599559 ... 생략 ... |
'프로그래밍 언어 > Python' 카테고리의 다른 글
| 네이버쇼핑 연관 키워드 검색하기 - 파이썬 패키지 준비하기 (0) | 2026.03.14 |
|---|---|
| 시가총액 데이터 시각화하기 (0) | 2026.03.11 |
| 페이지 이동 자동화하기 - 전체 데이터 수집하기 (0) | 2026.03.05 |
| 페이지 이동 자동화하기 - 총 페이지 개수 확인하기 (1) | 2026.03.02 |
| 종목별 시가총액 데이터 수집하기 - 데이터 정제하기 (0) | 2026.02.27 |