| import gradio as gr |
| import matplotlib.pyplot as plt |
| import matplotlib |
| import json |
| import pickle as pck |
| import joblib |
| import pandas as pd |
| import sklearn |
|
|
| |
| db = pd.read_csv('database.csv') |
|
|
| |
| with open('features.json') as f: |
| features = json.load(f) |
|
|
| |
| with open(r"columnTransformer.pickle", "rb") as file: |
| encoder = pck.load(file) |
| model = joblib.load("model.joblib") |
|
|
| months = {'January': 1.0, 'February': 2.0, 'March': 3.0, 'April': 4.0, 'May': 5.0, 'June': 6.0, 'July': 7.0, 'August': 8.0, 'September': 9.0, 'October': 10.0, 'November': 11.0, 'December': 12.0} |
|
|
| def encode(region,division,market,category, commodity, month): |
| encoded = encoder.transform([[months[month], region, division,market,category,commodity]]) |
| return encoded |
|
|
| def predict(inp, quantity): |
| pred = model.predict(inp.toarray()) |
| pred = '{:.2f}'.format(abs(pred[0])*quantity) |
| return float(pred) |
|
|
|
|
| def plot_fig(compared,market): |
| |
| compared.sort(key=lambda tup: tup[1]) |
| mk_name = [ m_name[0] for m_name in compared] |
| prices = [ price[1] for price in compared] |
| colors = ["red" if i == market else "blue" for i in mk_name] |
| fig = plt.figure(figsize=(15,9)) |
| plt.bar(mk_name, prices,width=0.5, color=colors) |
| plt.title('Price compared to other markets') |
| |
| plt.xticks(rotation=45) |
| plt.ylabel('Price (Fcfa)') |
| return fig |
|
|
| def compararator(region,division,market,category, commodity, month, quantity): |
| |
| db_cop = db[db.market!= market] |
| samples = db_cop.sample(5) |
| compared = [] |
| |
| inp = encode(region,division,market,category, commodity, month) |
| pred = predict(inp,quantity) |
| compared.append((market,pred)) |
|
|
| |
| for index, sample in samples.iterrows(): |
| inp = encode(sample['region'],sample['division'],sample['market'],category, commodity, month) |
| ypred = predict(inp,quantity) |
| compared.append((sample['market'],ypred)) |
| fig = plot_fig(compared, market) |
| return pred, fig |
|
|
|
|
|
|
| def evaluate(region,division,market,category, commodity, month, quantity): |
| ypred,fig = compararator(region,division,market,category, commodity, month, quantity) |
| out = str(ypred) + "Fcfa for " +str(quantity)+ " (KG/L/P)" |
| st = "Price of " + commodity + " in " + market + " is : " + out |
| |
| return st, fig |
|
|
|
|
| inputs = [ |
| gr.Dropdown(features['regions'], label="Region"), |
| gr.Dropdown(features['division'], label="Division"), |
| gr.Dropdown(features['market'], label="market"), |
| gr.Dropdown(features['categories'], label="category"), |
| gr.Dropdown(features['commodity'], label="commodity"), |
| gr.Dropdown(list(months.keys()), label="Month"), |
| gr.Slider(1, 100, value=1, step=0.5, label= "quantity (Kilogram / Liters)", interactive=True), |
| ] |
| outputs = ["label", gr.Plot(label="Prices in other markets").style(container=True)] |
| desc= "Machine learning for food price prediction in Various Cameroon markets (Retail Price)" |
| camfreg = gr.Interface( |
| fn=evaluate, |
| inputs=inputs, |
| outputs=outputs, |
| cache_examples=True, |
| article='KG = kilogram, L = Liter, P = piece', |
| title= 'Camfreg : Cameroon food prices Prediction', |
| description= desc |
| ) |
|
|
| if __name__ == "__main__": |
| camfreg.launch() |