CIK_number_20250311.xlsx
0.43MB
만든이유
SEC 데이터를 이용하려면 CIK 넘버가 필요한데, 회사이름과 티커와 다르기 때문에 헷갈렸다. 찾고 싶은 회사의 재무제표를 검색하기 불편해서 CIK 넘버와 회사명을 알려주는 파일을 만들었다.
보름에 한 번 업데이트 할 예정 (다음 업데이트: 4월 1일)
과정
https://www.sec.gov/search-filings/edgar-application-programming-interfaces 에 들어가면,
이렇게 Bulk data 를 다운받을 수 있는데, 첫 번째 파일을 다운받으면 모든 회사의 재무 데이터가 들어있다.
텍스트만 있는 주제에 용량 약 18G.
코드는 GPT에게 추가적 설명을 요청하고, 개인정보를 제거하도록 하였다.
참고로 mac 으로 작성되었기 때문에, 윈도우 사용자와 다를 수 있음.
import os
import json
import pandas as pd
# JSON 파일이 있는 디렉토리 경로
# 사용자 지정 경로로 변경 가능
directory_path = "./companyfacts/"
# 저장할 엑셀 파일 경로
output_file = "CIK_number.xlsx"
# CIK 넘버와 회사명을 저장할 리스트
cik_data = []
# 디렉토리 내 모든 파일을 순회
for file_name in os.listdir(directory_path):
# '._'로 시작하는 파일은 리소스 파일이므로 건너뛰기
if file_name.startswith("._"):
continue
# JSON 파일만 처리
if file_name.endswith(".json"):
file_path = os.path.join(directory_path, file_name)
# 파일명에서 CIK 넘버 추출
cik_number = file_name.split('.')[0] # 파일명에서 CIK 넘버 추출
try:
# utf-8-sig 인코딩으로 파일 열기
with open(file_path, "r", encoding="utf-8-sig") as file:
data = json.load(file)
# 회사명 추출
company_name = data.get("entityName", "Unknown Company")
# CIK 넘버와 회사명 추가
cik_data.append([cik_number, company_name])
except Exception as e:
print(f"Error processing {file_name}: {e}")
# DataFrame으로 변환
df = pd.DataFrame(cik_data, columns=["CIK Number", "Company Name"])
# 엑셀 파일로 저장
df.to_excel(output_file, index=False)
print(f"엑셀 파일이 {output_file}에 저장되었습니다.")
올려둔 파일은 이름이 없는 행을 제거한 파일이다.
다음 과정
티커까지 연계하려 했는데, 회사이름을 저장할 때 대소문자가 다르거나 쉼표, 온점 등의 미묘한 차이가 있어 애를먹고 있다.
이 부분이 수정되면 티커까지 함께 올릴 생각이다.