|
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() |