Δημιουργήστε μια εφαρμογή Data Science με Python σε 10 εύκολα βήματα
Μάθετε πώς να δημιουργείτε μια εφαρμογή επιστήμης δεδομένων με την Python, χρησιμοποιώντας το Scikit-Learn και το FastAPI, ένα βήμα τη φορά.
Θέλετε να βελτιώσετε τις δεξιότητές σας στην επιστήμη των δεδομένων; Η δημιουργία μιας εφαρμογής επιστήμης δεδομένων είναι ένας πολύ καλός τρόπος για να μάθετε περισσότερα.
Η δημιουργία μιας εφαρμογής επιστήμης δεδομένων περιλαμβάνει πολλαπλά βήματα—από τη συλλογή και την προεπεξεργασία δεδομένων έως την εκπαίδευση μοντέλων και την εξυπηρέτηση προβλέψεων μέσω ενός API. Αυτό το βήμα προς βήμα σεμινάριο θα σας καθοδηγήσει στη διαδικασία δημιουργίας μιας απλής εφαρμογής επιστήμης δεδομένων.
Θα χρησιμοποιήσουμε Python, scikit-learn και FastAPI για να εκπαιδεύσουμε ένα μοντέλο μηχανικής μάθησης και να δημιουργήσουμε ένα API για να εξυπηρετήσουμε τις προβλέψεις του. Για να κρατήσουμε τα πράγματα απλά, θα χρησιμοποιήσουμε το ενσωματωμένο σύνολο δεδομένων κρασιών από το scikit-learn. Ας ξεκινήσουμε!
▶️ Μπορείτε να βρείτε τον κωδικό στο GitHub.
Βήμα 1: Ρύθμιση του περιβάλλοντος
Θα πρέπει να έχετε εγκαταστήσει μια πρόσφατη έκδοση της Python. Στη συνέχεια, εγκαταστήστε τις απαραίτητες βιβλιοθήκες για τη δημιουργία του μοντέλου μηχανικής εκμάθησης και του API για την εξυπηρέτηση των προβλέψεων:
$ pip3 install fastapi uvicorn scikit-learn pandas
Σημείωση: Βεβαιωθείτε ότι έχετε εγκαταστήσει τις απαιτούμενες βιβλιοθήκες σε ένα εικονικό περιβάλλον για το έργο.
Βήμα 2: Φόρτωση του συνόλου δεδομένων
Θα χρησιμοποιήσουμε το σύνολο δεδομένων κρασιού του scikit-learn. Ας φορτώσουμε το σύνολο δεδομένων και ας το μετατρέψουμε σε πλαίσιο δεδομένων pandas για εύκολο χειρισμό:
# model_training.py
from sklearn.datasets import load_wine
import pandas as pd
def load_wine_data():
wine_data = load_wine()
df = pd.DataFrame(data=wine_data.data, columns=wine_data.feature_names)
df['target'] = wine_data.target # Adding the target (wine quality class)
return df
Βήμα 3: Εξερεύνηση του συνόλου δεδομένων
Πριν προχωρήσουμε, είναι καλή πρακτική να εξερευνήσετε λίγο το σύνολο δεδομένων.
# model_training.py
if __name__ == "__main__":
df = load_wine_data()
print(df.head())
print(df.describe())
print(df['target'].value_counts()) # Distribution of wine quality classes
Εδώ, εκτελούμε μια προκαταρκτική εξερεύνηση του συνόλου δεδομένων εμφανίζοντας τις πρώτες λίγες σειρές, δημιουργώντας συνοπτικά στατιστικά στοιχεία και ελέγχοντας την κατανομή των κλάσεων εξόδου.
Βήμα 4: Προεπεξεργασία δεδομένων
Στη συνέχεια, θα προεπεξεργαζόμαστε το σύνολο δεδομένων. Διαχωρίζουμε το σύνολο δεδομένων σε σύνολα εκπαίδευσης και δοκιμών και κλιμακώνουμε τα χαρακτηριστικά.
Η συνάρτηση preprocess_data
κάνει ακριβώς αυτό:
# model_training.py
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
def preprocess_data(df):
X = df.drop('target', axis=1) # Features
y = df['target'] # Target (wine quality)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=27)
# Feature scaling
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
return X_train_scaled, X_test_scaled, y_train, y_test
Η κλιμάκωση δυνατοτήτων χρησιμοποιώντας το StandardScaler διασφαλίζει ότι όλα τα χαρακτηριστικά συμβάλλουν εξίσου στην εκπαίδευση του μοντέλου.
Βήμα 5: Εκπαίδευση του Μοντέλου Logistic Regression
Ας εκπαιδεύσουμε τώρα ένα μοντέλο LogisticRegression στα προεπεξεργασμένα δεδομένα και ας αποθηκεύσουμε το μοντέλο σε ένα αρχείο pickle. Η ακόλουθη συνάρτηση train_model
το κάνει αυτό:
# model_training.py
from sklearn.linear_model import LogisticRegression
import pickle
def train_model(X_train, y_train):
model = LogisticRegression(random_state=42)
model.fit(X_train, y_train)
# Save the trained model using pickle
with open('classifier.pkl', 'wb') as f:
pickle.dump(model, f)
return model
Βήμα 6: Αξιολόγηση του μοντέλου
Μόλις το μοντέλο εκπαιδευτεί, αξιολογούμε την απόδοσή του υπολογίζοντας την ακρίβεια στο σύνολο δοκιμής. Για να το κάνουμε αυτό, ας ορίσουμε τη συνάρτηση evaluate_model
ως εξής:
# model_training.py
from sklearn.metrics import accuracy_score
def evaluate_model(model, X_test, y_test):
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
if __name__ == "__main__":
df = load_wine_data()
X_train_scaled, X_test_scaled, y_train, y_test = preprocess_data(df)
model = train_model(X_train_scaled, y_train)
evaluate_model(model, X_test_scaled, y_test)
Όταν εκτελείτε το σενάριο Python: τα δεδομένα φορτώνονται, υποβάλλονται σε προεπεξεργασία, το μοντέλο εκπαιδεύεται και αξιολογείται. Η εκτέλεση του σεναρίου τώρα δίνει:
Accuracy: 0.98
Βήμα 7: Ρύθμιση του FastAPI
Τώρα, θα δημιουργήσουμε μια βασική εφαρμογή FastAPI που θα εξυπηρετεί προβλέψεις χρησιμοποιώντας το εκπαιδευμένο μοντέλο μας.
# app.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "A Simple Prediction API"}
Σε αυτό το βήμα, δημιουργήσαμε μια βασική εφαρμογή FastAPI και ορίσαμε ένα τελικό σημείο ρίζας. Αυτό δημιουργεί έναν απλό διακομιστή ιστού που μπορεί να ανταποκριθεί σε αιτήματα HTTP.
Μπορείτε να εκτελέσετε την εφαρμογή FastAPI με:
uvicorn app:app --reload
Μεταβείτε στη διεύθυνση http://127.0.0.1:8000 για να δείτε το μήνυμα.
Βήμα 8: Φόρτωση του μοντέλου στο FastAPI
Θα φορτώσουμε το προεκπαιδευμένο μοντέλο στο FastAPI για να κάνουμε προβλέψεις.
Ας προχωρήσουμε και ας ορίσουμε μια συνάρτηση για τη φόρτωση του προεκπαιδευμένου μοντέλου Logistic Regression στην εφαρμογή μας FastAPI.
# app.py
import pickle
def load_model():
with open('model/classifier.pkl', 'rb') as f:
model = pickle.load(f)
return model
Αυτό σημαίνει ότι το μοντέλο μας είναι έτοιμο να κάνει προβλέψεις όταν ληφθούν αιτήματα.
Βήμα 9: Δημιουργία του Τελικού Σημείου Πρόβλεψης
Θα ορίσουμε ένα τελικό σημείο για να αποδεχθούμε τα χαρακτηριστικά του κρασιού ως είσοδο και θα επιστρέψουμε την προβλεπόμενη κατηγορία ποιότητας κρασιού.
Ορισμός μοντέλου δεδομένων εισόδου
Θα θέλαμε να δημιουργήσουμε ένα τελικό σημείο πρόβλεψης που δέχεται δεδομένα χαρακτηριστικών κρασιού σε μορφή JSON. Το μοντέλο δεδομένων εισόδου—που ορίζεται με χρήση της Pydantic—επικυρώνει τα εισερχόμενα δεδομένα.
# app.py
from pydantic import BaseModel
class WineFeatures(BaseModel):
alcohol: float
malic_acid: float
ash: float
alcalinity_of_ash: float
magnesium: float
total_phenols: float
flavanoids: float
nonflavanoid_phenols: float
proanthocyanins: float
color_intensity: float
hue: float
od280_od315_of_diluted_wines: float
proline: float
Τελικό σημείο πρόβλεψης
Όταν λαμβάνεται ένα αίτημα, το API χρησιμοποιεί το φορτωμένο μοντέλο για να προβλέψει την κατηγορία κρασιού με βάση τις παρεχόμενες δυνατότητες.
# app.py
@app.post("/predict")
def predict_wine(features: WineFeatures):
model = load_model()
input_data = [[
features.alcohol, features.malic_acid, features.ash, features.alcalinity_of_ash,
features.magnesium, features.total_phenols, features.flavanoids,
features.nonflavanoid_phenols, features.proanthocyanins, features.color_intensity,
features.hue, features.od280_od315_of_diluted_wines, features.proline
]]
prediction = model.predict(input_data)
return {"prediction": int(prediction[0])}
Βήμα 10: Δοκιμή της εφαρμογής τοπικά
Μπορείτε να εκτελέσετε ξανά την εφαρμογή εκτελώντας:
uvicorn app:app --reload
Για να δοκιμάσετε την εφαρμογή, στείλτε ένα αίτημα POST στο τελικό σημείο /predict
με δεδομένα χαρακτηριστικών κρασιού:
curl -X POST "http://127.0.0.1:8000/predict" \
-H "Content-Type: application/json" \
-d '{
"alcohol": 13.0,
"malic_acid": 2.14,
"ash": 2.35,
"alcalinity_of_ash": 20.0,
"magnesium": 120,
"total_phenols": 3.1,
"flavanoids": 2.6,
"nonflavanoid_phenols": 0.29,
"proanthocyanins": 2.29,
"color_intensity": 5.64,
"hue": 1.04,
"od280_od315_of_diluted_wines": 3.92,
"proline": 1065
}'
Η τοπική δοκιμή είναι σημαντική για να διασφαλιστεί ότι το API λειτουργεί όπως προβλέπεται πριν από οποιαδήποτε ανάπτυξη. Έτσι, δοκιμάζουμε την εφαρμογή στέλνοντας ένα αίτημα POST στο τελικό σημείο πρόβλεψης με δείγματα δεδομένων χαρακτηριστικών κρασιού και παίρνουμε την προβλεπόμενη κλάση.
{"prediction":0}
Αναδίπλωση
Έχουμε δημιουργήσει μια απλή αλλά λειτουργική εφαρμογή επιστήμης δεδομένων.
Μετά τη δημιουργία ενός μοντέλου μηχανικής εκμάθησης με το scikit-learn, χρησιμοποιήσαμε το FastAPI για να δημιουργήσουμε ένα API που δέχεται τα στοιχεία των χρηστών και επιστρέφει προβλέψεις. Μπορείτε να δοκιμάσετε να δημιουργήσετε πιο περίπλοκα μοντέλα, να προσθέσετε λειτουργίες και πολλά άλλα.
Ως επόμενο βήμα, μπορείτε να εξερευνήσετε διαφορετικά σύνολα δεδομένων, μοντέλα ή ακόμα και να αναπτύξετε την εφαρμογή στην παραγωγή. Διαβάστε έναν πρακτικό οδηγό για την ανάπτυξη μοντέλων μηχανικής εκμάθησης για να μάθετε περισσότερα.