반응형

"""_summary_
얕은 복사(shallow copy)
    list의 슬라이싱을 통한 새로운 값을 할당해봅니다.
    아래의 결과와 같이 슬라이싱을 통해서 값을 할당하면 새로운 id가 부여되며, 서로 영향을 받지 않습니다
"""

print("\n","*" * 30, "\n   얕은 복사(shallow copy) \n","*" * 30) 

a = [1, 2, 3]
b = a[:]
print(" a = ", a)
print(" b = ", b)

print(" id(a) : ", id(a)) #다른 주소
print(" id(b) : ", id(b))

print(" a == b : ", a == b)
print(" a is b : ", a is b)

b[0] = 5

print(a)
print(b)

""" 
    하지만, 이러한 슬라이싱 또한 얕은 복사에 해당합니다.
    리스트안에 리스트 mutable객체 안에 mutable객체인 경우 문제가 됩니다.
    id(a) 값과 id(b) 값은 다르게 되었지만, 그 내부의 객체 id(a[0])과 id(b[0])은 같은 주소를 바라보고 있습니다
"""
a = [[1,2],[3,4]]
b = a[:]
print(" id(a) : ", id(a)) #다른 주소
print(" id(b) : ", id(b))

print(" id(a[0]) : ",id(a[0])) #같은 주소
print(" id(b[0]) : ",id(b[0]))


"""깊은 복사(deep copy)
    깊은 복사는 내부에 객체들까지 모두 새롭게 copy 되는 것입니다.
    copy.deepcopy메소드가 해결해줍니다
"""
print("\n","*" * 30, "\n   deepcopy \n","*" * 30)  

import copy

a = [[1,2],[3,4]]
b = copy.deepcopy(a)
a[1].append(5)

print(" a : ", a)
print(" b : ", b)

print(" id(a) : ", id(a)) #다른 주소
print(" id(b) : ", id(b))

 

반응형
반응형

[python] 얕은 복사(shallow copy)와 깊은 복사(deep copy)

 

https://wikidocs.net/16038

 

12. 얕은 복사(shallow copy)와 깊은 복사(deep copy)

## 1. mutable과 immutable 객체 객체에는 mutable과 immutable 객체가 있습니다. ❈ 객체 구분 표 class 설명 구분 l…

wikidocs.net

 

1. mutable과 immutable 객체

객체에는 mutable과 immutable 객체가 있습니다.

❈ 객체 구분 표

class설명구분

list mutable 한 순서가 있는 객체 집합 mutable
set mutable 한 순서가 없는 고유한 객체 집합 mutable
dict key와 value가 맵핑된 객체, 순서 없음 mutable
bool 참,거짓 immutable
int 정수 immutable
float 실수 immutable
tuple immutable 한 순서가 있는 객체 집합 immutable
str 문자열 immutable
frozenset immutable한 set immutable

일반 user가 작성한 class도 대부분 mutable 한 객체 입니다.
immutable한 클래를 만들기 위해서는 특별한 방법이 필요합니다.

https://stackoverflow.com/questions/4828080/how-to-make-an-immutable-object-in-python

  • REPL에서 mutable과 immutable에서 구분해봅시다. 몇가지만 해봅니다.
  • list 는 mutable 입니다.
  • 변수 a 에 1, 2, 3을 원소로 가지는 리스트를 할당하였습니다.
  • id는 변수의 메모리 주소값을 리턴해줍니다.
  • a의 첫번째 원소를 변경한 후에도 id값은 변경없이 a의 변수가 변경되었습니다.
>>> a = [1, 2, 3]
>>> id(a)
4393788808
>>> a[0] = 5
>>> a
[5, 2, 3]
>>> id(a)
4393788808
  • set도 mutable입니다.
  • |= set에서 or 연산입니다. 합집합이 됩니다.
  • 값은 변경되었으나 id는 변함없습니다.
>>> x = {1, 2, 3}
>>> x
{1, 2, 3}
>>> id(x)
4396095304
>>> x|={4,5,6}
>>> x
{1, 2, 3, 4, 5, 6}
>>> id(x)
4396095304
  • str은 immutable 입니다.
  • s 변수에 첫번째 글자를 변경 시도하면 에러가 발생합니다.
  • s에 다른 값을 할당하면, id가 변경됩니다. 재할당은 애초에 변수를 다시할당하는 것이므로 mutable과 immutable과는 다른 문제입니다. list또한 값을 재할당하면 id가 변경됩니다.
>>> s= "abc"
>>> s
'abc'
>>> id(s)
4387454680
>>> s[0]
'a'
>>> s[0] = 's'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> s = 'def'
>>> s
'def'
>>> id(s)
4388970768

2. 변수 간 대입

2-1 mutable한 객체의 변수 간 대입

  • list의 얕은 복사를 확인 해봅니다.
  • b 에 a를 할당하면 값이 할당되는 것이 아니라 같은 메모리 주소를 바라봅니다.
  • b를 변경하면 같이 a도 바뀝니다.
  • mutable한 다른 객체 또한 똑같은 현상이 나타납니다.
>>> a = [1, 2, 3]
>>> b = a # shallow copy
>>> b[0]= 5
>>> a
[5, 2, 3]
>>> b
[5, 2, 3]
>>> id(a)
4396179528
>>> id(b)
4396179528

2-2 immutable한 객체의 변수간 대입

  • str 문자열의 얕은 복사를 확인해봅니다.
  • list와 똑같이 b를 a에 할당하면 같은 메모리 주소를 바라보게 됩니다.
  • 하지만 b에 다른 값을 할당하면 재할당이 이루어지며 메모리 주소가 변경됩니다.
  • 고로 a와 b는 다른 값을 가집니다.
>>> a = "abc"
>>> b = a
>>> a
'abc'
>>> b
'abc'
>>> id(a)
4387454680
>>> id(b)
4387454680
>>> b = "abcd"
>>> a
'abc'
>>> b
'abcd'
>>> id(a)
4387454680
>>> id(b)
4396456400

3. 얕은 복사(shallow copy)

  • list의 슬라이싱을 통한 새로운 값을 할당해봅니다.
  • 아래의 결과와 같이 슬라이싱을 통해서 값을 할당하면 새로운 id가 부여되며, 서로 영향을 받지 않습니다.
>>> a = [1,2,3]
>>> b = a[:]
>>> id(a)
4396179528
>>> id(b)
4393788808
>>> a == b
True
>>> a is b
False
>>> b[0] = 5
>>> a
[1, 2, 3]
>>> b
[5, 2, 3]
  • 하지만, 이러한 슬라이싱 또한 얕은 복사에 해당합니다.
  • 리스트안에 리스트 mutable객체 안에 mutable객체인 경우 문제가 됩니다.
  • id(a) 값과 id(b) 값은 다르게 되었지만, 그 내부의 객체 id(a[0])과 id(b[0])은 같은 주소를 바라보고 있습니다.
>>> a = [[1,2], [3,4]]
>>> b = a[:]
>>> id(a)
4395624328
>>> id(b)
4396179592
>>> id(a[0])
4396116040
>>> id(b[0])
4396116040
  • 재할당하는 경우는 문제가 없습니다. 메모리 주소도 변경되었습니다.
>>> a[0] = [8,9]
>>> a
[[8, 9], [3, 4]]
>>> b
[[1, 2], [3, 4]]
>>> id(a[0])
4393788808
>>> id(b[0])
4396116040
  • 하지만, a[1] 에 값을 변경하면 b[1]도 따라 변경됩니다.
>>> a[1].append(5)
>>> a
[[8, 9], [3, 4, 5]]
>>> b
[[1, 2], [3, 4, 5]]
>>> id(a[1])
4396389896
>>> id(b[1])
4396389896
  • copy 모듈의 copy 메소드 또한 얕은 복사입니다.
>>> import copy
>>> a = [[1,2],[3,4]]
>>> b = copy.copy(a)
>>> a[1].append(5)
>>> a
[[1, 2], [3, 4, 5]]
>>> b
[[1, 2], [3, 4, 5]]

4. 깊은 복사(deep copy)

  • 깊은 복사는 내부에 객체들까지 모두 새롭게 copy 되는 것입니다.
  • copy.deepcopy메소드가 해결해줍니다.
>>> import copy
>>> a = [[1,2],[3,4]]
>>> b = copy.deepcopy(a)
>>> a[1].append(5)
>>> a
[[1, 2], [3, 4, 5]]
>>> b
[[1, 2], [3, 4]]




https://suwoni-codelab.com/python%20%EA%B8%B0%EB%B3%B8/2018/03/02/Python-Basic-copy/

 

반응형
반응형

https://www.facebook.com/pyconkorea/

 

로그인 또는 가입하여 보기

Facebook에서 게시물, 사진 등을 확인하세요.

www.facebook.com

 

[python] 파이콘 2024  - https://2024.pycon.kr/

파이썬 코리아! 2024 이벤트 공지
파이토닉의 순간!
2024년 10월 25~27일 - 수원컨벤션센터
파이썬 사용의 크고 작은 순간을 함께 나누는 파이썬 코리아 창립 10주년 기념 행사에 함께하세요.
이 특별한 이벤트에서 파이썬의 즐거움과 감동을 느껴보세요.
예상 사항:
파이썬 전문가들의 토크 및 워크샵
동료 Pythonistas와 네트워킹 기회
오픈 소스 프로젝트 및 데모
그리고 훨씬 더!
Python 커뮤니티와 연결하고 최고의 소식을 배울 수 있는 이 기회를 놓치지 마세요.
 

 

2024] 파이콘 한국! 올해 슬로건과 일자를 공개합니다!
 
"Pythonic Moments!"
 
2024.10.25 ~ 27 - 수원 컨벤션센터
파이썬을 사용하는 작고 큰 활동과 순간을 공유하고
그 과정에서 느껴지는 재미와 감동의 경험을
올해 10주년을 맞이하는 파이콘 한국에서 만들어볼까요?
더욱 특별한 파이콘 한국 10주년의 순간에
여러분과 함께하길 기대합니다.
SNS를 구독하여 이어질 행사 정보를 가장 빠르게 받아보세요!
 

 

반응형
반응형

파이썬 가상환경과 아나콘다 가상환경은 프로젝트 간의 종속성 충돌을 피하고, 각 프로젝트별로 필요한 패키지를 독립적으로 관리할 수 있도록 도와줍니다. 아래는 각각의 가상환경 사용법을 설명합니다.
 



이와 같이 Python의 `venv` 모듈과 Anaconda의 `conda` 명령어를 사용하여 가상환경을 만들고 관리할 수 있습니다. 가상환경을 통해 프로젝트 간의 종속성 문제를 효과적으로 관리할 수 있습니다.

반응형
반응형

Python에서 현재 설치된 라이브러리(패키지) 목록을 확인하는 방법은 여러 가지가 있습니다. 
주로 pip 패키지 관리자를 사용하여 설치된 패키지 목록을 조회합니다. 
아래는 다양한 방법으로 현재 설치된 라이브러리 목록을 확인하는 방법을 설명합니다.

1. pip list 명령어 사용

가장 일반적인 방법은 터미널 또는 명령 프롬프트에서 pip list 명령을 사용하여 설치된 모든 패키지 목록을 조회하는 것입니다.


pip list




위 명령을 실행하면 설치된 모든 패키지의 목록이 출력됩니다.


2. pip freeze 명령어 사용

pip freeze 명령은 pip list와 유사하게 현재 환경에 설치된 패키지와 그 버전을 출력합니다. 이 명령은 보통 requirements.txt 파일을 생성하는 데 사용됩니다.


pip freeze




3. Python 스크립트를 통한 확인

Python 스크립트 내에서 pkg_resources 모듈을 사용하여 현재 설치된 패키지를 조회할 수 있습니다.

import pkg_resources

# 현재 설치된 패키지 목록 조회
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version) for i in installed_packages])

for package in installed_packages_list:
    print(package)




4. conda list (conda 환경에서)

만약 Anaconda 또는 Miniconda와 같은 conda 패키지 관리자를 사용하고 있다면, conda list 명령을 사용하여 현재 환경에 설치된 패키지 목록을 확인할 수 있습니다.

conda list



위 방법 중 하나를 선택하여 현재 Python 환경에 설치된 모든 패키지 목록을 확인할 수 있습니다. 

주로 pip list 명령이 가장 일반적이고 널리 사용되는 방법입니다.

반응형
반응형

파이썬은 문자열을 다루는 다양한 메서드를 제공하여 문자열을 효과적으로 조작하고 처리할 수 있습니다. 이러한 메서드들은 문자열 객체에 대해 호출되는 내장 함수들입니다. 아래는 파이썬에서 자주 사용되는 문자열 메서드들을 한글로 설명한 것입니다:

1. str.upper(), str.lower()

  • upper(): 문자열의 모든 문자를 대문자로 변환합니다.
  • lower(): 문자열의 모든 문자를 소문자로 변환합니다.
python
Copy code
s = "Hello World" print(s.upper()) # 출력: "HELLO WORLD" print(s.lower()) # 출력: "hello world"

2. str.strip(), str.lstrip(), str.rstrip()

  • strip(): 문자열의 앞뒤로 있는 공백 문자(스페이스, 탭, 개행)를 제거합니다.
  • lstrip(): 문자열의 왼쪽에 있는 공백 문자를 제거합니다.
  • rstrip(): 문자열의 오른쪽에 있는 공백 문자를 제거합니다.
python
Copy code
s = " Hello " print(s.strip()) # 출력: "Hello" print(s.lstrip()) # 출력: "Hello " print(s.rstrip()) # 출력: " Hello"

3. str.split(), str.splitlines()

  • split(): 문자열을 지정된 구분자를 기준으로 분리하여 부분 문자열들의 리스트를 반환합니다 (기본 구분자는 공백).
  • splitlines(): 여러 줄로 구성된 문자열을 각 줄로 분리하여 리스트를 반환합니다.
python
Copy code
s = "사과,오렌지,바나나" print(s.split(',')) # 출력: ['사과', '오렌지', '바나나'] multiline_string = "첫째 줄\n둘째 줄\n셋째 줄" print(multiline_string.splitlines()) # 출력: ['첫째 줄', '둘째 줄', '셋째 줄']

4. str.join()

  • join(): 반복 가능한(iterable) 객체(예: 리스트)의 요소들을 문자열로 결합하여 하나의 문자열로 반환합니다.
python
Copy code
words = ['사과', '오렌지', '바나나'] print(', '.join(words)) # 출력: "사과, 오렌지, 바나나"

5. str.startswith(prefix), str.endswith(suffix)

  • startswith(): 문자열이 지정된 접두사(prefix)로 시작하는지 여부를 확인합니다.
  • endswith(): 문자열이 지정된 접미사(suffix)로 끝나는지 여부를 확인합니다.
python
Copy code
s = "안녕하세요" print(s.startswith("안녕")) # 출력: True print(s.endswith("하세요")) # 출력: True

6. str.replace(old, new), str.find(substring)

  • replace(): 문자열에서 지정된 구간의 모든 부분 문자열을 다른 문자열로 대체합니다.
  • find(): 문자열에서 지정된 부분 문자열의 첫 번째 등장 위치(인덱스)를 반환합니다.
python
Copy code
s = "안녕하세요" print(s.replace("하세요", "반갑습니다")) # 출력: "안녕반갑습니다" print(s.find("녕")) # 출력: 1 (녕의 위치는 인덱스 1)

7. str.isdigit(), str.isalpha(), str.isalnum(), str.isspace()

  • isdigit(): 문자열의 모든 문자가 숫자인지 여부를 확인합니다.
  • isalpha(): 문자열의 모든 문자가 알파벳(글자)인지 여부를 확인합니다.
  • isalnum(): 문자열의 모든 문자가 알파벳 또는 숫자인지 여부를 확인합니다.
  • isspace(): 문자열의 모든 문자가 공백 문자인지 여부를 확인합니다.
