파이썬만으로 웹을 할 수 있는 "Streamlit"을 시도해 본 적이 없어요.

12295 단어 Python

개시하다


이 글은 JSL(일본 시스템 기술 연구) 애드벤트 칼렌다어 205-Qita의 20일째 기사다.
매년 한 사람이 주년을 기념하는 관례가 있다.
이 나이가 되어도 막막한 나날을 보내고 있다.
평소에 개발 작업을 안 한 지 오래돼서 뭘 쓸까 고민이 많았어요.
며칠 전 참가한 "모두의 학습회"에서 닉키 씨가 소개한 Streamlit 재미있을 것 같아서 제가 사용했던 얘기를 할게요.

이른바 Streamlit


Streamlit는 파이톤 코드로 전방 (웹) 을 쓸 수 있는 프로그램 라이브러리입니다. 서비스인 것 같습니다.

이번 결승점

  • Streamlit의 공식 강좌를 진행하면서Connpass API
    나는 그것으로 최근의 이벤트 데이터를 표시하고 싶다.
  • 다양한 버전

  • Python:3.8.0
  • Streamlit:3.9.2
  • Pandas:1.1.5
  • 설치하다.

    $ pip install streamlit
    

    튜토리얼을 가지고 놀아봐요.


    Hello App

    $ streamlit hello
    
    프로젝트를 작성합니다.
    브라우저가 시작되면 다음 아날로그 사이트를 구축할 수 있습니다.

    streamlit 프로젝트 제작


    강좌에 따르면 다음과 같다streamlit와 각종 프로그램 라이브러리의 importstreamlit run [ファイル名] 브라우저를 엽니다.
    import streamlit as st
    
    import numpy as np
    import pandas as pd
    
    

    상호 반영 확인


    제목과 판다스의 DataFrame을 이런 느낌으로 전달하면 브라우저는 서로 업데이트됩니다!
    st.title('My first app')
    
    st.write("Here's our first attempt at using data to create a table:")
    st.write(pd.DataFrame({
        'first column': [1, 2, 3, 4],
        'second column': [10, 20, 30, 40]
    }))
    

    Magic command

    write는 함수 이외에도 Magic commands의 기능을 갖추고 있으며 변수를 쓰는 것write만 함수와 같은 행위를 한다.
    df = pd.DataFrame({
      'first column': [1, 2, 3, 4],
      'second column': [110, 200, 300, 400]
    })
    
    df
    
    x=10
    
    x
    
    이런 느낌으로 고릴라 파이톤만 생성!

    Connepass API에서 데이터 가져오기


    튜토리얼을 대충 만지작거려도 많이 할 수 있기 때문에'콘나파스 API'에서 자사가 운영하는'GEEKLAB.NAGANO의 데이터를 확보해 활동 정보를 보여주려 했다.
    geeklab_eventlist.py
    import streamlit as st
    
    import pandas as pd
    import requests, io
    from datetime import datetime, date, timedelta
    from dateutil.relativedelta import relativedelta
    from PIL import Image
    
    st.title('ギークラボイベント開催一覧')
    
    image_url = 'https://connpass-tokyo.s3.amazonaws.com/thumbs/72/9d/729d521ab794e98b4427e9040e8f2fe9.png'
    image = Image.open(io.BytesIO(requests.get(image_url).content))
    st.image(image, use_column_width=True)
    
    today = datetime.today()
    startdate = datetime.strftime(today, '%Y%m')
    enddate = "201402"
    
    target_date_set = ['全件'] 
    target_date_set.append(startdate)
    
    while startdate > enddate:
      dt = datetime.strptime(startdate, '%Y%m') - relativedelta(months=1)
      startdate = dt.strftime("%Y%m")
      target_date_set.append(startdate)
    
    yyyymm = st.selectbox(
        'イベント開催年月',
        target_date_set
         )
    
    count = st.slider('取得件数', 0, 100, 10)
    keyword = st.text_input('キーワード', '')
    
    r = requests.get(f'https://connpass.com/api/v1/event/?series_id=2591&count={count}&ym={yyyymm}&keyword={keyword}')
    
    titles = []
    event_date_set = []
    participants = []
    owners_name = []
    
    for e in r.json()["events"]:
      titles.append(e["title"])
    
      dt = datetime.fromisoformat(e["started_at"])
      event_date_set.append(datetime.strftime(dt, '%Y/%m/%d'))
      participants.append(e["accepted"])
      owners_name.append(e["owner_display_name"])
    
    df = pd.DataFrame({
      'タイトル': titles,
      '開催日': event_date_set,
      '参加者数': participants,
      '管理者':  owners_name
    })
    df.style.set_properties(**{'text-align': 'center'})
    
    df
    
    이렇게 간단한 파이톤 코드, 여기까지 할 수 있어서 정말 좋아요!!

    제한 사항


    시도에서 주의한 제한 사항을 총결해 보세요.
  • 파일마다 같은 wiget을 정의할 수 없습니다
  • 샘플 정의 2개selectbox
  • 프로그램 설계

    https://share.streamlit.io/requirements.txt가 포함된 GiitHub 창고를 연결하면 예처리를 할 수 있습니다.
    일주일 단위로 초대 메일을 알리는 것 같은데 시간이 좀 걸려야 사용할 수 있어요.
    요청 메일을 받으면 필요한 사항만 입력하면 이런 느낌.에서 디자인됩니다.

    최후


    오랜만에 학습회에 참석해 터치해보고Streamlit,'신난다','대단하다!'이렇게 생각하는 프로그램 라이브러리를 만났다.몇 가지 제한 사항이 있지만 데이터를 빨리 볼 수 있는 좋은 메커니즘이라고 생각합니다.
    무엇보다 파이톤만 쓸 수 있는 게 좋아요.
    개인이 지속적으로 포착하는 것은 매우 고생스러운 것이기 때문에 학습회에 참가하는 중요성을 다시 한 번 깨달았다!!.이 자리를 빌려 닉키 씨에게 감사 드립니다!!

    좋은 웹페이지 즐겨찾기