python split-folders로 이미지 데이터 분리하기 (train/val/test)

이미지 데이터셋은 보통 한 폴더 안에 몽땅 담겨 있습니다. 딥러닝 네트워크를 학습하고 평가 및 검증하기 위해선 이 데이터를 분리해야 하는데요. 그럴 때 유용한 python 라이브러리가 있습니다. 바로 split-folders입니다. pip install split-folders pip install split-folders[full] # progress bar를 보고 싶을때 사용법은 간단합니다. split-folders를 적용하기전 데이터의 디렉터리 구조는 다음과 같아야 합니다. input/ class1/ img1.jpg img2.jpg ... class2/ imgWhatever.jpg ... ... split-folders에는 데이터를 나누기 위한 방법이 두 가지 있습니다. 1. 비율로 나누기 impo..

TPOT을 이용한 머신러닝 자동화 (AutoML with python), 파라미터 튜닝까지

최근 들어 automl 패키지를 사용해보면서 편리함을 많이 느끼고 있습니다. tpot, autokeras, auto-sklearn, nni 등 다양한 automl 패키지들이 개발되고 있는데요. 본 게시물에서는 github star 기준으로 3위에 머무르고 있는 TPOT에 대해서 적어보고자 합니다. TPOT 소개 TPOT은 딥러닝 모델보단 트리 기반 모델 혹은 회귀 모델에 특화되어있습니다. 물론 특정 configuration을 지정해줌으로써 딥러닝 학습도 가능합니다. Windows 운영체제에서 사용할 수 있는 가장 간단하고 성능 좋은 automl 패키지라고 생각합니다. TPOT은 수천개에 달하는 pipeline을 탐색해서 최적의 성능을 내는 모델을 찾습니다. 심지어 최적의 모델을 짤 수 있는 코드도 짜줍니..

python joblib으로 병렬 프로그래밍을 해보자

효율적인 프로그래밍을 위해 병렬 프로그래밍을 하곤 합니다. 특히 대용량의 데이터을 처리할 때 필수적이죠. joblib은 파이썬 프로그래밍에서 병렬처리를 가능하게 만들어줍니다. 파이썬에는 병렬 연산을 위한 디폴트 패키지로 multiprocessing이 있습니다. multiprocessing은 pandas의 DataFrame을 다루는 데에 유용하며, joblib은 일반적인 python 코딩에 두루두루 쓰입니다. joblib의 dump, load 메소드는 python 객체를 저장하거나 불러오게끔 할 수 있기에, 머신러닝 프로젝트에서 모델을 저장하기에 유용하게 쓰이지만, 본 게시물에서는 병렬 처리를 도와주는 joblib의 Parallel, delayed에 대한 설명을 하겠습니다. 😁 설치 pip install ..

python *args **kwargs 차이

python 함수에 인자를 넣는 방법에는 단순한 방법도 있지만, *args와 **kwargs를 활용할 수도 있습니다. *args *args는 동시에 여러 입력값을 주고 싶을 때 사용합니다. 사실 * 다음에오는 args가 아니어도, elements, argument, ggggg, ksdfkjasdlfkja 등 원하는 변수를 사용하면 됩니다. **kwargs도 마찬가지입니다. *args를 사용하면 함수 내에서 tuple처럼 사용 가능합니다. 입력값을 굳이 list나 tuple로 주지 않아도 됩니다. **kwargs keyword arguments로 생각하시면 됩니다. *args에서 더 나아가 입력값의 키워드를 함께 줄 때 사용합니다. **kwargs를 이용하면 특정 조건에 따라 다른 동작을 하도록 코드를 짤..

Python 데이터의 요소 카운트하기 (Counter)

