irem sezer
MLOpsTurkey
Published in
4 min readApr 18, 2022

--

Flask ile nasıl web uygulamaları oluşturabiliriz ?

Flask Nedir ?

Flask, Armin Ronacher tarafından Python’da geliştirilmiş bir framework’tür. Blog ve ticari bir web sitesi gibi web uygulamaları geliştirmek için araçlar ve modüller sağlar.Karışık bir yapıya sahip olmadığı için yeni başlayanlar için uygun olarak kabul edilir.Performansı gayet yüksek bir framework’tür.

Flask, genellikle backend için kullanılır, ancak bir HTTP isteği aracılığıyla kullanıcıya döndürülen HTML, XML veya diğer biçimlendirme formlarını oluşturmak için kullanılan Jinja2 adlı bir şablonlama dilini de kullanır.

Flask kullanımı basit ve güçlü bir framework olduğu için MLOps yazılım dağıtım (deployment) kısmına da çok iyi uyum sağlar. Bazı veri bilimi projelerinde iş ihtiyacına göre ekran tasarımı yapılması ve modelin ilgili ekranlardaki girilen değerlere göre model sonuç üretmesi gerekmektedir. Bu tarz ihtiyaçlarda Flask kullanmak oldukça yarar sağlamaktadır.

UYGULAMA

Model

Bu uygulamada kullanılacak olan diyabet veri setinin kullanılmış olduğu makine öğrenmesi model kodlarına aşağıda görüldüğü gibidir.

Bir Flask uygulamasının çalıştırılabilmesi gerekli bir takım dosyalar bulunmaktadır.

Bunları kısaca aşağıdaki şekilde sıralayabiliriz:

  1. Templates(index.html)

Flask’ta, HTML şablonlarını oluşturmak için Jinja şablonlama dili kullanılır. Template(şablon) hem sabit hem de dinamik bir yapı içerebilen bir dosyadır . Bir kullanıcı uygulamanızdan bir şey istediğinde (bir dizin sayfası veya giriş sayfası gibi), Jinja, standart HTML’de bulunmayan değişkenler, ifadeler gibi birçok özelliği kullanabileceğiniz bir HTML şablonuyla yanıt vermenizi sağlar.

index.html

2. Statik Dosyalar (CSS)

Python ile derlenen bir Web uygulamasında, Python dosyaları her zaman Web ana bilgisayarı sunucusunda çalışır ve bir kullanıcının bilgisayarına hiçbir zaman aktarılmaz. CSS gibi diğer dosyalar yalnızca tarayıcı tarafından kullanılır, bu nedenle ana bilgisayar sunucusu onları istendiği zaman olduğu gibi teslim eder. Bu tür dosyalar “static” dosyalar olarak adlandırılır.

style.css

3.app.py

app.py dosyası kullanacağımız tüm işlevleri ve fonksiyonları tanımladığımız dosyadır. Bu dosya, komut satırı isteminde çalıştıracağımız Flask uygulamamızın ana hattını oluşturur.

· İlk olarak Flask framework’ünü aşağıdaki kodla yüklüyoruz.

from flask import Flask

· Projenin temelini oluşturabilmek adına bir uygulama başlatmamız gerekiyor bunun için app isminde bir flask objesi oluşturup pkl biçiminde kaydettiğimiz model dosyasını yükleyerek model ismini verdiğimiz değişkene atıyoruz.

app = Flask(__name__) 
model = pickle.load(open('diabetes.pkl', 'rb'))

· Daha sonra bir home fonksiyonu(home route) oluşturuyoruz ve içine daha önceden oluşturduğumuz html dosyasını yazıyoruz. @app.route(“/”) ile localhost:5000/ adresine istek gönderiliğinde def home() : fonksiyonuyla dönecek içerik için çağrılacak fonksiyonu belirliyoruz.

@app.route('/') 
def home():
return render_template('index_diabetes.html')

· Predict fonksiyonunda(predict route) ise girdileri modele gönderek bir tahmin işlemi(prediction) gerçekleştiriyoruz. Burada metot olarak POST metodunu kullanıyoruz. POST metodu kullanıcıların form verilerini sunucuya göndermelerini sağlayan HTTP protokollerinden birisidir. POST metodu ile alınan veriler, alındığında sunucu tarafından önbelleğe alınmaz. Fonksiyon içinde aldığımız verileri float formatına çevirip np.array fonksiyonu ile liste haline getirerek features değişkenine atıyoruz. Daha sonra features değişkenini iki boyutlu [np.array(features)] hale getirip buna final_features değişkeni adını veriyoruz.

@app.route('/predict',methods=['POST'])
def predict():
input_features = [float(x) for x in request.form.values()]

· Gelen değişkenlerin değerleri ile kişilerin diyabet olup olmadıklarını model.predict fonksiyonu ile tahmin ederek bu tahmini prediction değişkenine atıyoruz. Diyabet olma olasılıklarını ise model.predict_proba fonsiyonunu kullanarak buluyor ve bu olasılıklara prob, prob değişkeninden de diyabet olma olasılığını seçerek bu değişkene de diabetes_prob ismini veriyoruz. app.py dosyasında son olarak index_diabetes.html sayfası içinde kullanıcının verdiği bilgilere göre diyabet olup olmama durumunu ve yüzde kaç olasılıkla diyabet olabileceğini görebiliyoruz.

int_features = [float(x) for x in request.form.values()]
final_features = [np.array(int_features)]
print(final_features)
prediction = model.predict(final_features)
prob= model.predict_proba(final_features)
diabetes_prob=prob[0][1]
output = round(prediction[0], 2)
if output == 1 :
x="diyabet hastası"
else:
x="diyabet hastası değil"
print(output)

· Son adım olarak ise app.run() şeklinde uygulamayı çalıştırarak web uygulamasını yerel olarak [localhost:5000] üzerinde barındırıyoruz.

· “debug=True” her değişiklik yaptığımızda uygulamamızı çalıştırmamıza gerek kalmamasını sağlar, sunucu hala çalışırken değişiklikleri görmek için web sayfamızı yenileyebilir ve değişiklikleri görebiliriz.

if __name__ == "__main__":
app.run(debug=True)

· Oluşturduğumuz bu app.py dosyasını komut kısmında python run app.py şeklinde çalıştırıyoruz.

· Komut çalıştıktan sonra http://127.0.0.1:5000/ şeklinde kopyalarak tarayıcımızın arama bölümüne yapıştırıyoruz.Çalıştırdıktan sonra aşağıdaki ekranı elde ediyoruz.

Bu uygulama ile bir kişinin diyabet olup olmadığını tahmin etmeye çalışalım.

Bu kişi:

  • Hamilelik Sayısı :4
  • Glikoz Seviyesi: 150
  • Kan Basıncı: 59
  • Cilt Kalınlığı: 30
  • İnsülin Seviyesi : 100
  • Vücut Kütle Endeksi (BMI): 27
  • Diyabet Yatkınlık Fonksiyonu: 0.5
  • Yaş: 38

özelliklerine sahip olsun. Bu değerler girildiğinde aşağıdaki sonucu elde ederiz.

Yukarıdaki çıktıya göre bu hastanın 0.6 olasılıkla diyabet hastası olarak tahmin edildiğini söyleyebiliriz.

Flask ile bir makine öğrenmesi modelinin nasıl web uygulamasına dönüştürülebileceğine dair kodlar ve komutların yer aldığı github linkini aşağıda bulabilirsiniz. Bir sonraki yazıda görüşmek üzere :)

--

--