로고

사회적협동조합 공정
로그인 회원가입
  • 커뮤니티
  • 1:1문의하기
  • 커뮤니티

    1:1문의하기

    Python 셋째주_DART 데이터 활용하기

    페이지 정보

    profile_image
    작성자 HELLO
    댓글 댓글 0건   조회Hit 1회   작성일Date 26-08-28 13:24

    본문

    3주차는 퍼시픽링스 DART에 공시된 데이터를 활용하는 것을 배웠다
    !pip install dart-fss
    import dart_fss as dart_fss
    import pandas as pd
    이번에 필요한 패키지들
    DART에서 인증키를 발급받아야 오픈 API를 사용할 수 있다




    전자공시 OPENDART 시스템 | 로그인

    opendart.fss.or.kr


    이곳에서 인증키를 발급받지!
    api_key = 'f8fd5b8dff7df55cdac5b90b97da789fb3c447f3'
    dart_fss.set_api_key(api_key=api_key)

    corp_list = dart_fss.get_corp_list()

    corp_list.corps
    발급받은 인증키를 가져온다
    api_key에는 개개인이 받은 인증키 번호를 입력한다
    all = dart_fss.api.filings.get_corp_code()
    all[0]
    모든 데이터에서 하나를 선택해 잘 나왔는지 확인한다
    잘 나왔다
    df = pd.DataFrame(all)

    df_listed = df[df['stock_code'].notnull()]
    df_non_listed = df[df['stock_code'].isnull()]

    df_non_listed.count()

    df_listed.to_excel('상장종목.xlsx')
    df_non_listed.to_excel('비상장종목.xlsx')
    상장종목과 비상장종목을 따로 구분하여 엑셀 파일로 만들어 저장한다
    이렇게 많은 기업이 우리나라에 존재할 줄이야...ㄷㄷ
    corp_code = df_listed[df_listed['corp_name'] == '카카오'].iloc[0,0]
    corp_code

    dart_fss.api.filings.get_corp_info(corp_code)
    df_listed: 상장기업
    상장기업 중에서도 카카오에 관한 정보들을 불러온다
    카카오의 주소는 제주도였구나
    data = dart_fss.api.info.unrst_exctv_mendng_sttus(corp_code, '2021', '11011')
    pd.DataFrame(data['list'])
    카카오의 2021년도 사업보고서를 데이터 퍼시픽링스 프레임 형식으로 불러온다
    data2 = dart_fss.api.info.irds_sttus(corp_code, '2021', '11011')
    pd.DataFrame(data2['list'])
    카카오의 재무정보
    data3 = dart_fss.api.info.alot_matter(corp_code, '2021', '11011')
    pd.DataFrame(data3['list'])
    ..이것도 재무정보인듯?
    data4 = dart_fss.api.info.hyslr_chg_sttus(corp_code, '2021', '11011')
    pd.DataFrame(data4['list'])
    카카오 최대 주주에 관한 정보
    역시나 최대주주는 김범수이다
    data5 = dart_fss.api.info.emp_sttus(corp_code, '2021', '11011')
    pd.DataFrame(data5['list'])
    성별에 관한 자료이다
    성별에 따른 임금격차 관련 문제를 조사할 때 사용하는 자료인것 같다
    data6 = dart_fss.api.info.indvdl_by_pay(corp_code, '2021', '11011')
    pd.DataFrame(data6['list'])
    이것은 아마도 5억 이상 연봉을 받는 사원들의 리스트인 듯 하다
    data7 = dart_fss.api.finance.fnltt_singl_acnt(corp_code, '2021', '11011')
    pd.DataFrame(data7['list'])
    CFS관련 재무정보
    CFS가 무엇인지 찾아봤는데 ..컨테이너 입지??? ..잘못찾은것같다
    data8 = dart_fss.api.shareholder.elestock(corp_code)

    df = pd.DataFrame(data8['list'])
    df[df['repror'] == '김범수']
    최대주주 김범수의 주가 변동 현황을 살펴볼 수 있다
    def get_salary(name):
    corp_code = df_listed[df_listed['corp_name'] == name].iloc[0,0]
    data = dart_fss.api.info.indvdl_by_pay(corp_code, '2021', '11011')

    df 퍼시픽링스 = pd.DataFrame(data['list'])
    df = df[['corp_name', 'nm', 'ofcps', 'mendng_totamt']]
    df.columns = ['기업명', '이름', '역할', '보수']

    df['보수'] = pd.to_numeric(df['보수'].str.replace(',',''))

    return df
    카카오 뿐만 아니라 다양한 회사에 관한 정보를 탐색하기 위해 함수를 만들었다
    이 때 보수를 중심으로 정렬하고 싶어 보수를 numeric 형태로 바꿔줘야 한다
    names = ['삼성전자','LG에너지솔루션','SK하이닉스','NAVER','삼성바이오로직스','삼성전자우','카카오','삼성SDI','현대차','LG화학','기아','POSCO홀딩스','KB금융','카카오뱅크','셀트리온','신한지주','삼성물산','현대모비스','SK이노베이션','LG전자','카카오페이','SK','한국전력','크래프톤','하나금융지주','LG생활건강','HMM','삼성생명','하이브','두산중공업','SK텔레콤','삼성전기','SK바이오사이언스','LG','S-Oil','고려아연','KT&G','우리금융지주','대한항공','삼성에스디에스','현대중공업','엔씨소프트','삼성화재','아모레퍼시픽','KT','포스코케미칼','넷마블','SK아이이테크놀로지','LG이노텍','기업은행']

    dfs = []

    for name in names:
    try:
    df = get_salary(name)
    dfs.append(df)
    except:
    print(f'error - {name}')

    df_result = pd.concat(dfs)
    df_result
    각 회사에서 연봉을 많이 받는 사람들을 뽑아 표로 만들었다
    모든 회사에 모든 정보가 동일하게 들어가 있는 것이 아니기 때문에 try ~ except 구문을 사용하여 예외 처리를 해줘야한다
    df_result.sort_values(by = '보수', ascending 퍼시픽링스 = False).head(30)
    이것은 대한민국에서 보수를 많이 받는 사람들 순으로 top 30명을 정렬한 것이다
    하이브의 수석 프로듀서는 연봉이 400억이다ㅋㅋㅋㅋㅋ
    def get_shareholders(corp_code):
    data = dart_fss.api.info.hyslr_sttus(corp_code, '2021', '11011')

    df = pd.DataFrame(data['list'])
    df = df[['corp_name', 'nm', 'relate', 'bsis_posesn_stock_qota_rt', 'trmend_posesn_stock_qota_rt', 'rm']]
    df.columns = ['기업명', '이름', '관계', '기초지분율', '기말지분율', '비고']

    df = df[df['관계'].notnull()]

    df['기초지분율'] = pd.to_numeric(df['기초지분율'])
    df['기말지분율'] = pd.to_numeric(df['기말지분율'])

    return df.sort_values(by = '기초지분율', ascending = False).head(3)
    이번에는 회사의 기초 / 기말 지분율 변동 추이를 확인하기 위한 함수이다
    get_shareholders('00258801')
    카카오의 회사 번호를 입력하고 검색했다
    카카오의 김범수 회장은 증여를했고, 케이큐브호링스는 주식분할/단순매도를, 특수관계인은 특수관계를 해소했다
    이런 것까지 알 수 있다니 DART에는 정말 퍼시픽링스 다양한 정보가 있다
    corp_codes = list(df_listed.sample(10)['corp_code'])

    dfs = []

    for corp_code in corp_codes:
    try:
    df = get_shareholders(corp_code)
    dfs.append(df)
    except:
    print(f'error = {corp_code}')

    df_result = pd.concat(dfs)
    df_result['증감'] = df_result['기말지분율'] - df_result['기초지분율']

    df_result.sort_values(by = '증감', ascending = False)
    해서 증감여부를 확인하는 반복문을 실행했다
    def get_profit(name):
    corp_code = df_listed[df_listed['corp_name'] == name].iloc[0,0]
    data = dart_fss.api.finance.fnltt_singl_acnt(corp_code, '2021', '11011')
    df = pd.DataFrame(data['list'])

    cond = (df['fs_div'] == 'CFS') &(df['account_nm'] == '이익잉여금')
    df = df[cond]

    df['name'] = name

    df = df[['name', 'thstrm_amount', 'frmtrm_amount']]
    df.columns = ['기업명', '당기', '전기']

    df['당기'] = pd.to_numeric(df['당기'].str.replace(',', ''))
    df['전기'] = pd.to_numeric(df['전기'].str.replace(',', ''))

    df['증감'] = df['당기'] - df['전기']
    df['증감률'] 퍼시픽링스 = abs(df['증감'] / df['전기'])

    return df
    회사의 당기 수익률 / 전기 수익률 비교하는 함수이다
    get_profit('현대자동차')
    현대자동차의 수익률을 비교하니 전기보다 증가했다
    사람들이 차를 많이 사긴 하나보다
    names = list(df_listed.sample(10)['corp_name'])

    dfs = []

    for name in names:
    try:
    df = get_profit(name)
    dfs.append(df)
    except:
    print(f'error-{name}')

    df_result = pd.concat(dfs)
    df_result.sort_values(by = '증감률', ascending = False)
    무작위로 10개의 기업을 선정해 증감을 확인했다
    def get_salary(name):

    data = dart_fss.api.info.emp_sttus(corp_code, '2021', '11011')

    df = pd.DataFrame(data['list'])
    df = df[['corp_name', 'sexdstn', 'jan_salary_am']]

    df_result = pd.DataFrame()
    doc = {
    '기업명' : df.iloc[0,0],
    '연봉(남)': df[df['sexdstn'] == '남'].iloc[0, 2],
    '연봉(여)': df[df['sexdstn'] == '여'].iloc[0, 2]
    }

    df_result = df_result.append(doc, 퍼시픽링스 ignore_index = True)

    df_result['연봉(남)'] = pd.to_numeric(df_result['연봉(남)'].str.replace(',',''))
    df_result['연봉(여)'] = pd.to_numeric(df_result['연봉(여)'].str.replace(',',''))
    return df_result
    corp_codes = list(df_listed.sample(10)['corp_code'])

    dfs = []
    for corp_code in corp_codes:
    try:
    df = get_salary(corp_code)
    dfs.append(df)
    except:
    print(f'error-{corp_code}')

    df_result = pd.concat(dfs)

    df_result['차이(남-여)'] = df_result['연봉(남)'] - df_result['연봉(여)']
    df_result['평균'] = (df_result['연봉(남)'] + df_result['연봉(여)']) / 2

    df_result.sort_values(by = '차이(남-여)', ascending = True)
    무작위로 회사 10개를 추출하여 성별 연봉 차이를 확인했다
    이번에도 역시 try ~ except구문을 활용했다

    각종 기업에서 필요한 정보만 추출하여 각 기업별로 정보를 산출하는 함수를 만드는 법을 배웠다
    점점 스파르타 코딩에 익숙해지는 것 같다

    댓글목록

    등록된 댓글이 없습니다.