반응형

WLS에 설치된 우분투가 도커 컴포즈 진행 중 먹통이 되는 상황이 발생하여, 삭제를 하였고 방법을 공유드립니다.

 

명령어

# 설치된 운영체제 확인
wslconfig.exe /l

# 운영체제 삭제
wslconfig.exe /u [운영체제 명]

# 운영체제 삭제 확인
wslconfig.exe /l

실행

반응형
반응형

개요

PERlEPS(2022.09)와 같은 문자열이 있을 때 부터 그 이후의 문자열을 제거하려면 어떻게 해야할까요? 

저는 split를 사용하여 해결하였습니다.

 

코드

#특정 문자 기준으로 분리하기
'PERlEPS(2022.09)'.split('l')

#분리된 리스트에서 0번 인덱스 가져오기
'PERlEPS(2022.09)'.split('l')[0]

해결

반응형
반응형

코스닥최근3년간영업이익흑자종목리스트.xlsx
0.06MB

개요

이번에는 최근 3년간 영억이익이 흑자인 기업을 찾아보겠습니다. 앞서 진행한 코드와 크게 다른 점이 없어 간략하게 포스팅 하겠습니다.

 

자세한 내용은 아래 참고 부탁드립니다.

[국내주식] 최근1년간 영업이익이 발생하는 코스닥 기업 찾기(with python) 

 

[국내주식] 최근1년간 영업이익이 흑자인 코스닥 기업 찾기(with python)

개요 워렌버핏 명언에 이런 말이 있습니다. 10년 이상을 볼 것이 아니면 10분도 그 주식을 갖고 있지 말아라. 물론 10년 이상 주식을 보유한다는건 개미투자자들에게 매우 힘든일입니다. 그렇다면

taeguu.tistory.com

코드

#시각화 라이브러리
import matplotlib.pyplot as plt
import seaborn as sns
plt.rc('font', family='NanumGothic')

#전처리 라이브러리
from tqdm import tqdm_notebook
import pandas as pd

#크롤링 라이브러리
import requests

url = 'https://kind.krx.co.kr/corpgeneral/corpList.do'

kosdaq_code = pd.read_html(url+"?method=download&marketType=kosdaqMkt")[0]
# 코스닥 종목 업종
kosdaq_sectors = kosdaq_code[['회사명','업종','주요제품']]

# 종목코드가 int 타입이라 앞의 0이 사라짐, 다시 붙여주는 코드
kosdaq_code = kosdaq_code[['회사명','종목코드']]
kosdaq_code['종목코드'] = kosdaq_code['종목코드'].astype('str')
kosdaq_code['종목코드'] = kosdaq_code['종목코드'].map(lambda x : '00'+x if len(x) ==4 else x)
kosdaq_code['종목코드'] = kosdaq_code['종목코드'].map(lambda x : '0'+x if len(x) ==5 else x)

result = pd.DataFrame()

for index, row in tqdm_notebook(kosdaq_code.iterrows()):
  try :
    code = row[1]
    url = f"https://finance.naver.com/item/main.nhn?code={code}"
    res = requests.get(url)
    df = pd.read_html(res.text)[3]

    # 재무정보 인덱스 설정
    df.set_index(df.columns[0],inplace=True)
    df.index.rename('재무정보', inplace=True)

    # 두번째 컬럼 제거
    df.columns = df.columns.droplevel(2)

    # 최근 분기 실적만 가져오기
    quater = pd.DataFrame(df).xs('최근 연간 실적',axis=1)

    # 최근 4개 분기 가져오기
    df2 = quater[['2019.12','2020.12','2021.12','2022.12(E)']]
    df2 = df2.reset_index()

    # 매출액 가져오기
    df2 = df2[df2['재무정보']=='영업이익']

    # 종목명 입력
    df2['재무정보'] = row[0]
    result = pd.concat([result, df2])
  except :
    pass

#최근 3개년 데이터
result = result[['재무정보', '2019.12', '2020.12', '2021.12']]

# 수집 데이터 확인
print('코스닥 종목 데이터 : ',kosdaq_code.shape)
print('최근 3년 데이터가 있는 종목 : ',result.shape)
# 결산이 안된 분기는 -로 표시 되기 때문에 음수로 변환
result = result.replace('-', -999)

# 4개분기 모두 이익을 기록한 회사 추출
operatingp_rofit_plus= result[result['2019.12'].map(lambda x : int(x)>0) & result['2020.12'].map(lambda x : int(x)>0)& result['2021.12'].map(lambda x : int(x)>0)]

# 컬럼명 변경
operatingp_rofit_plus.columns = ['회사명', '2019.12', '2020.12', '2021.12']

# 업종 테이블과 merge
operatingp_rofit_plus = pd.merge(operatingp_rofit_plus, kosdaq_sectors, on='회사명', how='inner')

최근 3년 영억이익이 흑자인 기업 

1,610개의 코스닥 기업 중 최근 1년 간 영업이익 수치가 있는 기업은 1,483개 기업이었으며, 1,483개 기업 중 최근 3년동안 영업이익이 흑자인 기업은 총 739개 기업이었습니다. 

반응형
반응형

최근1년간영업이익흑자종목.xlsx
0.05MB

개요

워렌버핏 명언에 이런 말이 있습니다. 10년 이상을 볼 것이 아니면 10분도 그 주식을 갖고 있지 말아라. 물론 10년 이상 주식을 보유한다는건 개미투자자들에게 매우 힘든일입니다. 

 

그렇다면 과연, 여러분은 주식을 어떻게 선택하나요? 대부분의 투자자들은 아마도, 테마주, 실시간순위에 있는기업, 급등주 등 뉴스나 사람들 입에 오르내리는 주식에 눈이가기 마련입니다. 이러한 이유로 뭐하회(뭐라도 하겠지 회사인데)라는 용어가 생겨난 것입니다.

 

주식을 하는데 있어 대부분의 저명한 투자자들의 1원칙은 "절대 돈을 잃지 마라 "입니다. 돈을 읽지 않기 위해서는 좋은 회사를 선택해야하고, 다시 말해 종목을 선택하는데 있어 매우 신중해야한다는 것 입니다. 이번 포스팅은 돈을 읽지 않기 위해서는 어떤 기업을 선택해야하는가에 대한 첫 번째 스텝이며, 바로 이 회사가 꾸준히 돈을 벌고 있는지를 파이썬과 웹크롤링을 통해 확인해보겠습니다.

 

영업이익이란? (영업이익 = 매출- 제품원가 - 영업비용)

영업이익이란 총매출에서 제품원가와 영업비용을 차감한 비용을 말합니다. 즉 회사가 자기본업을 통해 얼마만큼의 돈을 벌고 잃는지 알 수 있는 지표가 바로 영업이익입니다.

 

단, 영업이익이 흑자여도 실제 회사 순이익은 손해를볼 수 있습니다.이는 당기순이익에서 볼 수 있는데, 바로 아래표를 보면 영업이익이 흑자여도, 순이익은 적자가 될 수 있습니다. 이는 본업 외 투자 등의 활동으로 발생할 수 있습니다.  반대로 영업이익이 적자라도 순이익은 흑자가 발생할 수 있으며, 이런 경우 기업의 단기순이익 세부내역을 찾아볼 필요가 있습니다.

결국 이 회사가 본업으로 돈을 잘 벌고 있는가 생각할때 영업이익을 참고하는 것이 맞으며, 최근 1년동안 영업이익이 흑자였던 기업을 찾아보겠습니다.

라이브러리

#시각화 라이브러리
import matplotlib.pyplot as plt
import seaborn as sns
plt.rc('font', family='NanumGothic')

#전처리 라이브러리
from tqdm import tqdm_notebook
import pandas as pd

#크롤링 라이브러리
import requests

코스닥 종목 및 종목코드 가져오기

url = 'https://kind.krx.co.kr/corpgeneral/corpList.do'

kosdaq_code = pd.read_html(url+"?method=download&marketType=kosdaqMkt")[0]
# 코스닥 종목 업종
kosdaq_sectors = kosdaq_code[['회사명','업종','주요제품']]

# 종목코드가 int 타입이라 앞의 0이 사라짐, 다시 붙여주는 코드
kosdaq_code = kosdaq_code[['회사명','종목코드']]
kosdaq_code['종목코드'] = kosdaq_code['종목코드'].astype('str')
kosdaq_code['종목코드'] = kosdaq_code['종목코드'].map(lambda x : '00'+x if len(x) ==4 else x)
kosdaq_code['종목코드'] = kosdaq_code['종목코드'].map(lambda x : '0'+x if len(x) ==5 else x)

코스닥 종목 영억이익 크롤링

result = pd.DataFrame()

for index, row in tqdm_notebook(kosdaq_code.iterrows()):
  try :
    code = row[1]
    url = f"https://finance.naver.com/item/main.nhn?code={code}"
    res = requests.get(url)
    df = pd.read_html(res.text)[3]

    # 재무정보 인덱스 설정
    df.set_index(df.columns[0],inplace=True)
    df.index.rename('재무정보', inplace=True)

    # 두번째 컬럼 제거
    df.columns = df.columns.droplevel(2)

    # 최근 분기 실적만 가져오기
    quater = pd.DataFrame(df).xs('최근 분기 실적',axis=1)

    # 최근 4개 분기 가져오기
    df2 = quater[['2021.12', '2022.03', '2022.06', '2022.09']]
    df2 = df2.reset_index()

    # 매출액 가져오기
    df2 = df2[df2['재무정보']=='영업이익']

    # 종목명 입력
    df2['재무정보'] = row[0]
    result = pd.concat([result, df2])
  except :
    pass

최근 1년 영억이익이 흑자인 기업 추출

1,610개의 코스닥 기업 중 최근 1년 간 영업이익 수치가 있는 기업은 1,493개 기업이었으며, 1,493개 기업 중 최근 1년동안 영업이익이 흑자인 기업은 총 603개 기업이었습니다. 

# 수집 데이터 확인
print('코스닥 종목 데이터 : ',kosdaq_code.shape)
print('4분기 데이터가 있는 종목 : ',result.shape)
# 결산이 안된 분기는 -로 표시 되기 때문에 음수로 변환
result = result.replace('-', -999)

# 4개분기 모두 이익을 기록한 회사 추출
operatingp_rofit_plus= result[result['2021.12'].map(lambda x : int(x)>0) & result['2022.03'].map(lambda x : int(x)>0)& result['2022.06'].map(lambda x : int(x)>0)& result['2022.09'].map(lambda x : int(x)>0)]

# 컬럼명 변경
operatingp_rofit_plus.columns = ['회사명', '2021.12', '2022.03', '2022.06', '2022.09']

# 업종 테이블과 merge
operatingp_rofit_plus = pd.merge(operatingp_rofit_plus, kosdaq_sectors, on='회사명', how='inner')

# 데이터 저장
operatingp_rofit_plus.to_excel('drive/MyDrive/코스닥_4분기_이익종목.xlsx', index=False)

- 1년간 영업이익이 흑자인 기업 리스트

결론

코스닥의 상장된 기업들 중 1년간 영업이익이 흑자인 기업은 전체의 약 37%밖에 되지 않습니다.물론 적자기업이라고 전부 안좋은 기업은 아닙니다.  공격적인 투자 등의 이유로 적자가 난 기업들도 존재할 수 있습니다.

 

다만, 개인은 모든 기업들을 세세하게 찾아볼 수 없으며, 자신만의 기준을 가지고 종목을 선택하게 되면, 조금 더 선택과 집중을 할 수 있지 않을까 생각합니다.

 

다음 포스팅은 분기가 아닌 연간 영업이익이 흑자인 기업을 찾아보도록 하겠습니다.

 

 

반응형
반응형

개요

이번 포스팅은 코스닥 종목의 주요 재무재표를 네이버에서 크롤링할 생각입니다. 누구나 진행할 수 있게 구글에서 제공하는 colab을 이용할 예정입니다.

 

주식을 하는 사람 대부분은 아래와 같은 기업실적분석표를 봤을겁니다. 네이버 검색창에 주식 종목을 검색 후 들어가게 되면 아래와 같은표를 볼 수 있습니다.

 

바로 이 주요재무정보를 크롤링 할 예정이며, 코스닥에 상장된 모든 종목의 재무정보를 가져올 예정입니다.

라이브러리

#전처리 라이브러리
from tqdm import tqdm_notebook
import pandas as pd

#크롤링 라이브러리
import requests

코스닥 종목명 및 종목코드 불러오기

대한민국 대표기업공기 사이트에서 코스닥 종목 및 코드를 불러옵니다. 약 1610개의 종목을 불러왔으며, 종목코드의 경우 int타입으로 불러와 종목코드가 4자리또는 5자리의 경우 앞의 0이 사라져 추가잡업을 통해 0을 붙였습니다.

url = 'https://kind.krx.co.kr/corpgeneral/corpList.do'

kosdaq_code = pd.read_html(url+"?method=download&marketType=kosdaqMkt")[0]
kosdaq_code = kosdaq_code[['회사명','종목코드']]

# 종목코드가 int 타입이라 앞의 0이 사라짐, 다시 붙여주는 코드
kosdaq_code['종목코드'] = kosdaq_code['종목코드'].astype('str')
kosdaq_code['종목코드'] = kosdaq_code['종목코드'].map(lambda x : '00'+x if len(x) ==4 else x)
kosdaq_code['종목코드'] = kosdaq_code['종목코드'].map(lambda x : '0'+x if len(x) ==5 else x)

 

네이버 재무재표 가져오기 불러오기

삼성전자의 주요 재무정보를 가져왔습니다. 앞서 불러온 1610개의 종목코드 for문을통해 재무정보를 가져올 수 있습니다.

# 삼성전자 종목코드
code = '005930'
url = f"https://finance.naver.com/item/main.nhn?code={code}"
# 데이터 얻기
res = requests.get(url)
# 재무정보 가져오기
df = pd.read_html(res.text)[3]

# 재무정보 인덱스 설정
df.set_index(df.columns[0],inplace=True)
df.index.rename('재무정보', inplace=True)

# 컬럼명 rename
df.columns = ['2019','2020','2021','2022E','2021.09','2021.12','2022.03','2022.06','2022.09','2022.12E']
df = df.reset_index()

삼성정자- 주요재무정보

반응형
반응형

안녕하세요 오늘은 금 투자 관련하여 좋은 정보가 있어 글을 적습니다.

 

최근 세계경제가 어려워지면서, 달러 및 금 투자에 관심을 가지는 사람들이 많아지는 것 같습니다. 이러한 분들게 도움이 될만한 정보를 말씀드리겠습니다.

 

금을 금은방가서 사면 안되는 이유

우선 다음에 금시세를 검색하게 되면, 22년 12월 2일 기준 1g에 75,132원입니다. 그런데 오른쪽 고객이 구매할 때 금액을 보면, 살때는 78,889원 팔 때는 71,375원입니다. 

 

약 10%의 차이를 보게 되는데, 결국 금을 직접 사게될 경우 금값이 10% 상승하여도 본전이라는 이야기 입니다.  최근에도 많은 사람들이 -10% 손해를 감수하고 금을 구매하는 이유가 뭘까요?.. 아마 부모님세대의 경우 금을 쉽게 투자할 수 있는 방법이 근은방 밖에 없었기 때문일 것입니다.

 

1. 금현물계좌 개설 - 금현물 투자 해보기(feat. NH투자증권)

