{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# CHAPTER 14 Data Analysis Examples(数据分析实例)\n", "\n", "# 14.1 USA.gov Data from Bitly(USA.gov数据集)\n", "\n", "2011年,短链接服务(URL shortening service)商[Bitly](https://bitly.com/)和美国政府网站[USA.gov](https://www.usa.gov/)合作,提供了一份从用户中收集来的匿名数据,这些用户使用了结尾为.gov或.mil的短链接。在2011年,这些数据的动态信息每小时都会保存一次,并可供下载。不过在2017年,这项服务被停掉了。\n", "\n", "数据是每小时更新一次,文件中的每一行都用JOSN(JavaScript Object Notation)格式保存。我们先读取几行看一下数据是什么样的:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "path = '../datasets/bitly_usagov/example.txt'" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'{ \"a\": \"Mozilla\\\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\\\/535.11 (KHTML, like Gecko) Chrome\\\\/17.0.963.78 Safari\\\\/535.11\", \"c\": \"US\", \"nk\": 1, \"tz\": \"America\\\\/New_York\", \"gr\": \"MA\", \"g\": \"A6qOVH\", \"h\": \"wfLQtf\", \"l\": \"orofrog\", \"al\": \"en-US,en;q=0.8\", \"hh\": \"1.usa.gov\", \"r\": \"http:\\\\/\\\\/www.facebook.com\\\\/l\\\\/7AQEFzjSi\\\\/1.usa.gov\\\\/wfLQtf\", \"u\": \"http:\\\\/\\\\/www.ncbi.nlm.nih.gov\\\\/pubmed\\\\/22415991\", \"t\": 1331923247, \"hc\": 1331822918, \"cy\": \"Danvers\", \"ll\": [ 42.576698, -70.954903 ] }\\n'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "open(path).readline()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "python有很多内置的模块能把JSON字符串转换成Python字典对象。这里我们用JSON模块:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import json\n", "path = '../datasets/bitly_usagov/example.txt'\n", "records = [json.loads(line) for line in open(path)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "上面这种方法叫做列表推导式, list comprehension, 在一组字符串上执行一条相同操作(比如这里的json.loads)。结果对象records现在是一个由dict组成的list:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'a': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.78 Safari/535.11',\n", " 'al': 'en-US,en;q=0.8',\n", " 'c': 'US',\n", " 'cy': 'Danvers',\n", " 'g': 'A6qOVH',\n", " 'gr': 'MA',\n", " 'h': 'wfLQtf',\n", " 'hc': 1331822918,\n", " 'hh': '1.usa.gov',\n", " 'l': 'orofrog',\n", " 'll': [42.576698, -70.954903],\n", " 'nk': 1,\n", " 'r': 'http://www.facebook.com/l/7AQEFzjSi/1.usa.gov/wfLQtf',\n", " 't': 1331923247,\n", " 'tz': 'America/New_York',\n", " 'u': 'http://www.ncbi.nlm.nih.gov/pubmed/22415991'}" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "records[0]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'America/New_York'" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "records[0]['tz']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1 Counting Time Zones in Pure Python(用纯python代码对时区进行计数)\n", "\n", "我们想知道数据集中出现在哪个时区(即tz字段)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "ename": "KeyError", "evalue": "'tz'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtime_zones\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mrec\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'tz'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mrec\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrecords\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtime_zones\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mrec\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'tz'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mrec\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrecords\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mKeyError\u001b[0m: 'tz'" ] } ], "source": [ "time_zones = [rec['tz'] for rec in records]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "看来并不是所有的记录都有时区字段。那么只需要在推导式的末尾加一个if 'tz' in rec判断即可" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "time_zones = [rec['tz'] for rec in records if 'tz' in rec]" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "['America/New_York',\n", " 'America/Denver',\n", " 'America/New_York',\n", " 'America/Sao_Paulo',\n", " 'America/New_York',\n", " 'America/New_York',\n", " 'Europe/Warsaw',\n", " '',\n", " '',\n", " '']" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "time_zones[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "在这10条时区信息中,可以看到有些是空字符串,现在先留着。\n", "\n", "为了对时区进行计数,我们用两种方法:一个用纯python代码,比较麻烦。另一个用pandas,比较简单。 这里我们先介绍使用纯python代码的方法:\n", "\n", "遍历时区的过程中将计数值保存在字典中:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def get_counts(sequence):\n", " counts = {}\n", " for x in sequence:\n", " if x in counts:\n", " counts[x] += 1\n", " else:\n", " counts[x] = 1\n", " return counts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用python标准库的话,能把代码写得更简洁一些:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from collections import defaultdict\n", "\n", "def get_counts2(sequence):\n", " counts = defaultdict(int) # 所有的值均会被初始化为0\n", " for x in sequence:\n", " counts[x] += 1\n", " return counts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(译者:下面关于defaultdict的用法是我从Stack Overflow上找到的,英文比较多,简单的说就是通常如果一个字典里不存在一个key,调用的时候会报错,但是如果我们设置了了default,就不会被报错,而是会新建一个key,对应的value就是我们设置的int,这里int代表0)\n", "\n", "> **defaultdict** means that if a key is not found in the dictionary, then instead of a KeyError being thrown, a new entry is created. The type of this new entry is given by the argument of defaultdict.\n", "\n", " somedict = {}\n", " print(somedict[3]) # KeyError\n", "\n", " someddict = defaultdict(int)\n", " print(someddict[3]) # print int(), thus 0\n", "\n", "\n", ">Usually, a Python dictionary throws a KeyError if you try to get an item with a key that is not currently in the dictionary. The defaultdict in contrast will simply create any items that you try to access (provided of course they do not exist yet). To create such a \"default\" item, it calls the function object that you pass in the constructor (more precisely, it's an arbitrary \"callable\" object, which includes function and type objects). For the first example, default items are created using `int()`, which will return the integer object 0. For the second example, default items are created using `list()`, which returns a new empty list object.\n", "\n" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n" ] } ], "source": [ "someddict = defaultdict(int)\n", "print(someddict[3])" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "someddict[3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "上面用函数的方式写出来是为了有更高的可用性。要对它进行时区处理,只需要将time_zones传入即可:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "counts = get_counts(time_zones)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1251" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "counts['America/New_York']" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3440" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(time_zones)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "如何想要得到前10位的时区及其计数值,我们需要一些有关字典的处理技巧:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def top_counts(count_dict, n=10):\n", " value_key_pairs = [(count, tz) for tz, count in count_dict.items()]\n", " value_key_pairs.sort()\n", " return value_key_pairs[-n:]" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[(33, 'America/Sao_Paulo'),\n", " (35, 'Europe/Madrid'),\n", " (36, 'Pacific/Honolulu'),\n", " (37, 'Asia/Tokyo'),\n", " (74, 'Europe/London'),\n", " (191, 'America/Denver'),\n", " (382, 'America/Los_Angeles'),\n", " (400, 'America/Chicago'),\n", " (521, ''),\n", " (1251, 'America/New_York')]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "top_counts(counts)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "如果用python标准库里的collections.Counter类,能让这个任务变得更简单" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from collections import Counter" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true }, "outputs": [], "source": [ "counts = Counter(time_zones)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[('America/New_York', 1251),\n", " ('', 521),\n", " ('America/Chicago', 400),\n", " ('America/Los_Angeles', 382),\n", " ('America/Denver', 191),\n", " ('Europe/London', 74),\n", " ('Asia/Tokyo', 37),\n", " ('Pacific/Honolulu', 36),\n", " ('Europe/Madrid', 35),\n", " ('America/Sao_Paulo', 33)]" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "counts.most_common(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2 Counting Time Zones with pandas(用pandas对时区进行计数)\n", "\n", "从一组原始记录中创建DataFrame是很简单的,直接把records传递给pandas.DataFrame即可:\n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "frame = pd.DataFrame(records)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 3560 entries, 0 to 3559\n", "Data columns (total 18 columns):\n", "_heartbeat_ 120 non-null float64\n", "a 3440 non-null object\n", "al 3094 non-null object\n", "c 2919 non-null object\n", "cy 2919 non-null object\n", "g 3440 non-null object\n", "gr 2919 non-null object\n", "h 3440 non-null object\n", "hc 3440 non-null float64\n", "hh 3440 non-null object\n", "kw 93 non-null object\n", "l 3440 non-null object\n", "ll 2919 non-null object\n", "nk 3440 non-null float64\n", "r 3440 non-null object\n", "t 3440 non-null float64\n", "tz 3440 non-null object\n", "u 3440 non-null object\n", "dtypes: float64(4), object(14)\n", "memory usage: 500.7+ KB\n" ] } ], "source": [ "frame.info()" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0 America/New_York\n", "1 America/Denver\n", "2 America/New_York\n", "3 America/Sao_Paulo\n", "4 America/New_York\n", "5 America/New_York\n", "6 Europe/Warsaw\n", "7 \n", "8 \n", "9 \n", "Name: tz, dtype: object" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frame['tz'][:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "这里frame的输出形式是summary view, 主要用于较大的dataframe对象。frame['tz']所返回的Series对象有一个value_counts方法,该方法可以让我们得到想要的信息:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "tz_counts = frame['tz'].value_counts()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "America/New_York 1251\n", " 521\n", "America/Chicago 400\n", "America/Los_Angeles 382\n", "America/Denver 191\n", "Europe/London 74\n", "Asia/Tokyo 37\n", "Pacific/Honolulu 36\n", "Europe/Madrid 35\n", "America/Sao_Paulo 33\n", "Name: tz, dtype: int64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tz_counts[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "我们能利用matplotlib为这段数据生成一张图片。这里我们先给记录中未知或缺失的时区填上一个替代值。fillna函数可以替代缺失值(NA),而未知值(空字符串)则可以通过布尔型数组索引,加以替换:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": true }, "outputs": [], "source": [ "clean_tz = frame['tz'].fillna('Missing')" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": true }, "outputs": [], "source": [ "clean_tz[clean_tz == ''] = 'Unknown'" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": true }, "outputs": [], "source": [ "tz_counts = clean_tz.value_counts()" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "America/New_York 1251\n", "Unknown 521\n", "America/Chicago 400\n", "America/Los_Angeles 382\n", "America/Denver 191\n", "Missing 120\n", "Europe/London 74\n", "Asia/Tokyo 37\n", "Pacific/Honolulu 36\n", "Europe/Madrid 35\n", "Name: tz, dtype: int64" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tz_counts[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "利用counts对象的plot方法即可得到一张水平条形图:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "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": [ "%matplotlib inline\n", "tz_counts[:10].plot(kind='barh', rot=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "当然,我们也可以使用之前介绍的seaborn来画一个水平条形图(horizontal bar plot):" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import seaborn as sns" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "subset = tz_counts[:10]\n", "sns.barplot(y=subset.index, x=subset.values)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "我们还可以对这种数据进行更多的处理。比如a字段含有执行URL操作的浏览器、设备、应用程序的相关信息:" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'GoogleMaps/RochesterNY'" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frame['a'][1]" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2'" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frame['a'][50]" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; LG-P925/V10e Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frame['a'][51]" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi...\n", "1 GoogleMaps/RochesterNY\n", "2 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ...\n", "3 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8)...\n", "4 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi...\n", "Name: a, dtype: object" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frame['a'][:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "将这些USER_AGENT字符串中的所有信息都解析出来是一件挺郁闷的工作。不过只要掌握了Python内置的字符串函数和正则表达式,就方便了。比如,我们可以把字符串的第一节(与浏览器大致对应)分离出来得到另一份用户行为摘要:" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": true }, "outputs": [], "source": [ "results = Series([x.split()[0] for x in frame.a.dropna()])" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0 Mozilla/5.0\n", "1 GoogleMaps/RochesterNY\n", "2 Mozilla/4.0\n", "3 Mozilla/5.0\n", "4 Mozilla/5.0\n", "dtype: object" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results[:5]" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Mozilla/5.0 2594\n", "Mozilla/4.0 601\n", "GoogleMaps/RochesterNY 121\n", "Opera/9.80 34\n", "TEST_INTERNET_AGENT 24\n", "GoogleProducer 21\n", "Mozilla/6.0 5\n", "BlackBerry8520/5.0.0.681 4\n", "dtype: int64" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results.value_counts()[:8]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "现在,假设我们想按Windows和非Windows用户对时区统计信息进行分解。为了简单期间,我们假定只要agent字符串中含有“windows”就认为该用户是windows用户。由于有的agent缺失,所以先将他们从数据中移除:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
_heartbeat_aalccyggrhhchhkwlllnkrttzu
0NaNMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi...en-US,en;q=0.8USDanversA6qOVHMAwfLQtf1.331823e+091.usa.govNaNorofrog[42.576698, -70.954903]1.0http://www.facebook.com/l/7AQEFzjSi/1.usa.gov/...1.331923e+09America/New_Yorkhttp://www.ncbi.nlm.nih.gov/pubmed/22415991
1NaNGoogleMaps/RochesterNYNaNUSProvomwszkSUTmwszkS1.308262e+09j.mpNaNbitly[40.218102, -111.613297]0.0http://www.AwareMap.com/1.331923e+09America/Denverhttp://www.monroecounty.gov/etc/911/rss.php
2NaNMozilla/4.0 (compatible; MSIE 8.0; Windows NT ...en-USUSWashingtonxxr3QbDCxxr3Qb1.331920e+091.usa.govNaNbitly[38.9007, -77.043098]1.0http://t.co/03elZC4Q1.331923e+09America/New_Yorkhttp://boxer.senate.gov/en/press/releases/0316...
3NaNMozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8)...pt-brBRBrazzCaLwp27zUtuOu1.331923e+091.usa.govNaNalelex88[-23.549999, -46.616699]0.0direct1.331923e+09America/Sao_Paulohttp://apod.nasa.gov/apod/ap120312.html
4NaNMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi...en-US,en;q=0.8USShrewsbury9b6kNlMA9b6kNl1.273672e+09bit.lyNaNbitly[42.286499, -71.714699]0.0http://www.shrewsbury-ma.gov/selco/1.331923e+09America/New_Yorkhttp://www.shrewsbury-ma.gov/egov/gallery/1341...
\n", "
" ], "text/plain": [ " _heartbeat_ a \\\n", "0 NaN Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi... \n", "1 NaN GoogleMaps/RochesterNY \n", "2 NaN Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ... \n", "3 NaN Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8)... \n", "4 NaN Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi... \n", "\n", " al c cy g gr h hc \\\n", "0 en-US,en;q=0.8 US Danvers A6qOVH MA wfLQtf 1.331823e+09 \n", "1 NaN US Provo mwszkS UT mwszkS 1.308262e+09 \n", "2 en-US US Washington xxr3Qb DC xxr3Qb 1.331920e+09 \n", "3 pt-br BR Braz zCaLwp 27 zUtuOu 1.331923e+09 \n", "4 en-US,en;q=0.8 US Shrewsbury 9b6kNl MA 9b6kNl 1.273672e+09 \n", "\n", " hh kw l ll nk \\\n", "0 1.usa.gov NaN orofrog [42.576698, -70.954903] 1.0 \n", "1 j.mp NaN bitly [40.218102, -111.613297] 0.0 \n", "2 1.usa.gov NaN bitly [38.9007, -77.043098] 1.0 \n", "3 1.usa.gov NaN alelex88 [-23.549999, -46.616699] 0.0 \n", "4 bit.ly NaN bitly [42.286499, -71.714699] 0.0 \n", "\n", " r t \\\n", "0 http://www.facebook.com/l/7AQEFzjSi/1.usa.gov/... 1.331923e+09 \n", "1 http://www.AwareMap.com/ 1.331923e+09 \n", "2 http://t.co/03elZC4Q 1.331923e+09 \n", "3 direct 1.331923e+09 \n", "4 http://www.shrewsbury-ma.gov/selco/ 1.331923e+09 \n", "\n", " tz u \n", "0 America/New_York http://www.ncbi.nlm.nih.gov/pubmed/22415991 \n", "1 America/Denver http://www.monroecounty.gov/etc/911/rss.php \n", "2 America/New_York http://boxer.senate.gov/en/press/releases/0316... \n", "3 America/Sao_Paulo http://apod.nasa.gov/apod/ap120312.html \n", "4 America/New_York http://www.shrewsbury-ma.gov/egov/gallery/1341... " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cframe = frame[frame.a.notnull()]\n", "cframe.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "其次根据a值计算出各行是否是windows:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/xu/anaconda/envs/py35/lib/python3.5/site-packages/ipykernel/__main__.py:2: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " from ipykernel import kernelapp as app\n" ] } ], "source": [ "cframe['os'] = np.where(cframe['a'].str.contains('Windows'), \n", " 'Windows', 'Not Windows')" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0 Windows\n", "1 Not Windows\n", "2 Windows\n", "3 Not Windows\n", "4 Windows\n", "Name: os, dtype: object" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cframe['os'][:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "接下来就可以根据时区和新得到的操作系统列表对数据进行分组了:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "by_tz_os = cframe.groupby(['tz', 'os'])" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "tz os \n", " Not Windows 245\n", " Windows 276\n", "Africa/Cairo Windows 3\n", "Africa/Casablanca Windows 1\n", "Africa/Ceuta Windows 2\n", "Africa/Johannesburg Windows 1\n", "Africa/Lusaka Windows 1\n", "America/Anchorage Not Windows 4\n", " Windows 1\n", "America/Argentina/Buenos_Aires Not Windows 1\n", "America/Argentina/Cordoba Windows 1\n", "America/Argentina/Mendoza Windows 1\n", "America/Bogota Not Windows 1\n", " Windows 2\n", "America/Caracas Windows 1\n", "America/Chicago Not Windows 115\n", " Windows 285\n", "America/Chihuahua Not Windows 1\n", " Windows 1\n", "America/Costa_Rica Windows 1\n", "America/Denver Not Windows 132\n", " Windows 59\n", "America/Edmonton Not Windows 2\n", " Windows 4\n", "America/Guayaquil Not Windows 2\n", "America/Halifax Not Windows 1\n", " Windows 3\n", "America/Indianapolis Not Windows 8\n", " Windows 12\n", "America/La_Paz Windows 1\n", " ... \n", "Europe/Madrid Not Windows 16\n", " Windows 19\n", "Europe/Malta Windows 2\n", "Europe/Moscow Not Windows 1\n", " Windows 9\n", "Europe/Oslo Not Windows 2\n", " Windows 8\n", "Europe/Paris Not Windows 4\n", " Windows 10\n", "Europe/Prague Not Windows 3\n", " Windows 7\n", "Europe/Riga Not Windows 1\n", " Windows 1\n", "Europe/Rome Not Windows 8\n", " Windows 19\n", "Europe/Skopje Windows 1\n", "Europe/Sofia Windows 1\n", "Europe/Stockholm Not Windows 2\n", " Windows 12\n", "Europe/Uzhgorod Windows 1\n", "Europe/Vienna Not Windows 3\n", " Windows 3\n", "Europe/Vilnius Windows 2\n", "Europe/Volgograd Windows 1\n", "Europe/Warsaw Not Windows 1\n", " Windows 15\n", "Europe/Zurich Not Windows 4\n", "Pacific/Auckland Not Windows 3\n", " Windows 8\n", "Pacific/Honolulu Windows 36\n", "Length: 149, dtype: int64" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "by_tz_os.size()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "上面通过size对分组结果进行计数,类似于value_counts函数,并利用unstack对计数结果进行重塑为一个表格:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": true }, "outputs": [], "source": [ "agg_counts = by_tz_os.size().unstack().fillna(0)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "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", "
osNot WindowsWindows
tz
245.0276.0
Africa/Cairo0.03.0
Africa/Casablanca0.01.0
Africa/Ceuta0.02.0
Africa/Johannesburg0.01.0
Africa/Lusaka0.01.0
America/Anchorage4.01.0
America/Argentina/Buenos_Aires1.00.0
America/Argentina/Cordoba0.01.0
America/Argentina/Mendoza0.01.0
\n", "
" ], "text/plain": [ "os Not Windows Windows\n", "tz \n", " 245.0 276.0\n", "Africa/Cairo 0.0 3.0\n", "Africa/Casablanca 0.0 1.0\n", "Africa/Ceuta 0.0 2.0\n", "Africa/Johannesburg 0.0 1.0\n", "Africa/Lusaka 0.0 1.0\n", "America/Anchorage 4.0 1.0\n", "America/Argentina/Buenos_Aires 1.0 0.0\n", "America/Argentina/Cordoba 0.0 1.0\n", "America/Argentina/Mendoza 0.0 1.0" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "agg_counts[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "最后,我们来选取最常出现的时区。为了达到这个目的,根据agg_counts中的行数构造了一个简洁索引数组:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "tz\n", " 24\n", "Africa/Cairo 20\n", "Africa/Casablanca 21\n", "Africa/Ceuta 92\n", "Africa/Johannesburg 87\n", "Africa/Lusaka 53\n", "America/Anchorage 54\n", "America/Argentina/Buenos_Aires 57\n", "America/Argentina/Cordoba 26\n", "America/Argentina/Mendoza 55\n", "dtype: int64" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "indexer = agg_counts.sum(1).argsort()\n", "indexer[:10]" ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "tz\n", " 24\n", "Africa/Cairo 20\n", "Africa/Casablanca 21\n", "Africa/Ceuta 92\n", "Africa/Johannesburg 87\n", "Africa/Lusaka 53\n", "America/Anchorage 54\n", "America/Argentina/Buenos_Aires 57\n", "America/Argentina/Cordoba 26\n", "America/Argentina/Mendoza 55\n", "dtype: int64" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "indexer = agg_counts.sum(1).argsort()\n", "indexer[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "然后通过take按照这个顺序截取了最后10行:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "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", "
osNot WindowsWindows
tz
America/Sao_Paulo13.020.0
Europe/Madrid16.019.0
Pacific/Honolulu0.036.0
Asia/Tokyo2.035.0
Europe/London43.031.0
America/Denver132.059.0
America/Los_Angeles130.0252.0
America/Chicago115.0285.0
245.0276.0
America/New_York339.0912.0
\n", "
" ], "text/plain": [ "os Not Windows Windows\n", "tz \n", "America/Sao_Paulo 13.0 20.0\n", "Europe/Madrid 16.0 19.0\n", "Pacific/Honolulu 0.0 36.0\n", "Asia/Tokyo 2.0 35.0\n", "Europe/London 43.0 31.0\n", "America/Denver 132.0 59.0\n", "America/Los_Angeles 130.0 252.0\n", "America/Chicago 115.0 285.0\n", " 245.0 276.0\n", "America/New_York 339.0 912.0" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "count_subset = agg_counts.take(indexer)[-10:]\n", "count_subset" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "pandas有一个很方便的方法叫nlargest,可以实现相同效果:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "tz\n", "America/New_York 1251.0\n", " 521.0\n", "America/Chicago 400.0\n", "America/Los_Angeles 382.0\n", "America/Denver 191.0\n", "Europe/London 74.0\n", "Asia/Tokyo 37.0\n", "Pacific/Honolulu 36.0\n", "Europe/Madrid 35.0\n", "America/Sao_Paulo 33.0\n", "dtype: float64" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "agg_counts.sum(1).nlargest(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "上面的输出结果可以画成条形图;通过给seaborn的barplot函数传递一个参数,来画出堆积条形图(stacked bar plot):" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "tz os \n", "America/Sao_Paulo Not Windows 13.0\n", " Windows 20.0\n", "Europe/Madrid Not Windows 16.0\n", " Windows 19.0\n", "Pacific/Honolulu Not Windows 0.0\n", "dtype: float64" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Rearrange the data for plotting\n", "count_subset = count_subset.stack()\n", "count_subset.head()" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "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", " \n", " \n", " \n", " \n", " \n", " \n", "
tzostotal
0America/Sao_PauloNot Windows13.0
1America/Sao_PauloWindows20.0
2Europe/MadridNot Windows16.0
3Europe/MadridWindows19.0
4Pacific/HonoluluNot Windows0.0
5Pacific/HonoluluWindows36.0
6Asia/TokyoNot Windows2.0
7Asia/TokyoWindows35.0
8Europe/LondonNot Windows43.0
9Europe/LondonWindows31.0
\n", "
" ], "text/plain": [ " tz os total\n", "0 America/Sao_Paulo Not Windows 13.0\n", "1 America/Sao_Paulo Windows 20.0\n", "2 Europe/Madrid Not Windows 16.0\n", "3 Europe/Madrid Windows 19.0\n", "4 Pacific/Honolulu Not Windows 0.0\n", "5 Pacific/Honolulu Windows 36.0\n", "6 Asia/Tokyo Not Windows 2.0\n", "7 Asia/Tokyo Windows 35.0\n", "8 Europe/London Not Windows 43.0\n", "9 Europe/London Windows 31.0" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "count_subset.name = 'total'\n", "count_subset = count_subset.reset_index()\n", "count_subset[:10]" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.barplot(x='total', y='tz', hue='os', data=count_subset)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "由于这张图中不太容易看清楚较小分组中windows用户的相对比例,因此我们可以将各行规范化为“总计为1”并重新绘图:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def norm_total(group):\n", " group['normed_total'] = group.total / group.total.sum()\n", " return group\n", "\n", "results = count_subset.groupby('tz').apply(norm_total)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nSEL/D11XqdlXu5aMAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.barplot(x='normed_total', y='tz', hue='os', data=results)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "我们还可以使用transform和groupby,来更有效率地计算规范化的和:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": true }, "outputs": [], "source": [ "g = count_subset.groupby('tz')\n", "results2 = count_subset.total / g.total.transform('sum')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "译者:下面的内容是不适用seaborn的画图方法,这种画法是2013年第一版中的内容:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "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", "
osNot WindowsWindows
tz
America/Sao_Paulo13.020.0
Europe/Madrid16.019.0
Pacific/Honolulu0.036.0
Asia/Tokyo2.035.0
Europe/London43.031.0
America/Denver132.059.0
America/Los_Angeles130.0252.0
America/Chicago115.0285.0
245.0276.0
America/New_York339.0912.0
\n", "
" ], "text/plain": [ "os Not Windows Windows\n", "tz \n", "America/Sao_Paulo 13.0 20.0\n", "Europe/Madrid 16.0 19.0\n", "Pacific/Honolulu 0.0 36.0\n", "Asia/Tokyo 2.0 35.0\n", "Europe/London 43.0 31.0\n", "America/Denver 132.0 59.0\n", "America/Los_Angeles 130.0 252.0\n", "America/Chicago 115.0 285.0\n", " 245.0 276.0\n", "America/New_York 339.0 912.0" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "count_subset = agg_counts.take(indexer)[-10:]\n", "count_subset" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "这里也可以生成一张条形图。我们使用stacked=True来生成一张堆积条形图:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\npiIiIjH9f8lh9JfulKm/AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "count_subset.plot(kind='barh', stacked=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "由于这张图中不太容易看清楚较小分组中windows用户的相对比例,因此我们可以将各行规范化为“总计为1”并重新绘图:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": true }, "outputs": [], "source": [ "normed_subset = count_subset.div(count_subset.sum(1), axis=0)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "normed_subset.plot(kind='barh', stacked=True)" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [py35]", "language": "python", "name": "Python [py35]" }, "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.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }