-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathNBAAnalysis.koi
More file actions
1 lines (1 loc) · 28 KB
/
NBAAnalysis.koi
File metadata and controls
1 lines (1 loc) · 28 KB
1
{"nodes":[{"nid":6,"uid":"custom","category":"function","type":"plotImage (SOM) Normalized","x":790,"y":252,"fields":{"in":[{"name":"start"}],"out":[{"name":"pass"}]},"python":"@on_start\ndef addPlot|||(*args,**kwargs):\n \n matplotlib.rcParams['xtick.major.size'] = 0\n matplotlib.rcParams['ytick.major.size'] = 0\n matplotlib.rcParams['xtick.labelsize'] = 0\n matplotlib.rcParams['ytick.labelsize'] = 0\n # Get output grid\n centroids = np.array(kwargs['Data'].get_centroids())\n centroids[:,:,0] = centroids[:,:,0]/centroids[:,:,0].max()\n centroids[:,:,1] = centroids[:,:,1]/centroids[:,:,1].max()\n centroids[:,:,2] = centroids[:,:,2]/centroids[:,:,2].max()\n centroids[:,:,3] = centroids[:,:,3]/centroids[:,:,3].max()\n subjects = kwargs['Settings']['SOM']['Data'].subject\n \n\n if 'Figures' not in kwargs['Settings']:\n kwargs['Settings']['Figures'] ={{}}\n \n kwargs['Settings']['Figures'][{userinput}] = plt.figure({userinput})\n plt.imshow(centroids)\n for i, m in enumerate(kwargs['Settings']['SOM']['Mapped']):\n plt.text(\n m[1],\n m[0],\n subjects[i],\n ha='center',\n va='center',\n bbox=dict(\n facecolor='white',\n alpha=0.5,\n lw=0))\n plt.show() # Remove this line if you do not want your program to wait for this figure to render\n \n return kwargs\n","python_import":"from matplotlib import pyplot as plt\nimport matplotlib","python_exec":"addPlot|||","settings":[{"key":"userinput","label":"Figure Name"}],"icon":"./static/media/timer.ae907aa2.svg","data":{"id":"\"Normal\"","userinput":"'Self Organizing Map'"},"description":"","showExecution":false,"showDescription":false,"showImports":false,"showFunction":true,"toggleMarkdown":false,"toggleUserDialog":false,"stringDialog":"[{\"key\":\"userinput\",\"label\":\"Figure Name\"}]","stringPins":"{\"in\":[{\"name\":\"start\"}],\"out\":[{\"name\":\"pass\"}]}","togglePins":false,"headerStyle":{"background":"#adac15"}},{"nid":5,"uid":"custom","category":"function","type":"SOM(TensorFlow)","x":547,"y":239,"fields":{"in":[{"name":"start"}],"out":[{"name":"pass"}]},"python":"class SOM(object):\n \"\"\"\n 2-D Self-Organizing Map with Gaussian Neighbourhood function\n and linearly decreasing learning rate.\n \"\"\"\n \n #To check if the SOM has been trained\n _trained = False\n \n def __init__(self, m, n, dim, n_iterations=100, alpha=None, sigma=None):\n \"\"\"\n Initializes all necessary components of the TensorFlow\n Graph.\n \n m X n are the dimensions of the SOM. 'n_iterations' should\n should be an integer denoting the number of iterations undergone\n while training.\n 'dim' is the dimensionality of the training inputs.\n 'alpha' is a number denoting the initial time(iteration no)-based\n learning rate. Default value is 0.3\n 'sigma' is the the initial neighbourhood value, denoting\n the radius of influence of the BMU while training. By default, its\n taken to be half of max(m, n).\n \"\"\"\n \n #Assign required variables first\n self._m = m\n self._n = n\n if alpha is None:\n alpha = 0.3\n else:\n alpha = float(alpha)\n if sigma is None:\n sigma = max(m, n) / 2.0\n else:\n sigma = float(sigma)\n self._n_iterations = abs(int(n_iterations))\n \n ##INITIALIZE GRAPH\n self._graph = tf.Graph()\n \n ##POPULATE GRAPH WITH NECESSARY COMPONENTS\n with self._graph.as_default():\n \n ##VARIABLES AND CONSTANT OPS FOR DATA STORAGE\n \n #Randomly initialized weightage vectors for all neurons,\n #stored together as a matrix Variable of size [m*n, dim]\n self._weightage_vects = tf.Variable(tf.random_normal(\n [m*n, dim]))\n \n #Matrix of size [m*n, 2] for SOM grid locations\n #of neurons\n self._location_vects = tf.constant(np.array(\n list(self._neuron_locations(m, n))))\n \n ##PLACEHOLDERS FOR TRAINING INPUTS\n #We need to assign them as attributes to self, since they\n #will be fed in during training\n \n #The training vector\n self._vect_input = tf.placeholder(\"float\", [dim])\n #Iteration number\n self._iter_input = tf.placeholder(\"float\")\n \n ##CONSTRUCT TRAINING OP PIECE BY PIECE\n #Only the final, 'root' training op needs to be assigned as\n #an attribute to self, since all the rest will be executed\n #automatically during training\n \n #To compute the Best Matching Unit given a vector\n #Basically calculates the Euclidean distance between every\n #neuron's weightage vector and the input, and returns the\n #index of the neuron which gives the least value\n bmu_index = tf.argmin(tf.sqrt(tf.reduce_sum(\n tf.pow(tf.subtract(self._weightage_vects, tf.stack(\n [self._vect_input for i in range(m*n)])), 2), 1)),\n 0)\n \n #This will extract the location of the BMU based on the BMU's\n #index\n slice_input = tf.pad(tf.reshape(bmu_index, [1]),\n np.array([[0, 1]]))\n bmu_loc = tf.reshape(tf.slice(self._location_vects, slice_input,\n tf.constant(np.array([1, 2]))),\n [2])\n \n #To compute the alpha and sigma values based on iteration\n #number\n learning_rate_op = tf.subtract(1.0, tf.math.divide(self._iter_input,\n self._n_iterations))\n _alpha_op = tf.multiply(alpha, learning_rate_op)\n _sigma_op = tf.multiply(sigma, learning_rate_op)\n \n #Construct the op that will generate a vector with learning\n #rates for all neurons, based on iteration number and location\n #wrt BMU.\n bmu_distance_squares = tf.reduce_sum(tf.pow(tf.subtract(\n self._location_vects, tf.stack(\n [bmu_loc for i in range(m*n)])), 2), 1)\n neighbourhood_func = tf.exp(tf.negative(tf.math.divide(tf.cast(\n bmu_distance_squares, \"float32\"), tf.pow(_sigma_op, 2))))\n learning_rate_op = tf.multiply(_alpha_op, neighbourhood_func)\n \n #Finally, the op that will use learning_rate_op to update\n #the weightage vectors of all neurons based on a particular\n #input\n learning_rate_multiplier = tf.reshape(learning_rate_op, [self._m * self._n, 1])\n weightage_delta = tf.multiply(\n learning_rate_multiplier,\n tf.subtract(tf.stack([self._vect_input for i in range(m*n)]),\n self._weightage_vects)) \n new_weightages_op = tf.add(self._weightage_vects,\n weightage_delta)\n self._training_op = tf.assign(self._weightage_vects,\n new_weightages_op) \n \n ##INITIALIZE SESSION\n self._sess = tf.Session()\n \n ##INITIALIZE VARIABLES\n init_op = tf.global_variables_initializer()\n self._sess.run(init_op)\n \n def _neuron_locations(self, m, n):\n \"\"\"\n Yields one by one the 2-D locations of the individual neurons\n in the SOM.\n \"\"\"\n #Nested iterations over both dimensions\n #to generate all 2-D locations in the map\n for i in range(m):\n for j in range(n):\n yield np.array([i, j])\n \n def train(self, input_vects):\n \"\"\"\n Trains the SOM.\n 'input_vects' should be an iterable of 1-D NumPy arrays with\n dimensionality as provided during initialization of this SOM.\n Current weightage vectors for all neurons(initially random) are\n taken as starting conditions for training.\n \"\"\"\n \n #Training iterations\n for iter_no in range(self._n_iterations):\n #Train with each vector one by one\n for input_vect in input_vects:\n self._sess.run(self._training_op,\n feed_dict={{self._vect_input: input_vect,\n self._iter_input: iter_no}})\n \n #Store a centroid grid for easy retrieval later on\n centroid_grid = [[] for i in range(self._m)]\n self._weightages = list(self._sess.run(self._weightage_vects))\n self._locations = list(self._sess.run(self._location_vects))\n for i, loc in enumerate(self._locations):\n centroid_grid[loc[0]].append(self._weightages[i])\n self._centroid_grid = centroid_grid\n \n self._trained = True\n \n def get_centroids(self):\n \"\"\"\n Returns a list of 'm' lists, with each inner list containing\n the 'n' corresponding centroid locations as 1-D NumPy arrays.\n \"\"\"\n if not self._trained:\n raise ValueError(\"SOM not trained yet\")\n return self._centroid_grid\n \n def map_vects(self, input_vects):\n \"\"\"\n Maps each input vector to the relevant neuron in the SOM\n grid.\n 'input_vects' should be an iterable of 1-D NumPy arrays with\n dimensionality as provided during initialization of this SOM.\n Returns a list of 1-D NumPy arrays containing (row, column)\n info for each input vector(in the same order), corresponding\n to mapped neuron.\n \"\"\"\n \n if not self._trained:\n raise ValueError(\"SOM not trained yet\")\n \n to_return = []\n for vect in input_vects:\n min_index = min([i for i in range(len(self._weightages))],\n key=lambda x: np.linalg.norm(vect-\n self._weightages[x]))\n to_return.append(self._locations[min_index])\n \n return to_return\n\n\n@on_start\ndef SimpleSOM(*args, **kwargs):\n df = kwargs['Data']\n kwargs['Settings']['SOM']={{'Data':df}}\n params = df.keys()[df.keys()!='subject']\n testdata = df[params].values\n subjects = df.subject\n # Train a 20x30 SOM with 400 iterations\n som = SOM({xdim}, {ydim}, len(params), {iterations})\n kwargs['Data']=som\n som.train(testdata)\n\n # Get output grid\n #kwargs['Data']['Centroids'] = som.get_centroids()\n # Map colors to their closest neurons\n kwargs['Settings']['SOM']['Mapped']=som.map_vects(testdata)\n\n return kwargs\n ","python_import":"import tensorflow as tf\nimport numpy as np\n","python_exec":"SimpleSOM","settings":[{"key":"xdim","label":"Self Organizing Map Dimension (x)"},{"key":"ydim","label":"Self Organizing Map Dimension (y)"},{"key":"iterations","label":"Number of times to iterate"}],"data":{"xdim":"20","ydim":"30","iterations":"400"},"description":"This code was adapted for StremeCoder from [SACHIN JOGLEKAR'S Work](https://github.com/srjoglekar246/TensorFlow-Examples)\n\n","showDescription":true,"showImports":false,"showExecution":false,"showFunction":false,"toggleMarkdown":false,"toggleUserDialog":false,"stringDialog":"[{\"key\":\"xdim\",\"label\":\"Self Organizing Map Dimension (x)\"},{\"key\":\"ydim\",\"label\":\"Self Organizing Map Dimension (y)\"},{\"key\":\"iterations\",\"label\":\"Number of times to iterate\"}]","stringPins":"{\"in\":[{\"name\":\"start\"}],\"out\":[{\"name\":\"pass\"}]}","togglePins":false,"headerStyle":{"background":"#15ad60"}},{"nid":0,"version":"1.0.0","uid":1,"category":"function","type":"Start","x":10,"y":10,"headerStyle":{"background":""},"fields":{"in":[],"out":[{"name":"start"}]},"python":"def start():\n return {'Start':True,'Settings':{'Verbose':True},'Status':{}}\n","python_import":"","python_exec":"start","settings":[],"icon":"./static/media/start.c59e7ea6.svg","data":{},"kwargs":{},"description":"\n\nThe Start Node \n\n_This node is required to run a standard nodegraph that use the onstart decorator_\n\n\n## This Node Changes\n\nThis node initializes all standard kwargs\n\n## Getting This Node to Work\n\nThis node takes no inputs and only one can be connected in any given nodegraph. It sets Verbose to True by default, this setting outputs nodes run in the terminal when they are running and other debugging information. \n\n\n### Input State Requirements\n\nNone\n\n### Output State\n\n```python\nkwargs={\n Start: {},\n Settings: {Verbose:True},\n Data:{},\n Status: {}\n }\n```\n\n## Example Usage\n\n\n\n## Todo\n\n## Known Issues\n\nNo known Issues\n\n## License\n\nUsage of this node is provided under the [MIT License](http://http//opensource.org/licenses/mit-license.php). See LICENSE for the full details.\n\nThis node signifies the beginning of your node graph by the streme server. The start node passes true from the start output pin initiating the nodes it is connected to."},{"nid":1,"version":"1.0.0","uid":10,"category":"function","type":"Stop","x":910,"y":39,"headerStyle":{"background":"#ad1562"},"fields":{"in":[{"name":"start"}],"out":[]},"python":"@on_start\ndef stop(*args,**kwargs):\n print('exiting')\n sys.exit()\n ","python_import":"import sys","python_exec":"stop","settings":[],"icon":"./static/media/stop.a2171794.svg","data":{},"kwargs":{},"description":"This node ends the existing node experiment. It will not stop processes that have started in parallel using split nodes."},{"nid":3,"version":"0.0.1","uid":5,"category":"logical","type":"Kobe","x":180,"y":121,"fields":{"in":[{"name":"start"}],"out":[{"name":"pass"}]},"python":"@on_start\ndef NBANode|||(*args,**kwargs):\n node = NBAScrapeNode.StremeNode()\n nkwargs = kwargs.copy()\n nkwargs['Data']='{userinput}'\n nkwargs['Data'] = node.run(**nkwargs)['Data']\n nkwargs['Data']['Player'] = '{playername}'\n nkwargs['Data']= nkwargs['Data'][nkwargs['Data']['Age']>0]\n kwargs['Data'] = nkwargs['Data']\n \n return kwargs","python_import":"import NBAScrapeNode","python_exec":"NBANode|||","settings":[{"key":"userinput","label":"url of Page you want to Parse"},{"key":"playername","label":"Player Name"}],"icon":"./static/media/blankNode.38260d5b.svg","data":{"undefined":"","userinput":"https://www.basketball-reference.com/players/b/bryanko01.html","playername":"Kobe"},"kwargs":{},"description":"\n\nInclude a brief title for your node and a small description. \n\n_One Sentence on what problem your node solves_\n\n[YOUR GITHUB PAGE FOR THE NODE SOURCE](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#links)\n\n## This Node Changes\n\n\n\nThis node takes a Pandas Dataframe in outputs and excel file and returns kwargs unchanged to the next node.\n\n## Getting This Node to Work\n\nThis node will work if it provided with a Dataframe in kwargs{Data} and Pandas is installed\n\n### Installing Dependencies\n\nThis node requires Pandas. Pandas can be installed using pip in your terminal \n\n```bash\npip install pandas\n```\n\nif you have python2 and python3 installed\n\n```bash\npip3 install pandas\n```\n\nIf you are using Anaconda (Pandas is already installed in the default setup):\n\n```bash\nconda install pandas\n```\n\n### Input State Requirements\n\nThis node requires that kwargs{Data} be a [Pandas Dataframe](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html)\n\n```python\nkwargs={\n Start: True,\n Settings: Any,\n Data: Any Pandas Dataframe,\n Status: Any,\n }\n```\n\n### Output State\n\n```python\nkwargs={\n Start: No Change,\n Settings: No Change,\n Data: No Change,\n Status: No Change\n }\n```\n\n## Example Usage\n\nCheck out this simple demo of this node working : [Download Koi](https://mykoilocation.com)\n\n\n\n## Todo\n\n- Something\n\n- Another Thing\n\n- Something Else\n\n## Known Issues\n\n- We coded it poorly\n\n- Works only on the first of every month that is also within 5 days of the summer solstice \n\n## License\n\nUsage of this node is provided under the [MIT License](http://http//opensource.org/licenses/mit-license.php). See LICENSE for the full details.\n","showExecution":false,"showDescription":true,"showImports":false,"showFunction":false,"toggleMarkdown":false,"toggleUserDialog":false,"stringDialog":"[{\"key\":\"userinput\",\"label\":\"url of Page you want to Parse\"},{\"key\":\"playername\",\"label\":\"Player Name\"}]","stringPins":"{\"in\":[{\"name\":\"start\"}],\"out\":[{\"name\":\"pass\"}]}","togglePins":false},{"nid":4,"uid":"custom","category":"logical","type":"NBANode","x":88,"y":535,"fields":{"in":[{"name":"start"}],"out":[{"name":"pass"}]},"python":"@on_start\ndef NBANode|||(*args,**kwargs):\n node = NBAScrapeNode.StremeNode()\n nkwargs = kwargs.copy()\n nkwargs='{userinput}'\n nkwargs['Data'] = node.run(**nkwargs)['Data']\n nkwargs['Data']['Player'] = '{playername}'\n kwargs['Data'] = nkwargs['Data']\n \n return kwargs","python_import":"import NBAScrapeNode","python_exec":"NBANode|||","settings":[{"key":"userinput","label":"url of Page you want to Parse"},{"key":"playername","label":"Player Name"}],"icon":"./static/media/blankNode.38260d5b.svg","data":{"undefined":"","userinput":"https://www.basketball-reference.com/players/b/bryanko01.html","playername":"Kobe"},"description":"\n\nInclude a brief title for your node and a small description. \n\n_One Sentence on what problem your node solves_\n\n[YOUR GITHUB PAGE FOR THE NODE SOURCE](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#links)\n\n## This Node Changes\n\n\n\nThis node takes a Pandas Dataframe in outputs and excel file and returns kwargs unchanged to the next node.\n\n## Getting This Node to Work\n\nThis node will work if it provided with a Dataframe in kwargs{Data} and Pandas is installed\n\n### Installing Dependencies\n\nThis node requires Pandas. Pandas can be installed using pip in your terminal \n\n```bash\npip install pandas\n```\n\nif you have python2 and python3 installed\n\n```bash\npip3 install pandas\n```\n\nIf you are using Anaconda (Pandas is already installed in the default setup):\n\n```bash\nconda install pandas\n```\n\n### Input State Requirements\n\nThis node requires that kwargs{Data} be a [Pandas Dataframe](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html)\n\n```python\nkwargs={\n Start: True,\n Settings: Any,\n Data: Any Pandas Dataframe,\n Status: Any,\n }\n```\n\n### Output State\n\n```python\nkwargs={\n Start: No Change,\n Settings: No Change,\n Data: No Change,\n Status: No Change\n }\n```\n\n## Example Usage\n\nCheck out this simple demo of this node working : [Download Koi](https://mykoilocation.com)\n\n\n\n## Todo\n\n- Something\n\n- Another Thing\n\n- Something Else\n\n## Known Issues\n\n- We coded it poorly\n\n- Works only on the first of every month that is also within 5 days of the summer solstice \n\n## License\n\nUsage of this node is provided under the [MIT License](http://http//opensource.org/licenses/mit-license.php). See LICENSE for the full details.\n"},{"nid":7,"version":"0.0.1","uid":5,"category":"logical","type":"reFormat","x":269,"y":304,"fields":{"in":[{"name":"start"}],"out":[{"name":"pass"}]},"python":"@on_start\ndef reFormat|||(*args,**kwargs):\n kwargs['Data']['subject'] = kwargs['Data']['Player'] + kwargs['Data']['Age'].astype(str)\n kwargs['Data'] = kwargs['Data'][['subject','PER','WS','TOV%','VORP']]\n \n return kwargs","python_import":"","python_exec":"reFormat|||","settings":[""],"icon":"./static/media/blankNode.38260d5b.svg","data":{},"kwargs":{},"description":"\n\nInclude a brief title for your node and a small description. \n\n_One Sentence on what problem your node solves_\n\n[YOUR GITHUB PAGE FOR THE NODE SOURCE](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#links)\n\n## This Node Changes\n\n\n\nThis node takes a Pandas Dataframe in outputs and excel file and returns kwargs unchanged to the next node.\n\n## Getting This Node to Work\n\nThis node will work if it provided with a Dataframe in kwargs{Data} and Pandas is installed\n\n### Installing Dependencies\n\nThis node requires Pandas. Pandas can be installed using pip in your terminal \n\n```bash\npip install pandas\n```\n\nif you have python2 and python3 installed\n\n```bash\npip3 install pandas\n```\n\nIf you are using Anaconda (Pandas is already installed in the default setup):\n\n```bash\nconda install pandas\n```\n\n### Input State Requirements\n\nThis node requires that kwargs{Data} be a [Pandas Dataframe](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html)\n\n```python\nkwargs={\n Start: True,\n Settings: Any,\n Data: Any Pandas Dataframe,\n Status: Any,\n }\n```\n\n### Output State\n\n```python\nkwargs={\n Start: No Change,\n Settings: No Change,\n Data: No Change,\n Status: No Change\n }\n```\n\n## Example Usage\n\nCheck out this simple demo of this node working : [Download Koi](https://mykoilocation.com)\n\n\n\n## Todo\n\n- Something\n\n- Another Thing\n\n- Something Else\n\n## Known Issues\n\n- We coded it poorly\n\n- Works only on the first of every month that is also within 5 days of the summer solstice \n\n## License\n\nUsage of this node is provided under the [MIT License](http://http//opensource.org/licenses/mit-license.php). See LICENSE for the full details.\n","showExecution":true,"showDescription":false,"showImports":false,"showFunction":false,"toggleMarkdown":false,"toggleUserDialog":false,"stringDialog":"[\"\"]","stringPins":"{\"in\":[{\"name\":\"start\"}],\"out\":[{\"name\":\"pass\"}]}","togglePins":false,"headerStyle":{"background":"#adac15"}},{"nid":8,"uid":"custom","category":"logical","type":"Kobe","x":144,"y":226,"fields":{"in":[{"name":"start"}],"out":[{"name":"pass"}]},"python":"@on_start\ndef NBANode|||(*args,**kwargs):\n node = NBAScrapeNode.StremeNode()\n nkwargs = kwargs.copy()\n nkwargs['Data']='{userinput}'\n nkwargs['Data'] = node.run(**nkwargs)['Data']\n nkwargs['Data']['Player'] = '{playername}'\n nkwargs['Data']= nkwargs['Data'][nkwargs['Data']['Age']>0]\n kwargs['Data'] = nkwargs['Data']\n \n return kwargs","python_import":"import NBAScrapeNode","python_exec":"NBANode|||","settings":[{"key":"userinput","label":"url of Page you want to Parse"},{"key":"playername","label":"Player Name"}],"icon":"./static/media/blankNode.38260d5b.svg","data":{"undefined":"","userinput":"https://www.basketball-reference.com/players/b/bryanko01.html","playername":"Kobe"},"description":"\n\nInclude a brief title for your node and a small description. \n\n_One Sentence on what problem your node solves_\n\n[YOUR GITHUB PAGE FOR THE NODE SOURCE](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#links)\n\n## This Node Changes\n\n\n\nThis node takes a Pandas Dataframe in outputs and excel file and returns kwargs unchanged to the next node.\n\n## Getting This Node to Work\n\nThis node will work if it provided with a Dataframe in kwargs{Data} and Pandas is installed\n\n### Installing Dependencies\n\nThis node requires Pandas. Pandas can be installed using pip in your terminal \n\n```bash\npip install pandas\n```\n\nif you have python2 and python3 installed\n\n```bash\npip3 install pandas\n```\n\nIf you are using Anaconda (Pandas is already installed in the default setup):\n\n```bash\nconda install pandas\n```\n\n### Input State Requirements\n\nThis node requires that kwargs{Data} be a [Pandas Dataframe](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html)\n\n```python\nkwargs={\n Start: True,\n Settings: Any,\n Data: Any Pandas Dataframe,\n Status: Any,\n }\n```\n\n### Output State\n\n```python\nkwargs={\n Start: No Change,\n Settings: No Change,\n Data: No Change,\n Status: No Change\n }\n```\n\n## Example Usage\n\nCheck out this simple demo of this node working : [Download Koi](https://mykoilocation.com)\n\n\n\n## Todo\n\n- Something\n\n- Another Thing\n\n- Something Else\n\n## Known Issues\n\n- We coded it poorly\n\n- Works only on the first of every month that is also within 5 days of the summer solstice \n\n## License\n\nUsage of this node is provided under the [MIT License](http://http//opensource.org/licenses/mit-license.php). See LICENSE for the full details.\n"},{"nid":9,"version":"0.0.1","uid":5,"category":"logical","type":"blankNode","x":372,"y":41,"fields":{"in":[{"name":"start"}],"out":[{"name":"pass"}]},"python":"@on_start\ndef yourfunction(*args,**kwargs):\n return kwargs","python_import":"","python_exec":"yourfunction","settings":[""],"icon":"./static/media/blankNode.38260d5b.svg","data":{},"kwargs":{},"description":"\n\nInclude a brief title for your node and a small description. \n\n_One Sentence on what problem your node solves_\n\n[YOUR GITHUB PAGE FOR THE NODE SOURCE](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#links)\n\n## This Node Changes\n\n\n\nThis node takes a Pandas Dataframe in outputs and excel file and returns kwargs unchanged to the next node.\n\n## Getting This Node to Work\n\nThis node will work if it provided with a Dataframe in kwargs{Data} and Pandas is installed\n\n### Installing Dependencies\n\nThis node requires Pandas. Pandas can be installed using pip in your terminal \n\n```bash\npip install pandas\n```\n\nif you have python2 and python3 installed\n\n```bash\npip3 install pandas\n```\n\nIf you are using Anaconda (Pandas is already installed in the default setup):\n\n```bash\nconda install pandas\n```\n\n### Input State Requirements\n\nThis node requires that kwargs{Data} be a [Pandas Dataframe](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html)\n\n```python\nkwargs={\n Start: True,\n Settings: Any,\n Data: Any Pandas Dataframe,\n Status: Any,\n }\n```\n\n### Output State\n\n```python\nkwargs={\n Start: No Change,\n Settings: No Change,\n Data: No Change,\n Status: No Change\n }\n```\n\n## Example Usage\n\nCheck out this simple demo of this node working : [Download Koi](https://mykoilocation.com)\n\n\n\n## Todo\n\n- Something\n\n- Another Thing\n\n- Something Else\n\n## Known Issues\n\n- We coded it poorly\n\n- Works only on the first of every month that is also within 5 days of the summer solstice \n\n## License\n\nUsage of this node is provided under the [MIT License](http://http//opensource.org/licenses/mit-license.php). See LICENSE for the full details.\n"}],"connections":[{"from_node":0,"from":"start","to_node":3,"to":"start"},{"from_node":7,"from":"pass","to_node":5,"to":"start"},{"from_node":5,"from":"pass","to_node":6,"to":"start"},{"from_node":3,"from":"pass","to_node":7,"to":"start"}],"title":"NBAAnalysis","showPopup":false,"current":7,"count":9,"servers":{},"serverselection":null}