Now Loading ...
-
Matplotlib & Seaborn
Matplotlib
파이썬 시각화 라이브러리로 matlab을 참고하여 제작함.
주로 논문에서 figure를 작성할때 사용함.
pyplot
빠르고 간단하게 그래프를 그릴때 사용
OOP-style
구체적으로 요소들을 손봐서 그래프를 그릴때 사용
pyplot
아래 3개와 같이 기본적인 형이 존재하며 추가적인 속성들을 변경하여 그래프를 그린다.
단일 plot 생성
{% highlight python %}
plt.figure()
plt.plot()
plt.show()
{% endhighlight %}
단일 plot에 그래프들 겹치기
{% highlight python %}
plt.figure()
plt.plot()
plt.plot()
plt.show()
{% endhighlight %}
다중 plot 작성
{% highlight python %}
plt.figure()
plt.subplot(,,)
plt.subplot(,,)
plt.show()
{% endhighlight %}
다음과 같은 데이터가 있을때
{% highlight python %}
x = [“data1”, “data2”, “data3”, “data4”]
y = [111, 156, 487, 445]
z = [50, 549, 450, 42]
{% endhighlight %}
아래와 같은 그래프들을 그릴 수 있으며
{% highlight python %}
plt.bar(, , *arg)
plt.barh(, , *arg)
plt.plot(, , *arg)
plt.scatter(, , *arg)
{% endhighlight %}
아래와 같은 옵션들을 사용이 가능하다
{% highlight python %}
plt.figure(figsize=(10,5))
plt.plot(x,y, label=”plot”, width=0.2, color=”red”, marker=”^”)
plt.title(“Title”, fontdict={‘fontsize’: 10}, loc=”center”)
plt.xlabel(“menu”, fontdict={‘fontsize’: 10}, loc=”left”)
plt.ylabel(“data”, fontdict={‘fontsize’: 10}, loc=”bottom”)
plt.legend(loc=”upper right”)
plt.yticks([1,2,5,50,100,200])
plt.ylim(0, 1000)
plt.grid(alpha=1, color=”red”, linewidth=10)
{% endhighlight %}
Seaborn(Statisical Data Visualization library based on Matplotlib)
Matplotlib를 참고하여 제작하였으나 파이썬의 라이브러리에 더 친화적이다.
pandas의 dataframe을 사용하는데 용이함
기본적인 세팅은 plt와 같으며 아래와 같이 제공하는 데이터를 불러올 수 있다.
{% highlight python %}
data = sns.load_dataset(“penguins”)
{% endhighlight %}
NaN 데이터는 아래와 같이 정리가 가능하며
{% highlight python %}
data = data.dropna()
data.isnull()
data[data.isnull().any(axis=1)]
{% endhighlight %}
plt외에도 아래와 같은 세팅도 가능하다.
{% highlight python %}
sns.set_palette(“bone”)
{% endhighlight %}
히스토그램
{% highlight python %}
sns.histplot(data=data, x=”body_mass_g”, bins=15, hue=”species”, multiple=”stack”)
{% endhighlight %}
밀도표
{% highlight python %}
sns.displot(data=data, kind=”kde”, x=”body_mass_g”, hue=”species”, col=”island”)
{% endhighlight %}
막대그래프
confidence interval(Default: 에러영역)를 가짐
{% highlight python %}
sns.barplot(data=data, x=”species”, y=”body_mass_g”, hue=”sex”, ci=”sd”)
sns.barplot(data=data, x=”body_mass_g”, y=”species”)
{% endhighlight %}
갯수표
{% highlight python %}
sns.countplot(data=data, x=”sex”)
{% endhighlight %}
박스 그래프
outlier를 확인할 수있음
{% highlight python %}
sns.boxplot(data=data, x=”sex”, y=”bill_depth_mm”)
{% endhighlight %}
violin 그래프
분포를 확인하는데 효과적임
sns.violinplot(data=data, x=”species”, y=”bill_depth_mm”)
라인 그래프
경향성과 confidence interval(Default: 에러영역)를 가짐
{% highlight python %}
sns.lineplot(data=data, x=”body_mass_g”, y=”bill_depth_mm”)
{% endhighlight %}
포인트 그래프
경향성과 confidence interval(Default: 에러영역)를 가짐
{% highlight python %}
sns.pointplot(data=data, x=”body_mass_g”, y=”bill_depth_mm”)
{% endhighlight %}
분산도 그래프
{% highlight python %}
sns.scatterplot(data=data, x=”body_mass_g”, y=”bill_depth_mm”)
{% endhighlight %}
페어 그래프
numeric value들의 비교표들 모음
{% highlight python %}
sns.pairplot(data=data, hue=”species”)
{% endhighlight %}
히트맵 그래프
상관관계를 색상으로 나타냄
상관계수 파악을 위해 corr matrix 생성하여 만듬
{% highlight python %}
corr = data.corr(numeric_only = True)
sns.heatmap(data=corr, square=True, cmap=”Blues”, annot=True, fmt=”.4f”)
{% endhighlight %}
PYTHON
/
Module
· 2023-09-01
-
멀티 스레드와 멀티 프로세스
threading&multiprocessing
threading
스레드를 늘려서 다른 코드들이 동시에 작동하는것 처럼 만들어주는 라이브러리
class threading.Thread(target=None, name=None, args=(), kwargs={}, *, daemon=None) ***
스레드 생성을 하는 클래스선언
target 매개변수는 스레드에 함수를 할당할 수 있다.
name 매개변수는 스레드에 이름을 할당할 수 있다.
args 매개변수는 스레드에 가변 매개변수들을 할당할 수 있다.
kwargs 매개변수는 스레드에 키워드 가변 매개변수들을 할당할 수 있다.
demon 매개변수는 True/false를 받으며 스레드를 데몬 스레드로 만들어서 메인스레드와 운명을 같이 하게 된다.
.start() ***
스레드 객체의 작동 메서드(.run() 메서드를 작동시킨다.)
.run()
스레드 서브 클래스를 만들때 추가적으로 작동 하고 싶은것을 선언할 수있다.
.join(timeout=None) ***
스레드가 종료 될때까지 이후의 코드를 작동하지 않는다.
timeout 매개변수는 스레드에 시간제한을 줄 수 있으며, 시간제한을 초과하면 스레드를 멈춰줘야한다.
.is_alive()
스레드가 작동중인지 확인 할 수 있으며, 작동시 True를 반환한다.
파이썬의 스레드는 하나의 프로세스에서 여러개의 스레드를 병렬 처리한다. 이때 공유되는 자원들을 동시에 변형가하면 충돌을 발생해 무시될 수 있다. 다음에 소개 할 threading.Lock() 클래스는 이를 해결해준다.
class threading.Lock() ***
스레드의 락 기능을 선언하는 클래스
.acquire(blocking=True, timeout=- 1) ***
락 기능이 작동중인지 작동중이지 않은지 수 있는 메서드.
blocking 매개변수가 True이면 락을 작동(코드 멈춤)하고 True를 반환하고, False이면 락을 작동시키지 않고(코드 진행) 추후에 True/False를 반환합니다.(default: true)
.release() ***
스레드의 락을 해제하며 해제된 스레드에서 작동시 런타임 오류발생.
with구문을 활용하여 acquire()과 release()를 한번에 관리가능하다.
.locked()
스레드가 잠겨있으면 True반환.
락을 사용하는데 A함수와 B함수를 사용하고 A함수가 B함수를 재사용하는 재귀형식의 스레드활용시에는 acquire의 사용에 있어 오류를 발생할 수 있는데 이때 사용하는것이 RLock이다.
class threading.RLock()
스레드의 락 기능을 선언하는 클래스
.acquire(blocking=True, timeout=- 1)
락 기능이 작동중인지 작동중이지 않은지 수 있는 메서드.
blocking 매개변수가 True이면 락을 작동(코드 멈춤)하고 True를 반환하고 재사용시에 1을 반환한다. False이면 락을 작동시키지 않고(코드 진행) 추후에 True/False를 반환합니다.(default: true)
.release()
스레드의 락을 해제하며 해제된 스레드에서 작동시 런타임 오류발생.
with구문을 활용하여 acquire()과 release()를 한번에 관리가능하다.
.locked()
스레드가 잠겨있으면 True반환.
이외에도 많은 함수들이 존재하지만 주로 사용하는 함수만 정리했으며 추가적인 자료는 아래를 참고한다.
원문
{% highlight python %}
from threading import Thread
def subthread():
worker = Thread(target=subthread) # worker에 서브쓰레드 할당
worker.daemon = True # 메인쓰레드가 종료될때 sub도 종료됨(선택)
worker.start() # worker 실행
worker.join() # worker가 끝날때까지 대기(선택)
{% endhighlight %}
---
## **multiprocessing**
---
프로세스를 늘려서 다른 코드들을 동시에 작동시켜주는 라이브러리
multiprocessing의 경우 threading보다 더 다양한 클래스와 메서드들을 가지고 있다.
> **class multiprocessing.Pool(processes=None)** \***
> * 멀티 프로세스중 초기 지정한 프로세스수를 활용하는 클래스선언
> * **processes** 매개변수는 멀티프로세스에서 사용할 프로세스의 갯수를 나타내며 os.cpu_count()를 활용하면 나내 컴퓨터의 최대 프로세스수를 알 수있다. 최대치를 넘는 프로세스는 오류를 유발할 수 있다.
{% highlight python %}
def subprocess():
if __name__ == '__main__':
with Pool(5) as p:
print(p.map(subprocess, ))
{% endhighlight %}
> **class multiprocessing.Process()** \***
> * 멀티 프로세스중 스레드와 유사한 작동방식을 가지며 각각의 프로세스를 관리하는 클래스선언
> [참조](/study/pythonModule/1_threading&multiprocessing#threading)
{% highlight python %}
import multiprocessing as mp
def subprocess():
if __name__ == "__main__":
worker = mp.Process(target=subprocess, args=(...)) # worker에 서브프로세스 할당
worker.daemon = True # 메인쓰레드가 종료될때 sub도 종료됨(선택)
worker.start() # worker 실행
mp.current_process() # PID값을 반환해줌(선택)
worker.is_alive() # PID값을 반환해줌(선택)
worker.terminate() # 강제종료(선택)
worker.join() # worker가 끝날때까지 대기(선택)
{% endhighlight %}
> **class multiprocessing.Queue(maxsize=0)** \***
> * 멀티 프로세스중 프로세스수간 FIFO 데이터 전송을 위한 클래스선언
> * **maxsize** 매개변수는 큐의 최대사이즈를 입력받으며 0은 제한없음을 의미한다.
>
> **.get()** \***
> * 큐에 있는 값을 하나 받아온다.
>
> **.put()** \***
> * 큐에 값을 하나 넣는다.
> **class multiprocessing.Pipe(duplex=None) return(conn1, conn2)** \***
> * 멀티 프로세스중 프로세스수간 한쌍으로 데이터 전송을 위한 클래스선언
> * **duplex** 매개변수는 True일 경우 양방향 통신 False일 경우 단방향 통신(conn1: reciver, conn2: sender)으로 활용된다.
>
> **conn.send()** \***
> * 파이프에 값을 넣는다.
>
> **conn.recv()** \***
> * 파이프에서 값을 받아온다.
> **class multiprocessing.Lock()** \***
> * 락을 관리하는 멀티 프로세스중 스레드 락과 유사한 작동방식을 가지며 각각의 프로세스를 관리하는 클래스선언
> [참조](/study/pythonModule/1_threading&multiprocessing#threading)
> **class multiprocessing.Manager()** \***
> * 멀티 프로세스의 자원을 안전하게 관리하기 위한 클래스선언
> * 다음과 같은 지원을 한다.(더 있음)
> * .list()
> * .dict()
> * .Lock()
> * .RLcok()
> * .Array()
이외에도 많은 함수들이 존재하지만 주로 사용하는 함수만 정리했으며 추가적인 자료는 아래를 참고한다.
[원문](https://docs.python.org/ko/3/library/multiprocessing.html)
PYTHON
/
Module
· 2023-08-29
Touch background to close