scrapy는 웹사이트에서 필요한 데이터를 추출하는 오픈소스 프레임워크입니다. 네, 많고 많은 crawler 중에 하나입니다. 혹시 듣보잡 아니냐고요? 네, 뭐 구글 트렌드로 다른 크롤러와 비교해보면 크게 뒤떨어지는 건 사실입니다. (지난 5년간 대한민국 기준 트렌드 자료입니다. 파란색이 selenium, 노란색이 beautifulsoup, 빨간색이 scrapy) GitHub에 Star를 인기의 척도라고 본다면 scrapy는 상당히 인기 있는 프레임워크로 볼 수 있습니다. 이 말인즉, 개발자에게는 꽤나 인기 있는 크롤러라는 겁니다. 아래를 보세요. 스타 수가 무려 41.1k 개고 아직도 활발히 개발되고 있습니다. scrapy는 가볍고, 빠르고, 확장성이 좋습니다. 개발자는 파이썬 기반으로 spider라고..
SQLAlchemy는 애플리케이션 개발자에게 SQL의 모든 기능과 유연성을 제공하는 Python SQL 툴킷 및 객체 관계형 매퍼입니다 (공식 홈페이지 소개 문구). 모든 데이터베이스 객체를 다룰 때 신경 써야 하는 부분이 트랜잭션(Transaction)인데 SQLAlchemy도 예외는 아닙니다. 공식 홈페이지의 예제를 통해 기본적인 트랜잭션 관리를 살펴봅시다. from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker # an Engine, which the Session will use for connection # resources engine = create_engine('postgresql://scott:tiger@l..
프로그래밍을 하다 보면 필연적으로 메모리 사용량을 디버깅해야 하는 일이 생깁니다. 메모리 누수가 발생해서 디버깅을 해야 하는 경우도 있고 메모리 사용량이 비정상인 경우도 디버깅이 필요해요. 일부 언어는 힙 메모리 공간을 통째로 덤프 떠서 확인하는 일도 비일비재하죠. 이번 글에서는 파이썬 프로그램을 개발하면서 메모리 사용량을 추적하는 방법을 알아봅니다. 거창하게 시작했지만 파이썬에서 메모리 추적은 psutil 이 대표적입니다. 일단 사용 방법부터 바로 알아보고 조금 더 상세한 이야기를 해봅니다. 사용법은 심플합니다. 다음 공식 예제를 살펴보시죠. >>> import psutil >>> p = psutil.Process() >>> p.memory_info() pmem(rss=15491072, vms=8402..
Poetry는 "Python dependency management and packaging made easy."라는 모토로 움직이는 파이썬 의존성 관리 프로그램이다. conda, pyenv 등이 설치되어 있다고 가정했을 때 poetry의 위치는 아래 그림과 같다. 글의 전반에 걸쳐 이야기하겠지만 poetry는 가상환경을 만들 때 현재 시스템에 적용되어 있는 환경을 가져다 사용한다. 즉, conda 3.7 환경에서 poetry를 돌리면 파이썬 3.7 버전으로 가상환경이 만들어질 것이고, pyenv 3.9가 적용되어 있는 터미널에서 poetry로 install 하면 파이썬 3.9 버전으로 가상환경이 만들어진다. - see more # 주요 특징 - pip를 감추고 패키지와 디펜던시를 관리 함 ( 내부적으로..
파이썬은 인공지능, 빅데이터 분석/처리 트렌드와 함께 엄청난 인기를 얻었다. 전부터 마니아층이 두꺼웠지만, 본격적인 인기는 두 개의 트렌드와 함께했다. 파이썬이 없었다면 이 모든게 가능했을까 싶은 정도니까. 하지만 백엔드 개발 분야는 Spring Framework의 아성에 도전할 수 없을 정도로 레퍼런스가 밀리는 게 현실이고 Node.js, Go는 뛰어난 성능을 무기로 파이썬을 위협한다. "파이썬? 인공지능이나 데이터 분석할 때 적합하지! 백엔드? 글쎄....?" 그렇게 파이썬의 백엔드 겨울이 계속되던 중에 FastAPI가 등장했다. FastAPI는 파이썬으로 API를 빌드하기 위한 web framework이다. 공식 블로그에 안내된 fastapi의 장점 중에 현실로 와닿는 부분은 아래와 같다. - No..
librosa를 이용해서 load, write 하는 방법은 아래처럼 간단합니다. from librosa.core import load from librosa.output import write_wav y, sr = load('/tmp/test.wav', sr=44100) write_wav('/tmp/new.wav', y, sr) 그런데 write_wav() 하는 과정에서 에러가 발생하는 경우가 있는데요. librosa.util.exceptions.ParameterError: data must be floating-point 원본 파일에 따라 에러가 발생되는 경우가 있는 것 같습니다. 일단 상세한 원인은 librosa쪽 코드를 열어봐야겠지만 가장 간단한 해결방법은 librosa를 다시 설치하는 겁니다. 기..
이전 편 : 다시쓰는 Flask unittest (상편) 앞서 우리는 Flask의 기본 예제코드를 pytest를 통해 테스트해봤습니다. 몇 몇 분들은 아마 눈치를 채셨을지 모르겠지만 사실 앞에서 테스트한 내용은 함수 단위의 테스트지 실제 Flask 서버와 무관합니다. /hello, /world 와 같은 API를 테스트한다고는 했지만 사실상 hello(), world() 함수를 호출하고 끝냈으니까요. 이번에는 조금 더 현실적인 Flask 코드를 놓고 unittest를 진행하는 방법에 대해서 알아보도록 하겠습니다. 일단 아래처럼 미리 준비된 코드를 가져와봤습니다. #!/usr/bin/env python # coding=utf8 # content of my_flask.py # Restful API from f..
우리가 개발한 프로그램을 테스트하는 방법론이 여러가지 나오고 있는데 이번에는 그 기본이 되는 unittest를 flask와 연계해서 알아보고자 합니다. 인터넷에 flask와 unittest로 검색해보면 Flask 공식 홈페이지를 포함해서 여러자료가 리스트 되지만 대부분 공식 홈페이지의 예제를 그대로 참고한 것으로 이해하기에 난해한 부분이 있습니다. 그래서 굳이 넘쳐나는 자료들 속에 다시 키보드를 잡아들었습니다. 아무튼 이번 글이 누군가에게 현실적인 도움이 되기를 바랍니다. Flask 코드 작성 우선 unittest를 위해 아래와 같은 코드를 작성해보도록 합시다. # contents of my_flask.py from flask import Flask app = Flask(__name__) @app.rou..
python에 librosa를 통해 오디오 파일을 numpy로 읽어오는 코드가 아래와 같이 작성되어 있습니다. import librosa wave_path = '/home/caley/test.wav' sr = 44100 try: wav_np = librosa.core.load(wave_path, sr=sr)[0] except FileNotFoundError as e: print(e) wave_path에 test.wav는 실제로 존재하는 파일이지만 웬일인지 librosa는 에러를 발생시킵니다. FileNotFoundError: [Errno 2] No such file or directory: 'avconv': 'avconv' 이유는 librosa가 내부적으로 사용..
한글 자소분리를 처리하기 위해서는 Unicode에 대한 이해가 필요합니다. 우선 위키피디아에 정의되어 있는 한글 음절에 대해 살펴보도록 하시죠. https://ko.wikipedia.org/wiki/한글_음절 우선 여기서 잘 확인하고 넘어가야 하는 부분이 초성, 중성, 종성을 이루는 문자들과 그 개수입니다. 초성 : ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ (19개) 중성 : ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ (21개) 종성 : ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ (28개) 종성의 경우에는 종성이 없는 경우를 위해서 빈 문자도 포함해서 28로 취급합니다. 예를들면 "가", "우", "소" 등이 종성이 없는 경우가 있겠죠. 또한 위 링크에서 확인한 한글문자코드의 범위는 0xAC00(가) ~ ..
이미 잘 구현되어 있는 소스코드와 데이터를 사용한 머신러닝의 경우에는 모델 내에 shuffle 자체가 구축되어 있는 반면에 데이터 수집과 정제, 모델 구축까지 밑바닥에서부터 쌓아 올리다보면 여러가지 난관에 봉착하게 된다. python 을 친숙하게 다루는 사람이라면 데이터를 다루는데 어려움이 없겠으나 수학적 지식이나 모델링쪽만 전문으로 했던 사람에게는 shuffle 자체도 쉬운게 아닐 것이다. random.shuffle 예제를 살펴보면 대부분 1차원 array 를 섞는것 뿐이라 우리의 (x, y) 데이터 쌍에서는 일반적인 방식으로는 사용할 수 없다. 여기서는 이런 상황에서 데이터셋을 shuffle 하는 방법 하나를 제시한다.예를들어 손글씨 인식을 할 때 사용하는 대표적인 MNIST 의 데이터를 우리가 직접..
>>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explic..
https://conda.io/en/master/ python 을 가상환경으로 사용할 수 있도록 지원하는 프로젝트중 하나인 conda 를 실무에서 빠르게 사용 할 수 있도록 살펴보도록 합니다. ( 또 다른 가상환경 프로젝트인 virtualenv 는 이쪽을 참고하세요 ) 우선 우리가 사용하는 OS 에 맞게 다음 링크에서 아나콘다를 다운로드 받도록 합니다 https://www.anaconda.com/download/ 설치가 끝나면 터미널에서 conda 명령어를 통해서 모든 조작이 가능한데 필수적인 옵션을 하나씩 살펴보도록 합시다. ( 실행 화면 등이 포함되어 있기 때문에 PC 버전에서 최적화 되어 있습니다 ) # 버전 확인 : 사용하고 있는 conda 패키지의 버전을 확인한다.$ conda --version..
python 에는 다차원 배열을 다루는 numpy 라는 유용한 라이브러리가 있는데 여러 분야에서 강력하게 사용될 수 있으므로 사용법을 익혀두도록 한다. 특히 머신러닝의 연산과정을 이해하기 위해서는 필수라고 할 수 있겠다. 이번 포스팅은 실습코드가 많기 때문에 특별히 Jupyter notebook 을 통해 내용을 기록하도록 한다. numpy 모듈 사용¶우선 실습(혹은 사용)을 위해 numpy 를 import 하도록 한다. 설치되어 있지 않다면 주석처럼 설치하면 된다. In [1]: # pip install numpy import numpy as np numpy 모듈을 불러와서 앞으로 np 라는 이름으로 alias 하겠다는 의미 정도로 생각하면 좋다. numpy 배열의 생성과 이해¶ In [2]: arr =..
python 이 매력적인 (많고 많은) 이유 중에 여기서 두 가지 뽑자면,◎ 하나의 머신에서 독립적인 가상환경 (여러가지 방법으로) 구축이 쉽다. ◎ 웹에서 강력한 인터프리터 IDE (jupyter notebook)를 사용할 수 있다.우선 첫 번째 언급 된것 처럼 우리는 하나의 머신(PC, 서버, 클라우드 등)에서 로컬 환경을 더럽히지 않고 독립된 가상공간을 만들어 python 프로젝트를 운영할 수 있다. 이 말의 뜻은, 흡사 virtualbox 처럼 hostOS 위에 가상의 VM 을 올려서 독립적으로 운영하는 것과 유사한 개념으로 볼 수 있다. hostOS 위에 올라간 VM 은 서로 간섭 없이 운영될 수 있다. 즉, 두 개의 VM 에 각각 설치된 모듈이나 라이브러리는 다른 VM 에 영향을 주지 않는다 ..
공공데이터 포털에 가면 OPEN API 를 다양하게 제공하는데 날씨에 대한 정보도 쉽게 찾아볼 수 있다. 잘만 활용하면 윤택한 생활이 보장되는데 이번에는 기상청에서 제공하는 날씨 API 를 슬랙과 연동해보았다.이전에 미세먼지 API 에 대해서 살펴보았는데 방법은 크게 다르지 않다. REST API 를 연동해서 필요한 정보를 우선 얻어야 하는데 당장은 기온(T1H) 와 하늘상태(SKY) 만 가져왔다.{u'category': u'LGT', u'baseTime': 1400, u'nx': 61, u'ny': 125, u'obsrValue': 0, u'baseDate': 20170614}{u'category': u'PTY', u'baseTime': 1400, u'nx': 61, u'ny': 125, u'obsrV..
pip로 설치된 package 목록을 보기 위해서는 pip에 freeze 옵션을 사용합니다. freeze에 대한 옵션 설명은 아래와 같습니다.freeze Output installed packages in requirements format. 실제로 사용해보면 아래와 같이 설치된 package 리스트를 볼 수 있습니다. 친절하게 버전까지 출력이 되네요. 특정 package에 대한 보다 자세한 정보를 얻기 위해서는 pip에 show 옵션을 사용합니다.show에 대한 옵션 설명은 아래와 같습니다.Show information about installed packages. 사용해보면 버전정보 뿐만아니라 기타 유용한 정보도 함께 출력됩니다. 특히 Requires가 인상적이네요.
virtualenv로 프로젝트 환경(tensorflow)을 구축했는데 pycharm에서 동작시키는 방법을 몰랐다. 처음에는 그냥 터미널 vim에서 코딩하려했으나.. 역시 프로젝트 규모가 커지면서 한계가 있더라. 일단 python 언어 자체가 vim에 최적화된 언어는 아니니까. 그래서 결국 pycharm-community를 설치하고 virtualenv로 구축한 환경을 연동 시켜봤다. 핵심은 프로젝트의 인터프리터(Interpreter)를 virtualenv에 있는 python으로 지정하는 것이다. 우선 Settings을 열면 아래와 같은 화면이 보인다. 메뉴 중 Project Interpreter를 선택하고 우측에 보이는 톱니바퀴를 클릭한다. 다시 우측에 플러스(+) 버튼을 누르면 인터프리터를 추가할 수 있..
협업툴로 굉장히 명성높은 슬랙에 보면 봇이 존재한다. 기본적으로 협업 공간을 생성하면 SlackBot 이라는 놈이 있는데, 이 SlackBot은 슬랙을 사용하는데 미비한 도움을 주는 .. 그다지 스마트 하지 못한 헬퍼 봇이다. (하물며 영어로 말한다. 당연한건가?) 하지만 슬랙이 명성 높은데는 다 이유가 있다. 다른 APP들과 연동이 쉽고 많은 API를 제공하기 때문인데 그 중에 Bot을 생성할 수 있도록 도와주는 BOT API도 있다. 그렇다면 우리 기호에 맞도록 헬포봇을 만들어보자. 우선 아래 링크를 통해 봇을 생성할 수 있는 페이지로 이동한다.https://api.slack.com/bot-users 그리고 아래 화면에서 "creating a new bot user" 를 선택하도록 한다. 브라우저에 ..
요즘 주식에 관심이 생겨서 소소하게 참여하고 있는데, 소액임에도 불구하고 은근히 신경쓰여서 계속 모니터링 하게 된다. 잠깐잠깐 보는 것 조차 시간이 아깝게 느껴지는 시기가 올 때 쯤... 평소 개발을 터미널 환경에서 하고 있었기 때문에 모니터링 할 수 있는 커맨드를 만들게 됐다. 뭐 사실 겸사겸사 python 공부도 하고 말이다. #!/usr/bin/env python #-*- coding: utf-8 -*- import sys try: import requests from bs4 import BeautifulSoup except ImportError: print("Please install requests, BeautifulSoup.") def usage(): print "Usage: %s code" ..
- Total
- Today
- Yesterday