Zephyrnet Logosu

Streamlit Eğitimi: Kod Örnekleriyle Web Uygulamaları Oluşturma

Tarih:

Bu makale, Veri Bilimi Blogathon.

Akışlı

Giriş

Streamlit, HTML, CSS ve JavaScript gibi diğer ön uç teknolojilere kıyasla daha az kodlamayla veri uygulamaları oluşturmak ve dağıtmak için kullanılan açık kaynaklı bir araçtır. Veri bilimi uygulamaları oluşturmak için özel olarak tasarlanmış düşük kodlu bir araçtır.

Ayrıca Streamlit kütüphanesi, saf Python'da veri uygulamaları geliştirmek için işlevlere ve yöntemlere sahiptir.

Makaleyi üç bölüme ayıracağız: İlk bölüm sizi Streamlit'in temel API'lerine götürecek, ardından Streamlit bulut dağıtımını izleyecek ve son bölümde karayolu trafik kazalarının ciddiyetini tahmin etmek için Streamlit uygulamasını oluşturacağız. Öyleyse veri web uygulamaları oluşturmak için kolaylaştırılmış kütüphaneyi derinlemesine inceleyelim.

Streamlit Library'nin Temel API'leri

Streamlit kitaplığı, veri destekli web uygulamaları geliştirmek için widget'lar ve kullanıcı arayüzü düzeni bileşenleri sağlar. bunda

1. Metin öğeleri

Streamlit, metin içeriğini başlıklar, başlıklar, alt başlıklar, düz metin vb. biçiminde görüntülemenize olanak tanıyan özelliklere sahiptir. Metin öğeleri, web sitesindeki metin içeriğini başlıklar ve alt başlıklarla görüntülemek için kullanışlıdır. Streamlit ile metin widget'larının bazı örneklerine bakalım.

Streamlit'i st olarak içe aktar # Başlık widget'ı st.title('Bu bir başlıktır')
KOD ÇIKIŞI
# düz metin widthget st.text("Bu bir metindir")
KOD ÇIKIŞI

Kolaylaştırılmış metin öğelerini kullanarak, kapsamlı kod yazmadan metinleri, altyazıları ve hatta kod veya lateks formüllerini görüntüleyebiliriz. Lateks ve kod widget'larının örneklerini de görelim.

# Python dilinde kod widget örneği

code = '''def hello(): print("Merhaba, Streamlit!")''' st.code(code, language='python')
KOD ÇIKIŞI
# Lateks widget örneği st.latex(r''' a + ar + ar^2 + ar^3 + cdots + ar^{n-1} = sum_{k=0}^{n-1} ar^k = a left(frac{1-r^{n}}{1-r}right) ''')

2. Veri görüntüleme öğeleri

Çoğu zaman, herhangi bir veri bilimi projesinde, üzerinde çalıştığımız veri sorununa ve veri kümesinin karmaşıklığına kısa bir genel bakış sağlamak için veri kümelerini sergilememiz gerekir. Streamlit, veri bilimcilerinin veri kümelerini, tabloları ve JSON nesnelerini tek bir kod satırıyla görüntülemesine olanak tanıyan yerleşik özelliklere sahiptir.

Veri görüntüleme widget'larının örneklerine bakalım:

# pandaların veri çerçevesi nesnesini görüntülemek için
Python Kodu:

st.dataframe(df)

Akışlı

yukarıdaki kodun çıktısı

Streamlit işlevini kullanarak bir JSON nesnesini görüntülemek için bir örneğe bakalım.

Streamlit'i st st.json olarak içe aktar({ 'foo': 'bar', 'baz': 'boz', 'stuff': [ 'stuff 1', 'stuff 2', 'stuff 3', 'stuff 5', ], })
Akışlı

3. Grafik öğeleri

Streamlit, kullanıcı tarafında veri görselleştirmelerini görüntülemek için bir dizi grafik ve çizim widget'ı sağlar. Grafik widget'ları, öngörüleri görsel bir formatta görüntülemek için gerçekten kullanışlıdır. Ayrıca gösterge tablolarını geliştirmek için de kullanılır.

Streamlit, Mapbox'ın dünya görüntüleri API'lerini kullanarak coğrafi verileri görüntülemek için çizgi grafikleri, alan grafikleri, matplotlib pyplot şekil nesneleri, çizim grafikleri ve hatta harita grafikleri dahil olmak üzere birçok çizimi ve grafiği destekler. Grafik widget'larının bazı örneklerine bakalım.

# Çizgi grafik örneği

pandaları pd olarak içe aktar numpy'yi np olarak içe aktar st olarak akış ayarını içe aktar chart_data = pd.DataFrame( np.random.randn(20, 3), sütunlar=['a', 'b', 'c']) st.line_chart(chart_data )
Numpy'yi np olarak içe aktarın Plotly.figure_factory'yi ff olarak içe aktarın Streamlit'i st olarak içe aktar # Histogram verilerini ekle x1 = np.random.randn(200) - 2 x2 = np.random.randn(200) x3 = np.random.randn(200) + 2 # Verileri birlikte gruplayın hist_data = [x1, x2, x3] group_labels = ['Grup 1', 'Grup 2', 'Grup 3'] # Özel bin_size ile dağıtım grafiği oluşturun fig = ff.create_distplot( hist_data, group_labels, bin_size =[.1, .25, .5]) # Konu! st.plotly_chart(şek, use_container_width=Doğru)
Akışlı

4. Giriş widget'ları

Kullanıcıların belirli değerleri girebileceği etkileşimli bir web uygulaması geliştirmek, veri uygulamaları için çok önemlidir. Veri bilimi ve makine öğrenimi uygulamalarının çoğunun, istenen çıktılara ilişkin tahminleri bu kullanıcılara döndürmek için kullanıcılardan bazı girdiler alması gerekir.

Streamlit, metin tabanlı girişler, seçeneklerin seçimi, onay kutuları, tarih girişleri, dosya yüklemeleri, sayısal girişler, kaydırıcı girişleri ve çeşitli uygulamalar geliştirmek için kamera girişleri gibi gelişmiş girişler gibi çeşitli kullanım durumları için kullanıcılardan giriş almak için çeşitli işlevler sağlar. Giriş widget'larının bazı örneklerine bakalım.

# birden fazla seçenekten girdi almak için radyo widget'ı tür = st.radio( "En sevdiğiniz film türü nedir", ('Komedi', 'Drama', 'Belgesel')) if tür == 'Komedi': st.write(' Komediyi seçtiniz.') else: st.write("Komediyi seçmediniz.")
# Çoklu seçim widget'ının içe aktarımının st options olarak kullanımı = st.multiselect( 'En sevdiğiniz renkler nelerdir', ['Yeşil', 'Sarı', 'Kırmızı', 'Mavi'], ['Sarı', 'Kırmızı'] ) st.write('Seçtiniz:', seçenekler)

Ayrıca aynı demo web uygulamasına da göz atın: Buraya Tıkla

5. Medya ve Düzen öğeleri

Görüntü, ses ve video gibi yapılandırılmamış verilerle çalışırken medya dosyalarını kullanıcı arayüzünde görüntülemeniz gerekebilir. İşte o zaman medya widget'ları kullanışlı oluyor. Düzen widget'ları daha kullanıcı dostu bir kullanıcı arayüzü geliştirmeye yardımcı olur ve birçok kolaylaştırılmış fonksiyon kullanılarak kullanıcı arayüzünü özelleştirmek için kullanılabilir.

# PIL içe aktarımından görseller ön uçta görüntüleniyor Image image = Image.open('sunrise.jpg') st.image(image, caption='Dağlardan gün doğumu')
AKTARMA
                                                                        

Bir resmi görüntüleyen bir web uygulaması örneğine göz atabilirsiniz — Buraya Tıkla

Bu, kolaylaştırılmış işlevlerin sonu değildir; web uygulamalarını kullanıcılar için daha etkileşimli hale getirmek amacıyla grafikleri, uygulamanın durumunu, kontrol akışını ve diğer yardımcı programları göstermek için birçok başka işlev ve yönteme sahiptir.

Streamlit Community Cloud'da Uygulamaları Dağıtma Kılavuzu

Web uygulamalarını Streamlit'te dağıtmak, geleneksel uygulama dağıtımlarıyla karşılaştırıldığında çok daha kolaydır. Streamlit Cloud, uygulamaları doğrudan Github deposundan başlatır ve arka uçta yapılandırma ayarları veya uygulamanız için rota tanımlama gerektirmez.

Streamlit Community Cloud, derleme sürecini otomatikleştirir ve geliştirici müdahalesi olmadan uygulamaları dağıtır. Ayrıca Streamlit, sürekli entegrasyon ve sürekli dağıtım (CI/CD) işlem hatlarını destekler ve kod değişikliklerini proje deposundan otomatik olarak alır. Açık kaynaklı ve topluluk bulutu projesi olan Streamlit, tüm hizmetleri ücretsiz olarak sağlıyor.

Streamlit ayrıca web uygulamalarının bulutta dağıtımı sırasında oluşan hataları gidermek için derleme günlükleri de sağlar. Yaygın sorunları kolaylıkla çözmek için kapsamlı istisnalar ve hata belgeleri sağlar. Sorun devam ederse yardım için kolaylaştırılmış destek ekibiyle iletişime geçin.

Şimdi veri uygulamalarınızı kolaylaştırılmış bulutta dağıtma adımlarına bakalım.

1. Bir uygulamayı dağıtmak için çalışma alanınızın sağ üst köşesindeki “Yeni Uygulama” butonuna tıklamanız gerekir, ardından aşağıdaki pencere açılacaktır.

Akışlı
                                                                                 Resim: yazara göre

2. “Bir uygulamayı dağıt” penceresini açtıktan sonra, proje dosyalarınızın bulunduğu depoyu, proje dosyasının dalını ve son olarak uygulamanızı TEK tıklamayla dağıtmak için ana dosya yolunu seçmelisiniz!

Gördüğünüz gibi “Karayolu Trafiği Önem Derecesi” sınıflandırma uygulamasını dağıtmak için aşağıdaki depo, şube ve yol dosyalarını seçtik.

                                                                             Resim: yazara göre

Bunun dışında Streamlit, gelişmiş ayarların python sürümünü özelleştirmesine ve proje gereksinimlerinize bağlı olarak herhangi bir API anahtarını saklamasına olanak tanır.

3. Bu "Dağıt" düğmesine tıkladığınızda, uygulamayı otomatik olarak modern genel buluta dağıtacak ve uygulamayı çalıştırmak için tüm bağımlılıkları yükleyecektir. derleme sürecinin sonunda, Streamlit tarafından atanan standart URL üzerinden web portalına yönlendirileceksiniz.

Kolaylaştırılmış uygulama URL'sinin yapısı aşağıdaki gibi görünür:

https://[user name]-[repo name]-[branch name]-[app path]-[short hash].streamlit.app

Streamlit ayrıca AWS S3, BigQuery, MongoDB, MS SQL sunucusu, MySQL ve daha fazlası gibi çeşitli veritabanı kaynaklarını da destekler.

Kaynak Koduyla Kolaylaştırılmış Bir Uygulama Geliştirin, Oluşturun ve Dağıtın

Bu bölümde, trafik kazalarının ciddiyetini tahmin etmek ve ölümcül olabilecek kazaları azaltmak için kolaylaştırılmış bir web uygulaması geliştireceğiz.

Bu uygulamanın veri seti, Addis Ababa İlçesi Polis Departmanından bir yüksek lisans öğrencisi tarafından araştırma çalışmaları için toplandı. Veri kümesinde makine öğrenimi modellerini eğitmek ve test etmek için 32 özellik ve 12316 örnek vardı. Veri kümesinin kaynağı bulunabilir okuyun.

Bu makalenin kapsamı dahilinde yalnızca bir web uygulamasının geliştirilmesine ve dağıtımına yer vereceğiz. GitHub depomuza eklenecek dosyalara bakalım.

1. uygulama.py (Aerodinamik bulutta konuşlandırılacak ana yol dosyası)

2. gereksinimler.txt (uygulamanın çalışması için uygulama bağımlılıklarını yüklemek için)

3. modeli. iş kütüphanesi (çıkarım için geliştirilmiş model)

Uygulamayı çalıştırmak için kategorik kodlayıcı dosyasına ve resmine de ihtiyacımız olacak. Uygulamayı Streamlight Cloud'da dağıtmaya yönelik adım adım kılavuzu inceleyelim.

Uygulama bağımlılıklarını yüklemek için # gereksinimleri.txt dosyası

pandalar numpy streamlit scikit-learn joblib shap matplotlib ipython Yastık

2. Bir app.py dosyası oluşturun ve gerekli kitaplıkları gereksinimler.txt dosyasına göre içe aktarın ve modeli ve kategorik kodlayıcı nesnesini python dosyasına yükleyin.

# gerekli kütüphaneleri içe aktarın pandaları pd olarak içe aktarın numpy'yi np olarak içe aktarın sklearn'i içe aktarın st olarak içe aktarın iş kütüphanesini içe aktarın shap'i içe aktarın matplotlib'i IPython'dan içe aktarın PIL'den get_ipython'u içe aktarın Görüntü # modeli ve kodlayıcı nesnesini python dosyasına yükleyin. model = joblib.load("rta_model_deploy3.joblib") encoder = joblib.load("ordinal_encoder2.joblib") # kolaylaştırılmış sayfa ayarlarını yapın st.set_option('deprecation.showPyplotGlobalUse', False) st.set_page_config(page_title=" Kaza Önem Derecesi Tahmin Uygulaması", page_icon='🚧', order='wide')

3. Şimdi her uygulama özelliği için giriş seçeneklerini ayarlayın. Sahibiz 7 kategorik özellik ve 3 sayısal özellik girdi almak ve tahmini çıktı olarak almak için. Sayısal bir özellik için değerleri doğrudan uygulamanın bir sonraki bölümünde yapacağımız akışlı fonksiyon parametrelerinde ayarlayabiliriz.

#açılır menü için seçenek listesi oluşturma options_day = ['Pazar', "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"] options_age = ['18-30', '31- 50', '51 Yaş Üzeri', 'Bilinmeyen', '18 Yaş Altı'] # olaya karışan araç sayısı: 1 ila 7 arası # yaralı sayısı: 1 ila 8 arası # günün saati: 0 ila 23 arası options_types_collision = ['Araçla araç çarpışması','Yol kenarındaki nesnelerle çarpışma', 'Yayalarla çarpışma','Devrilme','Hayvanlarla çarpışma', 'Bilinmiyor','Yol kenarında park etmiş araçlarla çarpışma','Araçlardan düşme' , 'Diğer','Trenli'] options_sex = ['Erkek','Kadın','Bilinmeyen'] options_education_level = ['Ortaokul','İlkokul','Lise', 'Bilinmeyen','Yukarıda lise','Yazma ve okuma','Okur-yazar değil'] options_services_year = ['Bilinmiyor','2-5 yıl','10 yıl üstü','5-10 yıl','1-2 yıl','1 yıl altı'] options_acc_area = ['Diğer', 'Ofis alanları', 'Konut alanları', 'Kilise alanları', 'Endüstriyel alanlar', 'Okul alanları', 'Eğlence alanları', 'Kırsal alanlar dışında', 'Hastane alanları', 'Pazar alanları ', 'Kırsal köy alanları', 'Bilinmeyen', 'Kırsal köy alanlarıOfis alanları', 'Eğlence alanları'] # kullanıcılardan girdi almak için özellik listesi özellikler = ['Araç_ilişkili_sayısı','Yaralı_sayısı','Günün_Saati','Çarpışma_Tipi ','Sürücünün_Yaş_bandı','Sürücünün_Cinsiyeti', 'Eğitim_düzeyi','Aracın_Hizmet_yılı','Haftanın_Günü','Kaza_alanı_oluştu'] # st.markdown(" işaretleme formunda uygulama başlığını ayarlayın

Kaza Önem Derecesi Tahmin Uygulaması 🚧

“, unsafe_allow_html=Doğru)

4. Son olarak, kolaylaştırılmış yöntemleri kullanarak girdi almak için ana işlevi tanımlayın ve tüm özellikler için sahip olduğumuz seçenekleri ayarlayın. “st. kullanıcıdan her girişi almak için "form" yöntemini kullanın.

def main(): # st.form ("road_traffic_severity_form") ile st.form işlevini kullanarak kullanıcılardan girdi alın: st.subheader("Lütfen aşağıdaki girdileri girin:") # kullanıcı girdilerini saklayacak değişkeni tanımlayın No_vehicles = st.slider ("Kazaya karışan araç sayısı:",1,7, value=0, format="%d") No_casualties = st.slider("Yaralananların sayısı:",1,8, value=0, format="%d ") Saat = st.slider("Günün saati:", 0, 23, value=0, format="%d") çarpışma = st.selectbox("Çarpışma türü:",options=options_types_collision) Age_band = st.selectbox("Sürücü yaş grubu?:", options=options_age) Sex = st.selectbox("Sürücünün cinsiyeti:", options=options_sex) Eğitim = st.selectbox("Sürücünün eğitimi:",options=options_education_level ) service_vehicle = st.selectbox("Aracın servis yılı:", options=options_services_year) Day_week = st.selectbox("Haftanın günü:", options=options_day) Accident_area = st.selectbox("Kaza alanı:", options=options_acc_area) # modelin çıktısını tahmin etmek için bir gönder düğmesi koyun submit = st.form_submit_button("Tahmin") eğer gönderilirse: input_array = np.array([çarpışma, Yaş_bandı, Cinsiyet, Eğitim, hizmet_vehicle, Gün_hafta, Kaza_alanı] , ndmin=2) # tüm kategorik özellikleri kodlayın encoded_arr = list(encoder.transform(input_array).ravel()) num_arr = [Araç Yok, Yaralı Yok, Saat] pred_arr = np.array(num_arr + encoded_arr).reshape(1, -1) # model nesne tahminini kullanarak çıktıyı tahmin edin = model.predict(pred_arr) if tahmin == 0: st.write(f"Şiddet tahmini Ölümcül Yaralanmadır⚠") elif tahmin == 1: st.write(f "Şiddet tahmini ciddi yaralanmadır") else: st.write(f"Şiddet tahmini hafif yaralanmadır") # Model açıklaması için shap kütüphanesini kullanan açıklanabilir yapay zeka. st.subheader("Tahminleri anlamak için açıklanabilir yapay zeka (XAI)") shap.initjs() shap_values ​​= shap.TreeExplainer(model).shap_values(pred_arr) st.write(f"Tahmin için {tahmin}") shap.force_plot( shap.TreeExplainer(model).expected_value[0], shap_values[0], pred_arr, feature_names=features, matplotlib=True,show=False).savefig("pred_force_plot.jpg", bbox_inches='tight') img = Resim. open("pred_force_plot.jpg") # web sitesinde görüntülenecek resim st.image(img, caption='Shap kullanılarak model açıklaması' if __name__ == '__main__': main()

5. Tüm dosyaları şuraya itin: Github havuzu ve app.py dosyasını kolaylaştırılmış buluta dağıtın. Bunu kullanarak son dağıtılan web uygulamasını görebilirsiniz. Link

Sonuç

Bu makalede, Streamlit kitaplığını kullanarak bir uygulama geliştirmenin yanı sıra Streamlit topluluk bulutunu kullanarak web uygulamalarını ücretsiz olarak oluşturup dağıtmaya yönelik eksiksiz bir kılavuz öğrendik. Bu makaleden birkaç çıkarıma bakalım.

  1. HTML, CSS veya JS bilmeden web uygulamalarına yönelik ön uç geliştirmek için akıcı kitaplığın temel API'lerine kapsamlı bir genel bakış
  2. Arka uç yapılandırma ayarları konusunda endişelenmeden GitHub deposundan bir web uygulamasını dağıtmaya yönelik bir kılavuz.
  3. Karayolu trafik kazalarının ciddiyetini tahmin etmek amacıyla makine öğrenimi web uygulaması geliştirmeye ve dağıtmaya yönelik eksiksiz bir kod.

Bu makalede gösterilen medya Analytics Vidhya'ya ait değildir ve Yazarın takdirine bağlı olarak kullanılır.

spot_img

En Son İstihbarat

spot_img