'Study > research' 카테고리의 다른 글

Izhikevich simple model of spiking neurons  (0) 2010.08.17

node에 여러 색을 주어 나타낼 수 있는 방법을 찾아봤다. 정말 운좋게 이 기능이 plugin으로 등록된 때가 올해 5월이다.. (5월 전에도 이거 궁금했었는데 그 당시엔 검색해보지 않았었다..ㅋㅋㅋㅋ해봐야 답없었네...ㅋㅋ)



그림: plugin의 소개에 있는 multiple color node의 예제


plugin에 대한 정보는 https://marketplace.gephi.org/plugin/multi-colour-renderer/ 여기에서 볼 수 있다. 


설치방법은 쉬운데... 사용방법이 조금 까다롭다. 범용적으로 만들어진 plugin이 아니어서 하라는대로 해야한다... (귀찮게... 그래도 이게 어디야)


설치방법

1. Gephi에서 plugin 중 MulticolourRenderer 를 설치한다. 설치하고 Gephi를 재시작하면 끝.


사용방법

1. Network를 열고 data table에 가서 colourList 이름으로 column을 새로 만든다. 이 column의 data type은 string으로 해야한다. 이름이 colourList가 아닐 경우 우리가 원하는 기능이 구현되지 않는다. (이게 뭐야...-.-;;;; colorList는 안된다...)


2. colourList에 들어갈 값은 콤마(,)로 구분된 숫자의 리스트이다. 이 숫자(integer)들은 rgb 컬러코드를 의미한다. 각각의 원하는 색에 대응하는 integer rgb code를 찾는게 일... 다음 링크에서 rgb -> integer code로 변환가능하다.

http://www.shodor.org/stella2java/rgbint.html


예시: 789017,817177


3. 다시 graph 창으로 돌아와보면... 아무 변화가 없다. 응?


4. 우리가 작업중인 Overview 에서 Preview로 넘어가야만 원하는 형식으로 node의 multiple color coding이 적용된다. 다시 말해서, 우리가 작업하는 overview에서는 죽어도 원하는 형태로 node의 색이 보이지 않는다는것.


주의점: preview에서 저장할 때 pdf나 svg 등의 vector 형식 파일로 저장하면 원래의 node 색으로 저장된다. 아... png로 저장하면 multiple color가 들어간다. 



아무튼 부족한 부분이 아주 많은 plugin이지만 그래도 없는 것보다 낫지 않을까? 누군가 좀 더 손을 봐줬으면 좋겠다.


'Study > Computer' 카테고리의 다른 글

우분투 서버 설정 때 유용한 링크들  (0) 2014.07.28
command line에서 파일 검색하기 in Linux  (0) 2014.07.22
large data with numpy  (0) 2014.06.20
numpy array 잘라쓰기  (0) 2014.06.17
Python으로 n-gram 만들기  (0) 2014.05.22

용량이 꽤 큰 데이터를 빠르게 읽고 처리하기 위해서 필요한 방법들이 있다. 무식하게 ASCII 파일로 기록해서 일일히 읽어 쓰는건 피하자. 나중에 필요한 구간에 대해서만 잘라 쓸 때에도 가장 원시적인 방법으로 데이터를 다 훑어야 한다.


그래서 DBMS를 사용하거나 HDF5 같은 특수화된 데이터 저장방법을 통해 데이터를 빠르고 편리하게 가공하길 추천한다.


그래서 HDF5 file을 만들었는데... Pandas에서 HDF5 포맷으로 dataframe을 저장할 때 중요한 옵션이 있었다.

참조할 링크: http://pandas.pydata.org/pandas-docs/dev/io.html#fixed-format


dataframe을 HDF5 파일로 저장할 때 format을 지정해줄 수 있다. 여기서 fixed format으로 지정해줄 경우, writing 속도는 빠르지만 dataframe을 추후에 수정할 수 없다. 근데 이게 문제가 아니라... querying도 안되고 일부 column만 불러오더라도 전체 table이 메모리로 올라오게 되어 메모리 부족 현상이 일어나기 십상이다. 


format을 table format으로 지정해주어 문제가 없다면 다행이다. 하지만 fixed format으로 지정된 HDF5 파일을 이미 만들었다면 어떻게 해야 할까? 다음과 같이 일부 table이나 column단위로 데이터를 쪼개 numpy의 binary 파일로 저장하는 방법을 써보자.


* 저장

1. 뽑아낸 series나 dataframe을 numpy array로 변환한다. (a = np.array(table))

2. numpy의 save() 를 이용하여 1에서 변환한 array를 저장한다.


* 불러오기

1. numpy의 load()를 이용해 이전에 만들어진 data.npy를 불러온다. ( a = numpy.load("data.npy") ) 

2. 위에서 리턴된 객체는 0-dim array여서 item()함수를 이용해 element를 뽑아온다. ( b = a.item() )

3. 얻어진 객체의 type을 확인하고 사용한다. 


만약 series나 dataframe을 그대로 numpy의 array에 저장했다면, 불러왔을 때에도 그대로 series 혹은 dataframe의 구조를 가진다. 

'Study > Computer' 카테고리의 다른 글

command line에서 파일 검색하기 in Linux  (0) 2014.07.22
Gephi에서 node에 여러 색 주기  (0) 2014.07.09
numpy array 잘라쓰기  (0) 2014.06.17
Python으로 n-gram 만들기  (0) 2014.05.22
Matplotlib 추천 Q&A 링크들  (0) 2014.05.21

numpy array가 있을 때 행 혹은 열을 잘라내는 방법




이 행렬의 변수 이름은 간단하게... mtx 라고 해두자.


1. 행 자르기

>>> mtx[0:2,:]


이 결과는, 



ㅎㅎㅎ 비슷한 방법으로 열도 자를 수 있다.


2. 열 자르기

>>> mtx[:,1:3]




'Study > Computer' 카테고리의 다른 글

Gephi에서 node에 여러 색 주기  (0) 2014.07.09
large data with numpy  (0) 2014.06.20
Python으로 n-gram 만들기  (0) 2014.05.22
Matplotlib 추천 Q&A 링크들  (0) 2014.05.21
위도, 경도 검색 프로그램  (0) 2014.05.09

세상에... Python으로 이렇게 간단힌 n-gram을 만들 수 있다니...!!


우선 zip 함수에 대해 알아보자. zip함수의 인자로 받은 리스트 등의 iterator들을 묶어주는 함수이다. 뭐 예를 들면...


>>> q = [1,2,3,4,5]

>>> w = [10, 20, 30, 40,50]

>>> r = [100, 200, 300, 400, 500]

>>> zip(q, w, r)

[(1, 10, 100), (2, 20, 200), (3, 30, 300), (4, 40, 400), (5, 50, 500), (6, 60, 600)]


이제 n-gram을 만들어보자. 위의 방법으로 만들기 떄문에 함수도 짧고 속도도 그만큼 빠르다.


>>> a = "I am a boy, you are a girl."

>>> b = a.split(" ")
['I', 'am', 'a', 'boy,', 'you', 'are', 'a', 'girl.']
>>> zip(b, b[1:])
[('I', 'am'), ('am', 'a'), ('a', 'boy,'), ('boy,', 'you'), ('you', 'are'), ('are', 'a'), ('a', 'girl.')]


b 리스트와 b 리스트 중 0번째 원소를 제외하고 1번째 원소부터 시작한 리스트를 zip으로 묶은 결과이다. 이렇게 bi-gram을 만들 수 있다. 


그럼 n-gram은...? 다음과 같이 만들면 된다고 한다. 


>>> zip( *[b[i:] for i in range(3)] )

>>> [('I', 'am', 'a'), ('am', 'a', 'boy,'), ('a', 'boy,', 'you'), ('boy,', 'you', 'are'), ('you', 'are', 'a'), ('are', 'a', 'girl.')]


원리는 간단하다. 

1. 리스트 내포(list comprehension) 문법으로 b[0:], b[1:], b[2:], ... 등의 리스트를 원소로 가지는 리스트를 하나 만든다. 

2. 만들어진 리스트의 원소들이 필요하기 때문에, 리스트 앞에 *을 붙여 리스트의 원소들이 함수의 argument로 들어가도록 해준다.

3. zip으로 묶어준다. 


새로 발견한건 아니고... 출처는 아래이다. Python 짱이네..

http://locallyoptimal.com/blog/2013/01/20/elegant-n-gram-generation-in-python/


'Study > Computer' 카테고리의 다른 글

