깃(git) 사용 설명서 by 바죠

깃(git) 사용 설명서


많은 공개된 프로젝트들이 소스코드를 관리하기 위해서 (git)을 활용하고 있다. 여러 사람들과 공동으로프로젝트를 수행하기 위해서는 소스코드 자료 저장/공유 체계가 필요하다.물론, 개인이 프로젝트를 진행할 때에도 충분히 유용한 것이 깃(git)이다. 개인적 개발과 수정본에 대한 분산 저장이 가능하다. 유사한 프로그램들이 많이 있어왔지만, 최근 가장 많이 활용되는 것이 깃(git)이다. 자료 백업에 대한 두려움 없이 새로운 시도와개발을 훨씬 더 자유롭게 해 볼 수 있다. 사실상 같은 작업 디렉토리에서 새로운 개발 시도를 별도의 백업 작업 없이 진행 할 수 있다. 간단한 명령어로서 자동 백업이 이루어진다. 원본과 새로운 시도가 있는 수정본에 대한 명백한 차별을 제시하고 각각의 보관을 장려한다. 물론 언제든지 원하는 버전을 볼 수 있고 비교하며 작업할 수 있다. 또한, 버전과 버전 사이의 차이점을 확연하게 확인할 수 있다.

bitbucket.org, github.com, gitlab.com 같은 서비스 깃(git) 호스팅 사이트들이 있어서 유용하다.이들 서비스들은 깃(git)의 특징을 잘 반영하여 변경된 파일의 내역을 잘 제시해준다. 호스팅 서비스는 소스코드 백업 기능을 지원한다. 아울러 웹페이지(URL)를 통한 프로그램 배포 기능을 수행할 수 있다. 리눅스 소스코드는 500만명이 넘는 프로그래머들이 협업하여 발전시키고 있다. MS75억달러 (한화 8조원)에 깃허브를 인수했다고 한다. 깃허브의 수익 모델은 사적인 저장소이다. 2700만 사용자가 참여하고 8000만 개 이상의 코드가 저장된 곳이다.



참고 URLs:








Tex in matplotlib [Python] by 바죠

Tex in matplotlib

수식을 가장 잘 표현하는 방법은 Tex을 사용하는 것이다.
계산 결과 정리 그림에서도 Tex 기반 수식을 사용할 수 있다면 금상첨화일것이다.
이것이 가능하다. Tex에 익숙한 사람들에게는 희소속이다. Tex에 익숙하지 않은 사람들은 시큰둥할 수밖에 없다.

아래의 matplotlib 예제를 보자.
그림에 Tex으로 작성된 수식이 함께 만들어진다는 사실에 주목하자.

컴퓨터 언어를 배우는 것은 다른 일반 언어를 배울 때와 비슷할 수 있다. 
문법과 실제 연습에서 일어나는 괴리들이 발견된다는 것이다.  
이렇게 사용해도 되는지, 안되는지 확신이 없을 때가 있는 것이다.
이러한 어색한 부분들을 없애는 것은 대단히 어렵다.  시간을 필요로 하기 때문에 어려운 것이다.

새로운 프로그램을 보면서 그 때 그 때 새롭게 문법을 확인할 수밖에 없다.
결국, 다른 사람들이 작성한 프로그램을 읽어야 한다.
모방할 수 있는 것들은 모방해야만 한다.
이것은 처음부터 알 수가 없는 것들이다.
이런 부분들이 있기 마련이다.

이러한 모방이 끝나면, 나중에, 응용에서 자연스럽게 익숙해진 구문들이 술술 나올 수 있다.


"""
Demo of TeX rendering.

You can use TeX to render all of your matplotlib text if the rc
parameter text.usetex is set. This works currently on the agg and ps
backends, and requires that you have tex and the other dependencies
described at http://matplotlib.org/users/usetex.html
properly installed on your system. The first time you run a script
you will see a lot of output from tex and associated tools. The next
time, the run may be silent, as a lot of the information is cached in
~/.tex.cache

"""
import numpy as np
import matplotlib.pyplot as plt


