{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Context\n", "\n", "Often, it isn't possible to get the real data where we applied our analysis. In these cases, we can generate similar dataset that contain similar phenomena based on real data. This notebook shows an example about how we can do it." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Get base data\n", "The data, we want to derive another dataset. It's just there to get some realistic file names" ] }, { "cell_type": "code", "execution_count": 1, "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", "
additionsdeletionsfileshatimestampauthor
111pom.xmlf96d80e2018-06-12 08:32:28Dirk Mahler
355jqassistant/layer.adocd6e95092018-05-30 14:59:44Dirk Mahler
511jqassistant/layer.adoc87b88d92018-05-18 22:43:32Dirk Mahler
740pom.xmlebb50e02018-05-17 20:51:14Dirk Mahler
911jqassistant/index.adocb9b6dcf2018-05-16 21:32:29Dirk Mahler
\n", "
" ], "text/plain": [ " additions deletions file sha timestamp \\\n", "1 1 1 pom.xml f96d80e 2018-06-12 08:32:28 \n", "3 5 5 jqassistant/layer.adoc d6e9509 2018-05-30 14:59:44 \n", "5 1 1 jqassistant/layer.adoc 87b88d9 2018-05-18 22:43:32 \n", "7 4 0 pom.xml ebb50e0 2018-05-17 20:51:14 \n", "9 1 1 jqassistant/index.adoc b9b6dcf 2018-05-16 21:32:29 \n", "\n", " author \n", "1 Dirk Mahler \n", "3 Dirk Mahler \n", "5 Dirk Mahler \n", "7 Dirk Mahler \n", "9 Dirk Mahler " ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from lib.ozapfdis import git_tc\n", "\n", "log = git_tc.log_numstat(\"C:/dev/repos/buschmais-spring-petclinic\")\n", "log.head()" ] }, { "cell_type": "code", "execution_count": 2, "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", "
additionsdeletionsfileshatimestampauthortype
23445src/test/java/org/springframework/samples/petc...e5254152016-08-19 16:54:56Antoine Reyother
235257src/test/java/org/springframework/samples/petc...e5254152016-08-19 16:54:56Antoine Reyother
236219src/test/java/org/springframework/samples/petc...e5254152016-08-19 16:54:56Antoine Reyother
237233src/test/java/org/springframework/samples/petc...e5254152016-08-19 16:54:56Antoine Reyother
238106src/test/java/org/springframework/samples/petc...e5254152016-08-19 16:54:56Antoine Reyother
\n", "
" ], "text/plain": [ " additions deletions file \\\n", "234 4 5 src/test/java/org/springframework/samples/petc... \n", "235 25 7 src/test/java/org/springframework/samples/petc... \n", "236 21 9 src/test/java/org/springframework/samples/petc... \n", "237 23 3 src/test/java/org/springframework/samples/petc... \n", "238 10 6 src/test/java/org/springframework/samples/petc... \n", "\n", " sha timestamp author type \n", "234 e525415 2016-08-19 16:54:56 Antoine Rey other \n", "235 e525415 2016-08-19 16:54:56 Antoine Rey other \n", "236 e525415 2016-08-19 16:54:56 Antoine Rey other \n", "237 e525415 2016-08-19 16:54:56 Antoine Rey other \n", "238 e525415 2016-08-19 16:54:56 Antoine Rey other " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "log = log[log.file.str.contains(\".java\")]\n", "log.loc[log.file.str.contains(\"/jdbc/\"), 'type'] = \"jdbc\"\n", "log.loc[log.file.str.contains(\"/jpa/\"), 'type'] = \"jpa\"\n", "log.loc[log.type.isna(), 'type'] = \"other\"\n", "log.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create synthetic dataset 1\n", "For the first technology, where \"JDBC\" was used." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create committed lines" ] }, { "cell_type": "code", "execution_count": 3, "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", "
lines
0118
150
278
3142
4123
\n", "
" ], "text/plain": [ " lines\n", "0 118\n", "1 50\n", "2 78\n", "3 142\n", "4 123" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "import pandas as pd\n", "\n", "np.random.seed(0)\n", "# adding period\n", "added_lines = [int(np.random.normal(30,50)) for i in range(0,600)]\n", "# deleting period\n", "added_lines.extend([int(np.random.normal(-50,100)) for i in range(0,200)])\n", "added_lines.extend([int(np.random.normal(-2,20)) for i in range(0,200)])\n", "added_lines.extend([int(np.random.normal(-3,10)) for i in range(0,200)])\n", "df_jdbc = pd.DataFrame()\n", "df_jdbc['lines'] = added_lines\n", "df_jdbc.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Add timestamp" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 00:00:00\n", "1 00:00:01\n", "2 00:00:02\n", "3 00:00:03\n", "4 00:00:04\n", "dtype: timedelta64[ns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "times = pd.timedelta_range(\"00:00:00\",\"23:59:59\", freq=\"s\")\n", "times = pd.Series(times)\n", "times.head()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 2013-05-15 03:35:33\n", "1 2013-05-16 02:15:44\n", "2 2013-05-17 15:12:26\n", "3 2013-05-20 00:16:06\n", "4 2013-05-21 17:43:53\n", "dtype: datetime64[ns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dates = pd.date_range('2013-05-15', '2017-07-23')\n", "dates = pd.to_datetime(dates)\n", "dates = dates[~dates.dayofweek.isin([5,6])]\n", "dates = pd.Series(dates)\n", "dates = dates.add(times.sample(len(dates), replace=True).values)\n", "dates.head()" ] }, { "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", "
linestimestamp
01182013-05-15 03:35:33
1502013-05-16 02:15:44
2782013-05-17 15:12:26
31422013-05-24 05:52:31
41232013-05-28 08:15:35
\n", "
" ], "text/plain": [ " lines timestamp\n", "0 118 2013-05-15 03:35:33\n", "1 50 2013-05-16 02:15:44\n", "2 78 2013-05-17 15:12:26\n", "3 142 2013-05-24 05:52:31\n", "4 123 2013-05-28 08:15:35" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_jdbc['timestamp'] = dates.sample(len(df_jdbc), replace=True).sort_values().reset_index(drop=True)\n", "df_jdbc = df_jdbc.sort_index()\n", "df_jdbc.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Treat first commit separetely\n", "Set a fixed value because we have to start with some code at the beginning" ] }, { "cell_type": "code", "execution_count": 7, "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", "
linestimestamp
02502013-05-15 03:35:33
1502013-05-16 02:15:44
2782013-05-17 15:12:26
31422013-05-24 05:52:31
41232013-05-28 08:15:35
\n", "
" ], "text/plain": [ " lines timestamp\n", "0 250 2013-05-15 03:35:33\n", "1 50 2013-05-16 02:15:44\n", "2 78 2013-05-17 15:12:26\n", "3 142 2013-05-24 05:52:31\n", "4 123 2013-05-28 08:15:35" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_jdbc.loc[0, 'lines'] = 250\n", "df_jdbc.head()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "df_jdbc = df_jdbc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Add file names\n", "Sample file names including their paths from an existing dataset" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "df_jdbc['file'] = log[log['type'] == 'jdbc']['file'].sample(len(df_jdbc), replace=True).values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Check dataset" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAE2dJREFUeJzt3X+s3XV9x/Hne1SQcJW2IHdd26wYG6exQeEGWVjMrTh+FGNZIhkLkRa79B90LHbROhL9YzPCFmSSLJhm6MqC3hGU0FH80VXujH/ApMpasDAK6+DSrp0C1Suoa/beH+fT7ex6uOfc3u/puffT5yM5Od/v5/s53+/7Hc553W+/5weRmUiS6vVrgy5AktRfBr0kVc6gl6TKGfSSVDmDXpIqZ9BLUuUMekmqnEEvSZUz6CWpcgsGXQDA2WefnStWrBhoDT/72c8444wzBlpDk+xnbrOfuW8+9LRr164fZeabus2bE0G/YsUKHn300YHWMD4+zujo6EBraJL9zG32M/fNh54i4t97meelG0mqnEEvSZUz6CWpcga9JFXOoJekyhn0klS5noI+IhZGxL0R8WRE7I2I346IxRGxIyKeLveLytyIiNsjYl9E7I6I8/vbgiRpOr2e0X8e+EZm/hZwHrAX2AzszMyVwM6yDnAFsLLcNgJ3NFqxJGlGugZ9RLwReA9wJ0Bm/jIzXwbWAlvLtK3AVWV5LXBXtjwMLIyIJY1XLknqSS/fjH0z8J/AlyLiPGAXcCMwnJkHATLzYEScU+YvBZ5ve/xEGTvYWNXSCbJi8/a+7HfTqqOs77Lv/Tdf2Zdj6+QTmTn9hIgR4GHg4sx8JCI+D/wE+GhmLmyb91JmLoqI7cBnM/O7ZXwn8PHM3DVlvxtpXdpheHj4grGxsSb7mrHJyUmGhoYGWkOT7KcZe1440pf9Dp8Oh16dfs6qpWf25dj9UNvzDeZHT6tXr96VmSPd5vVyRj8BTGTmI2X9XlrX4w9FxJJyNr8EONw2f3nb45cBB6buNDO3AFsARkZGctC/KTEfftdiJuynGd3Ouo/XplVHuXXP9C+//deO9uXY/VDb8w3q6qnrNfrM/A/g+Yh4axm6BPghsA1YV8bWAfeX5W3AdeXTNxcBR45d4pEknXi9/nrlR4G7I+JU4Fngelp/JO6JiA3Ac8DVZe6DwBpgH/BKmStJGpCegj4zHwM6XQe6pMPcBG6YZV2SpIb4zVhJqpxBL0mVM+glqXIGvSRVzqCXpMoZ9JJUOYNekipn0EtS5Qx6SaqcQS9JlTPoJalyBr0kVc6gl6TKGfSSVDmDXpIqZ9BLUuUMekmqnEEvSZUz6CWpcga9JFXOoJekyhn0klQ5g16SKmfQS1LlDHpJqlxPQR8R+yNiT0Q8FhGPlrHFEbEjIp4u94vKeETE7RGxLyJ2R8T5/WxAkjS9mZzRr87Md2bmSFnfDOzMzJXAzrIOcAWwstw2Anc0VawkaeZmc+lmLbC1LG8FrmobvytbHgYWRsSSWRxHkjQLvQZ9At+KiF0RsbGMDWfmQYByf04ZXwo83/bYiTImSRqABT3OuzgzD0TEOcCOiHhymrnRYSx/ZVLrD8ZGgOHhYcbHx3sspT8mJycHXkOT7KcZm1Yd7ct+h0/vvu/59N+vtucb1NVTT0GfmQfK/eGIuA+4EDgUEUsy82C5NHO4TJ8Alrc9fBlwoMM+twBbAEZGRnJ0dPS4m2jC+Pg4g66hSfbTjPWbt/dlv5tWHeXWPdO//PZfO9qXY/dDbc83qKunrpduIuKMiHjDsWXgUuBxYBuwrkxbB9xflrcB15VP31wEHDl2iUeSdOL1ckY/DNwXEcfmfzkzvxER3wPuiYgNwHPA1WX+g8AaYB/wCnB941VLknrWNegz81ngvA7jPwYu6TCewA2NVCdJmjW/GStJlTPoJalyBr0kVc6gl6TKGfSSVDmDXpIqZ9BLUuUMekmqnEEvSZUz6CWpcga9JFXOoJekyhn0klQ5g16SKmfQS1LlDHpJqpxBL0mVM+glqXIGvSRVzqCXpMoZ9JJUOYNekipn0EtS5Qx6SaqcQS9JlTPoJalyPQd9RJwSET+IiAfK+rkR8UhEPB0Rfx8Rp5bx08r6vrJ9RX9KlyT1YiZn9DcCe9vWbwFuy8yVwEvAhjK+AXgpM98C3FbmSZIGpKegj4hlwJXA35T1AN4L3FumbAWuKstryzpl+yVlviRpACIzu0+KuBf4LPAG4E+A9cDD5aydiFgOfD0z3xERjwOXZ+ZE2fYM8O7M/NGUfW4ENgIMDw9fMDY21lhTx2NycpKhoaGB1tAk+2nGnheO9GW/w6fDoVenn7Nq6Zl9OXY/1PZ8g/nR0+rVq3dl5ki3eQu6TYiI9wOHM3NXRIweG+4wNXvY9n8DmVuALQAjIyM5Ojo6dcoJNT4+zqBraJL9NGP95u192e+mVUe5dc/0L7/914725dj9UNvzDerqqWvQAxcDH4iINcDrgTcCfwUsjIgFmXkUWAYcKPMngOXAREQsAM4EXmy8cklST7peo8/MT2bmssxcAVwDfDszrwUeAj5Ypq0D7i/L28o6Zfu3s5frQ5KkvpjN5+g/AXwsIvYBZwF3lvE7gbPK+MeAzbMrUZI0G71cuvlfmTkOjJflZ4ELO8z5OXB1A7VJkhrgN2MlqXIGvSRVzqCXpMoZ9JJUOYNekipn0EtS5Qx6SaqcQS9JlTPoJalyBr0kVc6gl6TKGfSSVDmDXpIqZ9BLUuUMekmqnEEvSZUz6CWpcga9JFXOoJekyhn0klQ5g16SKmfQS1LlDHpJqpxBL0mVM+glqXILuk2IiNcD3wFOK/PvzcxPR8S5wBiwGPg+8KHM/GVEnAbcBVwA/Bj4/czc36f6pWqt2Lx9IMfdf/OVAzmu+qeXM/pfAO/NzPOAdwKXR8RFwC3AbZm5EngJ2FDmbwBeysy3ALeVeZKkAeka9NkyWVZfV24JvBe4t4xvBa4qy2vLOmX7JRERjVUsSZqRnq7RR8QpEfEYcBjYATwDvJyZR8uUCWBpWV4KPA9Qth8BzmqyaElS7yIze58csRC4D/gU8KVyeYaIWA48mJmrIuIJ4LLMnCjbngEuzMwfT9nXRmAjwPDw8AVjY2NN9HPcJicnGRoaGmgNTbKfZux54Uhf9jt8Ohx6tS+7nrVVS8+c8WNqe77B/Ohp9erVuzJzpNu8rm/GtsvMlyNiHLgIWBgRC8pZ+zLgQJk2ASwHJiJiAXAm8GKHfW0BtgCMjIzk6OjoTEpp3Pj4OIOuoUn204z1fXpDdNOqo9y6Z0YvvxNm/7WjM35Mbc83qKunrpduIuJN5UyeiDgdeB+wF3gI+GCZtg64vyxvK+uU7d/OmfyzQZLUqF5OKZYAWyPiFFp/GO7JzAci4ofAWET8OfAD4M4y/07g7yJiH60z+Wv6ULckqUddgz4zdwPv6jD+LHBhh/GfA1c3Up0kadb8ZqwkVc6gl6TKGfSSVDmDXpIqZ9BLUuUMekmqnEEvSZUz6CWpcga9JFXOoJekyhn0klQ5g16SKmfQS1LlDHpJqpxBL0mVM+glqXIGvSRVzqCXpMoZ9JJUOYNekipn0EtS5Qx6SaqcQS9JlTPoJalyBr0kVa5r0EfE8oh4KCL2RsQTEXFjGV8cETsi4ulyv6iMR0TcHhH7ImJ3RJzf7yYkSa+tlzP6o8CmzHwbcBFwQ0S8HdgM7MzMlcDOsg5wBbCy3DYCdzRetSSpZ12DPjMPZub3y/JPgb3AUmAtsLVM2wpcVZbXAndly8PAwohY0njlkqSezOgafUSsAN4FPAIMZ+ZBaP0xAM4p05YCz7c9bKKMSZIGIDKzt4kRQ8A/AZ/JzK9FxMuZubBt+0uZuSgitgOfzczvlvGdwMczc9eU/W2kdWmH4eHhC8bGxprp6DhNTk4yNDQ00BqaZD/N2PPCkb7sd/h0OPRqX3Y9a6uWnjnjx9T2fIP50dPq1at3ZeZIt3kLetlZRLwO+Cpwd2Z+rQwfioglmXmwXJo5XMYngOVtD18GHJi6z8zcAmwBGBkZydHR0V5K6Zvx8XEGXUOT7KcZ6zdv78t+N606yq17enr5nXD7rx2d8WNqe75BXT318qmbAO4E9mbm59o2bQPWleV1wP1t49eVT99cBBw5dolHknTi9XJKcTHwIWBPRDxWxv4UuBm4JyI2AM8BV5dtDwJrgH3AK8D1jVYsSZqRrkFfrrXHa2y+pMP8BG6YZV2SpIb4zVhJqpxBL0mVM+glqXIGvSRVzqCXpMoZ9JJUOYNekipn0EtS5Qx6SaqcQS9JlTPoJalyBr0kVc6gl6TKGfSSVDmDXpIqZ9BLUuUMekmqnEEvSZUz6CWpcga9JFXOoJekyhn0klQ5g16SKmfQS1LlDHpJqpxBL0mV6xr0EfHFiDgcEY+3jS2OiB0R8XS5X1TGIyJuj4h9EbE7Is7vZ/GSpO56OaP/W+DyKWObgZ2ZuRLYWdYBrgBWlttG4I5mypQkHa+uQZ+Z3wFenDK8FthalrcCV7WN35UtDwMLI2JJU8VKkmYuMrP7pIgVwAOZ+Y6y/nJmLmzb/lJmLoqIB4CbM/O7ZXwn8InMfLTDPjfSOutneHj4grGxsQbaOX6Tk5MMDQ0NtIYm2U8z9rxwpC/7HT4dDr3al10PRFP9rFp65ux30pD58BpavXr1rswc6TZvQcPHjQ5jHf+SZOYWYAvAyMhIjo6ONlzKzIyPjzPoGppkP81Yv3l7X/a7adVRbt3T9MtvcJrqZ/+1o7MvpiE1vYaO91M3h45dkin3h8v4BLC8bd4y4MDxlydJmq3j/RO8DVgH3Fzu728b/0hEjAHvBo5k5sFZV6mT3p4XjvTt7FqqXdegj4ivAKPA2RExAXyaVsDfExEbgOeAq8v0B4E1wD7gFeD6PtQsSZqBrkGfmX/wGpsu6TA3gRtmW5QkqTl+M1aSKmfQS1LlDHpJqpxBL0mVM+glqXIGvSRVzqCXpMoZ9JJUOYNekipn0EtS5Qx6SaqcQS9JlTPoJalyBr0kVa6e/5eZTogVA/qff2xaNZDDSlXwjF6SKmfQS1LlDHpJqpxBL0mVM+glqXIGvSRVzo9XzkO9fMRx06qjrB/QRyElzS2e0UtS5Qx6Saqcl24kzRmD+ub1/puvHMhxT5S+nNFHxOUR8VRE7IuIzf04hiSpN42f0UfEKcBfA78LTADfi4htmfnDpo81aIM6+5CkmejHGf2FwL7MfDYzfwmMAWv7cBxJUg/6cY1+KfB82/oE8O4+HAdo7qzajyNKJ69OOXKiMuFEvD8QmdnsDiOuBi7LzD8s6x8CLszMj06ZtxHYWFbfCjzVaCEzdzbwowHX0CT7mdvsZ+6bDz39Zma+qdukfpzRTwDL29aXAQemTsrMLcCWPhz/uETEo5k5Mug6mmI/c5v9zH019dSPa/TfA1ZGxLkRcSpwDbCtD8eRJPWg8TP6zDwaER8BvgmcAnwxM59o+jiSpN705QtTmfkg8GA/9t1Hc+YyUkPsZ26zn7mvmp4afzNWkjS3+Fs3klS5ky7oI+LPImJ3RDwWEd+KiN8o4xERt5efbdgdEee3PWZdRDxdbusGV/2vioi/jIgnS833RcTCtm2fLP08FRGXtY3P2Z+oiIirI+KJiPjviBiZsm3e9dPJfKsXICK+GBGHI+LxtrHFEbGjvC52RMSiMv6ar6W5IiKWR8RDEbG3PN9uLOPztqdpZeZJdQPe2Lb8R8AXyvIa4OtAABcBj5TxxcCz5X5RWV406D7aergUWFCWbwFuKctvB/4FOA04F3iG1pvjp5TlNwOnljlvH3Qfbf28jdb3KsaBkbbxedlPh/7mVb1tdb8HOB94vG3sL4DNZXlz23Ov42tpLt2AJcD5ZfkNwL+W59i87Wm620l3Rp+ZP2lbPQM49ibFWuCubHkYWBgRS4DLgB2Z+WJmvgTsAC4/oUVPIzO/lZlHy+rDtL63AK1+xjLzF5n5b8A+Wj9PMad/oiIz92Zmpy/Pzct+Ophv9QKQmd8BXpwyvBbYWpa3Ale1jXd6Lc0ZmXkwM79fln8K7KX1rf5529N0TrqgB4iIz0TE88C1wKfKcKefblg6zfhc9GFaZx1QRz/taulnvtU7neHMPAit4ATOKePzqseIWAG8C3iESnqaqsrfo4+IfwR+vcOmmzLz/sy8CbgpIj4JfAT4NK1/kk2V04yfMN36KXNuAo4Cdx97WIf5Sec/7nOun04P6zA2J/qZoYE/n06AedNjRAwBXwX+ODN/EtGp9NbUDmNzsqdOqgz6zHxfj1O/DGynFfSv9dMNE8DolPHxWRc5A936KW8Qvx+4JMsFRab/KYquP1HRTzP479NuzvYzQz39RMg8cSgilmTmwXIZ43AZnxc9RsTraIX83Zn5tTI8r3t6LSfdpZuIWNm2+gHgybK8DbiuvLt+EXCk/NPtm8ClEbGovAN/aRmbEyLicuATwAcy85W2TduAayLitIg4F1gJ/DPz9ycqaulnvtU7nW3AsU+hrQPubxvv9FqaM6J16n4nsDczP9e2ad72NK1Bvxt8om+0/oI/DuwG/gFYWsaD1v8w5RlgD///Ex8fpvXm3z7g+kH3MKWffbSuHT5Wbl9o23ZT6ecp4Iq28TW0PmXwDK3LJQPvo62236N19vQL4BDwzfncz2v0OK/qLTV/BTgI/Ff577MBOAvYCTxd7heXua/5WporN+B3aF162d322lkzn3ua7uY3YyWpcifdpRtJOtkY9JJUOYNekipn0EtS5Qx6SaqcQS9JlTPoJalyBr0kVe5/AMYLWZuaLv0hAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "df_jdbc.lines.hist()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sum up the data and check if it was created as wanted." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df_jdbc_timed = df_jdbc.set_index('timestamp')\n", "df_jdbc_timed['count'] = df_jdbc_timed.lines.cumsum()\n", "df_jdbc_timed['count'].plot()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Timestamp('2017-07-21 19:02:47')" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "last_non_zero_timestamp = df_jdbc_timed[df_jdbc_timed['count'] >= 0].index.max()\n", "last_non_zero_timestamp" ] }, { "cell_type": "code", "execution_count": 13, "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", "
linestimestampfile
02502013-05-15 03:35:33src/main/java/org/springframework/samples/petc...
1502013-05-16 02:15:44src/main/java/org/springframework/samples/petc...
2782013-05-17 15:12:26src/main/java/org/springframework/samples/petc...
31422013-05-24 05:52:31src/main/java/org/springframework/samples/petc...
41232013-05-28 08:15:35src/main/java/org/springframework/samples/petc...
\n", "
" ], "text/plain": [ " lines timestamp \\\n", "0 250 2013-05-15 03:35:33 \n", "1 50 2013-05-16 02:15:44 \n", "2 78 2013-05-17 15:12:26 \n", "3 142 2013-05-24 05:52:31 \n", "4 123 2013-05-28 08:15:35 \n", "\n", " file \n", "0 src/main/java/org/springframework/samples/petc... \n", "1 src/main/java/org/springframework/samples/petc... \n", "2 src/main/java/org/springframework/samples/petc... \n", "3 src/main/java/org/springframework/samples/petc... \n", "4 src/main/java/org/springframework/samples/petc... " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_jdbc = df_jdbc[df_jdbc.timestamp <= last_non_zero_timestamp]\n", "df_jdbc.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create synthetic dataset 2" ] }, { "cell_type": "code", "execution_count": 14, "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", "
linestimestampfile
01502015-05-17 15:12:26src/main/java/org/springframework/samples/petc...
1862015-05-20 00:16:06src/main/java/org/springframework/samples/petc...
2-272015-05-24 05:52:31src/main/java/org/springframework/samples/petc...
3142015-06-04 21:09:15src/main/java/org/springframework/samples/petc...
4662015-06-06 19:22:39src/main/java/org/springframework/samples/petc...
\n", "
" ], "text/plain": [ " lines timestamp \\\n", "0 150 2015-05-17 15:12:26 \n", "1 86 2015-05-20 00:16:06 \n", "2 -27 2015-05-24 05:52:31 \n", "3 14 2015-06-04 21:09:15 \n", "4 66 2015-06-06 19:22:39 \n", "\n", " file \n", "0 src/main/java/org/springframework/samples/petc... \n", "1 src/main/java/org/springframework/samples/petc... \n", "2 src/main/java/org/springframework/samples/petc... \n", "3 src/main/java/org/springframework/samples/petc... \n", "4 src/main/java/org/springframework/samples/petc... " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_jpa = pd.DataFrame([int(np.random.normal(20,50)) for i in range(0,600)], columns=['lines'])\n", "df_jpa.loc[0,'lines'] = 150\n", "df_jpa['timestamp'] = pd.DateOffset(years=2) + dates.sample(len(df_jpa), replace=True).sort_values().reset_index(drop=True)\n", "df_jpa = df_jpa.sort_index()\n", "df_jpa['file'] = log[log['type'] == 'jpa']['file'].sample(len(df_jpa), replace=True).values\n", "df_jpa.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Check dataset" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df_jpa.lines.hist()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEICAYAAAC0+DhzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3Xl8FPX9x/HXJ/cJgSRcSbhBBASUCCgCKooXirf0Ei2KttS2alu1tWrV/rStra09bGmxolXxrFLxPhFUICAgN8iVcCaEhEDu7Of3x0ziQgKEXDObfJ6Pxz6Y+c7s7JvZzX52Zr4zI6qKMcYYEyzM6wDGGGP8x4qDMcaYWqw4GGOMqcWKgzHGmFqsOBhjjKnFioMxxpharDgYY4ypxYqDMcaYWqw4GGOMqSXC6wANlZKSoj179vQ6hjHGhIwlS5bkqWpqfeYN2eLQs2dPsrKyvI5hjDEhQ0S21nde261kjDGmFisOxhhjarHiYIwxphYrDsYYY2qx4mCMMaYWKw7GGGNqseJgjDE+l51fzIGySvIPlrN21/4Wec2QPc/BGGNau815B1mydR93vryCysDXt3Te8vBFzf7aVhyMMcZnAgHl+icX8/H63Jq2E7u2Y83OltlqACsOxhjjOwu+yuPj9blMPjWD2YuzAXjw0sGkJcVSXhlokQxWHIwxxiOrd+xn9/5Stu49SM+UeEorAhSWlDP3y10A3HXhidx5wQCeXbSNkzOSCAuTFstmxcEYYzywcnshE/88v85pEWHCZSen0S4mAhHh+2f2beF0VhyMMabF/eattbz6xXbCBB69Zhi93K2GuKhwOsRHkRwfRUxkuKcZrTgYY0wLqgooT8zfTI/kOH44/iQmDUvzOlKdrDgYY0wLKa2o4tdz11BWGeCWs/tx8dBuXkc6IisOxhjTAvIPlnPKA+8CcP3onkwc0tXjREdnxcEYYxqpuNw5ezkqPIxO7WLqnOfm/ywB4NrTenDvxYNaMl6DWHEwxphGeG3Zdn7y4nIqqhQRuHfiQK4b3QuA8soAURFhLN6Sz6LN+QBMG9vby7j1ZsXBGGMaaEveQX764gqGpidx5fB03luzm/v+t5q5X+5kR0Ep2wtK6J0Sz5a9B+mdEs/TN4wkLSnW69j1YsXBGGMa6KN1eyivCvDoNcPI6BjHlcPT+df8zby0JIftBSUAbMo7CMALN59GSkK0l3GPixUHY4xpoMVb9wHUfOlHhIdx87g+3DimN//6ZBM9kuP5aN0erj41I6QKA1hxMMaY46KqfLIhj/jocN5auYtzB3YmNurQE9bCw4SbxvUB4PzBXbyI2WjHvJ+DiDwhIntEZGVQW0cReVdENrj/dnDbRUQeE5GNIrJCRE4Jes4Ud/4NIjIlqH24iHzpPucxEWm5i4cYY8xx+vSrvVz7xCKuePwzOsRF8fDlJ3kdqVnU52Y/TwLnH9Z2J/C+qvYD3nfHAS4A+rmPacDj4BQT4F5gJDACuLe6oLjzTAt63uGvZYwxvvHWyl01wzeN7U1yiO0uqq9jFgdVnQfkH9Y8CZjlDs8CLg1qf0odnwNJItIVOA94V1XzVXUf8C5wvjutnap+pqoKPBW0LGOM8QVV5fnF27hhVhZPf74VgJ9M6M/1o3t6G6wZNfSYQ2dV3QmgqjtFpJPbngZkB82X47YdrT2njnZjjPGNOct3cMfLX9IzOQ6AET078oOz+3mcqnk19QHpuo4XaAPa6164yDScXVB07969IfmMMea4lJRX8crS7USGCx/cfmaL3lPBS/U55lCX3e4uIdx/97jtOUBG0HzpwI5jtKfX0V4nVZ2hqpmqmpmamtrA6MYYU7dAQOl551zueGkFb63cyVe5Bxj9mw/4eH0ut57bv80UBmj4lsMcYArwsPvva0HtPxCR2TgHnwvd3U5vA/8XdBB6AnCXquaLSJGIjAIWAtcCf25gJmOMOS4VVQG25B2kXWwkj7y9jpU7nHs0P5+VzfNZX+8Jv2RoN09uuOOlYxYHEXkOOBNIEZEcnF5HDwMviMhUYBtwlTv7G8CFwEagGLgewC0CDwCL3fnuV9Xqg9zfw+kRFQu86T6MMabZnfbQB+QdKCM2MpySiipO653MD8f3I2dfMa8s3Q5Au5gIfn/1UI+TtrxjFgdV/cYRJo2vY14Fph9hOU8AT9TRngUMPlYOY4xpSjsKSsg7UAZARsdYLj057ZCtg4oq5X/LdzDj2kwiwxu6Bz502RnSxpg24enPt/LLV1cyum8ySXFRvLt6NzGRYfzh6mFceFLteyv87sohTBjYmVG9kz1I6z0rDsaYVq+8MsAvX3Uu8rBg417SO8Ry2bA0bhnfl/QOcXU+JyYy3Nd3amtuVhyMMa3e7v2lNcNzfjCaIelJHqYJDVYcjDGtzpa8g6zdVUS/zgk8+u56Xl+xE4APbh9H79QEj9OFBisOxphW5+E31/LWKucaSFERYXxzZHf6dUqwwnAcrDgYY1qV0oqqmsJwxSnpTD+rjxWFBrDiYIxpNVbtKORb/1pYM94Wz09oKlYcjDGtxoKNeRQUV3DTuN5MPaOX13FCmhUHY0yrsDy7gBnzNgPw/XF9aR8X6XGi0GbFwRgT0t5dvZsbn8oCIDEmgj9cPdQKQxOw4mCMCWkb9xyoGX78W8M5o1+Kh2laj7Z3wRBjTKuxcU8R/5j3FQA/HN+PUb07epyo9bAtB2NMyLrz5S8pKK7gvdvG0rdTotdxWhXbcjDGhKSnPttC1tZ9xEaGW2FoBrblYIwJCZVVAZ5ZuI2Xl+Zw1fB07nltFQD/uWGkx8laJysOxhjfKiyu4C8fbmBzXjFrdu5ne0EJACtyCgG44YxeDO/R4WiLMA1kxcEY4zuqysrt+/nurMXkFjk35Mns0YETu7ajY3wkZZUB7pk4kOSEaI+Ttl5WHIwxvqKqXPvEIj7ZkAfAszeMJCUxmv6d7bhCS7LiYIzxlX8v2FJTGB6YNIjT+9p5C16w4mCM8Y38g+U8sWAzI3p15O/fHk7H+CivI7VZVhyMMZ7Lzi/m9RU7mTl/E/tLKnnw0sFWGDxmxcEY44mS8iqm/HsROwtLyNlXgqrT/sYPxzCwWztvwxkrDsYYb6zfXcSizfkA9EiOY3j3DpzRL8UKg09YcTDGeCJ7XzEAf/7GyVw8tJvHaczhGnX5DBG5VURWichKEXlORGJEpJeILBSRDSLyvIhEufNGu+Mb3ek9g5Zzl9u+TkTOa9x/yRgTCuZvyCMxOoLzBnXxOoqpQ4OLg4ikAT8EMlV1MBAOTAZ+Azyqqv2AfcBU9ylTgX2q2hd41J0PERnoPm8QcD7wNxEJb2guY4z/lVcGeH/tHsb2TyUqwi7x5keNfVcigFgRiQDigJ3A2cBL7vRZwKXu8CR3HHf6eBERt322qpap6mZgIzCikbmMMT42c/5mcovKuCoz3eso5ggafMxBVbeLyCPANqAEeAdYAhSoaqU7Ww6Q5g6nAdnucytFpBBIdts/D1p08HMOISLTgGkA3bt3b2h0Y4xHnvpsS80F8845sTNnntDJ20DmiBqzW6kDzq/+XkA3IB64oI5ZtfopR5h2pPbajaozVDVTVTNTU1OPP7QxxhOlFVXsL62oKQy/nDiQv3zzZI9TmaNpTG+lc4DNqpoLICKvAKcDSSIS4W49pAM73PlzgAwgx90N1R7ID2qvFvwcY0wrMP2Zpby/dg8APz3vBKae0cvjROZYGnPMYRswSkTi3GMH44HVwIfAle48U4DX3OE57jju9A9UVd32yW5vpl5AP2BRI3IZYzxUVFrBwbJKfvricuZvyGPqk4trCgPA1ZkZR3m28YvGHHNYKCIvAUuBSuALYAYwF5gtIg+6bTPdp8wEnhaRjThbDJPd5awSkRdwCkslMF1Vqxqayxjjnb99tJHfvrWOvp0S2LjnAC8uyamZNnNKJnkHykhNtMtshwJRrXP3vu9lZmZqVlaW1zGMMUHO+M0H5OwrIUwg4H61DE1vz/2TBjM0I8nbcAYRWaKqmfWZ186QNsbUS1llFQs35TOiV0cKiit4f+1uSsqr2Lq3mKc/38r1o3uSs6+EO84fwNQzevHqF9sRgatsN1JIsuJgjKmXGR9v4vfvricxOoKisspa0/+9YAs9kuOYcnoPoiLCuPpUKwqhzIqDMeaYAgHlxSU5DOiSyIGySorKKjl/UBd+c+UQoiPC2FFQwi/+u5KfnX8CcVH2tdIa2LtojDmmVTv2sy2/mEeuGsqVw9Mpq6wiOuLrq9z0Tk3guWmjPExompoVB2NMnSqqAtz+wnIAVm4vBGB032SAQwqDaZ2sOBhj6rRwUz5zln99Pur3z+xD1/axHiYyLcmKgzGmTl/lHgDg39efSnpSLP06J3qcyLQkKw7GmFpUlbW79gNwWu9kYiJtN1JbY8XBGHOIssoqbnthOXNX7GRg13ZWGNooKw7GmBqzF23jzle+BGD6WX2YNraPx4mMV6w4GNNG7SgoYdf+Uk7p3oGH3ljDP+Ztqpn2o/H9uPXc/h6mM16z4mBMG/X9Z5ayLLuA6Wf1OaQwPHz5SUweYTfTauusOBjTRpRWVHHfnFWEhQk/nXACm/MOAvDXD78iNjKct348hvkb87hyuN2601hxMKbNyNqyj9mLswF4duE2AP7vspMY2K0dAVV6JMfTIzney4jGRxpzsx9jTIh4fvE2fvz8MgBud48lxEWFc/kpaQzLSOKU7h28jGd8yLYcjGkD7njZ6YGUFBfJLeP70TMlnqHpSdZN1RyRFQdjQlggoISFCQfKKrlxVhZFZRX0SU0gs0cHLhmaRvu4SMorAzXz3zimNwAXD+3mVWQTIqw4GBOCVJWZ8zfz4Nw1nD+oCyUVVXy2aS+n9U7mw7V7eG3ZDn752ioGdEmkW5JzPaQHLh3Md0b18Di5CRVWHIwJQZvyDvLg3DUAvLVqFwBXDU/nd1cNRVX57pOL+XBdLmt3FbF2VxEAsbYLyRwHKw7G+MCm3ANs2XuQswd0rtf8L2bl1Ay3i4kgKiKc+y4ZBICIcMcFA9iUd5A/TT6Z5PgoVm4v5JyB9Vu2MWDFwRjPFZdXMv4PH6MKf5o8jEnD0gAoKa/iH/O+YuveYrbvK2HRlnzm/GA0H67N5e8ff8XkUzN4+IohgLObSURqljmgSzs+/ulZNeMZHeNa9j9lQp6oqtcZGiQzM1OzsrK8jmHMcSsuryQmIpzyqgDb8ov57VvreG/N7prp7WMjSUmI4qtc5yS1uKhwisurDllGYnQEn9xxFklxUS2a3YQ2EVmiqpn1mde2HIxpIT3vnFsznBAdwYGyyprxoRlJPHfjSH739jr+vWALhSUVJMZE8N3RvfjxOf0oqahi4D1vM6hbO3535VB6JMcRH21/vqb5NOrTJSJJwL+AwYAC3wXWAc8DPYEtwNWquk+cbd4/ARcCxcB1qrrUXc4U4G53sQ+q6qzG5DLG70b06sgHa/fUjE8a2o24qAjuvXgQV5ySTtf2MSQnRNdMj4uK4PO7xpOaGE14mNS1SGOaVGN/evwJeEtVrxSRKCAO+Dnwvqo+LCJ3AncCdwAXAP3cx0jgcWCkiHQE7gUycQrMEhGZo6r7GpnNGF9pFxPB/tJKVt9/HnFRzp9eIKC8v3YP4wd0qplvcFr7Op/fpX1Mi+Q0Bhpx+QwRaQeMBWYCqGq5qhYAk4DqX/6zgEvd4UnAU+r4HEgSka7AecC7qprvFoR3gfMbmsuYplRRFTj2TEcRCDjH9IpKK4gID+NidwuhWliYcO7AzoTZ1oDxmcZsOfQGcoF/i8hQYAnwI6Czqu4EUNWdIlL9kygNyA56fo7bdqR2YzyVd6CMzAffA2DVr84jPjqi5ozk+thRUMI1Mz6jd0oC8dHhFBSXM+U0OwnNhIbGFIcI4BTgFlVdKCJ/wtmFdCR1/UXpUdprL0BkGjANoHt3u968aV73zVlVMzzh0XlUBgLERIbz2vTR9eol9NCba8nOLyE7vwRwbqCT2bNjs+U1pik15qqsOUCOqi50x1/CKRa73d1FuP/uCZo/I+j56cCOo7TXoqozVDVTVTNTU1MbEd2Yo/t4fS6vr9jJbef254y+KWwvKGH3/jK27i1meU5hvZaxbe9BxvVPZeaUTG4a15tbzu7bzKmNaToNLg6qugvIFpET3KbxwGpgDjDFbZsCvOYOzwGuFccooNDd/fQ2MEFEOohIB2CC22aMJwqKy1mwMQ+Am8f14dKTD93LufdAWc3wtr3FbNxTVOdycovKSEmIZvyJnbnrghOJCLcr5JvQ0djeSrcAz7g9lTYB1+MUnBdEZCqwDbjKnfcNnG6sG3G6sl4PoKr5IvIAsNid735VzW9kLmOOW1llFfe8uorns5xDYGP7pxIVEcaVw9O5cng65ZUBBvzyTba4d1DbXlDCeX+cR0lFFTO+M5wx/VKJjXKuXxQIKLkHykhJtJPUTGhqVHFQ1WU4XVAPN76OeRWYfoTlPAE80ZgsxjRGRVWAb/5zIUu2Oj2oLx3WjTsuGHDIPFERYWR0jOOJBVv49Ku9ZG39urf1tKeXADCqd0eGpifV3JO5T2pCC/0PjGladoqlMcAnG3JZsnUfv75sMN8aeeQeRY9eM4zZi7bx3po9pCXF8udvnkyf1ASG/uodABZuzufzTV9v+F4wuEuzZzemOVhxMAZ448tdtI+N5KrhGUed75TuHTileweqAkpVQImKcI4jfPKzs3hl6Xa+d2Yf3l29m1mfbeG+iweRGBPZAumNaXpWHEybtnJ7Iet3F5G1JZ8RvTrWfNkfS3iYHHIZi4yOcfzonH4AXDSkKxcN6doseY1pKVYcTJtVWFzBxD/PrxmfPMLOnTGmmvWtM23WWb//qGZYBC4cbL/2jalmWw6mTVJVCksqSEuK5bFvnEx8dDjdk+2GOMZUs+Jg2pxVOwq56DFnd9INY3oxvEcHjxMZ4z+2W8m0OVlbnPMTuneM44rh6R6nMcafrDiYNmNHQQmVVYGaO7C9c+tY2llXU2PqZLuVTKtXWlHFA6+v5pmF25hyWg8Wbs4nOT6KmMhwr6MZ41tWHEzIKKus4sHX1zA4rR3XnFr/bqdzV+zkmYXbAJj12Vbn3++OaJaMxrQWVhxMyNiUe5CnP3e+3Ad0acfQjKQ653tn1S6mP7uUn0w4gbdW7eKLbQVEhgsXndSVV5c5V4Mf198u+W7M0VhxMCFjZ2FJzfDCzXvrLA579pfWXATvoTfX1rSfO7AzN43rQ/fkeL490k52M+ZYrDiYkLHCvclOr5R4Plyby7SxfQ6Zrqr84LkvAPjVJYM4rU8y6R1iydlXQpf2MbSLieTEru1aPLcxociKgwkZAffmsRcP6cpjH2xk0l8XEBsZRt6BcnbvLyVMhMKSCm45uy9TTu9Z87z+nRO9CWxMCLPiYHwrEFCez8pm/sY8eibHsdg9P+HGsb157IONLM8uILNHB/qmJjC6TzL5xRVsyTvIDWN6e5zcmNBnxcH4UlVAGfXQ++QWlR3S3jslnsSYSO6+6EQqA8rN4/ocYQnGmMaw4mA8tXt/KQfLKukddMe0VTsKuXFWVk1heHrqCPp3TiQ1IbpmHts6MKZ5WXEwnthZWMLNTy9huXuQeUSvjkwY2JmrMjP49dw1lFcFAPjT5GGM6WfdTo1paVYcjCfeXrmrpjBcfkoaq3fs58G5a3hw7hoA7pk4kO+e0cvLiMa0aVYcjCfio52P3gOTBvGd03oC8MHa3Xz3ySwAvmnnIhjjKSsOpklNf2YpAVUe//ZwSiuqeGvlLr7Yto/zBnfhtN7JiAgHyyp54PXVAJw1oFPNc88e0Jnnp40CsOseGeMxKw6myVQFlLlf7gRg6bZ9XP63T2umzfpsK3FR4XTvGMfaXUUAnN4nmW7tYw9ZxsjeyS0X2BhzRI0uDiISDmQB21V1ooj0AmYDHYGlwHdUtVxEooGngOHAXuAaVd3iLuMuYCpQBfxQVd9ubC7TsgpLKrjsrwtqxqc9taRmOD4qnNsmnEDOvmK27S2mQ1wUIvDv608lLEy8iGuMOYam2HL4EbAGqL4uwW+AR1V1toj8HedL/3H3332q2ldEJrvzXSMiA4HJwCCgG/CeiPRX1aomyGZaQHF5Jb/63yo25R3k/kmDWLuriGfdq6Auv2cCCTERhFsRMCakNOpmPyKSDlwE/MsdF+Bs4CV3llnApe7wJHccd/p4d/5JwGxVLVPVzcBGwK6nHEL++N4GXlm6nR7JcUwalsYvLjyReyYOZPm9E2gfF2mFwZgQ1Ngthz8CPwOqL16TDBSoaqU7ngOkucNpQDaAqlaKSKE7fxrwedAyg59jfG7VjkJmzNtEn9R43rttHE69x7qhGhPiGrzlICITgT2quiS4uY5Z9RjTjvacw19zmohkiUhWbm7uceU1Ta+wuILJMz4nJSGKuycOrCkMxpjQ15jdSqOBS0RkC84B6LNxtiSSRKR6iyQd2OEO5wAZAO709kB+cHsdzzmEqs5Q1UxVzUxNtbNmvfafhVspKq3kyetHcNYJnY79BGNMyGhwcVDVu1Q1XVV74hxQ/kBVvwV8CFzpzjYFeM0dnuOO407/QFXVbZ8sItFuT6d+wKKG5jIt4+p/fMbv3l7HhIGdGZzW3us4xpgm1hznOdwBzBaRB4EvgJlu+0zgaRHZiLPFMBlAVVeJyAvAaqASmG49lfxt8ozPWLQ5H4BfThzocRpjTHNokuKgqh8BH7nDm6ijt5GqlgJXHeH5vwZ+3RRZTNMqrwzw4bo9jOmXQkl5FXkHyvl8U37N9IyOcR6mM8Y0FztD2hzRsuwCfvDsUnL2ldSalpIQxcvfO92DVMaYlmDFwdTy9qpd5Owr4ZG319EhLpJTe3aouQsbwPAeHXjkqqH0SI73MKUxpjlZcTCHWJ5dwE1PO72TB3RJ5OmpI0lNjGZnYQld2sVQGVAiwxt17qQxJgRYcTAAlFZU8fLSHH7x35WAc92j0X1SiIpwCkFX9wJ5keF2LoMxbYEVhzauuLySJ+Zv5slPt5B3oJy0pFj6dU7gjL4ptoVgTBtmxaGNu/9/q5m9OJszT0jlprF9GNW7o53pbIyx4tCW5RaV8eqy7XxjRHceuvwkr+MYY3zE9hu0YY+8vY7KKuXGMXaRPGPMoaw4tFGFxRW8tDSHb4/qQe/UBK/jGGN8xopDG1QVUH79xmqqAspFQ7p6HccY40N2zKGN+Sr3ANOfWcraXUW0j41kWEaS15GMMT5kxaGNueXZL9i1v5RvjOjOzy8cYN1VjTF1sm+GEKWqrNm5n4/W7aG8MnDItDU791NRFaj1nB0FJazeuZ/vjevDQ5efRGJMZEvFNcaEGNtyCCHF5ZU8+u56VGHx1n0szy4AID4qnNP6pDCufwp9UhP45r8WEhMZxj0TBzGmXwpPfrqFb4/qwVmPfATA+BM7e/i/MMaEAisOIWTgPW/XDKckRPHLiQNJjI5geU4B8zbk8t6a3TXTSysCPP7xRp5fvI3lOYU8s3BrzbS+nax3kjHm6Kw4hIj1u4sOGX/vtnEkxUUBcPWpGagqW/YWsyx7H8XlVby1chefbMgjO7+ES4Z2Y8veg+wvqWDmdad6Ed8YE2KsOPjcvoPl3PXKl7y1ahcAN47pxU/PG1BzQbxqIkKvlHh6pTiX0V69Yz8A4wd04p6LB5KSEN2ywY0xIc2Kg48dKKvkun8vYnlOIQBDM5L4xUX1uy3nLy46kR+N70endjHNGdEY00pZcfCxe15dyYrthQzNSKJ7xzj+eM2wej83LiqCuCh7e40xDWPfHj4UCCgz52/m9RU7uSYzg4evGOJ1JGNMG2PFwWdeXpLD7S8uByAtKZbpZ/X1OJExpi2y4uAjBcXl3P3qyprx928fR0xkuIeJjDFtlRUHH3l20TZKKqp480djGNAl0W66Y4zxjBUHn8jOL+Zfn2zmjL4pnNi1nddxjDFtXIOvrSQiGSLyoYisEZFVIvIjt72jiLwrIhvcfzu47SIij4nIRhFZISKnBC1rijv/BhGZ0vj/Vuh5fnE2BcXl3HdJ/bqqGmNMc2rMhfcqgdtV9URgFDBdRAYCdwLvq2o/4H13HOACoJ/7mAY8Dk4xAe4FRgIjgHurC0pbsPdAGff/bzUz5m0iJSGavp0SvY5kjDEN362kqjuBne5wkYisAdKAScCZ7myzgI+AO9z2p1RVgc9FJElEurrzvquq+QAi8i5wPvBcQ7OFirwDZZz1yEccLKvkyuHp/Oic/l5HMsYYoImOOYhIT+BkYCHQ2S0cqOpOEenkzpYGZAc9LcdtO1J7q5dbVEZRaSW/vWIIV5+a4XUcY4yp0ejiICIJwMvAj1V1/1F62NQ1QY/SXtdrTcPZJUX37t2PP6yHVJVXlm7ny+2FXDy0G4O6tWPe+lwAhmS09zidMcYcqlHFQUQicQrDM6r6itu8W0S6ulsNXYE9bnsOEPzzOB3Y4bafeVj7R3W9nqrOAGYAZGZm1llA/OrFrBx+9vIKAFZuLyRr6z4AzuibwoAu1jvJGOMvjemtJMBMYI2q/iFo0hygusfRFOC1oPZr3V5Lo4BCd/fT28AEEengHoie4La1KtVXVb1pbO+awgBw5wUDvIpkjDFH1Jgth9HAd4AvRWSZ2/Zz4GHgBRGZCmwDrnKnvQFcCGwEioHrAVQ1X0QeABa7891ffXC6NTlQVsmpPTvws/MHMLpvCkPS29M+NtJOdDPG+FJjeivNp+7jBQDj65hfgelHWNYTwBMNzeJn//0ih1Xb97Nocz5XnJJOeJgwtn+q17GMMeao7AzpZrKnqJQHX1/DnOU7atqG2YFnY0yIsOLQDN5bvZsbnsqqGX//9nGoQs/kOA9TGWNM/VlxaELZ+cVs3HOAW19wDsFcfnIaU8f0ok9qgsfJjDHm+FhxaCIbdhdx0Z/nU14ZAJxeSDeP6+NxKmOMaRgrDk3k7ldXkhAdwS8uO5Gtew9y/eieXkcyxpgGs+LQBPIOlLFwcz63n9ufK4anex3HGGMarTFXZTWu9buKABjeo81cTNYY08rZlkMD7Sgo4fvPLOVbI7vz2AcbAIgIt1prjGkdrDg00Lz1uSzLLmBZdgEA4WFC1/byaqDOAAAPM0lEQVQxHqcyxpimYcWhAYpKK3jknfUAREWEMSw9iedvGmWXwjDGtBpWHBrgy+2F5B0o40+Th3HxkG6IYIXBGNOqWHGop9KKKh5+cy2LNuezeud+AEb06khYmBUFY0zrY0dQ62n1zv08+ekWIiO+XmUpCdEeJjLGmOZjWw71VFJeBcBt5/bn1J4d2JR7kEjrnWSMaaWsOBxmf2kFEWHCul1FHCyronO7aPaXVnLr88tIjI6gX6cE4qIiGJxmV1g1xrReVhyCqCpD7nunzmkpCdG89L3T6ZYU28KpjDGm5VlxCBJ8+84/XD2UbkmxzN+Qx+a9B7l34kA6tbPzGIwxbYMVB9fiLfl8Z+ZCuraPYfa0UfRIjgdgVO9kj5MZY0zLs+LgmrtiJ6rwv1vOsF5Ixpg2z7rbuMqrAsREhlthMMYYrDgAUF4Z4J1Vu+2qqsYY42rzu5Xum7OKOct3kH+wnGtP6+F1HGOM8YU2VxxW5BTw7MJtnN43hb0HyvjP51vp3zmRCQM7M7ZfqtfxjDHGF3xTHETkfOBPQDjwL1V9uDle57H3N/Lemt3MXpwNOOcv/P3bw+meHNccL2eMMSHJF8VBRMKBvwLnAjnAYhGZo6qrm/J1issrmbchl6sz07nu9F6kJkbTMT6KcLt4njHGHMIXxQEYAWxU1U0AIjIbmAQ0aXGIi4rg/dvGER4mdqazMcYchV+KQxqQHTSeA4xsjhfK6Gi7j4wx5lj80pW1rv06WmsmkWkikiUiWbm5uS0Qyxhj2ia/FIccICNoPB3YcfhMqjpDVTNVNTM11XoWGWNMc/FLcVgM9BORXiISBUwG5nicyRhj2ixfHHNQ1UoR+QHwNk5X1idUdZXHsYwxps3yRXEAUNU3gDe8zmGMMcY/u5WMMcb4iKjW6hQUEkQkF9jajC+RAuQ14/KPl9/ygP8y+S0P+C+T3/KA/zK15jw9VLVevXlCtjg0NxHJUtVMr3NU81se8F8mv+UB/2XyWx7wXybL47DdSsYYY2qx4mCMMaYWKw5HNsPrAIfxWx7wXya/5QH/ZfJbHvBfJsuDHXMwxhhTB9tyMMYYU4sVB2OMMbW02eIgIt8UkaHusN3tpw62jo7Nr+tIRHzzty0il4hIH69z+JkfP0e++QC1FBE5R0Q+Af4InAygHh94EZFLReQBLzMEs3V0bD5dR5eIyG1eZgjmrqPPgJlAV6/zgH2Ojodvrq3UnNxKHAPMAjoBD+LcaS7OnR6uqlUeZAoDrgfuBHqIyDuq+klL5jgsj62jY+fx1TpyXzcCuB34HtBdRD5Q1WUevmfxwHNAInA38GOgBzBfRMJUNeBBJvscHS9VbTMPYFLQ8LeBz3yQ6UycP6IbgY98kMfWUWiuo0txvnB+DCz0QZ5rgoanAy/4IJN9jo7j0ap3K4nID0XknyJyI4Cqvua2hwObgVUiknG0ZTRjphvcpo9VtUhV/wnEi8hUd74WeW9sHR1XHr+to4dF5Gq3aa6qlqrqH4FOIvJNd77IFs5zFYCqPu+2hwMFQLaIRLdElsMy2eeoobyuTs1Yla8DPgfOBz4Gfg70Dpp+Es5NhhI9zHQX0Cdo+gXAKqCDrSNbR0fII8CtwALgSmCNm7FT0DyXAds9zpMaNM/pwNqW+gzZ56hpHq15y2E88BtVfQtnf2wUzqYbAKr6JVCCc9c5rzLFAN8KyvQmzh/XNBFJrP4V1oJ5bB0dO4+n60idb5KzgLtV9SWcL+ahwHlB8/wXWC8iPwHnoKcHec4PmudTIEdELmmuHHWwz1EjtbriELSJ+AUwEUBVs3CqdjcRGe3OJ8A7QExzdx07SqbPgjO57gAeAjYAXVo4j62jY+dpsXV0+PKCMmUBY9xMbwHrgUEickLQ7N8Dfisiu4A0j/IMcOdrB6wFKpoixzEy2ueoiYR8cRCRLu6/YQD6dU+IBUCYiIx1x1cCO4Fu7nyK01PgoDvclJkGiUhM9Xh9M4lIX+BvwKvAKar6Zy/zNPM6Gi1Bfd99sI4alKc51xEQGzwSlGkjkCgiJ7njHwPtcQ62IiLDgH8CL+Oso1ke5Ulw59sPpAOdmyhHDXd/fU3h8sHnqEF5mvlz1CAhWxxE5GQReR94AL5+E4Iq9QacfYrXuF3DcnB+HfQMWsxPVPWJJsw0RETm43RNSw5qr2+mQuAHqnq5qu7wQR5o+nV0ioi8A3yA8wVyvJmaeh01Ng80/ToaJSIvA38VkQlBXzjVXc8XAVXAuSISoaqrcbYOqq/5vxf4vqpe1UTrqLF5ACar6pONzRKU6TQR+Sdwq4i0q/5CDcrU0p+jxuaBJv4cNVbIFQdxPAo8BcxS1RuDpgX3oS4CPsHZt/eIOL02OuD84QCgquVNHO9u4CVVvUxVt7uZwuubSVVzVXWDX/K4mZpkHYlIpIj8A+cKk48Bb+N0LfRkHTVVHjdTk32ORORMnF+0rwDrcPZLd3A/25Xu623EOXjZF6ffPkAZ7p0RVTXb3YftdZ4t1ctR1dKmyONmGgv8BaegdwPuEpEJ7utUurO12N9aU+Rx523q76NGCbni4FbkROALVX0KQET6BBcGcc6AfBbn18E9OG/CJ+54U21i1xCRMHeXxAF1uhIiIueKSBJObw5E5MGWyuS3PK5oYB4wRlVfx/myOdH9pVnlZvpVC2byW55qQ4DFqvoM8B8gEud9rP5sPygiM4ElOEVthIgsAfJxCpyf8rzTDHnA2SJZoKrP4WwVdwa+ISKdqzPRsu+b3/I0DfVBl6ljPYBRQP+g8XY4v2LuwdmX9wrOlsQpQH+cN6Jv0PxhNHEXsToyJeJsOk7E2Y/5tpvpLpxNx2bN5Lc8h2cC5/LwQdOmAn+vnobzJfQsh3Y3bLZ15Ic8R3jfhuF8sd4L7AY+Ap4ArsHpEnr4+5YAJLXWPEfIdBHOl2o3d/wxN8e0oL//Fvkc+SFPcz08D3CMNyEJmIuzSXY3EB807YfAMmAszq/A3+D0PAjuXx3Wwpl+DiwFLnHHxwKvAac1Vya/5TlaJpwv3TB3uK/7ZdOhelpLryOv8hwhU0LQtBE4X8BXuONTcQ4wD23BdeRpnqNlcr9w/4yzZfIy8F/gpzj77GmuTH7L09wPv+9Wisf5xXuLO1x9pB9VfQw4S1XnqWoZzq/jTKAYah1/aJFMwOs4v8o7uuNZwC6gtBkz+S3PETOpI+Ae7N3izjOuelozZvJbnroyjameoKqLgFTcYwg4+7KTgH3NmMlveerKVP2+rcc5V+Ah4EVVvQyn989Z1U9s4c+RV3male+Kg4hcKyLj3CP+23EOGL6A84U2UkS6Vc+rqvuCnjocyMbpNUFTvhH1yJTmvuYKnF8M00UkBefg3Ul8fRCsSTL5LU89M1V3IRT3dau71lYXqsO7/rWqPMeZKRr4FPi++9TxOAW+tCkz+S1PPTKNqM6kquWq+qGqznafOhx4s3o5LbSOWjxPS/JFcXB7IHUVkQ+BKThnMj4uIinqXC+mGHgP50DO2UHPixaRM0UkC+cM0Ye1iXpFNDSTqs7EuSLlfcAVwA2quq215WloJlVVcXoDHcDZrTOqur215WlApvHua5cBc4AEEZkHfAOn2+We1panAZnOPuy5Z7gHwMfgbCm3ujyeaen9WIc/gHD9er/df9zhCJx9eK8cNu+tOL0B2gOxbtvpwKU+yZQY1B7ZWvM0MlOcz9ZRs+RpRKakoM92LEHX32lteRr5vlUfN+oGXNha83j58O6FnRX+fzgHkscBF+Oct1A9XXDOIBwX1JaAc1OMxTgHD7v5KNOips7ktzx+zOS3PE342U5rrXma8H1Lb615/PDwZLeSiIzD6RfdAefU+wdwrrtyloiMgJrN+vtxdodUuwhnv+cy4CRtgjMbmzDT8qbM5Lc8fszktzxNlKn6s729NeZpokzV71tOa8zjG15UJJz9cd8JGv8bzoXCrgOWuG1hOKeXvwD0dNsmAWPbQia/5fFjJr/l8WMmv+XxYya/5fHLw5sXdW6HF83X+/e+BTzkDi8DbnGHM4Hn2mImv+XxYya/5fFjJr/l8WMmv+Xxy8OT3UqqWqyqZfr1fVLPBXLd4etxLmPwOk4vm6XwddfCtpLJb3n8mMlvefyYyW95/JjJb3n8IuLYszQfca7uqDjXIpnjNhfhnNk7GNis7r5OdUt3W8vktzx+zOS3PH7M5Lc8fszktzxe8/o8hwDOhbzygCFudf4lEFDV+dqEB8FCOJPf8vgxk9/y+DGT3/L4MZPf8njL6/1aOCcdBYD5wFSv8/gxk9/y+DGT3/L4MZPf8vgxk9/yePkQd4V4RkTSge8Af1DnTEzP+S2T3/KA/zL5LQ/4L5Pf8oD/Mvktj5c8Lw7GGGP8x+tjDsYYY3zIioMxxpharDgYY4ypxYqDMcaYWqw4GGOMqcWKg2kTRCRJRL7vDncTkZea8bWGiciFzbV8Y1qCFQfTViTh3uZSVXeo6pXN+FrDACsOJqTZeQ6mTRCR2TiXWF4HbABOVNXBInIdcCkQjnP9nN8DUTgnQpXh3NUrX0T6AH8FUoFi4EZVXSsiVwH34ty7vBA4B+eeALHAdpybzm/GuSlMLFACXK+q647jtT/CuTroCKAd8F1VXdQ8a8oYl9enaNvDHi3xAHoCK+sYvg7nyzwR54u/ELjZnfYo8GN3+H2gnzs8EvjAHf4S9y5pQFLQMv8S9NrtgAh3+Bzg5eN87Y+Af7rDY6uz28Mezfnw9KqsxvjEh6paBBSJSCHwP7f9S5wLsCXg3Kv8xaArNUe7/y4AnhSRF4BXjrD89sAsEemHc9XPyPq+dtB8zwGo6jwRaSciSapa0MD/rzHHZMXBGGcXTrVA0HgA528kDChQ1WGHP1FVbxaRkTi3jFwmIrXmwbnt5IeqepmI9MTZEqjva9e81OEvfZT/jzGNZgekTVtRhLP75rip6n5gs3t8AXEMdYf7qOpCVb0H51LPGXW8Vnuc4w/g7EpqiGvc1zsDKFTVwgYux5h6seJg2gRV3QssEJGVwO8asIhvAVNFZDmwCufgNsDvRORLd7nzcG42/yEwUESWicg1wG+Bh0RkAc7B54bYJyKfAn8HpjZwGcbUm/VWMsbn3N5KP1HVLK+zmLbDthyMMcbUYlsOxhhjarEtB2OMMbVYcTDGGFOLFQdjjDG1WHEwxhhTixUHY4wxtVhxMMYYU8v/AxRuUYW8szR0AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df_jpa_timed = df_jpa.set_index('timestamp')\n", "df_jpa_timed['count'] = df_jpa_timed.lines.cumsum()\n", "df_jpa_timed['count'].plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Add some noise" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 2013-05-15 17:36:46\n", "1 2013-05-16 22:05:34\n", "2 2013-05-17 19:27:07\n", "3 2013-05-20 06:28:34\n", "4 2013-05-21 03:46:00\n", "dtype: datetime64[ns]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dates_other = pd.date_range(df_jdbc.timestamp.min(), df_jpa.timestamp.max())\n", "dates_other = pd.to_datetime(dates_other)\n", "dates_other = dates_other[~dates_other.dayofweek.isin([5,6])]\n", "dates_other = pd.Series(dates_other)\n", "dates_other = dates_other.add(times.sample(len(dates_other), replace=True).values)\n", "dates_other.head()" ] }, { "cell_type": "code", "execution_count": 18, "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", "
linestimestampfile
0382013-05-15 17:36:46src/test/java/org/springframework/samples/petc...
1742013-05-15 17:36:46src/main/java/org/springframework/samples/petc...
21432013-05-15 17:36:46src/main/java/org/springframework/samples/petc...
3-542013-05-15 17:36:46src/test/java/org/springframework/samples/petc...
4-462013-05-15 17:36:46src/main/java/org/springframework/samples/petc...
\n", "
" ], "text/plain": [ " lines timestamp \\\n", "0 38 2013-05-15 17:36:46 \n", "1 74 2013-05-15 17:36:46 \n", "2 143 2013-05-15 17:36:46 \n", "3 -54 2013-05-15 17:36:46 \n", "4 -46 2013-05-15 17:36:46 \n", "\n", " file \n", "0 src/test/java/org/springframework/samples/petc... \n", "1 src/main/java/org/springframework/samples/petc... \n", "2 src/main/java/org/springframework/samples/petc... \n", "3 src/test/java/org/springframework/samples/petc... \n", "4 src/main/java/org/springframework/samples/petc... " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_other = pd.DataFrame([int(np.random.normal(5,100)) for i in range(0,40000)], columns=['lines'])\n", "df_other['timestamp'] = dates_other.sample(len(df_other), replace=True).sort_values().reset_index(drop=True)\n", "df_other = df_other.sort_index()\n", "df_other['file'] = log[log['type'] == 'other']['file'].sample(len(df_other), replace=True).values\n", "df_other.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Check dataset" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df_other.lines.hist()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df_other_timed = df_other.set_index('timestamp')\n", "df_other_timed['count'] = df_other_timed.lines.cumsum()\n", "df_other_timed['count'].plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Concatenate all datasets" ] }, { "cell_type": "code", "execution_count": 21, "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", "
additionsdeletionsfiletimestamp
41799560src/main/java/org/springframework/samples/petc...2019-07-19 19:16:44
41798062src/main/java/org/springframework/samples/petc...2019-07-19 19:16:44
417700117src/main/java/org/springframework/samples/petc...2019-07-19 06:09:16
4177700src/main/java/org/springframework/samples/petc...2019-07-19 06:09:16
41776046src/main/java/org/springframework/samples/petc...2019-07-19 06:09:16
\n", "
" ], "text/plain": [ " additions deletions \\\n", "41799 56 0 \n", "41798 0 62 \n", "41770 0 117 \n", "41777 0 0 \n", "41776 0 46 \n", "\n", " file timestamp \n", "41799 src/main/java/org/springframework/samples/petc... 2019-07-19 19:16:44 \n", "41798 src/main/java/org/springframework/samples/petc... 2019-07-19 19:16:44 \n", "41770 src/main/java/org/springframework/samples/petc... 2019-07-19 06:09:16 \n", "41777 src/main/java/org/springframework/samples/petc... 2019-07-19 06:09:16 \n", "41776 src/main/java/org/springframework/samples/petc... 2019-07-19 06:09:16 " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.concat([df_jpa, df_jdbc, df_other], ignore_index=True).sort_values(by='timestamp')\n", "df.loc[df.lines > 0, 'additions'] = df.lines\n", "df.loc[df.lines < 0, 'deletions'] = df.lines * -1\n", "df = df.fillna(0).reset_index(drop=True)\n", "df = df[['additions', 'deletions', 'file', 'timestamp']]\n", "df.loc[(df.deletions > 0) & (df.loc[0].timestamp == df.timestamp),'additions'] = df.deletions\n", "df.loc[df.loc[0].timestamp == df.timestamp,'deletions'] = 0\n", "df['additions'] = df.additions.astype(int)\n", "df['deletions'] = df.deletions.astype(int)\n", "df = df.sort_values(by='timestamp', ascending=False)\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Truncate data until fixed date" ] }, { "cell_type": "code", "execution_count": 22, "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", "
additionsdeletionsfiletimestamp
31486190src/main/java/org/springframework/samples/petc...2017-12-31 19:41:29
31485550src/main/java/org/springframework/samples/petc...2017-12-30 12:48:20
31484290src/main/java/org/springframework/samples/petc...2017-12-30 12:48:20
31461099src/main/java/org/springframework/samples/petc...2017-12-30 00:38:54
31467190src/main/java/org/springframework/samples/petc...2017-12-30 00:38:54
\n", "
" ], "text/plain": [ " additions deletions \\\n", "31486 19 0 \n", "31485 55 0 \n", "31484 29 0 \n", "31461 0 99 \n", "31467 19 0 \n", "\n", " file timestamp \n", "31486 src/main/java/org/springframework/samples/petc... 2017-12-31 19:41:29 \n", "31485 src/main/java/org/springframework/samples/petc... 2017-12-30 12:48:20 \n", "31484 src/main/java/org/springframework/samples/petc... 2017-12-30 12:48:20 \n", "31461 src/main/java/org/springframework/samples/petc... 2017-12-30 00:38:54 \n", "31467 src/main/java/org/springframework/samples/petc... 2017-12-30 00:38:54 " ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = df[df.timestamp < pd.Timestamp('2018-01-01')]\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Export the data" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "df.to_csv(\"datasets/git_log_refactoring.gz\", index=None, compression='gzip')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Check loaded data" ] }, { "cell_type": "code", "execution_count": 24, "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", "
additionsdeletionsfiletimestamp
0190src/main/java/org/springframework/samples/petc...2017-12-31 19:41:29
1550src/main/java/org/springframework/samples/petc...2017-12-30 12:48:20
2290src/main/java/org/springframework/samples/petc...2017-12-30 12:48:20
3099src/main/java/org/springframework/samples/petc...2017-12-30 00:38:54
4190src/main/java/org/springframework/samples/petc...2017-12-30 00:38:54
\n", "
" ], "text/plain": [ " additions deletions file \\\n", "0 19 0 src/main/java/org/springframework/samples/petc... \n", "1 55 0 src/main/java/org/springframework/samples/petc... \n", "2 29 0 src/main/java/org/springframework/samples/petc... \n", "3 0 99 src/main/java/org/springframework/samples/petc... \n", "4 19 0 src/main/java/org/springframework/samples/petc... \n", "\n", " timestamp \n", "0 2017-12-31 19:41:29 \n", "1 2017-12-30 12:48:20 \n", "2 2017-12-30 12:48:20 \n", "3 2017-12-30 00:38:54 \n", "4 2017-12-30 00:38:54 " ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_loaded = pd.read_csv(\"datasets/git_log_refactoring.gz\")\n", "df_loaded.head()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 31487 entries, 0 to 31486\n", "Data columns (total 4 columns):\n", "additions 31487 non-null int64\n", "deletions 31487 non-null int64\n", "file 31487 non-null object\n", "timestamp 31487 non-null object\n", "dtypes: int64(2), object(2)\n", "memory usage: 984.0+ KB\n" ] } ], "source": [ "df_loaded.info()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.3" } }, "nbformat": 4, "nbformat_minor": 2 }