large data with numpy  (0) 2014.06.20
numpy array 잘라쓰기  (0) 2014.06.17
Matplotlib 추천 Q&A 링크들  (0) 2014.05.21
위도, 경도 검색 프로그램  (0) 2014.05.09
Too many open files 에러가 로그에 남을 때  (0) 2014.04.07

매번 업데이트하고 있습니다. 


* Multiple Plot 그릴 때 (특히 legend를 같이 그리고 싶을 때)

http://stackoverflow.com/questions/5484922/secondary-axis-with-twinx-how-to-add-to-legend


* Bar chart에서 bar 마다 색을 다르게 주기

http://stackoverflow.com/questions/18973404/settting-different-bar-color-in-matplotlib-python


* Scatter Plot 에서 point 에 색을 주기 (colormap 도 같이 있음)

http://stackoverflow.com/questions/8202605/matplotlib-scatterplot-colour-as-a-function-of-a-third-variable

http://matplotlib.org/examples/pylab_examples/scatter_demo2.html


* Plot에서 error를 색으로 칠하기

http://stackoverflow.com/questions/12957582/matplotlib-plot-yerr-xerr-as-shaded-region-rather-than-error-bars


* Legend 사이즈 조절하기

http://stackoverflow.com/questions/20048352/how-to-adjust-the-size-of-matplotlib-legend-box


* 그래프 퀴퉁이에 text 넣기

http://stackoverflow.com/questions/8482588/putting-text-in-top-left-corner-of-matplotlib-plot


* Colorbar 뒤집어 그리기 (cm에 있는 colorbar)

http://stackoverflow.com/questions/3279560/invert-colormap-in-matplotlib 

(가장 많은 추천의 답이 정답...!)


* 그림 png로 저장할 때 크기 및 해상도 조절하기

http://stackoverflow.com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib


* PolyCollection 사용하기 (Polygon을 그리고 색을 정해줄 수 있음)

http://matplotlib.org/examples/api/collections_demo.html


* Discrete color bar 만들기 (polygon 색칠할 때 색을 정해줄 경우, 이걸로 우회하여 해결... 어떻게 폴리곤마다 색을 지정해주는지는 아직 모르겠음..)

http://stackoverflow.com/questions/14777066/matplotlib-discrete-colorbar


* Discrete color bar 만들기2 -> 자신이 원하는 색으로 만드는 방법. 꽤 쉬움..

http://stackoverflow.com/questions/9707676/defining-a-discrete-colormap-for-imshow-in-matplotlib


* Axis 눈금을 동등하게 그리기

http://matplotlib.org/examples/pylab_examples/axis_equal_demo.html


* Imshow에서 square 로 plot 하기. 사실 aspect 를 조절하면 되는데, 이걸 계산해서 square로 만들어줘야 하니까... 좀 번거로움. 

http://stackoverflow.com/questions/7965743/python-matplotlib-setting-aspect-ratio



* 3D plot from data

http://stackoverflow.com/questions/4363857/matplotlib-color-in-3d-plotting-from-an-x-y-z-data-set-without-using-contour

http://stackoverflow.com/questions/12730436/matplotlib-plotting-non-uniform-data-in-3d-surface


*Scatter plot에서 point마다 label 주기

http://stackoverflow.com/questions/5147112/matplotlib-how-to-put-individual-tags-for-a-scatter-plot (Gorgeous!)

http://stackoverflow.com/questions/14432557/matplotlib-scatter-plot-with-different-text-at-each-data-point (Basic)

'Study > Computer' 카테고리의 다른 글

numpy array 잘라쓰기  (0) 2014.06.17
Python으로 n-gram 만들기  (0) 2014.05.22
위도, 경도 검색 프로그램  (0) 2014.05.09
Too many open files 에러가 로그에 남을 때  (0) 2014.04.07
py2exe로 pyQT4 코드 exe로 만들기  (0) 2014.03.13

데이터 파일이 density matrix 형태일 때 density plot 을 그리는 방법.


* 데이터파일 구조 (density matrix 형태)

1 2 3

4 5 6

7 8 9


* gnuplot 에서 그리는 방법

 >>> set pm3d map

 >>> splot './data.txt' matrix 


키워드를 입력하면 주어진 키워드의 위도와 경도를 검색하는 프로그램을 만들었다. 


