프로그래밍 Programming
리스프 리스트 데이터 타입 Common Lisp: LIST - the most versatile data type (3)
2017. 4. 24.Common Lisp: LIST - the most versatile data type (3) Designed by Freepik 1. 리스트 리스트 함수는 새로운 NIL로 끝나는 cons cell 체인을 만든다. CONS는새로운 단일의 cons cell 을 만든다는 것에 비추어보면, 두 번째 입력이 위치한 리스트에 첫 번째 입력을 더하는 것이다. 리스트 함수는 완전히 새로운 cons cell 체인을 만드는 것이다. 괄호 표기법으로 보자면, 그 결과 리스트 함수는 입력이 갖고 있는 것보다는 한 단계 더 많은 괄호를 가지게 된다. 1) 리스트는 새로운 3개의 cons cells을 할당한다. FOO BAR BAZ 2) CAR 포인터를 채운다. ● ● ● ↓ ↓ ↓ FOO BAR BAZ 3) CDR 포인터를 ..
LISP - CAR/CDR Pronunciation Guide
2017. 4. 24.Common Lisp: LIST - CAR/CDR Pronunciation Guide Designed by Freepik LISP - CAR/CDR Pronunciation Guide Function Pronunciation Alternate Name CAR kar FIRST CDR cou-der REST CAAR ka-ar CADR kae-der SECOND CDAR cou-dar CDDR cou-dih-der CAAAR ka-a-ar CAADR ka-ae-der CADAR ka-dar CADDR ka-dih-der THIRD CDAAR cou-da-ar CDADR cou-dae-der CDDAR cou-dih-dar CDDDR cou-did-dih-der CADDDR ka-dih-dih-der FOU..
리스프 리스트 데이터 타입 Common Lisp: LIST - the most versatile data type (2)
2017. 4. 24.Common Lisp: LIST - the most versatile data type (2) Designed by Freepik 1. CAR 과 CDRcons cell의 두 부분은 모호한 이름을 가지고 있는데, 좌측 절반은 CAR, 그리고 우측 절반은 CDR (‘‘cou-der,’’라고 발음한다) 라고 불린다. CAR 라는 명칭은 Contents of Address portion of Register를 의미하고, CDR은 Contents of Decrement portion of Register를 의미한다. 이런 용어가 현대 컴퓨터 하드웨어에는 적합하지는 않지만 Common Lisp 에서는 여전히 cons cells 을 언급할 때 CAR와 CDR이라는 축약어를 사용한다. 역사적인 이유도 있지만, 일부는..
리스프 리스트 데이터 타입 Common Lisp: LIST - the most versatile data type (1)
2017. 4. 22.Common Lisp: LIST - the most versatile data type (1) Designed by Freepik Lisp’라는 언어의 이름이 List Processor 에서 온 것처럼 리스트는 중심적인 데이터 타입으로, 다용도의 데이터 타입이다. 앞으로 몇 차례에 걸쳐 리스프의 리스트 데이터 타입에 대해 알아본다. 1. 리스트의 표현방식리스트는 출력형과 내부형 2가지 형태로 표현될 수 있다. 출력형에서 리스트는 괄호 안에 포함된 아이템의 묶음을 의미한다. 그리고 그 아이템은 리스트의 원소라고 부른다. 몇 가지 예를 살펴보면 다음과 같다. (RED GREEN BLUE) (AARDVARK) (2 3 5 7 11 13 17) (3 FRENCH HENS 2 TURTLE DOVES 1 PARTR..
OSError : setuptools pip wheel failed with error code 1
2017. 4. 14.Anaconda 환경에서 virtualenv 를 통해 가상환경 셋팅시 다음과 같은 오류가 발생하는 경우가 있다. OSError : setuptools pip wheel failed with error code 1 123456789101112131415161718192021222324252627# virtualenv envpokemongoNew python executable in /root/envpokemongo/bin/pythonInstalling setuptools, pip, wheel... Complete output from command /root/envpokemongo/bin/python - setuptools pip wheel: Traceback (most recent call last): ..
conda vs. pip vs. virtualenv
2017. 4. 13.conda vs. pip vs. virtualenv If you’ve used pip and virtualenv in the past, you can use conda to perform all of the same operations. Pip is a package manager, and Virtualenv is an environment manager. Conda is both. TaskConda package and environment manager commandPip package manager commandVirtualenv environment manager commandInstall a packageconda install $PACKAGE_NAMEpip install $PACKAGE_NAM..
장고 사이트에 reCAPTCHA 넣기 Add reCAPTCHA to Django site
2017. 4. 10.장고 사이트에 reCAPTCHA 넣기Add reCAPTCHA to Django site 각종 봇과 스팸으로부터 사이트를 보호하기 위해 구글의 reCATCHA 를 많이 사용하는데요. 본 포스팅에서는 장고로 만들어진 사이트에 이를 손쉽게 적용해보는 방법을 살펴겠습니다. 1. Requirements1) reCAPTCHA > Get reCAPTCHA 클릭하여 다음과 같이 키를 획득한다. 사이트 등록이 끝나면 2개의 키를 받게 되는데 Site key와 Secret key가 바로 그것이다. 여기서 Site key(사이트와 사용자간)는 원하는 페이지에 렌더링하기 위해 사용되고, Secret key(사이트와 구글간 통신)는 settings.py 모듈에 등록하여 구글과 사이트 간의 통신을 위해 사용된다. 2) setti..
Django와 Handsontable.js를 이용한 엑셀풍의 입력화면 만들기
2017. 3. 30.Django와 Handsontable.js를 이용한 엑셀풍의 입력화면 만들기 Django로 엑셀 풍의 입력 화면을 만들어보자. 이를 위해서 handsontable 을 이용한다. Handsontable은 엑셀의 외관을 가진 JavaScript/HTML5 스프레드시트 컴포넌트이다. 본 포스팅은 Hatena 블로거 thinkAmi님의 Django + Handsontable.jsを使って、Excel風な入力画面を作ってみた (http://thinkami.hatenablog.com/entry/2016/12/11/000415)을 참고로 작성되었다. https://github.com/handsontable/handsontable 1. 환경 본 포스팅의 환경은 다음과 같다. Ubuntu 14.04 + Python 3.5.2..
Handsontable 기본 사용법
2017. 3. 25.Handsontable 기본 사용법 https://github.com/handsontable/handsontable 1. Handsontable 이란 Handsontable은 웹브라우저상에서 엑셀과 같은 그리드를 구현해주는 자바스크립트 라이브러리이다. jQuery 등의 기타 라이브러리와 의존성을 가지지 않는다. 2. Handsontable Installation 다음과 같이 Handsontable 을 설치한다.1234567891011121314151617181920212223242526# npm install handsontable --savenpm http GET https://registry.npmjs.org/handsontablenpm http 200 https://registry.npmjs.org..
Django Channels로 채팅룸 만들기
2017. 2. 21.Django Channels로 채팅룸 만들기 먼저 아래 그림을 보자. 아래는 전형적인 requests와 responses의 도해이다. 브라우저는 request를 생성하고, Django는 브라우저로 돌려보낼 response를 담고 있는 view를 호출한다. 반면 Django Channels은 request/response cycle을 채널을 관통하는 메시지(message)라는 컨셉으로 대체한다. 채널은 Django로 하여금 전형적인 HTTP views 와 유사한 방식으로 웹소켓을 지원한다. HTTP request는 여전히 같은 방식으로 작동하지만 채널을 경유하게 된다. 결론적으로 Channels하에서 Django는 아래와 같은 구조를 띠게 된다. 1. Install Channels & Configure I..
PIP로 특정 버전 패키지 설치하는 법 To install a specific version of a package with pip
2017. 2. 20.최신 버전의 패키지가 아니라 특정 버전의 패키지까지만 지원하는 경우 등 이미 설치된 최신 버전을 제거하고 지원가능한 특정 버전 설치는 다음과 같이 한다. Use ==: 123456789101112# pip install twisted==16.2.0Collecting twisted==16.2.0 Downloading Twisted-16.2.0.tar.bz2 (2.9MB) 100% |████████████████████████████████| 2.9MB 100kB/sRequirement already satisfied: zope.interface>=4.0.2 in /root/anaconda/envs/envalicia/lib/python3.5/site-packages (from twisted==16.2.0)R..
pyhaikunator (Heroku like random name generator) 설치하기
2017. 2. 13.pyhaikunator (Heroku like random name generator) 설치하기 pyhaikunator 는 Heroku 타입의 랜덤 이름 생성기이다. 최신 버전은 0.0.4 이며, 설치 및 기본 사용법은 다음과 같다. pyhaikunator 설치 documentation https://pypi.python.org/pypi/pyhaikunator/0.0.1 12345# pip install pyhaikunatorCollecting pyhaikunator Downloading pyhaikunator-0.0.4-py2.py3-none-any.whlInstalling collected packages: pyhaikunatorSuccessfully installed pyhaikunator-0.0...
django 자동완성 구현하기 django-autocomplete-light
2016. 12. 26.django 자동완성 구현하기 django-autocomplete-light django-autocomplete-light 설치 documentation http://django-autocomplete-light.readthedocs.io/en/master/ 타이틀이나 태그 등 입력시 텍스트를 자동 완성해주는 django 패키지 django-autocomplete-light 3.2.1 를 설치해보자.DAL(django-autocomplete-light)는 Python 2.7, 3.4, Django 1.8+ 이상에서 작동하며, 태그입력시 적용할려면 django-taggit 이 먼저 설치되어 있어야 한다. 다음과 같이 설치한다.12345678910# pip install django-autocomplete-..
장고 내장 필터(소수점 표시) Built-in filter reference
2016. 12. 17.실수 표시 필터 인수없이 사용하는 경우 반올림하여 소수점 한자리까지 표시된다. 단, 소수파트가 0 인 경우 정수파트만 표시된다. 1234value Template Output34.23234 {{ value|floatformat }} 34.234.00000 {{ value|floatformat }} 3434.26000 {{ value|floatformat }} 34.3cs 정수가 인수로 사용된 경우 해당 소수점 자리수만큼 표시된다. 1234value Template Output34.23234 {{ value|floatformat:3 }} 34.23234.00000 {{ value|floatformat:3 }} 34.00034.26000 {{ value|floatformat:3 }} 34.260cs 특히 0..
Haystack 설치 및 실행하기 Getting Started with Haystack
2016. 12. 15.Haystack 설치 및 실행하기 Getting Started with Haystack 실습용으로 아래와 같이 간단한 노트 앱에 검색 기능을 붙여보자. myapp/models.py 1234567891011from django.contrib.auth.models import Userfrom django.db import models class Note(models.Model): userid = models.ForeignKey(User, related_name='user_note') pub_date = models.DateTimeField() title = models.CharField(max_length=200) body = models.TextField() def __unicode__(self): ret..
우분투에 엘라스틱서치 설치하기 How To Install and Configure Elasticsearch on Ubuntu 14.04
2016. 12. 6.우분투에 엘라스틱서치 설치하기How To Install and Configure Elasticsearch on Ubuntu 14.04 Prerequisites본 예제를 위해서는 아래의 2가지 사항이 준비되어 있어야 한다. A Ubuntu 14.04 Droplet A non-root sudo user 12root@localhost:~# cut -d: -f1 /etc/passwdroot@localhost:~# adduser elasticcs Installing JAVA 1. Installing OpenJDK 1) update the list of available packages 2) install OpenJDK 3) To verify your JRE is installed 123456root@localho..
비지도 학습 (2) - k평균으로 손글씨 숫자 군집화
2016. 12. 3.비지도 학습 (2) - k평균으로 손글씨 숫자 군집화 k 평균 k평균은 데이터 점을 뚜렷한 그룹인 군집으로 분할하는 분할 알고리즘에 속한다. k평균의 주요개념은 군집 내 평균과 군집내 점들의 제곱 거리를 최소로 만들기 위해 각 점들의 군집을 찾는 것이다. 이 기법은 나누고자 하는 군집의 개수를 미리 알고 있다고 가정한다. 123456789101112131415161718192021>>> %matplotlib inline>>> >>> import numpy as np>>> import matplotlib.pyplot as plt>>> >>> from sklearn.datasets import load_digits>>> from sklearn.preprocessing import scale>>> digits..
비지도 학습 (1) - 주성분 분석(Principal Component Analysis, PCA)
2016. 12. 2.비지도 학습 (1) - 주성분 분석(Principal Component Analysis, PCA) 주성분 분석(Principal Component Analysis, PCA) 주성분 분석은 상관된 변수의 집합을 가능한 한 상관되지 않는 변수의 집합으로 변환하는 직교 선형 변환이다. 주성분 분석은 데이터를 한개의 축으로 사상시켰을 때 그 분산이 가장 커지는 축을 첫 번째 주성분, 두 번째로 커지는 축을 두 번째 주성분으로 놓이도록 새로운 좌표계로 데이터를 선형 변환한다. 이와 같이 표본의 차이를 가장 잘 나타내는 성분들로 분해함으로써 여러가지 응용이 가능하다. 이 변환은 첫째 주성분이 가장 큰 분산을 가지고, 이후의 주성분들은 이전의 주성분들과 직교한다는 제약 아래에 가장 큰 분산을 갖고 있다는 식으로 정의..
결정트리와 타이타닉 가설 설명 (3) - 회귀를 이용한 예측
2016. 11. 25.결정트리와 타이타닉 가설 설명 (3) - 회귀를 이용한 예측 회귀로 주택 가격 예측 현재까지 예측하고자하는 결과는 이산 집합에 속했다. 하지만 실수 값을 예측해야하는 경우도 있다. 학습하는 방법은 같다. 다만 리스트에서 범주를 선택하는 대신에 분류기는 속성 학습의 조합 각각에 대해 실수를 반환하는 함수처럼 행동한다. 목적범주가 무한수인 분류기로서 회귀 문제를 생각할 수 있다.많은 문제는 목적으로 선택하는 범주에 따라 분류와 회귀 태스크 둘 다로서 모델화될 수 있다. 예를 들어, 혈당 레벨의 예측은 회귀 태스크 뿐만 아니라 누군가가 당뇨병이 있는지 없는지 예측하는 분류 태스크도 되는 것이다. 그러면 속성의 함수로서 주택 가격을 예측해보자. 보스턴의 주택 가격에 대한 데이터셋으로, 13개의 속성과 하나의 목..
결정트리와 타이타닉 가설 설명 (2) - 결정트리 분류기 훈련
2016. 11. 24.결정트리와 타이타닉 가설 설명 (2) - 결정트리 분류기 훈련 결정트리 분류기 훈련 먼저 훈련과 테스트 데이터를 분리한다.12>>> from sklearn.cross_validation import train_test_split>>> X_train, X_test, y_train, y_test = train_test_split(titanic_X, titanic_y, test_size=0.25, random_state=33)csDecisionTreeClassifier 를 만들고 학습을 수행하기 위해 분류기의 fit 메소드를 사용한다. 123>>> from sklearn import tree>>> clf = tree.DecisionTreeClassifier(criterion='entropy', max_dept..
list object has no attribute write_png
2016. 11. 22.pydot, graphviz 사용시 아래와 같은 에러가 발생하는 경우 AttributeError : 'list' object has no attribute 'write_png' 123456789101112131415161718192021222324>>> import pydot,StringIO>>> >>> dot_data = StringIO.StringIO() >>> >>> tree.export_graphviz(clf, out_file=dot_data,feature_names=['age','sex','1st_class','2nd_class','3rd_class']) >>> >>> graph = pydot.graph_from_dot_data(dot_data.getvalue()) >>> >>> graph.wr..
결정트리와 타이타닉 가설 설명 (1) - 데이터 전처리
2016. 11. 22.결정트리와 타이타닉 가설 설명 (1) - 데이터 전처리 결정트리는 매우 간단하지만 강력한 지도학습기법이다. 이 모델의 중요한 장점은 사람이 쉽게 이해할 수 있고, 새로운 인스턴스의 목적 범주를 이해하기 위해 결정트리를 따라 결정한다는 것이다. 훈련데이터가 무엇을 제시하느냐보다 결정의 이유를 보여주길 원하는 카드 승인이나 의료 진찰과 같은 태스크에 매우 유용하다. 해결하고자하는 문제는 탑승객의 나이, 선실 등급, 성별을 고려하여 타이타닉호의 탑승객이 생존했는지를 결정하는 것이다. 데이터는 아래 링크에서 다운로드할 수 있다. http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt데이터셋의 각 인스턴스는 다음과 같은 형태를 갖는다. 123456..
Numpy로 수치계산하기 (3)
2016. 11. 19.Numpy로 수치계산하기 (3) NumPy 로 밀도지도 그리기 하루 중 특정 시간대의 승하차 위치에 대한 2D 밀도 지도를 계산하고 그려보자. 먼저, 택시 운행을 선택해보자. 데이터셋에서 저녁 운행수는 242,818건이다. 12345>>> evening = (data.pickup_datetime.dt.hour >= 19).values>>> n = np.sum(evening)>>> n 242818Colored by Color Scriptercs 밀도 지도를 그리는 방법은 다음과 같다. 먼저 저녁 운행수 n 에 대한 모든 승하차 위치를 생각해본다. 이러한 위치에 대한 2n 을 만든다. 모든 위치에서 승차는 -1 의 가중치를, 하차는 +1 의 가중치를 부여한다. 주어진 위치에서 산술 밀도는 이 위치에서 출발하..
Numpy로 수치계산하기 (2)
2016. 11. 19.Numpy로 수치계산하기 (2) 기본 배열 조작 먼저 1부터 10까지의 정수 배열을 만든다.1234567>>> import numpy as np>>> >>> x = np.arange(1, 11)>>> >>> x array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])cs 조작 테이블을 만들기 위해 먼저 x 를 행과 열로 변환하자. x 는 1D 배열이지만 행과 열 벡터는 2D 배열(매트릭스)이다. 1) reshape( ) 를 이용한 방법12345>>> x_row = x.reshape((1, -1))>>> >>> x_row>>>array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]])csreshape( ) 메소드는 파라메터로 새 크기를 받는다. 원소의 총 개수는 그대로 유지해야..
Numpy로 수치계산하기 (1)
2016. 11. 18.Numpy로 수치계산하기 (1) ndarray 일반적으로 n 차원 배열을 ndarray 라고 말하며, n 차원 매트릭스다. 모든 수를 인덱스로 식별한다. ndarray는 기본적으로 다음으로 정의된다. 차원수 dimensions 세이프 shape 스트라이드 stride데이터 타입 data type실제 데이터배열에서 모든 원소는 같은 데이터 타입(homogeneously typed)을 가져야한다. 순수 파이썬과 NumPy 계산비교 1,000,000개의 무작위 원소를 갖는 두 벡터를 만들어, NumPy의 계산속도가 순수 파이썬 코드에 비해 얼마나 더 빠르지 확인해보자.먼저 순수 파이썬 코드로 278ms 가 소요되었다. 123456789101112>>> from random import random>>> lis..
텍스트 분류를 위한 나이브 베이즈 (2) - 분류기 훈련 및 성능평가
2016. 11. 15.텍스트 분류를 위한 나이브 베이즈 (2) - 분류기 훈련 및 성능평가 나이브 베이즈 분류기 훈련 sklearn.naive_bayes 모듈의 MultinomialNB 클래스와 3개의 벡터라이저를 각각 복합해 서로 다른 3개의 분류기를 만들고 기본 매개변수를 사용해 어떤 것이 더 낫게 수행하는지 비교한다. 123456789101112131415161718>>> from sklearn.naive_bayes import MultinomialNB>>> from sklearn.pipeline import Pipeline>>> from sklearn.feature_extraction.text import TfidfVectorizer, >>> HashingVectorizer, CountVectorizer>>>>>> c..
우분투에 스칼라 설치하기 Install Scala on Ubuntu 14.04
2016. 11. 14.1. Java JDK 설치1# conda install -c cyclus java-jdk=8.45.14cs 2. 스칼라 설치 및 실행1# conda install -c anaconda-cluster scala=2.11.1cs Hello, World! 실행12345678910# scala Setting up SCALA_HOME for scala to /root/anaconda/envs/tensorflow/share/scala-2.11.1 ...Launching scala Welcome to Scala version 2.11.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45).Type in expressions to have them evaluated.Type :h..
텍스트 분류를 위한 나이브 베이즈 (1) - 데이터 전처리
2016. 11. 12.텍스트 분류를 위한 나이브 베이즈 (1) - 데이터 전처리 나이브 베이즈를 통한 텍스트 분류 범주를 가진 텍스트 문서가 있고, 보지 못한 새로운 인스턴스의 범주를 예측하도록 나이브 베이즈 알고리즘을 훈련시킨다.사이킷런에서 구할 수 있는 데이터셋을 사용하여 20개의 다른 주제로 19,000개 뉴스 그룹 메시지를 분류한다. 1) 데이터셋 가져오기학습에 필요한 데이터를 가져온다. 12345678910>>> %pylab inline>>> >>> import logging>>> logging.basicConfig()>>> >>> from sklearn.datasets import fetch_20newsgroups>>> >>> news = fetch_20newsgroups(subset='all')>>> Popul..
ImportError: The pandas.io.data module is moved to a separate package (pandas-datareader)
2016. 11. 12.ImportError: The pandas.io.data module is moved to a separate package (pandas-datareader) 1234567891011121314151617#-*- coding: utf-8 -*- import pandas as pdimport pandas.io.data as webimport datetime def download_stock_data(file_name, company_code, year1, month1, date1, year2, month2, date2): start = datetime.datetime(year1, month1, date1) end = datetime.datetime(year2, month2, date2) df = web...
서포터 벡터 머신과 이미지 인식 (4) - 서포트 벡터 머신 훈련 (2)
2016. 11. 6.서포터 벡터 머신과 이미지 인식 (4) - 서포트 벡터 머신 훈련 (2) 서포트 벡터 머신 훈련 논의를 확장시켜 이제 안경을 쓴 사람과 그렇지 않은 사람으로 얼굴을 분류해보자. 먼저 해야할 것은 안경을 쓴 사람의 이미지의 범위를 정의하는 것이다. 다음 리스트는 안경을 쓴 사람의 색인이다. 12345678>>> # the index ranges of images of people with glasses>>> glasses = [ (10, 19), (30, 32), (37, 38), (50, 59), (63, 64), (69, 69), (120, 121), (124, 129), (130, 139), (160, 161), (164, 169), (180, 182), (185, 185), (189, 189), (..