ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Linux에 Jupyter Notebook 설치하기
    개발 이야기/DB, 데이터분석, AI 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과 유사한 파일이 존재하며
    # 추가한 포트가 정상적으로 추가되었다면 해당 폰트가 이 파일에 등록되어 있을겁니다.
    # 한글 출력에 문제가 있다면 이 파일을 삭제 후 코드를 다시 실행하면 한글이 잘 나올겁니다.

     

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

    반응형

    댓글 0

Designed by Tistory.