MINERVA/Python 2022. 8. 15. 08:31
반응형

아래 코드는 특정 날짜를 기준으로 offset day를 구하는 코드 입니다.

이때, working day를 기준으로 해당 날짜를 예제입니다.

 

사용 용례: 오늘을 기준으로 working day 5일전의 날짜는 언제인가?(주말제외)

 

# working days 계산: 오늘 기준 5일전(당일제외) 날짜 구함(단, 주말을 제외)
nBefore = 5
PivotDatetime = datetime.datetime.now()
BeforeDatatime = PivotDatetime - datetime.timedelta(days=nBefore)

# BeforeDatatime 부터  PivotDatetime 으로 주말이 몇번 있는지 확인
nLoop = 0
nOffday = 0
while nLoop < nBefore:
    if CheckWeekend(BeforeDatatime):
        nOffday = nOffday +1
    BeforeDatatime = BeforeDatatime + datetime.timedelta(days=1)
    nLoop = nLoop + 1

#
BeforeDatatime = PivotDatetime - datetime.timedelta(days=(nBefore+nOffday))
strBeforeDay = BeforeDatatime.strftime('%Y%m%d%H%M%S')

#
print(f'{BeforeDatatime} {PivotDatetime}')

주말을 체크하는 함수

# return: Bool
def CheckWeekend(d):
    return d.weekday() > 4

 

반응형
posted by choiwonwoo
:
MINERVA/Python 2022. 8. 13. 06:42
반응형

파이썬의 데이타 변환은 이전 블로그 글에서 소개드린 대로 매우 직관적으로 됩니다. 하지만, 다른 객체의 원소로 포함된 데이타 타입의 변환은 익숙하지 않으면 실수할 수 있어 정리하고자 합니다.

 

# List 원소 str원소를 int로 변환
stringList = ['1','2','3','4','5']
print(type(stringList))
print(stringList)

# 방법1: map 사용
intList1 = list(map(int,stringList))
print(type(intList1))
print(intList1)

# 방법2: list 사용
intList2 = [int(n) for n in stringList]
print(type(intList2))
print(intList2)

[결과]

['1', '2', '3', '4', '5']
<class 'list'>
[1, 2, 3, 4, 5]
<class 'list'>
[1, 2, 3, 4, 5]

 

cf) 추가 적으로 위의 방법은 python 3인 경우에 적용되며, python 2를 사용한다면 아래를 사용

intList1 = map(int, stringList)
print(type(intList1))
print(intList1)
반응형
posted by choiwonwoo
:
MINERVA/Python 2022. 8. 10. 15:57
반응형

DataFrame 데이터를  엑셀(excel)로 저장하는 방법중 개인적으로 선호하는 두가지 방법을 정리하고자 합니다.

 

1. to_excel() 사용

to_excel() 인자리스트

to_excel()함수를 보면, 다양한 인자를 지원하고 있는 것을 확인 할수 있습니다. 하나하나 세세하게 살표보면 좋겠지만, 제 경험상으로는 파일 이름(excel_writer)과 엑셀형식에서 맞게 시트 이름(sheet_name) 정도만 알면 일차적으로 접근하는데는 무리가 없습니다.

 

(샘플코드)

# 투자자별 순매수 상위종목
# 20220808 부터 20220809 까지 개인의 순매수 금액이 높은 순서대로 종목을 정렬해서 반환
# KOSPI, KOSDAQ, KONEX
# 금융투자 / 보험 / 투신 / 사모 / 은행 / 기타금융 / 연기금 / 기관합계 / 기타법인 / 개인 / 외국인 / 기타외국인 / 전체
market = "ALL"
strfrom = "20220809"
strTo   = "20220809"

foreignDf = stock.get_market_net_purchases_of_equities(strfrom, strTo, market, "외국인")
print(foreignDf)

# 파일 이름
prefix = 'cww'
suffix = datetime.datetime.now().strftime("_%y%m%d_%H%M%S.xlsx")  #연월일_시분초
print('{}{}'.format(prefix,suffix))
filename = prefix + suffix
print(filename)

# 저장
foreignDf.to_excel(
            excel_writer=filename,
            sheet_name='외국인',
            index=False)
print('Done')

위의 코드는 프로젝트 코드의 일부를 발취한 부분으로, 주기적으로 외국인이 순매수한 거래량과 거래대금등을 취합하고, 그 내용을 엑셀 파일로 기록하는 부분입니다.

 

해당 경로에 파일이 파일이 없으면 새로 만들지만, 이미 존재하면 덮어쓰기를 함

 

(실행결과)

실행결과

to_excel()의 경우 하나의 시트만 저장 가능함. (이 부분은 단점으로 생각됨)

그래서, 하나의 엑셀파일에 여러 시트를 저장하는 경우는 아래의 방법을 사용

 

2. ExcelWriter()사용

여러개 데이타프레임을 하나의 엑셀 파일에 저장

 

# 투자자별 순매수 상위종목
# 20220808 부터 20220809 까지 개인의 순매수 금액이 높은 순서대로 종목을 정렬해서 반환
# KOSPI, KOSDAQ, KONEX
# 금융투자 / 보험 / 투신 / 사모 / 은행 / 기타금융 / 연기금 / 기관합계 / 기타법인 / 개인 / 외국인 / 기타외국인 / 전체
market = "ALL"
strfrom = "20220809"
strTo   = "20220809"

foreignDf = stock.get_market_net_purchases_of_equities(strfrom, strTo, market, "외국인")
print(foreignDf)

#market = "KOSPI"
gigwanDf = stock.get_market_net_purchases_of_equities(strfrom, strTo, market, "기관합계")
print(gigwanDf)

#
tusinDf = stock.get_market_net_purchases_of_equities(strfrom, strTo, market, "투신")
print(tusinDf)

#
samoDf = stock.get_market_net_purchases_of_equities(strfrom, strTo, market, "투신")
print(samoDf)

# 파일 이름
prefix = 'cww'
suffix = datetime.datetime.now().strftime("_%y%m%d_%H%M%S.xlsx")  #연월일_시분초
print('{}{}'.format(prefix,suffix))
filename = prefix + suffix
print(filename)

# 저장
writer = pd.ExcelWriter(filename)
foreignDf.to_excel(writer,  sheet_name='외국인')
gigwanDf.to_excel(writer,  sheet_name='기관')
tusinDf.to_excel(writer, sheet_name='투신')
samoDf.to_excel(writer, sheet_name='사모')
writer.save()

(출력결과)

 

반응형
posted by choiwonwoo
: