Skip to content

Commit

Permalink
Add Fabric Semantic Link Post Code & README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
robkerr committed Nov 11, 2023
1 parent 87b4b34 commit 42e3493
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 0 deletions.
11 changes: 11 additions & 0 deletions README.md
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/)

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}

0 comments on commit 42e3493

Please sign in to comment.