728x90

Streamlit App Dockerize

Streamlit App은 다양한 클라우드 플랫폼(AWS, GCP, Google 등)에 배포가 가능하며, 앱을 컨테이너화 하여 여러 클라우드 플랫폼에 배포할 수 있다.

Prerequisites

실행할 App을 다운로드 합니다.
소스는 Streamlit에서 제공하는 샘플 Repository를 활용합니다.

git clone https://github.com/streamlit/streamlit-example.git .

Dockerfile 만들기

# Base 이미지
FROM python:3.12-slim

# 2. 작업 디렉토리를 /app으로 설정
WORKDIR /app

# 3. 현재 디렉토리의 requirements.txt 파일을 컨테이너의 /app으로 복사
COPY requirements.txt /app/

# 4. requirements.txt에 명시된 패키지 설치
RUN pip3 install -r requirements.txt

# 5. 실행할 streamlit_app.py를 컨테이너 /app으로 복사
COPY streamlit_app.py /app/

# 6. 컨테이너가 수신할 포트 오픈
EXPOSE 8501

# 7. 컨테이너 헬스 체크
HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health

#8. 실행될 컨테이너 구성
ENTRYPOINT [ "streamlit", "run", "streamlit_app.py", "--server.port=8501", "--server.address=0.0.0.0" ]

Streamlit 버전 1.10.0 이상에서는 Streamlit 앱을 Linux 배포판의 루트 디렉터리에서 실행할 수 없습니다. 따라서 WORKDIR은 루트가 아닌 별도 디렉토리를지정해야 합니다. (예. /app)
(참고) github Issue:5239

Docker image 빌드

생성한 Dockerfilestreamlit 이미지 이름으로 빌드합니다.

docker build -t streamlit .

docker images 로 생성된 이미지 를 확인합니다.

REPOSITORY  TAG       IMAGE ID       CREATED         SIZE
streamlit   latest    bb9ac485406e   2 minutes ago   634MB

Docker 컨테이너 실행

컨테이너의 포트 8501을 서버의 8501 포트에 게시합니다.

docker run -p 8501:8501 streamlit

출력된 URL로 접속합니다.

Collecting usage statistics. To deactivate, set browser.gatherUsageStats to False.

  You can now view your Streamlit app in your browser.

  URL: http://0.0.0.0:8501

(결과)


Reference

728x90
반응형
728x90

Streamlit

Streamlit은 데이터 애플리케이션을 빠르고 쉽게 만들 수 있도록 설계된 파이썬 기반의 오픈 소스 라이브러리입니다. 이 도구는 데이터 시각화와 머신 러닝 모델의 프로토타이핑 및 배포를 단순화하여 사용자가 복잡한 데이터 작업을 쉽게 수행할 수 있게 합니다.

Streamlit의 특징

  1. 코드 중심의 접근 방식: Streamlit 애플리케이션은 순수 파이썬 코드로 작성되므로 별도의 웹 프론트엔드 기술 없이도 데이터 앱을 만들 수 있습니다.
  2. 간편한 사용법: 몇 줄의 코드만으로도 인터랙티브한 요소(슬라이더, 버튼, 차트 등)를 추가할 수 있으며, 앱의 업데이트와 실행이 매우 빠릅니다.
  3. 빠른 프로토타이핑: 데이터 과학 프로젝트의 초기 아이디어를 빠르게 시각화하고 공유할 수 있어 프로토타이핑과 반복 개발 과정이 용이합니다.
  4. 확장성: Streamlit 앱은 컨테이너화하여 쉽게 배포할 수 있고, 다양한 데이터 소스와 라이브러리를 지원합니다.

장점

  1. 빠른 개발 속도: 복잡한 웹 앱을 빠르게 개발할 수 있으며, 데이터 과학자가 웹 개발에 대한 깊은 지식 없이도 사용할 수 있습니다.
  2. 쉬운 배포: Streamlit Sharing을 통해 GitHub에서 직접 앱을 호스팅하고 공유할 수 있습니다.
  3. 강력한 커뮤니티 지원: 오픈 소스 프로젝트로서 활발한 커뮤니티 지원과 지속적인 업데이트가 이루어집니다.
  4. 인터랙티비티: 사용자 입력에 반응하는 동적인 데이터 애플리케이션을 쉽게 만들 수 있습니다.

단점

  1. 고급 사용자 정의 제한: Streamlit은 사용의 용이성에 중점을 두기 때문에, 복잡한 사용자 인터페이스나 고도로 맞춤화된 앱 디자인을 구현하기 어려울 수 있습니다.
  2. 성능 문제: 대규모 데이터셋이나 복잡한 연산을 처리하는 앱의 경우, 성능 저하가 발생할 수 있습니다.
  3. 웹 개발 기능의 제한: 전통적인 웹 개발 툴셋에 비해 제공하는 웹 개발 기능이 제한적일 수 있습니다. 복잡한 웹 애플리케이션을 구축하려는 경우 다른 프레임워크를 고려해야 할 수도 있습니다.

Streamlit App 실행하기

# streamlit 라이브러리설치
pip install streamlit

# Streamlit으로 실행
streamlit run your_script.py

# Python 모듈로 실행 → Python으로 실행하는 경우, PyCharm과 같은 IDE를 구성할 때 유용할 수 있습니다.
python -m streamlit run your_script.py 

Data 표시방법

Streamlit에서 Data (tables, arrays, data frames 등)를 표시하는 방법은 magic CLI 와 st.write() 를 활용하는 방법이 있다.
st.write()는 텍스트에서 테이블까지 다 작성이 가능하다.

① magic command line

Streamlit은 변수나 데이터가 선언되어 있으면 자동으로 st.write()를 사용하여 앱을 빌드 합니다.

###
# first app
# DataFrame 으로 테이블을 생성
###

import streamlit as st
import pandas as pd

df = pd.DataFrame({
    'first column': [1, 2, 3, 4],
    'second column': [10, 20,30, 40]
})

df

② st.write()

st.write()는 텍스트, 데이터, 차트 등 arguments 에 따라 작성 할 수 있다.

import streamlit as st
import pandas as pd

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]
}))

데이터를 표시하는 데 사용할 수 있는 st.dataframe() 및 st.table()과 같은 함수를 사용하여 다양한 style을 적용 할 수 있다.

DataFrame에 Style 적용하기

① DataFrame에 Highligt 적용

import streamlit as st
import pandas as pd
import numpy as np

df = pd.DataFrame(
    np.random.randn(10, 20),    # 표준 정규분포 확률을 따르는 난수를 생성
    columns = ('col %d' % i for i in range(20))
)

# 열의 최대값에 하이라이트 표시
st.dataframe(df.style.highlight_max(axis=0))

(결과)

② 정적 테이블 생성 : st.table()

import streamlit as st
import pandas as pd
import numpy as np

df = pd.DataFrame(
    np.random.randn(10, 20),    # 표준 정규분포 확률을 따르는 난수를 생성
    columns = ('col %d' % i for i in range(20))
)

st.table(df)

③ 라인 차트 그리기 : st.line_chart()

import streamlit as st
import pandas as pd
import numpy as np

df = pd.DataFrame(
    np.random.randn(20, 3),    # 표준 정규분포 확률을 따르는 난수를 생성
    columns = ['a', 'b', 'c']
)

st.line_chart(df)

(결과)

⓸ 지도 그리기 : st.map()

Numpy를 사용하여 샘플 데이터를 생성하고 샌프란시스코 지도에 그려보겠습니다.

import streamlit as st
import pandas as pd
import numpy as np

df = pd.DataFrame(
    np.random.randn(1000, 2) / [50, 50] + [37.76, -122.4],
    columns=['lat', 'lon']
)

st.map(df)

(결과)

⑤ Widgets

st.slider(), st.button() , st.selectbox() 와 같이 위젯을 추가하여 표현할 수있다.

import streamlit as st
import pandas as pd
import numpy as np

st.markdown("### 1. slider widget")
x = st.slider('x')
st.write(x, '제곱은', x * x)


st.markdown("### 2. text input widget")
st.text_input("Your name", key="name")

# You can access the value at any point with:
st.session_state.name

st.markdown("### 3. checkbox widget")
if st.checkbox('Once you checked, dataframe is displyed'):
    chart_data = pd.DataFrame(
       np.random.randn(20, 3),
       columns=['a', 'b', 'c'])

    chart_data

st.markdown("### 4. selectbox widget")
df = pd.DataFrame({
    'first column': [1, 2, 3, 4],
    'second column': [10, 20, 30, 40]
    })

option = st.selectbox(
    'Which number do you like best?',
     df['first column'])

'You selected: ', option

⓺ Layout

import streamlit as st
import time

# 사이드바에 selctbox 구성하기
add_selectbox = st.sidebar.selectbox(
    'How would you like to be contacted?',
    ('Email', 'Home phone', 'Mobile phone')
)

