{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Benford's Law" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nRGQptT45PuusswpartxXAQ3KXeEjqRdwEDALuAM4Ic02Dri9nHGY2aYtd7HIkCFD+PznP8/MmTNL\nPiTj6NGjufrqq1teX3HFFey222707duXD33oQ0yfPp3jjz+exsZGxo4dS9++fbngggsAeOyxx9h/\n//3p378/e+21Fw8//HDLel555RXq6+vp168fY8aMYfHixeXeXe/JDUpQjgfwYeBpYDowA/hhmj4A\nuB94HpgKbNnO8lGQUnVCaGaFK2eHoEUYMWJEPPDAAxER0djYGLvvvnv85Cc/ifr6+hg+fHjMmjUr\n1q5dG2vWrInDDz88vvWtb8WqVavi9ddfj49//ONx+eWXR0TEpZdeGqNGjYp58+bFkiVLYvTo0dGt\nW7dYu3ZtRETU19fHVVddFRERN910U2y//fbx1FNPRUTESy+9FI2NjS3xPPjggy3xzZs3LwYOHBj3\n3HNPRETcf//9MXDgwFi8eHFERHziE5+IU089Nd55552YNm1abLHFFnHcccet77cSERHp2Nn5MbqQ\nmSr1cAIwq2JVlAC22GKL6N+/f4wYMSJOPvnkWL16ddTX18fEiRNb5lu0aFH07NkzVq9e3TLthhtu\niAMPPDAiIg488MC47LLLWt6bOnVquwlgzJgxcckll7QbTy4hRUScf/75cfzxx79vnjFjxsTkyZOj\nsbExNttss1i5cmXLe8ccc0yXJQAPCWlmG73bb7+d0aNHrzO9XEMyzp07lx133LGg2ObMmcNNN93E\nlClTWrb77rvvcuCBBzJ//nz69+/fMoBNbruvvvpqQeveUE4AZrbRy05619XekIxtNQYXMyTj0KFD\neemllzrdZm7e448/nssuu2ydeRsbG1myZAmrVq1qSQKNjY0to46Vm/sCMrOaUMohGf/1X/+VCy64\ngKeffhqAl156qSV5bLPNNsyePbtl3mOPPZYpU6YwdepUmpubWb16NQ8//DDz589n2LBh7LPPPkyc\nOJE1a9bwyCOPtJQUukLVJwCp44eZVUAVjQnZ3qWdpR6SMX99X/7yl/nhD3/IMcccQ9++fTniiCNo\namoC4IwzzuCcc85hwIABXHTRRWy//fbcfvvtnHfeeWy11VYMHz6cCy64oOUGs+uvv57HHnuMgQMH\ncs455zBu3LiCP/uGqvohITu4RwxIlwv7PgAzsxZV0xeQmZlVJycAM7Ma5QRgZlajnADMzGqUE4CZ\n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\nNer/A5BS/Rah2PFLAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Predicted 1st Digit Ratios:\n", "\t [30.1, 17.6, 12.5, 9.7, 7.9, 6.7, 5.8, 5.1, 4.5]\n", "Observed 1st Digit Ratios:\n", "\t [29.0, 17.4, 13.5, 10.7, 7.7, 6.7, 5.8, 5.0, 4.1] \n", "\n" ] } ], "source": [ "\n", "\"\"\"\n", "Exploring Benford's Law by applying it to the files sizes\n", "on a local hard drive\n", "\n", "Note: this is a 'hacky' version that works but is NOT very Pythonic\n", "\"\"\" \n", "\n", "\n", "import os\n", "\n", "# The significand ranges from 1 thru 9 inclusive (0 is excluded)\n", "\n", "FIRST_DIGIT_PERCENTAGES = [\n", " 30.1, ## '1'\n", " 17.6,\n", " 12.5,\n", " 9.7,\n", " 7.9,\n", " 6.7,\n", " 5.8,\n", " 5.1,\n", " 4.5 ## '9'\n", " ]\n", "\n", "# 2nd and subsequent digits range from 0 thru 9 inclusive \n", "# (0 is included)\n", "\n", "SECOND_DIGIT_PERCENTAGES = [\n", " 12.0, ## '0'\n", " 11.4,\n", " 10.9,\n", " 10.4,\n", " 10.0,\n", " 9.7,\n", " 9.3,\n", " 9.0,\n", " 8.8,\n", " 8.5 ## '9'\n", " ]\n", "\n", "\n", "class BenfordDigit(object):\n", " '''\n", " Class to test whether given number digits adhere to Benford's Law\n", " Class Attributes:\n", " __experiment_name: unique label for each Benford test\n", " __digit_position: int> significand = 1, 2nd digit, \n", " counting from LHS = 2 ...\n", " __digit_count: tally of numbers encountered in given\n", " digit position\n", " __current_number: most recent number reported in digit\n", " position, used to\n", " increment the corrsponding entry in\n", " digit_count tally\n", " __number_count: sum of all numbers found in a given\n", " digit_position\n", " __digit_percent: list of percentages corresponding to\n", " relative frequencies \n", " for each number for a given \n", " digit_position (1-9 for significand,\n", " or 0-9 otherwise)\n", " '''\n", " \n", " def __init__(self, experiment_name, digit_position):\n", " self.__experiment_name = experiment_name\n", " self.__digit_position = digit_position\n", " \n", " self.__digit_count = {\n", " '0': 0,\n", " '1': 0,\n", " '2': 0,\n", " '3': 0,\n", " '4': 0,\n", " '5': 0,\n", " '6': 0,\n", " '7': 0,\n", " '8': 0,\n", " '9': 0\n", " }\n", " self.__current_number = '1'\n", " self.__number_count = 0\n", " \n", " self.__digit_percent = []\n", " \n", " def __str__(self):\n", " return ('Experiment: %s Digit position: %i' % \\\n", " (self.__experiment_name,self.__digit_position))\n", " \n", " def __repr__(self):\n", " return str(self)\n", " \n", " @property\n", " def experiment_name(self):\n", " return (self.__experiment_name)\n", " \n", " @property\n", " def digit_position(self):\n", " return (self.__digit_position)\n", " \n", " @property\n", " def digit_count(self):\n", " # return [(k,v) for k,v in \n", " # sorted([(k,v) for k,v in self.__digit_count.items()])]\n", " return sorted([(k,v) for k,v in self.__digit_count.items()]) \n", " \n", " @property\n", " def current_number(self):\n", " return self.__current_number\n", " \n", " @current_number.setter\n", " def current_number(self, number):\n", " self.__current_number = number\n", " self.__digit_count[self.__current_number] += 1 \n", " \n", " @property\n", " def number_count (self):\n", " if self.__digit_position == 1:\n", " # return all numbers excl. 0's\n", " return sum(value for key, \n", " value in self.__digit_count.items() if key != '0')\n", " else: \n", " return sum(value for key,\n", " value in self.__digit_count.items()) ## Simplify!\n", " @property\n", " def digit_percent (self):\n", " self.__digit_percent = [] \n", " if self.__digit_position == 1:\n", " # return ratio of all numbers excl. 0's\n", " for i in range(1,10):\n", " d1 = self.__digit_count[str(i)] / self.number_count \n", " self.__digit_percent.append(round(100.0*d1, 1))\n", " return self.__digit_percent\n", " else:\n", " # return ratio of all numbers incl. 0's\n", " for i in range(0,10):\n", " d2 = self.__digit_count[str(i)] / self.number_count\n", " self.__digit_percent.append(round(100.0*d2, 1))\n", " return self.__digit_percent\n", " \n", "### Significand\n", "benford1 = BenfordDigit('Local P: Drive Files - Significand', 1)\n", " \n", "### 2nd Digit\n", "benford2 = BenfordDigit('Local P: Drive Files - 2nd Digit', 2)\n", "\n", "for root, dirs, files in os.walk('P:/'):\n", " for name in files:\n", " filename = os.path.join(root, name)\n", " filesize = os.path.getsize(filename)\n", " \n", " digit1Strng = (str(filesize))[0]\n", " benford1.current_number = digit1Strng\n", " \n", " if filesize > 9:\n", " benford2.current_number = str(filesize)[1]\n", "\n", "# Plot predicted 1st digits frequencies versus actual\n", "\n", "# Show plots in notebook (rather than in separate window)\n", "%matplotlib inline\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "X = np.arange(len(benford1.digit_percent))\n", "plt.bar(X + 0.0, benford1.digit_percent, facecolor='blue',\n", " edgecolor='white', width=0.5, label=\"Measured\")\n", "plt.bar(X + 0.25, FIRST_DIGIT_PERCENTAGES, facecolor='red',\n", " edgecolor='white', width=0.5, label=\"Predicted\")\n", "\n", "plt.title('1st digit frequencies for P-Drive file sizes')\n", "plt.xlabel('First Digit: 1-9')\n", "plt.ylabel('Percentage')\n", "plt.legend(loc='upper right', frameon=False)\n", "\n", "plt.show()\n", "\n", "print ('\\nPredicted 1st Digit Ratios:\\n\\t',\n", " FIRST_DIGIT_PERCENTAGES) \n", "print ('Observed 1st Digit Ratios:\\n\\t', \n", " benford1.digit_percent, '\\n')" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Predicted 2nd Digit Ratios:\n", "\t [12.0, 11.4, 10.9, 10.4, 10.0, 9.7, 9.3, 9.0, 8.8, 8.5]\n", "Observed 2nd Digit Ratios:\n", "\t [12.1, 10.3, 10.7, 10.3, 10.6, 9.8, 10.0, 8.8, 8.8, 8.5]\n" ] } ], "source": [ "# 2nd digit frequencies\n", "\n", "X = np.arange(len(benford2.digit_percent))\n", "plt.bar(X + 0.0, benford2.digit_percent, facecolor='blue',\n", " edgecolor='white', width=0.5, label=\"Measured\")\n", "plt.bar(X + 0.25, SECOND_DIGIT_PERCENTAGES, facecolor='red',\n", " edgecolor='white', width=0.5, label=\"Predicted\")\n", "\n", "plt.title('2nd digit frequencies for P-Drive file sizes')\n", "plt.xlabel('Second Digit: 0-9')\n", "plt.ylabel('Percentage')\n", "plt.legend(loc='upper right', frameon=False)\n", "\n", "plt.show()\n", "\n", "print ('\\nPredicted 2nd Digit Ratios:\\n\\t', \n", " SECOND_DIGIT_PERCENTAGES) \n", "print ('Observed 2nd Digit Ratios:\\n\\t',\n", " benford2.digit_percent)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "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": "python3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 }