원래 보통 분석할 때 Jupyter Notebook에서 많이 진행했다.

 

새로운 프로젝트를 진행하면서 VSCode를 처음 사용해 봤는데, 

프로젝트 디렉토리 관리, Extensions를 통한 편의성 등이 비교도 안되게 편했다.

 

다만, 로컬PC에 있는 VSCode 작업공간 내에서 .ipynb 파일을 생성해서 작업하는 것은 가능했지만,

개발 서버에 존재하는 docker container 안에 있는 jupyter notebook을 파이썬 인터프리터로 사용하지 못해

개발 서버에서 테스트하기가 어려웠다.

 

그래서 찾아보니 VScode에는 "Connect to a remote Jupyter Server" 기능이 존재한다. **참고1

여기에 실행 중인 Jupyter Notebook 주소를 넣으면 해당 인터프리터 내에 존재하는 파이썬 커널 사용이 가능하다.

(처음에 F1 단축키 누른 후,  "Notebook: Select Notebook Kernel" 선택하면 다음 버튼으로 선택 가능하다.) **참고2

 

 

※ "Connect to a remote Jupyter Server" 기능은 VScode 내에 python (또는 jupyter) Extension이

    설치되어 있어야 보이는 것 같다. 

 

※ 로컬 PC에 Docker Desktop을 설치하면 Extension을 활용해서 진행할 수 있다는 의견이 있었으나,

    라이선스 이슈가 걸려서 실행하지 않았다.

 

**참고

1. https://code.visualstudio.com/docs/datascience/notebooks-web#_connect-to-a-remote-jupyter-server

 

Jupyter Notebooks on the web

Working with Jupyter notebooks on the web with Visual Studio Code.

code.visualstudio.com

2. https://code.visualstudio.com/docs/datascience/jupyter-notebooks#_connect-to-a-remote-jupyter-server

 

Working with Jupyter Notebooks in Visual Studio Code

Working with Jupyter Notebooks in Visual Studio Code.

code.visualstudio.com

 

데이터를 분석하거나 모델링 하는 업무는 어떤 언어, 어떤 개발환경(IDE)를 사용하던지 핵심에는 차이가 없다.

파이썬은 입문 난이도 및 확장성을 고려했을 때 가장 효율적인 언어이다.

 

서비스에 모델 결과를 제공하기 위해서는 .py 스크립트로 작성하지만,

코드 한줄 한줄마다의 결과를 관찰하며 모니터링 하기엔 주피터 노트북을 사용하는 것이 효율적이다.

(jupyter notebook 또는 jupyter lab)

 

주피터 노트북에서 분석한 결과는 해당 노트북 파일의 링크를 바로 공유할 수도 있고,

내보내기를 통해서 다양한 파일 포맷으로 다운받을 수 있다. (pdf, html, slide 등)

 

nbconvert와 RISE 패키지는 이러한 변환 or 노트북 환경에서의 슬라이드쇼 보기를 지원한다.

- nbconvert : .ipynb 노트북 파일을 HTML, LaTeX, PDF, 마크다운 등 정적인 포맷 파일로 전환

- RISE : 즉각적으로 주피터 노트북을 슬라이드쇼 형태로 보기 (Reveal.js - Jupyter/IPython Slideshow Extension)

Primarily, the nbconvert tool allows you to convert a Jupyter .ipynb notebook document file into another static format including HTML, LaTeX, PDF, Markdown, reStructuredText, and more. 
nbconvert can also add productivity to your workflow when used to execute notebooks programmatically.

With RISE, a Jupyter notebook extension, you can instantly turn your jupyter notebook into a live reveal.js-based presentation.

 

plotly로 분석결과를 시각화 했을 때 인터랙티브한 그래프를 손쉽게 그릴 수 있다.

이 때 pdf 파일로 출력하는 경우 해당 기능을 출력물에서 온전히 사용하기 어렵다.

 

슬라이드 타입은 PPT 같은 느낌을 줄 수 있으나,

이를 위한 사이즈 조정, 포매팅 작업이 더 손이 많이 간다고 판단했다.

 

따라서 HTML 파일로 출력하고자 했고,

jupyter notebook 내에 download 기능은 설치오류가 있어서 

서버 커맨드 라인에서 pip install을 통해 nbconvert를 설치하고,

커맨드라인 명령어를 통해서 파일을 생성했다.

 

