Category: Python

  • anonymize-slide

    이 파이썬 코드를 기록한 줄 알았는데, 아닌 것 같아서 기록해 둔다.

    병리 슬라이드를 스캔하면 대부분의 프로그램에서는 라벨 이미지를 생성한다. 보통 손으로 잡는 부위의 슬라이드 부분을 사진으로 찍는 것이다. 라벨 이미지에는 병리 번호, 병원 이름, 그리고 경우에 따라서는 환자이름까지 찍혀 있는 경우가 많다. 병원 내에서 진단이나 컨퍼런스 용도로만 사용한다면 문제가 되지 않지만, 연구용으로 이용하겠다고 한다면 문제가 생긴다. 바로 라벨 이미지는 그 자체로 충분한 식별력이 있는 개인정보를 포함하고 있기 때문이다.

    한국 라이카에 문의하면 Export 방법을 안내해주지만.. 이 방법은 시간도 많이 걸리고 수작업이다. 한 참을 검색한 끝에 다음의 코드를 발견했다. Python2 기반이다.

    https://github.com/bgilbert/anonymize-slide

  • Python 소스 설치

    작년에 파이썬 소스 설치하는 부분을 작성한 것이 있길래 이것을 수정하여 보기로 한다.

    왠만하면 리눅스에서 기본으로 포함되어 있는 약간 낮은 버젼을 사용해도 큰 문제는 없다. 특정 버젼이 필요할 경우 사용하면 된다.

    netinst 에서 기본 미러 서버가 동작하지 않는 회사내 사정을 고려하여 작성하여 보았다.

    Python 홈페이지에서 curl이나 wget을 이용하여 다운받을 수 있는 프로그램을 설치한다. Kakao 미러에서는 wget이 설치되지 않으니 curl을 이용하는 것도 하나의 방법이다.

    tar 파일을 압축풀고 이동한다.

    gcc와 make도 설치하여 준다. ./configure를 실행한다.

    ./configure --enable-optimizations

    make 한다. -j 코어 숫자를 입력하면 동시에 여러 여러 파일에 대하여 진행할 수 있어 속도를 빠르게 할 수 있다.

    make -j 6

    실행하고 나면 어떤 모듈을 설치할 수 없었다는 메세지가 출력될 것이다. 찾아가면서 설치하면 되는데 apt의 의존성 설치로 인하여 몇몇은 다른 것을 설치하는 과정에서 덤으로 설치가 되는 것이 있다.

    나의 경우에는 다음의 모듈 목록이 설치가 필요하다고 메세지가 나왔다.

    _bz2                  _curses               _curses_panel
    _dbm                  _gdbm                 _hashlib
    _lzma                 _sqlite3              _ssl
    _tkinter              _uuid                 readline
    zlib

    나는 다음의 패키지를 설치하였다. 설치 환경에 따라서 사소한 숫자 정도는 차이가 날 수 있다.

    libbz2-dev
    libncurses5-dev 
    libgdbm-dev 
    liblzma-dev
    libsqlite*-dev
    libssl-dev
    tk8.6
    libdb-dev
    libffi-dev
    libzip-dev
    libzip-ocaml-dev

    binascii-crc32 메세지가 출력되면 다음의 링크를 따라서 해결해 본다.

    https://rinovation.tistory.com/164

    링크가 사라질 경우를 대비하여 같은 내용을 한 번 더 기록해 둔다. bzip 혹은 zip과 관련된 패키지를 설치한 후에도 에러가 발생할 경우 설치 디렉토리에서 다음의 명령어를 입력하여 준다. 그리고 make 후 오류가 더 이상 없다면 sudo make install 로 설치한다.

    $ find . -name \*.gcda -exec rm '{}' \;
    ./configure --enable-optimizations
    make
    sudo make install

  • Jupyter Lab 부팅시마다 실행하기

    안될 때는 어떻게 해도 잘 안되는 그런 것들이 있다.

    리눅스에서 부팅할 때마다 특정 프로그램을 실행하는 것도 여기에 해당되는 것이라고 할 수 있겠다. 가장 정석(?)에 가까운 방법은 services를 생성하는 것이다. Jupyter Lab도 마찬가지 방법으로 실행하여 보기로 한다.

    /etc/systemd/system/jupyter.service 파일을 만들어서 다음과 같은 내용을 기반으로 수정하여 작성한다.

    
    [Unit]
    Description=Jupyter Lab
    
    [Service]
    ExecStart=/home/계정/.local/bin/jupyter-lab \
    --ip=* \
    --no-browser \
    --config="/home/계정/.jupyter/jupyter_lab_config.py"
    User=계정
    WorkingDirectory=/home/계정/notebook/ #작업 폴더
    
    [Install]
    WantedBy=multi-user.target
    

    저장한 이후에는 다음의 명령어를 이용해서 등록시킨다.

    sudo systemctl daemon-reload
    sudo systemctl enable jupyter
    sudo systemctl start jupyter
  • 엑셀(XLSX)을 CSV로 변환하기

    이건 정말 수 많은 방법이 있을 것이다. CLI로 작업하기 위해서 내가 알고 있는 소소한 것들을 조합하였다.

    우선 데이터 첫 전처리 과정으로 한 번만 변환하면 된다. 파일 이름이 다양할 것이니까 이를 고려한다.

    다음과 같은 Python 파일을 만든다. ‘python convert.py 파일이름’ 이런 식으로 명령어를 넣으면 CSV 파일로 변환하는 간단한 코드이다. Pandas를 이용하면 편하게 된다고 한다.

    import pandas
    import sys
    
    input_name=sys.argv[1]
    output_name=input_name.split('.xlsx')[0]+'.csv'
    xlsx = pandas.read_excel(input_name)
    xlsx.to_csv(output_name)
    

    다음은 모든 XLSX 파일에 대하여 이 코드를 실행하여 주면 된다. 쉘스크립트를 이용하였다.

    xlsx_lists=`ls -R *.xlsx`
    
    for xlsx_file in $xlsx_lists; do
            echo $xlsx_file
            python convert.py $xlsx_file
    done