Пример #1
0
def save_json(json_data: str, filename: str):
    conn_string = get_setting("AZURE_STORAGE_ACCOUNT")
    container = get_setting("BLOB_CONTAINER_NAME")

    blob_service_client = BlobServiceClient.from_connection_string(conn_string)
    blob_client = blob_service_client.get_blob_client(container=container,
                                                      blob=filename)
    blob_client.upload_blob(json_data)
Пример #2
0
def read_DB_table(tableName):

    conn = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};'
                          'Server=' + get_setting("SERVER") + ';'
                          'Database=' + get_setting("DATABASE") + ';'
                          'Uid=' + get_setting("DB_USER") + ';'
                          'Pwd=' + get_setting("DB_PWD") + ';'
                          'Connection Timeout=30')

    cursor = conn.cursor()

    df_database = pd.read_sql_query('SELECT * FROM [dbo].[' + tableName + ']',
                                    conn)

    return df_database
Пример #3
0
def side_menu():
    table_name = st.sidebar.text_input("Inserire il nome della tabella su cui fare la predizione")
    
    if(st.sidebar.button('Esegui Predizione')):
        with st.sidebar:
            try:
                if table_name == "":
                    st.error("Errore: nome tabella non valido")
                else:
                    
                    df = read_data.read_DB_table(table_name)
                    ###Senza trigger###
                    # df_transform = preprocessing.dataset_transform(df)
                    # df_preprocess = preprocessing.preprocessing(df_transform)
                    # prediction = predict_model.score_model(df_preprocess)
                    # df['Prediction'] = prediction
                    
                    # json_result = df.to_json(orient='split')
                    # utc_timestamp = datetime.datetime.utcnow().strftime("%Y%m%d%H%M%S")
                    # json_filename = f"prediction_{utc_timestamp}.json"
                    # save_prediction.save_json(json_result, json_filename)
                    
                    ###Con trigger###
                    utc_timestamp = datetime.datetime.utcnow().strftime("%Y%m%d%H%M%S")
                    json_filename = f"prediction_{utc_timestamp}.json"
                    
                    response = requests.get(get_setting("TRIGGER_URL"), params={'table_name': table_name, 'json_filename': json_filename})
                    
                    data = response.json().get("data")
                    columns = response.json().get("columns")
                    df = pd.DataFrame.from_dict(data)
                    df.columns = columns
                    
                    outliers = df['Prediction'].loc[df.Prediction == -1].count()/df['Prediction'].count() * 100
                    st.write('La predizione effettuata sui dati, ha rilevato la presenza di outlier nella misura del %1.1f%%.' % outliers)
                    labels = 'Outliers', 'Inliers'
                    sizes = df.groupby('Prediction').count().Value
                    if sizes.count() == 1:
                        sizes[0] = 0
                    explode = (0.1, 0)

                    fig, ax = plt.subplots(figsize=(15,10))
                    ax.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', startangle=90, textprops={'fontsize': 25})
                    ax.axis('equal')
                    
                    st.pyplot(fig)
                    
                    st.markdown(f'Per maggiori dettagli, è stato salvato nello storage il file *{json_filename}*')
            
            except Exception as e:
                st.error(f'Errore durante la predizione.  \n{e}')
Пример #4
0
def score_model(data: pd.DataFrame):

    model_url = get_setting("MODEL_URL")
    headers = {'Authorization': f'Bearer {get_setting("DATABRICKS_TOKEN")}'}

    data_json = data.to_dict(orient='split')
    response = requests.request(method='POST',
                                headers=headers,
                                url=model_url,
                                json=data_json)

    if response.status_code != 200:
        raise Exception(
            f'Request failed with status {response.status_code}, {response.text}'
        )
    return response.json()