# 사이드바에 slide 구성하기
add_slider = st.sidebar.slider(
    'Select a range of values',
    0.0, 100.0, (25.0, 75.0)
)

# 위젯을 나란히 배치하기
left_column, right_column = st.columns(2)
left_column.title('Left Column')
left_column.button('Press me')

right_column.title('Right Column')
with right_column:
    chosen = st.radio(
        'Sorting hat',
        ("Gryffindor", "Ravenclaw", "Hufflepuff", "Slytherin")
    )
    st.write(f"You are in {chosen} house!")

# Progress Bar
st.title('Progress Bar')
'Starting a long computation...'
latest_iteration = st.empty()
bar = st.progress(0)

for i in range(100):
    latest_iteration.text(f'Iteration {i+1}')
    bar.progress(i+1)
    time.sleep(0.1)

'...and now we\'re done!'

멀티페이지 App 만들기

Streamlit 1.10 이상 부터는 멀티 페이지를 구성할 수 있습니다.

서브페이지 구성 제약

  • Sub 페이지의 기본 구성은 pages 디렉토리에 위치해야 합니다.
  • 각 Streamlit 앱의 이름은 파일 이름에 따라 결정되므로 앱 이름을 변경하려면 파일 이름을 변경해야 합니다. (이모티콘 추가도 가능)
  • 각 Python 파일의 시작 부분에 숫자를 추가하여 페이지 순서를 지정할 수 있습니다. 파일 이름 앞에 1을 추가하면 Streamlit은 해당 파일을 목록의 첫 번째로 배치합니다.
  • 각 페이지에는 파일 이름으로 정의된 고유한 URL이 있습니다.

멀티페이지 구성

멀티페이지는 메인이 되는 Home.py 와 내부의 1_page_one.py, 2_Page_two.py, 3_🥉_three.py 3개의 서브페이지로 이동 되도록 구성합니다.

페이스 구성 소스트리

Home.py     # "streamlit run"으로 실행할 메인 파일
└─── pages/
    └─── 1_page_one.py 
    └─── 2_Page_two.py 
    └─── 3_🥉_three.py

① 기본 사이드바 탐색 숨기기

파일명을 기준으로 사이드바 메뉴를 별도 이름으로 지정할 수 있도록 변경합니다.
사용자 정의 탐색 메뉴를 생성할 때 를 사용하여 기본 사이드바 탐색을 숨겨야 합니다. 소스코드 루트 .streamlit/config.toml작업 디렉터리에 다음 파일을 추가합니다 .

[client]
showSidebarNavigation = false

② 사이드 바 메뉴 구성하기

메뉴트리 구성을 위해서는 각 Page 별로 메뉴를 동일하게 구성합니다.

# 공통 사이드바
st.sidebar.page_link("home.py", label="Home")
st.sidebar.page_link("pages/1_page_one.py", label="🥇 Page One")
st.sidebar.page_link("pages/2_Page_two.py", label="🥈 Page Two")
st.sidebar.page_link("pages/3_🥉_three.py", label="🥉 Page Three")
st.sidebar.markdown("---")

(결과)


Reference

728x90
반응형
728x90

파이썬에서 PDF 파일을 읽어와서 엑셀 파일로 변환하기 위해서는 몇 가지 라이브러리를 사용해야 합니다.
주로 PyPDF2 또는 pdfplumber를 사용하여 PDF 파일을 읽고, pandas를 사용하여 데이터를 가공하여 엑셀 파일로 저장할 수 있습니다.

pdfplumber 는 PDF 파일의 각 문자, 사각형, 선에 대한 상세한 정보를 제공하고 텍스트와 표를 쉽게 추출할 수 있는 라이브러리로, 데이터 분석 및 자동화 작업에 유용한 도구입니다.

https://github.com/jsvine/pdfplumber

1. 라이브러리 설치

먼저 pdfplumber 라이브러리를 설치합니다.(pip, anaconda, pipenv 환경 구성에 따라 설치 합니다.)

1. pip
pip install pdfplumber

2. anaconda
conda install -c conda-forge pdfplumber

3. pipenv
pipenv install pdfplumber

2. 테이블 추출하기

pdf 를 추출하기 위해 pdfplumber.open(file) 함수를 이용하여 pdf를 추출합니다.

import os  
import pdfplumber  
import pandas as pd  


file_path = os.getcwd()+"/contents/"  
pdf_name = "file.pdf"  
pdf_file_path = file_path + pdf_name  

# PDF 파일 열기  
pdf = pdfplumber.open(pdf_file_path)  

pages = pdf.pages  
print("총 페이지 수 : ", len(pages))  

tables = []  

# 1. 페이지에서 표 데이터 추출하기  
for each in pages:  
    table = each.extract_tables()  
    tables.extend(table)

3. 데이터 프레임으로 변환

# 2. 데이터 프레임으로 변환  
df = pd.DataFrame(tables[1:], columns=[tables[0]])  

# 3. 데이터프레임을 엑셀 파일로 저장  
excel_file_path = file_path + "file.xlsx"  
df.to_excel(excel_file_path, index=False, engine='openpyxl')

print(f'DataFrame이 {excel_file_path}에 저장 되었습니다.')

openpyxl 라이브러리가 설치되어 있지 않은 경우, 설치 하여 주세요.

728x90
반응형
728x90

Window에 설치된 Python 가상환경을 Linux로 옮겨보겠습니다.

Anaconda 가상환경은 운영체제끼리는 같아야 yml 기반으로 가상환경 생성 과정에서 에러가 생기지 않습니다.

  • 일부 OS 플랫폼에서는 사용할 수 없는 패키지가 있습니다.
    • Linux에서만 사용할 수 있는 패키지와 Windows에서만 사용할 수 있는 패키지가 있어 빌드버전은 OS에 따라 다를 수 있습니다.

Conda does not check architecture or dependencies when installing from a spec file. To ensure that the packages work correctly, make sure that the file was created from a working environment, and use it on the same architecture, operating system, and platform, such as linux-64 or osx-64.

1. 가상환경 Export

빌드 버전의 OS종속성을 제거하기 위해 --no-build 옵션을 사용하여 가상환경을 추출합니다.

conda env export -n "가상환경이름" --no-build > envrionment.yml

2. 가상환경 생성

Linux 환경에서 Anaconda 가상환경을 생성합니다.

conda create -n "가상환경이름" python=3.9

3. 가상환경 업데이트

생성한 가상환경을 추출한 environment.yml로 업데이트 해줍니다.

conda env update -n "가상환경 이름" -f environment.yml

가상환경 업데이트를 하면 다음과 같이 찾을 수 없는 패키지가 확인 됩니다.

Output:

Solving environment: failed

ResolvePackageNotFound:
  - vs2015_runtime=14.27.29016
  - wincertstore=0.2
  - vc=14.2

해당 항목들을 anaconda 패키지 리스트에 확이하면, 다음과 같이 Window OS 종속된 항목으로 Linux에 지원되지 않는 패키지 임을 확인 할 수 있습니다.

window에만 설치 가능한 패키지를 삭제하고 다시 가상환경을 업데이트 합니다.

conda env update -n "가상환경 이름" -f environment.yml

Reference

  1. https://stackoverflow.com/questions/55895751/using-a-conda-env-created-on-windows-for-linux
  2. https://ahelpme.com/software/anaconda/conda-export-environment-and-conda-import-environment/
  3. https://techhelpnotes.com/python-conda-environment-from-windows-to-linux/
  4. https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html
728x90
반응형
728x90

Window 환경의 CMD(명령 프롬프트)에서는 conda 명령어가 잘 동작하지만 powershell에서는 명령어가 동작하지 않는 문제가 있습니다.

아래와 같이 하면 PowerShell에서도 사용할 수 있습니다.

1. init powershell in Conda

# 1. ****init powershell in Conda****
conda init powershell

# 2. 현재 설정된 정책을 확인
Get-ExecutionPolicy

# Result
PS C:\WINDOWS\system32> Get-ExecutionPolicy
ByPass

2. 실행 정책 변경

아래 명령어로 정책을 변경합니다.

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

Get-ExecutionPolicy 으로 Unrestricted 결과가 나오면 정책이 변경이 완료됩니다.

3. Restart Powershell

기타

PowerShll에서 (base) 를 지우고 싶은 경우,

conda config --set auto_activate_base false

PowerShll에서 (base) 를 나타나게 하고 싶은 경우,

conda config --set auto_activate_base true
728x90
반응형
728x90

과학용으로 국한되어 사용되고 있던 python의 발전으로 웹개발까지 여러 방면으로 활용되고 있습니다.
python IDE Tool로 가장 많이 활용되고 있는 Tool 중 하나는 Pycharm 입니다.

1. Pycharm 다운로드

pycharm은 무료버전인 community버전과, 유료인 Professional 버전이 있습니다.

Professional 버전을 다운로드 받습니다. 🌴Pycharm 다운로드

2. Pycharm 설치

설치 마법사에 따라 설치를 진행합니다. Next 를 클릭합니다.

설치 파일 경로를 지정하고 Next 를 클릭합니다.

옵션 값들은 모두 선택하고 Next 를 클릭합니다.

윈도우 시작메뉴 등록하고 Install 을 진행합니다.

모든 설치가 끝나면 윈도우를 재시작 합니다.

3. 라이선스 인증

Pycharm을 실행하고, 구매한 라이선스 인증 코드를 넣으면 설치가 완료됩니다.

4. Pycharm 컴파일 설정(Interpreter)

Setting 메뉴에서 Python Interpreter를 선택합니다.

Anaconda로 설정한 가상환경을 Interpreter로 설정합니다.
생성된 가상환경은 설치된 Anaconda폴더의 envs 폴더에 있습니다.

[참고] Anaconda Python 가상 환경 생성 하기

설정이 완료되면 Interpreter화면 가상환경으로 생성한 패키지 목록을 확인할 수 있습니다.

728x90
반응형
728x90

Anaconda 가상환경 생성

1. Aaconda 최신 버전으로 업데이트

가상환경 생성전에 Anaconda를 먼저 최신 버전으로 업데이트 합니다.

conda update conda

2. 설치된 가상 환경 목록 출력

conda env list

# conda environments:
#
base                  *  C:\Anaconda3

*표시는 현재 활성화된 가상환경을 의미

3. 새로운 가상 환경 생성

python 3.8 버전의 새로운 가상 환경을 생성합니다.

conda create --name [가상환경이름] python=3.8

conda create --name mypython python=3.8

4. 설치된 가상 환경 활성화 하기

conda activate [가상환경이름]

# To activate this environment, use
#
#     $ conda activate mypython

conda env list로 생성된 가상환경 리스트를 확인하고 *표시가 되어 있는 환경이 활성화된 가성환경입니다.

[참고] 가상환경 비활성화 하기

# To deactivate an active environment, use
#
#     $ conda deactivate
728x90
반응형
728x90

아나콘다(Anaconda)란

  • 아나콘다(Anaconda)는 수학과 과학 분야에서 사용되는 여러 패키지들을 묶어 놓은 파이썬 배포판으로서 SciPy, Numpy, Matplotlib, Pandas 등을 비롯한 많은 패키지들을 포함하고 있습니다.
  • Anaconda는 특히 최근에 데이타 사이언스와 머신 러닝 분야에서 파이썬을 사용하기 위해 기본적으로 설치하는 기본 환경 입니다.
  • 패키지 버전들은 conda를 통해서 관리됩니다.

아나콘다(Anaconda) 설치 파일 다운로드

다음 링크를 클릭하여 아나콘다 다운로드 페이지로 이동합니다.
https://www.anaconda.com/products/individual-d#Downloads

Anaconda Installers 항목에서 'Windows'의 파일을 다운로드 합니다.

아나콘다(Anaconda) 설치

다운로드 받은 설치 파일을 더블 클릭하여 설치를 시작합니다. 설치화면에서 Next 버튼을 클릭합니다.

라이선스 동의화면에서 I Agree 를 눌러 다음 설치과정을 진행합니다.

설치 대상은 모든 유저가 사용되는 것으로 선택합니다.

설치 경로를 지정합니다.

환경변수로 'Anaconda` 설치 환경도 추가합니다.

설치가 되면 Next 버튼을 클릭합니다.

PyCharm에 대한 광고화면에서 Next 버튼을 클릭합니다.

최종 설치 종료화면에서 체크박스는 해제 후 Finish를 클릭하여 설치를 완료합니다.

설치 확인

PowerShell을 열어서 conda -V 입력하여 설치 결과를 확인합니다.

Reference

  1. https://wikidocs.net/77491
  2. https://ko.wikipedia.org/wiki/%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4_(%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EB%B0%B0%ED%8F%AC%ED%8C%90)
728x90
반응형
728x90

파이썬을 설치하는 방법은 아래와 같습니다.

1. PowerShell 실행

PowerShell을 실행하여 python 입력합니다.

2. Python 설치

실행된 마켓플레이스에서 설치합니다.

3. Python 실행 확인

PowerShell에서 python --version을 입력합니다.
다음과 같이 설치된 버전을 확인 할 수 있습니다.

728x90
반응형

+ Recent posts