Streamlit İle Web App Oluşturma
Merhabalar bu makalemde Streamlit kütüphanesi kullanarak veri görselleştirme ve oluşturduğumuz ML modelinin kullanıcı tahmini yapması için geliştirdiğim web uygulaması örneğinden bahsedeceğim.
Dilerseniz bu linkten deploy ettiğim uygulamama ulaşabilirsiniz.
Streamlit Nedir?
Geliştirdiğiniz makine öğrenmesi modelini canlı ortama alamadıktan sonra model başarılarınız, ne kadar hızlı eğittiğiniz gibi konular hep eksik kalmaktadır. Uygulamanızı canlı ortamlarda test edebilmek için de bir web uygulaması veya bir web sayfası oluşturmanız gerekmektedir.
Bir web uygulaması geliştirmek her zaman kolay olmayabiliyor. İyi bir web uygulaması geliştirmek için öncelikle html+css kullanarak bir ön yüz geliştirmeniz ve bir arka uç geliştirerek birbirleri ile ilişkilendirmeniz gerekmektedir. Bu süreçlerde tecrübesiz iseniz işiniz hayli zor olabiliyor.
Streamlit ise, dakikalar içinde web uygulaması geliştirmenize olanak sağlayan bir kütüphanedir. Bu kütüphaneyi kullanarak front-end bilgisi olmadan temel back-end bilgisiyle web uygulaması geliştirebilirsiniz.
Streamlit, Dash ile benzer özelliklere sahiptir. Ancak Dash daha çok kurumsal pazara odaklanır ve açık kaynak sürümündeki tüm özellikleri içermez. Buna karşılık, Streamlit tamamen açık kaynaklıdır. Streamlit daha yapılandırılmıştır ve daha çok basitliğe odaklanır.
- Mümkün olduğunca çabuk başlamak istiyorsanız ve güçlü fikirleriniz veya çok fazla özel gereksiniminiz yoksa Streamlit’i kullanabilirsiniz.
- Daha esnek ve olgun bir şeye ihtiyacınız varsa ve fazladan mühendislik zamanı harcamaktan çekinmiyorsanız Dash kullanabilirsiniz.
Streamlit’i anladığımıza göre örnek uygulamamıza bakabiliriz.
Örnek Uygulama
Veri seti kaggle’dan alınan bir verisetidir. Bu veri öğrencilerin bir XYZ kampüsündeki Yerleştirme verilerinden oluşmaktadır. Orta ve yüksek orta öğretim yüzdesini ve uzmanlaşmayı içerir. Ayrıca, derece uzmanlığı, tür ve İş deneyimi ve yerleştirilen öğrencilere maaş tekliflerini içerir.
Verisetine baktığımızda eksik gözlemler, kategorik değişkenler dikkatimizi çekiyor. Gerekli EDA süreçlerini başlatıyoruz.
Eksik Gözlem
67 gözlem eksik bunları doldurmak/kaldırmak gibi çözümler olabilir ama veri bütünlüğünü korumak adına, eksik gözlemleri ortalama ile dolduracağız.
Kategorik Veri Dönüşümü
- Dummy değişken tuzağına düşmemek için ilgili kolonları kaldırmayı unutmayın.
Aykırı Gözlemler
Aykırı gözlemlerimiz bulunuyor. Normal şartlarda bunların çıkarılması gerekir, çıkarılmadığı takdirde modelde bozulmalara yol açar bu da istatistiksel gücü azaltır. Bununla başa çıkmak için değer dönüşümü de yapılabilir ancak konumuz Streamlit olduğu için fazla üzerinde durmadan aykırı değerleri kaldırmadım.
Korelasyon
Korelasyon matrisine baktığımızda birbirini ciddi anlamda etkileyen değişkenler bulunmamaktadır.
Model Oluşturma
Lojistik regresyon ve karar ağaçları modellerini denedim.
{'max_depth': 100, 'max_features': 'log2', 'splitter': 'best'}
Uygun model parametreleri belirlendikten sonra, model kayıt kayıt edilmiştir.
Streamlit Uygulaması Geliştirme
Streamlit kolay bir kod yapısına sahiptir. Uygulamanızı geliştirirken yardımcı olacak bazı temel işlevlere aşağıdaki linkten ulaşabilirsiniz.
Kayıt edilen modeli pickle ile yeniden yüklememiz ve bunu Streamlit ile aldığımız verilerle tahminlememiz gerekiyor.
Web APP Deployment
Uygulamanız tamamlandıktan sonra bir sunucu üzerinden dağıtmak ve kullanıcılarınızdan alacağınız geri bildirimlerle modelinizi güçlendirmek isteyebilirsiniz. Bunun için streamlit github reponuzdan kolay bir şekilde deploy etmenize yardımcı olacak bir araç geliştirmiş.
İlk olarak yukarıda bulunan adresten hesap açarak github adresinizi bağlamanız gerekmektedir. Daha sonra New app butonuna basarak ilgili github reponuzdan ilgili python dosyanızı seçerek Deploy’a bastığınız anda ilgili dosyalar reponuzdan çekilerek dağıtıma hazır hale getirilecektir.
Önemli Not:
- Çalışma reponuzda mutlaka bağımlılıkların bulunduğu bir text dosyasına ihtiyacınız bulunmaktadır. Bknz. requirements.txt.
- Github reponuzda CSV dosyası, PKL dosyası, png gibi formatta eklentiler varsa bazen FileNotFoundError: [Errno 2] No such file or directory hatası alabilirsiniz. Bu hatayı düzeltmek için; tüm dosyaların main klasörüne kadar alın. Örneğin: df = pd.read_csv(filepath_or_buffer = “https://raw.githubusercontent.com/burakugurr/AI-ML-DL/master/CampusRec_Streamlit/Placement_Data_Full_Class.csv")
Web APP Geliştirirken Kullanabileceğiniz İpuçları
1) Fonksiyonel programlamayı kullanın. Birden fazla sayfaya ihtiyacınız olduğunda her sayfayı birer fonksiyon içinde yazın. Örneğin;
def first_chart():
....def second_chart():
....def main_page():
first_chart()
second_chart()2) Grafiklerinizi birer fonksiyonla geri çağırın. Böylece kod review yapan bir kişi daha rahat anlayacaktır.
def chart():
...
return fig3) Yorum satıları ile ana fonksiyonları ve grafik fonksiyonlarını ayırın. Bu yüksek hacimli işler yaparken kodlar arasında kaybolmamanıza yardımcı olacaktır.
# Chart Functions
[ Grafik FOnksiyonları. Plolty vs. ]
# Main Page Functions
[ Anasayfaya ait UI Fonksiyonları. Button vs.]