Skip to content

Instantly share code, notes, and snippets.

@semperos
Created February 5, 2019 20:46
Show Gist options
  • Save semperos/9edc2befabe67b4ad60c173eaa0dcf71 to your computer and use it in GitHub Desktop.
Save semperos/9edc2befabe67b4ad60c173eaa0dcf71 to your computer and use it in GitHub Desktop.
Git Repo Analysis
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Git Repo Analysis\n",
"\n",
"Charting times of commits."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"(ns gra\n",
" (:require [clojupyter.misc.helper :as helper]\n",
" [clojupyter.misc.display :as display]\n",
" [clojure.java.io :as io]\n",
" [clojure.repl :as repl])\n",
" (:import [java.time DayOfWeek OffsetDateTime]))"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"#'gra/dates"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(helper/add-dependencies '[incanter \"1.9.3\"])\n",
"\n",
"(use '(incanter core stats charts io))\n",
"\n",
"(def dates-file \"/Users/daniel/tmp/dates.txt\")\n",
"\n",
"(with-open [rdr (io/reader (io/as-file dates-file))]\n",
" (def dates (mapv (fn [s] (OffsetDateTime/parse s)) (line-seq rdr))))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"#object[java.time.OffsetDateTime 0x15673ab \"2019-02-05T02:14:27-04:00\"]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(first dates)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"#object[java.time.OffsetDateTime 0x609f4822 \"2014-11-25T14:43:44-04:00\"]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(last dates)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `dates.txt` file was generated like this, which makes sense given the above:\n",
"\n",
"```bash\n",
"git log --pretty=format:\"%aI\" > ~/tmp/dates.txt\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's focus on a limited period of time. We'll pick an earliest date and we'll exclude the weekend."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-------------------------\n",
"clojure.core/take-while\n",
"([pred] [pred coll])\n",
" Returns a lazy sequence of successive items from coll while\n",
" (pred item) returns logical true. pred must be free of side-effects.\n",
" Returns a transducer when no collection is provided.\n"
]
}
],
"source": [
"(repl/doc take-while)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"#object[java.time.OffsetDateTime 0x306ea5c4 \"2019-01-15T14:54:32.450-05:00\"]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"@(def earliest \"Last N days\" (.minusDays (OffsetDateTime/now) 21))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"#{#object[java.time.DayOfWeek 0x21afccaf \"SATURDAY\"] #object[java.time.DayOfWeek 0x408ccfda \"SUNDAY\"]}"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"@(def weekend #{DayOfWeek/SATURDAY DayOfWeek/SUNDAY})"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[#object[java.time.OffsetDateTime 0x15673ab \"2019-02-05T02:14:27-04:00\"] #object[java.time.OffsetDateTime 0x32b1e54 \"2019-02-04T23:34:40-04:00\"] #object[java.time.OffsetDateTime 0x48e70c3e \"2019-02-04T21:23:51-04:00\"] #object[java.time.OffsetDateTime 0x636bdd55 \"2019-02-04T20:37:54-04:00\"] #object[java.time.OffsetDateTime 0x4ab0f79 \"2019-02-04T20:12:35-04:00\"] #object[java.time.OffsetDateTime 0x5f297806 \"2019-02-04T19:39:20-04:00\"] #object[java.time.OffsetDateTime 0x2fdf1921 \"2019-02-04T19:38:19-04:00\"] #object[java.time.OffsetDateTime 0x12e3f8fa \"2019-02-04T00:23:07-04:00\"] #object[java.time.OffsetDateTime 0x4eefed18 \"2019-02-04T00:19:57-04:00\"] #object[java.time.OffsetDateTime 0x5a92558b \"2019-01-30T09:28:51-04:00\"] #object[java.time.OffsetDateTime 0xdd359e9 \"2019-01-24T23:49:52-04:00\"] #object[java.time.OffsetDateTime 0xfa5481 \"2019-01-24T23:49:34-04:00\"] #object[java.time.OffsetDateTime 0x31ccfeab \"2019-01-24T00:19:07-04:00\"] #object[java.time.OffsetDateTime 0x793adb14 \"2019-01-24T00:16:16-04:00\"] #object[java.time.OffsetDateTime 0x6eb1d9cb \"2019-01-22T20:22:25-04:00\"] #object[java.time.OffsetDateTime 0x3c3dc6c0 \"2019-01-22T20:15:37-04:00\"] #object[java.time.OffsetDateTime 0x6ad25e4a \"2019-01-22T00:27:53-04:00\"] #object[java.time.OffsetDateTime 0x459fda7f \"2019-01-22T00:23:43-04:00\"] #object[java.time.OffsetDateTime 0x25802c86 \"2019-01-21T18:20:59-04:00\"] #object[java.time.OffsetDateTime 0x7759e530 \"2019-01-21T18:20:24-04:00\"] #object[java.time.OffsetDateTime 0xf01d59f \"2019-01-21T18:19:54-04:00\"]]"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def weekend? (comp weekend (memfn getDayOfWeek)))\n",
"\n",
"@(def recent-work-dates\n",
" (into [] (comp (take-while #(.isAfter % earliest))\n",
" (remove weekend?))\n",
" dates))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{2 1, 23 3, 21 1, 20 4, 19 2, 0 6, 9 1, 18 3}"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def work-hours (map (partial + 9) (range 9)))\n",
"\n",
"@(def freqs (frequencies (map #(.getHour %) recent-work-dates)))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-------------------------\n",
"incanter.charts/histogram\n",
"([x & options])\n",
"Macro\n",
" \n",
" Returns a JFreeChart object representing the histogram of the given data.\n",
" Use the 'view' function to display the chart, or the 'save' function\n",
" to write it to a file.\n",
"\n",
" Options:\n",
" :nbins (default 10) number of bins\n",
" :density (default false) if false, plots frequency, otherwise density\n",
" :title (default 'Histogram') main title\n",
" :x-label (default x expression)\n",
" :y-label (default 'Frequency')\n",
" :legend (default false) prints legend\n",
" :series-label (default x expression)\n",
"\n",
"\n",
" See also:\n",
" view, save, add-histogram\n",
"\n",
" Examples:\n",
"\n",
" (use '(incanter core charts stats))\n",
" (view (histogram (sample-normal 1000)))\n",
"\n",
" # plot a density histogram\n",
" (def hist (histogram (sample-normal 1000) :density true))\n",
" (view hist)\n",
"\n",
" # add a normal density line to the plot\n",
" (def x (range -4 4 0.01))\n",
" (add-lines hist x (pdf-normal x))\n",
"\n",
" # plot some gamma data\n",
" (def gam-hist (histogram (sample-gamma 1000) :density true :nbins 30))\n",
" (view gam-hist)\n",
" (def x (range 0 8 0.01))\n",
" (add-lines gam-hist x (pdf-gamma x))\n",
"\n",
" (use 'incanter.datasets)\n",
" (def iris (get-dataset :iris))\n",
" (view (histogram :Sepal.Width :data iris))\n",
"\n",
" (with-data (get-dataset :iris)\n",
" (view (histogram :Petal.Length)))\n",
"\n",
"\n",
"\n",
" References:\n",
" http://www.jfree.org/jfreechart/api/javadoc/\n",
" http://www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/JFreeChart.html\n",
"\n",
" \n"
]
}
],
"source": [
"(repl/doc histogram)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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"
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(let [data (mapv #(.getHour %) (remove weekend? dates))\n",
" hist (histogram data\n",
" :nbins 24\n",
" :title (format \"Commits by Hour of Day for %d Days\" (count data))\n",
" :x-label \"Hour of Day\"\n",
" :y-label \"Number of Commits\")]\n",
" (.createBufferedImage hist 600 800))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Clojure",
"language": "clojure",
"name": "clojure"
},
"language_info": {
"file_extension": ".clj",
"mimetype": "text/x-clojure",
"name": "clojure",
"version": "1.10.0-RC2"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": false,
"sideBar": false,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": false,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment