{ "metadata": { "name": "", "signature": "sha256:4b84ff0db6e80640371f7213daeeb61897b24c124dd7b303b8997006627af949" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Organizing your data\n", "\n", "Because spreadsheets are very flexable, people use \n", "them in very different ways and often organize their \n", "data in a form that is easy for humans to understand,\n", "but non-trivial for computers to parse. \n", "\n", "We will take two sheets from one spreadsheet (`stats_data.xlsx`)\n", "to illustrate this point (`dirty_sheet` and `clean_sheet`).\n", "The sheet we call `clean_sheet` is a reorganized form of the \n", "original data in `dirty_sheet`. If you open up this file in \n", "a spreadsheet program, you will note that the original user \n", "had re-organized this data to plot it, so the original form \n", "was not even a good choice for use by the spreadsheet program\n", "itself.\n", "\n", "The general rule to organizing data is to keep data of the same \n", "nature together. Usually, this means data with the same units \n", "and measured in the same way.\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pandas \n", "fn = '../../data/stats_data.xlsx'\n", "dirty_df = pandas.read_excel(fn, 'dirty_sheet')\n", "clean_df = pandas.read_excel(fn, 'clean_sheet')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "clean_df" ], "language": "python", "metadata": {}, "outputs": [ { "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", " \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", " \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", "
exposure_time_hdose_ugmousedaymouse_weight_glung_weight_g
0 0 0 0 22 22.15 0.78
1 0 0 1 25 27.76 0.70
2 0 0 2 22 24.00 0.97
3 0 0 3 24 22.74 1.32
4 0 0 4 22 23.02 1.08
5 0 0 5 25 23.68 1.27
6 0 0 6 25 20.22 0.74
7 0 0 7 22 22.17 1.25
8 6 200 0 25 18.46 1.12
9 6 200 1 25 19.16 0.88
10 6 200 2 25 19.69 1.04
11 6 200 3 25 18.95 0.97
12 6 200 4 25 26.83 0.85
13 6 200 5 25 26.24 0.81
14 6 200 6 25 30.65 0.86
15 6 200 7 24 22.07 1.14
16 24 200 0 25 25.54 1.19
17 24 200 2 25 19.04 0.15
18 24 200 3 25 20.65 1.15
19 24 200 4 25 20.42 0.99
20 24 200 5 24 20.07 1.26
21 24 200 6 24 25.04 1.29
22 24 200 7 25 24.80 1.07
23 72 200 0 25 18.51 1.31
24 72 200 1 24 19.14 1.15
25 72 200 2 24 16.97 1.02
26 72 200 3 23 19.78 1.57
27 72 200 4 25 16.97 1.42
28 72 200 5 25 17.74 1.31
29 72 200 6 25 18.61 1.33
30 72 200 7 24 18.31 1.30
31 72 400 0 25 27.29 0.57
32 72 400 1 25 30.03 1.09
33 72 400 2 25 27.47 0.35
34 72 400 3 25 23.62 0.80
35 72 400 4 25 23.28 0.38
36 72 400 5 25 28.21 0.91
37 72 400 6 25 29.40 0.25
38 72 400 7 25 30.37 0.18
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ " exposure_time_h dose_ug mouse day mouse_weight_g lung_weight_g\n", "0 0 0 0 22 22.15 0.78\n", "1 0 0 1 25 27.76 0.70\n", "2 0 0 2 22 24.00 0.97\n", "3 0 0 3 24 22.74 1.32\n", "4 0 0 4 22 23.02 1.08\n", "5 0 0 5 25 23.68 1.27\n", "6 0 0 6 25 20.22 0.74\n", "7 0 0 7 22 22.17 1.25\n", "8 6 200 0 25 18.46 1.12\n", "9 6 200 1 25 19.16 0.88\n", "10 6 200 2 25 19.69 1.04\n", "11 6 200 3 25 18.95 0.97\n", "12 6 200 4 25 26.83 0.85\n", "13 6 200 5 25 26.24 0.81\n", "14 6 200 6 25 30.65 0.86\n", "15 6 200 7 24 22.07 1.14\n", "16 24 200 0 25 25.54 1.19\n", "17 24 200 2 25 19.04 0.15\n", "18 24 200 3 25 20.65 1.15\n", "19 24 200 4 25 20.42 0.99\n", "20 24 200 5 24 20.07 1.26\n", "21 24 200 6 24 25.04 1.29\n", "22 24 200 7 25 24.80 1.07\n", "23 72 200 0 25 18.51 1.31\n", "24 72 200 1 24 19.14 1.15\n", "25 72 200 2 24 16.97 1.02\n", "26 72 200 3 23 19.78 1.57\n", "27 72 200 4 25 16.97 1.42\n", "28 72 200 5 25 17.74 1.31\n", "29 72 200 6 25 18.61 1.33\n", "30 72 200 7 24 18.31 1.30\n", "31 72 400 0 25 27.29 0.57\n", "32 72 400 1 25 30.03 1.09\n", "33 72 400 2 25 27.47 0.35\n", "34 72 400 3 25 23.62 0.80\n", "35 72 400 4 25 23.28 0.38\n", "36 72 400 5 25 28.21 0.91\n", "37 72 400 6 25 29.40 0.25\n", "38 72 400 7 25 30.37 0.18" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### After reading `clean_sheet` into `clean_df`, we can easily workd with this data\n", "\n", "First we add another column, `lung_weight_fraction` which is the fraction of the mouse weight that is lung (including tumors):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "clean_df['lung_weight_fraction'] = clean_df['lung_weight_g'] / clean_df['mouse_weight_g']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we orgnaize the data into separate trials, with data from each trial having the same dose and exposure time. We could have done this in the spreadsheet, but this illustrates how to group data using `Python`." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Here we go through all possible combinations of \n", "# exposure time and dose and only add data that we \n", "# find. \n", "exposure_times = set(clean_df['exposure_time_h'])\n", "dosages = set(clean_df['dose_ug'])\n", "\n", "trial_dfs = {}\n", "for et in exposure_times:\n", " for dose in dosages:\n", " \n", " # We use the query method to extract all the data from one trial into its\n", " # own DataFrame.\n", " query_string = 'exposure_time_h == {} and dose_ug == {}'.format(et, dose)\n", " print('Executing query: ', query_string)\n", " trial_df = clean_df.query(query_string)\n", " \n", " if trial_df.empty:\n", " print(' No data found for query: ', query_string)\n", " continue\n", " \n", " exp_key = '{}_{}'.format(et, dose)\n", " if exp_key == '0_0':\n", " exp_key = 'control'\n", " \n", " print(' Data found. Adding trial_df under the experiment_key: ', exp_key)\n", " \n", " trial_dfs[exp_key] = trial_df " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Executing query: exposure_time_h == 0 and dose_ug == 0\n", " Data found. Adding trial_df under the experiment_key: control\n", "Executing query: exposure_time_h == 0 and dose_ug == 200\n", " No data found for query: exposure_time_h == 0 and dose_ug == 200\n", "Executing query: exposure_time_h == 0 and dose_ug == 400\n", " No data found for query: exposure_time_h == 0 and dose_ug == 400\n", "Executing query: exposure_time_h == 24 and dose_ug == 0\n", " No data found for query: exposure_time_h == 24 and dose_ug == 0\n", "Executing query: exposure_time_h == 24 and dose_ug == 200\n", " Data found. Adding trial_df under the experiment_key: 24_200\n", "Executing query: exposure_time_h == 24 and dose_ug == 400\n", " No data found for query: exposure_time_h == 24 and dose_ug == 400\n", "Executing query: exposure_time_h == 72 and dose_ug == 0\n", " No data found for query: exposure_time_h == 72 and dose_ug == 0\n", "Executing query: exposure_time_h == 72 and dose_ug == 200\n", " Data found. Adding trial_df under the experiment_key: 72_200\n", "Executing query: exposure_time_h == 72 and dose_ug == 400\n", " Data found. Adding trial_df under the experiment_key: 72_400\n", "Executing query: exposure_time_h == 6 and dose_ug == 0\n", " No data found for query: exposure_time_h == 6 and dose_ug == 0\n", "Executing query: exposure_time_h == 6 and dose_ug == 200\n", " Data found. Adding trial_df under the experiment_key: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 6_200\n", "Executing query: exposure_time_h == 6 and dose_ug == 400\n", " No data found for query: exposure_time_h == 6 and dose_ug == 400\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we make a box plot with one box for each trial." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "import matplotlib.pylab as plt\n", "\n", "fig, ax1 = plt.subplots(figsize=(12, 4))\n", "\n", "# We sort the DataFrames by their median values.\n", "ordered_trials = sorted((df['lung_weight_fraction'].median(), exp_key) \n", " for exp_key, df in trial_dfs.items())\n", " \n", "# We only keep the experimental keys.\n", "labels = [exp_key for _, exp_key in ordered_trials]\n", "\n", "# The boxplot method requires a list of lists, with each inner list \n", "# being the data from one trial.\n", "X = [trial_dfs[exp_key]['lung_weight_fraction'] for exp_key in labels] \n", " \n", "# The bootstrap keyword specifies the number of iterations used to \n", "# bootstrap the 95% confidance intervals for each box.\n", "ax1.boxplot(X, bootstrap=5000)\n", "ax1.set_ylabel('Fraction of weight that is lung.', fontsize=15)\n", "ax1.set_xlabel('time(h)_dose($\\mu$g) or control')\n", "ax1.set_title('Lung tumor trials sorted by the median value of the fractional weight of lung.')\n", "\n", "xtick_names = plt.setp(ax1, xticklabels=labels)\n", "plt.setp(xtick_names, rotation=30)\n", "\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we can calculate the p-values for rejecting the null hypothesis that the mean values between these trials are different." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import scipy.stats as stats\n", "\n", "# We don't need to assume that the variances are the same.\n", "control_and_first = stats.ttest_ind(X[0], X[1], equal_var=False)\n", "control_and_last = stats.ttest_ind(X[1], X[-1], equal_var=False)\n", "\n", "print('The p-value between control and trial 72_400 is: ', control_and_first[1])\n", "print('The p-value between control and trial 72_200 is: ', control_and_last[1])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "The p-value between control and trial 72_400 is: 0.0015037647302\n", "The p-value between control and trial 72_200 is: 0.000135155817627\n" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion: \n", "\n", "Both 72h samples seem to have mean values that are different from control, but in opposite directions." ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }