-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Fabric Semantic Link Post Code & README.md
- Loading branch information
Showing
2 changed files
with
12 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# RobKerr.AI Blog Code | ||
This repository contains source code created in my posts on https://robkerr.ai. The code is free to use for any purpose without attribution. | ||
## Contents | ||
Each folder contains code related to a specific blog post. Below are links to the original posts: | ||
[Fabric Semantic Link: Power BI as a Machine Learning Data Source](https://robkerr.ai/fabric-semantic-link-power-bi-as-a-machine-learning-data-source/) | ||
[How to Use a Vector Database and Generative AI to Create a Custom Chatbot](https://robkerr.ai/generative-ai-chatbot-grounding-data-vector-text/) | ||
[Bring your own data to Azure OpenAI Service Large Language Models](https://robkerr.ai/azure-openai-bring-your-own-data/) | ||
[Using Fabric Synapse Data Science with Jupyter Notebooks](https://robkerr.ai/using-fabric-data-science-with-jupyter-notebooks/) | ||
[Deploy an Azure Machine Learning model to a REST endpoint](https://robkerr.ai/deploy-azure-machine-learning-model-to-rest/) | ||
[Deploying AI Vision Models to Apple iOS Devices](https://robkerr.ai/export-ai-vision-models-to-ios/) | ||
|
1 change: 1 addition & 0 deletions
1
...antic-link-power-bi-as-a-machine-learning-data-source/Retail Total Sales Prediction.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{"cells":[{"cell_type":"markdown","id":"a8ddd603-ab70-4b7f-a477-f73c928cfae1","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Install Fabric Semantic Link"]},{"cell_type":"code","execution_count":null,"id":"2d61b5dc-fed2-46b8-91fe-1b6605053736","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["%pip install semantic-link\n","%load_ext sempy"]},{"cell_type":"markdown","id":"28490dee-490d-4a36-9d0f-94b641b152ee","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Import Libraries"]},{"cell_type":"code","execution_count":null,"id":"64705e7f-080d-41d0-b195-741f394b0216","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["# Basic Imports\n","import pandas as pd\n","import numpy as np"]},{"cell_type":"code","execution_count":null,"id":"c0efa865-0ae6-4a38-9490-3d3c325b572b","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["# Fabric Imports\n","import sempy.fabric as fabric\n","import pyspark.sql.functions as F"]},{"cell_type":"code","execution_count":null,"id":"ed6fc5d9-b873-4745-a079-879e439c0e86","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["# Machine Learning Libraries\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","from sklearn import preprocessing\n","from sklearn.model_selection import train_test_split\n","from sklearn.model_selection import GridSearchCV\n","from sklearn.linear_model import LinearRegression\n","from sklearn.metrics import roc_curve, roc_auc_score, \\\n","classification_report, accuracy_score, confusion_matrix \n","import mlflow"]},{"cell_type":"markdown","id":"508bcc94-6380-4747-a238-4a6c75e23330","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Get Reference to Power BI Data"]},{"cell_type":"code","execution_count":null,"id":"42525c04-4b34-4627-abaf-c7550be2c9bd","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["df_datasets = fabric.list_datasets()\n","df_datasets"]},{"cell_type":"code","execution_count":null,"id":"8abf507e-5736-4181-a93e-1b7ca2317b37","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["dataset = \"Retail Analysis\"\n","EXPERIMENT_NAME = \"retail-total-sales-prediction\""]},{"cell_type":"markdown","id":"e204bc42-38fb-40ef-9f73-55b7eca90a4e","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Examine What's Available in Power BI Data Model"]},{"cell_type":"code","execution_count":null,"id":"601acc40-9f2d-48a3-a5e5-3ded5dab5e01","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["from sempy.relationships import plot_relationship_metadata\n","relationships = fabric.list_relationships(dataset)\n","plot_relationship_metadata(relationships)"]},{"cell_type":"code","execution_count":null,"id":"eb9ba188-1d63-472f-bd99-26d5f5f01028","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["fabric.list_measures(dataset)"]},{"cell_type":"markdown","id":"abd1770f-1642-4820-a61c-51dea395c288","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Query for Data to use as source for Machine Learning Model"]},{"cell_type":"code","execution_count":null,"id":"0750f342-1e2c-4c87-8d20-336f48d53821","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["df = fabric.evaluate_measure(dataset, \\\n","measure=[\"Average Unit Price\", \"TotalSales\"], \\\n","groupby_columns=[\"Store[Name]\", \"Store[Open Month]\", \\\n"," \"Store[Store Type]\", \"Store[Territory]\", \\\n"," \"Store[DistrictID]\", \"Store[Chain]\", \"Store[Open Year]\"])\n","\n","\n","df.head()"]},{"cell_type":"code","execution_count":null,"id":"ca29275a-6836-4234-b6d9-1a25183ac3c1","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["df.shape"]},{"cell_type":"code","execution_count":null,"id":"595fb9a0-5b4e-4868-aa11-908ed34e3f04","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["df.describe()"]},{"cell_type":"code","execution_count":null,"id":"6a8ace0a-e2a9-4c64-af5c-077e358a6959","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["display(df[\"Store Type\"].unique())\n","display(df[\"Chain\"].unique())"]},{"cell_type":"markdown","id":"577cc887-81e9-448b-a150-df614d5531ba","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Build a regression model to predict Total Sales column"]},{"cell_type":"code","execution_count":null,"id":"9468cc16-bfc0-449f-96ff-e7022cfd61b2","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["Y = df['TotalSales'].to_numpy()"]},{"cell_type":"code","execution_count":null,"id":"a7fa89d6-025f-4649-8f18-a3591652b61a","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["df_with_dummies = pd.get_dummies(df, columns=['Store Type', 'Territory', 'Chain'])"]},{"cell_type":"code","execution_count":null,"id":"e1577796-c7a9-4cf9-bd97-eeb8244c5e67","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["df_with_dummies.head()"]},{"cell_type":"code","execution_count":null,"id":"e5e8e8e4-49ad-479b-bfa8-7fe06bc27cfc","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["df_with_dummies.columns"]},{"cell_type":"code","execution_count":null,"id":"b9fdfa21-a566-4ca6-ac9d-14d6e2532340","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["X = df_with_dummies.drop(columns=['Name', 'Open Month', 'TotalSales'])"]},{"cell_type":"code","execution_count":null,"id":"c67b3c63-8d1a-47a9-a672-ccd1f7f55bec","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["X"]},{"cell_type":"code","execution_count":null,"id":"e75841ba-0881-454d-815c-d6654f2f8d6f","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["mlflow.set_experiment(EXPERIMENT_NAME)\n","mlflow.autolog()\n","mlflow.sklearn.autolog(registered_model_name='retail_regression')\n","\n","model = LinearRegression()\n","model.fit(X, Y)\n","Y_hat = model.predict(X)"]},{"cell_type":"code","execution_count":null,"id":"a0659373-c60a-4789-b1ec-3ec3e940e6c4","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["r2_score = model.score(X, Y)\n","print('The R-square is: ', r2_score)"]},{"cell_type":"code","execution_count":null,"id":"bd8a6940-7ea6-413d-bb47-78a3dc7e31fa","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["# Write your code below and press Shift+Enter to execute\n","ax1 = sns.distplot(df['TotalSales'], hist=False, color=\"r\", label=\"Actual Value\")\n","sns.distplot(Y_hat, hist=False, color=\"b\", label=\"Fitted Values\" , ax=ax1)\n","\n","plt.title('Actual vs Fitted Values for TotalSales')\n","plt.xlabel('Total Sales')\n","plt.ylabel('Proportion of Stores')"]}],"metadata":{"kernel_info":{"name":"synapse_pyspark"},"kernelspec":{"display_name":"Synapse PySpark","language":"Python","name":"synapse_pyspark"},"language_info":{"name":"python"},"microsoft":{"host":{},"language":"python"},"notebook_environment":{},"nteract":{"version":"[email protected]"},"save_output":true,"spark_compute":{"compute_id":"/trident/default","session_options":{"conf":{},"enableDebugMode":false}},"synapse_widget":{"state":{},"version":"0.1"},"widgets":{}},"nbformat":4,"nbformat_minor":5} |