최종 결과 코드는 아래와 같다.

--execute 명령어를 입력하지 않으면 plotly 그래프 결과물이 보이지 않는다.

--no-input 명령어를 입력하면 input으로 들어가는 코드 부분이 출력되지 않아 결과만 깔끔하게 볼 수 있다.

jupyter nbconvert --to html --execute --no-input /work_dir/temp.ipynb
# --execute : 실행
# --no-input : 코드 없이

 

 

 

 

[참고]

 - nbconvert: Convert Notebooks to other formats — nbconvert 7.2.10 documentation

 - RISE — RISE 5.7.1

파이썬 및 판다스는 분석가 입장에서 개발적인 지식이 많지 않아도

코드를 활용해서 분석할 수 있게끔 도와주는 훌륭한 도구이다.

 

대용량 데이터를 분석하다보면 결국 한정된 서버자원으로 많은 데이터를 다뤄야하는 순간이 오고,

이 때 분산처리를 활용하는 등의 방법도 있지만,

기존에 판다스로 구성된 코드라면 여러가지 방법으로 메모리 사용량을 줄일 수 있다.

 

여기에 대한 아이디어는 아래 영상을 많이 참고했다. (가급적 이 글보다 영상을 정독하는 것을 추천한다.)

→ https://www.youtube.com/watch?v=0Vm9Yi_ig58

 

위 영상에 나오는 내용 중 내가 채택한 방식은 아래 두가지이다.

 - 데이터프레임에 사용할 컬럼 타입을 효율적으로 지정

 - 파일 저장 포맷을 변경 (csv → parquet)

 

 

1. reduce memery usage

 - 각 컬럼의 전체 값을 스캔한 후 최대, 최소값에 따라 최소한의 가능한 타입을 지정해준다. (float, int)

   이렇게 했을때 약 20~70% 까지 메모리 사용량이 감소하는 것을 확인했다.

   object 타입은 category 타입으로 지정해주면 메모리 사용량이 감소한다.

   메모리 사용량을 측정할 때는 파이썬 패키지 중 memory_profiler를 활용했다.

   (여담이지만 나중에 고생하는 것보다 최초 코드 작성 시에 코드 레벨로 메모리를 프로파일하면 좋았을 것 같다.)

 

 - 데이터가 작은 경우 타입을 조정했을 때 오히려 메모리 사용량이 커지는 경우도 존재했는데,

   무시 가능한 수준으로 보인다.

 

 - 스캔하여 적정한 타입을 찾는 것도 시간이 걸리는 일이라,

   해당 데이터에 얼마나 자주 접근해야하는지 등을 기준으로 두어 위 방법을 적용할지 선택하면 좋을 것이다.

 

2. pyarrow parquet 파일로 저장할 때 halffloat (float16) 타입은 저장이 불가한 오류

 - 위 방식으로 최소한의 타입을 지정하다보면 float16으로 컬럼타입을 지정해주는 경우가 있다.

   이 상태로 판다스의 to_parquet() 기능으로 저장하면 halffloat 타입은 지원하지 않는다는 오류가 발생한다.

   이 경우의 조치 방식은 두가지이다.

   1) float16 > float32 로 변경 후 저장 : 이 방식은 간단하지만 최초 메모리 사용량을 줄이고자 했던 취지에 반한다.

   2) pyarrow에서 engine='fastparquet' 활용

      - pyarrow로 데이터를 처리할 때 엔진을 pyarrow와 fastparquet 중 선택할 수 있다.

        default는 pyarrow로 설정되어 있는데, 필요한 경우 fastparquet을 엔진으로 사용할 수 있다는 걸 알아두면 좋다.

 

 

- 참고 : Parquet에서 Unhandled type for Arrow to Parquet schema conversion: halffloat 이 발생할 때 (velog.io)

Airflow는 목적에 따라 직렬, 병렬로 Task를 배치 및 실행 가능하다.

 

그 중 Dynamic Tasks는 Dag에서 병렬의 개수를 미리 정하지 않아도,

Task가 실행하는 메서드와 연결되어 유연한 병렬 Task 실행을 도와준다.

 

이 때 Command 생성을 위해 사용하는 메서드에 @Task 데코레이터를 사용해 개별 Task를 생성할 수 있고,

데코레이터 없이 메서드를 생성한 후, 실행하는 Operator만 운영할 수도 있다.

 

Command Task → Dynamic Tasks 구조로 연결된 경우 앞선 Command Task가 정상적으로 수행되면

여기서의 xcom 결과를 받아 따라오는 Dynamic Task가 실행되어야 하지만 Skip 되는 에러가 발생.

 

결론적으로 Command Task의 결과가 None 값을 보내주면

Command Task는 Success로 마킹한 채로 Dynamic Task로 넘어가지만,

Dynamic Task에서 실행할 병렬 Task는 0개이므로, 이 전체 Tasks는 Skipped로 처리된다.

 

어느 Task에서도 에러로 표기해주지 않아 문제 원인을 정확히 파악하는데 시간이 많이 걸렸다.

파이썬에서 __name__ 자기자신(모듈)을 호출

  - 직접 실행 > __main__

  - 모듈 호출 > 모듈명

 

직접 코드를 실행할 때와 모듈을 호출했을 때 __name__의 값이 달라지기에

테스트에 사용하고 실제로는 사용하지 않을 코드를 구별하여 효율적인 코드작성을 도움

 

if __name__=="__main__":
    <직접 테스트엔 사용하고 모듈 호출시에는 사용하지 않을 코드 작성>

 

 

# 참고 : 파이썬 if __name__ == "__main__" 의미 (madplay.github.io)

 - 증상 : 로컬 저장소에서 코드 변경, 커밋하고 푸시할 때 진행중 문구만 나오며 완료되지 않음

 

 - 원인 : '21.8.13일부터 깃허브 비밀번호 정책 변경 (계정 보안을 위해 기존에는 개인비밀번호 외 다른 수단을 권장 -> 필수로 변경)

    ㅇ 깃허브 관련 정책 공지 : https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/#what-you-need-to-do-today

 

Token authentication requirements for Git operations | The GitHub Blog

Beginning August 13th, 2021, we will no longer accept account passwords when authenticating Git operations on GitHub.com.

github.blog

 

  - 해결 : 깃허브 계정에서 PAT (Personal Access Token) 생성 후 비밀번호처럼 사용 (실제로 비밀번호 넣는 곳에 이 토큰을 입력)

     ㅇ 깃허브 계정 토큰생성 방법 :  https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token

 

Creating a personal access token - GitHub Docs

Personal access tokens (PATs) are an alternative to using passwords for authentication to GitHub when using the GitHub API or the command line. If you want to use a PAT to access resources owned by an organization that uses SAML SSO, you must authorize the

docs.github.com

 

 

 

혹 제가 잘못 이해한 부분이 있다면 알려주시면 업데이트 하겠습니다.

'분석 > Github' 카테고리의 다른 글

[github] 초보자의 깃허브 탐방  (0) 2018.04.19
[깃허브] 생활코딩(2)  (0) 2018.02.01
[깃허브] 생활코딩(1)  (0) 2018.02.01
[Git] 깃허브를 배워보자  (0) 2018.01.29

 

1. 아나콘다 가상환경 생성 :

 - conda create -n python-rpa python=3.7.3

 - conda activate python-rpa

 

2. 가상환경 내에 주피터 설치

 - conda install jupyter notebook

   ※ 참고 : http://blog.naver.com/PostView.nhn?blogId=hobbang143&logNo=221464304548

 

3. OpenCV설치 :

 - conda install -c menpo opencv

   ※ 출처 : https://pleasebetrue.tistory.com/837

 

anaconda 에서 opencv 설치하기

anaconda 에서 opencv 설치하기 conda console 에서, conda install -c menpo opencv 간단하게 된다!

pleasebetrue.tistory.com

 

4. pyautogui 설치

 - pip install pyautogui

 - 참고(관련 명령어가 잘 적혀있음) : http://blog.naver.com/PostView.nhn?blogId=htblog&logNo=221510551432&parentCategoryNo=&categoryNo=99&viewDate=&isShowPopularPosts=true&from=search

 

파이썬으로 키보드, 마우스 제어하기 by PyAutoGUI

​​파이썬으로 키보드, 마우스 제어하기 by PyAutoGUI ​PyAutoGUI is a Python module for pr...

blog.naver.com

 

 

 

'분석' 카테고리의 다른 글

파이썬 이미지 OCR  (0) 2020.05.10
[spark] 스파크 공부하기  (0) 2020.02.13
분석 경험 정리하기  (0) 2019.04.22
Erlang  (0) 2019.04.04
[R] 데이터 불러오기 오류_line 1 did not have 41 elements  (0) 2018.10.21

1. OpenCV 설치가 필요 (이미지 리딩)

  - https://076923.github.io/posts/Python-opencv-1/

    ㆍpython -m pip install opencv-python

 

Python OpenCV 강좌 : 제 1강 - OpenCV 설치 | 076923

OpenCV

076923.github.io

 

2. OpenCV 에러 유형 中 -215 : 경로나 파일명을 잘못 지정해서 읽어오지 못한 경우를 뜻함

  - https://stackoverflow.com/questions/43572387/error-215-size-width0-size-height0-occurred-when-attempting-to-display-a?noredirect=1&lq=1

 

Error (-215) size.width>0 && size.height>0 occurred when attempting to display an image using OpenCV

I am trying to run a simple program that reads an image from OpenCV. However, I am getting this error: error: ......\modules\highgui\src\window.cpp:281: error: (-215) size.width>0 && size.

stackoverflow.com

 

 

3. 테서렉트 설치 참고사이트 : http://m.blog.daum.net/geoscience/1266?category=7023

 

테서랙트(Tesseract): 파이썬에서 이미지의 광학 문자 인식(OCR)하기

안녕하세요? 이번 글에서는 이미지에 들어 있는 문자를 읽어 텍스트로 변환해주는 광학 문자 인식(Optical Character Recognition; OCR)을 파이썬에서 적용해 보도록 하겠습니다. 실습에 사용할 이미지는

blog.daum.net

4. Tesseract at UB Mannheim 설치

  - 윈도우버전 설치 : https://github.com/UB-Mannheim/tesseract/wiki

    ㆍtesseract-ocr-w64-setup-v5.0.0-alpha.20200328.exe (64 bit) resp. 설치 (본인 환경에 맞게)

 

UB-Mannheim/tesseract

Tesseract Open Source OCR Engine (main repository) - UB-Mannheim/tesseract

github.com

 

 

5. 영문 인식도는 높은 편이며, 한글의 경우 일부 옵션 조정을 통해 정확도를 높일 수 있다. (preserve_interword_spaces, psm)

  - https://niceman.tistory.com/155

 

파이썬(Python) - 머신러닝 프로젝트(1) - OCR 이미지 문자열 추출(Tesseract)

파이썬 Tesseract - OCR 활용 설명 실무에서 머신러닝을 활용한 프로젝트를 진행하게 되었습니다. 우선 이미지에서 한글 및 영문을 텍스트를 출력 후 -> 데이터 정제 -> 기계학습 -> 데이터 확인 순으�

niceman.tistory.com


6. OCR 정확도 개선을 위한 이미지 전처리

 1) 이미지를 목적에 맞게 자르기

 2) 색상 전환 (그레이톤)

 

 

 - https://junyoung-jamong.github.io/computer/vision,/ocr/2019/01/30/Python%EC%97%90%EC%84%9C-Tesseract%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-OCR-%EC%88%98%ED%96%89%ED%95%98%EA%B8%B0.html

 

Python에서 Tesseract 사용하기 for OCR

Tesseract 이미지로부터 텍스트를 인식하고, 추출하는 소프트웨어를 일반적으로 OCR이라고 한다. Tesseract는 1984~1994년에 HP 연구소에서 개발된 오픈 소스 OCR 엔진이며, 현재까지도 LSTM과 같은 딥러닝

junyoung-jamong.github.io

 

 

□ Google Cloud Vision API 가 더 우수한 성능을 보인다는 게시글 발견

 

  - https://stet-stet.tistory.com/19?category=786054

 

OCR(현실편) 1 - Vision API로 소설 스캔본에서 글자 인식

저번 포스팅에서는, 한국어, 일본어로 된 소설 스캔본 png 파일의 내용을 tesseract-ocr로 긁을 생각을 했었습니다. 그 후로 굉장히 여러 모로 시도했고, 저번에 언급한 수법들 외에도 후리가나 제거 등을 시도해..

stet-stet.tistory.com

 

 

1. Google Cloud Vision API 설치 

  - http://blog.naver.com/PostView.nhn?blogId=rhrkdfus&logNo=221335357361&categoryNo=29&parentCategoryNo=0

 

[Python] Google Cloud Vision API 사용하기(사진 넣어 이미지 분석하기)

