본문 바로가기

Programming

집단지성 프로그래밍 3(Term Vector) 이 글은 토비 세가란 저, 윤종완 역의 집단지성 프로그래밍 책을 읽으며 개인적으로 공부하며 정리한 내용이다. 이전 글 목록 집단지성 프로그래밍 1(Machine Learning, Euclidean Distance, Pearson Correlation Coefficient) 집단지성 프로그래밍 2(Recommendations) 이전 글에서는 서로 관련된 사물들을 발견하는 방법에 대해 정리하였고, 이전의 방법을 통해 같은 영화 취향을 가진 다른 사람을 찾을 수 있었다. 이번에는 데이터 군집(Data Clustering)에 대해 설명을 한다. Data Clustering은 밀접히 관련된 사물, 사람, 아이디어들의 그룹을 찾고 시각화 하는 기법이다. 군집화는 데이터 집중적인 응용(Data-Intensive Ap..
집단지성 프로그래밍 2(Recommendations) 이 글은 토비 세가란 저, 윤종완 역의 집단지성 프로그래밍 책을 읽으며 개인적으로 공부하며 정리한 내용이다. 이전 글에서는 Machine Learning과 Euclidean Distance, Pearson Correlation Coefficient 를 이용해 두 사람의 상관도, 유사도를 구하는 것에 대해서 정리했다.(링크) 평론가 순위 이전 글을 통해 두 사람을 비교하는 함수를 만들었었다. 이제는 주어진 사람을 기준으로 다른 모든 사람들과의 점수를 계산해, 가장 유사한 사람 혹은 평론가를 찾는 함수를 만든다. 이 경우 나와 유사한 성향을 가진 영화 평론가를 찾을 수 있으므로 영화를 고를 때 좋은 판단을 할 수 있을 것이다. 이를 이용하려면 아래의 코드를 recommendations.py 파일에 추가한다...
집단지성 프로그래밍 1(Machine Learning, Euclidean Distance, Pearson Correlation Coefficient) Machine Learning에 대해서 공부가 하고 싶어 책을 찾아보다가 토비 세가란 저, 윤종완 역의 '집단지성 프로그래밍' 책을 알게 되었고 이 책을 읽으며 개인적으로 공부를 하고 정리하며 블로그에 올리려고 한다. 아래 내용과 추후 업로드 될 몇몇 글들은 위의 책에 나오는 글들을 나름의 해석으로 요약한 내용이며, 안의 예제 코드들은 책에 나오는 코드들이다. Machine Learning 기계학습(machine learning)는 컴퓨터가 스스로 학습하게 하는 알고리즘에 관련된 인공지응의 한 영역이다. 대부분의 경우 기계학습은 주어진 데이터의 집합을 이용해서 데이터의 속성에 관한 정보를 추론하는 알고리즘을 말한다. 이러한 정보를 갖고, 기계학습을 통해 사람이 분석하기 힘든 방대한 데이터에서 패턴을 추출..
꼬리재귀, Tail Recursion Tail Recursion 일반적인 재귀함수는 특정 횟수 이상 호출 할 경우 Segment Fault를 출력하며 에러를 일으킨다. 하지만 꼬리재귀(Tail Recursion)은 이러한 문제점이 없다 프로그램을 실행하여 프로세스가 메모리에 올라갈 때에 메모리엔 여러 가지 공간들이 생성된다. 코드 데이터가 들어가는 코드 영역, 동적할당된 변수들이 저장되는 힙Heap) 영역, 지역변수들 혹은 함수의 매개변수들이 올라가는 스택 영역, 전역 변수들이 올라가는 bss, data 영역 등이 존재한다. 위에 말했듯이 재귀를 통해 지속적으로 함수를 호출할 경우 이 Stack 영역이 가득차게 되어 Segment Fault가 발생하여 프로그램이 종료된다. 조금 더 자세히 설명하자면, 만약 아래와 같은 코드를 실행할 경우 아..
[Python] Flask & Nginx & Gunicorn 연결하기 [Python] Flask & Nginx & Gunciorn 연결하기 Flask Gunicorn Nginx 이번에 동아리의 친구와 함께 간단한 웹 개발을 했었다. 둘 다 웹 프로그래밍에 익숙치 않아 공부 혹은 개인적으로 사용할 용도로 Flask 자체에 있는 웹 서버로 구동하고 있었는데, 의외로 동아리 사람들이 많이 사용을 하게 되어 동접자 10명만 넘어도 CSS, JS, HTML 파일들을 제대로 불러오지 못하고 렉이 걸리는 문제가 발생했었다. 그래서 웹 서버와 Flask를 연동하자는 생각이 들었고, 하는 김에 전에 들었던 Gunicorn WSGI까지 ㅇ녀동해서 사용해 보려고한다. WSGI & GunicornNginxFlask & Gunicorn & Nginx 연동 WSGI & Gunicorn 추후 추가 ..
[Python] Flask & Socket IO 웹 소켓을 이용한 채팅 Edit [Python] Flask & Socket IO 웹 소켓을 이용한 채팅 Socket IO Flask socketio 예전에 가가라이브인가? 웹에서 채팅을 할 수 있게 만들어주는 모듈이 있었는데, 이와 같은 웹 채팅을 한번 만들어보고 싶었다. 근데 가가라이브는 웹 기술이라기 보다 Flash 기반이더라… 그래서 다른 정보를 찾다보니 WebSocket 이라는 Socket.io가 있었고, 최근 Flask를 이용해 만들고 있는 웹이 있어, 간단하게 Flask에서 WebSocket 기반 채팅 프로그램을 만들어보기로 했다. Flask-Socketio는 링크에서 문서를 확인할 수 있다. 1. 설치 기본적인 웹 프레임워크인 Flask와 Gevent, flask_socketIO를 pip을 이용해 설치해야 한다. ..
[Python] gevent & monkey pathcing 처음엔 gevent를 이용해 spawn과 join만 이용하면 모든 task들이 Non-Blocking 형태로 진행되고, spawn & join을 쓰지 않고 monkey patching만 하면 raw_socket들이 모두 비동기 형식으로 진행되는줄 알았다.(gevent에 대해 안지 얼마 되지 않아서 개념에 대한 이해도가 부족했다) gevnet와 monkey patching을 이때까지 잘 사용해 왔는데 그럼 spawn & join 사용하는것과 monkey patching을 하는 것에 어떤 차이점이 있는지 생각을 하게 됐고, 이에 대해 여러 실험을 해보다 보니 잘못 이해하고 있었다는 것을 알 수 있었다. 결론을 먼저 적어보면, gevent는 단순하게 spawn & join만 사용하면 Non-Blocking이 ..
[Python] gevent & mechanize, asynchronous Scraping 간단하게 웹에서 데이터를 긁어올 일이 있어 mechanize를 이용해 로그인을 하고 데이터를 수집하려고 했으나 일반적인 방법으로는 속도가 너무 느려 gevent를 활용하여 개발하였다.(python에서 thread를 쓰는 것은 좋지 않은 방법이다) 1. Mechanize mechanize는 urllib, urllib2 혹은 requests 모듈과 같이 python에서 웹 요청을 보낼 수 있는 모듈이다. 다른 모듈과 다른 점은 가상으로 브라우저를 생성하여 웹 요청을 보내므로 cookie 혹은 session을 쉽게 다룰수 있고, select_form, submit 과 같은 함수들을 이용해 로그인을 할 수 있다.기본적인 mechanize 사용법Form 태그를 이용한 Login대략 이정도로 사용 가능합니다. 더 ..