# Example data
t = np.arange(0.0, 1.0 + 0.01, 0.01)
s = np.cos(4 * np.pi * t) + 2

plt.rc('text', usetex=True)
plt.rc('font', family='serif')
plt.plot(t, s)

plt.xlabel(r'\textbf{time} (s)')
plt.ylabel(r'\textit{voltage} (mV)',fontsize=16)
plt.title(r"\TeX\ is Number "
          r"$\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!",
          fontsize=16, color='gray')
# Make room for the ridiculously large title.
plt.subplots_adjust(top=0.8)

plt.savefig('tex_demo')
plt.show()





"""
A part of AMADEUS protocol
Written by In-Ho Lee, KRISS, July 14, 2018.
$python energyhistogram.py
"""
import matplotlib.mathtext as mathtext
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.path as path

fig, ax = plt.subplots()

iid=[]
volume=[]
energy=[]
kount=0
with open("csa.out", 'r') as afile:
     for line in afile:
         if(len(line.split()) == 11 and line.split()[3] == 'outcar'):
             iid.append(int(line.split()[0]))
             volume.append(float(line.split()[1]))
             energy.append(float(line.split()[2]))
             kount=kount+1
#print kount
plt.rc('text', usetex=True)
plt.rc('font', family='serif')

data=energy
# histogram our data with numpy

n, bins = np.histogram(data, 100)

# get the corners of the rectangles for the histogram
left = np.array(bins[:-1])
right = np.array(bins[1:])
bottom = np.zeros(len(left))
top = bottom + n

# we need a (numrects x numsides x 2) numpy array for the path helper
# function to build a compound path
XY = np.array([[left, left, right, right], [bottom, top, top, bottom]]).T

# get the Path object
barpath = path.Path.make_compound_path_from_polys(XY)

# make a patch out of it
patch = patches.PathPatch(barpath)
ax.add_patch(patch)

# update the view limits
ax.set_xlim(left[0], right[-1])
#ax.set_xlim(-175,-140)
ax.set_ylim(bottom.min(), top.max())

ax.set_xlabel('energy (eV)', fontsize=20)
plt.show()


"""
A part of AMADEUS protocol
Written by In-Ho Lee, KRISS, July 14, 2018.
$python volumehistogram.py
"""
import matplotlib.mathtext as mathtext
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.path as path

fig, ax = plt.subplots()

iid=[]
volume=[]
energy=[]
kount=0
with open("csa.out", 'r') as afile:
     for line in afile:
         if(len(line.split()) == 11 and line.split()[3] == 'outcar'):
             iid.append(int(line.split()[0]))
             volume.append(float(line.split()[1]))
             energy.append(float(line.split()[2]))
             kount=kount+1
#print kount
plt.rc('text', usetex=True)
plt.rc('font', family='serif')

data=volume
# histogram our data with numpy

n, bins = np.histogram(data, 100)

# get the corners of the rectangles for the histogram
left = np.array(bins[:-1])
right = np.array(bins[1:])
bottom = np.zeros(len(left))
top = bottom + n

# we need a (numrects x numsides x 2) numpy array for the path helper
# function to build a compound path
XY = np.array([[left, left, right, right], [bottom, top, top, bottom]]).T

# get the Path object
barpath = path.Path.make_compound_path_from_polys(XY)

# make a patch out of it
patch = patches.PathPatch(barpath)
ax.add_patch(patch)

# update the view limits
ax.set_xlim(left[0], right[-1])
#ax.set_xlim(500,1000)
ax.set_ylim(bottom.min(), top.max())

ax.set_xlabel('volume (\AA$^3$)', fontsize=20)
plt.show()


"""
A part of AMADEUS protocol
Written by In-Ho Lee, KRISS, July 14, 2018.
$python energyvolume.py
"""
import matplotlib.pyplot as plt
import matplotlib.mathtext as mathtext

iid=[]
volume=[]
energy=[]
kount=0
with open("csa.out", 'r') as afile:
     for line in afile:
         if(len(line.split()) == 11 and line.split()[3] == 'outcar'):
             iid.append(int(line.split()[0]))
             volume.append(float(line.split()[1]))
             energy.append(float(line.split()[2]))
             kount=kount+1

#print kount
plt.rc('text', usetex=True)
plt.rc('font', family='serif')
fig, ax = plt.subplots()
ax.plot(volume, energy, 'o', ms=5, lw=2, alpha=0.7, mfc='orange')
ax.grid()
#ax.set_xlim(500,1000)
#ax.set_ylim(-175,-150)
ax.set_xlabel('volume (\AA$^3$)', fontsize=20)
ax.set_ylabel('energy (eV)', fontsize=20)
plt.show()


"""
A part of AMADEUS protocol
Written by In-Ho Lee, KRISS, July 14, 2018.
$python energydensity.py
"""
import matplotlib.pyplot as plt
import matplotlib.mathtext as mathtext

iid=[]
energy=[]
density=[]
kount=0
with open("csa.out", 'r') as afile:
     for line in afile:
         if(len(line.split()) == 11 and line.split()[3] == 'outcar'):
             iid.append(int(line.split()[0]))
             energy.append(float(line.split()[2]))
             density.append(float(line.split()[10]))
             kount=kount+1

#print kount
plt.rc('text', usetex=True)
plt.rc('font', family='serif')
fig, ax = plt.subplots()
ax.plot(density, energy, 'o', ms=5, lw=2, alpha=0.7, mfc='orange')
ax.grid()
#ax.set_xlim(500,1000)
#ax.set_ylim(-175,-150)
ax.set_xlabel('density (g/cm$^3$)', fontsize=20)
ax.set_ylabel('energy (eV)', fontsize=20)
plt.show()


"""
A part of AMADEUS protocol
Written by In-Ho Lee, KRISS, July 14, 2018.
$python structureupdate.py
"""
import matplotlib.pyplot as plt
import matplotlib.mathtext as mathtext

oldiid=[]
newiid=[]
oldenergy=[]
newenergy=[]
kount=0
with open("csa.out", 'r') as afile:
     for line in afile:
         if(len(line.split()) == 6 and line.split()[1] == 'type,'):
             kount=kount+1
             if(line.split()[0] == 'old'):
                   oldiid.append(kount)
                   oldenergy.append(float(line.split()[3]))
             if(line.split()[0] == 'new'):
                   newiid.append(kount)
                   newenergy.append(float(line.split()[3]))

#print kount
plt.rc('text', usetex=True)
plt.rc('font', family='serif')
fig, ax = plt.subplots()
ax.plot(oldiid, oldenergy, 'o', ms=5, lw=2, alpha=0.7, mfc='orange')
ax.plot(newiid, newenergy, '*', ms=5, lw=2, alpha=0.7, mfc='blue')
ax.grid()
#ax.set_xlim(1,1000)
#ax.set_ylim(-175,-150)
ax.set_xlabel('structure update', fontsize=20)
ax.set_ylabel('energy (eV)', fontsize=20)
plt.show()

"""
import matplotlib.pyplot as plt
import matplotlib.mathtext as mathtext

oldiid=[]
newiid=[]
oldenergy=[]
newenergy=[]
oldenergybefore=[]
newenergybefore=[]
kount=0
with open("csa.out", 'r') as afile:
     for line in afile:
         if(len(line.split()) == 6 and line.split()[1] == 'type,'):
             kount=kount+1
             if(line.split()[0] == 'old'):
                   oldiid.append(kount)
                   oldenergy.append(float(line.split()[3]))
                   oldenergybefore.append(float(line.split()[4]))
             if(line.split()[0] == 'new'):
                   newiid.append(kount)
                   newenergy.append(float(line.split()[3]))
                   newenergybefore.append(float(line.split()[4]))
#print kount
plt.rc('text', usetex=True)
plt.rc('font', family='serif')
fig, ax = plt.subplots()
ax.plot(oldiid, oldenergybefore, 'x')
ax.plot(oldiid, oldenergy, 'o')
ax.plot(newiid, newenergybefore, '+')
ax.plot(newiid, newenergy, '*')
ax.grid()
#ax.set_xlim(1,1000)
# modify the y axis limits shown below.
ax.set_ylim(-175,-155)
ax.set_xlabel('structure update', fontsize=20)
ax.set_ylabel('energy (eV)', fontsize=20)
plt.show()





코스털리츠 교수 by 바죠

코스털리츠 교수



"한국의 기초과학 연구 잠재력이 높다고 생각합니다. 삼성, LG 등이 중심이 된 응용과학도 훌륭합니다. 다만 한국의 젊은 연구자들을 만나면서 이들이 경력과 미래에 대해 지나친 걱정을 한다는 것을 느꼈습니다. 자신이 하고 싶은 연구 자체를 즐기고, 심각하게 생각하지 않았으면 좋겠습니다."


"노벨상 수상은 95%가 운이었습니다. 적절한 시간·장소·사람(Right Place, Right Time, Right People)'이 있었기에 가능했습니다."


"연구를 즐기면서 새로운 것을 찾고자 도전했습니다. 인내력을 갖고 미지의 세계에 한발 한발 다가서는 것이 좋았습니다. 불확실성 속 연구에 도전하고, 결과를 주시했습니다."


"학구적인 세계에는 은퇴 연령이 없습니다. 물론 예전 젊었을 때처럼 활동적이지 못하고 천천히 연구를 수행할 수 밖에 없을 것입니다. 하지만 여전히 새로운 것을 생각하는 것이 즐겁습니다. 앞으로도 연구를 지속할 계획입니다."







matplotlib tutorial [Python] by 바죠

matplotlib tutorial

파이썬을 사용하는 중대한 이유중의 하나는 바로 그림 그리기이다. 단순히 그림 그리기를 넘어서 숨어있는 것이 있다.
그것은 바로 라이선스 구입 비용이다. 라이선스 구입 비용은 결단코 만만하지 않다. 크지도 않은 규모 직장을 생각해 보자. 적당한 규모의 단체라고 가정해도 쉽게 1억 정도는 각오해야만한다. 그것도 매년 지불해야만 하는 것이다. 이것은 명백한 고통이다. 어쩌면 파이썬을 배우기 전까지는 계속되는 고통일지도 모른다.

따라서, 현실적으로 모든 연구기관에서, 장기적으로 matplotlib 모듈을 이용한 그림 그리기는 매우 중요한 기술이 되어 버렸다.
파이썬 컴퓨터 언어를 배우는 것은 평생 발목을 잡을 수 있는 하나의 문제를 슬기롭게 해결하는 효과로 이어진다.

라이선스 문제를 넘어서도 마찬가지이다.
컴퓨터 시뮬레이션을 완료할 경우, 많은 경우, 그림으로 데이터를 설명해야만 하는 경우가 많다.
이 때, 파이썬은 그 능력을 발휘하고도 남는다. 얻어진 데이터를 추출하고, 원하는 식으로 편집하고 그림을 그릴 수 있게 해준다.

파이썬 언어의 강점은 매우 다양한 프로그램의 인풋자체를 프로그램 형식으로 넣을 수 있게 한다.
통상의 언어에서는 매우 간단한 인풋만 처리하여 문제가 되지 않는다.
하지만, 인터프리터 형식을 취하고 있는 파이썬 언어의 경우, 실제 계산과 별도로 프로그램의 인풋을 프로그램 형식으로 넣어줄 수 있다. 물론, 프로그램 언어를 알지 못할 경우는 무용지물이다.



matplotlib를 활용한 예제들을 보자.

단순한 파이썬의 자료형 list를 이용한 그림 그리기
numpy를 이용한 그림 그리기
미리 준비된 파일로부터 데이터를 직접 읽어서 그림 그리기
linear vs log
log vs linear
log vs log
2x1, 2x2 판넬 그림 그리기
웹페이지 자료를 읽어서 그림 그리기  http://incredible.egloos.com/7415000
3차원 그림 그리기
애니메이션 [데이터 업데이트 방식]

재대로 된 많은 예제들은 아래의 URL에서 찾을 수 있다. 아주 다양한 그림들을 볼 수 있다.

예제 소스 코드를 마우스로 복사하여 vi 에디터에 붙여 넣기를 할 때 옵션 설정이 중요하다.
:set paste 
옵션을 활용해야 제대로 복사할 수 있다. copy-paste 를 정확히 수행하기 위한 옵션 설정이다. 

가장 핵심이 되는 것은 리스트 두 개를 선언하는 것이다. 이들을 이용하면 쉽게 xy plot을 만들 수 있다.
첫번째 리스트가 x값들이되고 두번째 리스트가 y값들이 된다.
응용하면 파일에서 데이터를 읽어들여서 두 개의 리스트를 채우는 것이 가능하다. 이렇게 리스트들을 만들 수 있으면 준비된 데이터를 그림으로 그릴 수 있다.

예제에 따라서는 numpy를 사용하고, array를 사용할 경우가 있다.
asarray()함수를 잘 사용하면 된다.

-------------------------------------------------------------------------------------------------------------------

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mathtext as mathtext
iid=[]
volume=[]
energy=[]
kount=0
with open("csa.out1", 'r') as afile:
     for line in afile:
         if(len(line.split()) == 11 and line.split()[3] == 'outcar'):
             iid.append(int(line.split()[0]))
             volume.append(float(line.split()[1]))
             energy.append(float(line.split()[2]))
             kount=kount+1

#print kount
plt.rc('text', usetex=True)
plt.rc('font', family='serif')
fig, ax = plt.subplots()
ax.plot(volume, energy, 'o', ms=5, lw=2, alpha=0.7, mfc='orange')
ax.grid()
ax.set_xlim(500,1000)
ax.set_ylim(-175,-150)
ax.set_xlabel('volume (\AA$^3$)', fontsize=20)
ax.set_ylabel('energy (eV)', fontsize=20)
plt.show()

-------------------------------------------------------------------------------------------------------------------

import numpy as np
import matplotlib.pyplot as plt
# Example data
t = np.arange(0.0, 1.0 + 0.01, 0.01)
s = np.cos(4 * np.pi * t) + 2

plt.rc('text', usetex=True)
plt.rc('font', family='serif')
plt.plot(t, s)

plt.xlabel(r'\textbf{time} (s)')
plt.ylabel(r'\textit{voltage} (mV)',fontsize=16)
plt.title(r"\TeX\ is Number "
          r"$\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!",
          fontsize=16, color='gray')
# Make room for the ridiculously large title.
plt.subplots_adjust(top=0.8)

plt.savefig('tex_demo')
plt.show()

-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------








------------------------------------------------------------------------------------------------------------------
Sentdex --> 저자
matplotlib tutorial 동영상 강의 시리즈:


------------------------------------------------------------------------------------------------------------------


"""
A simple example of an animated plot
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()

x = np.arange(0, 2*np.pi, 0.01)
line, = ax.plot(x, np.sin(x))


def animate(i):
    line.set_ydata(np.sin(x + i/10.0))  # update the data
    return line,


# Init only required for blitting to give a clean slate.
def init():
    line.set_ydata(np.ma.array(x, mask=True))
    return line,

ani = animation.FuncAnimation(fig, animate, np.arange(1, 200), init_func=init,
                              interval=25, blit=True)
plt.show()

------------------------------------------------------------------------------------------------------------------

데이터를 시간순으로 업데이트할 수 있다면, 그 데이터를 이용해서 애니메이션을 만들 수 있다.
example.txt 파일을 시간에 따라서 읽는다. 읽을 때마다 내용이 다르면 다른 그림이 그려진다.


------------------------------------------------------------------------------------------------------------------

3D plot 예제는 아래와 같이 간단하다.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1)

plt.show()

------------------------------------------------------------------------------------------------------------------


from mpl_toolkits.mplot3d.axes3d import Axes3D
from matplotlib import cm
#from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()

ax = fig.add_subplot(1, 2, 1, projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet,
        linewidth=0, antialiased=False)
ax.set_zlim3d(-1.01, 1.01)

#ax.w_zaxis.set_major_locator(LinearLocator(10))
#ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f'))

fig.colorbar(surf, shrink=0.5, aspect=5)

from mpl_toolkits.mplot3d.axes3d import get_test_data
ax = fig.add_subplot(1, 2, 2, projection='3d')
X, Y, Z = get_test_data(0.05)
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)

plt.show()

------------------------------------------------------------------------------------------------------------------


import matplotlib.pyplot as plt
import numpy as np

np.random.seed(19680801)
data = np.random.randn(2, 100)

fig, axs = plt.subplots(2, 2, figsize=(5, 5))
axs[0, 0].hist(data[0])
axs[1, 0].scatter(data[0], data[1])
axs[0, 1].plot(data[0], data[1])
axs[1, 1].hist2d(data[0], data[1])

plt.show()

------------------------------------------------------------------------------------------------------------------


import numpy as np
import matplotlib.pyplot as plt

# Data for plotting
t = np.arange(0.01, 20.0, 0.01)

# Create figure
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)

# log y axis
ax1.semilogy(t, np.exp(-t / 5.0))
ax1.set(title='semilogy')
ax1.grid()

# log x axis
ax2.semilogx(t, np.sin(2 * np.pi * t))
ax2.set(title='semilogx')
ax2.grid()

# log x and y axis
ax3.loglog(t, 20 * np.exp(-t / 10.0), basex=2)
ax3.set(title='loglog base 2 on x')
ax3.grid()

# With errorbars: clip non-positive values
# Use new data for plotting
x = 10.0**np.linspace(0.0, 2.0, 20)
y = x**2.0

ax4.set_xscale("log", nonposx='clip')
ax4.set_yscale("log", nonposy='clip')
ax4.set(title='Errorbars go negative')
ax4.errorbar(x, y, xerr=0.1 * x, yerr=5.0 + 0.75 * y)
# ylim must be set after errorbar to allow errorbar to autoscale limits
ax4.set_ylim(ymin=0.1)

fig.tight_layout()
plt.show()

------------------------------------------------------------------------------------------------------------------



두 가지 서로 다른 y 축 스케일을 사용할 경우:


import numpy as np
import matplotlib.pyplot as plt

# Create some mock data
t = np.arange(0.01, 10.0, 0.01)
data1 = np.exp(t)
data2 = np.sin(2 * np.pi * t)

fig, ax1 = plt.subplots()

color = 'red'
ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp', color=color)
ax1.plot(t, data1, color=color)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis

color = 'blue'
ax2.set_ylabel('sin', color=color)  # we already handled the x-label with ax1
ax2.plot(t, data2, color=color)
ax2.tick_params(axis='y', labelcolor=color)

fig.tight_layout()  # otherwise the right y-label is slightly clipped
plt.show()

------------------------------------------------------------------------------------------------------------------

아래에 표시된 것들은 그림을 그릴 때 알아 두면 편리한 전문 용어들이다.
title
legend
major tick label
minor tick label
x axis label
y axis label
major tick
minor tick
grid
line
markers
spines

../../_images/anatomy.png



1 2 3 4 5 6 7 8 9 10 다음

최근 포토로그