* Google Cloud Vision API 사용법과 설정을 위해 아래 링크를 이용하세요. [Google Cloud Vision...

blog.naver.com

 

!! 구글클라우드 비전API 접목시켜서 OCR 해보기

 

'분석' 카테고리의 다른 글

파이썬을 활용한 업무자동화  (0) 2020.06.02
[spark] 스파크 공부하기  (0) 2020.02.13
분석 경험 정리하기  (0) 2019.04.22
Erlang  (0) 2019.04.04
[R] 데이터 불러오기 오류_line 1 did not have 41 elements  (0) 2018.10.21

 

대용량 데이터분산처리를 위해 하둡 또는 스파크를 사용한다.(더 좋은 툴이 있는지는 확인해봐야 함.)

하둡이 더 이전에 나온 것으로 편의성(코드길이 등...)이 떨어지고, 대부분의 경우 스파크의 성능이 좋다고 한다.

(하드디스크가 아닌 인메모리 상태로 처리하기 때문에 속도가 빨라진다고 함)

단, 특정 task에선 하둡이 더 성능이 좋을 수 있다. 또한, 하둡은 며칠이 걸리든 결론을 내어주지만 스팍은 뻗어버리는 경우가 종종있다고 한다.

 - 특정 task : 반복작업이 아닌 단발성 작업

 

mesos를 이용한 자원관리를 알 필요가 있다.

 

분산처리, 자원관리를 학습할 수 있는 프로젝트를 하나 수행할 필요가 있어보인다.

 

아래는 pyspark 입문과정(eda한정)에 대해 무료로 공부할 수 있는 edwith 강의이다.

databricks라는 홈페이지의 클라우드 서비스를 이용한다.

 

https://www.edwith.org/sparktutorial

 

PySpark를 활용한 데이터분석 강좌소개 : edwith

- 커넥트재단

www.edwith.org

 

 

'분석' 카테고리의 다른 글

파이썬을 활용한 업무자동화  (0) 2020.06.02
파이썬 이미지 OCR  (0) 2020.05.10
분석 경험 정리하기  (0) 2019.04.22
Erlang  (0) 2019.04.04
[R] 데이터 불러오기 오류_line 1 did not have 41 elements  (0) 2018.10.21

 

Format

 - Batch Size : 

     가중치를 업데이트하기 이전에 신경망이 얼마나 많은 input 샘플들을 보기를 원하는지를 말함

     input dataset에 100개의 샘플을 가지고 있다고하자. 신경망이 하나의 input을 확인할 때마다

     가중치를 업데이트 하기를 원한다. 이 경우에 batch size는 1이 될 것이며, batches의 수는 100개가 될 것이다.

     마찬가지로 신경망이 모든 샘플을 보고 가중치를 업데이트 하기를 원한다면, batch size는 100이고 batches는

     1이 될 것이다.

     매우 작은 batch size를 사용하는 것은 학습 속도를 느리게 만들며 반대로 너무 큰 batch size를 사용하는 것은

     다른 데이터에 일반화하는 모델의 능력을 감소시킨다. 또한 더 많은 메모리를 필요로 한다. 그러나 그것은 

     objective function의 최소값을 찾는데 더 적은 steps가 필요하다.

     따라서 이에 대해 다양한 값을 시도해볼 필요가 있으며 최적의 값을 찾아야한다. 이것은 꽤 중요한 주제이다.

     우리는 다음 article에서 이것에 대한 좋은 방법을 학습할 것이다.

     

 - Time Steps :

     신경망이 한 번에 얼마나 많은 단위를 되돌아가기 원하는가?

     예를 들어 훈련을 위한 text corpus를 가진 문자 예측(character prediction) 문제를 생각해보자. 신경망이

     한 번에 6개의 문자를 학습하길 원한다. 그렇다면 time step은 6이다. 우리의 경우 time step으로서 60을

     사용할 것이다. 즉 우리는 가격예측을 위해 2달을 볼 것이다.

 

 - Features : 

     각 단계를 나타내기위해 사용된 특성들의 수(the number of attributes)이다. character problem 예시를 

     다시 생각해보자. 각 문자(character)를 표현하기 위해 size가 100인 one-hot encoded vector를 사용한다고

     가정하자. feature size는 여기서 100이다.

 

 

출처 : https://towardsdatascience.com/predicting-stock-price-with-lstm-13af86a74944

+ Recent posts