Ubuntu 에서 apt-get install 로 phpmyadmin을 설치한 다음에 접속이 안된다. -.-;;;


그래서 찾아봤더니 다음과 같이 설정을 해주어야 나온다고 한다. 혹시 설치가 성공적으로 된 후 접속이 안되면 환경설정을 해주시길.


1. etc/apache2/apache2.conf  에 들어간다

2. 맨 아래에 Include /etc/phpmyadmin/apache.conf 를 써준다.

3. 아파치 재실행. (sudo /etc/apache2/init.d/apache2 restart )


정보의 출처는 여기!

http://mytory.net/archives/1711

Apache 웹서버에서 루트 디렉토리를 변경하고 싶을 때가 있다. 그럼 이렇게 바꾸어야 한다.

물론 Ubuntu 에서만....-.-


etc/apache2/sites-available/default 에서 var/www 로 되어있는 부분을 수정.


다른 필요한 변경들은 원래 etc/apache2의 apache2.conf 에서 한다. 원래는 httpd.conf 라는걸 들었는데...


정보가 많은 블로그 하나 투척~

http://s2junn.tistory.com/56

구글 맵에서 해보려고 했으나 지금 우리나라 주소만을 대상으로 위,경도 좌표가 필요해서 네이버 api를 사용하려고 한다.

 

주소를 가지고 api를 통해 위도, 경도 좌표를 얻는 일을 geocoding이라고 한다. (거꾸로 위도, 경도 좌표로 주소를 얻을 수도 있는데 이를 reverse geocoding이라고 부른다.) 이건 복잡하게 api에서 javascript를 부르고 코드를 짤 필요가 없을 것 같이 느껴질텐데, 맞다. 그럴 필요가 별로 없다. 홈페이지에 지도 넣고 부가기능 넣는게 더 힘든 일이다.

 

국내에서는(현재 날짜로 대충 2013년 4월 30일) NAVER map API를 사용할 수 있다. 다음 API도 있지만 아직 확인하지는 않았다. 네이버 서버자원이 더 풍부할테니 네이버에 신세좀 져야겠다.

 

1. 우선 API key를 발급받는다. 무한정 쿼리를 날려서 정보를 얻어올 수 없다. 그래서 key를 받고 하루에 정해진 양만큼을 써야한다. 근데 그 양도 꽤 많다.

 

https://dev.naver.com/openapi/register

 

지도 API 키를 등록한 후에 키를 저장해놓자.

 

2. 이제 절반 한거다. ㅎㅎㅎㅎㅎgeocoding을 하려면 다음과 같은 규칙으로 주소를 만들어 넣으면 된다.

1. http://openapi.map.naver.com/api/geocode.php?

2. key=test

3. &encoding=utf-8

4. &coord=tm128

5. &query=경기도성남시정자1동25-1

 

2번은 키를 넣는 부분이다. 아까 받은 key를 넣으시라.

3번은 인코딩을 정하는 부분인데 그냥 흔히 쓰는 utf-8로 고고

4번은 coodination을 정하는 곳이다. tm128(이게 중부원점 좌표인가 그럴텐데?)과 위경도 좌표계가 있다. 위경도는 latlng 을 넣으면 된다.

5번은 진짜 주소다.