python
Copy code
s1 = "12345" s2 = "안녕" s3 = "안녕123" s4 = " " print(s1.isdigit()) # 출력: True print(s2.isalpha()) # 출력: True print(s3.isalnum()) # 출력: True print(s4.isspace()) # 출력: True

이것들은 파이썬에서 자주 사용되는 문자열 메서드들 중 일부입니다. 파이썬의 문자열 조작 기능은 매우 다양하므로 모든 메서드를 완벽하게 소개할 수는 없지만, 이러한 기본적인 메서드들을 숙지하고 활용하여 문자열을 효과적으로 다룰 수 있습니다.

반응형
반응형

[python] 생성된 엑셀을  Frequency 순으로,  동일 Frequency 이면 단어순으로 정렬

import pandas as pd
from collections import Counter
import re

def read_text_file(file_path):
    """텍스트 파일을 읽고 내용을 반환"""
    with open(file_path, 'r', encoding='utf-8') as file:
        return file.read()

def count_word_frequencies(text):
    """주어진 텍스트에서 단어 빈도수 계산"""
    words = re.findall(r'\b\w+\b', text.lower())
    return Counter(words)

def save_frequencies_to_excel(frequencies, output_file):
    """단어 빈도수를 엑셀 파일로 저장"""
    # 판다스 DataFrame으로 변환
    df = pd.DataFrame(list(frequencies.items()), columns=['Word', 'Frequency'])
    # 빈도수 내림차순, 단어 알파벳순 오름차순으로 정렬
    df = df.sort_values(by=['Frequency', 'Word'], ascending=[False, True])
    # 데이터를 엑셀 파일로 저장
    df.to_excel(output_file, index=False)

# 파일 경로
file_path = 'example.txt'
output_excel = 'word_frequencies.xlsx'

# 파일 읽기
text = read_text_file(file_path)

# 빈도수 분석
frequencies = count_word_frequencies(text)

# 엑셀로 저장
save_frequencies_to_excel(frequencies, output_excel)

print("단어 빈도수가 정렬되어 엑셀 파일로 저장되었습니다.")
  1. DataFrame 변환 및 정렬: pandas.DataFrame을 사용하여 빈도수 데이터를 DataFrame으로 변환한 후, sort_values 메소드를 사용하여 먼저 Frequency 열에 대해 내림차순으로, 동일한 빈도를 가진 항목에 대해서는 Word 열을 기준으로 오름차순 정렬합니다. ascending=[False, True] 파라미터는 각각 Frequency와 Word 열에 적용됩니다.
  2. 엑셀 파일 저장: 정렬된 데이터를 .xlsx 형식의 파일로 저장합니다.
반응형
반응형

[python] 웹 기반 파이썬 데이터 앱 쉽게 다루는 스트림릿( Streamlit ) 간단 예제

 

 

https://www.itworld.co.kr/news/334135

 

파이썬 애플리케이션의 공통적인 문제는 다른 사람들과 앱을 공유할 방법이다. 개발자들은 이 문제를 해결하기 위해 웹 인터페이스를 사용해서 UI를 통해 앱 기능을 제공하는 경우가 많다. 그러나 이 방법은 애플리케이션 UI가 웹 구성요소와 자연스럽게 맞을 때 가장 효과적이다. 예를 들어 데이터 탐색 앱은 이와 같은 방식으로 작동할 수 있지만, 이상적인 상호작용을 위해서는 프론트엔드 구성요소가 자바스크립트로 작성돼 있어야 한다.
 
스트림릿(Streamlit)은 이와 같은 많은 문제를 동시에 해결하는 것을 목표로 하는 파이썬 라이브러리다. 개발자는 스트림릿을 사용해서 풍부한 인터랙티브 구성요소 라이브러리를 기반으로 구축된 웹 기반 프론트엔드를 갖춘 파이썬 앱을 만들 수 있다.
 
그렇게 만들어진 애플리케이션은 파이썬 웹 앱이 있는 어디에나 호스팅할 수 있다. 무엇보다 좋은 점은 좋은 결과를 얻기 위해 반드시 HTML, 자바스크립트 또는 CSS에 대해 알 필요는 없다는 것이다. 스트림릿의 메서드와 클래스를 사용하는 파이썬 코드를 작성하기만 하면 된다.
 

간단한 스트림릿 예제

스트림릿 프로그램은 선언적 스타일로 작성된다. 객체는 코드에서 선언된 순서대로 웹 페이지에 나타난다. 구성요소와의 상호작용이 발생할 때마다 프로그램이 위에서부터 아래로 다시 실행되면서 웹 페이지를 다시 로드해 변경 사항을 반영한다.
 
다음과 같은 간단한 스트림릿 앱 예제를 살펴보자.
 

import streamlit as st

st.title("Take input from the user")
user_input = st.text_input("Say something:")

if user_input:
    st.write("You said:", user_input)

 
스트림릿으로 이 코드를 실행할 경우(streamlit run 명령 사용) 결과는 다음과 같다.

  1. 'Take input from the user'라는 제목의 웹페이지가 나타난다.
  2. 그 아래에 'Say something:'이라는 레이블이 붙은 텍스트 상자가 나타난다.
  3. 사용자가 이 텍스트 상자에 뭔가를 입력하고 Enter를 누르면 'You said:'라는 레이블의 텍스트 상자 아래에 사용자가 입력한 내용이 표시된다.

 
이러한 HTML 위젯과 모든 위젯 동작은 스트림릿에 의해 자동으로 생성되고 관리된다. 여기에는 앱 상태가 포함된다(예를 들어 user_input 상자에서 if 문은 사용자가 뭔가를 입력할 때만 실행됨).
 
스트림릿에서는 아래 예제보다 훨씬 더 많은 HTML 구성요소를 사용할 수 있다. 라텍스(LaTex) 형식 텍스트, 보케(Bokeh) 차트, 카메라 입력, 그 외에도 많은 구성요소가 네이티브로 제공된다.
 

더 복잡한 스트림릿 예제

더 복잡한 스트림릿 애플리케이션으로는 스트림릿 문서의 예제가 있다. 이 앱은 시간별로 그룹화된 맨해튼의 우버 승차 및 하차 지점 일반 데이터 집합을 로드한 다음 막대형 차트에 시간을 표시하고 인터랙티브 지도에 위치를 표시한다.
 
전체 프로그램 길이는 약 30줄에 불과하다. 워낙 짧아서 복사한 다음 파일에 붙여넣고 직접 실행할 수 있다. 스트림릿이 다양한 작업을 수행하는 방식을 보여주는 용도로도 좋은 앱이다.
 

스트림릿 앱의 데이터

스트림릿은 데이터 소스를 쉽게 다루기 위한 많은 네이티브 동작을 제공하며 데이터 로드 및 작업을 위한 주 형식으로 데이터프레임을 사용한다.
 
다른 파이썬 프로젝트에서 사용할 수 있는 모든 소스에서 데이터를 로드할 수 있으며, 이 과정을 돕기 위한 편의 기능도 제공된다. 예를 들어 이전 섹션에서 다룬 데이터 시각화 앱은 판다스(Pandas)를 사용해 원격 URL에서 CSV 파일을 로드하고 데이터프레임으로 변환한다. 데이터 로드와 형식 설정은 편리하지만 특히 네트워크 연결을 통해 로드하는 경우 속도가 느리고 많은 시간이 걸릴 수 있다. 또한 이 프로그램은 사용자가 동작을 수행한 후 매번 다시 로드된다.
 
스트림릿은 이 문제를 해소하기 위해 load_data() 함수를 래핑하는 데 사용되는 @st.cache_data 데코레이터를 제공한다. 또한 @st.cache_data는 애플리케이션이 여러 번 다시 로드되는 사이 데이터를 캐시하므로 처음 실행할 때만 로드된다.
 

