반응형
스크리너(조건검색)를 활용해서 투자 대상을 선별하다 보면 조건의 범위가 넓은 경우에는 대상이 200개가 넘어가기도 하는데요. 계속 같은 조건을 활용해 일정 주기마다 새로 스크리닝을 하는 경우에는 어느 주식이 결과에서 지워졌고 어느 주식이 새로 생겼는지 알기가 어렵습니다.
그럴 때를 위해 결과에서 삭제된 값과 추가된 값을 간단하게 비교해 엑셀 파일을 생성하는 코드를 AI를 활용해 작성했습니다.
사용법
- 파이썬으로 작성된 코드이기에 python과 pandas 라이브러리, openyxl 라이브러리를 설치해 주세요. 설치 방법은 구글링 하시면 쉽게 찾을 수 있습니다.
- 사용하기 전에 간단한 엑셀 파일을 만들어야 합니다.
A열에는 과거 결과값의 티커만, B열에는 현재 결괏값의 티커만 뽑아서 복사&붙여 넣기 해주세요.
(꼭 아래 사진처럼 간단하게 티커만 모아서 정리해주세요.)
- 해당 코드를 복사&붙여넣기 후 실행해 주세요.
import pandas as pd
import tkinter as tk
from tkinter import filedialog
# 1. Tkinter를 사용하여 파일 탐색기 창 열기
root = tk.Tk()
root.withdraw() # Tkinter의 기본 창을 숨깁니다.
# 2. 파일 선택 창을 띄워 사용자가 파일을 선택하도록 합니다
file_path = filedialog.askopenfilename(title="Select Excel File",
filetypes=[("Excel files", "*.xlsx *.xls")])
# 3. 파일이 선택되었는지 확인
if file_path:
# Excel 파일을 헤더 없이 불러오기
df = pd.read_excel(file_path, header=None)
# A열(0번째 열)과 B열(1번째 열)의 값 집합(Set) 생성
set_A = set(df[0].dropna()) # A열의 값 집합
set_B = set(df[1].dropna()) # B열의 값 집합
# A열에만 존재하는 값
only_in_A = list(set_A - set_B)
# B열에만 존재하는 값
only_in_B = list(set_B - set_A)
# 두 리스트의 길이를 맞추기 위해 빈 값(None)을 추가
max_len = max(len(only_in_A), len(only_in_B))
only_in_A.extend([None] * (max_len - len(only_in_A)))
only_in_B.extend([None] * (max_len - len(only_in_B)))
# 결과 출력
print("삭제된 ticker:")
print(only_in_A)
print("\n새로 추가된 ticker:")
print(only_in_B)
# 새로운 DataFrame을 생성하여 결과를 저장
result_df = pd.DataFrame({'Removed': only_in_A,
'Added': only_in_B})
# 파일 저장 창을 띄워 저장할 위치를 선택하게 합니다
save_path = filedialog.asksaveasfilename(defaultextension=".xlsx",
filetypes=[("Excel files", "*.xlsx *.xls")])
if save_path:
result_df.to_excel(save_path, index=False)
print(f"\n결과가 '{save_path}' 파일로 저장되었습니다.")
else:
print("파일이 저장되지 않았습니다.")
else:
print("파일이 선택되지 않았습니다.") - 첫 번째로 나오는 파일 선택창에서는 만들어둔 엑셀 파일을 업로드하시면 되며, 두 번째로 나오는 파일 선택창에서는 비교 결과 파일을 저장하고 싶은 경로와 파일명을 업로드하시면 됩니다.
- 아래 사진처럼 생긴 파일이 다운로드되었다면 성공한 겁니다.
A열(Removed)은 지워진 티커, B열(Added)은 추가된 Ticker입니다.
작동방식
작동방식은 간단합니다.
- A열의 티커(과거)로 이루어진 집합과 B열의 티커(현재)로 이루어진 집합을 생성합니다.
- 집합 A - B는 A열에만 존재하고 B열에는 존재하지 않는 티커(삭제된 티커)를, B - A는 B열에만 존재하고 A열에는 존재하지 않는 티커(추가된 티커)를 뜻합니다.
- A - B와 B - A를 각각 새로운 엑셀 파일의 A열과 B열에 저장합니다.
반응형