위 거래 수수료를 지불하지 않아도 금을 구매할 수 있는 방법을 소개해 드리겠습니다. 바로 금현물계좌를 통해 금 현물을 구매할 수 있습니다. 저는 NH투자증권에서 주식을 거래하고 있기 때문에 NH투자증권에서 개설하였습니다.

 

검색창에 개설 입력 후 모바일계좌개설을 클릭하면 금현물 개좌가 있습니다. 이를 통해 개좌를 개설할 수 있습니다.

2. 금현물 투자하기- 금현물 투자 해보기(feat. NH투자증권)

계좌를 개설했으면, 검색창에 금현물을 검색하면 금현물주문이 나오고 여기서 금현물을 구매할 수 있습니다.

금현물계좌거래에 대한 수익에는 양도,배당,이자소득세가 없습니매매수수료의 경우 0.22%로 매우 저렴합니다.
금 가격은 1g기준이며, 네이버, 다음등에 금시세와 비슷하게 가격이 형성되는 것을 볼 수 있습니다.

3. 직접 구매해보자 - 금현물 투자 해보기(feat. NH투자증권)

저는 150만원 가략 투자해 약 20g의 금을 구매하였습니다. 약 5.3돈을 구매하였네요. 또한, 미니금의 경우 100g구입 시 실제 금으로 교환도 가능합니다. 다만 10%부가가치세가 추가되니 금의 가치에 투자를 하시는 분들은 실물교환할 필요는 없어보입니다.

반응형
반응형

대용량 파일 다운 실패

Redash 쿼리를 통해 약 11만 row의 데이터 결과값을 얻었습니다.

column은 약 10개가 있었고,  중간중간 text값으로 인하여 용량이 컷으며, 이로 인해 다운로드가 실패하는 현상이 발생하였습니다. limit 1000 추가 후 다운하는데는 문제가 없어, 용량 문제라고 판단하였습니다.

 

원인

원인은 redash서버에서 local로 데이터를 전송할 때 데이터의 크기가 커, 설정된 시간을 초과하였기 때문입니다. 

redash는 nginx 뒷 단에 GUNICORN를 사용하게되는데 GUNICORN의 기본 timeout은 30초입니다. 따라서 데이터 전송에 30초를 초과하게 되면 다운로드가 실패하게 됩니다.

 

해결

해결은 redash docker-compose.yml 에서 server 아래 environment부분에 GUNICORN_CMD_ARGS: "--timeout 300"를 추가하면 됩니다. 시간의 경우 사용자에 맞게 설정하면 됩니다.

설정 후 docker-compose restart를 통해 도커를 재시작 하고 다운로드를 받게되면 아래와 같이 성공하는 것을 볼 수 있습니다.

반응형

'데이터엔지니어 > redash' 카테고리의 다른 글

#2 redash v8 -> v10 upgrade  (0) 2022.07.10
#1 가상머신(virtualbox)를 통한 redash 설치  (0) 2022.06.29
반응형

docker-compose.yml - nginx 부분

보통 컨테이너 내부와 로컬 volumes 마운트 시 위 사진과 같이 작성하게 됩니다.

 

잘못된 결과

다만 사전 작업 없이 위의 4개의 볼륨을 마운트 하게 되면

conf파일 2개와 cert관련 디렉토리 2개가 아닌 디렉토리 4개가 생깁니다.

정확하지는 않지만 도커 볼륨 마운트시 디폴트가 폴더로 지정되어 있지 않을까 생각합니다.

 

해결 방법

새로운 파일을 도커내부에 생성하고 로컬에서 관리하고 싶다면

1. 로컬에서 도커 내부에 생성하고 싶은 파일을 생성한다.

2. 위 사진과 같이 도커 마운트를 진행한다.

 

결과

아래와 같이 파일2개 디렉토리2개가 생성된 걸 확인할 수 있습니다.

nginx 도커 내부에 들어가 확인해봐도 파일이 생성된걸 확인할 수 있었습니다.

 

반응형

+ Recent posts