상세 컨텐츠

본문 제목

재무제표와 자산관리 프로그램

프로그래밍

by 독서와 여행 2020. 5. 31. 19:12

본문

오늘은 일단 class로 만들었다. 

GUI는 혼자 하다보니 어려웠는데 우연히 동영상 강의를 만나서 듣고있다.

다 듣고 혼자 대충 하다보면 금방 만들 수 있지 않을까 싶다.

재산관리에 대한 구상은 아직이어서 재무제표부터 다 하고 자산관리 해서 연동 해야지.

c하다 파이썬을 다루니 정말 편하다. 파이썬은 누군가 만들어 놓은 것이 너무 많아.

게다가 C처럼 완벽히 이해하지 않아도 사용할 수 있다. 대단한 언어다. 

물론 복잡한 프로그램일 수록 효율성이 떨어지기는 하지만.

아 stackoverflow는 답변이 정말 빠르다. 이번 크롬도 좀 얼른 해줬으면 답변

API_KEY="키입력"
company_code = '00126380' # 기업 고유번호 이건 크롤링 해야함 (이건 삼성전자)
year = '2019' # 보고서 년도
report_sort = '11011' #defalt 1101 < 사업 보고서 분기 보고서 = 11013 11012 11014 1분기 2분기 3분기 순서
class Financial_Statements:
    def __init__(self,API_KEY,company_code,year,report_sort):
        self.API_KEY = API_KEY
        self.company_code = company_code
        self.year = year
        self.report_sort =report_sort
        self.data = self.get_request()
        
        
    def get_request(self):
        request= Request('https://opendart.fss.or.kr/api/fnlttSinglAcnt.json?crtfc_key='+self.API_KEY+'&corp_code='+self.company_code+'&bsns_year='+self.year+'&reprt_code='+self.report_sort)

        response = urlopen(request)
        elevations = response.read()
        data = json.loads(elevations)
        data = json_normalize(data['list']) ##--- json to dataframe
        data = data.loc[:,['fs_nm','sj_nm','account_nm','thstrm_dt','thstrm_nm','thstrm_amount','frmtrm_nm','frmtrm_amount','bfefrmtrm_nm','bfefrmtrm_amount']] 
        return data



    def get_financial_stock_price(self,reo = 0 , stock_num, wanting_revenue): # ROE알고 싶으면 reo에 인자 입력하면 됨, 안하면 그냥 가격만 알려줌 주식 발행 량이랑 원하는 수익률도 인자로 받음
        data =self.data

        linked_data = data[data['fs_nm'] == '연결재무제표'].set_index('fs_nm') #일단 인덱스를 0123에서 없애버림, 필요하면 바꾸자 정규식 이용하면 인덱스 있어도 사용가능임

        during_year_capital = linked_data[linked_data['account_nm'] == '자본총계']['thstrm_amount']

        during_year_capital =  float(re.sub('[^0-9]', '',str(during_year_capital)))#해당년도 자본

        during_year_debt = linked_data[linked_data['account_nm'] == '부채총계']['thstrm_amount']
        during_year_debt =  float(re.sub('[^0-9]', '',str(during_year_debt)))

        during_year_protit = linked_data[linked_data['account_nm'] == '당기순이익']['thstrm_amount']
        during_year_protit = float(re.sub('[^0-9]', '',str(during_year_protit)))
        

        during_year_roe = during_year_protit / during_year_capital * 100 #해당년도 roe 



       
        stock_num =  float(re.sub('[^0-9]', '',stock_num))
        wanting_revenue = float(input("원하는 수익률을 입력하세요 \n"))

        stock_price = (during_year_capital + (during_year_capital * (during_year_roe - wanting_revenue)/wanting_revenue)) / stock_num 
        if reo == 0:
            return stock_price
        elif roe == 1:
            return during_year_roe
        elif roe == 3:
            prvious_year_capital = linked_data[linked_data['account_nm'] == '자본총계']['frmtrm_amount'] 
            prvious_year_capital =  float(re.sub('[^0-9]', '',str(prvious_year_capital)))
            previous_year_protit = linked_data[linked_data['account_nm'] == '당기순이익']['frmtrm_amoun']
            previous_year_protit = float(re.sub('[^0-9]', '',str(previous_year_protit))) #1년 전꺼
            two_before_year_capital = linked_data[linked_data['account_nm'] == '자본총계']['bfefrmtrm_amount'] 
            two_before_year_capital =  float(re.sub('[^0-9]', '',str(two_before_year_capital)))
            two_before_year_protit = linked_data[linked_data['account_nm'] == '당기순이익']['bfefrmtrm_amount']
            two_before_year_protit = float(re.sub('[^0-9]', '',str(two_before_year_protit))
            previous_year_roe = previous_year_protit / prvious_year_capital * 100
            two_before_year_roe = two_before_year_protit / two_before_year_capital * 100
            return during_year_roe, previous_year_roe, two_before_year_roe
        else :
            print("인자를 잘못 입력하셨습니다. \n")
     

     
    def download_linked_financial_statement_to_cvs(self,company_name):
        data = self.data
        data.to_csv('풀버전.csv')
        linked_data = data[data['fs_nm'] == '연결재무제표']
      
        print("downloading.... \n")
        linked_data.to_csv(company_name+'.csv',encoding = 'utf-8')
        print("Download Complited.\n")   
    
    def download_single_financial_statement_to_cvs(self,company_name):
        data = self.data
        singgle_data = data[data['fs_nm'] == '재무제표']
        print("downloading.... \n")
        singgle_data.to_csv(company_name+'.csv',encoding = 'utf-8')
        print("Download Complited.\n")   
    

'프로그래밍' 카테고리의 다른 글

지저분한 코드로 대충 완성..  (0) 2020.06.13
PYGT5를 통한 GUI 구현  (0) 2020.06.05
재무제표 긁어오기  (0) 2020.05.30
기업 코드 찾는 함수  (0) 2020.05.29
재산관리 프로그램  (0) 2020.05.28

관련글 더보기

댓글 영역