diff --git a/AudioDataTutorial.ipynb b/AudioDataTutorial.ipynb index 7e3b68a16868924111ac72c76de34eacb3096fee..d7ca78bc27e37e670ddb44b85d01d12272c9f0b0 100644 --- a/AudioDataTutorial.ipynb +++ b/AudioDataTutorial.ipynb @@ -47,6 +47,9 @@ "\n", "jtplot.style()\n", "\n", + "import warnings\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", "%matplotlib inline" ] }, @@ -72,7 +75,7 @@ "source": [ "import requests\n", "\n", - "url = 'http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Samples/Microsoft/6_Channel_ID.wav'\n", + "url = 'http://www.mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Samples/Microsoft/6_Channel_ID.wav'\n", "file='6_Channel_ID.wav'\n", "r = requests.get(url, allow_redirects=True)\n", "open(file, 'wb').write(r.content)" @@ -95,9 +98,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [], "source": [ "Fs, data = read('6_Channel_ID.wav')\n", @@ -264,6 +265,7 @@ "plt.xlabel('Sample Index')\n", "plt.ylabel('Amplitude')\n", "plt.title('Waveform of Test Audio')\n", + "plt.legend(['FL', 'FR', 'FC', 'LF', 'BF', 'BR'], bbox_to_anchor=(1.05, 1.0), loc='upper left')\n", "plt.show()" ] }, @@ -299,7 +301,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.2" + "version": "3.9.15" } }, "nbformat": 4, diff --git a/Auto-SKLearn_AutoML/Classification.ipynb b/Auto-SKLearn_AutoML/Classification.ipynb index d4dfef7e13a64b026fb5f08334a570d8dfaba3fc..57391f91c37791f41850721ac11e14e56af26d18 100644 --- a/Auto-SKLearn_AutoML/Classification.ipynb +++ b/Auto-SKLearn_AutoML/Classification.ipynb @@ -1,226 +1,4 @@ { -<<<<<<< HEAD - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "name": "Classification.ipynb", - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Classification Using Auto-SKLearn", - "\n", - "**_NOTE_** autosklearn only will run in linux (feb 26, 2022)\n", - "\n" - ], - "metadata": { - "id": "-I9i52jCjML_" - } - }, - { - "cell_type": "markdown", - "source": [ - "[](https://colab.research.google.com/github/mcint170/DataTools_Tutorial_Demo/blob/main/Auto-SKLearn_AutoML/Classification.ipynb)" - ], - "metadata": { - "id": "-ZrgwiL9kR_L" - } - }, - { - "cell_type": "code", - "source": [ - "!pip install auto-sklearn" - ], - "metadata": { - "id": "XAjlAHVRenet" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "If running on Google Colab: After running this cell, Click Runtime -> Restart runtime. Then you can run the following cells." - ], - "metadata": { - "id": "yqIcMA8hgZ8W" - } - }, - { - "cell_type": "code", - "source": [ - "# imports\n", - "from pprint import pprint\n", - "\n", - "import sklearn.datasets\n", - "import sklearn.metrics\n", - "import pickle\n", - "\n", - "import autosklearn.classification" - ], - "metadata": { - "id": "BXuKNodQe7QZ" - }, - "execution_count": 4, - "outputs": [] - }, - { - "cell_type": "code", - "source": [ - "# split the dataset\n", - "X, y = sklearn.datasets.load_breast_cancer(return_X_y=True)\n", - "X_train, X_test, y_train, y_test = \\\n", - " sklearn.model_selection.train_test_split(X, y, random_state=1)" - ], - "metadata": { - "id": "ExulDsEAfAoO" - }, - "execution_count": 5, - "outputs": [] - }, - { - "cell_type": "code", - "source": [ - "# Fit the classifier\n", - "automl = autosklearn.classification.AutoSklearnClassifier(\n", - " time_left_for_this_task=120,\n", - " per_run_time_limit=30,\n", - " tmp_folder='/tmp/autosklearn_classification_example_tmp',\n", - ")\n", - "automl.fit(X_train, y_train, dataset_name='breast_cancer')" - ], - "metadata": { - "id": "-0zi5I38fNMM", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "e732438b-610c-4d82-bd38-b1a5497541c6" - }, - "execution_count": 6, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "AutoSklearnClassifier(per_run_time_limit=30, time_left_for_this_task=120,\n", - " tmp_folder='/tmp/autosklearn_classification_example_tmp')" - ] - }, - "metadata": {}, - "execution_count": 6 - } - ] - }, - { - "cell_type": "code", - "source": [ - "# Different Models run by autosklearn\n", - "print(automl.leaderboard())" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "SxtOkluYiVHe", - "outputId": "29e44357-b2cb-404d-a024-cda5bd61b65a" - }, - "execution_count": 7, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - " rank ensemble_weight type cost duration\n", - "model_id \n", - "7 1 0.10 extra_trees 0.014184 1.502508\n", - "2 2 0.02 random_forest 0.028369 2.024807\n", - "36 3 0.06 k_nearest_neighbors 0.028369 0.853534\n", - "26 4 0.04 extra_trees 0.028369 2.240347\n", - "19 5 0.02 extra_trees 0.028369 2.791073\n", - "22 6 0.02 gradient_boosting 0.028369 1.149980\n", - "3 7 0.14 mlp 0.028369 1.667622\n", - "12 8 0.04 gradient_boosting 0.035461 1.240657\n", - "17 9 0.02 gradient_boosting 0.035461 1.510491\n", - "8 10 0.02 random_forest 0.035461 1.958862\n", - "37 11 0.06 gradient_boosting 0.035461 1.585859\n", - "5 12 0.04 random_forest 0.035461 2.075770\n", - "27 13 0.10 extra_trees 0.042553 1.910083\n", - "34 14 0.08 random_forest 0.042553 1.884860\n", - "9 15 0.04 extra_trees 0.042553 1.799630\n", - "23 16 0.02 mlp 0.049645 2.405247\n", - "35 17 0.06 extra_trees 0.056738 1.586217\n", - "32 18 0.02 extra_trees 0.063830 1.650489\n", - "38 19 0.02 extra_trees 0.063830 2.128083\n", - "20 20 0.02 passive_aggressive 0.078014 0.774718\n", - "30 21 0.04 adaboost 0.078014 3.121010\n", - "29 22 0.02 gaussian_nb 0.141844 1.951357\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "# Show the different models\n", - "pprint(automl.show_models(), indent=4)" - ], - "metadata": { - "id": "25xOtCJ7icgh" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "source": [ - "# Predict the test labels\n", - "predictions = automl.predict(X_test)\n", - "print(\"Accuracy score:\", sklearn.metrics.accuracy_score(y_test, predictions))" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "XvbhWaZpidYt", - "outputId": "7a153d86-4d3b-474a-f867-8adf7e07318b" - }, - "execution_count": 9, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Accuracy score: 0.9440559440559441\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "# Export the model with the highest rank\n", - "clf = automl.show_models()[7]['sklearn_classifier']\n", - "pickle.dump(clf,open('model.pickle','wb'))" - ], - "metadata": { - "id": "iCFcuh9EikR_" - }, - "execution_count": 10, - "outputs": [] - } - ] -======= "cells": [ { "cell_type": "markdown", @@ -234,26 +12,56 @@ "Example coming from [here](https://automl.github.io/auto-sklearn/master/examples/20_basic/example_classification.html#sphx-glr-examples-20-basic-example-classification-py)" ] }, + { + "cell_type": "markdown", + "id": "c5dad4c0", + "metadata": {}, + "source": [ + "**Classification doesn't work with current version of scipy/github and requires different packages/updates to run notebook**\n", + "- Note from professor Colbry: Notebook can't be fixed in classtime, write note of what needs to be fixed and push to gitlab as is." + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "id": "c69433ce", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ImportError", + "evalue": "cannot import name 'apply' from 'dask.compatibility' (/home/weinbren/.local/lib/python3.8/site-packages/dask/compatibility.py)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-23-910f3a285265>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpickle\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mautosklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclassification\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/.local/lib/python3.8/site-packages/autosklearn/classification.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mautosklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mestimators\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mAutoSklearnClassifier\u001b[0m \u001b[0;31m# noqa (imported but unused)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/.local/lib/python3.8/site-packages/autosklearn/estimators.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mwarnings\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 19\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mdask\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdistributed\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 20\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mjoblib\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.8/site-packages/dask/distributed.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 11\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mdistributed\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 12\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mImportError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmsg\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"No module named 'distributed'\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.8/site-packages/distributed/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_version\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mget_versions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mactor\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mActor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mActorFuture\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 8\u001b[0m from .client import (\n\u001b[1;32m 9\u001b[0m \u001b[0mClient\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.8/site-packages/distributed/actor.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mqueue\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mQueue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mclient\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mFuture\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdefault_client\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mprotocol\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mto_serialize\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0miscoroutinefunction\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msync\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mthread_state\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.8/site-packages/distributed/client.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdask\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 29\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mdask\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbase\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcollections_to_dsk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnormalize_token\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtokenize\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 30\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mdask\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompatibility\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mapply\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 31\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mdask\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mflatten\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mdask\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhighlevelgraph\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mHighLevelGraph\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mImportError\u001b[0m: cannot import name 'apply' from 'dask.compatibility' (/home/weinbren/.local/lib/python3.8/site-packages/dask/compatibility.py)" + ] + } + ], "source": [ "# imports\n", "from pprint import pprint\n", "\n", "import sklearn.datasets\n", "import sklearn.metrics\n", + "# Fixed import model_selection\n", + "import sklearn.model_selection\n", "import pickle\n", "\n", - "import autosklearn.classification" + "# This does not work on current version of github, needs update. \n", + "import autosklearn.classification\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "2b1e1930", "metadata": {}, "outputs": [], @@ -266,10 +74,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "id": "15e5f821", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "AttributeError", + "evalue": "module 'autosklearn' has no attribute 'classification'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-22-6c1473e893d3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Fit the classifier\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m automl = autosklearn.classification.AutoSklearnClassifier(\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mtime_left_for_this_task\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m120\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mper_run_time_limit\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m30\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mtmp_folder\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'/tmp/autosklearn_classification_example_tmp'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mAttributeError\u001b[0m: module 'autosklearn' has no attribute 'classification'" + ] + } + ], "source": [ "# Fit the classifier\n", "automl = autosklearn.classification.AutoSklearnClassifier(\n", @@ -282,10 +102,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "2d4e4d9f", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'automl' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-11-6dfffdcd8374>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Different Models run by autosklearn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mautoml\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mleaderboard\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'automl' is not defined" + ] + } + ], "source": [ "# Different Models run by autosklearn\n", "print(automl.leaderboard())" @@ -293,10 +125,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "72e580e7", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'automl' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-12-ab76765f6a20>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Show the different models\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mpprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mautoml\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow_models\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindent\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'automl' is not defined" + ] + } + ], "source": [ "# Show the different models\n", "pprint(automl.show_models(), indent=4)" @@ -304,10 +148,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "027039cd", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'automl' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-13-596897413c8d>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Predict the test labels\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mpredictions\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mautoml\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Accuracy score:\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetrics\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maccuracy_score\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpredictions\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'automl' is not defined" + ] + } + ], "source": [ "# Predict the test labels\n", "predictions = automl.predict(X_test)\n", @@ -316,10 +172,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "acd372ea", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'automl' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-14-14e40d77d77d>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Export the model with the highest rank\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mclf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mautoml\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow_models\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m7\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'sklearn_classifier'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mpickle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdump\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mclf\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'model.pickle'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'wb'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'automl' is not defined" + ] + } + ], "source": [ "# Export the model with the highest rank\n", "clf = automl.show_models()[7]['sklearn_classifier']\n", @@ -328,10 +196,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "a3324782", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'clf' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-15-b9c89d294f77>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mclf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'clf' is not defined" + ] + } + ], "source": [ "clf" ] @@ -347,7 +227,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -361,10 +241,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 5 ->>>>>>> 7e6d5ac (Adding minor comments and updates to AutoML tutorial) } diff --git a/GUI_Tutorial.ipynb b/GUI_Tutorial.ipynb index 63e37c787ee14a4bb4fb6bf69aed06ac0022bb04..cf8fe234bf93fdbe7bb55888bfe4a06bda199941 100644 --- a/GUI_Tutorial.ipynb +++ b/GUI_Tutorial.ipynb @@ -2,7 +2,6 @@ "cells": [ { "cell_type": "markdown", - "id": "7227f3fa", "metadata": {}, "source": [ "## Gradio: How you can build a GUI within a Jupyter Notebook\n", @@ -12,7 +11,17 @@ }, { "cell_type": "markdown", - "id": "ba81c68d", + "metadata": {}, + "source": [ + "## GUI Background\n", + "A graphical user interface (GUI) is an interface through which a user interacts with electronic devices such as computers and smartphones through the use of icons, menus and other visual indicators or representations (graphics). GUIs graphically display information and related user controls, unlike text-based interfaces, where data and commands are strictly in text. GUI representations are manipulated by a pointing device such as a mouse, trackball, stylus, or by a finger on a touch screen.\n", + "\n", + "Source: \n", + "https://www.techopedia.com/definition/5435/graphical-user-interface-gui" + ] + }, + { + "cell_type": "markdown", "metadata": {}, "source": [ "## Getting Started\n", @@ -24,7 +33,9 @@ "cell_type": "code", "execution_count": 1, "id": "cdfdbb3e", - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "name": "stdout", @@ -38,6 +49,14 @@ "!python --version" ] }, + { + "cell_type": "markdown", + "id": "b8de36df", + "metadata": {}, + "source": [ + "On your terminal," + ] + }, { "cell_type": "code", "execution_count": 2, @@ -50,7 +69,6 @@ }, { "cell_type": "markdown", - "id": "f76c9232", "metadata": {}, "source": [ "Next, import the library as follows:" @@ -70,7 +88,6 @@ }, { "cell_type": "markdown", - "id": "c3d4eb50", "metadata": {}, "source": [ "Gradio can be used with a wide range of media-text, pictures, video, and sound. It is most useful for demonstrating machine learning algorithms.\n", @@ -126,7 +143,6 @@ }, { "cell_type": "markdown", - "id": "8469e7e7", "metadata": {}, "source": [ "### The Interface\n", @@ -213,7 +229,6 @@ }, { "cell_type": "markdown", - "id": "94a5d6f2", "metadata": {}, "source": [ "Gradio can load in data, similar to pandas frames, by using the command `gradio.inputs.Dataframe(data_name)`. It can only take in strings, numbers, bools, and dates as data types. Gradio does not contain a library of datasets, so data must be input by the user. It can also work with time series, images, audio, video, and generic file uploads.\n", @@ -236,7 +251,6 @@ }, { "cell_type": "markdown", - "id": "17bf993f", "metadata": {}, "source": [ "An example of a question could be, what is the conclusion of the sentence: Today will be a good day.\n", @@ -248,7 +262,6 @@ }, { "cell_type": "markdown", - "id": "1196a4c1", "metadata": {}, "source": [ "How this data or tool could be used in some of the team projects (maybe not your own)\n", @@ -268,7 +281,6 @@ }, { "cell_type": "markdown", - "id": "500e9ab6", "metadata": {}, "source": [ "Sources:<br>\n", @@ -280,7 +292,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, diff --git a/GoogleSheetsTutorial.ipynb b/GoogleSheetsTutorial.ipynb index 02b4037fac8a80a14efdca8d123d7d952bcf362a..e1623d9304d4c8cc250125e28345be3bd6dea8cd 100644 --- a/GoogleSheetsTutorial.ipynb +++ b/GoogleSheetsTutorial.ipynb @@ -34,19 +34,15 @@ " 1. This can be found at https://console.developers.google.com/projectselector2/apis/credentials?pli=1&supportedpurview=project \n", " (you must use your personal email not your MSU email)\n", "2. Inside that project enable the Google sheets API and Google Drive for your new project\n", - " 1. Use the search bar to find and click on the Google Sheets API.\n", - " 2. Enable the API by selecting the blue button.\n", - " 3. Repeat the first two steps for the Google Drive API.\n", - "3. Create a Google service account through the Google developer portal\n", - "4. Go to “APIs & Services > Credentials†- 4.1 At the top of the screen select “Create credentials > Service account keyâ€.\n", - "5. Once you open the "Create service account" screen, fill out the name and ID fields and click "Create and Continue" to move to the next section. After filling out "1. Service account details" under "2. Grant this service account access to project" navigate to the "Role" drop down and choose "Basic" -> 'Editor." After you select the role, hit "Continue." You can skip the next section, "Grant users access to this service account" and click done. \n", - "6. Click “Create†and “Doneâ€.\n", - "7. Press “Manage service accounts†above Service Accounts.\n", - "8. Press on â‹® near recently created service account and select “Manage keys†and then click on “ADD KEY > Create new keyâ€.\n", - "9. Select JSON key type and press “Createâ€.\n", - "10. In your python file import gspread\n", - "11. Copy Json key into python file as a dictionary\n", + " 1. This is found by using the search bar to search for Google API and Google Drive\n", + "3. Go to “APIs & Services > Credentials†and choose “Create credentials > Service account keyâ€.\n", + "4. Fill out the form (making sure to add editor privledges to the service account)\n", + "5. Click “Create†and “Doneâ€.\n", + "6. Press “Manage service accounts†above Service Accounts.\n", + "7. Press on â‹® near recently created service account and select “Manage keys†and then click on “ADD KEY > Create new keyâ€.\n", + "8. Select JSON key type and press “Createâ€.\n", + "9. In your python file import gspread\n", + "10. Copy Json key into python file as a dictionary\n", "\n", "\n", "for more information/ documentation on gspread head here\n", diff --git a/GoogleSheetsTutorial1.ipynb b/GoogleSheetsTutorial1.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..c9d2d6e51b5d8a1175337a99648a179f9a862239 --- /dev/null +++ b/GoogleSheetsTutorial1.ipynb @@ -0,0 +1,74 @@ +# Google Sheets API Tutorial + +--- + + + +--- + + + +### How to Get Started + +1. Create a project inside Google Developer Console + 1. This can be found at https://console.developers.google.com/projectselector2/apis/credentials?pli=1&supportedpurview=project + (you must use your personal email not your MSU email) +2. Inside that project enable the Google sheets API and Google Drive for your new project + 1. This is found by using the search bar to search for Google API and Google Drive +3. Create a Google service account through the Google developer portal +4. Go to “APIs & Services > Credentials†and choose “Create credentials > Service account keyâ€. +5. Fill out the form (making sure to add editor privledges to the service account) +6. Click “Create†and “Doneâ€. +7. Press “Manage service accounts†above Service Accounts. +8. Press on â‹® near recently created service account and select “Manage keys†and then click on “ADD KEY > Create new keyâ€. +9. Select JSON key type and press “Createâ€. +10. In your python file import gspread +11. Copy Json key into python file as a dictionary + + +for more information/ documentation on gspread head here +https://docs.gspread.org/en/latest/oauth2.html + +!pip install gspread + +import gspread +import json + +## Testing out the API + +credentials = { + "type": "service_account", + "project_id": "d2l-instructor-api", + "private_key_id": "deb126d3a82a7dc84fea187d04cd37e871b5e6fc", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDUsc6loi+P4gzn\nkGdemmh3Mg1GIOIHnfbqDI8rZebakwuHDMqGp9cmEk1rP4NehR0PXRoE5j7DZs7z\n3gzTMbV75q1JmL6gRyCl0FQvwTCDEN5lst1NodjH6Pg1j61fpszLsNHe4EVyvaXH\nrTbwJvLARQlP+TQyGaTZiK8IXF3H0tOA/opOtuQEZQt9oIeae1TTM2mcUAg6MhAL\nL2/PkleLXqYdKJT6OhZyJgWwljyxg/0llxqz+yiEmJrkbn6r9taP2GzAFgqVpacN\nFF9idd+SCzgQ2eC6evAkdUibC6xH+TLZDo/uBwWS1AfBA38++Kn3y1caRvBNQPQ9\nDm6RRTrrAgMBAAECggEAIcojna2v56hOS4Vl3qIiIXmKoU79CZ+/R7x6DDdyntvI\nc4qFLDJC3FIBCZ479QqprLSqOwgHBYzyKMzoda7KeaYSdoQ1GIpkNeNsVG/ZEKFf\n64EoZjplkZDByeSK8wyxMVTkaodvkQRu71NlzG4rl38ANTvOXn0zcrmjsOzXmzRp\nb96Y5v71fypDzmDPnWB3+hbNEynYcJMWOxBOqt7T4TMxIpixdEcVyY/HMmsrtEHO\ng2InK+XdVbdPOal/woZhP/lc88jHAm9uD5yYZArwtOka4PuZvbVxT7aQItu3w7wh\n72u90TEo3KzuJBYnZb2RwitW6B1AQtea8WiTeVeftQKBgQDqu257OzPOjsLRCoim\nPZcF7zwVgZEs68fuWf5xjfT4AeDfYqvz1t6VfRUPunNOFZEsnnEcrcIIwa1gQDpR\nLlPA1ncoVu75yfS2XUQE6anbcFWmbZQU3m4BwE6Hjk0ftdP14e8Br7XdBN2TOg1E\nqtM7yF812COF8PEeCZPn6jgkfwKBgQDn9ze+Y0Rrxfgdl4FpvJZH963UlCOwuLVs\n6oFqXcGMbzeRmTxLDjkQ/cf6BqaTAfPNwc/PLrs26MGtLIcN24Lnie8q4nPrzCjr\nGq7A6km0ceurCQTj6VkkTy5E/fIh0og9A2BKXo1/G+pcv//LRUF8Tie8aTenlTl6\nomIZupWDlQKBgQDYNwPCcTr8RhX/VbOfZVYKOl5e9PUTqq+DxtOQJ5GBLMHFIm9/\ncOmgSxIuZbE2OLl7nwpTv13ekQAxi5fsFT9CfopN1x3TaoqFvI0d9VnnbqcGYSMo\nweYUqN3tEU/LKMJwV8e/Bun/By9OIQf9u1hNVfkVcNzv0ItY/ruFwQIr4wKBgEzA\n01QO2pPilH+OIwcOnJdBj+YYAls2MunQCnRcg29pWXS2xGl9UkqZ/nJvgux/p+E8\nMPu31cCMcZFQe3uNV5ovXNDOz1aFXkC0uoAgxbSMQVN9j32uN425GXFAqb6hP+0Y\nUeMpuB4H6Zs4+HWU+98aqTFBi2XLDZLTaixjPZelAoGBAM+mmJ9Cvnng2z5o8qTq\nMHf5ZRJl86PWQ/RxK/2r/Z8oGzm64O/5QD92YUlVfxA18rj/6pvz9rgX/tO9P7ec\n9xU+xVomRGMehiPdzUwwb0ZVqVnKgTIhACr2HNj2WuBcdcb6sqoYgBmAN1bjLu5n\n3fdTrl8aAH8TUW3uu2Rdeqql\n-----END PRIVATE KEY-----\n", + "client_email": "d2lapi@d2l-instructor-api.iam.gserviceaccount.com", + "client_id": "109123177444430472879", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/d2lapi%40d2l-instructor-api.iam.gserviceaccount.com" +} + +gc = gspread.service_account_from_dict(credentials) +sheet_id = "1vt5SnUuAojBLPug41dBs3_LKpyVM2rxrJw6MwAQ1_c0" +gsheet = gc.open_by_key(sheet_id) +worksheet_list = gsheet.worksheets() + + + +for sheet in worksheet_list: + sheet_name = sheet.title + # if not check_date(sheet_name): # if attendance from different month + # continue + sheet_data = gsheet.worksheet(sheet_name).get_all_records() + print(sheet_data) + +import pandas as pd + +dataframe = pd.DataFrame(gsheet.worksheet(sheet_name).get_all_records()) +dataframe.loc[1, "Hobby"] = "Watching K-Dramas" +gsheet.worksheet(sheet_name).update([dataframe.columns.values.tolist()] + dataframe.values.tolist()) + + + any other questions refer to https://docs.gspread.org/en/latest/user-guide.html + diff --git a/Video-Image-Data-Tutorial/Ford_Video_Analysis.ipynb b/Video-Image-Data-Tutorial/Ford_Video_Analysis.ipynb index b106c899cf2afe2a557fd6c4dd7f3faafb7a12f9..6ad91ea7e6b75cd579fa491fc6a08f05727d1d83 100644 --- a/Video-Image-Data-Tutorial/Ford_Video_Analysis.ipynb +++ b/Video-Image-Data-Tutorial/Ford_Video_Analysis.ipynb @@ -1,4 +1,237 @@ { +<<<<<<< HEAD + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "OqSmFS3lZj9Y" + }, + "source": [ + "# <center> Video Image Data </center>\n", + "#### CMSE 495 Ford Group\n", + "\n", + "This tutorial teaches the user how to input a video file, such a mp4 and convert each frame of the video into a jpeg image using python, primarily in a Jupyter notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uey1neRTkRwd" + }, + "source": [ + "[](https://colab.research.google.com/github/pathakis/DataTools_Tutorial_Demo/blob/main/Video-Image-Data-Tutorial/Ford_Video_Analysis.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GQIJxk_kdjT1" + }, + "source": [ + "<b> Environment Setup (Makefile):</b>\n", + "- Use the command 'make innit' automatically set up the environment for you.\n", + "\n", + "<b> Environment Setup (Manual):</b>\n", + "- Set up new environment using pip/conda (Conda Recommended). Use command \n", + "\n", + " <code> conda create -n envs python=3.10 </code>\n", + "\n", + "- Activate your new environment. Use command \n", + "\n", + " <code> conda activate envs</code>\n", + "\n", + "- Install the requisite packages.Use command \n", + "\n", + " <code> pip install opencv-python</code> or,\n", + "\n", + " <code> conda install -c conda-forge opencv</code>\n", + "\n", + "<b> Usage Instructions:</b>\n", + "\n", + "- The example call shows the format in which this func may be used.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f0aUW4PLdobE" + }, + "source": [ + "This process uses 2 packages called [os](https://docs.python.org/3/library/os.html) and [cv2](https://pypi.org/project/opencv-python/). Os provides miscellaneous operating system interfaces such as opening and reading the files." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "JGkN_k3BgXV8" + }, + "outputs": [], + "source": [ + "# !pip install opencv-python" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PCbpVR-HZzmt" + }, + "outputs": [], + "source": [ + "import cv2\n", + "import os\n", + "import glob\n", + "import urllib.request\n", + "\n", + "\n", + "def video_to_frames(file_path, directory_path, greyscale = False):\n", + "\n", + " '''This function will change a video file to a frames'''\n", + " \n", + " #opening the video\n", + " vidcap = cv2.VideoCapture(file_path) \n", + " \n", + " dirname = directory_path\n", + " os.makedirs(dirname, exist_ok=True)\n", + " \n", + " #capturing a frame as well as a boolean value representing whether an image was properly opened\n", + " success,image = vidcap.read()\n", + " \n", + " count = 0\n", + " \n", + " while success:\n", + " \n", + " #this is specifically for foam_segmented.avi\n", + " if greyscale:\n", + " image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)\n", + " \n", + " #writing the image to a the directory path that was specified, \n", + " #if the path specified does not exist then it will be created\n", + " #this finctionality was added so that the images could be stored in a separate folder\n", + " #example of output file names: 1.jpg, 2.jpg, 3.jpg, and so on\n", + " cv2.imwrite(os.path.join(dirname, str(count)+\".jpg\"), image)\n", + " success,image = vidcap.read()\n", + " count += 1\n", + " #All the frames will be added in order\n", + " cv2.waitKey(1) \n", + " \n", + " #releasing the threads\n", + " vidcap.release()\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "hBfLcvMhh6v7" + }, + "source": [ + "DEMO FOR THE **avi_to_frames** \n", + "\n", + "1. To download a sample avi file that you want to work with, use the following code `urllib.request.urlretrieve('https://file-examples.com/wp-content/uploads/2018/04/file_example_AVI_480_750kB.avi', 'testing.mp4')` \n", + "\n", + "2. After the video has been downloaded `avi_frames(./testing.mp4, path_to_where_you_want_the_frames, False)` this will create a folder with frames from the video." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "-N-hJD11jJjo" + }, + "outputs": [], + "source": [ + "# Making a Video From Frames\n", + "def frames_to_video(directory_path, fps, width, height):\n", + " fourcc = cv2.VideoWriter_fourcc(*'mp4v')\n", + " video = cv2.VideoWriter('video.avi', fourcc, fps, (width, height))\n", + " num_frames = len([name for name in os.listdir(directory_path) if os.path.isfile(name)])\n", + "\n", + " for j in range(num_frames):\n", + " img = cv2.imread(str(j) + '.jpg')\n", + " video.write(img)\n", + "\n", + " cv2.destroyAllWindows()\n", + " video.release()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sIhvc4DplLkE" + }, + "source": [ + "DEMO FOR THE **frames_to_video** \n", + "\n", + "1. We will be working with the frames that we created using `avi_to_frames`. If you have not created those frames feel free to look at the steps above.\n", + "\n", + "2. Run the following command (**make the necessary changes in the function call**)`frames_to_video(where_the_frames_are, fps, width, height)`\n", + "\n", + "3. The video will show up in the current directory." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bnfzxPNJeZVS" + }, + "source": [ + "**The code below will put the image arrays into a list.** This snippet of code utilizes glob but packages like os can also be used." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "mLbqPW7SeJd-" + }, + "outputs": [], + "source": [ + "path = glob.glob(\"./*.jpg\")\n", + "images = []\n", + "for img in path:\n", + " n = cv2.imread(img)\n", + " images.append(n)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GIq-_h4wdxWM" + }, + "source": [ + "<b> References:</b>\n", + "- [Managing Environments](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html)\n", + "- [Open CV in python](https://pypi.org/project/opencv-python/)\n", + "- [Colab Button](https://www.youtube.com/watch?v=RoGZIbwzG5w)" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "Ford_Video_Analysis.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.9.15" + }, + "vscode": { + "interpreter": { + "hash": "4f3567101b31d35f97cf2856951ebbba1e09a3f852422478e736adda2bb3beee" + } + } + }, + "nbformat": 4, + "nbformat_minor": 0 +======= "cells": [ { "cell_type": "markdown", @@ -72,7 +305,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "id": "PCbpVR-HZzmt" }, @@ -129,12 +362,12 @@ "\n", "1. To download a sample avi file that you want to work with, use the following code `urllib.request.urlretrieve('https://www.engr.colostate.edu/me/facil/dynamics/files/drop.avi', 'testing.mp4')` \n", "\n", - "2. After the video has been downloaded `video_to_frames(./testing.mp4, path_to_where_you_want_the_frames, False)` this will create a folder with frames from the video." + "2. After the video has been downloaded `avi_frames(./testing.mp4, path_to_where_you_want_the_frames, False)` this will create a folder with frames from the video." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "id": "-N-hJD11jJjo" }, @@ -180,7 +413,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "id": "mLbqPW7SeJd-" }, @@ -204,6 +437,22 @@ "- [Open CV in python](https://pypi.org/project/opencv-python/)\n", "- [Colab Button](https://www.youtube.com/watch?v=RoGZIbwzG5w)" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Comments:**\n", + "\n", + "The videos is not working, it only downloaded a unavailable video" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -213,7 +462,7 @@ "provenance": [] }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -227,9 +476,10 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.15" + "version": "3.8.8" } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 1 +>>>>>>> 5c328fa (this is a testing comment) } diff --git a/Zotero_Instructions.ipynb b/Zotero_Instructions.ipynb index 82998428d0b09eeddeda3468a828ae0e7eb53c45..eefc757057c95913fbc15acf9109548874edc13e 100644 --- a/Zotero_Instructions.ipynb +++ b/Zotero_Instructions.ipynb @@ -82,12 +82,35 @@ "### Managing Existing Citations\n", "\n", "To manage existing citations, you can click on the citation you want to edit and the same information will pop up just like when creating a new citation.\n", + "\n", + "For online storage to access your citations anywhere you can store up to 300MB for free, but any more than that you need to pay.\n", + "\n", + "Here is the fee chart:\n", + "| Amount | Price |\n", + "| ---: | ---: |\n", + "| 300 MB | Free |\n", + "| 2 GB | \\$20 per year |\n", + "| 6 GB | \\$50 per year |\n", + "| Unlimited | \\$120 per year |\n", + "\n", + "\n", "___" ] }, { "cell_type": "markdown", - "id": "9ff6d48d", + "id": "a1b8ab6d", + "metadata": {}, + "source": [ + "### Creating New Citations\n", + "There is another setup guide for the broswer collector.\n", + "link:\n", + "https://guides.library.illinoisstate.edu/zotero/connector" + ] + }, + { + "cell_type": "markdown", + "id": "9d845196-f8a8-403d-8161-4287c11b17c0", "metadata": {}, "source": [ "## What Data is Available on Zotero?\n", @@ -128,6 +151,29 @@ "\n", "https://fordham.libguides.com/BibliographicManagement/Zotero#:~:text=Zotero%20is%20a%20free*%20citation,ease%20the%20collection%20of%20citations.\n" ] + }, + { + "attachments": { + "image.png": { + "image/png": "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xJqTpuVasgTlv/mNyfnF33UX7NdcY3JERNFFApHyoP5ylvbtkfTZZyZHRD5s1kVEEaPs0kvhlpkwA1hHjkTiK6+YHBFRdCodNw6eggKT80qYPRs2VU5EfmzWRUQRwfnCC9UCE8HRuYgoFtjOP98s+bm++sosEZEPgxMianWefftQMXOmyfnZLr4YtjPOMDkiouhlO/VUs+TnWrzYLBGRD4MTImp1zuefV9/SLpPzi7/xRrNERBTddHASNHSwTMboWrnS5IhIWLdt22YWiYhanvu77+B4+WWT84v71a9gGTDA5IiIolxiImyTJ5uMX/AcKETHO8uKFSs8/fr1M1kiopZV8cc/wvnmmybnZeneHUkyg7L6MiciilYejweugFph97vvwnnHHSbnZRk4EHGvv25yRMTghIhajXvDBpRddpnJ+SX89a+wXXSRyRERRScJTNLS0mC323XeffQoDo0cqZcDdfzyS9h69TI5ouMb+5wQUatxzptnlvysWVkMTIhayOOPP464uDiTo6YmNSe+wERY27VDQohBPpzbt5slImJwQkStwr11K5xz55qcn/3aa80SEVHssYfoS+favdssERGDEyJqFcH9TISlZ0/YQzTzIiKKFdYQzbdcO3eaJSKKyeDE43HD7XLA5Qw/edxuszYRNTfPnj160sVgcT/+sVmKHm5P9SGQg7nCeE1EUufSQB6POlcGlTUPj/e9K5P6/Nz+5NHJWS1BUovsX9ORZj+ioqICJSUlejmaePe+ZnU9fzyy9+5tlvxcW7eaJSJqYHDiUSdU9eVQQ2rVLwd1ordYrLDa4mCzh58sVqtaladRopYQstakY0fYrrjC5CKfOgvqR6vFhkJHPr45sgRPbf4L/vLdrfi/Vb/BE2sfwOf7F6OwIh829RoRdecYdS6V87nt0Newl6xFiv01dbyliIvbANiOIC5hBZLwtnlxU7J437syqc/P6k8WnezVEiTJ66OE/D5YLBY4nU689NJL+OSTT3S5O4pulqmfFBwuD/YWWrB6vwXLdnuQs9uJnUc9qHC49fP8Zq3K1qePWfJzbNxoloio+Ubrki9hddJtSW6XS31v2XBg81LkbluuToxO7wWEOTP6Lgz0v/5ixMfZ0bH/WHQfeGLlNoioeXgOHULpmWeanF/8738P+09+YnKRzXdR6XI7sejQXLx34HV1HknEgLQh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" + } + }, + "cell_type": "markdown", + "id": "412467a4", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "id": "1bacd6c7", + "metadata": {}, + "source": [ + "Above is an image of the references for this notebook in zotero. \n", + "\n", + "Click on the + sign to create a document and then the paperclip to link a URL to it to reference it." + ] } ], "metadata": { @@ -146,7 +192,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.16" } }, "nbformat": 4, diff --git a/social_media_scraper/requirements.txt b/social_media_scraper/requirements.txt deleted file mode 100644 index 61bb11cd54f64cb59ab521fdc8204b380ce4a151..0000000000000000000000000000000000000000 --- a/social_media_scraper/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -#### Requirements for YouTube scraper -pandas -matplotlib -pytchat - diff --git a/social_media_scraper/yt_scraper.ipynb b/social_media_scraper/yt_scraper.ipynb index 1740c12a3bb06ed4913755af64ac4175b573605f..83f2013ce00c6e032d100b8c5a5590471f3d1674 100644 --- a/social_media_scraper/yt_scraper.ipynb +++ b/social_media_scraper/yt_scraper.ipynb @@ -15,7 +15,11 @@ "source": [ "### 1. Getting Project Dependecies\n", "\n", - "run **pip install -r requirements.txt** in your terminal\n", + "# if needed" + "#!pip install pandas" + "#!pip install pytchat" + "#!pip install matplotlib" + "#!pip install time", "\n", "This installs pandas, numpy and [pytchat](https://pypi.org/project/pytchat/)" ] @@ -46,8 +50,10 @@ } ], "source": [ - "#!pip install -r requirements.txt\n", - "!pip install pytchat" + "!pip install pandas\n", + "!pip install matplotlib\n", + "!pip install pytchat", + ] }, { diff --git a/tpot_tutorial.ipynb b/tpot_tutorial.ipynb index f672e306cbbc798def72140618ccaecb6626f401..d6337788119eb0551e1b395808b619fd8931d015 100644 --- a/tpot_tutorial.ipynb +++ b/tpot_tutorial.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 1, "id": "eaee9fda", "metadata": {}, "outputs": [ @@ -18,33 +18,33 @@ "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: torch in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (1.10.2)\n", - "Requirement already satisfied: typing-extensions in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from torch) (3.10.0.2)\n", + "Requirement already satisfied: torch in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (1.13.1)\n", + "Requirement already satisfied: typing-extensions in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from torch) (3.10.0.2)\n", "Note: you may need to restart the kernel to use updated packages.\n", - "Requirement already satisfied: xgboost in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (1.5.2)\n", - "Requirement already satisfied: numpy in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from xgboost) (1.21.2)\n", - "Requirement already satisfied: scipy in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from xgboost) (1.8.0)\n", + "Requirement already satisfied: xgboost in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (1.7.3)\n", + "Requirement already satisfied: numpy in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from xgboost) (1.21.2)\n", + "Requirement already satisfied: scipy in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from xgboost) (1.7.3)\n", "Note: you may need to restart the kernel to use updated packages.\n", - "Requirement already satisfied: tpot in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (0.11.7)\n", - "Requirement already satisfied: xgboost>=1.1.0 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.5.2)\n", - "Requirement already satisfied: joblib>=0.13.2 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.1.0)\n", - "Requirement already satisfied: numpy>=1.16.3 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.21.2)\n", - "Requirement already satisfied: stopit>=1.1.1 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.1.2)\n", - "Requirement already satisfied: tqdm>=4.36.1 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from tpot) (4.62.3)\n", - "Requirement already satisfied: scipy>=1.3.1 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.8.0)\n", - "Requirement already satisfied: scikit-learn>=0.22.0 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.0.1)\n", - "Requirement already satisfied: update-checker>=0.16 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from tpot) (0.18.0)\n", - "Requirement already satisfied: deap>=1.2 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.3.1)\n", - "Requirement already satisfied: pandas>=0.24.2 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.3.5)\n", - "Requirement already satisfied: python-dateutil>=2.7.3 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from pandas>=0.24.2->tpot) (2.8.2)\n", - "Requirement already satisfied: pytz>=2017.3 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from pandas>=0.24.2->tpot) (2021.3)\n", - "Requirement already satisfied: six>=1.5 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from python-dateutil>=2.7.3->pandas>=0.24.2->tpot) (1.16.0)\n", - "Requirement already satisfied: threadpoolctl>=2.0.0 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from scikit-learn>=0.22.0->tpot) (2.2.0)\n", - "Requirement already satisfied: requests>=2.3.0 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from update-checker>=0.16->tpot) (2.26.0)\n", - "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from requests>=2.3.0->update-checker>=0.16->tpot) (1.26.7)\n", - "Requirement already satisfied: charset-normalizer~=2.0.0 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from requests>=2.3.0->update-checker>=0.16->tpot) (2.0.4)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from requests>=2.3.0->update-checker>=0.16->tpot) (2021.10.8)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/kaitlynarnold/opt/anaconda3/lib/python3.8/site-packages (from requests>=2.3.0->update-checker>=0.16->tpot) (3.3)\n", + "Requirement already satisfied: tpot in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (0.11.7)\n", + "Requirement already satisfied: tqdm>=4.36.1 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from tpot) (4.62.3)\n", + "Requirement already satisfied: xgboost>=1.1.0 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.7.3)\n", + "Requirement already satisfied: deap>=1.2 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.3.3)\n", + "Requirement already satisfied: pandas>=0.24.2 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.3.5)\n", + "Requirement already satisfied: update-checker>=0.16 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from tpot) (0.18.0)\n", + "Requirement already satisfied: stopit>=1.1.1 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.1.2)\n", + "Requirement already satisfied: scipy>=1.3.1 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.7.3)\n", + "Requirement already satisfied: scikit-learn>=0.22.0 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.0.1)\n", + "Requirement already satisfied: joblib>=0.13.2 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.1.0)\n", + "Requirement already satisfied: numpy>=1.16.3 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from tpot) (1.21.2)\n", + "Requirement already satisfied: python-dateutil>=2.7.3 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from pandas>=0.24.2->tpot) (2.8.2)\n", + "Requirement already satisfied: pytz>=2017.3 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from pandas>=0.24.2->tpot) (2021.3)\n", + "Requirement already satisfied: six>=1.5 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from python-dateutil>=2.7.3->pandas>=0.24.2->tpot) (1.16.0)\n", + "Requirement already satisfied: threadpoolctl>=2.0.0 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from scikit-learn>=0.22.0->tpot) (2.2.0)\n", + "Requirement already satisfied: requests>=2.3.0 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from update-checker>=0.16->tpot) (2.27.1)\n", + "Requirement already satisfied: idna<4,>=2.5 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from requests>=2.3.0->update-checker>=0.16->tpot) (3.3)\n", + "Requirement already satisfied: charset-normalizer~=2.0.0 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from requests>=2.3.0->update-checker>=0.16->tpot) (2.0.4)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from requests>=2.3.0->update-checker>=0.16->tpot) (1.26.7)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/izaanys/opt/anaconda3/lib/python3.8/site-packages (from requests>=2.3.0->update-checker>=0.16->tpot) (2022.9.24)\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } @@ -94,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 2, "id": "022ab1ce", "metadata": {}, "outputs": [], @@ -116,7 +116,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "id": "2898aaa9", "metadata": {}, "outputs": [ @@ -137,7 +137,7 @@ " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]))" ] }, - "execution_count": 4, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -150,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "id": "1d1ac27a", "metadata": {}, "outputs": [ @@ -160,7 +160,7 @@ "((112, 4), (38, 4), (112,), (38,))" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -173,21 +173,14 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 5, "id": "015515d0", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Warning: xgboost.XGBClassifier is not available and will not be used by TPOT.\n" - ] - }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "49da94ec3a20499782a4a98ab6224166", + "model_id": "", "version_major": 2, "version_minor": 0 }, @@ -203,14 +196,14 @@ "output_type": "stream", "text": [ "\n", - "2.21 minutes have elapsed. TPOT will close down.\n", + "2.02 minutes have elapsed. TPOT will close down.\n", "TPOT closed during evaluation in one generation.\n", "WARNING: TPOT may not provide a good pipeline if TPOT is stopped/interrupted in a early generation.\n", "\n", "\n", "TPOT closed prematurely. Will use the current best pipeline.\n", "\n", - "Best pipeline: MLPClassifier(input_matrix, alpha=0.0001, learning_rate_init=0.01)\n", + "Best pipeline: LogisticRegression(input_matrix, C=25.0, dual=False, penalty=l2)\n", "0.9736842105263158\n" ] } @@ -220,14 +213,22 @@ "# Will report the score of the best found pipeline\n", "# Change max_time_mins to a higher time to allow TPOT to run without interruption. #issue number 25\n", "# It is currently at 2 mins for sake of not taking to long\n", - "tpot = TPOTClassifier(verbosity=2, max_time_mins=2)\n", + "tpot = TPOTClassifier(verbosity=2, max_time_mins=3)\n", "tpot.fit(X_train, y_train)\n", "print(tpot.score(X_test, y_test))" ] }, + { + "cell_type": "markdown", + "id": "22bb780f", + "metadata": {}, + "source": [ + "Issued warning of TPOT closed prematurely. I am increasing the max_time to 4 so tpot can completely run and the results are more accurate" + ] + }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 6, "id": "fedcae2c", "metadata": {}, "outputs": [], @@ -246,7 +247,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 7, "id": "f2ac0eda", "metadata": {}, "outputs": [ @@ -388,7 +389,7 @@ "4 0 373450 8.0500 NaN S " ] }, - "execution_count": 12, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -401,7 +402,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 8, "id": "30eeb3aa", "metadata": {}, "outputs": [], @@ -412,7 +413,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 9, "id": "bcc561a3", "metadata": {}, "outputs": [ @@ -436,7 +437,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 10, "id": "5be7251f", "metadata": {}, "outputs": [ @@ -457,7 +458,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 11, "id": "8bb50fa8", "metadata": {}, "outputs": [], @@ -469,7 +470,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 12, "id": "11c06d01", "metadata": {}, "outputs": [ @@ -491,7 +492,7 @@ "dtype: bool" ] }, - "execution_count": 17, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -504,7 +505,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 13, "id": "aa017a2a", "metadata": {}, "outputs": [], @@ -517,7 +518,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 14, "id": "34567d07", "metadata": {}, "outputs": [ @@ -533,7 +534,7 @@ " [1, 0, 0, ..., 0, 0, 0]])" ] }, - "execution_count": 19, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -544,7 +545,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 15, "id": "f31db644", "metadata": {}, "outputs": [], @@ -555,7 +556,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 16, "id": "e8ccd33c", "metadata": {}, "outputs": [], @@ -566,7 +567,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 17, "id": "594776f6", "metadata": {}, "outputs": [], @@ -578,7 +579,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 18, "id": "e8d47aef", "metadata": {}, "outputs": [ @@ -588,7 +589,7 @@ "False" ] }, - "execution_count": 23, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -600,7 +601,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 19, "id": "6fb6b7df", "metadata": {}, "outputs": [ @@ -610,7 +611,7 @@ "156" ] }, - "execution_count": 24, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -621,7 +622,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 20, "id": "09fe6803", "metadata": {}, "outputs": [], @@ -632,7 +633,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 21, "id": "a14bb5fd", "metadata": {}, "outputs": [ @@ -642,7 +643,7 @@ "(668, 223)" ] }, - "execution_count": 26, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -655,21 +656,14 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "id": "227863a0", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Warning: xgboost.XGBClassifier is not available and will not be used by TPOT.\n" - ] - }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "", + "model_id": "986af026de044e8694da6328fcffcb1c", "version_major": 2, "version_minor": 0 }, @@ -679,56 +673,36 @@ }, "metadata": {}, "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Generation 1 - Current best internal CV score: 0.8068791381438671\n", - "\n", - "2.01 minutes have elapsed. TPOT will close down.\n", - "TPOT closed during evaluation in one generation.\n", - "WARNING: TPOT may not provide a good pipeline if TPOT is stopped/interrupted in a early generation.\n", - "\n", - "\n", - "TPOT closed prematurely. Will use the current best pipeline.\n", - "\n", - "Best pipeline: DecisionTreeClassifier(input_matrix, criterion=gini, max_depth=3, min_samples_leaf=13, min_samples_split=20)\n" - ] - }, - { - "data": { - "text/plain": [ - "TPOTClassifier(max_eval_time_mins=0.04, max_time_mins=2, population_size=40,\n", - " verbosity=2)" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ "# create the classifier and fit the model, reports the best pipeline\n", "# Parameters within the TPOT Classifier can be changed to allow for longer run time across more models\n", - "tpot = TPOTClassifier(verbosity=2, max_time_mins=2, max_eval_time_mins=0.04, population_size=40)\n", + "tpot = TPOTClassifier(verbosity=2, max_time_mins=4, max_eval_time_mins=0.04, population_size=40)\n", "tpot.fit(titanic_new[training_indices], titanic_class[training_indices])" ] }, + { + "cell_type": "markdown", + "id": "910d6e80", + "metadata": {}, + "source": [ + "Issued warning of TPOT closed prematurely. I am increasing the max_time so tpot can completely run and the results are more accurate" + ] + }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 23, "id": "ca18f35b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.757847533632287" + "0.7533632286995515" ] }, - "execution_count": 28, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -740,7 +714,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 24, "id": "4d710e07", "metadata": {}, "outputs": [], @@ -751,7 +725,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 25, "id": "d7ff45ed", "metadata": {}, "outputs": [ @@ -873,7 +847,7 @@ "max 1309.000000 3.000000 76.000000 8.000000 9.000000 512.329200" ] }, - "execution_count": 30, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -886,7 +860,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 26, "id": "8264d2ed", "metadata": {}, "outputs": [], @@ -899,7 +873,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 27, "id": "fe8198e3", "metadata": {}, "outputs": [], @@ -911,7 +885,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 28, "id": "13204313", "metadata": {}, "outputs": [ @@ -932,7 +906,7 @@ "dtype: bool" ] }, - "execution_count": 33, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -945,7 +919,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 29, "id": "82e8d3fb", "metadata": {}, "outputs": [], @@ -960,7 +934,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 30, "id": "185ba8c1", "metadata": {}, "outputs": [], @@ -971,7 +945,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 31, "id": "359c8b6b", "metadata": {}, "outputs": [ @@ -981,7 +955,7 @@ "False" ] }, - "execution_count": 36, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -992,7 +966,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 32, "id": "e73a0c32", "metadata": {}, "outputs": [], @@ -1002,7 +976,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 33, "id": "d868e452", "metadata": {}, "outputs": [], @@ -1013,7 +987,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 34, "id": "1666f357", "metadata": {}, "outputs": [ @@ -1023,7 +997,7 @@ "array([0, 1, 0, 0, 1, 0, 1, 0, 1, 0])" ] }, - "execution_count": 40, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -1034,10 +1008,26 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 35, "id": "3d91d737", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: 'data/submission.csv'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/var/folders/tk/mrjkyqms0651_r4m4qvb9xz00000gn/T/ipykernel_43658/2451894762.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;31m#save as csv\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mfinal\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'PassengerId'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mtitanic_sub\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'PassengerId'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Survived'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0msubmission\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mfinal\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'data/submission.csv'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindex\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36mto_csv\u001b[0;34m(self, path_or_buf, sep, na_rep, float_format, columns, header, index, index_label, mode, encoding, compression, quoting, quotechar, line_terminator, chunksize, date_format, doublequote, escapechar, decimal, errors, storage_options)\u001b[0m\n\u001b[1;32m 3464\u001b[0m )\n\u001b[1;32m 3465\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3466\u001b[0;31m return DataFrameRenderer(formatter).to_csv(\n\u001b[0m\u001b[1;32m 3467\u001b[0m \u001b[0mpath_or_buf\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3468\u001b[0m \u001b[0mline_terminator\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mline_terminator\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/pandas/io/formats/format.py\u001b[0m in \u001b[0;36mto_csv\u001b[0;34m(self, path_or_buf, encoding, sep, columns, index_label, mode, compression, quoting, quotechar, line_terminator, chunksize, date_format, doublequote, escapechar, errors, storage_options)\u001b[0m\n\u001b[1;32m 1103\u001b[0m \u001b[0mformatter\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfmt\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1104\u001b[0m )\n\u001b[0;32m-> 1105\u001b[0;31m \u001b[0mcsv_formatter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1106\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1107\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcreated_buffer\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/pandas/io/formats/csvs.py\u001b[0m in \u001b[0;36msave\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 235\u001b[0m \"\"\"\n\u001b[1;32m 236\u001b[0m \u001b[0;31m# apply compression and byte/text conversion\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 237\u001b[0;31m with get_handle(\n\u001b[0m\u001b[1;32m 238\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 239\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/pandas/io/common.py\u001b[0m in \u001b[0;36mget_handle\u001b[0;34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[0m\n\u001b[1;32m 700\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mioargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mencoding\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;34m\"b\"\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mioargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 701\u001b[0m \u001b[0;31m# Encoding\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 702\u001b[0;31m handle = open(\n\u001b[0m\u001b[1;32m 703\u001b[0m \u001b[0mhandle\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 704\u001b[0m \u001b[0mioargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'data/submission.csv'" + ] + } + ], "source": [ "#create a data frame with passenger id and what class they belong to (if they survived or not)\n", "#save as csv\n", @@ -1047,21 +1037,10 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "id": "240feb73", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(418, 2)" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "final.shape" ] @@ -1093,7 +1072,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.9.1" } }, "nbformat": 4,