diff --git a/grain_size_tools/example_notebooks/start.ipynb b/grain_size_tools/example_notebooks/start.ipynb index 98c578a..e31da33 100644 --- a/grain_size_tools/example_notebooks/start.ipynb +++ b/grain_size_tools/example_notebooks/start.ipynb @@ -8,16 +8,40 @@ "\n", "> IMPORTANT NOTE: This Jupyter notebook example only applies to GrainSizeTools v3.0+ Please check your script version before using this notebook. You will be able to reproduce all the results shown in this tutorial using the dataset provided with the script, the ```file data_set.txt```\n", "\n", - "## Running the script\n", + "## Running the script in Jupyter lab/notebooks\n", "\n", "The first step is to execute the code to get all the functionalities. Jupyter lab (or Jupyter notebooks) allows you to run any code using the following code snippet: ``%run + the Python file to run``. In this case you must set the full filepath that indicates where the file ``GrainSizeTools_script.py`` is located in your system. If the script was executed correctly you will see that all GrainSizeTools (GST) modules have been loaded correctly and a welcome message as follows:" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "module plot imported\n", + "module averages imported\n", + "module stereology imported\n", + "module piezometers imported\n", + "module template imported\n", + "\n", + "======================================================================================\n", + "Welcome to GrainSizeTools script\n", + "======================================================================================\n", + "A free open-source cross-platform script to visualize and characterize grain size\n", + "population and estimate differential stress via paleopizometers.\n", + "\n", + "Version: v3.0RC0 (2020-04-23)\n", + "Documentation: https://marcoalopez.github.io/GrainSizeTools/\n", + "\n", + "Type get.functions_list() to get a list of the main methods\n", + "\n" + ] + } + ], "source": [ "%run C:/Users/marco/Documents/GitHub/GrainSizeTools/grain_size_tools/GrainSizeTools_script.py" ] @@ -26,12 +50,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As indicated in the welcome message, we can get a list of the main methods at any time by typing in the console:" + "---\n", + "\n", + "## Get information on the GrainSizeTools methods\n", + "\n", + "First, to get a list of the main methods type" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -69,6 +97,78 @@ "get.functions_list()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The script is implemented around several modules. To access a method within a module you will have to type the name of the module and then, separated by a dot, the name of the method.For example to access the method ``qq_plot`` of the plot module you should write:\n", + "\n", + "```python\n", + "plot.qq_plot()\n", + "```\n", + "and the provide the required parameters within the parenthesis.\n", + "\n", + "To access the methods within a module, type the module name plus the dot and hit the tab key and a complete list of methods will pop up.\n", + "\n", + "### Get detailed information on methods\n", + "\n", + "You can get detailed information about any method or function of the script in different ways. The first is through the console using the character ? before the method" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[1;31mSignature:\u001b[0m \u001b[0mconf_interval\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mconfidence\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0.95\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mDocstring:\u001b[0m\n", + "Estimate the confidence interval using the t-distribution with n-1\n", + "degrees of freedom t(n-1). This is the way to go when sample size is\n", + "small (n < 30) and the standard deviation cannot be estimated accurately.\n", + "For large datasets, the t-distribution approaches the normal distribution.\n", + "\n", + "Parameters\n", + "----------\n", + "data : array-like\n", + " the dataset\n", + "\n", + "confidence : float between 0 and 1, optional\n", + " the confidence interval, default = 0.95\n", + "\n", + "Assumptions\n", + "-----------\n", + "the data follows a normal or symmetric distrubution (when sample size\n", + "is large)\n", + "\n", + "call_function(s)\n", + "----------------\n", + "Scipy's t.interval\n", + "\n", + "Returns\n", + "-------\n", + "the arithmetic mean, the error, and the limits of the confidence interval\n", + "\u001b[1;31mFile:\u001b[0m c:\\users\\marco\\documents\\github\\grainsizetools\\grain_size_tools\\grainsizetools_script.py\n", + "\u001b[1;31mType:\u001b[0m function\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "?conf_interval" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another option in Jupyter's lab is to get the information interactively without having to call the help from the console. To do this, right-click on the mouse and select \"Show Context Help\" from the menu. Now, every time you write a method in the interactive console, all the information will automatically appear in the \"Contextual help\" window. In this case, you may prefer to rearrange the windows using drag and drop so that you can see the notebook and the contextual help in parallel." + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -95,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -322,7 +422,7 @@ "[2661 rows x 11 columns]" ] }, - "execution_count": 10, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -352,7 +452,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -361,7 +461,7 @@ "pandas.core.frame.DataFrame" ] }, - "execution_count": 11, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -398,7 +498,7 @@ "dataset = pd.read_csv(get_filepath(), sep='\\t')\n", "```\n", "\n", - "Lastly, Pandas also allows to directly import tabular data from the clipboard (i.e. data copied using copy-paste commands). For example, after copying the table from a text/excel file or a website using: \n", + "Lastly, Pandas also allows to directly import tabular data from the clipboard (i.e. data copied using copy-paste commands). For example, after copying the table from a text file, excel spreadsheet or a website using: \n", "\n", "```python\n", "dataset = pd.read_clipboard()\n", @@ -412,7 +512,491 @@ "metadata": {}, "source": [ "## Basic tabular data (Pandas) manipulation\n", - "\n" + "\n", + "Let's first see how the data set looks like. For this you can call the variable (as in the example before) or use the ``head()`` and ``tail()`` methods so that it only shows us the first (or last) rows of the data set" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AreaCirc.FeretFeretXFeretYFeretAngleMinFeretARRoundSolidity
01157.250.68018.0621535.00.5131.63413.5001.1010.9080.937
122059.750.77162.097753.516.5165.06946.6971.3140.7610.972
231961.500.84257.871727.065.071.87846.9231.1390.8780.972
345428.500.709114.6571494.583.519.62063.4491.8960.5280.947
45374.000.69929.2622328.034.033.14716.0001.5150.6600.970
\n", + "
" + ], + "text/plain": [ + " Area Circ. Feret FeretX FeretY FeretAngle MinFeret AR \\\n", + "0 1 157.25 0.680 18.062 1535.0 0.5 131.634 13.500 1.101 \n", + "1 2 2059.75 0.771 62.097 753.5 16.5 165.069 46.697 1.314 \n", + "2 3 1961.50 0.842 57.871 727.0 65.0 71.878 46.923 1.139 \n", + "3 4 5428.50 0.709 114.657 1494.5 83.5 19.620 63.449 1.896 \n", + "4 5 374.00 0.699 29.262 2328.0 34.0 33.147 16.000 1.515 \n", + "\n", + " Round Solidity \n", + "0 0.908 0.937 \n", + "1 0.761 0.972 \n", + "2 0.878 0.972 \n", + "3 0.528 0.947 \n", + "4 0.660 0.970 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset.head() # returns 5 rows by default, you can define any number within the parenthesis" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our dataset (aka the Dataframe) has 10 different columns. To interact with one of the columns we must call its name in square brackets with the name in quotes as follows" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 314.5\n", + "1 4119.5\n", + "2 3923.0\n", + "3 10857.0\n", + "4 748.0\n", + " ... \n", + "2656 905.0\n", + "2657 2162.5\n", + "2658 1027.0\n", + "2659 555.5\n", + "2660 1450.0\n", + "Name: Area, Length: 2661, dtype: float64" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# get the column 'Area' and multiplied by two\n", + "dataset['Area'] * 2" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AreaCirc.FeretFeretXFeretYFeretAngleMinFeretARRoundSolidity
0157.250.68018.0621535.00.5131.63413.5001.1010.9080.937
12059.750.77162.097753.516.5165.06946.6971.3140.7610.972
21961.500.84257.871727.065.071.87846.9231.1390.8780.972
35428.500.709114.6571494.583.519.62063.4491.8960.5280.947
4374.000.69929.2622328.034.033.14716.0001.5150.6600.970
.................................
2656452.500.78928.5041368.01565.5127.87522.5001.2350.8100.960
26571081.250.75647.9091349.51569.5108.24631.3631.4460.6920.960
2658513.500.72032.9621373.01586.0112.28620.4961.4930.6700.953
2659277.750.62729.4361316.01601.5159.10217.0021.7270.5790.920
2660725.000.74839.4371335.51615.5129.34128.0251.3510.7400.960
\n", + "

2661 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " Area Circ. Feret FeretX FeretY FeretAngle MinFeret AR \\\n", + "0 157.25 0.680 18.062 1535.0 0.5 131.634 13.500 1.101 \n", + "1 2059.75 0.771 62.097 753.5 16.5 165.069 46.697 1.314 \n", + "2 1961.50 0.842 57.871 727.0 65.0 71.878 46.923 1.139 \n", + "3 5428.50 0.709 114.657 1494.5 83.5 19.620 63.449 1.896 \n", + "4 374.00 0.699 29.262 2328.0 34.0 33.147 16.000 1.515 \n", + "... ... ... ... ... ... ... ... ... \n", + "2656 452.50 0.789 28.504 1368.0 1565.5 127.875 22.500 1.235 \n", + "2657 1081.25 0.756 47.909 1349.5 1569.5 108.246 31.363 1.446 \n", + "2658 513.50 0.720 32.962 1373.0 1586.0 112.286 20.496 1.493 \n", + "2659 277.75 0.627 29.436 1316.0 1601.5 159.102 17.002 1.727 \n", + "2660 725.00 0.748 39.437 1335.5 1615.5 129.341 28.025 1.351 \n", + "\n", + " Round Solidity \n", + "0 0.908 0.937 \n", + "1 0.761 0.972 \n", + "2 0.878 0.972 \n", + "3 0.528 0.947 \n", + "4 0.660 0.970 \n", + "... ... ... \n", + "2656 0.810 0.960 \n", + "2657 0.692 0.960 \n", + "2658 0.670 0.953 \n", + "2659 0.579 0.920 \n", + "2660 0.740 0.960 \n", + "\n", + "[2661 rows x 10 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Remove the column without a name from the DataFrame\n", + "dataset.drop(' ', axis=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some things to try (just copy-paste in interactive cells below and explore):\n", + "\n", + "```python\n", + "dataset.mean() # estimate the mean for all columns\n", + "dataset['Area'].mean() # estimate the mean only for the column Area\n", + "dataset.std() # estimate the (Bessel corrected) standard deviation\n", + "dataset.dropna() # remove missing values from the data\n", + "dataset.describe() # generate descriptive statistics\n", + "dataset.info() # display info of the DataFrame\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + " 1331.000000\n", + "Area 1213.823750\n", + "Circ. 0.730233\n", + "Feret 44.808749\n", + "FeretX 1533.019542\n", + "FeretY 764.684517\n", + "FeretAngle 90.622313\n", + "MinFeret 31.016330\n", + "AR 1.451459\n", + "Round 0.719253\n", + "Solidity 0.943795\n", + "dtype: float64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# estimate the mean of all columns\n", + "np.mean(dataset) # alternatively you can use dataset.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dataset[['Circ.', 'Round', 'Solidity']].boxplot()" ] }, {