Skip to content

Instantly share code, notes, and snippets.

@bcyoungV
Created April 18, 2021 09:21
Show Gist options
  • Save bcyoungV/2d255e945665e806248c2533bf876e3d to your computer and use it in GitHub Desktop.
Save bcyoungV/2d255e945665e806248c2533bf876e3d to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "<div style=\"background:#F5F7FA; height:100px; padding: 2em; font-size:14px;\">\n<span style=\"font-size:18px;color:#152935;\">Want to do more?</span><span style=\"border: 1px solid #3d70b2;padding: 15px;float:right;margin-right:40px; color:#3d70b2; \"><a href=\"https://ibm.co/wsnotebooks\" target=\"_blank\" style=\"color: #3d70b2;text-decoration: none;\">Sign Up</a></span><br>\n<span style=\"color:#5A6872;\"> Try out this notebook with your free trial of IBM Watson Studio.</span>\n</div>"
},
{
"metadata": {
"collapsed": true
},
"cell_type": "markdown",
"source": "# Welcome to PixieDust\n\nThis notebook features an introduction to [PixieDust](https://ibm-watson-data-lab.github.io/pixiedust/index.html), the Python library that makes data visualization easy. \n\n## <a id=\"toc\"></a>Table of Contents\n\n * [Get started](#part_one)\n * [Load text data from remote sources](#part_two)\n * [Contribute](#contribute)\n\n\n<hr>\n\n# <a id=\"part_one\"></a>Get started\n\nThis introduction is pretty straightforward, but it wouldn't hurt to load up the [PixieDust documentation](https://ibm-watson-data-lab.github.io/pixiedust/) so it's handy. \n\nNew to notebooks? Don't worry. Here's all you need to know to run this introduction:\n\n1. Make sure this notebook is in Edit mode\n1. To run code cells, put your cursor in the cell and press **Shift + Enter**.\n1. The cell number will change to **[\\*]** to indicate that it is currently executing. (When starting with notebooks, it's best to run cells in order, one at a time.)"
},
{
"metadata": {
"scrolled": true
},
"cell_type": "code",
"source": "# To confirm you have the latest version of PixieDust on your system, run this cell\n!pip install -U --no-deps pixiedust",
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"text": "Waiting for a Spark session to start...\nSpark Initialization Done! ApplicationId = app-20201115125805-0000\nKERNEL_ID = 496fe3cb-d26d-4a4a-9ea9-d1d216cd8b92\nCollecting pixiedust\n Downloading pixiedust-1.1.18.tar.gz (197 kB)\n\u001b[K |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 197 kB 17.3 MB/s eta 0:00:01\n\u001b[?25hBuilding wheels for collected packages: pixiedust\n Building wheel for pixiedust (setup.py) ... \u001b[?25ldone\n\u001b[?25h Created wheel for pixiedust: filename=pixiedust-1.1.18-py3-none-any.whl size=321728 sha256=3679b0ea56aa16c78f76c24b3a8300a4c5eed6191c3ddf6bb6705f255e60c0d9\n Stored in directory: /home/spark/shared/.cache/pip/wheels/41/4c/20/08a843440aaeffc976c1848c9eb44be6ec68dcd964421ec6f7\nSuccessfully built pixiedust\nInstalling collected packages: pixiedust\nSuccessfully installed pixiedust-1.1.18\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Now that you have PixieDust installed and up-to-date on your system, you need to import it into this notebook. This is the last dependency before you can play with PixieDust."
},
{
"metadata": {},
"cell_type": "code",
"source": "import pixiedust",
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"text": "Waiting for a Spark session to start...\nSpark Initialization Done! ApplicationId = app-20201115125904-0001\nKERNEL_ID = 496fe3cb-d26d-4a4a-9ea9-d1d216cd8b92\nPixiedust database opened successfully\n",
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/html": "\n <div style=\"margin:10px\">\n <a href=\"https://github.com/ibm-watson-data-lab/pixiedust\" target=\"_new\">\n <img src=\"https://github.com/ibm-watson-data-lab/pixiedust/raw/master/docs/_static/pd_icon32.png\" style=\"float:left;margin-right:10px\"/>\n </a>\n <span>Pixiedust version 1.1.18</span>\n </div>\n ",
"text/plain": "<IPython.core.display.HTML object>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "If you get a message telling you that you're not running the latest version of PixieDust, restart the kernel from the **Kernel** menu and rerun the `import pixiedust` command. (Any time you restart the kernel, rerun the `import pixiedust` command.)"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Behold, display()\n\nIn the next cell, build a simple dataset and store it in a variable. "
},
{
"metadata": {},
"cell_type": "code",
"source": "# Build the SQL context required to create a Spark dataframe \nfrom pyspark.sql import SQLContext\nsqlContext=SQLContext(sc) \n# Create the Spark dataframe, passing in some data, and assign it to a variable\ndf = spark.createDataFrame(\n[(\"Cats\", 75),\n (\"Dogs\", 25)],\n[\"Pets\",\"%\"])",
"execution_count": 2,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The data in the variable `df` is ready to be visualized, without any further code other than the call to `display()`."
},
{
"metadata": {
"pixiedust": {
"displayParams": {
"aggregation": "SUM",
"chartsize": "55",
"handlerId": "barChart",
"keyFields": "Pets",
"rowCount": "100",
"title": "Pets in this bar chart,by %",
"valueFields": "%",
"table_noschema": "false",
"rendererId": "matplotlib",
"tableFields": "Colors",
"table_nosearch": "false",
"table_nocount": "false",
"table_showrows": "Missing values"
}
},
"scrolled": false
},
"cell_type": "code",
"source": "# display the dataframe above as a bar chart\ndisplay(df)",
"execution_count": 3,
"outputs": [
{
"data": {
"text/html": "<style type=\"text/css\">.pd_warning{display:none;}</style><div class=\"pd_warning\"><em>Hey, there's something awesome here! To see it, open this notebook outside GitHub, in a viewer like Jupyter</em></div>\n <div class=\"pd_save is-viewer-good\" style=\"padding-right:10px;text-align: center;line-height:initial !important;font-size: xx-large;font-weight: 500;color: coral;\">\n Pets in this bar chart,by %\n </div>\n <div id=\"chartFigure35f3bc1b\" class=\"pd_save is-viewer-good\" style=\"overflow-x:auto\">\n \n \n <center><img style=\"max-width:initial !important\" src=\"data:image/png;base64,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\" class=\"pd_save\"></center>\n \n \n \n </div>",
"text/plain": "<IPython.core.display.HTML object>"
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "After running the cell above, you should see a Spark DataFrame displayed as a **bar chart**, along with some controls to tweak the display. All that came from passing the DataFrame variable to `display()`.\n\nIn the next cell, you'll pass more interesting data to `display()`, which will also offer more advanced controls."
},
{
"metadata": {},
"cell_type": "raw",
"source": ""
},
{
"metadata": {},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"pixiedust": {
"displayParams": {
"aggregation": "SUM",
"chartsize": "78",
"clusterby": "year",
"handlerId": "barChart",
"keyFields": "category",
"mpld3": "false",
"rendererId": "matplotlib",
"rowCount": "100",
"title": "Customers by Category clustered by Year",
"valueFields": "unique_customers"
}
}
},
"cell_type": "code",
"source": "# create another DataFrame, in a new variable\ndf2 = spark.createDataFrame(\n[(2010, 'Camping Equipment', 3),\n (2010, 'Golf Equipment', 1),\n (2010, 'Mountaineering Equipment', 1),\n (2010, 'Outdoor Protection', 2),\n (2010, 'Personal Accessories', 2),\n (2011, 'Camping Equipment', 4),\n (2011, 'Golf Equipment', 5),\n (2011, 'Mountaineering Equipment',2),\n (2011, 'Outdoor Protection', 4),\n (2011, 'Personal Accessories', 2),\n (2012, 'Camping Equipment', 5),\n (2012, 'Golf Equipment', 5),\n (2012, 'Mountaineering Equipment', 3),\n (2012, 'Outdoor Protection', 5),\n (2012, 'Personal Accessories', 3),\n (2013, 'Camping Equipment', 8),\n (2013, 'Golf Equipment', 5),\n (2013, 'Mountaineering Equipment', 3),\n (2013, 'Outdoor Protection', 8),\n (2013, 'Personal Accessories', 4)],\n[\"year\",\"category\",\"unique_customers\"])\n\n# This time, we've combined the dataframe and display() call in the same cell\n# Run this cell \ndisplay(df2)",
"execution_count": 4,
"outputs": [
{
"data": {
"text/html": "<style type=\"text/css\">.pd_warning{display:none;}</style><div class=\"pd_warning\"><em>Hey, there's something awesome here! To see it, open this notebook outside GitHub, in a viewer like Jupyter</em></div>\n <div class=\"pd_save is-viewer-good\" style=\"padding-right:10px;text-align: center;line-height:initial !important;font-size: xx-large;font-weight: 500;color: coral;\">\n Customers by Category clustered by Year\n </div>\n <div id=\"chartFiguree5656a27\" class=\"pd_save is-viewer-good\" style=\"overflow-x:auto\">\n \n \n <center><img style=\"max-width:initial !important\" src=\"data:image/png;base64,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7PGb1wcffNB+85vfmNfrtdNOO82mTZvm957lH2+88Ua1y6W+ufTSS+2CCy6odF84ctjUqVOtbdu2FhkZaR07drSPPvrIN65s2y4uLraxY8f6LdPTTjut0vcePHiw3XTTTdXWN2PGDGvdurXFxMTYLbfcYvfff7/16NHDN/60006zyZMn+72m/LZZvi4zs7Fjx9pFF11kTz/9tCUlJVl8fLw98sgjfvMqyf7+979br169LCoqys4//3zbsmWLLVy40M4++2yLi4uzm2++2YqKinyv+emnn+yuu+6yxMREa9SokV1xxRW2devWCvM6evRoa9y4sbVo0cImTZrk957lH9Xtv3WlR48e9rvf/c5iY2Nt+/btvuG/+MUv7OGHH/bb/83MPvroI+vYsaNFRkZa27ZtberUqb5xR64Xs8r7jGNZZhMnTrQOHTpYdHS0paam+vUzZfNxNH2smdm0adPszDPPtKioKDv77LPtnXfe8Rv/xRdfWI8ePSwqKspOO+00e+yxx/zmTZJNnjzZLr30UjvllFPsnXfeOer5NTObP3++tWvXzqKiouyKK66wJ598ssr9q7JlWpm1a9daly5d7JRTTrGLLrrIJk+ebOUP7ZXtp5UtwyP3uZqOcw888IDddtttvn559uzZtnPnTktPT7eYmBi78MILbdu2bX7v+/zzz9vpp59u0dHR1rVrV1u4cGGFeX3nnXcsJSXFGjVqZEOHDrX9+/f73rP89lK+HwmkXr16Wbdu3Sr0p7NnzzZJ9tlnn/nVX15Zf2V2eD1U1q+Wlpba73//e4uPj6/yHGDjxo3Wu3dvi4qKsqSkJHvggQf8ts9du3bZddddZ7GxsRYfH2/Dhg2zgoIC3/gePXrY/fffb7fddpvFxcXZ3XffXem8Htkff/vttybJ5syZ4zvevvPOO3b++edbRESEZWRkWEFBgd16660WHx9vsbGxdu2119quXbt883/kfl5m/vz5vnOFM844w1566SW/WjZv3mz9+vWzuLg4a9iwoaWnp9vevXurXI7ll7WZVVtX2fqoaX8NVUfu38XFxRYTE2Mvv/yymR1bf7dlyxbr06ePxcXFWVxcnKWlpfkdL55++mlLTk62yMhI69atm61YscI3rqZ92+zo+/3KbN++3eLi4uynn36yNm3a+PbNMgUFBXb33Xdbs2bNLCoqys477zxbvny5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FRcX69RTT/Vth40bN1ZRUZHfdtixY0e/92jevHlIboe9e/dWfn6+MjIy9NZbb+mWW26pMI2r7eVYltns2bN18cUXq1mzZvJ6vXr99de1c+fOal9TXR+7bt06Pfjgg7516/V6NWXKFN+6XbdunWbOnOk3/tZbb9W2bdtUWlrqa/e88847rvndtGmTzj33XDVo8P+H3a5du9bYZrNmzSrsY3fffbekw+upsv3BhZqOc7XZx/bu3atDhw6poKBAW7du1YABA/yW88KFC/32sSOPyXW9j1XWx7p2ZD/ZuHFjv3OA7OxsnXHGGX6/L+zevbv27NmjvXv3Kjs7W3FxcTrrrLP8xh+5vmqz/UrSb3/7W9/6+fDDD/X222/7/Q6+fDvffPONSkpK/PqKDh06KD4+vtq+Yt26dXrppZf8toXx48f7toX169crLS1NMTExtar5SLWtq7706ZV5+umn5fV6FRMTo2eeeUYvv/yyzj333GPu7+666y7ddttt6tOnj5599lm/PvnI40V4eLi6du3qt6xr2rePpd8vb+nSpcrNzVWfPn0kST/72c+UnJysDz/8UNLh43xsbGyVfe769evVs2fPSsetW7dOa9as8VtmvXv31sGDB/Xtt9/qsssuk8fjUdu2bXXHHXdo9uzZvr7juuuuU2Zmps4880zdd999Wrx4sd9y69Kli995dWXH2er23dr0rdWtu0A6sW/NWIm2bdvK4/EoOztb5557bpXTDRkyRAcPHtSrr76q5ORkbd26VZdffrnfj5UjIiL8XuPxeCodVn6nKxtW2d9VKd9m2fTl2zyWu6AeeRAqz8xqbNPj8fgdPGvzI+5jmdfKlmdZ6CkoKFBqaqpmz55doZ1WrVpV2mZZG0euk5NRampqhX0hMjJSqampFW6+EKgTJa/Xe1zbYYMGDYKyHVY2rGwbKigoUHR0tL766qsK7ZT/cKS+bIdhYWEaNGiQ7r//fn333Xfq27evvv32W79patpeykJSTevuaJfZN998o2uvvVajRo3Sc889p0aNGumpp56q8eYU1fWxBQUFevbZZ30nHmWio6N94wcOHKjHHnusyvmUVKuT3ermtzb7Q2XCwsKc7mPS0e9nlb1Hbfaxshp/+uknSdI///lPvxAqSXFxcZW2WdZGXe5jZct9w4YNlZ5vZGVl+barY13OUvV9Wk37YmXjK2uvtmFt7NixuuGGGxQfH6/ExMRq2znW40pBQYFGjhypYcOG+Q0vO9E+3uNVbV9/om1vLt1+++2677775PV6/T4gONb+7s4771SfPn00a9YszZo1S2PHjtXcuXP185//vFb1VLesj7XfL+/NN99Ufn6+X92lpaWaOnWqBg4ceMz9r3R4mV1yySV65ZVXKoxr0aKFIiIitHbtWi1YsEBz587VsGHD1K1bN82cOVMpKSnatGmT5syZo3nz5umqq67S4MGDj+ou1NXtu7XpW4933R2rkLuCmZiYqF69eum5556rdOXs27dPkrR8+XKNHDlSl112mTp06KA9e/Y4q6H8bbtXrlyp8PBwtW3b9pjaOuOMM/TFF1/4nu/bt++4/1VA+/bt/Wo8dOhQhVsaJyUl+V3NXbduXY3tfvnll75wKEkZGRlq3779MdfZqVMn7dixQw0bNlRqaqrfo+zkryZlnVb5uk4WiYmJ6tmzpyZNmlTjQbFDhw5avny537Bly5apQ4cOAavvyO1QOrzNlHcs2+GmTZuUn5/v1+bxboeFhYUqKiqqsB3W9u6qobYdDh48WJ999pkGDhxY4cAv1by9lN3B7mjXXXmVLbMvv/xS0dHRGj9+vLp27aozzjhDW7duPap2j9SpUyd98803FdZt2YdYnTp1UmZmZoXxtfkmydFo166dVq9e7bevlu/7j0X79u0r3R/KO3IfO3jwYK2uRLs8zjVt2lTNmzfXjh07Kizj8lc1ahIRERHUfSwxMVE9evTQ888/X+F846OPPtLGjRvVv39/SYeXc15enl+oPHKfqKz+du3a+S3r/Px8v3OADh06aNOmTdq7d69v2LJly5SUlKSEhAR16NBBP/74ozIzM33jly5deszrKykpSampqZWGyyO1bdtW4eHhfn1FVlaW8vPzfX1FZfPcqVMn39X38o+UlBRJh6+OZ2RkqLCwsNL3rWk7qE1d9V3ZRYgj78J+PP1dmzZtNGLECC1YsEA9evTw3c26ffv2fsu6pKREq1atqvWyPt5+/8CBA5o+fbqmTJni902PBQsWaP78+crJyVHHjh1VUFCgVatWVdpGx44dtWjRokrHderUSVlZWUpOTq6wzMqOY5GRkbr88sv1wgsv+IJc2RXa2NhYXX/99Zo8ebJee+01/f3vf5d0eN/+4osv/C4IHO15WW371qrWXSCFXMCU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\" class=\"pd_save\"></center>\n \n \n \n </div>",
"text/plain": "<IPython.core.display.HTML object>"
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": ""
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Load External Data\nSo far, you've worked with data hard-coded into our notebook. Now, load external data (CSV) from a URL."
},
{
"metadata": {
"pixiedust": {
"displayParams": {
"chartsize": "50",
"color": "origin",
"handlerId": "scatterPlot",
"keyFields": "horsepower",
"kind": "hex",
"rendererId": "matplotlib",
"rowCount": "1000",
"title": "Distribution of MPG per Horsepower",
"valueFields": "mpg"
}
}
},
"cell_type": "code",
"source": "\n# load a CSV with pixiedust.sampleData()\ndf3 = pixiedust.sampleData(\"https://github.com/ibm-watson-data-lab/open-data/raw/master/cars/cars.csv\")\ndisplay(df3)",
"execution_count": 5,
"outputs": [
{
"data": {
"text/html": "<style type=\"text/css\">.pd_warning{display:none;}</style><div class=\"pd_warning\"><em>Hey, there's something awesome here! To see it, open this notebook outside GitHub, in a viewer like Jupyter</em></div>\n <div class=\"pd_save is-viewer-good\" style=\"padding-right:10px;text-align: center;line-height:initial !important;font-size: xx-large;font-weight: 500;color: coral;\">\n Distribution of MPG per Horsepower\n </div>\n <div id=\"chartFiguref92922ad\" class=\"pd_save is-viewer-good\" style=\"overflow-x:auto\">\n \n \n <center><img style=\"max-width:initial !important\" src=\"data:image/png;base64,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\" class=\"pd_save\"></center>\n \n \n \n </div>",
"text/plain": "<IPython.core.display.HTML object>"
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "You should see a scatterplot above, rendered again by matplotlib. Find the `Renderer` menu at top-right. You should see options for **Bokeh** and **Seaborn**. If you don't see Seaborn, it's not installed on your system. No problem, just install it by running the next cell."
},
{
"metadata": {
"scrolled": true
},
"cell_type": "code",
"source": "# To install Seaborn, uncomment the next line, and then run this cell\n#!pip install --user seaborn",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "*If you installed Seaborn, you'll need to also restart your notebook kernel, and run the cell to `import pixiedust` again. Find **Restart** in the **Kernel** menu above.*"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "End of chapter. [Return to table of contents](#toc)\n<hr>"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "\n# <a id=\"part_two\"></a>Load text data from remote sources\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Data files commonly reside in remote sources, such as such as public or private market places or GitHub repositories. You can load comma separated value (csv) data files using Pixiedust's `sampleData` method. "
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Prerequisites"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "If you haven't already, import PixieDust. Follow the instructions in [Get started](#part_one)."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Load data\n\nTo load a data set, run `pixiedust.sampleData` and specify the data set URL:"
},
{
"metadata": {},
"cell_type": "code",
"source": "homes = pixiedust.sampleData(\"https://raw.githubusercontent.com/ibm-watson-data-lab/open-data/master/homesales/milliondollarhomes.csv\")",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The `pixiedust.sampleData` method loads the data into an [Apache Spark DataFrame](https://spark.apache.org/docs/latest/sql-programming-guide.html#datasets-and-dataframes), which you can inspect and visualize using `display()`."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Inspect and preview the loaded data\n\nTo inspect the automatically inferred schema and preview a small subset of the data, you can use the _DataFrame Table_ view, as shown in this preconfigured example: "
},
{
"metadata": {
"pixiedust": {
"displayParams": {
"handlerId": "tableView"
}
}
},
"cell_type": "code",
"source": "display(homes)",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Simple visualization using bar charts\n\nWith PixieDust `display()`, you can visually explore the loaded data using built-in charts, such as, bar charts, line charts, scatter plots, or maps.\n\nTo explore a data set:\n* choose the desired chart type from the drop down\n* configure chart options\n* configure display options\n\nYou can analyze the average home price for each city by choosing: \n* chart type: bar chart\n* chart options\n * _Options > Keys_: `CITY`\n * _Options > Values_: `PRICE` \n * _Options > Aggregation_: `AVG`\n \nRun the next cell to review the results. "
},
{
"metadata": {
"pixiedust": {
"displayParams": {
"aggregation": "AVG",
"chartsize": "51",
"handlerId": "barChart",
"keyFields": "CITY",
"legend": "true",
"mpld3": "false",
"rendererId": "matplotlib",
"rowCount": "100",
"stretch": "true",
"title": "Average home price by city",
"valueFields": "PRICE"
}
},
"scrolled": false
},
"cell_type": "code",
"source": "display(homes)",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Explore the data\n\nYou can change the display **Options** so you can continue to explore the loaded data set without having to pre-process the data. \n\nFor example, change: \n* _Options > Key_ to `YEAR_BUILT` and \n* _Options > aggregation_ to `COUNT` \n\nNow you can find out how old the listed properties are:"
},
{
"metadata": {
"pixiedust": {
"displayParams": {
"aggregation": "COUNT",
"chartsize": "50",
"handlerId": "barChart",
"keyFields": "YEAR BUILT",
"legend": "false",
"rowCount": "100",
"stretch": "true",
"title": "Property age",
"valueFields": "PRICE"
}
}
},
"cell_type": "code",
"source": "display(homes)",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Use sample data sets\n\nPixieDust comes with a set of curated data sets that you can use get familiar with the different chart types and options. \n\nType `pixiedust.sampleData()` to display those data sets."
},
{
"metadata": {},
"cell_type": "code",
"source": "pixiedust.sampleData()",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The homes sales data set you loaded earlier is one of the samples. Therefore, you could have loaded it by specifying the displayed data set id as parameter: `home = pixiedust.sampleData(6)`"
},
{
"metadata": {
"collapsed": true
},
"cell_type": "markdown",
"source": "If your data isn't stored in csv files, you can load it into a DataFrame from any supported Spark [data source](https://spark.apache.org/docs/latest/sql-programming-guide.html#data-sources). See [these Python code snippets](https://apsportal.ibm.com/docs/content/analyze-data/python_load.html) for more information."
},
{
"metadata": {
"collapsed": true
},
"cell_type": "markdown",
"source": "End of chapter. [Return to table of contents](#toc)\n<hr>"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "# <a id=\"contribute\"></a>Contribute\n\nBy now, you've walked through PixieDust's intro notebooks and seen PixieDust in action. If you like what you saw, join [the project](https://github.com/ibm-watson-data-lab/pixiedust)! \n\nAnyone can get involved. Here are some ways you can [contribute](https://ibm-watson-data-lab.github.io/pixiedust/contribute.html):\n\n - [Write a visualization](#Write-a-visualization)\n - [Build a renderer](#Build-a-renderer)\n - [Enter an issue](#Enter-an-issue)\n - [Share PixieDust](#Share-PixieDust)\n - [Learn more](#Learn-more)\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "End of chapter. [Return to table of contents](#toc)\n\n## Authors\n* Jose Barbosa\n* Mike Broberg\n* Inge Halilovic\n* Jess Mantaro\n* Brad Noble\n* David Taieb\n* Patrick Titzler\n\n<hr>\nCopyright &copy; IBM Corp. 2017, 2018. This notebook and its source code are released under the terms of the MIT License."
}
],
"metadata": {
"celltoolbar": "Edit Metadata",
"kernelspec": {
"name": "python37",
"display_name": "Python 3.7 with Spark",
"language": "python3"
},
"language_info": {
"mimetype": "text/x-python",
"nbconvert_exporter": "python",
"name": "python",
"pygments_lexer": "ipython3",
"version": "3.7.10",
"file_extension": ".py",
"codemirror_mode": {
"version": 3,
"name": "ipython"
}
}
},
"nbformat": 4,
"nbformat_minor": 1
}
@bcyoungV
Copy link
Author

In [1] instalação da livraria pixiedust

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment