baembaembaem의 등록된 링크

 baembaembaem로 등록된 티스토리 포스트 수는 82건입니다.

[Python] Pandas로 암호화된 엑셀 파일 읽기 [내부링크]

본 포스팅에서는 암호화된 엑셀 파일을 읽기 위해 전처리를 진행하고 pandas를 활용하여 읽어보고자 한다. 암호화된 엑셀파일 간혹 엑셀파일을 접하다 보면 암호화되어 밑에 그림과 같이 암호를 입력해야 열리는 파일들이 있다. 이 파일들은 pandas로 바로 읽으려고 하면 "XLRDError: Can't find workbook in OLE2 compound document"와 같은 오류가 발생하여 데이터를 로드하지 못한다. 이를 위해 새로운 라이브러리를 설치하여 암호화된 파일을 읽어보자. msoffcrypto-tool "msoffcrypto-tool"을 설치하여 암호화된 워드 파일 혹은 엑셀 파일을 읽을 수 있는 형태로 변환시켜 준다. 아래 링크는 msoffcrypto-tool 라이브러리의 github이다...

[Python] try except 활용하여 오류 모아보기 [내부링크]

본 포스팅에서는 for 문과 try except를 사용해서 예외 처리를 함과 동시에 발생한 오류를 모아서 출력하는 알고리즘을 구성하고자 한다. try except 구문 try except 구문은 예외처리를 할 때 사용되며 try문 안에 실행하고자 하는 내용을 포함시키고 만일 try문에서 오류가 발생하면 except문으로 넘어간다. 즉 예외로 처리할 내용을 except문 안에 기입하면 된다. 간혹 대용량 데이터 처리를 하는 중 중간에 오류가 발생하여 실행되던 코드가 중단되는 경험은 한두 번씩 있을 것이다. 이럴 때 유용한 구문이 try except 구문으로 오류가 발생하더라도 우선은 모든 데이터를 처리한 뒤에 예외 데이터를 처리할 수 있도록 해준다. 다만 어떤 데이터가 예외 데이터이며 어떠한 오류로 인해 ..

[MySQL] 중복된 값 제거하여 데이터를 호출하기 [내부링크]

본 포스팅에서는 MySQL에서 중복된 값들을 모두 제외하고 값들을 하나씩 불러오고 개수를 세어보고자 한다. 데이터 조회 예시 테이블의 데이터는 환자 번호와 특정 열들로 이뤄진 데이터셋이며 총 357개이다. 환자 번호는 unique 한 값이지만 다른 특정 열로 인해 중복된 값도 존재한다. "select 열 from 테이블"을 통해 테이블 안에 'patient ID'라는 특정 열만 조회해보자. select 'patient ID' from dataset.sevannot_csv 실행결과는 다음과 같으며, 결과 일부를 가져왔다. 이후 count와 group by를 활용하여 'patient ID'를 기준으로 그룹별 데이터가 각 몇 개가 있는지 확인해 보자. select 'patient ID', count('pati..

[Python] numpy로 csv 파일 내용 가져오기 [내부링크]

본 포스팅에서는 np.genfromtxt를 활용하여 csv 파일 내용을 로드하고자 한다. np.genfromtxt np.genfromtxt는 아래 설명과 같이 텍스트 파일에서 데이터를 로드하는 데 사용된다. 여러 가지 인자들이 입력 가능한데 이번 포스팅에서는 많이 사용될 몇 가지 예시만 들어볼 생각이다. np.genfromtxt 활용 아래와 같이 int형태의 숫자들로 이뤄진 int.csv 파일을 활용해 보겠다. np.genfromtxt는 반환되는 데이터의 형태는 "dtype"인자에 해당 데이터 형태를 입력시켜 준면 된다. import numpy as np np.genfromtxt('./dataset/int.csv') # default float # array([111., 112., 113., 544., ..

[Python_Error] 알고리즘 속도가 갑자기 느려졌을때 swap memory 확인 [내부링크]

본 포스팅은 업무 중 갑자기 잘 작동되었던 알고리즘이 갑자기 확 느려졌을 때 해결했던 방법을 공유하고자 한다. swap memory 스왑 메모리는 실제 물리적 메모리가 아닌 시스템 응답 불가 상태를 방지하기 위해 마련해 놓은 비상용 메모리이다. 따라서 알고리즘을 구동하는 중 swap memory를 많이 사용한다면 메모리 관련 오류 발생이 내재되어 있다고 봐도 된다. 필자는 알고리즘을 새롭게 구성한 뒤 실행을 시키니 몇 분뒤 급격히 속도가 저하되는 것을 알게 되었다. 코드 특성상 규모가 큰 데이터를 로드하고 저장하는 코드라 swap 메모리 관련 문제라 파악하고 swap 메모리 사용량을 확인했다. swap 메모리 사용량 확인법은 "htop" 혹은 "free -m"을 활용하면 된다. htop에서 왼쪽 밑에 위..

[Linux] conda list에서 원하는 라이브러리 찾기 [내부링크]

본 포스팅에서는 conda list와 grep을 활용하여 찾고자 하는 라이브러리를 바로 확인해 보겠다. grep 우선 conda list는 특정 가상환경 내에 conda를 활용하여 설치한 라이브러리를 모두 확인할 수 있도록 해주는 명령어이다. 아무래도 한 개의 가상환경 내에서 오래 개발을 하다 보면 라이브러리들이 많이 쌓여 원하는 라이브러리가 있는지 혹은 해당 라이브러리의 버전은 어떻게 되는지 찾는데 시간이 오래 걸릴 수 있다. 이를 해결하기 위해 linux에서 제공하는 grep을 활용해 보자. 우선 grep은 명령어의 출력에서 특정 패턴을 찾고 검색하는 데 사용이 된다. 찾고자 하는 경로에서 "grep 패턴"을 통해 특정 패턴이 포함된 내용을 모두 찾아서 출력해 준다. grep 패턴 여기서 한 가지 더..

[Python_Error] TypeError: cannot concatenate object of type '<class 'dict'>'; only Series and DataFrame objs are valid [내부링크]

본 포스팅은 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 하는지 작성했다. TypeError: cannot concatenate object of type ''; only Series and DataFrame objs are valid 해당 오류는 pandas.concat을 활용할 경우 안에 인자의 리스트 요소 중 데이터프레임이 아니고 dictionary인 경우 발생한 오류이다. 오류가 발생했던 코드이며, 가장 밑에 "df = pd.concat([ct_dict,xray_df])" 라인에서 오류가 나왔다. xray_excel_path = './new_annotation.xlsx' for i in range(10): ct_dict = {} ct_dict['name'] = 'ct_{}'.format(..

[Python] Pandas와 for 문으로 엑셀 데이터 밑으로 붙이기 [내부링크]

본 포스팅에서는 "pandas.concat을 활용하여 데이터 프레임을 합치는 방법"과 "for문을 활용하여 엑셀 데이터를 위로 혹은 밑으로 계속 붙이는 방법"에 대해 설명하고자 한다. Dataframe 합치기 다음과 같이 두 가지 엑셀 파일이 있고 이 두 개를 각각 데이터프레임으로 로드하여 합쳐보자. csv 파일 혹은 xlsx 파일을 읽고 데이터프레임을 사용하는 방법은 아래 링크를 참고하면 된다. [Python] pandas로 xlsx 파일과 csv 파일 읽기 본 포스팅에서는 excel 파일의 확장자인 xlsx와 csv를 비교해 보고 padas로 각각 읽는 법에 대해 얘기하겠다. 'xlsx' vs 'csv' xlsx 파일은 이진파일로 구성이 되어 있으며 편집을 하는데 제한이 있다. 또한 baembaemb..

[MySQL] MySQL에서 엑셀 파일 가져오기 [내부링크]

본 포스팅에서는 MySQL을 활용하여 로컬에 있는 csv 파일을 가져오는 방법에 대해 포스팅하겠다. csv 파일 위 제목에서는 엑셀 파일 가져오기라고 명했지만 명확히 얘기하면 csv 파일을 가져오는 방법에 대해 얘기하고자 한다. 필자는 excel 파일과 csv 파일을 혼용해서 사용했었지만, MS excel을 활용하여 데이터를 가져올 때 큰 차이점이 있다는 것을 알았고 이를 명확히 구분 지어서 얘기를 해야 한다는 것을 알았다. 아래 링크를 통해 excel 파일(.xlsx)과 csv 파일(.csv)의 차이점을 간단히 구분 짓고 특징을 정리해 보았다. [Python] pandas로 xlsx 파일과 csv 파일 읽기 본 포스팅에서는 excel 파일의 확장자인 xlsx와 csv를 비교해 보고 padas로 각각 읽..

[Python_Error] TypeError: first argument must be an iterable of pandas objects, you passed an object of type [내부링크]

본 포스팅은 업무 중 발생했던 오류들을 어떻게 해결했는지 작성했다. TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame" 위 에러는 pandas에서 제공하는 concat 함수를 사용할 때 발생한 오류이다. concat에 입력이 리스트 혹은 튜플이 아닌 형태로 들어갈 때 위와 같은 에러 메시지가 떴다. 에러가 발생한 코드는 다음과 같다. xray_excel_path = './new_annotation.xlsx' for i in range(10): ct_dict = {} ct_dict['name'] = ['ct_{}'.format(i+1)] ct_dict['dcm_paths..

[Pytorch] torchvision을 활용하여 dataset 다운로드하기 [내부링크]

본 포스팅에서는 pytorch의 torchvision을 활용하여 범용적으로 사용하는 데이터셋을 다운로드하고 이를 시각화 및 분석해 보겠다. torchvision torchvision은 컴퓨터 비전에서 많이 사용되는 데이터셋, 모델 아키텍처, 이미지 변환 등의 함수들을 제공하는 pytorch 라이브러리이다. torchvision의 세 가지 중점적인 기능 중 오늘은 데이터셋에 대해 말해보겠다. torchvision.datasets를 활용하여 오픈 데이터셋을 다운로드할 수 있으며, 컴퓨터 비전에서 많이 사용되는 오픈 데이터셋으로는 MNIST, CIFAR10, CIFAR100, STL10, SVHN 등이 있다. 위 데이터셋들 중 MNIST, CIFAR10, STL10, SVHN을 직접 다운로드해 보고 시각화 및..

[Python] pandas로 xlsx 파일과 csv 파일 읽기 [내부링크]

본 포스팅에서는 excel 파일의 확장자인 xlsx와 csv를 비교해 보고 padas로 각각 읽는 법에 대해 얘기하겠다. 'xlsx' vs 'csv' xlsx 파일은 이진파일로 구성이 되어 있으며 편집을 하는데 제한이 있다. 또한 메모리 사용량이 많지만 대용량 파일을 조작하는데 쉽다. 개발자가 프로그래밍으로 조작하기에는 상대적으로 어렵다. 반대로 csv 파일은 단순 텍스트 파일이다. 이러한 특징으로 인해 여러 텍스트 편집기에서 열 수 있고 메모리 사용량이 적다. 물론 텍스트 파일이기에 프로그래밍으로 조작하기에 용이하다. 다만 대용량 파일을 조작하는 데는 제한이 많다. 형식 편집기 메모리 사용량 대용량 파일 조작 프로그래밍 조작 유연성 EXCEL (.xlsx) 이진 형식 제한적 많음 쉬움 어려움 CSV (..

[Python] np.nan으로 nan 생성하기 [내부링크]

본 포스팅에서는 nan 값의 정의와 np.nan에 활용법에 대해 살펴보겠다. nan의 정의 nan 값은 "not a number"의 줄임말로 컴퓨터로는 표현할 수 없는 숫자를 나타낼 때 사용된다. 뿐만 아니라 누락되거나 정의되지 않은 데이터를 나타내는 데 사용되는 특수 부동 소수점 값 (floating-point value)이다. 따라서 nan 값은 어떠한 연산을 하던 nan과 관련된 연산은 nan을 반환한다. 이를 통해 수치 계산에서 누락된 데이터를 쉽게 처리할 수 있다. np.nan np.nan은 nan 값을 생성하는 함수로써 float('nan')과 동일한 역할을 한다. 만약 'a'와 같이 배열 내에 3번째 인덱스에 nan값이 포함되어 있다고 해보자. 이때 해당 인덱스에 np.nan을 기입하여 na..

[Python] pandas로 엑셀 읽고 저장하기 [내부링크]

본 포스팅에서는 python으로 엑셀을 읽는 법과 저장하는 법에 대해 얘기하고자 한다. pandas.read 다음과 같이 name, dcm_paths, label_paths, dcm_extentions, label_extentions의 열들을 가지는 xlsx 파일을 읽어보자. pandas는 보통 pd로 줄여서 통용된다. "pd.read_excel('엑셀파일명')"을 사용하면 쉽게 파일을 읽을 수 있다. import pandas as pd excel_path = './annotation.xlsx' df = pd.read_excel(excel_path) df 위 예제와 같이 pd.read_excel로 읽어들이면 DataFrame 형태로 반환해 주는데 여기서 DataFrame이란 pandas에서 제공해주는 데..

[Python] Dicom 의료영상 tag 읽기 [내부링크]

본 포스팅에서는 의료영상 규격인 Dicom의 tag를 python을 통해 읽어보도록 하겠다. Dicom Tag DICOM(Digital Imaging and Communications in Medicine) 태그는 DICOM 이미지 파일에 내장된 메타데이터이다. 이러한 태그에는 환자 이름, 나이, 성별, 촬영장비 및 영상 크기 등에 대한 정보가 포함되어 있다. Dicom Tag 읽기 Python에서 의료영상을 읽는데 자주 사용되는 라이브러리인 pydicom을 사용하자. 터미널 창에 "pip install pydicom"을 입력하여 라이브러리를 설치하고 진행하자. import pydicom dcm_pydicom = pydicom.read_file('./abnormal_images/0001/1-001.dcm..

[Python_Error] UnboundLocalError: local variable 'xxx' referenced before assignm [내부링크]

본 포스팅은 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 하는지 작성했다. UnboundLocalError: local variable 'img' referenced before assignment 위 오류는 'img'라는 변수가 선언이 안되었다는 얘기로 해당 변수가 누락이 되었을 때 발생하는 오류이다. 다만 일반적인 오류랑은 다른 것이 def로 함수 선언 시 그 내부에 있는 변수가 누락되었을 때 저 오류가 발생한다는 것이다. mask = [0,0,1,0,1] if 1 in mask: pass else: img = mask print(img) """ NameError Traceback (most recent call last) /WORKSPACE/test.ipynb Cell 33 in () 5 ..

[Python_Error] ValueError: can only convert an array of size 1 to a Python scalar [내부링크]

본 포스팅은 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 하는지 작성했다. ValueError: can only convert an array of size 1 to a Python scalar 위 에러는 numpy 내에 하나의 스칼라 값이 아니라 여러 개의 값을 갖고 있을 때 안에 인자를 가져오려고 .item()을 사용하다가 발생한 오류이다. numpy.ndarray.item 넘파이 배열 내에 요소들을 반환하는 함수이다. 위 설명에 적혀있듯이 스칼라 값을 복사하여 반환한다고 적혀있다. 따라서 배열 형태의 넘파이 뒤에는 item()이 들어올 수 없다. 다음과 같이 안에 있는 요소들을 뽑아서 분석 혹은 처리를 해주고 싶을 때는, 다음과 같이 리스트안에서 하나씩 불러다가 처리하는 것이 마음 편하다.

[Python] nrrd 파일 읽고 시각화 하기 [내부링크]

본 포스팅에서는 nrrd 파일을 읽고 시각화해보고자 한다. nrrd 파일 읽기 nrrd 파일을 다루기 위해서는 nrrd 라이브러리를 설치하여 사용하면 된다. pip install pynrrd nrrd를 설치한 이후로는 "nrrd.read"를 통해 파일을 읽으면 된다. import numpy as np import SimpleITK as sitk import nrrd dcm_path = './data/dcm/1.3.6.1.4.1.14519.5.2.1.6279.6001.109002525524522225658609808059' label_path = './label/1.3.6.1.4.1.14519.5.2.1.6279.6001.109002525524522225658609808059_LobeSegmentation..

[Python] mhd 파일 읽고 시각화 하기 [내부링크]

본 포스팅에서는 .mhd 확장자의 파일을 읽고 시각화를 해보고자 한다. .mhd 파일이란? mhd 확장자는 의료 영상 데이터의 배포에 많이 사용되는 매우 간단한 포맷이다. mhd 파일은 ASCII 헤더일 뿐이며 기본적인 이미지 속성(예: 치수, 간격, 원점)을 정의한 다음 raw 확장자를 가진 원시 이진 파일을 실제 이미지 데이터와 함께 읽는 데 사용된다. 따라서 mhd 파일과 raw 파일은 하나의 세트라고 보면 된다. mhd 파일 읽기 mhd 확장자를 가진 흉부 CT 영상을 읽어보겠다. "SimpleITK.ReadImage"를 통해 읽으면 되며 dcm img 형태를 dcm array 형태로 변환하면 된다. 변환은 "SimpleITK.GetArrayFromImage"를 활용하면 된다. import num..

[Linux] tmux 활용하기 [내부링크]

본 포스팅은 tmux에 대해 다루고자 한다. tmux tmux는 유닉스 계열 운영 체제를 위한 터미널 멀티플렉서이다. 단일 콘솔에서 여러 터미널 세션에 액세스 하고 제어할 수 있으며 창 분할, 세션 관리, 세션 분리 및 재연결 기능 등의 다양한 기능을 제공한다. 따라서 터미널에서 코드를 실행시키다가 컴퓨터가 다운되면 돌아가던 코드가 날아가는 방면 tmux에서 돌리는 코드는 서버가 다운되지만 않다면 컴퓨터가 다운되더라도 코드가 문제없이 작동된다. 시간이 없는 분들은 tmux 명령어 정리한 것만 보셔도 된다. [터미널 내 명령어] 세션 목록 확인 tmux ls 세션 연결 tmux attach -t 세션명 세션 삭제 tmux kill-session -t 세션명 [tmux 세션 내 명령어] 세션창 세로분할 ct..

[Python] nifti 파일 읽고 시각화하기 [내부링크]

본 포스팅에서는 nii.gz 확장자인 nifti 파일을 읽고 시각화를 해보고자 한다. NIFTI 파일 Nifti 파일은 Neuroimaging InFormation Technology Initiative의 줄임말로 보통 MRI 뇌 이미지 데이터를 저장하기 위해 사용되는 오픈 파일 포맷이다. 보통 MRI 혹은 CT와 같이 3D 영상의 의료영상 binary 라벨 형식으로 사용된다. NIFTI 파일 읽기 nii.gz 파일은 크게 두 가지 방법으로 배열로 변환이 가능한데, 첫 번째로 SimpleITK.ReadImage 함수를 활용하거나 nibabel.load 함수를 활용해서 읽는 방법이 있다. 두 가지를 모두 예시를 통해 확인해 보겠다. 예시로 사용된 데이터는 흉부 CT 오픈데이터셋을 활용했다. Nifti 파일..

[Python_Error] ValueError: zero-size array to reduction operation maximum which has no identity [내부링크]

본 포스팅에서는 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 하는지 작성하고자 한다. ValueError: zero-size array to reduction operation maximum which has no identity 해당 오류는 비어있는 array를 np.max 혹은 np.min을 사용하여 발생했던 오류이다. [예시] 오류가 발생한 코드와 유사하게 예시를 만들어보았다. import numpy as np mask = np.array([[1,2],[3,4]]) zz = np.where(mask == 5)[0] print((zz.max() + zz.min()) / 2.) """ ValueError Traceback (most recent call last) /aidata/lung/WOR..

[Git] Git conventional commit 규칙 [내부링크]

본 포스팅을 통해 커밋 진행시 관용적으로 사용되는 규칙에 대해 소개하고자 한다. 커밋 [커밋 메시지 구조] "type : subject" "body" "footer" [유형 - type] 1. fix : 코드의 버그를 패치 2. feat : 코드베이스에 새로운 기능 추가 3. style : 코드 스타일링과 관련된 기능 및 업데이트 4. refactor : 코드 리펙토링 5. test : 코드 테스트 6. docs : 문서 수정 7. chore : 정기적인 코드 유지 관리 [주의사항 - subject, body, footer] 1. subject, body, footer 사이에 빈 줄 (enter)를 기입 2. 공백 오류 주의 3. 불필요한 문장 부호 제거 4. 마침표로 subject 줄을 끝내지 않도록 ..

[Python] vscode debug 사용법 (+argparse 선언) [내부링크]

본 포스팅은 VS code 내에서 debugging 하는 법과 특정 코드를 argparse 선언하여 실행하는 법에 대해 얘기하겠다. VS code debugging 세팅 VS code는 특정 break point를 잡아서 코드를 원하는 줄까지 실행시켜 문제가 발생하는지 확인할 수 있다. 만약 지정한 줄까지 실행되지 않고 중간에 문제가 발생한다면 문제가 발생된 줄까지 실행이 되고 그렇지 않다면 break point에서 코드가 중단될 것이다. 이때 원하는 변수들을 가지고 다양한 분석을 할 수 있다면 코드 이해 및 디버깅을 빠르게 할 수 있을 것이다. 이를 위한 세팅 및 방법에 대해 순서대로 얘기해 보겠다. 우선 위 그림과 같이 벌레 모양의 아이콘을 클릭하고 "create a lunch.json file"을 ..

VSCode로 ssh접속 시 Password없이 접속 [내부링크]

VS code로 ssh remote 하여 서버에 접속할 때 비밀번호를 매번 기입해야 하는 번거로움을 없애기 위한 설정에 대해 설명하겠다. 로컬 윈도우에 ssh key 생성 우선 로컬에 ssh key를 생성하여 remote 할 서버에 이를 옮겨주어 비밀번호 없이도 ssh key를 통해 접속이 가능하도록 해주자. 첫 번째로 windows powershell에 접속하여 ssh-keygen -t rsa -b 4096 을 입력하자. 이는 ssh key를 생성시켜 주는 명령어. 이후, 저장할 장소와 접속 비밀번호를 입력하라는 문구가 순서대로 나오는데 저장할 장소는 default로 하기 위해 Enter, 접속 비밀번호는 우리가 이를 없애기 위해 하는건데 입력을 시켜버리면 의미 없으므로 Enter. 이 후 비밀번호 확..

[Linux] 리눅스 명령어 모음 [내부링크]

ls - 현재 디렉토리에 있는 파일과 디렉토리 목록을 표시합니다. cd - 현재 작업 디렉토리를 변경합니다. mkdir - 새 디렉토리를 만듭니다. rmdir - 빈 디렉토리를 삭제합니다. touch - 새로운 빈 파일을 만듭니다. rm - 파일 또는 디렉토리를 삭제합니다. cp - 파일 또는 디렉토리를 복사합니다. mv - 파일 또는 디렉토리를 이동하거나 이름을 바꿉니다. pwd - 현재 작업 디렉토리를 표시합니다. echo - 터미널로 메시지를 출력합니다. cat - 파일의 내용을 터미널로 출력합니다. less - 파일의 내용을 한 페이지씩 볼 수 있도록 합니다. grep - 파일 또는 여러 파일에서 특정 텍스트 문자열을 검색합니다. find - 지정된 위치에서 파일

[Docker] Docker 명령어 모음 [내부링크]

docker run: 새로운 컨테이너에서 명령을 실행합니다. docker start: 하나 이상의 중지된 컨테이너를 시작합니다. docker stop: 하나 이상의 실행 중인 컨테이너를 중지합니다. docker build: Dockerfile에서 이미지를 빌드합니다. docker pull: 레지스트리에서 이미지를 가져옵니다. docker push: 이미지를 레지스트리로 전송합니다. docker exec: 실행 중인 컨테이너에서 명령을 실행합니다. docker logs: 컨테이너의 로그를 보여줍니다. docker ps: 모든 실행 중인 컨테이너를 나열합니다. docker images: 호스트에 있는 모든 이미지를 나열합니다. docker rm: 하나 이상의 컨테이너를 제거합니다. docker rmi: 하나..

[MySQL] MySQL 설치하고 실행하기 (윈도우) [내부링크]

본 포스팅에서는 MySQL을 설치하고 실행하고자 한다. SQL 설치하기 우선 아래의 MySQL 사이트에 접속하여 해당 os에 맞는 MySQL을 설치하자. 다운로드 서버 : https://dev.mysql.com/downloads/windows/installer/8.0.html MySQL :: Download MySQL Installer Select Operating System: Select Operating System… Microsoft Windows Select OS Version: All Windows (x86, 32-bit) Windows (x86, 32-bit), MSI Installer 8.0.31 5.5M (mysql-installer-web-community-8.0.31.0.msi) MD..

[Git] Github 시작하기 (아이디 생성, 레포지토리 생성, README push) [내부링크]

본 포스팅은 Github를 시작하기 위한 세팅을 소개해보고자 한다. Github 아이디 생성 우선 Github에 접속한다. (사이트 url : https://github.com/) Github 사이트에 접속했다면 맨 위 오른쪽 상단에 있는 Sign up 을 클릭한다. 사용하고자 하는 메일 아이디를 작성하면 되는데, 아이디 등록하거나 추후에 찾을 때 해당 메일로 인증 번호가 날라온다. 따라서 실제로 사용하는 유효한 메일로 사용해야 한다. 위 사진의 인증까지 진행하면 이제 아이디 등록은 끝났다. 이제 레포지토리를 구성하러 가보자. 레포지토리 구성하기 Github에 로그인 접속하면 위 그림과 같이 오른쪽 상단에 내 정보가 생긴다. 이를 클릭하여 Your repositories 에 들어가자. 아직까지는 레포가 ..

[Python] 3D 배열 Resize하기 (skimage, scipy 활용) [내부링크]

본 포스팅은 3D 형태의 배열을 사이즈 변경할 수 있는 라이브러리를 활용하여 각각 비교를 해볼 예정이다. cv2 활용 불가한 경우 보통 2D 이미지의 크기를 변경할 때는 cv2를 많이 사용하지만 3D 형태의 이미지는 cv2를 활용할 수 없다. 물론 for loop을 활용하여 슬라이스 별로 하는 방법이 있지만 for loop의 기준이 되는 축의 크기는 변경할 수 없기 때문에 다른 라이브러리를 활용해야 한다. 3D 이미지 크기 변환은 크게 skimage 라이브러리의 resize와 scipy의 zoom을 사용할 수 있다. skimage.transform.resize skimage.transform.resize는 이미지 크기를 조정하는 데 사용하며 이미지와 원하는 출력 크기를 입력하면 크기가 조정된 배열을 반환..

[Git] Git tag 설정하기 [내부링크]

본 포스팅에서는 git tag 설정과 tag를 기준으로 clone 하는 법에 대해 얘기하겠다. Git tag Git 태그는 Git 저장소에서 특정 커밋을 표시하는 방법이며, 프로젝트 개발의 중요한 지점을 표시하는 데 사용된다. 또한 버그가 발생해서 기능을 되돌려야 할 경우 특정 버전으로 쉽게 롤백할 수 있으며 태그를 통해 협업도 용이하게 한다. 시간이 없는 분들은 명령어 정리한 것만 보셔도 된다. tag 생성 git tag "태그명" tag 생성 (특정 commit) git tag "태그명" "해시" tag 찾기 git tag -l "패턴" tag 비교 git diff "태그명_1" "태그명_2" tag 삭제 git tag -d "태그명" tag 푸시 git push origin "태그명" tag 클론 ..

[Git] Git add/commit/push 하기 [내부링크]

본 포스팅은 특정 파일을 원격저장소에 push 하는 법에 대해 얘기하겠다. git add "git add 특정파일"은 특정 파일을 스테이징에 업로드하는 명령어이다. 바로 원격 저장소에 업로드하지 않는 이유는 원격저장소에 업로드할 때 발생하는 충돌 혹은 원치 않는 파일까지 한 번에 업로드되는 것을 방지하기 위해 스테이징 영역에서 작업을 하기 위함이다. 우선 경로에 원격저장소가 잘 연결되어 있는지 "git remote -v", "git branch", "git log"를 통해 확인해 보자. git remote -v : 연결되어 있는 원격저장소 확인 git branch : branch 확인 git log : 로그 확인 이제 원격저장소에 업로드하려는 파일을 add 해보자. 필자는 test라는 파일을 만들어 업로..

[Git] Git 특정 브랜치 clone [내부링크]

본 포스팅은 특정 브랜치를 clone 하는 법에 대해 포스팅하고자 한다. 일반 clone 일반적으로 clone은 사용하고자 하는 레포를 그대로 가져와서 사용하고자 할 때 사용하는 명령어이다. clone 하고자 하는 레포에 들어가 밑에 그림 초록색 버튼을 클릭하고 해당 레포의 url를 복사한다. git clone '복사한 url' 을 bash에 입력해 주면 해당 경로에 레포가 생성된다. 위 예시로는 'git clone https://github.com/watertiger5/test_repo.git'를 하면 해당 레포가 복사된다. 특정 branch clone 다만 협업이나 백업용으로 branch를 따로 파서 진행한 경우 해당 branch의 레포를 가져와야 할 경우가 발생한다. 이때는 기존 방법과 동일하지만 ..

[Git] Git remote - 원격 저장소 연결 설정 및 확인 [내부링크]

본 포스팅은 git을 사용할 때 원하는 원격 레포에 잘 연결이 되어 있는지, 혹은 연결되어 있는 레포를 끊고 다시 연결해 보는 작업을 통해 remote 설정에 대해 얘기해 보겠다. git clone "저장소url" -> git remote -v 우선 특정 저장소를 clone 하여 원하는 경로로 옮겨보자. bash에 특정 경로 "git clone 저장소url"을 기입하면 쉽게 가져올 수 있다. 이후 원격저장소에 잘 연결이 되었는지 확인하기 위해 "git remote -v"를 기입하여 확인해 준다. 보이는 바와 같이 git clone으로 가져온 레포의 url이 문제없이 잘 연동이 되어 있는 것을 확인할 수 있다. git remote remove "name" 이번에는 "git remote remove orig..

[Python] Dice score 코드 만들기 (segmentation 평가) [내부링크]

본 포스팅은 Dice score에 대한 기본적인 내용을 정리 후 python에서 segmentation 성능 평가 사용되도록 contour dice score 및 bbox dice score 계산하는 코드를 구성하고자 한다. Dice score coefficient (DSC) Dice score는 segmentation 성능 평가를 할 때 주로 사용이 되며, 두 가지 배열 혹은 영역의 유사도를 정량적으로 파악할 수 있도록 해준다. 아래 그림과 같이 파란색 영역(X)과 빨간색 영역(Y)의 Dice score를 계산하고자 할 때, 수식은 아래와 같다. 분자에 두 영역의 교집합의 두배가 입력되며, 분모에는 각각의 영역의 합으로 구성된다. Python 적용 (Binary, same coordinate) 아래 코..

[Python_Error] ValueError: The dimension of bins must be equal to the dimension of the sample x. [내부링크]

본 포스팅은 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 하는지 작성했다. ValueError: The dimension of bins must be equal to the dimension of the sample x. 위 에러메시지는 "np.histogram2d()" 모듈을 사용할 때 발생한 오류이다. import numpy as np # Generate some random data data_1 = np.random.randn(100, 2) # Generate some random data data_2 = np.random.randn(150, 2) # Try to create a 2D histogram with one-dimensional bins hist, _, _ = np.histogr..

[Python_Error] ModuleNotFoundError: No module named 'IPython.html' [내부링크]

본 포스팅은 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 하는지 작성했다. ModuleNotFoundError: No module named 'IPython.html' 말 그대로 IPython.html 모듈이 없다는 오류이다. 보통 예전에 만들어진 코드를 가져다 쓸 때 보통 발생했던 오류이다. 필자는 IPython.html에 있는 widgets 함수를 가져다 쓰려다 오류가 발생했다. 오류 수정은 간단하다. widget을 사용하기 위해 IPython이 아니라 ipywidget을 사용하면 문제가 해결된다. ipywidget에는 interact, button과 같은 UI에 도움이 되는 함수들이 많이 내장되어 있다. from ipywidgets import interact, Button import I..

[Python] 3D 배열의 Dice score 코드 만들기 (segmentation 평가) [내부링크]

본 포스팅은 위치기반 민감도 특이도를 구할 때 3D bbox dice를 계산하여 필터링에 도움이 될 만한 3D dice score 계산 코드에 대해 설명하겠다. (기본적인 Dice 설명은 아래의 링크에 참고해 주세요.) Dice 설명 : https://baembaembaem.tistory.com/99 [Python] Dice score 코드 만들기 (segmentation 평가) 본 포스팅은 Dice score에 대한 기본적인 내용을 정리 후 python에서 segmentation 성능 평가 사용되도록 contour dice score 및 bbox dice score 계산하는 코드를 구성하고자 한다. Dice score coefficient (DSC) Dice score는 baembaembaem.tist..

[Docker] 도커 이미지 생성을 통해 환경 구축하기 (VS code) [내부링크]

본 포스팅은 도커 이미지를 생성 및 삭제하는 방법에 대해 포스팅하고자 한다. Dockerfile 우선 특정 폴더 내에 Dockerfile 파일을 구성하면 된다. 필자는 './develop_env'라는 폴더 내에서 진행했다. 별도의 확장자 없이 'Dockerfile'로 생성하면 되며 아래 예시는 os 환경 및 기본 설정을 하기 위함이다. 아래 내용을 Dockerfile에 들어가서 입력한 뒤 저장하자. # os 및 python 버전 설정 FROM ubuntu:20.04 ENV PYTHON_VERSION=3.8 ENV LC_ALL=C.UTF-8 ENV LANG=C.UTF-8 # os 내 기본 명령어 설치 RUN apt-get update && apt-get install -y \ curl \ git \ vim..

[Linux] 다른 서버로 아나콘다 가상환경 옮기기 [내부링크]

본 포스팅은 기존에 잘 사용하던 가상환경을 다른 서버로 옮겨서 사용하는 법을 설명하고자 한다. 첫 번째 방법 - tar 두 가지 방법으로 가상환경을 옮길 수 있는데 첫 번째 방법으로 tar을 사용하여 가상환경을 압축하고 옮기는 방법이다. 두 가지 방법 모두 사용해본 바 로 이 방법이 빠르고 편하다. 우선 옮기고자 하는 가상환경이 있는 경로로 이동한다. 일반적인 경로 - '.conda/envs' 이후 해당 가상환경을 tar 명령어를 사용하여 압축한다. tar -cvf [파일명.tar] [가상환경 폴더명] 다시 해당 경로의 파일 목록을 보면, 'sb_dev.tar'이란 이름으로 가상환경이 압축된 걸 확인할 수 있다. 이렇게 압축된 파일을 타깃이 되는 서버에 같은 위치(.conda/envs)로 옮겨준다. 서버..

[Python] np.ones np.zeros - 1 혹은 0으로 이뤄진 배열 생성 [내부링크]

본 포스팅은 numpy를 활용하여 1 혹은 0으로 이뤄진 배열을 구성하는 법에 대해 포스팅하겠다. np.ones() 특정 사이즈를 기준으로 one으로 이뤄진 배열을 만드는 함수이다. 입력 변수로는 생성하고자 하는 크기를 입력하면 되며, 1차원 배열을 구성하고자 할 때 그 길이에 해당하는 숫자 하나만 작성해 줘도 되며, 만일 2차원 이상의 배열을 생성하고 싶다면 크기를 tuple이나 list 형식으로 지정해주면 된다. import numpy as np print(np.ones(3)) # array([1., 1., 1.]) print(np.ones([2,3]), np.ones((2,3))) """ (array([[1., 1., 1.], [1., 1., 1.]]), array([[1., 1., 1.], [1...

[Python_Error] ValueError: all the input arrays must have same number of dimensions (np.concatenate 오류) [내부링크]

본 포스팅은 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 하는지 작성했다. ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 3 dimension(s) and the array at index 1 has 4 dimension(s) 해당 오류는 np.concatenate()을 사용할때 발생했던 오류이며, 특히 3차원 이상의 어레이들을 concat할때 많이 보이는 오류이다. 특히 2차원 이미지에 배치, 채널이 포함된 데이터의 경우 자주 발생했다. [예시_1] 다음과 같이 np.concatenate는 사용할 때 특정 축을 기준으로 결합이 되기 때문에 axis 인자에 입력한 특..

[Linux] gpustat의 다양한 기능 (GPU 모니터링) [내부링크]

본 포스팅은 리눅스 기반의 서버에서 사용자들이 보기 편하도록 gpu를 모니터링해주는 gpustat에 대해 얘기하겠다. gpustat 설치 리눅스에서 gpu를 모니터링 하는 방법으로 nvidia-smi가 있다. 하지만 이는 모두 흑백에 가시성이 떨어진다. 이를 대체할 수 있는 라이브러리가 있는데 바로 gpustat이다. gpustat은 손쉽게 pip를 활용하여 설치가 가능하다. pip install gpustat gpustat 활용하기 gpustat에는 사용자 편의를 위해 몇 가지 parameter를 기입할 수 있도록 한다. --color : 글자색으로 출력문 강조 --no-color : 흑백으로 출력 -u, --show-user : 프로세스 소유자 표시 -c, --show-cmd : 프로세스 표시 -p,..

[Python_Error] TypeError: '>' not supported between instances of 'list' and 'int' [내부링크]

본 포스팅은 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 하는지 작성했다. TypeError: '>' not supported between instances of 'list' and 'int' 본 오류는 리스트 형태의 어레이를 관계 연산자('>', '=', '' not supported between instances of 'list' and 'int' """ [해결 방법] 이는 단순히 리스트 형태의 어레이를 np.array를 통해 싸주고 넘파이 형태로 바꿔주면 해결이 가능하다. nums = np.array([1,2,3,4,5,6,7,8,9,10]) print(nums > 3) # [False False False True True True True True True True] 혹은 같은 리스..

[Python_Error] TypeError: slice indices must be integers or None or have an __index__ method [내부링크]

본 포스팅은 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 했는지 적을 예정이다. TypeError: slice indices must be integers or None or have an __index__ method 해당 오류는 list를 슬라이싱 할 때 int의 조합이 아니라 실수의 조합으로 입력이 되면 발생하는 오류이다. 필자는 //을 사용하여 입력을 정수로 만들고 슬라이싱을 진행하고자 했으나 float로 출력이 되어서 발생했던 오류이다. [예시] import numpy as np rand = [77, 84, 39, 42, 64] print(rand) # [77, 84, 39, 42, 64] ori_idx = np.array([3.,9.]) half_idx = ori_idx // 2 pr..

[Python_Error] TypeError: ufunc 'true_divide' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'' [내부링크]

본 포스팅은 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 했는지 적을 예정이다. TypeError: ufunc 'true_divide' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'' 이 오류는 숫자와 np.array로 싸인 string 변수를 나눌 때 발생했던 오류이다. [예시] import numpy as np number_1 = np.array([3,6,9]) # float array number_2 = np.array(str(3)) # string number_1/number_2 """ T..

[Python_Error] TypeError: unsupported operand type(s) for -: 'int' and 'list' [내부링크]

본 포스팅은 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 했는지 적을 예정이다. TypeError: unsupported operand type(s) for -: 'int' and 'list' 본 오류는 array 내에 scalar 값이 아닌 list가 들어가서 발생한 오류이다. [예시] import numpy as np rand_cube_3D = np.random.randint(0,100,size=[3,3,3]) print(rand_cube_3D) """ array([[[87, 58, 63], [ 3, 44, 32], [81, 11, 80]], [[20, 84, 77], [56, 8, 32], [38, 99, 61]], [[71, 83, 58], [85, 29, 65], [67, 33, 70]..

[Python_Error] TypeError: only integer scalar arrays can be converted to a scalar index [내부링크]

본 포스팅은 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 했는지 적을 예정이다. TypeError: only integer scalar arrays can be converted to a scalar index list index에 scalar 가 아닌 np.array가 들어갔을 때 발생하는 오류이다. [예시] import numpy as np rand_cube_3D = np.random.randint(0,10,size=[5,5,5]) print(rand_cube_3D) """ array([[[3, 1, 4, 8, 9], [7, 1, 2, 8, 3], [4, 9, 0, 6, 9], [8, 9, 9, 4, 0], [5, 0, 5, 8, 1]], [[9, 4, 2, 9, 2], [6, 7, 6, 8..

[Python] Image filtering - 영상처리에 대해 [내부링크]

오늘은 영상처리의 기본 개념 및 필터에 대해 포스팅하겠다. Scipy에서 제공하는 라이브러를 사용하여 구현하겠다. Filter • Heart of image enhancement • Remove noise or undesirable impurities • The first derivative and second derivative filters are used to determine edges in an image • Linear filter – Mean, Laplacian and Laplacian of Gaussian • Non-linear filter – median, maximum, minimum, Sobel, Prewitt, Canny filter Image Enhancement • Be acco..

[Python] np.where() - 조건 두 개 사용하는 법 [내부링크]

본 포스팅은 넘파이 어레이의 특정 조건에 부합하는 인덱스를 찾아주는 np.where()에 대해 정리할 예정이다. 다만 이전에 포스팅한 내용은 조건 하나의 경우지만 이번에는 두 개의 조건에 동시에 부합하는 경우 어떻게 사용이 되는지 포스팅하겠다. np.where() - AND 연산 (&) 우선 두개의 조건을 둘 다 부합할 경우 즉, AND 논리의 경우 어떻게 np.where()을 사용해야 하는지 예시를 통해 정리하겠다. [np.where((조건_1)&(조건_2)] import numpy as np nums = np.array([1,2,3,4,5,6,7,8,9,10]) np.where(nums > 3) # (array([3, 4, 5, 6, 7, 8, 9], dtype=int64),) np.where(num..

[Python] upper, lower, isupper, islower - 문자열 대문자, 소문자 변경 및 확인하기 [내부링크]

오늘은 문자열 대문자, 소문자 변경을 하고 선언한 문자열이 대문자인지 소문자인지 확인 할 수 있는 함수를 포스팅하고자 한다. [문자열들 선언] str_1 = 'This is good stock.' str_2 = 'ETF' str_3 = 'etf' [문자열 비교] str_2 == str_3 # False Python은 문자열을 대문자 소문자 비교를 하기 때문에 같은 문자로 구성이 되어있더라도 다른 문자열로 이해한다. .upper() upper 함수는 문자열은 대문자로 만들어준다. 문자열이 대소문자로 혼합되어 구성이 되어있더라도 모두 대문자로 구성시켜준다. print(str_1.upper()) # THIS IS GOOD STOCK. print(str_3.upper()) # ETF .isupper() isup..

[Python] np.ceil, np.round, np.floor - 숫자 올림, 반올림, 버림 [내부링크]

오늘은 넘파이를 사용하여 숫자의 올림, 내림, 반올림에 대해 포스팅하겠다. np.ceil() np.ceil()은 소수점 첫 번째 자리를 기준으로 올림을 시켜주는 함수이다. [숫자 선언] import numpy as np number = 1234.56789 [소숫점 첫 번째 자리에서 올림] print(np.ceil(number)) # 1235.0 np.floor() np.floor()는 ceil과는 반대로 내림을 시켜주는 함수이다. [소수점 첫 번째 자리에서 버림] print(np.floor(number)) # 1234.0 np.round() np.round()는 반올림으로 가장 많이 사용되는 함수라 생각된다. 이는 인자를 2개 받을 수 있으며 첫 번째 인자는 ceil과 floor와 마찬가지로 숫자를 입력..

[Python] zfill() - 숫자 문자열 앞에 0을 추가하여 자리수 맞추기 [내부링크]

오늘은 문자열 앞을 0으로 자릿수 맞추는 방법에 대해 포스팅하겠다. zfill() zfill을 사용하여 원하는 자리수 만큼 input을 넣어주면 숫자 형태의 문자열 자릿수를 그에 맞게 맞춰준다. [예시 생성] import numpy as np number_list = np.random.randint(0,1000,10) print(number_list) # [573 906 11 21 892 118 445 992 781 963] [3자리수로 통일시켜주기] for num in number_list: print(str(num).zfill(3)) """ 573 906 011 021 892 118 445 992 781 963 """ 2자리, 3자리 수가 각각 있는데 2자리 숫자를 문자열로 변경하여 zfill(3)으..

[Python] collection.Counter() - 숫자 혹은 문자 개수 세기 [내부링크]

오늘은 특정 리스트 내의 숫자 혹은 문자열의 문자 각각의 개수를 손쉽게 리턴해주는 함수에 대해 포스팅하고자 한다. collection.Counter() collection 라이브러리 내에 Counter 함수는 입력을 리스트로 받으며 출력은 리스트 내의 인자 각각의 개수를 리턴해준다. [숫자 리스트 입력] from collections import Counter import numpy as np nums_1 = np.random.randint(0,5,100) print(nums) """ [2 3 4 0 2 1 2 2 4 3 4 1 4 1 0 3 4 3 3 2 3 1 2 2 2 3 4 0 2 3 1 1 0 4 2 4 0 4 3 1 4 0 2 4 2 3 3 1 3 3 3 4 0 3 2 0 1 3 1 3 3 2..

[Python] np.unique() - 중복된 값들 중 고유한 값들만 반환하기 [내부링크]

오늘은 어레이에서 중복된 인자들을 없애고 고유한 인자들만 반환하는 법에 대해 포스팅하겠다. 또한 고유한 인자들의 인덱스 반환법과 고유한 인자들이 각각이 몇개가 있는지에 대해서도 작성하겠다. np.unique() np.unique()의 입력값의 인자들이 숫자 형태이든 문자열 형태이든 중복된 값들은 하나로 만들어준다. [숫자 형태 어레이] import numpy as np nums = [3,6,9,3,6,9,3,6,9] np.unique(nums) # array([3, 6, 9]) 숫자로 이뤄진 리스트의 경우이다. [문자열 형태 어레이] strs = ['num_1','num_2','num_3','num_1','num_2','num_3','num_1','num_2','num_3'] np.unique(strs)..

[Python] gc.collect() [내부링크]

오늘은 gc 라이브러리의 collcect 함수에 대해 포스팅하겠다. gc.collect() gc 라이브러리는 파이썬이 구동될 때 메모리 관리를 수행한다. 필자는 gc.collect()를 주로 사용하며 대용량의 데이터를 저장하거나 알고리즘 내에 많은 loop이 구성되었을 때 필수적으로 사용한다. 사용법은 간단하다. gc.collect() 간혹 알고리즘이 잘 구동되다 멈추거나 메모리 오류가 발생하는 경우가 있다. 이때 htop을 통해 프로세스 관리자를 보면, 상단 3번째에 위치한 스왑메모리("Swp")가 가득 차있는 경우를 볼 수 있다. 스왑 메모리 문제가 발생한 경우에는 for문이 끝나기 전 군데군데 gc.collction을 위치시킨다면 손쉽게 해결이 가능하다.

[Python] np.argmax, np.argmin - 넘파이 최댓값, 최솟값 인덱스 찾기 [내부링크]

오늘은 넘파이 어레이의 최솟값, 최댓값 인덱스를 찾는 함수에 대해 포스팅하겠다. np.argmax(), np.argmin() 0~100까지의 10개 랜덤 어레이를 구성하겠다. random_num = np.random.randint(0,100,size=10) print(random_num) # array([84, 63, 80, 84, 90, 98, 15, 92, 5, 12]) 랜덤 어레이의 최댓값과 최솟값은 다음과 같다. print(random_num.max(), random_num.min()) # 98 5 우선 첫번째로 최댓값인 98의 인덱스를 np.argmax()를 통해 찾아보겠다. max_idx = np.argmax(random_num) print(max_idx) # 5 다음으로 최솟값의 5의 인덱스..

[Python] np.concatenate() - 넘파이 어레이 합치기 [내부링크]

오늘은 넘파이 어레이들을 특정 축 기준으로 합치는 방법에 대해 소개하고자 한다. np.concatenate() 해당 함수는 특정 어레이들을 합칠 때 유용하게 사용된다. 이를 알아보기 위해 사이즈 (3,3)인 어레이와 (1,3)인 어레이를 합쳐보도록 하자. [입력값 생성] import numpy as np array_1 = np.random.randint(0,10,size = [3,3]) array_2 = np.random.randint(0,10,size = [1,3]) print(array_1) """ [[0 5 5] [4 3 7] [6 8 4]] """ print(array_2) # [[4 6 5]] [concat] np.concatenate([array_1,array_2]) """ array([[0,..

[Python] np.transpose(), np.swapaxes() - 차원 및 축 변경하기 [내부링크]

오늘은 넘파이 행렬의 행과 열, 즉 차원을 변경하는 몇 가지 방법에 대해 포스팅하겠다. np.transpose() 입력되는 넘파이 어레이의 전치 행렬을 출력해준다. np.transpose와 동일하게 입력 데이터 바로 뒤에 ".T"를 추가하여 손쉽게 전치시키는 방법도 있다. import numpy as np example_2D = np.random.randint(10,size=(2,3)) print(example_2D.shape) # (2, 3) exam_1 = example_2D.T exam_2 = np.transpose(example_2D) print(exam_1.shape,exam_2.shape) # (3, 2) (3, 2) print(exam_1 == exam_2) """ [[ True True] ..

[Python] np.newaxis, np.expand_dims(), np.squeeze() - 차원 및 축 조절하기 [내부링크]

오늘은 numpy로 차원을 늘리고 줄이는 방법에 대해 포스팅해보겠다. np.newaxis() np.newaxis()는 함수명 그대로 넘파이 어레이의 차원의 수를 늘려주는 역할을 한다. 차원을 늘리고자 하는 인덱스에 np.newaxis를 포함하면 해당하는 차원이 늘어난다. import numpy as np example = np.arange(10) print(example.shape) # (10,) exam_1 = example[np.newaxis,:] exam_2 = example[:,np.newaxis] print(exam_1.shape, exam_2.shape) # (1, 10) (10, 1) 또한 한 차원이 아니라 여러 차원을 한 번에 늘릴 수도 있다. exam_3 = example[np.newax..

[Python] np.random - 난수 생성하기 [내부링크]

오늘은 numpy로 난수를 생성하는 random 함수에 대해 포스팅하겠다. np.random.rand() 0 이상 1 미만의 범위 내에 주어진 argument 만큼 난수를 생성한다. import numpy as np np.random.rand(3) # array([0.60407304, 0.97595625, 0.3530597 ]) np.random.rand(3,3) """ array([[0.95799066, 0.43424117, 0.59480775], [0.93778055, 0.97494792, 0.81196245], [0.15744564, 0.05079325, 0.562474 ]]) """ argument가 1개로 들어가면 1-d 형태로 난수를 생성하며 2개를 입력하면 2-d 형태로 난수를 생성한다. n..

[Python] tqdm - 알고리즘 진행률 확인하기 [내부링크]

오늘 포스팅 할 내용은 tqdm으로 알고리즘이 얼마만큼 진행이 되고 있는지 시각화 시켜주는 라이브러리이다. 특히, 학습 모델의 진행률을 보는데 매우 유용하다. 추가적으로 tqdm, enumerate, zip을 동시에 사용하고자 할때 어떠한 순서로 구성을 해야하는지도 다뤄보고자 한다. tqdm 우선 tqdm은 anaconda에서 기본적으로 제공하는 함수가 아니기 때문에 추가적인 설치가 필요하다. [tqdm 설치] tqdm은 "pip insatll tqdm"을 터미널에 입력하면 손쉽게 설치가 가능하다. [tqdm 사용] tqdm의 라이브러리의 tqdm 함수를 그대로 사용해주면 된다. 결과와 같이 10000번이 수행되었다는 것을 프로세스바를 통해 제공해준다. 본 예시는 computational memory가 ..

[Python] for loop - enumerate, zip 사용 [내부링크]

오늘은 python for 문에 빠질 수 없는 enumerate와 zip에 대해 포스팅을 하고자한다. enumerate enumerate를 직역하자면 숫자를 센다는 의미로 for문이 몇번 돌아갔는지 카운트를 해주는 내장 함수이다. [enumerate] 다음과 같이 사용이 되며 0부터 시작한다. import numpy as np linspace_array_1 = np.linspace(1,100,10) for num, value in enumerate(linspace_array_1): print('count: {}, value: {}'.format(num,value)) """ count: 0, value: 1.0 count: 1, value: 12.0 count: 2, value: 23.0 count: 3,..

[Python] numpy - np.linspace와 np.arange의 차이점 [내부링크]

오늘은 np.linspace와 np.arange의 차이점에 대해 포스팅을 하고자 한다. np.linspace() 우선 np.linspace와 np.arange 모두 numpy array를 생성하는 함수이다. 또한 입력받는 argument들도 3개여서 간혹 헷갈리는 경우가 있다. 다만, 이 두개의 함수들은 numpy를 어떻게 생성할 것인가에 극명한 차이점을 보인다. 우선 np.linspace()는 "정수값 개수"으로 numpy array를 생성한다. [np.linspace를 사용하여 array 생성] numpy array를 1부터 100까지 포함 100개를 생성 import numpy as np linspace_array = np.linspace(1,100,100) print(linspace_array) ..

[Python] os - 폴더 및 파일 이름 변경, 제거 [내부링크]

오늘은 폴더 및 파일의 이름 변경과 제거 방법에 대해 포스팅을 하고자 한다. os.rename() os.rename("변경할 폴더명", "바뀐 후 폴더명")을 통해 폴더의 이름을 변경할 수 있다. 물론 폴더 뿐 아니라 파일 또한 변경이 가능하다. [폴더명 변경] "./LIDC" 경로의 폴더를 모두 4자리 숫자로 변경하고자 한다. import os from glob import glob from natsort import natsorted dir = './LIDC' sorted_folders = natsorted(glob(os.path.join(dir,'*'))) print(sorted_folders) # ['./LIDC\\LIDC-IDRI-0', './LIDC\\LIDC-IDRI-1', './LIDC\\..

[Python] list.split, list.join - 문자열 리스트 나누기, 합치기 [내부링크]

오늘은 문자열을 특정 문자를 기준으로 나누고 합치는 방법에 대해 포스팅하겠다. split() 우선 split()은 문자열을 특정 문자로 나눌 수 있도록 해주는 메소드이다. [문자열 생성 및 split] list_test = 'list_1' list_test.split('_') # ['list', '1'] 다음과 같이 '_'을 기준으로 문자열을 구분 지으며 나눠진 문자열은 모두 하나의 리스트로 구성된다. [특정 경로 나누기] path_test = 'ai/data/label/1.jpg' print(path_test.split('.')) # ['ai/data/label/1', 'jpg'] print("Extension of file is {}".format(path_test.split('.')[-1].uppe..

[Python] os - os.path 활용 [내부링크]

오늘은 많이 사용되는 os.path.join()에 대해 소개하고자 하였지만 os.path 내에 어떠한 함수가 있는지 궁금하여 찾아보던 중 소개해줄 함수들이 있어 몇몇 함수들을 추려서 같이 포스팅을 하겠다. os.path.join() os.path.join()은 상위 경로와 하위 경로의 문자열들을 하나의 경로 형태의 문자열로 합쳐주는데 주로 사용이 된다. [문제 발생 코드] import os parent_path = './parent_path' sub_path = 'sub_path' folder = 'folder' combined_path = parent_path + sub_path + folder print(combined_path) # ./parent_pathsub_pathfolder 물론 sub_pa..

[Python] os, shutil - 폴더 생성 및 삭제하기 [내부링크]

오늘은 os와 shutil을 사용해 폴더 생성 및 삭제하기에 대해 포스팅을 하겠다. os.mkdir() 기존 경로 형태는 다음과 같다. 예시로 "music_sample" 폴더 내에 새로운 폴더를 구성하겠다. [폴더 생성] os.mkdir()을 통해 원하는 경로에 특정 폴더를 구성할 수 있다. import os dir = './music_sample' print(os.listdir(dir)) # ['0001.wav', '0002.wav', '0003.wav', '0004.wav', '0005.wav', '0006.wav', '0007.wav', '0008.wav', 'annotation.txt'] os.mkdir('./music_sample/new_folder') print(os.listdir(dir)) ..

[Python] shutil - 폴더 및 파일 복사하기 [내부링크]

오늘은 shutil 라이브러리를 활용하여 특정 폴더 및 파일을 복사하는 방법에 대해 포스팅하겠다. shutil.copytree() shutil.copytree()를 활용하여 특정 경로를 손쉽게 복사할 수 있다. copytree()의 argument는 2개이며 "복사할 경로", "복사될 경로" 순으로 입력해주면 된다. [폴더 복사] 예시로 LIDC 경로 내에 "LIDC-IDRI-1" 폴더를 상위 workspace 경로 내 "LIDC-IDRI-1_copy"로 복사해보겠다. "./LIDC/LIDC-IDRI-1" --> "./LIDC-IDRI-1_copy" pwd # 'c:\\Users\\beam\\workspace' import shutil target_folder = './LIDC/LIDC-IDRI-1/' ..

[Python] os - 폴더 안에 파일 목록 출력 및 경로 변경 [내부링크]

오늘은 os 라이브러리를 사용하여 특정 경로 내에 파일들을 출력, 알고리즘 실행 경로 변경에 대해 포스팅을 해보겠다. os.listdir() 특정 경로 내의 파일 및 폴더 목록은 os.listdir()을 사용하면 손쉽게 획득할 수 있다. 입력은 특정 경로를 문자열 형태로 입력하면 되며, 출력은 특정 경로 내 파일의 목록을 리스트 형태로 리턴한다. [경로 내 파일 출력] dir = './music_sample' print(os.listdir(dir)) # ['0001.wav', '0002.wav', '0003.wav', '0004.wav', '0005.wav', '0006.wav', '0007.wav', '0008.wav', 'annotation.txt'] os.chdir() os.chdir()은 코드가 ..

[Python] conda 가상환경 jupyter notebook 연동하기 [내부링크]

저번 포스팅에는 conda 가상환경 생성 및 삭제에 대해 얘기를 했다. 오늘은 생성된 가상환경을 jupyter notebook에서 사용할 수 있도록 커널 연동에 대해 포스팅하고자 한다. conda 가상환경 jupyter notebook 설치 및 연동 [가상환경 접속 및 jupyter notebook 설치] conda install을 사용하여 원하는 라이브러리를 설치한다. conda activate torch # 가상환경명 : torch conda install jupyter notebook [jupyter notebook 실행] 명령창에 'jupyter notebook'을 입력하면 다음과 같은 글들이 리턴된다. 이 중 빨간색으로 마킹된 저 링크 중 하나 ('http://..")를 복사하여 인터넷 주소창에..

[Linux] 터미널 내에 파일 옮기기, 복사, 삭제하기 [내부링크]

본 포스팅은 linux os 내에 파일의 조작법에 대한 내용이다. 현재 경로 현재 root path에 'new_path'와 'origin_path'를 생성했으며 test.ipynb 파일을 조작할 예정이다. 파일 옮기기 test.ipynb 파일을 origin_path 경로에 옮겨보고자 한다. 이 때 사용되는 명령어는 mv 이다. mv "특정 파일" "옮기고자 하는 경로" 파일 복사하기 origin_path 경로 내에 있는 test.ipynb 파일을 new_path 경로 내에 복사하고자 한다. 이때 사용되는 명령어는 cp 이다. cp "복사하고자 하는 파일" "복사되어 옮겨지는 경로" 파일 삭제하기 마지막으로 origin_path에 있는 test.ipynb 파일을 삭제하려면 rm 명령어를 사용하면 된다. r..

[Python] conda 가상환경 생성 및 삭제 [내부링크]

오늘은 가상환경 생성 및 삭제에 대해 설명하겠다. conda 가상환경 생성 오픈소스를 사용하거나 제품을 구성하고자 할 때 알고리즘을 구성하는 파이썬 및 라이브러리의 버전이 달라서 고생하는 경우가 있다. 이때 가상환경을 구성하여 각 환경마다 서로 다른 파이썬 및 라이브러리를 구성하여 독립적으로 알고리즘을 구동할 수 있다. [가상환경 생성 명령어] conda create -n 가상환경이름 python=3.9 [가상환경 구성_1] env_1라는 이름의 가상환경에 python 3.9 버전을 사용하도록 생성한다. conda create -n env_1 python=3.9 [가상환경 구성_2] env_2라는 이름의 가상환경에 python 3.6 버전을 사용하도록 생성한다. conda create -n env_2 p..

[Python] Anaconda 설치 및 VS code 연동 [내부링크]

Anaconda offers the easiest way to perform Python/R data science and machine learning on a single machine. Start working with thousands of open-source packages and libraries today. 아나콘다 홈페이지 들어가면 바로 보이는 글귀이다. 위 설명과 같이 아나콘다는 파이썬에서 유용하게 사용되는 수천 개의 오픈소스 및 라이브러리를 사용자로 하여금 용이하게 사용할 수 있도록 만들어 준다. 오늘은 아나콘다 설치 및 Visual studio로 아나콘다 설치가 제대로 이뤄졌는지 확인하는 포스팅을 적어보고자 한다. 아나콘다 설치 아나콘다 설치 사이트 - https://www.anac..

[Python] glob - 같은 확장자인 파일만 획득하기 [내부링크]

오늘은 경로안에 같은 확장자인 파일만 획득할 수 있도록 해주는 glob 라이브러리에 대해 포스팅하겠다. 같은 확장자의 파일 획득하기 glob는 같은 확장자를 획득할때 유용한 라이브러리이다. glob가 같은 확장자의 파일을 추출하는데 유용한 이유는 특정 문자열이 포함된 파일들을 추출 할 수 있기 때문이다. [읽을 폴더 정보] 다양한 폴더와 .wav, .txt, .dcm 확장자들이 함께 있는 형태이다. [라이브러리 선언 및 하위 폴더 출력_1] glob 라이브러리의 glob 함수를 선언한다. '*'은 모든 조건을 포함한다는 얘기로 해당 경로의 모든 폴더가 출력된다. from glob import glob print(glob('./*')) # ['.\\LIDC', '.\\music_sample', '.\\Un..

[Python] uuid - UUID 생성하기 [내부링크]

오늘 포스팅 내용은 python으로 uuid 생성 방법을 소개하고자 한다. UUID란? uuid란 universally unique identifier의 축약어로 이를 직역하자면 범용 고유 식별자이다. 말그대로 범용적으로 또는 겹치지 않도록 숫자들을 생성하여 각 개체들을 식별하고 구별할 수 있도록 하는 식별자 표준이다. 특히 네트워크 상에서 많이 사용이 되는데, 통신관리시스템 내부에서 개발되고 있는 개별 시스템을 구별할 수 있도록 고유성을 부여하는데 이때 사용되는 표준이 uuid이다. 이러한 uuid는 32개의 16진수로 구성되어 있으며 8-4-4-4-12의 그룹으로 나눠져 있다. Python UUID 구현 python으로 uuid를 구현하는데는 굉장히 쉽다. 단지 uuid의 라이브러리를 사용하여, uu..

[Python] time - 날짜 및 알고리즘 소요시간 구하는 법 [내부링크]

오늘은 Python 으로 시간을 리턴 받을 수 있는 time 함수에 대해 포스팅을 해보겠다. time 함수를 통해 알고리즘 소요시간 구하기 필자는 보통 time 함수를 알고리즘이 얼마만큼의 시간을 소요하는지 알아보기 위해 사용한다. 이 뿐만 아니라 시간이나 년도, 날짜에 대한 정보를 파라미터로 사용해야하는 경우도 드물지 않게 있기 때문에 필수적인 함수라고 할 수 있다. 1. 알고리즘 걸리는 시간 [time 라이브러리 임포트] from time import time [time 함수 사용] time() # 1662545174.7101853 time 함수의 리턴값은 다음과 같다. 현재 시간을 리턴하며 리턴값의 단위는 소수점을 기준으로 왼쪽은 초단위, 오른쪽은 마이크로 초단위이다. [알고리즘 소요시간 구하기] ..

[Python] Morophological 구현 (모폴로지 연산 그림으로 설명) [내부링크]

오늘은 영상처리에서 자주 사용되는 모폴리지 처리에 대해 포스팅하겠다. 구현은 scipy 라이브러리의 ndimage 함수를 사용했다. Morphological Operations • An important part of image analysis involves understanding the shape of the objects in that image through morphological operations • Morphology means form or structure • The goal is to transform the structure or form of the objects using a structuring element • Morphological operations can be app..

[Python] 민감도 (Sensitivity), 특이도(Specificity), 위양성률(False Positive Rate) [내부링크]

오늘은 임상적 평가에 있어 많이 사용되는 평가지표인 민감도, 특이도에 대해 포스팅하겠다. 민감도 특이도 계산 우선 정답과 예측에 대한 예시를 들기 위해 random 함수와 각 개수를 쉽게 카운트하는 Counter 함수를 import 한다. [라이브러리 임포트] import random from collections import Counter 그 후 예시를 들기 위해 양성은 '1', 음성은 '0'으로 정하여 정답과 예측을 랜덤으로 10개씩 구성했다. [정답 & 예측 예시 생성] gt,pred = [],[] for _ in range(10): gt.append(random.randint(0,1)) pred.append(random.randint(0,1)) 예시는 다음과 같다. print(gt) # [1, 1..

[python] natsorted - 문자열 리스트를 숫자를 기준으로 정렬 [내부링크]

오늘은 문자열 내에 있는 숫자를 기준으로 정렬하도록 하는 natsort 라이브러리에 대해 포스팅하겠다. Simple yet flexible natural sorting in Python. Natsort Natsort 라이브러리 내에 natsorted() 함수를 사용하여 sorting 하겠다. [파일 경로 예시] LIDC라는 상위 폴더에 LIDC-IDRI-'idx' 형태의 폴더들로 구성되어 있다. [파일 경로 읽기] os.listdir()을 통해 해당 경로에 있는 폴더를 획득하여 출력해본 결과 다음과 같이 출력된다. import os dir = "./LIDC" print(os.listdir(dir)) """ ['LIDC-IDRI-1', 'LIDC-IDRI-10', 'LIDC-IDRI-2', 'LIDC-ID..

[Python] np.where() - 조건에 맞는 인덱스 찾기 [내부링크]

오늘은 넘파이 어레이에 조건에 맞는 인덱스를 찾는 함수에 포스팅하겠다. np.where() - 1D [ 1D array 생성 ] 우선 0~100까지의 어레이를 구성하겠다. 사이즈는 10. import numpy as np random_num = np.random.randint(0,100,size=10) print(random_num) # array([84, 63, 80, 84, 90, 98, 15, 92, 5, 12]) [최댓값, 최솟값 출력] 예시로 넘파이 어레이의 최댓값과 최솟값의 인덱스를 찾기 위해 각 값들을 출력해보겠다. print(random_num.max(), random_num.min()) # 98 5 [np.where 사용] 이후 np.where()를 통해 각 값들이 random_num과 ..

[Python] SimpleITK - CT 영상 읽는법 [내부링크]

의료영상 중 대표격인 3D 영상을 읽는법에 대해 포스팅을 하고자한다. 보통 내가 써본 의료영상 처리 라이브러리는 pydicom 혹은 SimpleITK인데 경험상 3D 영상인 CT 혹은 MRI를 다룸에 있어 SimpleITK가 가장 유용했다. 본 포스팅도 SimpleITK를 활용해 CT영상을 읽어보고자 한다. SimpleITK를 통해 CT 영상 읽는법 [SimpleITK 라이브러리 선언] import SimpleITK as sitk [CT의 dcm series가 있는 경로 선언] ct_dir = './example_ct_data' [DICOM series의 파일이름 선언] series_ids = sitk.ImageSeriesReader.GetGDCMSeriesIDs(ct_dir) # DCM series의 ..