(레퍼런스 : http://dev.naver.com/openapi/apis/map/javascript_2_0/reference#coordtrans)

 

이렇게 만든 주소(1+2+3+4+5, 합쳐서 15가 아님!)를 브라우저에 넣고 엔터를 치면 된다. XML로 결과값을 주는데 이걸 사용하기 좋은 언어로 파싱하면 된다.

 

참 쉽지요?

 

python3 부터는 ANSI 기준으로 작성된 파일만 읽을 수 있습니다. 그래서 UTF-8로 작성된 파일은 보통 방법으로 읽을 때 에러가 납니다. 다음과 같이 말이죠.


UnicodeDecodeError: 'cp949' codec can't decode bytes in position ~~~~


그래서 우리가 읽으려는 파일의 인코딩 형식을 변환해주어야 합니다.


1. 리눅스에서 변경하기

블로그에 iconv 에 대한 설명이 있습니다. (http://amornatura.tistory.com/42

그냥 UTF-8에서 cp949(ANSI)로 파일을 변환하면 되기 때문에 다음과 같이 입력해줍니다.


iconv -f UTF-8 -t CP949 -o rename.txt original.txt


간단합니다. 


2. 파이썬3 에서 그냥 읽어오기

사실 윈도우에서 작업하게 되면 다른 프로그램들을 써서 변환해야 하기 때문에 매우 번거롭습니다. 리눅스에서도 많은 양의 파일을 변환하려면 일이죠. (뭐...1분이면 되지만요...ㅎ)


파이썬3 에서 직접 UTF-8 문서를 읽어올 수 있습니다. 자세한 내용은 다음의 링크를 따라가보세요.

(http://www.evanjones.ca/python-utf8.html)


위의 사이트에서 설명해주는 내용을 따라하면, 


import codecs

fileObj = codecs.open( "read.txt", "r", "utf-8" )

u = fileObj.readlines()


for i in u :

print(i)

print("\n")



codecs 라는 라이브러리를 불러와서 파일의 형식을 지정해준 후 읽어옵니다. 읽을 때 read()로 하면 한글자씩, readlines()하면 단위줄로 읽어오죠. 


쉽죠? 

물리학특강2 수업을 듣는 학생들에게 도움이 될 자료입니다.

python으로 주어진 미분방정식에서의 vector field와 phase portrait를 그릴 수 있는 코드입니다.


Mathematica의 Streamplot 기능까지는 안되지만 도움이 될겁니다.


6.1.8_variation_uploaded.py


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

국내 주소로 위도, 경도 얻기  (0) 2013.04.30
python3 에서 UTF-8 파일 읽기  (1) 2012.12.19
Python으로 Phase Portrait 그리기  (0) 2012.10.30
Python으로 vector field그리기  (0) 2012.10.22
pylab과 pyplot의 차이?  (0) 2012.10.22


6.1.8.py


Strogatz의 Nonlinear Dynamics 교과서에서 6장 연습문제에 보면 van der Pol oscillator가 나온다. 식은 다음과 같이 생겼다. 




이 미분방정식들의 Vector Field를 파이썬으로 그릴 수 있는데 최대한 matplotlib함수를 쓰지 않고(mgrid 등) 그리는 코드를 짰다. 거기에 덧붙여 임의의 점 하나를 잡고 trajectory를 시간에 대해 그리도록 하는 기능을 같이 넣었다. portrait 아래에 나오는 두개의 그래프는 x-t 그리고 y-t 그래프이다. 

trajectory를 따라가보면 시간이 조금 지난뒤에는 진동하는 모습을 보여주며 phase portrait에서도 볼 수 있다. 


Vector plot을 하게되면 trajectory가 뚜렷히 보이지 않는 단점이 있다. vector의 크기가 작을 경우 화살표가 상대적으로 작게 나와 잘 보이지 않기 때문인데, mathematica에서는 StreamPlot이라는 명령어로 trajectory들의 portrait를 살펴보기 쉽다. 하지만 matplotlib에서는 Stream을 plot해주는 함수가 없기 때문에 누군가 만들어 놓은 것이 있다. 아래 링크를 살펴보시면 된다.

http://stackoverflow.com/questions/8296617/how-to-plot-a-streamlines-when-i-know-u-and-v-components-of-velocitynumpy-2d


아래 코드에서간단히 1개의 trajectory를 그렸는데 이를 격자형태로 모두 계산해 그리면 Stream plot이 되는건 뻔한 이야기. -.- (하지만 이건 하고싶지 않아져서 패스)


프로그램을 실행시키면 아래와 같다. (이런걸 왜 넣고 있지.)

참! 예쁘게 나올 필요는 없어서 여백조정은 패스~(사실 이걸 알아보려고 또 20분남짓 소비하는게 싫어서...)




코드는 아래에~!


import numpy as np

import matplotlib.pyplot as plt


def xftn(x, y):

return y


def yftn(x, y):

tmp = -x + y*(1-x*x)

return tmp


def xRK4(x, y, dt):

    k1 = dt * xftn(x, y)

    k2 = dt * xftn(x + 0.5*k1, y + 0.5*k1)

    k3 = dt * xftn(x + 0.5*k2, y + 0.5*k2)

    k4 = dt * xftn(x + k3, y + k3)


    result = x + k1 / 6 + k2 / 3 + k3 / 3 + k4 / 6


    return result


def yRK4(x, y, dt):

    k1 = dt * yftn(x, y)

    k2 = dt * yftn(x + 0.5*k1, y + 0.5*k1)

    k3 = dt * yftn(x + 0.5*k2, y + 0.5*k2)

    k4 = dt * yftn(x + k3, y + k3)


    result = y + k1 / 6 + k2 / 3 + k3 / 3 + k4 / 6


    return result



Step = 0.1

xLeft = -2

xRight = 2

yTop = 2

yBottom = -2


SIZE = (int)((xRight-xLeft)/Step) + 1  #We only think square plane.


print("Step is", Step)


x = np.empty((SIZE,SIZE), float)

y = np.empty((SIZE,SIZE), float)


u = np.empty((SIZE,SIZE), float)

v = np.empty((SIZE,SIZE), float)


for i in range(SIZE):

for j in range(SIZE):

x[i][j] = xLeft + Step*i

y[i][j] = yBottom + Step*j

u[i][j] = xftn(x[i][j], y[i][j])

v[i][j] = yftn(x[i][j], y[i][j])


xPointList = [0.5]

yPointList = [0.5]

timeList   = [0]


dt = 0.01


for i in range(1500):

xPointList.append(xRK4(xPointList[i], yPointList[i], dt))

yPointList.append(yRK4(xPointList[i], yPointList[i], dt))

timeList.append(timeList[i]+dt)


ax1 = plt.subplot2grid((7,3), (0,0), rowspan=5, colspan=5)

ax1.quiver(x,y,u,v, angles='xy', pivot='middle')

ax1.plot(xPointList, yPointList)

plt.xlim(-2, 2)

plt.ylim(-2, 2)


ax2 = plt.subplot2grid((7,3), (5,0), colspan=3)

ax2.plot(timeList, xPointList)


ax3 = plt.subplot2grid((7,3), (6,0), colspan=3)

ax3.plot(timeList, yPointList)


plt.show()

파이썬으로 벡터장을 그려야 하는 경우가 있다. 심심하면 지도를 놓고 위에 풍향과 풍속을 그려볼 수도 있다. (기상청에서 데이터 받아서 그려보셔도 됩니다...정 심심하시면요...)


메뉴얼과 구글링을 통해서 더 깊이있는 방법들을 배울 수 있지만 가장 간단한 코딩은 아래와 같다.


import matplotlib.pyplot as plt

import numpy as np


x = np.empty((10,10), float)

y = np.empty((10,10), float)


u = np.empty((10,10), float)

v = np.empty((10,10), float)


for i in range(10):

    for j in range(10):

        x[i][j] =  i / 10.0

        y[i][j] =  j / 10.0

        u[i][j] =  i / 10 * 2 

        v[i][j] =  j / 10 * 2


print(x, y, u, v)


plt.quiver(x,y,u,v, angles='xy', pivot='middle')

plt.ylim(0,1.1)

plt.xlim(0,1.1)

plt.grid('on')

plt.show()


코드의 대부분은 그냥 정의하는거고....
벡터장을 그려주는 함수는 plt(matplotlib.pyplot)의 quiver라는 함수이다. 여기서 x, y는 벡터의 위치를 나타내며 u,v는 벡터의 성분을 말한다. angle은 벡터의 각도를 어디서부터 측정할꺼냐 그런 내용인데(아닐 수도 있음) 'xy'로 해야 우리가 상상하는 결과가 나온다. pivot은 벡터를 회전시킬 때 꼬리를 잡을지 머리를 잡을지 그것도 아니면 중간을 잡을지에 대한 옵션이다. 더 다양한 옵션은 공식 홈페이지를 참고하시고....

사실 mash를 이용해 u, v를 만들어도 된다. 여기서는 생략...

결과는 다음과 같다.



파이썬에서 import 해올 때 matplotlib와 numpy를 다음과 같이 불러온다. (누군가는.... 이렇게 했다,.)


import numpy as np // Numpy를 불러오기

import pylab as pl // pylab(?)을 불러오기


그런데 설치된 패키지에 pylab은 없다. Numpy와 Matplotlib만 있을 뿐이다. pylab의 설명은 matplotlib 홈페이지에 되어있는데 긁어오면 다음과 같다.


pylab combines pyplot with numpy into a single namespace. This is convenient for interactive work, but for programming it is recommended that the namespaces be kept separate, e.g.:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 5, 0.1);
y = np.sin(x)
plt.plot(x, y)

사실 pylab은 Numpy와 Matplotlib의 pyplot이라는 모듈을 같이 불러오는 방법이다. 따라서 pylab을 부르면 Numpy를 import하지 않아도 알아서 가져오게 된다. 하지만 Namespace을 같이 쓰는 것이 나중에 문제될 수 있으므로 되도록이면 위의 방법처럼 따로 불러와 쓰라고 한다.

matplotlib는 pylab에서 불러오는 pyplot이외에도 다양한 모듈이 존재한다. 나머지 모듈에서 제공하는 수많은 기능들을 보려면 역시 공식 홈페이지를 방문하시라. ( http://matplotlib.org/py-modindex.html )



함수들의 자세한 arguments는 메뉴얼을 참고.


import matplotlib.pyplot (이외에도 많은 모듇들이 존재함)


1. 라벨붙이기.

pylab.xlabel('aaa')

pylab.ylabel('bbb')


2. 범위 정해주기

pylab.xlim(1, 100)

pylab.ylim(1, 100)


3. grid 보이기

pylab.grid('on' / 'off')


4. title 쓰기

pylab.title('aaaa')

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

Python으로 vector field그리기  (0) 2012.10.22
pylab과 pyplot의 차이?  (0) 2012.10.22
파일들을 gnuplot으로 한꺼번에 그리기  (0) 2012.10.03
python으로 중복된 tab없애기  (0) 2012.10.03
ssh 접속이 안될때  (0) 2012.09.21


plot.py


꽤 많은 데이터들을 gnuplot으로 plot을 하고 싶을 때가 있다. 사실 python에서 matplotlib와 numpy로 싹 그릴수도 있지만 matplotlib에서 지원해주는 옵션을 자유자재로 다루기가 어려운 경우가 다반사다. 그렇다고 plot을 안할수는 없는 노릇이고... 


그냥 gnuplot의 스크립트 파일(e.g. plot.plt)을 만들어 실행시키는 방법을 써보자.


python이 빠르고 쉽게 문자열을 다룰수 있다는 강점이 있어 이를 사용했다.

(결국 python 관련 글....)


import glob


Flist = glob.glob('*.dat')


fwriteName = "plot.plt"

fw = open(fwriteName, 'a')


fw.write("set term png\n")    # 여기에 자신이 처음 입력할 terminal 옵션을 넣어주자


OldExt = 'dat'

NewExt = 'png'



for i in range(len(Flist)):

#Read file to know how many tab      # 데이터에서 tab이 여러번 먹혀있으면 엉망이되므로 주의!

fr = open(Flist[i], 'r')

StrContent = fr.readline()

TabCount = StrContent.count('\t')



fpngName = Flist[i].replace(OldExt, NewExt)


StrOutput = 'set output \'' + fpngName + '\'\n' 


fw.write(StrOutput)

LastCol = TabCount + 1


StrPlot = 'p \'./' + Flist[i] + '\' u ' + str(LastCol) + ':($3/$2) w p, \'\' u ' + str(LastCol) + ':($4/$2) w p\n'     #이런식으로 plot 옵션을 적어주면 된다. 근데 ' 등의 특수문자를 써야해서 꽤 주의해야 한다.

fw.write(StrPlot)


이를 실행시키면 한 디렉토리 안에 있는 dat파일을 모두 읽어 자신이 지정한 방법대로 그림을 그려 png로 저장해준다. 이 프로그램을 그대로 쓰기엔 조심할 점이 있는데, 


1    2    3        4    5

..   ..    ..       ..    ..


원래 데이터파일이 위와같이 tab이 여러번 존재한다고 해보자. gnuplot은 그래도 착하게 우리가 눈으로 보는 것과 같이 행을 구분해준다. using 1:4 와 같은 식으로 옵션을 써주어도 우리가 의도한대로 잘 실행된다.

하지만 위의 프로그램에서는 Column의 개수를 tab의 수로 가정했기 때문에 중복된 tab(위의 예제에선 3과 4 사이)를 없애주어야 한다. 없애는 방법은 아래 링크를 참조!

http://amornatura.tistory.com/62

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

pylab과 pyplot의 차이?  (0) 2012.10.22
matplotlib에서 자주쓰는 옵션들 정리(진행중)  (0) 2012.10.22
python으로 중복된 tab없애기  (0) 2012.10.03
ssh 접속이 안될때  (0) 2012.09.21
Ubuntu superuser 추가하기  (0) 2012.09.20

+ Recent posts