스트림릿 앱의 상태 관리

스트림릿은 설계상 각 사용자 상호작용마다 애플리케이션이 강제로 다시 로드되므로 스트림릿 앱에서 지속적인 상태를 유지하기가 간단치 않을 수 있다. 텍스트 박스의 데이터가 실행 간 상태를 어떻게 처리하는지는 앞에서 살펴봤다. 개별 컨트롤의 상태와는 별개로 상태를 만들고 관리하려면 스트림릿의 내장된 session_state 객체를 사용해야 한다.
 
streamlit.session_state는 여러 실행 간에 지속되는 키-값 저장소다(실질적으로 사전). 스트림릿 프로그램이 처음 시작될 때 이 저장소는 빈 상태이므로 액세스하기 전에 키가 있는지 여부를 테스트해야 한다.
 

import streamlit as st

# create the key "sayings" if it doesn't exist
if 'sayings' not in st.session_state:
    st.session_state['sayings'] = []

# for convenience, make a reference
sayings = st.session_state['sayings']

st.title("Take input from the user")
user_input = st.text_input("Say something:")

if sayings:
    # display "sayings" if it has inputs from previous runs
    st.write("You previously said:", sayings)

if user_input:
    # add to "sayings" if we get an input
    sayings.append(user_input)
    st.write("You said:", user_input)


참고로 session_state에 저장되는 모든 데이터는 해당 애플리케이션을 실행하는 스트림릿 서버의 수명 동안만 지속된다. 서버가 멈추면 데이터는 손실된다. 더 적극적으로 지속되는 데이터를 원한다면 데이터베이스 또는 레디스와 같은 인메모리 캐시 등의 솔루션이 필요하다.
 

스트림릿 앱을 위한 데이터 위젯

지금까지 스트림릿 페이지에서 구현 가능한 다양한 요소로 간단한 텍스트 레이블 또는 HTML 컨트롤부터 지도, 차트, 오디오/비디오 재생과 같은 더 정교한 요소, 그리고 채팅 상자와 같은 고급 상호작용(예를 들어 LLM과의 상호작용 용도)까지 살펴봤다.
 
데이터 표시 또는 상호작용을 위한 스트림릿 컨트롤은 가장 일반적인 사용 사례를 위한 데이터 렌더링을 처리하도록 이미 사전 설정돼 있다. 예를 들어 스트림릿 웹 위젯은 데이터프레임을 소스로 사용할 수 있고 데이터프레임을 적절한 열 레이블과 함께 자동으로 표시하므로 수동으로 이를 추가할 필요가 없다.
 
스트림릿에는 폭넓은 일반적인 데이터 위젯 라이브러리가 기본적으로 포함된다. 사용자 커뮤니티에는 더 많은 구성요소가 만들어져 공유되며, 간단한 pip install을 통해 사용할 수 있다.
 

스트림릿 앱 배포

스트림릿 애플리케이션은 본질적으로 파이썬 웹 애플리케이션이므로 네트워크로 연결된 파이썬 앱과 거의 같은 방식으로 배포할 수 있다. 빠르고 간편한 방법은 컴퓨터에서 앱을 실행하고 할당된 포트를 통해 앱에 대한 액세스 권한을 제공하는 것이다.
 
고급 배포 역시 다른 파이썬 웹 앱과 동일한 패턴을 따른다. 즉, 도커, 쿠버네티스 또는 다양한 일반적인 클라우드 서비스를 사용하는 것이다. AWS와 마이크로소프트 애저의 스노우플레이크 사용자는 스노우플레이크 데이터 저장소를 기반으로 하는 스트림릿 앱을 배포할 수도 있다. 마지막으로, 스트림릿은 자체적인 커뮤니티 클라우드(Community Cloud) 호스팅 서비스를 제공한다. 다만 이는 스트림릿 앱을 위한 편의 기능일 뿐 필수 항목은 아니다.

반응형

+ Recent posts