가끔 필요할 때마다 프로그램 짜는게 너무 귀찮아졌다. (항상 대충 만들어서 나중에 재활용하기가 안좋더라고요.)
그래서 이번에 아주 예쁘게 만들어 필요하신 분에게 배포까지 하기로 결심했음...


Download: 

search_loc_to_lon_lat.py

프로그램의 개요는 다음과 같다.


-1: Pre-requirement

 - Python 2.x    (제작은 python 2.7에서...)

 - No additional Lib

 - Daum과 Naver의 API KEY!!! (이건 코드 안에 주석으로 자세히 설명해두었습니다.)


0. 실행 방법: python 프로그램.py  (실행 옵션은 이렇게 치면 나와요...)


 자세히...

 USAGE: python program.py -i (--input) input.txt -e (--encoding) cp949 - (--output) output.txt -s x,y (y,x)

 Default input encoding\t: utf-8

 Default output\t\t: save in result.txt

 Default output seq.\t: x\ty


1. Input

  - Input.txt 로부터 키워드를 읽어온다. 한 줄에 하나씩 키워드가 있어야 함.

예시: 

==== input.txt

인천광역시 중구청

철원군청

ㄱㄱㄱㄱㄱ

성균관대학교 자연과학캠퍼스



2. Output

  - 옵션에서 지정한 파일 이름 혹은 result.txt 로 저장

예시:

==== result.txt

#이름 x(경도) y(위도)

"인천광역시 중구청" 126.62161335 37.4738403028

"철원군청" 127.313518298 38.1469249461

ㄱㄱㄱㄱㄱ None None

"성균관대학교 자연과학캠퍼스" 126.97467286 37.2934204446


3. 특징 (별건 없지만...)

 - Input 파일의 인코딩을 지정해줄 수 있음. 그래서 운영체제 따위 가리지 않음. 인코딩 따로 변환할 필요도 없음.

 - Outputx coordinate와 y coordinate 의 순서를 정할 수 있음


4. 한계점

 - 국내용.... -.-


Apache에서 error.log에 Too many open files 라는 로그가 남았다. 이게 무슨 말일까? 찾아봤더니, 주어진 계정에서 열 수 있는 최대 파일의 갯수를 초과했다는 이야기란다. 이런 로그가 남았다면, 열 수 있는 최대 파일의 갯수를 조정해주어야 한다. 사실 나는 socket과 관련된 부분에서 이 에러가 났었다. (자세히 기억이 안나네요.)


아래 링크들을 참고하자. 

http://pchero21.com/918

http://stackoverflow.com/questions/2569620/socket-accept-error-24-to-many-open-files

http://rtoodtoo.net/2012/03/07/how-to-use-ulimit-utility-to-restrict-users/


크게 손댈것 없이 첫번째 링크에서 제안하는 방법대로 limit.conf에 계정과 열 수 있는 최대 파일의 갯수를 지정해주었다. 이 다음 재부팅하니 잘 먹혀들어갔다. 


다음의 명령어로 확인할 수 있다. ulimit -Hn (이건 hard 권한, 즉 수퍼유저의 경우), ulimit -Sn (이건 soft 권한, 일반적인 계정의 경우).


여기서 사실 최대 process의 갯수도 정해줄 수 있는데, 너무 작게 할 경우 gnome을 이용한 X window로 진입시 크나큰 문제가 생긴다. (200으로 정해줬는데... 문제가 생겨서 혼났네요.) 정해주지 않을 경우 사실상 무한대의 process가 생성될 수 있는것 같다. 


만약 gnome에서 포크 에러가 느닷없이 발생한다면, 보통 process의 숫자에 제한이 걸려 실행이 되지 않는 경우일 것이다. X window에서 벗어나 command 모드로 들어가도 -bash: fork: retry: No child processes 에러가 발생한다.


이 경우 process의 제한을 지워주면 잘 해결된다. 



여러 검색 끝에 알아낸 원포인트 솔루션!


from py2exe.build_exe import py2exe

from distutils.core import setup

setup(options = {'py2exe': {'bundle_files': 1, "dll_excludes":['w9xpopen.exe'],"compressed":1 }}, windows = [{'script': "ccc.py"}], zipfile = None)


위에서 ccc.py에 원하는 파일 이름을 쓰면 된다.


간단히 해보니 pyQT4 라이브러리가 들어가도 10Mb 정도밖에 안되네. 

+ Recent posts