코딩이나 데이터 분석을 하다 보면 가지고 있는 데이터에 각 요소가 얼마큼 들어있는지 확인해야하는 상황이 생깁니다. list1 = ['참치', '참치', '고등어', '육개장', '육개장', '오징어', '육개장'] list2 = ['팔보채', '육개장', '라면', '라면', '고등어', '고등어', '고등어'] text = """ 공매도 세력 공격까지 받는 카카오. 16일 카카오 주가는 전날보다 0.82% 하락한 12만1500원에 마감했지만, 네이버는 오히려 0.37% 오른 40만2000원으로 거래를 마쳤다. 규제 문제가 발생되기 직전인 지난 7일부터 16일까지 네이버의 시가총액은 73조150억원에서 66조339억원으로 10%(6조9811억원) 감소한 반면, 카카오는 68조4848억원에서 54조665억..

pandas dataframe에서 apply의 진척도 보기 (progress_apply())

저는 코딩할 때 웬만하면 tqdm 패키지로 진척도를 확인합니다. 그래야 마음이 편하거든요.😁 dataframe을 다루다 보면 전처리를 할 때 시간이 오래 걸리는 경우가 있습니다. 저는 apply 메소드를 자주 쓰는 편인데 그때마다 진척도가 보이지 않아 한없이 기다려야 했죠. 그러다 언젠가 해결방법을 찾았습니다. 사용법도 너무 쉬워서 앞으로는 자주 쓰게 될 것 같아요. 바로 tqdm을 이용해 apply의 progress bar가 보이게 설정할 수 있었습니다! 우선 필요한 패키지를 import 합니다. import pandas as pd from tqdm import tqdm tqdm.pandas() # tqdm의 pandas전용 메소드를 호출합니다. 저는 제가 가지고 있는 뉴스 데이터를 활용해보겠습니다. ..

2021 신한금융투자 데이터사이언스팀 인턴 후기

2021년 7월 6일부터 시작된 신한금융투자 데이터사이언스팀 인턴생활이 약 2개월간의 과정을 거쳐 마무리되었습니다. 첫 인턴 활동이라 매 출근 시간마다 설렜고, 좋은 인턴 동기들과 선임분들을 만나 많은 것을 배울 수 있었습니다. 인턴 생활을 되돌아보며 그동안 어떤 과정을 거쳐왔는지 글로 남겨보려 합니다. 지원부터 합격까지 한창 졸업을 앞두고 있을 무렵, 신한금융투자의 인턴 공고를 발견했습니다. 2개월간의 짧은 근무기간이고, 자격이나 필요 역량도 모두 만족하는 것 같아 지원했습니다. 전형은 서류전형, 면접전형 2가지 밖에 없었기에 '한번 써볼까?'라는 생각으로 지원했습니다. 그런데 됐습니다. 면접은 신한금융투자 본사에서 진행됐습니다. 더운 날씨였지만 금융권이라는 인식에 얼마전에 맞춘 정장을 쫙 빼입고 면접..

2021 한국IT서비스학회 춘계학술대회 참가 후기

참가 계기 작년도 캡스톤디자인 프로젝트로 진행했던 한국 ETF 시각화 플랫폼으로 어떻게 논문을 쓸까 고민하다가, 문득 학술대회를 출품해보면 어떻겠냐는 교수님의 조언에 참가하게 되었습니다. 교수님은 한국정보과학회(KCC)의 대학생 학술대회를 권유했지만, 제가 찾은 한국IT서비스학회 춘계학술대회가 더 신청기간이 빨랐고 심지어 대학생 대상이 아닌 전체 대상이었기에 신청 과정에서 떨어질 것을 예상했습니다. 결과를 확인하고 KCC 학회에 출품할 생각이었습니다. 그러나 바로 붙어버렸습니다. 덕분에 남들보다 빠르게 졸업논문을 준비하게 되었고, 본 학술대회가 논문뿐만 아니라 PPT형태의 자료도 제출이 가능했습니다. 제 프로젝트는 이론적 배경이 담긴 연구라기보단 practical한 개발 프로젝트였기 때문에 논문 형태가 ..

한국 ETF 시각화 플랫폼 개발

캡스톤디자인 프로젝트로 '한국 ETF 시각화 플랫폼'을 개발하고 있습니다. 2020년 코로나19의 확산과 제로 금리 시대가 도래하면서 주식과 증권시장에 대한 관심이 어마어마하게 커졌습니다. 저 또한 그런 시장에 관심을 가지기 시작했고, 그 중 ETF라는 상품에 관심을 가지게되어 작년 여름부터 프로젝트를 시작했습니다. ETF는 Exchange Traded Fund의 줄임말로, 거래소에 거래되는 펀드를 말합니다. 즉, 펀드처럼 운용사에서 관리를 하지만 주식을 사고팔듯이 사고팔수 있죠. 저는 '핀트'라는 앱을 통해 처음 경험해보았고 지금은 직접 거래하고 있습니다. 2020.08.23 - [Diary - IT] - 핀트(FINT) 투자 시작했습니다. 그리고 그만뒀습니다. (ETF투자/후기) 국내 ETF 시장은 ..

[pymysql] InternalError: 1366, "Incorrect String Value" 해결하기

pymysql 패키지를 이용해 파이썬과 mysql간의 데이터 저장을 할 때, 데이터에 한글이나 특수문자, 이모티콘 등이 포함되어있으면 다음 에러가 발생할 수 있습니다. ERROR pymysql.err.InternalError: (1366, "Incorrect string value: '\xF3\xB0\x8B\xAF\xEA\xB8..' for column [칼럼명] at row 1") 이는 mysql의 utf-8 문자셋이 4바이트를 차지하는 심볼은 지원하지 않기 때문입니다. 이를 해결하기 위해 해당 데이터베이스의 인코딩 방식을 변경해줍니다. Solution ALTER DATABASE [DB명] CHARACTER SET = utf8mb4 COLLATE = utf8mb4; ALTER TABLE [column명..