Created
March 26, 2013 10:39
-
-
Save dabeaz/5244469 to your computer and use it in GitHub Desktop.
IPython Notebook Example for my Usenix ;Login: Article
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "FileUsage" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# IPython Demo For Usenix ;Login:\n", | |
"\n", | |
"This session illustrates some simple features of the IPython notebook by performing some simple operations on files and directories." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Changing directories and directory listings\n", | |
"\n", | |
"You can use common shell commands such as `cd` and `ls` to move around on the file system" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"cd ~" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"/Users/beazley\n" | |
] | |
} | |
], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"ls" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\u001b[34mDesktop\u001b[m\u001b[m/ \u001b[34mDownloads\u001b[m\u001b[m/ \u001b[34mLibrary\u001b[m\u001b[m/ \u001b[34mMusic\u001b[m\u001b[m/ \u001b[30m\u001b[43mProjects\u001b[m\u001b[m/ \u001b[34mSites\u001b[m\u001b[m/ \u001b[34mTools\u001b[m\u001b[m/\r\n", | |
"\u001b[34mDocuments\u001b[m\u001b[m/ \u001b[34mJunk\u001b[m\u001b[m/ \u001b[34mMovies\u001b[m\u001b[m/ \u001b[34mPictures\u001b[m\u001b[m/ \u001b[34mPublic\u001b[m\u001b[m/ \u001b[34mTeaching\u001b[m\u001b[m/ usage.py\r\n" | |
] | |
} | |
], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"cd Pictures" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"/Users/beazley/Pictures\n" | |
] | |
} | |
], | |
"prompt_number": 3 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Determine Disk Usage of Different File Types\n", | |
"\n", | |
"This code determines the disk usage of different types of files in the current working directory" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"import collections\n", | |
"import os" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 4 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"size_by_type = collections.Counter()\n", | |
"for path, dirs, files in os.walk('.'):\n", | |
" for filename in files:\n", | |
" fullname = os.path.join(path, filename)\n", | |
" if os.path.exists(fullname):\n", | |
" _, ext = os.path.splitext(filename)\n", | |
" sz = os.path.getsize(fullname)\n", | |
" size_by_type[ext.upper()] += sz\n", | |
" \n", | |
"for ext, sz in size_by_type.most_common(5):\n", | |
" print ext, sz\n", | |
" " | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
".JPG 50389086278\n", | |
".MOV 38328837384\n", | |
".AVI 9740373284\n", | |
".APDB 733642752\n", | |
".DATA 518045719\n" | |
] | |
} | |
], | |
"prompt_number": 5 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Making a Pie Chart\n", | |
"\n", | |
"This code takes the file usage data and turns it into a pie chart. To do this, we have to make two lists containing the percentages and associated labels. Matplotlib is used to make the chart." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"%pylab inline" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n", | |
"Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n", | |
"For more information, type 'help(pylab)'.\n" | |
] | |
} | |
], | |
"prompt_number": 6 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"total_size = sum(size_by_type.values())\n", | |
"labels, fracs = zip(*size_by_type.most_common(5))\n", | |
"pcts = [float(f)/total_size*100 for f in fracs]\n", | |
"pcts.append(100 - sum(pcts))\n", | |
"labels = labels + ('other',)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 28 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"p = pie(pcts, labels=labels)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"png": "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\n" | |
} | |
], | |
"prompt_number": 29 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [] | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment