반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

가끔 보자, 하늘.

Linux에 Jupyter Notebook 설치하기 본문

개발 이야기/DB, 데이터분석, AI

Linux에 Jupyter Notebook 설치하기

가온아 2021. 11. 19. 17:58

이 글에서는 Jupyter notebook 은 CentOS7에 설치하고 사용자들은 Windows로 접근한다고 가정하겠습니다. 그리고 elasticsearch, MariaDB(or MySQL) 에 연결하여 데이터를 검색하는 것까지 확인해 보겠습니다.

1. CentOS에 Jupyter notebook 설치하기

2. Windows에서 접속하기

3. Elasticsearch, MariaDB 연결하기

+a. 그래프 그려보기

 

1. CentOS에 Jupyter notebook 설치하기

Anaconda는 파이썬에서 다양한 가상환경을 쉽게 구축할 수 있으며, 머신러이, 데이터 분석 등에 필요한 패키지들을 포함하고 있는 파이썬 배포판입니다. 우선 Anaconda를 설치합니다.

> wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-x86_64.sh

> bash Anaconda3-2021.11-Linux-x86_64.sh

> source ~/.bashrc

# elasticsearch와 DB 연결을 위한 패키지를 설치합니다.

> pip install PyMySQL

> pip install elasticsearch

(* 최신 버전 다운로드 링크 >>> 여기!!)

> mkdir work  # 작업용 폴더를 만들고 그 안에서 jupyter를 실행해야 
              # jupyter notebook의 root 디렉토리가 이 폴더로 한정되게 됩니다.

> cd work

> jupyter notebook &

> jupyter notebook --allow-root & # root 계정으로 실행할 경우

포트를 변경하지 않았다면 8888번 입니다. firewall-cmd로 8888번 접근을 허가하세요.

 

2. Windows에서 접속하기

jupyter notebook 을 실행할 때 접속 가능한 토큰이 포함된 주소를 출력합니다. 원격지라면 주소만 바꿔 접속하시면 됩니다. 서비스를 재시작하면 새로운 토큰이 발행되어 새로운 토큰값으로 재접속이 필요합니다. 만약 현재 서비스 중인 토큰값을 모른다면 서버에서 아래와 같이 확인이 가능합니다

 첫 연결 이후에는 token을 제외한 주소로도 접속이 가능합니다. 

 

3. Elasticsearch, MariaDB 연결하기

3-1. Elasticsearch 연결하기

from elasticsearch import Elasticsearch

# 보안 설정이 없다면 http_auth 옵션을 사용하지 않아도 됩니다.
es = Elasticsearch(["http://172.31.1.11:9200/"], http_auth=('jupyter','your_pw'))
res = es.search(index="logstash-2021.11.*", body = {'query':{'match_all':{}}}
print( res )

위와 같이 간단히 사용이 가능합니다. 원격지에서 접속할 경우 elasticsearch의 address 주소는 jupyter notebook이 실행되는 서버를 기준으로 ip가 작성하면 됩니다.

3-2. MariaDB( or MySQL) 연결하기

import pymysql

db = pymysql.connect(host='172.31.1.12',
                     port=3306,
                     user='jupyter',
                     password='your_passwd',
                     db='jupyter_db',
                     charset='utf8')
cur = db.cursor()
cur.execute("SELECT * from query_me")
for row in cur:
    print(row)
db.close()

역시 host는 jupyter  notebook이 실행되는 서버를 기준으로 설정하시면 됩니다.

 

+a. 그래프 그려보기

elasticsearch와 MariaDB에서 데이터를 가져와 하나의 그래프로 그린다고 가정해 보겠습니다.

import matplotlib.pyplot as plt
import seaborn as sns

.
.
.

label = ['01','02','03','04','05','06','07','08','09','10']
value1 = [175, 123, 74, 29, 45, 42, 47, 46, 45, 32]
value2 = [122, 58, 32, 14, 19, 23, 21, 20, 15, 17]

fig = plt.figure(figsize=(10,6), dpi=80)
colors = sns.color_palette('summer', len(label)) ## 바 차트 색상
xtick_label_position = list(range(len(label))) ## x축 눈금 라벨이 표시될 x좌표

ax1 = fig.add_subplot() ## axes 생성
ax1.set_xticks(xtick_label_position) ## x축 눈금 
ax1.set_xticklabels(label) ## x축 눈금 라벨
ax1.bar(xtick_label_position, value1, color=colors) ## 바차트 출력

color = 'blue'
ax2 = ax1.twinx() ## 새로운 axis 생성
ax2.plot(xtick_label_position, values2, color=color, linestyle='--', marker='o') ## 선 그래프 
ax2.tick_params(axis='y', labelcolor=color) ## 눈금 라벨 색상 지정

plt.xlabel('month', fontsize=12)
plt.title("그래프 두 개 같이 그려보기 ", fontsize=20)
plt.show()

 

만약 한글이 제대로 안나온다면...

CentOS에서는 anaconda3/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/에 한글 폰트를 복사한 후 anaconda3/lib/python3.9/site-packages/matplotlib/mpl-data/matplotlibrc 내용 중 Axes 영역에서 unicode 사용을 위해 아래 내용을 추가합니다.

axes.unicode_minus  : False

이제 jupyter notebook에서 해당 코드를 다시 실행하면 한글이 잘 나올겁니다. 만약 여전히 문제가 있다면 캐시 파일을 지운후 다시 실행해 보시기 바랍니다.

import matplotlib.font_manager as fm


font_list = fm.findSystemFonts(fontpaths = None, fontext = 'ttf')
print(font_list[:]) # 현재 설치된 폰트 리스트를 확인할 수 있습니다.

print(mpl.get_cachedir()) 
# /your home dir/.cache/matplotlib 이 출력됩니다.
# 해당 폴더에는 fontlist-v3xx.json과 유사한 파일이 존재하며
# 추가한 포트가 정상적으로 추가되었다면 해당 폰트가 이 파일에 등록되어 있을겁니다.
# 한글 출력에 문제가 있다면 이 파일을 삭제 후 코드를 다시 실행하면 한글이 잘 나올겁니다.

 

정리해두면 별거 아닌데 모를때는 한참을 해매기도 하네요. 도움이 되셨기를 바라며, 불금 즐기러 갑니다. :)

반응형