{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Инфраструктура Python. Источники данных" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Архивы" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo Python поддерживает чтение некоторых типов архивов (https://docs.python.org/2/library/archiving.html)\n", "\n", "todo Нужен отчет по ФС (особенно по либе), какие встречаются архивы\n", "\n", " zlib.decompress(s)\n", " \n", " with zipfile.ZipFile(fn) as z:\n", " for info in z.infolist:\n", " print info.filename, info.file_size, z.read(info.filename)[:100]\n", " \n", " zlib\n", " gzip\n", " bz2\n", " zipfile\n", " tarfile\n", "\n", " `backports.lzma` для .xz и .lzma | pylzma\n", " libarchive -- Windows?\n", " rarfile\n", " https://github.com/harvimt/pylib7zip\n", " bz2file\n", " lz4\n", " python-lzo\n", " Brotli | brotlipy\n", " zopfli | zopflipy | pyzopfli\n", " mpyq is a Python library for reading MPQ (MoPaQ) archives used in many of Blizzard's games" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Документы: pdf djvu doc rtf chm docx xls xlsx odt\n", "\n", "Архивы либгена по популярности: rar zip gz exe/SFX ha iso 7z bz2 nrg ace arj isz tar msi daa mdf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo Как читать контейнеры виртуальных машин, образы дисков, iso?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Форматы обмена данными" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### JSON" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В веб повсеместно используется JSON, похожий на литералы в JavaScript." ] }, { "cell_type": "code", "execution_count": 115, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{u'u': [1, 2, 3]}\n", "[1, 3, 5, \"abc\", {\"o\": true}]\n" ] } ], "source": [ "import json\n", "print json.loads('{\"u\":[1,2,3]}')\n", "print json.dumps([1,3,5,'abc',{'o':True}])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### XML" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Устарел, но еще встречается (например, в формате fb2) XML. Для работы с ним подходит встроенная библиотека `lxml`. Одним из удобных способов искать что-нибудь в XML (как во всем документе, так и в отдельном узле) являются селекторы XPath." ] }, { "cell_type": "code", "execution_count": 103, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " description {'id': '125'} [('id', '125')] ['id'] ['125'] 125\n", "['child_sf']\n", "first-name Сергей\n", "last-name Другаль\n", "\n", " Сергей\n", " Другаль\n", " \n", " \n" ] } ], "source": [ "from lxml import etree\n", "xml = '''\\\n", "\n", " \n", " child_sf\n", " \n", " Сергей\n", " Другаль\n", " \n", " Тигр проводит вас до гаража\n", " \n", "\n", "'''\n", "doc = etree.XML(xml)\n", "print doc, doc.tag, doc.attrib, doc.items(), doc.keys(), doc.values(), doc.get('id')\n", "print doc.xpath('/description/title-info/genre/text()')\n", "for c in doc.xpath('//author')[0].getchildren():\n", " print c.tag, c.text\n", "print etree.tostring(doc.xpath('//author')[0])" ] }, { "cell_type": "code", "execution_count": 476, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "child_sf\n" ] } ], "source": [ "for info in doc.findall('title-info'):\n", " for genre in info.findall('genre'):\n", " print genre.text" ] }, { "cell_type": "code", "execution_count": 492, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ ":1:29:FATAL:PARSER:ERR_TAG_NAME_MISMATCH: Opening and ending tag mismatch: root line 1 and rot" ] }, "execution_count": 492, "metadata": {}, "output_type": "execute_result" } ], "source": [ "parser = etree.XMLParser(recover=True)\n", "tree = etree.fromstring('', parser)\n", "parser.error_log" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Библиотека `lxml` содержит и менее требовательный к памяти на больших XML SAX-парсер, генерирующий эвенты в процессе разбора." ] }, { "cell_type": "code", "execution_count": 108, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[('end', ),\n", " ('end', ),\n", " ('end', ),\n", " ('end', ),\n", " ('end', ),\n", " ('end', ),\n", " ('end', )]" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import lxml\n", "list(lxml.etree.iterparse(BytesIO(xml)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "С небольшим XML может быть удобнее работать в стиле библиотеки `json`, для этого есть библиотека `xmltodict`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "pip install xmltodict\n", "```" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "OrderedDict([(u'description', OrderedDict([(u'@id', u'125'), (u'title-info', OrderedDict([(u'genre', u'child_sf'), (u'author', OrderedDict([(u'first-name', u'\\u0421\\u0435\\u0440\\u0433\\u0435\\u0439'), (u'last-name', u'\\u0414\\u0440\\u0443\\u0433\\u0430\\u043b\\u044c')])), (u'book-title', u'\\u0422\\u0438\\u0433\\u0440 \\u043f\\u0440\\u043e\\u0432\\u043e\\u0434\\u0438\\u0442 \\u0432\\u0430\\u0441 \\u0434\\u043e \\u0433\\u0430\\u0440\\u0430\\u0436\\u0430')]))]))])\n", "Другаль\n" ] } ], "source": [ "import xmltodict\n", "dic = xmltodict.parse(xml)\n", "print dic\n", "print dic['description']['title-info']['author']['last-name']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Впрочем, использовать ее следует с осторожностью" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "OrderedDict([(u'a', OrderedDict([(u'b', [u'1', u'3']), ('#text', u'2')]))])\n", "\n", "\n", "132\n" ] } ], "source": [ "parsed = xmltodict.parse('123')\n", "print parsed\n", "print\n", "print xmltodict.unparse(parsed)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### HTML" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "HTML похож на XML, с которым они имеют общего предшественника, так что для парсинга HTML можно использовать ту же библиотеку `lxml`. Оттуда же пришли селекторы CSS, иногда позволяющие записать выборку короче." ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "Hello, HTML of evil, you are rocks\n", "\n", "\n", " Hello, HTML of evil, you are rocks\n", "\n", "\n", "[] ' of evil'\n", "'Hello, ' ', you are rocks'\n" ] } ], "source": [ "html = 'Hello, HTML of evil, you are rocks'\n", "doc = etree.HTML(html)\n", "print doc\n", "print\n", "print etree.tostring(doc)\n", "print\n", "etree.dump(doc)\n", "print\n", "print doc.cssselect('.red'), repr(doc.cssselect('.red')[0].tail)\n", "a = doc.cssselect('a')[0]\n", "print repr(a.text), repr(a.tail)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Pickle" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Почти все Python-объекты могут быть сериализованы в формат `pickle`. Но он плохо подходит для передачи данных, потому что зависит от версии Python и позволяет исполнять код при загрузке." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo Интероп pickle (2<->3, x32-x64, или лучше dill? pickleshare?), bson? cPickle? objloader?\n", "\n", "The pickle library often fails for complex functions including lambdas, closures, and class methods. When this occurs we recommend the alternative serialization library dill.\n", "\n", "альтернативы pickle: marshmallow, dill, и pyro" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pickle\n", "from collections import OrderedDict\n", "from numpy import nan" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "\"ccollections\\nOrderedDict\\np0\\n((lp1\\n(lp2\\n(I1\\nI2\\nI3\\ntp3\\na(dp4\\nS'a'\\np5\\nc__builtin__\\nset\\np6\\n((lp7\\nI1\\naI2\\naI3\\natp8\\nRp9\\nsS'c'\\np10\\n(lp11\\nsS'b'\\np12\\nFnan\\nsaatp13\\nRp14\\n.\"" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = OrderedDict([((1,2,3), {'a': {1, 2, 3}, 'b': nan, 'c': []})])\n", "serialized = pickle.dumps(data)\n", "serialized" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "OrderedDict([((1, 2, 3), {'a': {1, 2, 3}, 'b': nan, 'c': []})])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pickle.loads(serialized)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "С просмотром и анализом файла, сгенерированного `pickle`, может помочь встроенная библиотека `pickletools`" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pickletools" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "158 108\n" ] } ], "source": [ "print len(serialized), len(pickletools.optimize(serialized))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0: c GLOBAL 'collections OrderedDict'\n", " 25: ( MARK\n", " 26: ( MARK\n", " 27: l LIST (MARK at 26)\n", " 28: ( MARK\n", " 29: l LIST (MARK at 28)\n", " 30: ( MARK\n", " 31: I INT 1\n", " 34: I INT 2\n", " 37: I INT 3\n", " 40: t TUPLE (MARK at 30)\n", " 41: a APPEND\n", " 42: ( MARK\n", " 43: d DICT (MARK at 42)\n", " 44: S STRING 'a'\n", " 49: c GLOBAL '__builtin__ set'\n", " 66: ( MARK\n", " 67: ( MARK\n", " 68: l LIST (MARK at 67)\n", " 69: I INT 1\n", " 72: a APPEND\n", " 73: I INT 2\n", " 76: a APPEND\n", " 77: I INT 3\n", " 80: a APPEND\n", " 81: t TUPLE (MARK at 66)\n", " 82: R REDUCE\n", " 83: s SETITEM\n", " 84: S STRING 'c'\n", " 89: ( MARK\n", " 90: l LIST (MARK at 89)\n", " 91: s SETITEM\n", " 92: S STRING 'b'\n", " 97: F FLOAT nan\n", " 102: s SETITEM\n", " 103: a APPEND\n", " 104: a APPEND\n", " 105: t TUPLE (MARK at 25)\n", " 106: R REDUCE\n", " 107: . STOP\n", "highest protocol among opcodes = 0\n" ] } ], "source": [ "pickletools.dis(pickletools.optimize(serialized))" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0: c GLOBAL '__builtin__ eval'\n", " 18: ( MARK\n", " 19: c GLOBAL '__builtin__ compile'\n", " 40: ( MARK\n", " 41: V UNICODE u'print \"BOOM!\"'\n", " 56: V UNICODE u'-'\n", " 59: V UNICODE u'exec'\n", " 65: t TUPLE (MARK at 40)\n", " 66: R REDUCE\n", " 67: t TUPLE (MARK at 18)\n", " 68: R REDUCE\n", " 69: . STOP\n", "highest protocol among opcodes = 0\n" ] } ], "source": [ "pickle_bomb = '''\\\n", "c__builtin__\n", "eval\n", "(c__builtin__\n", "compile\n", "(Vprint \"BOOM!\"\n", "V-\n", "Vexec\n", "tRtR.'''\n", "pickletools.dis(pickle_bomb)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "BOOM!\n" ] } ], "source": [ "pickle.loads(pickle_bomb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Несколько более читабельной альтернативой может послужить библиотека `jsonpickle`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "pip install jsonpickle\n", "```" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import jsonpickle" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'{\"py/set\": [1267650600228229401496703205376, 1, 2.0, null]}'" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dumped = jsonpickle.dumps({1, 2.0, 2**100, None})\n", "dumped" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{None, 1, 2.0, 1267650600228229401496703205376L}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "jsonpickle.loads(dumped)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bencode" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Очень похож на JSON, но удобнее для хранения бинарных данных формат Bencode, используемый, например, в файлах `*.torrent`. Для его парсинга используется одноименная библиотека `bencode`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "pip install bencode\n", "```" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "d8:announce20:udp://shubt.net:271013:announce-listll20:udp://shubt.net:2710el33:http://bt.dugtor.ru:2710/announceel70:http://bt.nnm-club.info:2710/00c1495fbcc09403e464f01d58faee25/announceel188:http://retracker.local/announce.php?size=3479044224&comment=http%3A%2F%2Fnnm-club.me%2Fforum%2Fviewtopic.php%3Fp%3D8331459&name=Linux+Mint+18+Sarah+%28Mate%2C+Cinnamon%29+%5B64bit%5D+2xDVDel31:http://retracker.local/announceel43:http://tracker.filetracker.pl:8089/announceel44:http://tracker2.wasabii.com.tw:6969/announceel40:http://tracker.grepler.com:6969/announceel35:http://125.227.35.196:6969/announceel41:http://tracker.tiny-vps.com:6969/announceel35:http://87.248.186.252:8080/announceel34:http://210.244.71.25:6969/announceel33:http://46.4.109.148:6969/announceel37:http://tracker.dler.org:6969/announceel37:udp://[2001:67c:28f8:92::1111:1]:2710el37:udp://ipv6.leechers-paradise.org:6969el24:udp://46.148.18.250:2710ee7:comment30:http://rutor.is/torrent/51182610:created by21:Friend721 (DugTor.ru)13:creation datei1467152079e4:infod5:filesld6:lengthi128e4:pathl12:checksum.md5eed6:lengthi1697906688e4:pathl31:linuxmint-18-cinnamon-64bit.isoeed6:lengthi1781137408e4:pathl27:linuxmint-18-mate-64bit.isoeee4:name18:LinuxMint-18-64bit12:piece lengthi52\n", "\n", "{\n", " \"announce\": \"udp://shubt.net:2710\", \n", " \"announce-list\": [\n", " [\n", " \"udp://shubt.net:2710\"\n", " ], \n", " \"...\"\n", " ], \n", " \"comment\": \"http://rutor.is/torrent/511826\", \n", " \"created by\": \"Friend721 (DugTor.ru)\", \n", " \"creation date\": 1467152079, \n", " \"info\": {\n", " \"files\": [\n", " {\n", " \"length\": 128, \n", " \"path\": [\n", " \"checksum.md5\"\n", " ]\n", " }, \n", " {\n", " \"length\": 1697906688, \n", " \"path\": [\n", " \"linuxmint-18-cinnamon-64bit.iso\"\n", " ]\n", " }, \n", " {\n", " \"length\": 1781137408, \n", " \"path\": [\n", " \"linuxmint-18-mate-64bit.iso\"\n", " ]\n", " }\n", " ], \n", " \"name\": \"LinuxMint-18-64bit\", \n", " \"piece length\": 524288, \n", " \"pieces\": \"(less noise)\"\n", " }, \n", " \"publisher\": \"rutor.is\", \n", " \"publisher-url\": \"http://rutor.is/torrent/511826\"\n", "}\n" ] } ], "source": [ "import bencode, requests, json\n", "\n", "torrent = requests.get('http://d.rutor.info/download/511826').content\n", "print torrent[:1250]\n", "print\n", "decoded = bencode.bdecode(torrent)\n", "decoded['info']['pieces'] = '(less noise)'\n", "decoded['announce-list'] = [['udp://shubt.net:2710'], '...']\n", "print json.dumps(decoded, indent=4, sort_keys=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### TOML" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Если структурированные данные хочется задавать ручками в текстовом редакторе или диффать, ни JSON, ни XML не лучший выбор. Удобнее всего для этих целей TOML, язык разметки, похожий на формат `*.ini` файлов." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "pip install toml\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo или лучше pytoml?" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "y = \"e\"\n", "abc = [ 1, 2,]\n", "\n", "[def]\n", "u = \"i\"\n", "\n", "[def.\"Привет\"]\n", "o2 = 2\n", "o = 1\n", "\n" ] } ], "source": [ "import toml\n", "print toml.dumps({\n", " \"abc\": [1,2],\n", " \"def\": {\n", " u\"Привет\": {\"o\": 1, \"o2\": 2},\n", " \"u\": \"i\"\n", " },\n", " \"y\": \"e\"\n", "})" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{u'section': {u'value': [{u'a': u'A', u'b': u'B'},\n", " {u'a': u'AA', u'b': u'BB'}]}}" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "toml.loads('''\n", "[section]\n", "[[section.value]]\n", "a = \"A\"\n", "b = \"B\"\n", "[[section.value]]\n", "a = \"AA\"\n", "b = \"BB\"\n", "''')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Табличные данные" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Встроенная библиотека `csv` позволяет построчно читать в списки (и писать из) строки CSV-файла." ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from io import BytesIO\n", "import csv" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['headerA', ' headerB', ' headerC']\n", "['1', '2', '3']\n", "['4', '5', '6 \\xd0\\xbf\\xd1\\x8b\\xd1\\x89']\n" ] } ], "source": [ "csvfile = BytesIO('''\\\n", "headerA, headerB, headerC\n", "1,2,3\n", "4,5,6 пыщ\n", "''')\n", "for line in csv.reader(csvfile):\n", " print line" ] }, { "cell_type": "code", "execution_count": 102, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a;b\r\n", "c;\"d\"\"d\"\r\n", "e;f пыщ\r\n", "g;h\r\n", "\n" ] } ], "source": [ "io = BytesIO()\n", "writer = csv.writer(io, delimiter=';')\n", "data = [\n", " ['a', 'b'],\n", " ['c', 'd\"d'],\n", " ['e', 'f пыщ'],\n", "]\n", "writer.writerows(data)\n", "writer.writerow(['g', 'h'])\n", "print io.getvalue()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Для более высокоуровневой работы с табличными данными (обычно исходно в формате `csv`) в Python имеется библиотека `pandas`, предоставляющая доступ через не самый интуитивный API к различным выборкам и группировкам. http://pandas.pydata.org/pandas-docs/stable/index.html" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Основные классы `pandas`:\n", "\n", "* `Series`, похожий на 1D `numpy.array`, в котором можно именовать индексы\n", "* `DataFrame`, 2D таблица, похожая на словарь из колонок-`Series`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo\n", "\n", "\timport pandas.tseries.offsets\n", "\t\n", "\tdf['column']\n", "\tdf.index, df.columns, df.values\n", "\n", "\tdf.set_index([\"State\", \"City\"]).sortlevel(0)\n", "\tdf.set_index(\"City\").sort([\"State\", \"NumericPopulation\"], ascending=[False, True])\n", "\n", "\tdf.groupby(df.columns[0]).aggregate(average)\n", "\tdf[df.columns[0]].apply(log10)\n", "\n", "\tdf.name.str.split(\" \", expand=True)\n", "\tdf.groupby('name')['activity'].value_counts()\n", "\tdf.groupby('name')['activity'].value_counts().unstack().fillna(0)\n", "\ton which row this column is changing by doing this: df.name!=df.name.shift()\n", "\tdf.sort_values(by=['name','timestamp'])\n", "\n", "\tpandas.qcut(data.weight, 10, labels=False) ввод новой фичи, дециля?\n", " \n", " df.pivot(index='date', columns='variable', values='value') EAV->relation\n", " df.melt(id_vars=['first', 'last'])\n", " \n", " pandas.crosstab\n", " pivot_table\n", "\n", " labels, uniques = pd.factorize(x)\n", " Out[111]: array([ 0, 0, -1, 1, 2, 3])\n", " Out[112]: Index(['A', 'B', 3.14, inf], dtype='object')\n", " \n", " scatter_matrix\n", " \n", " df.corr()\n", " \n", " data = data.fillna(data.median(axis=0), axis=0)\n", " pandas.get_dummies\n", " \n", " concat, join" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(3, 2)\n", "Index([u'a', u'b'], dtype='object')\n", "Index([u'first', u'second', u'third'], dtype='object')\n" ] }, { "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", "
ab
first12
second34
third25
\n", "
" ], "text/plain": [ " a b\n", "first 1 2\n", "second 3 4\n", "third 2 5" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pandas.DataFrame([[1,2],[3,4],[2,5]], columns=['a','b'], index=['first', 'second', 'third'])\n", "print df.shape\n", "print df.columns\n", "print df.index\n", "df" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Index: 3 entries, first to third\n", "Data columns (total 2 columns):\n", "a 3 non-null int64\n", "b 3 non-null int64\n", "dtypes: int64(2)\n", "memory usage: 72.0+ bytes\n" ] } ], "source": [ "df.info()" ] }, { "cell_type": "code", "execution_count": 5, "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", "
ab
count3.03.000000
mean2.03.666667
std1.01.527525
min1.02.000000
25%1.53.000000
50%2.04.000000
75%2.54.500000
max3.05.000000
\n", "
" ], "text/plain": [ " a b\n", "count 3.0 3.000000\n", "mean 2.0 3.666667\n", "std 1.0 1.527525\n", "min 1.0 2.000000\n", "25% 1.5 3.000000\n", "50% 2.0 4.000000\n", "75% 2.5 4.500000\n", "max 3.0 5.000000" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "code", "execution_count": 6, "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", "
indexab
0first12
1second34
2third25
\n", "
" ], "text/plain": [ " index a b\n", "0 first 1 2\n", "1 second 3 4\n", "2 third 2 5" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.reset_index()" ] }, { "cell_type": "code", "execution_count": 7, "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", "
ab
first1.01.0
second3.02.0
third2.03.0
\n", "
" ], "text/plain": [ " a b\n", "first 1.0 1.0\n", "second 3.0 2.0\n", "third 2.0 3.0" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.rank()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2\n", "2\n" ] } ], "source": [ "print df.iloc[0,1]\n", "print df.loc['first','b']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Объект `pandas.DataFrame` похож по API на словарь строка → `numpy.array`" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0 a\n", "1 a\n", "2 a\n", "3 a\n", "4 a\n", "Name: PID, dtype: object" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import math\n", "(df['PID'] * 2).apply(math.sqrt).astype(int)[:5].map({69: 'a'})" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": true }, "outputs": [], "source": [ "df['New Column'] = df['Operation'].apply(lambda s:s[:-1])" ] }, { "cell_type": "code", "execution_count": 73, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SequenceTime of DayProcess NamePIDOperationPathResultDurationDetailNew Column
0NaN20:35:12,0034072Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VIDEOSUCCESS5.900000e-06Desired Access: Read, Maximum AllowedRegOpenKe
1NaN20:35:12,0034247Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumberSUCCESS2.200000e-06Type: REG_DWORD, Length: 4, Data: 10RegQueryValu
2NaN20:35:12,0034379Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS7.000000e-07NaNRegCloseKe
3NaN20:35:12,0034510Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VideoSUCCESS1.800000e-06Desired Access: ReadRegOpenKe
4NaN20:35:12,0034597Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4SUCCESS1.900000e-06Type: REG_SZ, Length: 202, Data: \\Registry\\Mac...RegQueryValu
5NaN20:35:12,0034721Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7...REPARSE4.800000e-06Desired Access: ReadRegOpenKe
6NaN20:35:12,0034835Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7...SUCCESS3.600000e-06Desired Access: ReadRegOpenKe
7NaN20:35:12,0034955Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS7.000000e-07NaNRegCloseKe
8NaN20:35:12,0035031Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...NAME NOT FOUND7.700000e-06Length: 52RegQueryValu
9NaN20:35:12,0035181Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS7.000000e-07NaNRegCloseKe
10NaN20:35:12,0035287Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS2.200000e-06Desired Access: ReadRegOpenKe
11NaN20:35:12,0035381Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.500000e-06Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN...RegQueryValu
12NaN20:35:12,0035476Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS8.000000e-07NaNRegCloseKe
13NaN20:35:12,0035560Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.500000e-06Desired Access: ReadRegOpenKe
14NaN20:35:12,0035633Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.100000e-06Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN...RegQueryValu
15NaN20:35:12,0035721Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS7.000000e-07NaNRegCloseKe
16NaN20:35:12,0035801Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VideoSUCCESS1.800000e-06Desired Access: ReadRegOpenKe
17NaN20:35:12,0035877Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4SUCCESS1.100000e-06Type: REG_SZ, Length: 202, Data: \\Registry\\Mac...RegQueryValu
18NaN20:35:12,0035961Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS8.000000e-07NaNRegCloseKe
19NaN20:35:12,0036917Dwm.exe2432RegQueryKeyHKLMSUCCESS1.100000e-06Query: HandleTags, HandleTags: 0x0RegQueryKe
20NaN20:35:12,0037011Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Control\\Video\\{7...REPARSE3.700000e-06Desired Access: Query ValueRegOpenKe
21NaN20:35:12,0037106Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Control\\Video\\{7...SUCCESS3.300000e-06Desired Access: Query ValueRegOpenKe
22NaN20:35:12,0037216Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS6.200000e-06Type: REG_BINARY, Length: 4, Data: 00 00 00 40RegQueryValu
23NaN20:35:12,0037336Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...BUFFER OVERFLOW1.500000e-06Length: 144RegQueryValu
24NaN20:35:12,0037420Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS1.400000e-06Type: REG_MULTI_SZ, Length: 142, Data: igdumdi...RegQueryValu
25NaN20:35:12,0037504Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS7.000000e-07NaNRegCloseKe
26NaN20:35:12,0037606Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VIDEOSUCCESS1.800000e-06Desired Access: Read, Maximum AllowedRegOpenKe
27NaN20:35:12,0037686Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumberSUCCESS1.100000e-06Type: REG_DWORD, Length: 4, Data: 10RegQueryValu
28NaN20:35:12,0037770Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS7.000000e-07NaNRegCloseKe
29NaN20:35:12,0037861Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VideoSUCCESS1.500000e-06Desired Access: ReadRegOpenKe
.................................
75083NaN20:35:18,4282281Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.100000e-06NaNRegCloseKe
75084NaN20:35:18,4282412Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS2.200000e-06Desired Access: ReadRegOpenKe
75085NaN20:35:18,4282536Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.500000e-06Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN...RegQueryValu
75086NaN20:35:18,4282675Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.000000e-06NaNRegCloseKe
75087NaN20:35:18,4282802Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VideoSUCCESS2.900000e-06Desired Access: ReadRegOpenKe
75088NaN20:35:18,4282926Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4SUCCESS1.800000e-06Type: REG_SZ, Length: 202, Data: \\Registry\\Mac...RegQueryValu
75089NaN20:35:18,4283068Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS8.000000e-07NaNRegCloseKe
75090NaN20:35:18,4283830Dwm.exe2432RegQueryKeyHKLMSUCCESS1.500000e-06Query: HandleTags, HandleTags: 0x0RegQueryKe
75091NaN20:35:18,4283969Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Control\\Video\\{7...REPARSE5.500000e-06Desired Access: Query ValueRegOpenKe
75092NaN20:35:18,4284119Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Control\\Video\\{7...SUCCESS4.700000e-06Desired Access: Query ValueRegOpenKe
75093NaN20:35:18,4284283Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS9.400000e-06Type: REG_BINARY, Length: 4, Data: 00 00 00 40RegQueryValu
75094NaN20:35:18,4284472Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...BUFFER OVERFLOW2.200000e-06Length: 144RegQueryValu
75095NaN20:35:18,4284585Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS2.200000e-06Type: REG_MULTI_SZ, Length: 142, Data: igdumdi...RegQueryValu
75096NaN20:35:18,4284713Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS1.400000e-06NaNRegCloseKe
75097NaN20:35:18,4284884Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VIDEOSUCCESS3.300000e-06Desired Access: Read, Maximum AllowedRegOpenKe
75098NaN20:35:18,4285019Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumberSUCCESS1.500000e-06Type: REG_DWORD, Length: 4, Data: 10RegQueryValu
75099NaN20:35:18,4285161Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS1.100000e-06NaNRegCloseKe
75100NaN20:35:18,4285304Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VideoSUCCESS2.500000e-06Desired Access: ReadRegOpenKe
75101NaN20:35:18,4285428Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video5SUCCESS1.800000e-06Type: REG_SZ, Length: 202, Data: \\Registry\\Mac...RegQueryValu
75102NaN20:35:18,4285595Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7...REPARSE4.000000e-06Desired Access: ReadRegOpenKe
75103NaN20:35:18,4285734Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7...SUCCESS4.000000e-06Desired Access: ReadRegOpenKe
75104NaN20:35:18,4285902Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS1.100000e-06NaNRegCloseKe
75105NaN20:35:18,4286007Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...NAME NOT FOUND9.900000e-06Length: 52RegQueryValu
75106NaN20:35:18,4286223Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS1.000000e-06NaNRegCloseKe
75107NaN20:35:18,4286354Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS2.200000e-06Desired Access: ReadRegOpenKe
75108NaN20:35:18,4286481Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.900000e-06Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN...RegQueryValu
75109NaN20:35:18,4286624Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.100000e-06NaNRegCloseKe
75110NaN20:35:18,4286748Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS2.200000e-06Desired Access: ReadRegOpenKe
75111NaN20:35:18,4286879Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.400000e-06Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN...RegQueryValu
75112NaN20:35:18,4287014Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.100000e-06NaNRegCloseKe
\n", "

75113 rows × 10 columns

\n", "
" ], "text/plain": [ " Sequence Time of Day Process Name PID Operation \\\n", "0 NaN 20:35:12,0034072 Dwm.exe 2432 RegOpenKey \n", "1 NaN 20:35:12,0034247 Dwm.exe 2432 RegQueryValue \n", "2 NaN 20:35:12,0034379 Dwm.exe 2432 RegCloseKey \n", "3 NaN 20:35:12,0034510 Dwm.exe 2432 RegOpenKey \n", "4 NaN 20:35:12,0034597 Dwm.exe 2432 RegQueryValue \n", "5 NaN 20:35:12,0034721 Dwm.exe 2432 RegOpenKey \n", "6 NaN 20:35:12,0034835 Dwm.exe 2432 RegOpenKey \n", "7 NaN 20:35:12,0034955 Dwm.exe 2432 RegCloseKey \n", "8 NaN 20:35:12,0035031 Dwm.exe 2432 RegQueryValue \n", "9 NaN 20:35:12,0035181 Dwm.exe 2432 RegCloseKey \n", "10 NaN 20:35:12,0035287 Dwm.exe 2432 RegOpenKey \n", "11 NaN 20:35:12,0035381 Dwm.exe 2432 RegQueryValue \n", "12 NaN 20:35:12,0035476 Dwm.exe 2432 RegCloseKey \n", "13 NaN 20:35:12,0035560 Dwm.exe 2432 RegOpenKey \n", "14 NaN 20:35:12,0035633 Dwm.exe 2432 RegQueryValue \n", "15 NaN 20:35:12,0035721 Dwm.exe 2432 RegCloseKey \n", "16 NaN 20:35:12,0035801 Dwm.exe 2432 RegOpenKey \n", "17 NaN 20:35:12,0035877 Dwm.exe 2432 RegQueryValue \n", "18 NaN 20:35:12,0035961 Dwm.exe 2432 RegCloseKey \n", "19 NaN 20:35:12,0036917 Dwm.exe 2432 RegQueryKey \n", "20 NaN 20:35:12,0037011 Dwm.exe 2432 RegOpenKey \n", "21 NaN 20:35:12,0037106 Dwm.exe 2432 RegOpenKey \n", "22 NaN 20:35:12,0037216 Dwm.exe 2432 RegQueryValue \n", "23 NaN 20:35:12,0037336 Dwm.exe 2432 RegQueryValue \n", "24 NaN 20:35:12,0037420 Dwm.exe 2432 RegQueryValue \n", "25 NaN 20:35:12,0037504 Dwm.exe 2432 RegCloseKey \n", "26 NaN 20:35:12,0037606 Dwm.exe 2432 RegOpenKey \n", "27 NaN 20:35:12,0037686 Dwm.exe 2432 RegQueryValue \n", "28 NaN 20:35:12,0037770 Dwm.exe 2432 RegCloseKey \n", "29 NaN 20:35:12,0037861 Dwm.exe 2432 RegOpenKey \n", "... ... ... ... ... ... \n", "75083 NaN 20:35:18,4282281 Dwm.exe 2432 RegCloseKey \n", "75084 NaN 20:35:18,4282412 Dwm.exe 2432 RegOpenKey \n", "75085 NaN 20:35:18,4282536 Dwm.exe 2432 RegQueryValue \n", "75086 NaN 20:35:18,4282675 Dwm.exe 2432 RegCloseKey \n", "75087 NaN 20:35:18,4282802 Dwm.exe 2432 RegOpenKey \n", "75088 NaN 20:35:18,4282926 Dwm.exe 2432 RegQueryValue \n", "75089 NaN 20:35:18,4283068 Dwm.exe 2432 RegCloseKey \n", "75090 NaN 20:35:18,4283830 Dwm.exe 2432 RegQueryKey \n", "75091 NaN 20:35:18,4283969 Dwm.exe 2432 RegOpenKey \n", "75092 NaN 20:35:18,4284119 Dwm.exe 2432 RegOpenKey \n", "75093 NaN 20:35:18,4284283 Dwm.exe 2432 RegQueryValue \n", "75094 NaN 20:35:18,4284472 Dwm.exe 2432 RegQueryValue \n", "75095 NaN 20:35:18,4284585 Dwm.exe 2432 RegQueryValue \n", "75096 NaN 20:35:18,4284713 Dwm.exe 2432 RegCloseKey \n", "75097 NaN 20:35:18,4284884 Dwm.exe 2432 RegOpenKey \n", "75098 NaN 20:35:18,4285019 Dwm.exe 2432 RegQueryValue \n", "75099 NaN 20:35:18,4285161 Dwm.exe 2432 RegCloseKey \n", "75100 NaN 20:35:18,4285304 Dwm.exe 2432 RegOpenKey \n", "75101 NaN 20:35:18,4285428 Dwm.exe 2432 RegQueryValue \n", "75102 NaN 20:35:18,4285595 Dwm.exe 2432 RegOpenKey \n", "75103 NaN 20:35:18,4285734 Dwm.exe 2432 RegOpenKey \n", "75104 NaN 20:35:18,4285902 Dwm.exe 2432 RegCloseKey \n", "75105 NaN 20:35:18,4286007 Dwm.exe 2432 RegQueryValue \n", "75106 NaN 20:35:18,4286223 Dwm.exe 2432 RegCloseKey \n", "75107 NaN 20:35:18,4286354 Dwm.exe 2432 RegOpenKey \n", "75108 NaN 20:35:18,4286481 Dwm.exe 2432 RegQueryValue \n", "75109 NaN 20:35:18,4286624 Dwm.exe 2432 RegCloseKey \n", "75110 NaN 20:35:18,4286748 Dwm.exe 2432 RegOpenKey \n", "75111 NaN 20:35:18,4286879 Dwm.exe 2432 RegQueryValue \n", "75112 NaN 20:35:18,4287014 Dwm.exe 2432 RegCloseKey \n", "\n", " Path Result \\\n", "0 HKLM\\Hardware\\DeviceMap\\VIDEO SUCCESS \n", "1 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumber SUCCESS \n", "2 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "3 HKLM\\Hardware\\DeviceMap\\Video SUCCESS \n", "4 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4 SUCCESS \n", "5 HKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7... REPARSE \n", "6 HKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7... SUCCESS \n", "7 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "8 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... NAME NOT FOUND \n", "9 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "10 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "11 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "12 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "13 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "14 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "15 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "16 HKLM\\Hardware\\DeviceMap\\Video SUCCESS \n", "17 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4 SUCCESS \n", "18 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "19 HKLM SUCCESS \n", "20 HKLM\\System\\CurrentControlSet\\Control\\Video\\{7... REPARSE \n", "21 HKLM\\System\\CurrentControlSet\\Control\\Video\\{7... SUCCESS \n", "22 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "23 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... BUFFER OVERFLOW \n", "24 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "25 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "26 HKLM\\Hardware\\DeviceMap\\VIDEO SUCCESS \n", "27 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumber SUCCESS \n", "28 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "29 HKLM\\Hardware\\DeviceMap\\Video SUCCESS \n", "... ... ... \n", "75083 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75084 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75085 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75086 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75087 HKLM\\Hardware\\DeviceMap\\Video SUCCESS \n", "75088 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4 SUCCESS \n", "75089 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "75090 HKLM SUCCESS \n", "75091 HKLM\\System\\CurrentControlSet\\Control\\Video\\{7... REPARSE \n", "75092 HKLM\\System\\CurrentControlSet\\Control\\Video\\{7... SUCCESS \n", "75093 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "75094 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... BUFFER OVERFLOW \n", "75095 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "75096 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "75097 HKLM\\Hardware\\DeviceMap\\VIDEO SUCCESS \n", "75098 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumber SUCCESS \n", "75099 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "75100 HKLM\\Hardware\\DeviceMap\\Video SUCCESS \n", "75101 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video5 SUCCESS \n", "75102 HKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7... REPARSE \n", "75103 HKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7... SUCCESS \n", "75104 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "75105 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... NAME NOT FOUND \n", "75106 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "75107 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75108 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75109 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75110 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75111 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75112 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "\n", " Duration Detail \\\n", "0 5.900000e-06 Desired Access: Read, Maximum Allowed \n", "1 2.200000e-06 Type: REG_DWORD, Length: 4, Data: 10 \n", "2 7.000000e-07 NaN \n", "3 1.800000e-06 Desired Access: Read \n", "4 1.900000e-06 Type: REG_SZ, Length: 202, Data: \\Registry\\Mac... \n", "5 4.800000e-06 Desired Access: Read \n", "6 3.600000e-06 Desired Access: Read \n", "7 7.000000e-07 NaN \n", "8 7.700000e-06 Length: 52 \n", "9 7.000000e-07 NaN \n", "10 2.200000e-06 Desired Access: Read \n", "11 1.500000e-06 Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN... \n", "12 8.000000e-07 NaN \n", "13 1.500000e-06 Desired Access: Read \n", "14 1.100000e-06 Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN... \n", "15 7.000000e-07 NaN \n", "16 1.800000e-06 Desired Access: Read \n", "17 1.100000e-06 Type: REG_SZ, Length: 202, Data: \\Registry\\Mac... \n", "18 8.000000e-07 NaN \n", "19 1.100000e-06 Query: HandleTags, HandleTags: 0x0 \n", "20 3.700000e-06 Desired Access: Query Value \n", "21 3.300000e-06 Desired Access: Query Value \n", "22 6.200000e-06 Type: REG_BINARY, Length: 4, Data: 00 00 00 40 \n", "23 1.500000e-06 Length: 144 \n", "24 1.400000e-06 Type: REG_MULTI_SZ, Length: 142, Data: igdumdi... \n", "25 7.000000e-07 NaN \n", "26 1.800000e-06 Desired Access: Read, Maximum Allowed \n", "27 1.100000e-06 Type: REG_DWORD, Length: 4, Data: 10 \n", "28 7.000000e-07 NaN \n", "29 1.500000e-06 Desired Access: Read \n", "... ... ... \n", "75083 1.100000e-06 NaN \n", "75084 2.200000e-06 Desired Access: Read \n", "75085 1.500000e-06 Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN... \n", "75086 1.000000e-06 NaN \n", "75087 2.900000e-06 Desired Access: Read \n", "75088 1.800000e-06 Type: REG_SZ, Length: 202, Data: \\Registry\\Mac... \n", "75089 8.000000e-07 NaN \n", "75090 1.500000e-06 Query: HandleTags, HandleTags: 0x0 \n", "75091 5.500000e-06 Desired Access: Query Value \n", "75092 4.700000e-06 Desired Access: Query Value \n", "75093 9.400000e-06 Type: REG_BINARY, Length: 4, Data: 00 00 00 40 \n", "75094 2.200000e-06 Length: 144 \n", "75095 2.200000e-06 Type: REG_MULTI_SZ, Length: 142, Data: igdumdi... \n", "75096 1.400000e-06 NaN \n", "75097 3.300000e-06 Desired Access: Read, Maximum Allowed \n", "75098 1.500000e-06 Type: REG_DWORD, Length: 4, Data: 10 \n", "75099 1.100000e-06 NaN \n", "75100 2.500000e-06 Desired Access: Read \n", "75101 1.800000e-06 Type: REG_SZ, Length: 202, Data: \\Registry\\Mac... \n", "75102 4.000000e-06 Desired Access: Read \n", "75103 4.000000e-06 Desired Access: Read \n", "75104 1.100000e-06 NaN \n", "75105 9.900000e-06 Length: 52 \n", "75106 1.000000e-06 NaN \n", "75107 2.200000e-06 Desired Access: Read \n", "75108 1.900000e-06 Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN... \n", "75109 1.100000e-06 NaN \n", "75110 2.200000e-06 Desired Access: Read \n", "75111 1.400000e-06 Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN... \n", "75112 1.100000e-06 NaN \n", "\n", " New Column \n", "0 RegOpenKe \n", "1 RegQueryValu \n", "2 RegCloseKe \n", "3 RegOpenKe \n", "4 RegQueryValu \n", "5 RegOpenKe \n", "6 RegOpenKe \n", "7 RegCloseKe \n", "8 RegQueryValu \n", "9 RegCloseKe \n", "10 RegOpenKe \n", "11 RegQueryValu \n", "12 RegCloseKe \n", "13 RegOpenKe \n", "14 RegQueryValu \n", "15 RegCloseKe \n", "16 RegOpenKe \n", "17 RegQueryValu \n", "18 RegCloseKe \n", "19 RegQueryKe \n", "20 RegOpenKe \n", "21 RegOpenKe \n", "22 RegQueryValu \n", "23 RegQueryValu \n", "24 RegQueryValu \n", "25 RegCloseKe \n", "26 RegOpenKe \n", "27 RegQueryValu \n", "28 RegCloseKe \n", "29 RegOpenKe \n", "... ... \n", "75083 RegCloseKe \n", "75084 RegOpenKe \n", "75085 RegQueryValu \n", "75086 RegCloseKe \n", "75087 RegOpenKe \n", "75088 RegQueryValu \n", "75089 RegCloseKe \n", "75090 RegQueryKe \n", "75091 RegOpenKe \n", "75092 RegOpenKe \n", "75093 RegQueryValu \n", "75094 RegQueryValu \n", "75095 RegQueryValu \n", "75096 RegCloseKe \n", "75097 RegOpenKe \n", "75098 RegQueryValu \n", "75099 RegCloseKe \n", "75100 RegOpenKe \n", "75101 RegQueryValu \n", "75102 RegOpenKe \n", "75103 RegOpenKe \n", "75104 RegCloseKe \n", "75105 RegQueryValu \n", "75106 RegCloseKe \n", "75107 RegOpenKe \n", "75108 RegQueryValu \n", "75109 RegCloseKe \n", "75110 RegOpenKe \n", "75111 RegQueryValu \n", "75112 RegCloseKe \n", "\n", "[75113 rows x 10 columns]" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Index([u'Sequence', u'Time of Day', u'Process Name', u'PID', u'Operation',\n", " u'Path', u'Result', u'Duration', u'Detail', u'New Column'],\n", " dtype='object')" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.columns" ] }, { "cell_type": "code", "execution_count": 75, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SequenceTime of DayProcess NamePIDOperationPathResultDurationDetail
0NaN20:35:12,0034072Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VIDEOSUCCESS5.900000e-06Desired Access: Read, Maximum Allowed
1NaN20:35:12,0034247Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumberSUCCESS2.200000e-06Type: REG_DWORD, Length: 4, Data: 10
2NaN20:35:12,0034379Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS7.000000e-07NaN
3NaN20:35:12,0034510Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VideoSUCCESS1.800000e-06Desired Access: Read
4NaN20:35:12,0034597Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4SUCCESS1.900000e-06Type: REG_SZ, Length: 202, Data: \\Registry\\Mac...
5NaN20:35:12,0034721Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7...REPARSE4.800000e-06Desired Access: Read
6NaN20:35:12,0034835Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7...SUCCESS3.600000e-06Desired Access: Read
7NaN20:35:12,0034955Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS7.000000e-07NaN
8NaN20:35:12,0035031Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...NAME NOT FOUND7.700000e-06Length: 52
9NaN20:35:12,0035181Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS7.000000e-07NaN
10NaN20:35:12,0035287Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS2.200000e-06Desired Access: Read
11NaN20:35:12,0035381Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.500000e-06Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN...
12NaN20:35:12,0035476Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS8.000000e-07NaN
13NaN20:35:12,0035560Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.500000e-06Desired Access: Read
14NaN20:35:12,0035633Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.100000e-06Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN...
15NaN20:35:12,0035721Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS7.000000e-07NaN
16NaN20:35:12,0035801Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VideoSUCCESS1.800000e-06Desired Access: Read
17NaN20:35:12,0035877Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4SUCCESS1.100000e-06Type: REG_SZ, Length: 202, Data: \\Registry\\Mac...
18NaN20:35:12,0035961Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS8.000000e-07NaN
19NaN20:35:12,0036917Dwm.exe2432RegQueryKeyHKLMSUCCESS1.100000e-06Query: HandleTags, HandleTags: 0x0
20NaN20:35:12,0037011Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Control\\Video\\{7...REPARSE3.700000e-06Desired Access: Query Value
21NaN20:35:12,0037106Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Control\\Video\\{7...SUCCESS3.300000e-06Desired Access: Query Value
22NaN20:35:12,0037216Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS6.200000e-06Type: REG_BINARY, Length: 4, Data: 00 00 00 40
23NaN20:35:12,0037336Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...BUFFER OVERFLOW1.500000e-06Length: 144
24NaN20:35:12,0037420Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS1.400000e-06Type: REG_MULTI_SZ, Length: 142, Data: igdumdi...
25NaN20:35:12,0037504Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS7.000000e-07NaN
26NaN20:35:12,0037606Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VIDEOSUCCESS1.800000e-06Desired Access: Read, Maximum Allowed
27NaN20:35:12,0037686Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumberSUCCESS1.100000e-06Type: REG_DWORD, Length: 4, Data: 10
28NaN20:35:12,0037770Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS7.000000e-07NaN
29NaN20:35:12,0037861Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VideoSUCCESS1.500000e-06Desired Access: Read
..............................
75083NaN20:35:18,4282281Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.100000e-06NaN
75084NaN20:35:18,4282412Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS2.200000e-06Desired Access: Read
75085NaN20:35:18,4282536Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.500000e-06Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN...
75086NaN20:35:18,4282675Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.000000e-06NaN
75087NaN20:35:18,4282802Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VideoSUCCESS2.900000e-06Desired Access: Read
75088NaN20:35:18,4282926Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4SUCCESS1.800000e-06Type: REG_SZ, Length: 202, Data: \\Registry\\Mac...
75089NaN20:35:18,4283068Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS8.000000e-07NaN
75090NaN20:35:18,4283830Dwm.exe2432RegQueryKeyHKLMSUCCESS1.500000e-06Query: HandleTags, HandleTags: 0x0
75091NaN20:35:18,4283969Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Control\\Video\\{7...REPARSE5.500000e-06Desired Access: Query Value
75092NaN20:35:18,4284119Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Control\\Video\\{7...SUCCESS4.700000e-06Desired Access: Query Value
75093NaN20:35:18,4284283Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS9.400000e-06Type: REG_BINARY, Length: 4, Data: 00 00 00 40
75094NaN20:35:18,4284472Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...BUFFER OVERFLOW2.200000e-06Length: 144
75095NaN20:35:18,4284585Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS2.200000e-06Type: REG_MULTI_SZ, Length: 142, Data: igdumdi...
75096NaN20:35:18,4284713Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS1.400000e-06NaN
75097NaN20:35:18,4284884Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VIDEOSUCCESS3.300000e-06Desired Access: Read, Maximum Allowed
75098NaN20:35:18,4285019Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumberSUCCESS1.500000e-06Type: REG_DWORD, Length: 4, Data: 10
75099NaN20:35:18,4285161Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS1.100000e-06NaN
75100NaN20:35:18,4285304Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VideoSUCCESS2.500000e-06Desired Access: Read
75101NaN20:35:18,4285428Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video5SUCCESS1.800000e-06Type: REG_SZ, Length: 202, Data: \\Registry\\Mac...
75102NaN20:35:18,4285595Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7...REPARSE4.000000e-06Desired Access: Read
75103NaN20:35:18,4285734Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7...SUCCESS4.000000e-06Desired Access: Read
75104NaN20:35:18,4285902Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS1.100000e-06NaN
75105NaN20:35:18,4286007Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...NAME NOT FOUND9.900000e-06Length: 52
75106NaN20:35:18,4286223Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4...SUCCESS1.000000e-06NaN
75107NaN20:35:18,4286354Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS2.200000e-06Desired Access: Read
75108NaN20:35:18,4286481Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.900000e-06Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN...
75109NaN20:35:18,4286624Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.100000e-06NaN
75110NaN20:35:18,4286748Dwm.exe2432RegOpenKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS2.200000e-06Desired Access: Read
75111NaN20:35:18,4286879Dwm.exe2432RegQueryValueHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.400000e-06Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN...
75112NaN20:35:18,4287014Dwm.exe2432RegCloseKeyHKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808...SUCCESS1.100000e-06NaN
\n", "

75113 rows × 9 columns

\n", "
" ], "text/plain": [ " Sequence Time of Day Process Name PID Operation \\\n", "0 NaN 20:35:12,0034072 Dwm.exe 2432 RegOpenKey \n", "1 NaN 20:35:12,0034247 Dwm.exe 2432 RegQueryValue \n", "2 NaN 20:35:12,0034379 Dwm.exe 2432 RegCloseKey \n", "3 NaN 20:35:12,0034510 Dwm.exe 2432 RegOpenKey \n", "4 NaN 20:35:12,0034597 Dwm.exe 2432 RegQueryValue \n", "5 NaN 20:35:12,0034721 Dwm.exe 2432 RegOpenKey \n", "6 NaN 20:35:12,0034835 Dwm.exe 2432 RegOpenKey \n", "7 NaN 20:35:12,0034955 Dwm.exe 2432 RegCloseKey \n", "8 NaN 20:35:12,0035031 Dwm.exe 2432 RegQueryValue \n", "9 NaN 20:35:12,0035181 Dwm.exe 2432 RegCloseKey \n", "10 NaN 20:35:12,0035287 Dwm.exe 2432 RegOpenKey \n", "11 NaN 20:35:12,0035381 Dwm.exe 2432 RegQueryValue \n", "12 NaN 20:35:12,0035476 Dwm.exe 2432 RegCloseKey \n", "13 NaN 20:35:12,0035560 Dwm.exe 2432 RegOpenKey \n", "14 NaN 20:35:12,0035633 Dwm.exe 2432 RegQueryValue \n", "15 NaN 20:35:12,0035721 Dwm.exe 2432 RegCloseKey \n", "16 NaN 20:35:12,0035801 Dwm.exe 2432 RegOpenKey \n", "17 NaN 20:35:12,0035877 Dwm.exe 2432 RegQueryValue \n", "18 NaN 20:35:12,0035961 Dwm.exe 2432 RegCloseKey \n", "19 NaN 20:35:12,0036917 Dwm.exe 2432 RegQueryKey \n", "20 NaN 20:35:12,0037011 Dwm.exe 2432 RegOpenKey \n", "21 NaN 20:35:12,0037106 Dwm.exe 2432 RegOpenKey \n", "22 NaN 20:35:12,0037216 Dwm.exe 2432 RegQueryValue \n", "23 NaN 20:35:12,0037336 Dwm.exe 2432 RegQueryValue \n", "24 NaN 20:35:12,0037420 Dwm.exe 2432 RegQueryValue \n", "25 NaN 20:35:12,0037504 Dwm.exe 2432 RegCloseKey \n", "26 NaN 20:35:12,0037606 Dwm.exe 2432 RegOpenKey \n", "27 NaN 20:35:12,0037686 Dwm.exe 2432 RegQueryValue \n", "28 NaN 20:35:12,0037770 Dwm.exe 2432 RegCloseKey \n", "29 NaN 20:35:12,0037861 Dwm.exe 2432 RegOpenKey \n", "... ... ... ... ... ... \n", "75083 NaN 20:35:18,4282281 Dwm.exe 2432 RegCloseKey \n", "75084 NaN 20:35:18,4282412 Dwm.exe 2432 RegOpenKey \n", "75085 NaN 20:35:18,4282536 Dwm.exe 2432 RegQueryValue \n", "75086 NaN 20:35:18,4282675 Dwm.exe 2432 RegCloseKey \n", "75087 NaN 20:35:18,4282802 Dwm.exe 2432 RegOpenKey \n", "75088 NaN 20:35:18,4282926 Dwm.exe 2432 RegQueryValue \n", "75089 NaN 20:35:18,4283068 Dwm.exe 2432 RegCloseKey \n", "75090 NaN 20:35:18,4283830 Dwm.exe 2432 RegQueryKey \n", "75091 NaN 20:35:18,4283969 Dwm.exe 2432 RegOpenKey \n", "75092 NaN 20:35:18,4284119 Dwm.exe 2432 RegOpenKey \n", "75093 NaN 20:35:18,4284283 Dwm.exe 2432 RegQueryValue \n", "75094 NaN 20:35:18,4284472 Dwm.exe 2432 RegQueryValue \n", "75095 NaN 20:35:18,4284585 Dwm.exe 2432 RegQueryValue \n", "75096 NaN 20:35:18,4284713 Dwm.exe 2432 RegCloseKey \n", "75097 NaN 20:35:18,4284884 Dwm.exe 2432 RegOpenKey \n", "75098 NaN 20:35:18,4285019 Dwm.exe 2432 RegQueryValue \n", "75099 NaN 20:35:18,4285161 Dwm.exe 2432 RegCloseKey \n", "75100 NaN 20:35:18,4285304 Dwm.exe 2432 RegOpenKey \n", "75101 NaN 20:35:18,4285428 Dwm.exe 2432 RegQueryValue \n", "75102 NaN 20:35:18,4285595 Dwm.exe 2432 RegOpenKey \n", "75103 NaN 20:35:18,4285734 Dwm.exe 2432 RegOpenKey \n", "75104 NaN 20:35:18,4285902 Dwm.exe 2432 RegCloseKey \n", "75105 NaN 20:35:18,4286007 Dwm.exe 2432 RegQueryValue \n", "75106 NaN 20:35:18,4286223 Dwm.exe 2432 RegCloseKey \n", "75107 NaN 20:35:18,4286354 Dwm.exe 2432 RegOpenKey \n", "75108 NaN 20:35:18,4286481 Dwm.exe 2432 RegQueryValue \n", "75109 NaN 20:35:18,4286624 Dwm.exe 2432 RegCloseKey \n", "75110 NaN 20:35:18,4286748 Dwm.exe 2432 RegOpenKey \n", "75111 NaN 20:35:18,4286879 Dwm.exe 2432 RegQueryValue \n", "75112 NaN 20:35:18,4287014 Dwm.exe 2432 RegCloseKey \n", "\n", " Path Result \\\n", "0 HKLM\\Hardware\\DeviceMap\\VIDEO SUCCESS \n", "1 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumber SUCCESS \n", "2 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "3 HKLM\\Hardware\\DeviceMap\\Video SUCCESS \n", "4 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4 SUCCESS \n", "5 HKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7... REPARSE \n", "6 HKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7... SUCCESS \n", "7 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "8 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... NAME NOT FOUND \n", "9 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "10 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "11 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "12 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "13 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "14 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "15 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "16 HKLM\\Hardware\\DeviceMap\\Video SUCCESS \n", "17 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4 SUCCESS \n", "18 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "19 HKLM SUCCESS \n", "20 HKLM\\System\\CurrentControlSet\\Control\\Video\\{7... REPARSE \n", "21 HKLM\\System\\CurrentControlSet\\Control\\Video\\{7... SUCCESS \n", "22 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "23 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... BUFFER OVERFLOW \n", "24 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "25 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "26 HKLM\\Hardware\\DeviceMap\\VIDEO SUCCESS \n", "27 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumber SUCCESS \n", "28 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "29 HKLM\\Hardware\\DeviceMap\\Video SUCCESS \n", "... ... ... \n", "75083 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75084 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75085 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75086 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75087 HKLM\\Hardware\\DeviceMap\\Video SUCCESS \n", "75088 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4 SUCCESS \n", "75089 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "75090 HKLM SUCCESS \n", "75091 HKLM\\System\\CurrentControlSet\\Control\\Video\\{7... REPARSE \n", "75092 HKLM\\System\\CurrentControlSet\\Control\\Video\\{7... SUCCESS \n", "75093 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "75094 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... BUFFER OVERFLOW \n", "75095 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "75096 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "75097 HKLM\\Hardware\\DeviceMap\\VIDEO SUCCESS \n", "75098 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumber SUCCESS \n", "75099 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "75100 HKLM\\Hardware\\DeviceMap\\Video SUCCESS \n", "75101 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video5 SUCCESS \n", "75102 HKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7... REPARSE \n", "75103 HKLM\\System\\CurrentControlSet\\CONTROL\\VIDEO\\{7... SUCCESS \n", "75104 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS \n", "75105 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... NAME NOT FOUND \n", "75106 HKLM\\System\\CurrentControlSet\\Control\\CLASS\\{4... SUCCESS \n", "75107 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75108 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75109 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75110 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75111 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "75112 HKLM\\System\\CurrentControlSet\\Enum\\PCI\\VEN_808... SUCCESS \n", "\n", " Duration Detail \n", "0 5.900000e-06 Desired Access: Read, Maximum Allowed \n", "1 2.200000e-06 Type: REG_DWORD, Length: 4, Data: 10 \n", "2 7.000000e-07 NaN \n", "3 1.800000e-06 Desired Access: Read \n", "4 1.900000e-06 Type: REG_SZ, Length: 202, Data: \\Registry\\Mac... \n", "5 4.800000e-06 Desired Access: Read \n", "6 3.600000e-06 Desired Access: Read \n", "7 7.000000e-07 NaN \n", "8 7.700000e-06 Length: 52 \n", "9 7.000000e-07 NaN \n", "10 2.200000e-06 Desired Access: Read \n", "11 1.500000e-06 Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN... \n", "12 8.000000e-07 NaN \n", "13 1.500000e-06 Desired Access: Read \n", "14 1.100000e-06 Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN... \n", "15 7.000000e-07 NaN \n", "16 1.800000e-06 Desired Access: Read \n", "17 1.100000e-06 Type: REG_SZ, Length: 202, Data: \\Registry\\Mac... \n", "18 8.000000e-07 NaN \n", "19 1.100000e-06 Query: HandleTags, HandleTags: 0x0 \n", "20 3.700000e-06 Desired Access: Query Value \n", "21 3.300000e-06 Desired Access: Query Value \n", "22 6.200000e-06 Type: REG_BINARY, Length: 4, Data: 00 00 00 40 \n", "23 1.500000e-06 Length: 144 \n", "24 1.400000e-06 Type: REG_MULTI_SZ, Length: 142, Data: igdumdi... \n", "25 7.000000e-07 NaN \n", "26 1.800000e-06 Desired Access: Read, Maximum Allowed \n", "27 1.100000e-06 Type: REG_DWORD, Length: 4, Data: 10 \n", "28 7.000000e-07 NaN \n", "29 1.500000e-06 Desired Access: Read \n", "... ... ... \n", "75083 1.100000e-06 NaN \n", "75084 2.200000e-06 Desired Access: Read \n", "75085 1.500000e-06 Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN... \n", "75086 1.000000e-06 NaN \n", "75087 2.900000e-06 Desired Access: Read \n", "75088 1.800000e-06 Type: REG_SZ, Length: 202, Data: \\Registry\\Mac... \n", "75089 8.000000e-07 NaN \n", "75090 1.500000e-06 Query: HandleTags, HandleTags: 0x0 \n", "75091 5.500000e-06 Desired Access: Query Value \n", "75092 4.700000e-06 Desired Access: Query Value \n", "75093 9.400000e-06 Type: REG_BINARY, Length: 4, Data: 00 00 00 40 \n", "75094 2.200000e-06 Length: 144 \n", "75095 2.200000e-06 Type: REG_MULTI_SZ, Length: 142, Data: igdumdi... \n", "75096 1.400000e-06 NaN \n", "75097 3.300000e-06 Desired Access: Read, Maximum Allowed \n", "75098 1.500000e-06 Type: REG_DWORD, Length: 4, Data: 10 \n", "75099 1.100000e-06 NaN \n", "75100 2.500000e-06 Desired Access: Read \n", "75101 1.800000e-06 Type: REG_SZ, Length: 202, Data: \\Registry\\Mac... \n", "75102 4.000000e-06 Desired Access: Read \n", "75103 4.000000e-06 Desired Access: Read \n", "75104 1.100000e-06 NaN \n", "75105 9.900000e-06 Length: 52 \n", "75106 1.000000e-06 NaN \n", "75107 2.200000e-06 Desired Access: Read \n", "75108 1.900000e-06 Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN... \n", "75109 1.100000e-06 NaN \n", "75110 2.200000e-06 Desired Access: Read \n", "75111 1.400000e-06 Type: REG_MULTI_SZ, Length: 292, Data: PCI\\VEN... \n", "75112 1.100000e-06 NaN \n", "\n", "[75113 rows x 9 columns]" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop('New Column', 1).head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Продемонстрируем работу с `pandas` на примере файла лога Sysinternals Process Monitor, записанного при попытке исполнить `import magic` без правильных телодвижений.\n", "\n", "Фильтр по колонке `df.ColName` или `df['ColName']`, `df[['ColName1', 'ColName2']]`, если их несколько.\n", "\n", "Фильтр по строкам `df[mask]`, где `mask` какое-то условие над столбцами, например, `df[~(df.ColName1 == 5) & (df.ColName2 < 5)]`.\n", "\n", "Уникальная выборка `df[condition][columns].unique()` — возвращает `array`.\n", "\n", "Сортировка по столбцу `df.sort_values('ColName', ascending=False)` (по умолчанию `ascending=False`); имена колонок и параметр ascending могут быть списками.\n", "\n", "Проверка на вхождение значения столбца в список `df.ColName.isin([values, ...])`.\n", "\n", "Группировка `df.groupby(column_or_columns)` возвращает `pandas.core.groupby.DataFrameGroupBy object`, для получения из него `DataFrame` надо использовать какую-нибудь агрегирующую функцию (по оставшимся несгруппированными столбцам), например\n", "\n", "* `.sum()`, `min()`, `max()`, `idxmin()`, `idxmax()`, `mean()`, `median()`\n", "* `.size()` (возвращает `pandas.core.series.Series`, преобразовать в `DataFrame` вызовом `to_frame('SizeColumnName')`)\n", "* `.count()` (число не NULL/nan записей)\n", "* `.agg({'ColumnName': ['min', 'max', 'mean', 'median', ...]})`\n", "\n", "Вызов `groupby` делает значения колонок группировки индексами строк. Их можно вернуть обратно в значения строк вызовом `.reset_index()`.\n", "\n", "Группы можно отфильтровать вызовом `df.groupby(columns).filter(callback)`, где `callback` принимает `DataFrame` для каждой группы и возвращает, включать ли ее в состав результирующего (несгруппированного!) `DataFrame`.\n", "\n", "Топы можно получать `df.nlargest(count, column)` или `.nsmallest`.\n", "\n", "Поменять местами строки и столбцы можно `.T`.\n", "\n", "Удалить строку `df.drop([index, ...])`\n", "\n", "Удалить столбец `df.drop([column, ...], axis=1)`" ] }, { "cell_type": "code", "execution_count": 44, "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", "
ab
first12
second46
third611
\n", "
" ], "text/plain": [ " a b\n", "first 1 2\n", "second 4 6\n", "third 6 11" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sort_index(ascending=True).cumsum()" ] }, { "cell_type": "code", "execution_count": 39, "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", "
ab
third25
second34
first12
\n", "
" ], "text/plain": [ " a b\n", "third 2 5\n", "second 3 4\n", "first 1 2" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sort_index(ascending=False)" ] }, { "cell_type": "code", "execution_count": 40, "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", "
ab
first12
third25
second34
\n", "
" ], "text/plain": [ " a b\n", "first 1 2\n", "third 2 5\n", "second 3 4" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sort_values('a', ascending=True)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Объект `pandas.DataFrame` можно создать из массива словарей, из 2D массива, из словаря массивов," ] }, { "cell_type": "code", "execution_count": 177, "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", "
ab
012
134
\n", "
" ], "text/plain": [ " a b\n", "0 1 2\n", "1 3 4" ] }, "execution_count": 177, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pandas.DataFrame([{'a': 1, 'b': 2}, {'a': 3, 'b': 4}])" ] }, { "cell_type": "code", "execution_count": 179, "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", "
ab
012
134
\n", "
" ], "text/plain": [ " a b\n", "0 1 2\n", "1 3 4" ] }, "execution_count": 179, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pandas.DataFrame([[1, 2], [3, 4]], columns=['a', 'b'])" ] }, { "cell_type": "code", "execution_count": 180, "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", "
ab
012
134
\n", "
" ], "text/plain": [ " a b\n", "0 1 2\n", "1 3 4" ] }, "execution_count": 180, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pandas.DataFrame({'a': [1, 3], 'b': [2, 4]})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "из базы данных SQL, из файла CSV." ] }, { "cell_type": "code", "execution_count": 157, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IDTitleVolumeInfoSeriesPeriodicalAuthorYearEditionPublisherCity...MD5GenericVisibleLocatorLocalTimeAddedTimeLastModifiedCoverurlTagsIdentifierWODash
0106315Seismic Amplitude Interpretation DVDHilterman Fred J....4ECC43085AD2470DDE139CDA19515576ban02009-07-21 03:29:142013-12-30 19:27:10
1106316IOn SystemFour Reference Data...6D09557157049A450249789B67A21813ban02009-07-21 03:29:142013-12-30 19:27:10
2283888Библия Скорина...9E5D962AA7AAD600677843992580D4BEG:\\!upload\\!ADD\\Лингвистика\\Компаративистика\\И...02010-07-14 14:48:422014-09-04 03:01:57283000/9E5D962AA7AAD600677843992580D4BE-g.jpg
3198220Путь к реальности, или законы, управляющие Все...Роджер Пенроуз2007Институт компьютерных исследований, Регулярная......6D2A90A441094163C2F2DC00F287EE323B69975814637A6DF44EC9626B369589no1456630-Путь к реальности, или законы, управля...02010-02-18 15:16:042016-03-20 09:50:50198000/6d2a90a441094163c2f2dc00f287ee32.jpg9785939726184
4232910Новый ЗаветУдовский1892Университетская типогр....487313B08708B466D62A7AD2F4A15AF31534612-Чудовский Новый Завет=+chudovskij-NZ.pdf02010-02-18 15:16:042016-03-14 16:48:04232000/487313b08708b466d62a7ad2f4a15af3.jpg
\n", "

5 rows × 47 columns

\n", "
" ], "text/plain": [ " ID Title VolumeInfo \\\n", "0 106315 Seismic Amplitude Interpretation DVD \n", "1 106316 IOn SystemFour Reference Data \n", "2 283888 Библия Скорина \n", "3 198220 Путь к реальности, или законы, управляющие Все... \n", "4 232910 Новый Завет \n", "\n", " Series Periodical Author Year Edition \\\n", "0 Hilterman Fred J. \n", "1 \n", "2 \n", "3 Роджер Пенроуз 2007 \n", "4 Удовский 1892 \n", "\n", " Publisher City ... \\\n", "0 ... \n", "1 ... \n", "2 ... \n", "3 Институт компьютерных исследований, Регулярная... ... \n", "4 Университетская типогр. ... \n", "\n", " MD5 Generic Visible \\\n", "0 4ECC43085AD2470DDE139CDA19515576 ban \n", "1 6D09557157049A450249789B67A21813 ban \n", "2 9E5D962AA7AAD600677843992580D4BE \n", "3 6D2A90A441094163C2F2DC00F287EE32 3B69975814637A6DF44EC9626B369589 no \n", "4 487313B08708B466D62A7AD2F4A15AF3 \n", "\n", " Locator Local \\\n", "0 0 \n", "1 0 \n", "2 G:\\!upload\\!ADD\\Лингвистика\\Компаративистика\\И... 0 \n", "3 1456630-Путь к реальности, или законы, управля... 0 \n", "4 1534612-Чудовский Новый Завет=+chudovskij-NZ.pdf 0 \n", "\n", " TimeAdded TimeLastModified \\\n", "0 2009-07-21 03:29:14 2013-12-30 19:27:10 \n", "1 2009-07-21 03:29:14 2013-12-30 19:27:10 \n", "2 2010-07-14 14:48:42 2014-09-04 03:01:57 \n", "3 2010-02-18 15:16:04 2016-03-20 09:50:50 \n", "4 2010-02-18 15:16:04 2016-03-14 16:48:04 \n", "\n", " Coverurl Tags IdentifierWODash \n", "0 \n", "1 \n", "2 283000/9E5D962AA7AAD600677843992580D4BE-g.jpg \n", "3 198000/6d2a90a441094163c2f2dc00f287ee32.jpg 9785939726184 \n", "4 232000/487313b08708b466d62a7ad2f4a15af3.jpg \n", "\n", "[5 rows x 47 columns]" ] }, "execution_count": 157, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pymysql\n", "conn = pymysql.connect(\n", " host='localhost', user='root', password='toor', db='bookwarrior',\n", " charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)\n", "df = pandas.read_sql('SELECT * FROM updated WHERE Filesize > 1000000000', conn)\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 46, "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", "
SequenceTime of DayProcess NamePIDOperationPathResultDurationDetail
0NaN20:35:12,0034072Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VIDEOSUCCESS5.900000e-06Desired Access: Read, Maximum Allowed
1NaN20:35:12,0034247Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumberSUCCESS2.200000e-06Type: REG_DWORD, Length: 4, Data: 10
2NaN20:35:12,0034379Dwm.exe2432RegCloseKeyHKLM\\HARDWARE\\DEVICEMAP\\VIDEOSUCCESS7.000000e-07NaN
3NaN20:35:12,0034510Dwm.exe2432RegOpenKeyHKLM\\Hardware\\DeviceMap\\VideoSUCCESS1.800000e-06Desired Access: Read
4NaN20:35:12,0034597Dwm.exe2432RegQueryValueHKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4SUCCESS1.900000e-06Type: REG_SZ, Length: 202, Data: \\Registry\\Mac...
\n", "
" ], "text/plain": [ " Sequence Time of Day Process Name PID Operation \\\n", "0 NaN 20:35:12,0034072 Dwm.exe 2432 RegOpenKey \n", "1 NaN 20:35:12,0034247 Dwm.exe 2432 RegQueryValue \n", "2 NaN 20:35:12,0034379 Dwm.exe 2432 RegCloseKey \n", "3 NaN 20:35:12,0034510 Dwm.exe 2432 RegOpenKey \n", "4 NaN 20:35:12,0034597 Dwm.exe 2432 RegQueryValue \n", "\n", " Path Result Duration \\\n", "0 HKLM\\Hardware\\DeviceMap\\VIDEO SUCCESS 5.900000e-06 \n", "1 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\MaxObjectNumber SUCCESS 2.200000e-06 \n", "2 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO SUCCESS 7.000000e-07 \n", "3 HKLM\\Hardware\\DeviceMap\\Video SUCCESS 1.800000e-06 \n", "4 HKLM\\HARDWARE\\DEVICEMAP\\VIDEO\\\\Device\\Video4 SUCCESS 1.900000e-06 \n", "\n", " Detail \n", "0 Desired Access: Read, Maximum Allowed \n", "1 Type: REG_DWORD, Length: 4, Data: 10 \n", "2 NaN \n", "3 Desired Access: Read \n", "4 Type: REG_SZ, Length: 202, Data: \\Registry\\Mac... " ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pandas.read_csv('C:\\\\Users\\\\User\\\\Desktop\\\\Logfile.CSV')\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 115, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array(['Dwm.exe', 'svchost.exe', 'System', 'AIMP3.exe', 'Explorer.EXE',\n", " 'csrss.exe', 'DllHost.exe', 'taskhost.exe', 'services.exe',\n", " 'Miranda64.exe', 'VeraCrypt.exe', 'chrome.exe', 'python.exe',\n", " 'lsass.exe', 'wmiprvse.exe', 'taskmgr.exe'], dtype=object)" ] }, "execution_count": 115, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['Process Name'].unique()" ] }, { "cell_type": "code", "execution_count": 113, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Dwm.exe 62750\n", "svchost.exe 5028\n", "chrome.exe 2357\n", "wmiprvse.exe 1961\n", "python.exe 1336\n", "csrss.exe 742\n", "VeraCrypt.exe 415\n", "Explorer.EXE 144\n", "System 103\n", "AIMP3.exe 86\n", "DllHost.exe 85\n", "taskmgr.exe 49\n", "taskhost.exe 19\n", "lsass.exe 16\n", "services.exe 16\n", "Miranda64.exe 6\n", "Name: Process Name, dtype: int64" ] }, "execution_count": 113, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['Process Name'].value_counts()" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": true }, "outputs": [], "source": [ "system = [\n", " 'Dwm.exe', 'svchost.exe', 'System', 'csrss.exe', 'DllHost.exe',\n", " 'taskhost.exe', 'services.exe', 'VeraCrypt.exe', 'lsass.exe', 'wmiprvse.exe',\n", " 'taskmgr.exe'\n", "]\n", "mask = ~df['Process Name'].isin(system)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "group = df[mask][['PID', 'Process Name', 'Operation', 'Duration']].groupby(['Process Name', 'PID'])\n", "group" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "MultiIndex(levels=[[u'AIMP3.exe', u'Explorer.EXE', u'Miranda64.exe', u'chrome.exe', u'python.exe'], [2012, 2508, 3912, 4184, 4988, 7120]],\n", " labels=[[0, 1, 2, 3, 4, 4], [0, 1, 2, 3, 4, 5]],\n", " names=[u'Process Name', u'PID'])" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "group.count().index" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[86L, 144L, 6L, 2357L, 66L, 1270L]" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "group.size().tolist()" ] }, { "cell_type": "code", "execution_count": 140, "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", "
Process NamePIDSize
0AIMP3.exe201286
1Explorer.EXE2508144
2Miranda64.exe39126
3chrome.exe41842357
4python.exe498866
5python.exe71201270
\n", "
" ], "text/plain": [ " Process Name PID Size\n", "0 AIMP3.exe 2012 86\n", "1 Explorer.EXE 2508 144\n", "2 Miranda64.exe 3912 6\n", "3 chrome.exe 4184 2357\n", "4 python.exe 4988 66\n", "5 python.exe 7120 1270" ] }, "execution_count": 140, "metadata": {}, "output_type": "execute_result" } ], "source": [ "group.size().to_frame('Size').reset_index()" ] }, { "cell_type": "code", "execution_count": 141, "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", "
Process NamePIDSize
3chrome.exe41842357
5python.exe71201270
1Explorer.EXE2508144
\n", "
" ], "text/plain": [ " Process Name PID Size\n", "3 chrome.exe 4184 2357\n", "5 python.exe 7120 1270\n", "1 Explorer.EXE 2508 144" ] }, "execution_count": 141, "metadata": {}, "output_type": "execute_result" } ], "source": [ "group.size().to_frame('Size').reset_index().nlargest(3, 'Size')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Аналогично `.nsmallest`" ] }, { "cell_type": "code", "execution_count": 142, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def fi(g):\n", " return len(g) < 100" ] }, { "cell_type": "code", "execution_count": 145, "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", "
Process NameAIMP3.exeExplorer.EXEMiranda64.exechrome.exepython.exe
PID201225083912418449887120
Durationmin4.000000e-070.0000000.00.0000000.0000000.000000
mean2.125919e-040.0000200.00.0000020.0001900.000022
max1.662280e-020.0010620.00.0000350.0019880.003486
\n", "
" ], "text/plain": [ "Process Name AIMP3.exe Explorer.EXE Miranda64.exe chrome.exe python.exe \\\n", "PID 2012 2508 3912 4184 4988 \n", "Duration min 4.000000e-07 0.000000 0.0 0.000000 0.000000 \n", " mean 2.125919e-04 0.000020 0.0 0.000002 0.000190 \n", " max 1.662280e-02 0.001062 0.0 0.000035 0.001988 \n", "\n", "Process Name \n", "PID 7120 \n", "Duration min 0.000000 \n", " mean 0.000022 \n", " max 0.003486 " ] }, "execution_count": 145, "metadata": {}, "output_type": "execute_result" } ], "source": [ "group.agg({'Duration': ['min', 'mean', 'max']}).T" ] }, { "cell_type": "code", "execution_count": 150, "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", "
OperationDuration
Process NamePID
chrome.exe418423572357
python.exe712012701270
Explorer.EXE2508144144
AIMP3.exe20128686
python.exe49886666
Miranda64.exe391266
\n", "
" ], "text/plain": [ " Operation Duration\n", "Process Name PID \n", "chrome.exe 4184 2357 2357\n", "python.exe 7120 1270 1270\n", "Explorer.EXE 2508 144 144\n", "AIMP3.exe 2012 86 86\n", "python.exe 4988 66 66\n", "Miranda64.exe 3912 6 6" ] }, "execution_count": 150, "metadata": {}, "output_type": "execute_result" } ], "source": [ "group.count().sort_values('Operation', ascending=False)" ] }, { "cell_type": "code", "execution_count": 151, "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", "
Duration
Process NamePID
AIMP3.exe20120.018283
Explorer.EXE25080.002945
Miranda64.exe39120.000000
chrome.exe41840.004051
python.exe49880.012529
71200.028555
\n", "
" ], "text/plain": [ " Duration\n", "Process Name PID \n", "AIMP3.exe 2012 0.018283\n", "Explorer.EXE 2508 0.002945\n", "Miranda64.exe 3912 0.000000\n", "chrome.exe 4184 0.004051\n", "python.exe 4988 0.012529\n", " 7120 0.028555" ] }, "execution_count": 151, "metadata": {}, "output_type": "execute_result" } ], "source": [ "group.sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo Уникальные строки сразу с несколькими колонками?" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "magic1.dll 105\n", "cygmagic-1.dll 105\n", "magic 60\n", "magic1 50\n", "magic.dll 50\n", "cygmagic-1 50\n", "magic.py 13\n", "magic.pyd 10\n", "magic.pyc 10\n", "magic.pyw 9\n", "history.sqlite-journal 5\n", "interactiveshell.py 3\n", " 3\n", "site-packages 1\n", "history.sqlite-wal 1\n", " 1\n", "Name: Result, dtype: int64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def extract_filename(rec):\n", " path = df.iloc[rec].Path\n", " return os.path.split(path)[1].lower()\n", "\n", "filtr = (df['Process Name'] == 'python.exe') & (df.Operation == 'IRP_MJ_CREATE') #& (df.Result == 'NAME NOT FOUND')\n", "gr = df[filtr].groupby(extract_filename)\n", "gr['Result'].agg(len).sort_values(ascending=False)" ] }, { "cell_type": "code", "execution_count": 16, "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", "
ResultNAME INVALIDNAME NOT FOUNDPATH NOT FOUNDREPARSESUCCESS
cygmagic-1.dll0792420
magic1.dll0792420
magic0471210
cygmagic-10371210
magic.dll0371210
magic10371210
magic.pyd010000
magic.pyw09000
history.sqlite-wal01000
00100
<ipython-input-2-27b85091660b>30000
\n", "
" ], "text/plain": [ "Result NAME INVALID NAME NOT FOUND PATH NOT FOUND \\\n", "cygmagic-1.dll 0 79 24 \n", "magic1.dll 0 79 24 \n", "magic 0 47 12 \n", "cygmagic-1 0 37 12 \n", "magic.dll 0 37 12 \n", "magic1 0 37 12 \n", "magic.pyd 0 10 0 \n", "magic.pyw 0 9 0 \n", "history.sqlite-wal 0 1 0 \n", " 0 0 1 \n", " 3 0 0 \n", "\n", "Result REPARSE SUCCESS \n", "cygmagic-1.dll 2 0 \n", "magic1.dll 2 0 \n", "magic 1 0 \n", "cygmagic-1 1 0 \n", "magic.dll 1 0 \n", "magic1 1 0 \n", "magic.pyd 0 0 \n", "magic.pyw 0 0 \n", "history.sqlite-wal 0 0 \n", " 0 0 \n", " 0 0 " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "report = df[filtr].groupby([extract_filename, 'Result']).size().unstack(fill_value=0)\n", "report[report['SUCCESS'] == 0].sort_values('NAME NOT FOUND', ascending=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Из этого отчета видно, что отчаяннее всего Python пытался найти файлы magic.dll, magic1.dll или cymagic-1.dll." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo\n", "\n", "JOIN\n", "Use .merge() to join Pandas dataframes. You need to provide which columns to join on (left_on and right_on), and join type: inner (default), left (corresponds to LEFT OUTER in SQL), right (RIGHT OUTER), or outer (FULL OUTER).\n", "\n", "UNION ALL and UNION\n", "Use pd.concat() to UNION ALL two dataframes:\n", "\n", "To deduplicate things (equivalent of UNION), you’d also have to add .drop_duplicates().\n", "\n", " df[mask].Column = new_value\n", " df.drop(df[mask].index)\n", " df.NewColumn = fn(df.OldColumn)" ] }, { "cell_type": "code", "execution_count": 192, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[(75113,)]\n" ] } ], "source": [ "import sqlite3\n", "\n", "con = sqlite3.connect(':memory:')\n", "con.text_factory = str\n", "df.to_sql('df', con)\n", "\n", "cur = con.cursor()\n", "print cur.execute('select count(*) from df').fetchall()\n", "con.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "ename": "NameError", "evalue": "name 'df' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mdf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mto_csv\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mNameError\u001b[0m: name 'df' is not defined" ] } ], "source": [ "df.to_csv() # (filename)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pandas.read_excel('file.xlsx')\n", "pandas.read_excel(pandas.ExcelFile('file.xlsx'), 'Sheet1')\n", "df.to_excel('file.xlsx', sheet_name='Sheet 1')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One-hot кодирование данных" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING: pylab import has clobbered these variables: ['isnan', 'random', 'datetime', 'save']\n", "`%matplotlib` prevents importing * from pylab and numpy\n" ] } ], "source": [ "import numpy" ] }, { "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", "
cls
04
15
20
33
43
53
61
73
\n", "
" ], "text/plain": [ " cls\n", "0 4\n", "1 5\n", "2 0\n", "3 3\n", "4 3\n", "5 3\n", "6 1\n", "7 3" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numpy.random.seed(0)\n", "df = pandas.DataFrame(numpy.random.randint(0, 7, size=(8,)), columns=['cls'])\n", "df" ] }, { "cell_type": "code", "execution_count": 28, "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", "
cls_0cls_1cls_3cls_4cls_5
000010
100001
210000
300100
400100
500100
601000
700100
\n", "
" ], "text/plain": [ " cls_0 cls_1 cls_3 cls_4 cls_5\n", "0 0 0 0 1 0\n", "1 0 0 0 0 1\n", "2 1 0 0 0 0\n", "3 0 0 1 0 0\n", "4 0 0 1 0 0\n", "5 0 0 1 0 0\n", "6 0 1 0 0 0\n", "7 0 0 1 0 0" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pandas.get_dummies(df['cls'], prefix='cls')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "При выводе `pandas` может обрезать слишком длинные строки в ячейке таблицы. Изменить это поведение:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pandas.set_option('display.max_colwidth', -1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo Пример" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Иногда выборку данных над таблицей pandas быстрее записать в SQL, чем в вызовах методов `pandas`. На этот случай есть библиотека `pandasql` (входит в Anaconda)." ] }, { "cell_type": "code", "execution_count": 36, "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", "
idlocalized_namenamerolesattacktype
01Anti-MageantimageCarry Escape Nukermeleeagility
12AxeaxeInitiator Durable Disabler Junglermeleestrength
23BanebaneSupport Disabler Nuker Durablerangeintelligence
34BloodseekerbloodseekerCarry Disabler Jungler Nuker Initiatormeleeagility
45Crystal Maidencrystal_maidenSupport Disabler Nuker Junglerrangeintelligence
\n", "
" ], "text/plain": [ " id localized_name name roles \\\n", "0 1 Anti-Mage antimage Carry Escape Nuker \n", "1 2 Axe axe Initiator Durable Disabler Jungler \n", "2 3 Bane bane Support Disabler Nuker Durable \n", "3 4 Bloodseeker bloodseeker Carry Disabler Jungler Nuker Initiator \n", "4 5 Crystal Maiden crystal_maiden Support Disabler Nuker Jungler \n", "\n", " attack type \n", "0 melee agility \n", "1 melee strength \n", "2 range intelligence \n", "3 melee agility \n", "4 range intelligence " ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandasql import sqldf\n", "\n", "df = pandas.read_csv(\"files/heroes++.csv\")\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 37, "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", "
localized_nametype
53Dark Seerintelligence
82Ogre Magiintelligence
\n", "
" ], "text/plain": [ " localized_name type\n", "53 Dark Seer intelligence\n", "82 Ogre Magi intelligence" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df.roles.map(lambda x: 'Disabler' in x) & (df.attack == 'melee') & (df.type == 'intelligence')][['localized_name', 'type']]" ] }, { "cell_type": "code", "execution_count": 38, "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", "
localized_nametype
0Dark Seerintelligence
1Ogre Magiintelligence
\n", "
" ], "text/plain": [ " localized_name type\n", "0 Dark Seer intelligence\n", "1 Ogre Magi intelligence" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sqldf(\"SELECT localized_name, type FROM df WHERE attack='melee' AND roles LIKE '%Disabler%' AND type='intelligence'\", globals())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Базы данных" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Простейшей базой данных, поддерживающей SQL, является встраиваемая БД SQLite, использующая один файл для хранения реляционных таблиц. Ее можно использовать посредством встроенной библиотеки `sqlite3`. При этом никакого дополнительного ПО ставить не надо." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "meta table\n", "CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY,value LONGVARCHAR)\n", "\n", "sqlite_autoindex_meta_1 index\n", "None\n", "\n", "icon_mapping table\n", "CREATE TABLE icon_mapping(id INTEGER PRIMARY KEY,page_url LONGVARCHAR NOT NULL,icon_id INTEGER)\n", "\n", "icon_mapping_page_url_idx index\n", "CREATE INDEX icon_mapping_page_url_idx ON icon_mapping(page_url)\n", "\n", "icon_mapping_icon_id_idx index\n", "CREATE INDEX icon_mapping_icon_id_idx ON icon_mapping(icon_id)\n", "\n", "favicon_bitmaps table\n", "CREATE TABLE favicon_bitmaps(id INTEGER PRIMARY KEY,icon_id INTEGER NOT NULL,last_updated INTEGER DEFAULT 0,image_data BLOB,width INTEGER DEFAULT 0,height INTEGER DEFAULT 0, last_requested INTEGER DEFAULT 0)\n", "\n", "favicon_bitmaps_icon_id index\n", "CREATE INDEX favicon_bitmaps_icon_id ON favicon_bitmaps(icon_id)\n", "\n", "favicons table\n", "CREATE TABLE \"favicons\" (id INTEGER PRIMARY KEY,url LONGVARCHAR NOT NULL,icon_type INTEGER DEFAULT 1)\n", "\n", "favicons_url index\n", "CREATE INDEX favicons_url ON favicons(url)\n", "\n", "(('image_data', None, None, None, None, None, None),)\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACIklEQVQ4jYWSS0iUURTHf/fe8RvH\nooE2VlT2FNqUGWmNEYUR9lhEEVJhUIsoXOQuap1Rq6KHNQt3LaPAIOxhlNTChUwLMU3NR1CklUzg\n6xvPd1ro2KhTHjjcA/e8/uf/hzmmqsUiEheRLhHxp/2TiDxQ1aK5+ZmFeSJSrwuYiMRVNZKuMxnF\nz51zu9T3GX/6iPGmRqS/F5WAUMEawuUVRI5UYjwPEWl2zlUYY8YMgIjUW2vPBkPfSV6uYbKvJ+uW\n3rZSojfuABAEQdw5d96oajHQqr7P8IUqpL8X43lEjp3EK4mBtfgt75l4+4po7U3cytWZPbcyjUlT\nidv642ipDu7foX7bh2zgs92jDhHpUlWdbNmuEw15OvqweqE7ZjboCAEFADrSjs1LkRM7NAt3+bWR\nebfYudFx9XguwFqbwePs9z/mT/6NLdAHMBpex28W0/C1Y1Zy05VFM75nUwiAZVGT/v5sgdcA3Uur\nOPUrxvXOFhJD7fOmdn4LeNc5NbpkfWimv5mWZ8KXFKdfXqInOYBnc6gsPEjZ8mKssbQOtvEkMczY\nl0oK8z3un4lgppbYkhZS3Fp7bnD0Jxeba+lODmTFviFcxq29NeRHDUEQ1DnnqtNSjohIo3Nutx+k\neNz9gmf9zfQkB0ChYMkK9q2KcaLwMJFQGFV9Y4w5YIwZzyBBI2lRLcD9PVXN/SdFqlokInUi0iEi\nE9P+UUTuqurmufl/AKTzsFGmvUNUAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import sqlite3, os, IPython\n", "\n", "db_filename = os.path.join(os.getenv('LOCALAPPDATA'), 'Google\\\\Chrome\\\\User Data\\\\Default\\\\Favicons - Copy')\n", "conn = sqlite3.connect(db_filename)\n", "cur = conn.cursor()\n", "for item in cur.execute('SELECT name, type, sql FROM sqlite_master').fetchall():\n", " print item[0], item[1]\n", " print item[2]\n", " print\n", " \n", "sql = 'SELECT image_data FROM favicon_bitmaps WHERE icon_id IN (SELECT id FROM favicons WHERE url LIKE ?)'\n", "png = str(cur.execute(sql, ['%google%']).fetchone()[0])\n", "print cur.description\n", "conn.close()\n", "IPython.display.display(IPython.display.Image(png))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Обратите внимание на то, как следует осуществлять подстановку аргументов в SQL-запрос во избежание SQL injection." ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, u'abc', 3.14)\n", "(2, u'def', 2.72)\n", "(3, u'ghi', 1.62)\n" ] } ], "source": [ "conn = sqlite3.connect(':memory:')\n", "cur = conn.cursor()\n", "cur.execute('''\n", "CREATE TABLE IF NOT EXISTS sample(\n", " id INTEGER PRIMARY KEY,\n", " s TEXT,\n", " z REAL\n", ")''')\n", "cur.executemany('INSERT INTO sample VALUES(?, ?, ?)', [(1, 'abc', 3.14), (2, 'def', 2.72), (3, 'ghi', 1.62)])\n", "conn.commit()\n", "\n", "for record in cur.execute('SELECT * FROM sample'):\n", " print record\n", "\n", "conn.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Запись в БД производится только при вызове `conn.commit()`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo\n", "\n", " sqlite3.register_adapter(np.ndarray, adapt_array) # return return sqlite3.Binary(...)\n", " sqlite3.register_converter(\"array\", convert_array)\n", " create table test (idx integer primary key, X array, y integer );" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Для более серьезных нагрузок лучше подходит промышленная СУБД MySQL (https://dev.mysql.com/downloads/mysql/), клиент к которой на чистом Python реализован в библиотеке `pymysql`. Работа с ней, за исключением коннекта, идет аналогично SQLite. Отладку запросов и просмотр данных удобно вести в GUI-клиенте HeidiSQL (https://www.heidisql.com/download.php). Для запуска службы установленного MySQL под Windows можно использовать командную строку (администратор) `net start mysql`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "pip install pymysql\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo По слухам mysqlclient быстрее в 10 раз" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{u'Bookmarked': u'', u'City': u'', u'Paginated': u'', u'Author': u'Kenneth W. Ford, John Archibald Wheeler', u'Generic': u'', u'Filesize': 3075899, u'Title': u'Geons, Black Holes, and Quantum Foam: A Life in Physics', u'Commentary': u'', u'Issue': u'0', u'DPI': 0, u'ASIN': u'', u'Extension': u'epub', u'UDC': u'', u'Visible': u'', u'Local': 0, u'ISSN': u'', u'LBC': u'', u'IdentifierWODash': u'0393319911,9780393319910', u'Pages': u'416', u'TimeLastModified': datetime.datetime(2016, 3, 20, 9, 50, 50), u'Cleaned': u'', u'Publisher': u'W. W. Norton & Company', u'TimeAdded': datetime.datetime(2015, 12, 10, 2, 44, 42), u'Doi': u'', u'Language': u'English', u'Googlebookid': u'', u'OpenLibraryID': u'', u'Coverurl': u'1412000/67b0d2116b5926efc6ab990fa27f1ae7-d.jpg', u'Locator': u'0393319911GBHF.epub', u'DDC': u'', u'Identifier': u'0393319911,9780393319910', u'ID': 1412770, u'MD5': u'67b0d2116b5926efc6ab990fa27f1ae7', u'VolumeInfo': u'', u'Orientation': u'', u'Searchable': u'', u'Color': u'', u'Series': u'', u'Tags': u'Scientists Professionals Academics Biographies Memoirs History Philosophy Science Math Physics Acoustics Sound Applied Astrophysics Biophysics Chaos Theory Chemical Cosmology Dynamics Electromagnetism Electron Microscopy Energy Engineering Entropy Gas Mechanics Geophysics Gravity Light Mathematical Nanostructures Nuclear Optics Quantum Chemistry Relativity Solid State System Time Waves Wave', u'Library': u'', u'Topic': u'', u'Edition': u'1', u'Scanned': u'', u'LCC': u'', u'Periodical': u'', u'Year': u'2000', u'PagesInFile': 0}]\n" ] } ], "source": [ "import pymysql\n", "\n", "conn = pymysql.connect(\n", " host='localhost', user='root', password='toor', db='bookwarrior',\n", " charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)\n", "\n", "try:\n", " with conn.cursor() as cur:\n", " sql = 'select * from updated where title like %s'\n", " cur.execute(sql, ['%quantum foam%'])\n", " print cur.fetchall()\n", "finally:\n", " conn.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В целях консистентности `cursor.execute` возвращает число затронутых записей, а не `cursor`, а для подстановки параметров в SQL-запрос служит плейсхолдер `%s` вместо `?`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Иногда SQL нужно парсить вне БД, тогда может пригодиться библиотека `sqlparse`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "pip install sqlparse\n", "```" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import sqlparse" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0 DML 'SELECT'\n", " 1 Whitespace ' '\n", " 2 Identifier 'image_...'\n", " | 0 Name 'image_...'\n", " 3 Whitespace ' '\n", " 4 Keyword 'FROM'\n", " 5 Whitespace ' '\n", " 6 Identifier 'favico...'\n", " | 0 Name 'favico...'\n", " 7 Whitespace ' '\n", " 8 Where 'WHERE ...'\n", " | 0 Keyword 'WHERE'\n", " | 1 Whitespace ' '\n", " | 2 Identifier 'icon_id'\n", " | | 0 Name 'icon_id'\n", " | 3 Whitespace ' '\n", " | 4 Keyword 'IN'\n", " | 5 Whitespace ' '\n", " | 6 Parenthesis '(SELEC...'\n", " | | 0 Punctuation '('\n", " | | 1 DML 'SELECT'\n", " | | 2 Whitespace ' '\n", " | | 3 Identifier 'id'\n", " | | | 0 Name 'id'\n", " | | 4 Whitespace ' '\n", " | | 5 Keyword 'FROM'\n", " | | 6 Whitespace ' '\n", " | | 7 Identifier 'favico...'\n", " | | | 0 Name 'favico...'\n", " | | 8 Whitespace ' '\n", " | | 9 Where 'WHERE ...'\n", " | | | 0 Keyword 'WHERE'\n", " | | | 1 Whitespace ' '\n", " | | | 2 Identifier 'url'\n", " | | | | 0 Name 'url'\n", " | | | 3 Whitespace ' '\n", " | | | 4 Keyword 'LIKE'\n", " | | | 5 Whitespace ' '\n", " | | | 6 Identifier '\"a%\"'\n", " | | | | 0 Symbol '\"a%\"'\n", " | | 10 Punctuation ')'\n" ] } ], "source": [ "sql = 'SELECT image_data FROM favicon_bitmaps WHERE icon_id IN (SELECT id FROM favicons WHERE url LIKE \"a%\")'\n", "for item in sqlparse.parse(sql):\n", " item._pprint_tree()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Упростить отладку SQL-запросов (или написание нарратива) может IPython-расширение `ipython-sql`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "pip install ipython-sql\n", "```" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%load_ext sql\n", "%sql mysql+pymysql://root:toor@localhost/bookwarrior?charset=utf8" ] }, { "cell_type": "code", "execution_count": 110, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " * mysql+pymysql://root:***@localhost/bookwarrior?charset=utf8\n", "11 rows affected.\n" ] }, { "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", "
AuthorTitleFilesize
Academic Press IncEncyclopedia of Physical Science and Technology: v. 1-182301286288
George L Trigg; Wiley InterScience (Online service)Encyclopedia of applied physics2113552329
Библия Скорина1838268939
Birdsall, C.K; Langdon, A.BPlasma Physics via Computer Simulation1835668880
Edward W Abel; F Gordon A Stone; Geoffrey WilkinsonComprehensive organometallic chemistry II : a review of the literature 1982-19941831006210
Справочник корабельного состава военно-морских флотов мира1787078464
Jeffrey C. Posnick (Auth.)Orthognathic Surgery. Principles and Practice1748821843
Aversa, Stefano; Cascini, Leonardo; Picarelli, Luciano; Scavia, ClaudioLandslides and engineered slopes : experience, theory and practice1732284625
Essential Readings in Light Metals: Alumina and Bauxite, Volume 11731794911
Роджер ПенроузПуть к реальности, или законы, управляющие Вселенной1573490760
James W Patterson, Gregory A HoslerWeedon’s Skin Pathology1522413388
" ], "text/plain": [ "[(u'Academic Press Inc', u'Encyclopedia of Physical Science and Technology: v. 1-18', 2301286288L),\n", " (u'George L Trigg; Wiley InterScience (Online service)', u'Encyclopedia of applied physics', 2113552329),\n", " (u'', u'\\u0411\\u0438\\u0431\\u043b\\u0438\\u044f \\u0421\\u043a\\u043e\\u0440\\u0438\\u043d\\u0430', 1838268939),\n", " (u'Birdsall, C.K; Langdon, A.B', u'Plasma Physics via Computer Simulation', 1835668880),\n", " (u'Edward W Abel; F Gordon A Stone; Geoffrey Wilkinson', u'Comprehensive organometallic chemistry II : a review of the literature 1982-1994', 1831006210),\n", " (u'', u'\\u0421\\u043f\\u0440\\u0430\\u0432\\u043e\\u0447\\u043d\\u0438\\u043a \\u043a\\u043e\\u0440\\u0430\\u0431\\u0435\\u043b\\u044c\\u043d\\u043e\\u0433\\u043e \\u0441\\u043e\\u0441\\u0442\\u0430\\u0432\\u0430 \\u0432\\u043e\\u0435\\u043d\\u043d\\u043e-\\u043c\\u043e\\u0440\\u0441\\u043a\\u0438\\u0445 \\u0444\\u043b\\u043e\\u0442\\u043e\\u0432 \\u043c\\u0438\\u0440\\u0430', 1787078464),\n", " (u'Jeffrey C. Posnick (Auth.)', u'Orthognathic Surgery. Principles and Practice', 1748821843),\n", " (u'Aversa, Stefano; Cascini, Leonardo; Picarelli, Luciano; Scavia, Claudio', u'Landslides and engineered slopes : experience, theory and practice', 1732284625),\n", " (u'', u'Essential Readings in Light Metals: Alumina and Bauxite, Volume 1', 1731794911),\n", " (u'\\u0420\\u043e\\u0434\\u0436\\u0435\\u0440 \\u041f\\u0435\\u043d\\u0440\\u043e\\u0443\\u0437', u'\\u041f\\u0443\\u0442\\u044c \\u043a \\u0440\\u0435\\u0430\\u043b\\u044c\\u043d\\u043e\\u0441\\u0442\\u0438, \\u0438\\u043b\\u0438 \\u0437\\u0430\\u043a\\u043e\\u043d\\u044b, \\u0443\\u043f\\u0440\\u0430\\u0432\\u043b\\u044f\\u044e\\u0449\\u0438\\u0435 \\u0412\\u0441\\u0435\\u043b\\u0435\\u043d\\u043d\\u043e\\u0439', 1573490760),\n", " (u'James W Patterson, Gregory A Hosler', u'Weedon\\u2019s Skin Pathology', 1522413388)]" ] }, "execution_count": 110, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%sql select Author, Title, Filesize from updated where Filesize > 1500000000 order by Filesize desc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Семантические БД" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Реляционные таблицы плохо справляются с задачей хранения данных о реальном мире со сложной онтологией, неполнотой, указанием источников данных. Значительно удобнее для этих целей семантические базы данных, хранящие данные в виде троек-утверждений (субъект, предикат, объект), например, (Великобритания, имеет-столицей, Лондон). Субъект и предикат это некоторые URL (в том же синтаксисе, но не отвечают никаким реальным адресам в интернете), а объект может быть как URL, так и литералом (числом, строкой). URL кодифицируют и объекты, и их классы, и отношения, одна и та же сущность может иметь одинаковые URL в разных БД из разных источников, что позволяет их объединять в единый источник данных. Набор таких переиспользуемых URL с их семантикой и отношениями называется онтологией." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Для операций (выборка таблицы, конструирование графа, проверка существования подграфа, вставка/удаление данных) над семантическими БД используется язык SPARQL (https://www.w3.org/TR/rdf-sparql-query/), отдаленно похожий на SQL, но значительно более мощный. Ниже приведен фрагмент данных (12 стран Южной Америки, их столицы и население столиц) из семантической БД в синтаксисе Turtle (https://www.w3.org/TeamSubmission/turtle/). Он получен исполнением такого SPARQL-запроса из SPARQL endpoint одной из крупнейших открытых семантических БД DBpedia, которая хранит все размеченные данные из Wikipedia http://dbpedia.org/sparql/:\n", "\n", " CONSTRUCT WHERE {\n", " ?country a yago:WikicatMemberStatesOfTheUnitedNations, yago:WikicatCountriesInSouthAmerica ;\n", " dbo:capital ?city .\n", " OPTIONAL { ?city dbo:populationTotal ?pop . }\n", " }\n", "\n", "Тройки задаются в виде `S P O .`, либо `S P O ; P O .`, либо `S P O , O .`. Префиксы URL можно объявлять и использовать, что улучшает читабельность. Список общепринятых префиксов широко распространенных онтологий можно найти здесь http://prefix.cc/popular/all ." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```turtle\n", "@prefix rdf: .\n", "@prefix xsd: .\n", "@prefix yago: .\n", "@prefix dbr: .\n", "@prefix dbo: .\n", "\n", "dbr:Argentina\n", " rdf:type yago:WikicatCountriesInSouthAmerica , yago:WikicatMemberStatesOfTheUnitedNations ;\n", " dbo:capital\tdbr:Buenos_Aires .\n", "dbr:Buenos_Aires dbo:populationTotal \"2890151\"^^xsd:nonNegativeInteger .\n", "\n", "dbr:Bolivia\n", " rdf:type yago:WikicatMemberStatesOfTheUnitedNations , yago:WikicatCountriesInSouthAmerica ;\n", " dbo:capital\tdbr:Sucre .\n", "dbr:Sucre dbo:populationTotal \"300000\"^^xsd:nonNegativeInteger .\n", "\n", "dbr:Brazil\n", " rdf:type yago:WikicatMemberStatesOfTheUnitedNations , yago:WikicatCountriesInSouthAmerica ;\n", " dbo:capital .\n", " dbo:populationTotal \"2556149\"^^xsd:nonNegativeInteger .\n", "\n", "dbr:Chile\n", " rdf:type yago:WikicatMemberStatesOfTheUnitedNations , yago:WikicatCountriesInSouthAmerica ;\n", " dbo:capital dbr:Santiago .\n", "dbr:Santiago dbo:populationTotal \"6158080\"^^xsd:nonNegativeInteger .\n", "\n", "dbr:Colombia\n", " rdf:type yago:WikicatCountriesInSouthAmerica , yago:WikicatMemberStatesOfTheUnitedNations ;\n", " dbo:capital .\n", " dbo:populationTotal \"7878783\"^^xsd:nonNegativeInteger .\n", "\n", "dbr:Ecuador\n", " rdf:type yago:WikicatMemberStatesOfTheUnitedNations , yago:WikicatCountriesInSouthAmerica ;\n", " dbo:capital dbr:Quito .\n", "dbr:Quito dbo:populationTotal \"2671191\"^^xsd:nonNegativeInteger .\n", "\n", "dbr:Guyana\n", " rdf:type yago:WikicatMemberStatesOfTheUnitedNations , yago:WikicatCountriesInSouthAmerica ;\n", " dbo:capital .\n", " dbo:populationTotal \"118363\"^^xsd:nonNegativeInteger .\n", "\n", "dbr:Paraguay\n", " rdf:type yago:WikicatMemberStatesOfTheUnitedNations , yago:WikicatCountriesInSouthAmerica ;\n", " dbo:capital .\n", " dbo:populationTotal \"525294\"^^xsd:nonNegativeInteger .\n", "\n", "dbr:Peru\n", " rdf:type yago:WikicatMemberStatesOfTheUnitedNations , yago:WikicatCountriesInSouthAmerica ;\n", " dbo:capital dbr:Lima .\n", "dbr:Lima dbo:populationTotal \"8852000\"^^xsd:nonNegativeInteger .\n", "\n", "dbr:Suriname\n", " rdf:type yago:WikicatMemberStatesOfTheUnitedNations , yago:WikicatCountriesInSouthAmerica ;\n", " dbo:capital dbr:Paramaribo .\n", "dbr:Paramaribo dbo:populationTotal \"240924\"^^xsd:nonNegativeInteger .\n", "\n", "dbr:Uruguay\n", " rdf:type yago:WikicatMemberStatesOfTheUnitedNations , yago:WikicatCountriesInSouthAmerica ;\n", " dbo:capital dbr:Montevideo .\n", "dbr:Montevideo dbo:populationTotal \"1305082\"^^xsd:nonNegativeInteger .\n", "\n", "dbr:Venezuela\n", " rdf:type yago:WikicatMemberStatesOfTheUnitedNations , yago:WikicatCountriesInSouthAmerica ;\n", " dbo:capital dbr:Caracas .\n", "dbr:Caracas dbo:populationTotal \"3273863\"^^xsd:nonNegativeInteger .\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В качестве клиентской библиотеки к семантическим БД в Python можно использовать `SPARQLWrapper`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "pip install SPARQLWrapper\n", "```" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import SPARQLWrapper" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "sparql = SPARQLWrapper.SPARQLWrapper('http://dbpedia.org/sparql')\n", "sparql.setQuery('''\n", " PREFIX rdfs: \n", " PREFIX yago: \n", " PREFIX dbr: \n", " PREFIX dbo: \n", " \n", " SELECT * {\n", " ?country a yago:WikicatMemberStatesOfTheUnitedNations, yago:WikicatCountriesInSouthAmerica ;\n", " dbo:capital ?city ;\n", " rdfs:label ?clabel .\n", " ?city rdfs:label ?label .\n", " \n", " OPTIONAL { ?country dbo:populationTotal ?cpop . }\n", " OPTIONAL { ?city dbo:populationTotal ?pop . }\n", " \n", " FILTER (lang(?clabel) = 'ru')\n", " FILTER (lang(?label) = 'ru')\n", " }\n", " ORDER BY ?clabel\n", "''')\n", "sparql.setReturnFormat(SPARQLWrapper.JSON)\n", "results = sparql.query().convert()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{u'head': {u'link': [], u'vars': [u'country', u'city', u'clabel', u'label', u'cpop', u'pop']}, u'results': {u'distinct': False, u'bindings': [{u'city': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Buenos_Aires'}, u'country': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Argentina'}, u'pop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'2890151'}, u'label': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0411\\u0443\\u044d\\u043d\\u043e\\u0441-\\u0410\\u0439\\u0440\\u0435\\u0441'}, u'cpop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'43417000'}, u'clabel': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0410\\u0440\\u0433\\u0435\\u043d\\u0442\\u0438\\u043d\\u0430'}}, {u'city': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Sucre'}, u'country': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Bolivia'}, u'pop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'300000'}, u'label': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0421\\u0443\\u043a\\u0440\\u0435 (\\u0433\\u043e\\u0440\\u043e\\u0434)'}, u'cpop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'11410651'}, u'clabel': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0411\\u043e\\u043b\\u0438\\u0432\\u0438\\u044f'}}, {u'city': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Bras\\xedlia'}, u'country': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Brazil'}, u'pop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'2556149'}, u'label': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0411\\u0440\\u0430\\u0437\\u0438\\u043b\\u0438\\u0430'}, u'cpop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'206440850'}, u'clabel': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0411\\u0440\\u0430\\u0437\\u0438\\u043b\\u0438\\u044f'}}, {u'country': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Venezuela'}, u'label': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u041a\\u0430\\u0440\\u0430\\u043a\\u0430\\u0441'}, u'clabel': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0412\\u0435\\u043d\\u0435\\u0441\\u0443\\u044d\\u043b\\u0430'}, u'pop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'3273863'}, u'city': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Caracas'}}, {u'city': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Georgetown,_Guyana'}, u'country': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Guyana'}, u'pop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'118363'}, u'label': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0414\\u0436\\u043e\\u0440\\u0434\\u0436\\u0442\\u0430\\u0443\\u043d'}, u'cpop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'735554'}, u'clabel': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0413\\u0430\\u0439\\u0430\\u043d\\u0430'}}, {u'city': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Bogot\\xe1'}, u'country': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Colombia'}, u'pop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'7878783'}, u'label': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0411\\u043e\\u0433\\u043e\\u0442\\u0430'}, u'cpop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'48786100'}, u'clabel': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u041a\\u043e\\u043b\\u0443\\u043c\\u0431\\u0438\\u044f'}}, {u'city': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Asunci\\xf3n'}, u'country': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Paraguay'}, u'pop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'525294'}, u'label': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0410\\u0441\\u0443\\u043d\\u0441\\u044c\\u043e\\u043d'}, u'cpop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'6783272'}, u'clabel': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u041f\\u0430\\u0440\\u0430\\u0433\\u0432\\u0430\\u0439'}}, {u'city': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Lima'}, u'country': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Peru'}, u'pop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'8852000'}, u'label': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u041b\\u0438\\u043c\\u0430'}, u'cpop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'31151643'}, u'clabel': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u041f\\u0435\\u0440\\u0443'}}, {u'city': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Paramaribo'}, u'country': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Suriname'}, u'pop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'240924'}, u'label': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u041f\\u0430\\u0440\\u0430\\u043c\\u0430\\u0440\\u0438\\u0431\\u043e'}, u'cpop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'573311'}, u'clabel': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0421\\u0443\\u0440\\u0438\\u043d\\u0430\\u043c'}}, {u'city': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Montevideo'}, u'country': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Uruguay'}, u'pop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'1305082'}, u'label': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u041c\\u043e\\u043d\\u0442\\u0435\\u0432\\u0438\\u0434\\u0435\\u043e'}, u'cpop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'3427000'}, u'clabel': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0423\\u0440\\u0443\\u0433\\u0432\\u0430\\u0439'}}, {u'city': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Santiago'}, u'country': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Chile'}, u'pop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'6158080'}, u'label': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0421\\u0430\\u043d\\u0442\\u044c\\u044f\\u0433\\u043e'}, u'cpop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'18006407'}, u'clabel': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u0427\\u0438\\u043b\\u0438'}}, {u'city': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Quito'}, u'country': {u'type': u'uri', u'value': u'http://dbpedia.org/resource/Ecuador'}, u'pop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'2671191'}, u'label': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u041a\\u0438\\u0442\\u043e'}, u'cpop': {u'datatype': u'http://www.w3.org/2001/XMLSchema#nonNegativeInteger', u'type': u'typed-literal', u'value': u'16144000'}, u'clabel': {u'xml:lang': u'ru', u'type': u'literal', u'value': u'\\u042d\\u043a\\u0432\\u0430\\u0434\\u043e\\u0440'}}], u'ordered': True}}\n" ] } ], "source": [ "print results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "На таблице хорошо видна и основная проблема семантических БД — злоупотребление возможностью указывать неполные данные. Для Венесуэлы в DBpedia нет данных о численности населения." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Страна Население Столица Население столицыДоля населения столицы в населении страны
Аргентина43417000 Буэнос-Айрес 28901516.66%
Боливия 11410651 Сукре (город) 3000002.63%
Бразилия 206440850 Бразилиа 25561491.24%
Венесуэла Каракас 3273863nan%
Гайана 735554 Джорджтаун 11836316.09%
Колумбия 48786100 Богота 787878316.15%
Парагвай 6783272 Асунсьон 5252947.74%
Перу 31151643 Лима 885200028.42%
Суринам 573311 Парамарибо 24092442.02%
Уругвай 3427000 Монтевидео 130508238.08%
Чили 18006407 Сантьяго 615808034.20%
Эквадор 16144000 Кито 267119116.55%
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import tabulate, IPython, math\n", "\n", "headers=[u'Страна', u'Население', u'Столица', u'Население столицы', u'Доля населения столицы в населении страны']\n", "lines = []\n", "for result in results['results']['bindings']:\n", " clabel = result['clabel']['value']\n", " cpop = result.get('cpop', {'value': ''})['value']\n", " label = result['label']['value']\n", " pop = result['pop']['value']\n", " lines.append([clabel, cpop, label, pop, '%.2f%%' % (float(pop) / (float(cpop) if cpop else float('nan')) * 100)])\n", "\n", "IPython.display.display(IPython.display.HTML(tabulate.tabulate(lines, tablefmt='html', headers=headers)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Семантическую СУБД можно установить и локально, предпочтительным вариантом является Blazegraph (https://www.blazegraph.com/download/). Скачайте файл `blazegraph.jar`, создайте рядом файл настроек `RWStore.properties`, в котором пропишите (для Windows)\n", "\n", " com.bigdata.rwstore.RWStore.readBlobsAsync=false\n", " com.bigdata.journal.AbstractJournal.file=blazegraph.jnl\n", " \n", " com.bigdata.rdf.sail.truthMaintenance=false\n", " com.bigdata.rdf.store.AbstractTripleStore.quads=false\n", " com.bigdata.rdf.store.AbstractTripleStore.axiomsClass=com.bigdata.rdf.axioms.NoAxioms\n", "\n", "Три последние строки отключают встроенный вывод новых триплов по правилам, сильно уменьшающий производительность и как правило не нужный. Без них пришлось бы перед каждым `INSERT` вставлять `DISABLE ENTAILMENTS;`.\n", "\n", "запустите сервер командой\n", "\n", " java -server -Xmx4g -Djetty.host=127.0.0.1 -Dbigdata.propertyFile=RWStore.properties -jar blazegraph.jar\n", " \n", "Blazegraph создаст файл для данных `blazegraph.jnl` размером 210 МБ." ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{u'head': {u'vars': [u'c']}, u'results': {u'bindings': [{u'c': {u'datatype': u'http://www.w3.org/2001/XMLSchema#integer', u'type': u'literal', u'value': u'28803'}}]}}\n" ] } ], "source": [ "sparql = SPARQLWrapper.SPARQLWrapper('http://127.0.0.1:9999/blazegraph/sparql')\n", "sparql.setQuery('SELECT (COUNT(*) as ?c) { ?s ?p ?o . }')\n", "sparql.setReturnFormat(SPARQLWrapper.JSON)\n", "print sparql.query().convert()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Последний дамп Wikidata можно скачать тут https://dumps.wikimedia.org/wikidatawiki/entities/latest-all.ttl.bz2 (28 ГБ)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Библиотека `rdflib` работает с графами, которые могут быть получены из SPARQL endpoint или из файлов." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import rdflib" ] }, { "cell_type": "code", "execution_count": 170, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://dbpedia.org/resource/Semantic_Web http://www.w3.org/2000/01/rdf-schema#label Web semântica\n", "http://dbpedia.org/resource/Semantic_Web http://www.w3.org/2000/01/rdf-schema#label ويب دلالي\n", "http://dbpedia.org/resource/Semantic_Web http://www.w3.org/2000/01/rdf-schema#label Semantic Web\n", "http://dbpedia.org/resource/Semantic_Web http://www.w3.org/2000/01/rdf-schema#label Web semántica\n", "http://dbpedia.org/resource/Semantic_Web http://www.w3.org/2000/01/rdf-schema#label Semantic Web\n", "http://dbpedia.org/resource/Semantic_Web http://www.w3.org/2000/01/rdf-schema#label 语义网\n", "http://dbpedia.org/resource/Semantic_Web http://www.w3.org/2000/01/rdf-schema#label Семантическая паутина\n", "http://dbpedia.org/resource/Semantic_Web http://www.w3.org/2000/01/rdf-schema#label Web semantico\n", "http://dbpedia.org/resource/Semantic_Web http://www.w3.org/2000/01/rdf-schema#label Semantic Web\n", "http://dbpedia.org/resource/Semantic_Web http://www.w3.org/2000/01/rdf-schema#label Web sémantique\n", "http://dbpedia.org/resource/Semantic_Web http://www.w3.org/2000/01/rdf-schema#label セマンティック・ウェブ\n", "http://dbpedia.org/resource/Semantic_Web http://www.w3.org/2000/01/rdf-schema#label Semantisch web\n" ] } ], "source": [ "g = rdflib.Graph()\n", "g.load('http://dbpedia.org/resource/Semantic_Web') # g.loaf('file.ttl')\n", "\n", "for s,p,o in g:\n", " if str(p) == 'http://www.w3.org/2000/01/rdf-schema#label':\n", " print s,p,o" ] }, { "cell_type": "code", "execution_count": 177, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "@prefix dbo: .\n", "@prefix dbp: .\n", "@prefix dct: .\n", "@prefix foaf: .\n", "@prefix ns8: .\n", "@prefix owl: .\n", "@prefix prov: .\n", "@prefix rdf: .\n", "@prefix rdfs: .\n", "@prefix xml: .\n", "@prefix xsd: .\n", "\n", " dbo:genre .\n", "\n", " dbp:fields .\n", "\n", " dbo:field .\n", "\n", " dbo:wikiPageRedirects .\n", "\n", " dbo:genre .\n", "\n", " dbo:field .\n", "\n", " dbo:knownFor .\n", "\n", " dbo:academicDiscipline .\n", "\n", " dbo:field .\n", "\n", " dbo:field .\n", "\n", " dbo:field .\n", "\n", " dbo:academicDiscipline .\n", "\n", " dbo:knownFor .\n", "\n", " dbo:genre .\n", "\n", " dbo:field .\n", "\n", " dbo:field .\n", "\n", " dbo:genre .\n", "\n", " dbp:genre .\n", "\n", " dbo:field ;\n", " dbo:knownFor .\n", "\n", " dbp:genre .\n", "\n", " dbo:industry .\n", "\n", " dbo:genre .\n", "\n", " dbp:genre .\n", "\n", " dbp:domain .\n", "\n", " dbp:domain .\n", "\n", " dbp:domain .\n", "\n", " dbo:field .\n", "\n", " dbp:focus .\n", "\n", " dbp:domain .\n", "\n", " dbo:wikiPageRedirects .\n", "\n", " dbo:wikiPageRedirects .\n", "\n", " dbo:wikiPageRedirects .\n", "\n", " dbo:wikiPageRedirects .\n", "\n", " dbo:wikiPageRedirects .\n", "\n", " dbo:wikiPageRedirects .\n", "\n", " dbo:wikiPageRedirects .\n", "\n", " dbo:genre .\n", "\n", " dbo:genre .\n", "\n", " dbo:wikiPageRedirects .\n", "\n", " dbo:wikiPageRedirects .\n", "\n", " dbp:genre .\n", "\n", " dbp:genre .\n", "\n", " dbp:genre .\n", "\n", " dbo:genre .\n", "\n", " dbo:wikiPageRedirects .\n", "\n", " dbo:wikiPageRedirects .\n", "\n", " dbo:field .\n", "\n", " dbo:genre .\n", "\n", " foaf:primaryTopic .\n", "\n", " a ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " dbo:Software,\n", " owl:Thing ;\n", " rdfs:label \"ويب دلالي\"@ar,\n", " \"Semantic Web\"@de,\n", " \"Semantic Web\"@en,\n", " \"Web semántica\"@es,\n", " \"Web sémantique\"@fr,\n", " \"Web semantico\"@it,\n", " \"セマンティック・ウェブ\"@ja,\n", " \"Semantisch web\"@nl,\n", " \"Semantic Web\"@pl,\n", " \"Web semântica\"@pt,\n", " \"Семантическая паутина\"@ru,\n", " \"语义网\"@zh ;\n", " dbo:abstract \"إن ورود المعلومات على الإنترنت يزداد بشكل كبير، فقد أصبح الإنترنت مكانًا للتعبير عن الأفكار، سرد القصص، إنشاء المدونات ومشاركة الفيديوهات والصور والملفات الصوتية وما إلى ذلك. وهو ما جعل كمّ المعلومات المتوفرة للفرد الواحد أكبر بكثير ممايُمكن له أن يستفيد منه. تعريض العقل البشري لهذا الكم الهائل من المعلومات من شأنه أن يتسبب فيما يُمكن أن نصفه بوصف \\\"الضياع في فضاء المعلومات\\\"، وذلك راجع إلى بقاء المعلومات المفيدة بعيدة المنال بسبب تراكم الكثير من المعلومات غير المفيدة وغير المرتبطة بالموضوع المراد البحث عنه من قبل المستخدم.لحسن الحظ، مثلما يزداد ورود المعلومات، تزداد مقدرات معالجة المعلومات اوتوماتيكياً، لذا يوجد إمكانيات كبيرة للاستفادة من مقدرات الأتمتة هذه بهدف استخراج المعلومات والخدمات من فيضان الويب والمرتبطة بالمستخدم، وتوصيلها إليه عن طريق واجهة مستخدم معيارية (Standardized User Interface). إن أهمية الحصول على المعلومات بهذه الطريقة التكيفية يزداد بازدياد كتلة المعلومات المتوفرة على الإنترنت. تعتبر شبكة الوب أغنى المصادر المعلوماتية بما تحويه من مستندات ومعلومات ومصادر منوعة يمكن الوصول إليها عن طريق محركات البحث التقليدية. غير أن تنظيم هذه المعلومات والمستندات بصورة تسهل عملية البحث فيها والوصول إليها، يعتبر أمراً غاية في الصعوبة. يضاف إلى ذلك، أنه في ظل التزايد المستمر في حجم المعلومات المنشورة في شبكة الويب أصبح من الصعوبة بمكان قيام محركات البحث بإيجاد المعلومات المناسبة. ومن هذه المشكلة ظهرت فكرة \\\"الويب ذات الدلالات والمعاني اللفظية\\\"، أو ما يطلق عليه بالإنجليزية مصطلح (Semantic Web)، والتي هي امتداد للويب الحالية ولكن تختلف عنها بأنها تتفهم مدلولات الألفاظ والمعاني البشرية.\"@ar,\n", " \"Das Semantic Web erweitert das Web, um Daten zwischen Rechnern einfacher austauschbar und für sie einfacher verwertbar zu machen; so kann beispielsweise der Begriff „Bremen“ in einem Webdokument um die Information ergänzt werden, ob hier ein Schiffs-, Familien- oder der Stadtname gemeint ist. Diese zusätzlichen Informationen explizieren die sonst nur unstrukturiert vorkommenden Daten. Zur Realisierung dienen Standards zur Veröffentlichung und Nutzung maschinenlesbarer Daten (insbesondere RDF). Während Menschen solche Informationen aus dem gegebenen Kontext schließen können (aus dem Gesamttext, über die Art der Publikation oder der Rubrik in selbiger, Bilder etc.) und derartige Verknüpfungen unbewusst aufbauen, muss Maschinen dieser Kontext erst beigebracht werden; hierzu werden die Inhalte mit weiterführenden Informationen verknüpft. Das Semantic Web beschreibt dazu konzeptionell einen „Giant Global Graph“ (engl. ‚gigantischer globaler Graph‘). Dabei werden sämtliche Sachen von Interesse identifiziert und mit einer eindeutigen Adresse versehen als Knoten angelegt, die wiederum durch Kanten (ebenfalls jeweils eindeutig benannt) miteinander verbunden sind. Einzelne Dokumente im Web beschreiben dann eine Reihe von Kanten, und die Gesamtheit all dieser Kanten entspricht dem globalen Graphen.\"@de,\n", " \"The Semantic Web is an extension of the Web through standards by the World Wide Web Consortium (W3C). The standards promote common data formats and exchange protocols on the Web, most fundamentally the Resource Description Framework (RDF). According to the W3C, \\\"The Semantic Web provides a common framework that allows data to be shared and reused across application, enterprise, and community boundaries\\\". The term was coined by Tim Berners-Lee for a web of data that can be processed by machines.While its critics have questioned its feasibility, proponents argue that applications in industry, biology and human sciences research have already proven the validity of the original concept. The 2001 Scientific American article by Berners-Lee, Hendler, and Lassila described an expected evolution of the existing Web to a Semantic Web. In 2006, Berners-Lee and colleagues stated that: \\\"This simple idea…remains largely unrealized\\\".In 2013, more than four million Web domains contained Semantic Web markup.\"@en,\n", " \"La web semántica (del inglés semantic web) es un conjunto de actividades desarrolladas en el seno de World Wide Web Consortium con tendencia a la creación de tecnologías para publicar datos legibles por aplicaciones informáticas (máquinas en la terminología de la Web semántica). Se basa en la idea de añadir metadatos semánticos y ontológicos a la World Wide Web. Esas informaciones adicionales —que describen el contenido, el significado y la relación de los datos— se deben proporcionar de manera formal, para que así sea posible evaluarlas automáticamente por máquinas de procesamiento. El objetivo es mejorar Internet ampliando la interoperabilidad entre los sistemas informáticos usando \\\"agentes inteligentes\\\". Agentes inteligentes son programas en las computadoras que buscan información sin operadores humanos. El precursor de la idea, Tim Berners-Lee, intentó desde el principio incluir información semántica en su creación, la World Wide Web, pero por diferentes causas no fue posible. Por ese motivo introdujo el concepto de semántica con la intención de recuperar dicha omisión.\"@es,\n", " \"Le Web sémantique, ou toile sémantique, est une extension du Web standardisée par le World Wide Web Consortium (W3C). Ces standards encouragent l'utilisation de formats de données et de protocoles d'échange normés sur le Web, avec comme format de base le Resource Description Framework (RDF). Selon le W3C, « le Web sémantique fournit un modèle qui permet aux données d'être partagées et réutilisées entre plusieurs applications, entreprises et groupes d'utilisateurs ». L'expression a été inventée par Tim Berners-Lee (inventeur du Web et directeur du W3C), qui supervise le développement des technologies communes du Web sémantique. Il le définit comme « une toile de données qui peuvent être traitées directement et indirectement par des machines pour aider leurs utilisateurs à créer de nouvelles connaissances ». Pour y parvenir, le Web sémantique met en œuvre le Web des données qui consiste à lier et structurer l'information sur Internet pour accéder simplement à la connaissance qu'elle contient déjà. Alors que ses détracteurs ont mis en doute sa faisabilité, ses promoteurs font valoir que les applications réalisées par les chercheurs dans l'industrie, la biologie et les sciences humaines ont déjà prouvé la validité de ce nouveau concept. L'article original de Tim Berners-Lee en 2001 dans le Scientific American a décrit une évolution attendue du Web existant vers un Web sémantique, mais cela n'a pas encore eu lieu. En 2006, Tim Berners-Lee et ses collègues ont déclaré : « Cette idée simple… reste largement inexploitée. »\"@fr,\n", " \"Con il termine web semantico, termine coniato dal suo ideatore, Tim Berners-Lee, si intende la trasformazione del World Wide Web in un ambiente dove i documenti pubblicati (pagine HTML, file, immagini, e così via) sono associati ad informazioni e dati (metadati) che ne specificano il contesto semantico in un formato adatto all'interrogazione e l'interpretazione (es. tramite motori di ricerca) e, più in generale, all'elaborazione automatica. Con l'interpretazione del contenuto dei documenti che il Web semantico impone, saranno possibili ricerche molto più evolute delle attuali, basate sulla presenza nel documento di parole chiave, e altre operazioni specialistiche come la costruzione di reti di relazioni e connessioni tra documenti secondo logiche più elaborate del semplice collegamento ipertestuale.\"@it,\n", " \"セマンティック・ウェブ(英: semantic web)は W3C のティム・バーナーズ=リーによって提唱された、ウェブページの意味を扱うことを可能とする標準やツール群の開発によってワールド・ワイド・ウェブの利便性を向上させるプロジェクト。セマンティック・ウェブの目的はウェブページの閲覧という行為に、データの交換の側面に加えて意味の疎通を付け加えることにある。 現在のワールド・ワイド・ウェブ上のコンテンツは主にHTMLで記述されている。HTMLでは文書構造を伝えることは可能だが、個々の単語の意味をはじめとする詳細な意味を伝えることはできない。これに対し、セマンティック・ウェブはXMLによって記述した文書にRDFやOWLを用いてタグを付け加える。この、データの意味を記述したタグが文書の含む意味を形式化し、コンピュータによる自動的な情報の収集や分析へのアプローチが可能となると期待されている。オントロジーを扱う階層まではW3Cにより標準化されているが、それ以上の階層の開発は難しいため、実現と標準化には長期間掛かると予想されている。また、既存のWebサイトに対するメタデータ付与の作業が必要であるため、Web全域への普及に関しても長期間掛かると予想されている。 セマンティックウェブはXML、XML Schema、RDF、RDF Schema、OWLなどの標準およびツール群から構成されている。「OWL ウェブ・オントロジー言語概要」はセマンティックウェブにおけるこれら標準およびツール群の機能・関連について述べている。\"@ja,\n", " \"Het semantisch web verschaft een standaardframework waarmee data gedeeld en hergebruikt kunnen worden. Het is een samenwerking onder leiding van het internationale orgaan voor internetstandaarden, het World Wide Web Consortium (W3C). Het semantisch web is geen synoniem voor Web 2.0, zoals soms wel wordt verondersteld. Tim Berners-Lee beschreef het semantische web als een component van 'Web 3.0'. Soms wordt het gebruikt als synoniem voor Web 3.0, hoewel de definities verschillen.\"@nl,\n", " \"\"\"Semantic Web (sieci semantyczne) – projekt, który ma przyczynić się do utworzenia i rozpowszechnienia standardów opisywania treści w Internecie w sposób, który umożliwi maszynom i programom (np. tzw. agentom) przetwarzanie informacji w sposób odpowiedni do ich znaczenia. Wśród standardów sieci semantycznych znajdują się m.in. OWL, RDF, RDF Schema (inaczej RDFS). Znaczenia zasobów informacyjnych określa się za pomocą tzw. ontologii. Sieć semantyczna jest wizją Tima Bernersa-Lee (twórcy standardu WWW i pierwszej przeglądarki internetowej, a także przewodniczącego W3C). W swoich założeniach sieć semantyczna ma korzystać z istniejącego protokołu komunikacyjnego, na którym bazuje dzisiejszy Internet. Różnica miałaby polegać na tym, że przesyłane dane mogłyby być 'rozumiane' także przez maszyny. Owo 'rozumienie' polegałoby na tym, że dane przekazywane byłyby w postaci, w której można by powiązać ich znaczenia między sobą a także w ramach odpowiedniego kontekstu. Informacje przekazywane w ramach sieci semantycznej wymagałyby nie tylko samych danych, ale także informacji o tychże (tzw. meta-danych). To właśnie meta-dane zawierałyby sformułowania dotyczące relacji między danymi oraz prawa logiki, które można do nich zastosować. Dzięki temu można by: \n", "* powiązać różne dane znajdujące się w Internecie w ramach wspólnych jednostek znaczeniowych (np. strony dotyczące filmów, dziedzin nauki, kuchni francuskiej, etc.) \n", "* rozróżnić dane, które dla maszyn są w tej chwili nierozróżnialne ze względu na identyczny zapis tekstowy (np. zamek - urządzenie do zamykania drzwi; urządzenie do łączenia w ustalonym położeniu elementów ubrania; okazała budowla mieszkalno-obronna) \n", "* przeprowadzać na tychże danych wnioskowania, tzn. otrzymywać informacje na ich temat, które nie są zawarte explicite (np. na podstawie danej \"Ewa jest żoną Adama\", możemy też dowiedzieć się, że Ewa jest kobietą, Adam mężczyzną, Adam jest mężem Ewy, żaden inny mężczyzna nie jest mężem Ewy, etc.)\"\"\"@pl,\n", " \"A Web semântica é uma extensão da World Wide Web atual, que permitirá aos computadores e humanos trabalharem em cooperação. A Web semântica interliga significados de palavras e, neste âmbito, tem como finalidade conseguir atribuir um significado (sentido) aos conteúdos publicados na Internet de modo que seja perceptível tanto pelo humano como pelo computador. A ideia da Web Semântica surgiu em 2001, quando Tim Berners-Lee, James Hendler e Ora Lassila publicaram um artigo na revista Scientific American, intitulado: “Web Semântica: um novo formato de conteúdo para a Web que tem significado para computadores vai iniciar uma revolução de novas possibilidades.” A web semântica é a relação de interatividade do homem e o computador, onde um depende do outro para a conclusão de tarefas, assim acepção de entendimento do comando estipulado do ser humano à interface operacional da maquina dando um significado de ordem a ser executada. Sendo desta forma uma espécie de escrita de entendimento tanto para o computador e para usuário, por meio de organização das informações contida na máquina, através do seu perfil de suas últimas pesquisas realizadas, originando um repositório de dados lincados, como se fosse um verbete de enciclopédia. Podemos fazer uma assimilação da web semântica com a Ciência da Informação, pelo fato de possuir a ideia estrutural de arranjo sistêmico, agrupando um conjunto de coleta de análise, classificação, armazenamento, disseminação e recuperação de informação como se fosse uma enciclopédia. O objetivo principal da web semântica não é, pelo menos para já, treinar as máquinas para que se comportem como pessoas, mas sim desenvolver tecnologias e linguagens que tornem a informação legível para as máquinas. A finalidade passa pelo desenvolvimento de um modelo tecnológico que permita a partilha global de conhecimento assistido por máquinas (W3C 2001). A integração das linguagens ou tecnologias eXtensible Markup Language (XML), Resource Description Framework (RDF), arquiteturas de metadados, ontologias, agentes computacionais, entre outras, favorecerá o aparecimento de serviços Web que garantam a interoperabilidade e cooperação. Ultimamente tem-se associado a Web Semântica à Web 3.0, como um próximo movimento da internet depois da Web 2.0 que já inicia seu crescimento.\"@pt,\n", " \"Семанти́ческая паути́на (англ. semantic web) — это общедоступная глобальная семантическая сеть, формируемая на базе Всемирной паутины путём стандартизации представления информации в виде, пригодном для машинной обработки. В обычной Всемирной паутине, основанной на HTML-страницах, информация заложена в тексте страниц и предназначена для чтения и понимания человеком. Семантическая паутина состоит из машинно-читаемых элементов — узлов семантической сети, с опорой на онтологии. Благодаря этому программы-клиенты получают возможность непосредственно получать из интернета утверждения вида «предмет — вид взаимосвязи — другой предмет» и вычислять по ним логические заключения. Семантическая паутина работает параллельно с обычной Всемирной паутиной и на её основе, используя протокол HTTP и идентификаторы ресурсов URI. Название «Семантическая паутина» было впервые введено сэром Тимом Бернерсом-Ли (изобретателем Всемирной паутины) в сентябре 1998 года, и называется им «следующим шагом в развитии Всемирной паутины». Позже в своём блоге он предложил в качестве синонима термин «гигантский глобальный граф» (англ. giant global graph, GGG, по аналогии с WWW). Концепция семантической паутины была принята и продвигается консорциумом Всемирной паутины.\"@ru,\n", " \"\"\"语义网(Semantic Web)是由万维网联盟的蒂姆·伯纳斯-李(Tim Berners-Lee)在1998年提出的一个概念,它的核心是:通过给万维网上的文档(如: HTML)添加能够被计算机所理解的语义(Meta data),从而使整个互联网成为一个通用的信息交换媒介。语义万维网通过使用标准、置标语言和相关的处理工具来扩展万维网的能力。不过语意网概念实际上是基于很多已有技术的,也依赖于后来和text-and-markup与知识表现的综合。那些渊源甚至可以追溯到20世纪60年代末期的Allan M. Collins、M. Ross Quillian、Elizabeth F. Loftus等人的研究,还有之后70年代初R.F.Simon、R.C.Schamk、Minsky等人陆续提出的一些理论上的成果,其中Simon在进行自然语言理解的应用研究时提出了语义网络Semantic Network(不是现在的Semantic Web)的概念。当时人们甚至发明了以逻辑为基础的程序设计语言Prolog。 \"语义\"网是由比现今成熟的网际搜索工具更加行之有效的、更加广泛意义的并且自动聚集和搜集信息的文档组成的。其最基本的元素就是语义链接。 通过下列方法可以提升全球資訊網以及其互连的资源的易用性(usability)和實用性(usefulness): \n", "* \"标记\"了语义信息的文档。这可以是机器可以理解的关于文档内容(例如文档的作者,标题,简介等)的描述,或者是描述该网站所拥有的服务和资源.(注意:任何东西都是能被URI-统一资源定位符-所描述的,因此语义网能理解人物、地方、想法、類別等等) \n", "* 通用元数据詞滙表(本体论)及詞滙間的影射使得文檔作者知道如何來標記文檔方可讓機器識別他想提供的元數據. \n", "* 利用元数据为语义网用户执行任务的自动软件代理(agent). \n", "* 為自動軟件代理提供特定信息的網絡服务 (例如,可信度服務可以讓軟件代理查詢某個在线商店是否曾經有過不良紀錄或者發送過垃圾郵件).\"\"\"@zh ;\n", " dbo:thumbnail ;\n", " dbo:wikiPageExternalLink ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ;\n", " dbo:wikiPageID 29123 ;\n", " dbo:wikiPageRevisionID 741952532 ;\n", " dbp:b \"no\"^^rdf:langString ;\n", " dbp:commons \"Category:Semantic Web\"^^rdf:langString ;\n", " dbp:d \"Q54837\"^^rdf:langString ;\n", " dbp:n \"no\"^^rdf:langString ;\n", " dbp:q \"no\"^^rdf:langString ;\n", " dbp:s \"no\"^^rdf:langString ;\n", " dbp:v \"no\"^^rdf:langString ;\n", " dbp:wikt \"no\"^^rdf:langString ;\n", " dct:subject ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ;\n", " ns8:hypernym ;\n", " rdfs:comment \"إن ورود المعلومات على الإنترنت يزداد بشكل كبير، فقد أصبح الإنترنت مكانًا للتعبير عن الأفكار، سرد القصص، إنشاء المدونات ومشاركة الفيديوهات والصور والملفات الصوتية وما إلى ذلك. وهو ما جعل كمّ المعلومات المتوفرة للفرد الواحد أكبر بكثير ممايُمكن له أن يستفيد منه. تعريض العقل البشري لهذا الكم الهائل من المعلومات من شأنه أن يتسبب فيما يُمكن أن نصفه بوصف \\\"الضياع في فضاء المعلومات\\\"، وذلك راجع إلى بقاء المعلومات المفيدة بعيدة المنال بسبب تراكم الكثير من المعلومات غير المفيدة وغير المرتبطة بالموضوع المراد البحث عنه من قبل المستخدم.لحسن الحظ، مثلما يزداد ورود المعلومات، تزداد مقدرات معالجة المعلومات اوتوماتيكياً، لذا يوجد إمكانيات كبيرة للاستفادة من مقدرات الأتمتة هذه بهدف استخراج المعلومات والخدمات من فيضان الويب والمرتبطة بالمستخدم، وتوصيلها إليه عن طريق واجهة مستخدم معيارية (Standardized User Inte\"@ar,\n", " \"Das Semantic Web erweitert das Web, um Daten zwischen Rechnern einfacher austauschbar und für sie einfacher verwertbar zu machen; so kann beispielsweise der Begriff „Bremen“ in einem Webdokument um die Information ergänzt werden, ob hier ein Schiffs-, Familien- oder der Stadtname gemeint ist. Diese zusätzlichen Informationen explizieren die sonst nur unstrukturiert vorkommenden Daten. Zur Realisierung dienen Standards zur Veröffentlichung und Nutzung maschinenlesbarer Daten (insbesondere RDF).\"@de,\n", " \"The Semantic Web is an extension of the Web through standards by the World Wide Web Consortium (W3C). The standards promote common data formats and exchange protocols on the Web, most fundamentally the Resource Description Framework (RDF). The 2001 Scientific American article by Berners-Lee, Hendler, and Lassila described an expected evolution of the existing Web to a Semantic Web. In 2006, Berners-Lee and colleagues stated that: \\\"This simple idea…remains largely unrealized\\\".In 2013, more than four million Web domains contained Semantic Web markup.\"@en,\n", " \"La web semántica (del inglés semantic web) es un conjunto de actividades desarrolladas en el seno de World Wide Web Consortium con tendencia a la creación de tecnologías para publicar datos legibles por aplicaciones informáticas (máquinas en la terminología de la Web semántica). Se basa en la idea de añadir metadatos semánticos y ontológicos a la World Wide Web. Esas informaciones adicionales —que describen el contenido, el significado y la relación de los datos— se deben proporcionar de manera formal, para que así sea posible evaluarlas automáticamente por máquinas de procesamiento. El objetivo es mejorar Internet ampliando la interoperabilidad entre los sistemas informáticos usando \\\"agentes inteligentes\\\". Agentes inteligentes son programas en las computadoras que buscan información sin o\"@es,\n", " \"Le Web sémantique, ou toile sémantique, est une extension du Web standardisée par le World Wide Web Consortium (W3C). Ces standards encouragent l'utilisation de formats de données et de protocoles d'échange normés sur le Web, avec comme format de base le Resource Description Framework (RDF).\"@fr,\n", " \"Con il termine web semantico, termine coniato dal suo ideatore, Tim Berners-Lee, si intende la trasformazione del World Wide Web in un ambiente dove i documenti pubblicati (pagine HTML, file, immagini, e così via) sono associati ad informazioni e dati (metadati) che ne specificano il contesto semantico in un formato adatto all'interrogazione e l'interpretazione (es. tramite motori di ricerca) e, più in generale, all'elaborazione automatica.\"@it,\n", " \"セマンティック・ウェブ(英: semantic web)は W3C のティム・バーナーズ=リーによって提唱された、ウェブページの意味を扱うことを可能とする標準やツール群の開発によってワールド・ワイド・ウェブの利便性を向上させるプロジェクト。セマンティック・ウェブの目的はウェブページの閲覧という行為に、データの交換の側面に加えて意味の疎通を付け加えることにある。 現在のワールド・ワイド・ウェブ上のコンテンツは主にHTMLで記述されている。HTMLでは文書構造を伝えることは可能だが、個々の単語の意味をはじめとする詳細な意味を伝えることはできない。これに対し、セマンティック・ウェブはXMLによって記述した文書にRDFやOWLを用いてタグを付け加える。この、データの意味を記述したタグが文書の含む意味を形式化し、コンピュータによる自動的な情報の収集や分析へのアプローチが可能となると期待されている。オントロジーを扱う階層まではW3Cにより標準化されているが、それ以上の階層の開発は難しいため、実現と標準化には長期間掛かると予想されている。また、既存のWebサイトに対するメタデータ付与の作業が必要であるため、Web全域への普及に関しても長期間掛かると予想されている。\"@ja,\n", " \"Het semantisch web verschaft een standaardframework waarmee data gedeeld en hergebruikt kunnen worden. Het is een samenwerking onder leiding van het internationale orgaan voor internetstandaarden, het World Wide Web Consortium (W3C). Het semantisch web is geen synoniem voor Web 2.0, zoals soms wel wordt verondersteld. Tim Berners-Lee beschreef het semantische web als een component van 'Web 3.0'. Soms wordt het gebruikt als synoniem voor Web 3.0, hoewel de definities verschillen.\"@nl,\n", " \"Semantic Web (sieci semantyczne) – projekt, który ma przyczynić się do utworzenia i rozpowszechnienia standardów opisywania treści w Internecie w sposób, który umożliwi maszynom i programom (np. tzw. agentom) przetwarzanie informacji w sposób odpowiedni do ich znaczenia. Wśród standardów sieci semantycznych znajdują się m.in. OWL, RDF, RDF Schema (inaczej RDFS). Znaczenia zasobów informacyjnych określa się za pomocą tzw. ontologii.\"@pl,\n", " \"A Web semântica é uma extensão da World Wide Web atual, que permitirá aos computadores e humanos trabalharem em cooperação. A Web semântica interliga significados de palavras e, neste âmbito, tem como finalidade conseguir atribuir um significado (sentido) aos conteúdos publicados na Internet de modo que seja perceptível tanto pelo humano como pelo computador. A ideia da Web Semântica surgiu em 2001, quando Tim Berners-Lee, James Hendler e Ora Lassila publicaram um artigo na revista Scientific American, intitulado: “Web Semântica: um novo formato de conteúdo para a Web que tem significado para computadores vai iniciar uma revolução de novas possibilidades.”\"@pt,\n", " \"Семанти́ческая паути́на (англ. semantic web) — это общедоступная глобальная семантическая сеть, формируемая на базе Всемирной паутины путём стандартизации представления информации в виде, пригодном для машинной обработки.\"@ru,\n", " \"语义网(Semantic Web)是由万维网联盟的蒂姆·伯纳斯-李(Tim Berners-Lee)在1998年提出的一个概念,它的核心是:通过给万维网上的文档(如: HTML)添加能够被计算机所理解的语义(Meta data),从而使整个互联网成为一个通用的信息交换媒介。语义万维网通过使用标准、置标语言和相关的处理工具来扩展万维网的能力。不过语意网概念实际上是基于很多已有技术的,也依赖于后来和text-and-markup与知识表现的综合。那些渊源甚至可以追溯到20世纪60年代末期的Allan M. Collins、M. Ross Quillian、Elizabeth F. Loftus等人的研究,还有之后70年代初R.F.Simon、R.C.Schamk、Minsky等人陆续提出的一些理论上的成果,其中Simon在进行自然语言理解的应用研究时提出了语义网络Semantic Network(不是现在的Semantic Web)的概念。当时人们甚至发明了以逻辑为基础的程序设计语言Prolog。 \\\"语义\\\"网是由比现今成熟的网际搜索工具更加行之有效的、更加广泛意义的并且自动聚集和搜集信息的文档组成的。其最基本的元素就是语义链接。 通过下列方法可以提升全球資訊網以及其互连的资源的易用性(usability)和實用性(usefulness):\"@zh ;\n", " owl:sameAs ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ;\n", " prov:wasDerivedFrom ;\n", " foaf:depiction ;\n", " foaf:homepage ;\n", " foaf:isPrimaryTopicOf .\n", "\n", "\n" ] } ], "source": [ "print g.serialize(format='turtle')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Для подстановки пользовательских литералов в SPARQL-запрос можно использовать сериализацию литералов `rdflib`." ] }, { "cell_type": "code", "execution_count": 162, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "u''" ] }, "execution_count": 162, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rdflib.URIRef('http://ya.ru/rdf').n3()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "u'\"1267650600228229401496703205376\"^^'" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rdflib.Literal(2 ** 100).n3()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "u'\"hello\\x00\\\\\"\\u041f\\u0440\\u0438\\u0432\\u0435\\u0442\"@ru'" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rdflib.Literal('hello\\0\"Привет', lang='ru').n3()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "u'\"2018-05-18T13:32:41.819000\"^^'" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import datetime\n", "rdflib.Literal(datetime.datetime.now()).n3()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1000\n" ] } ], "source": [ "import pymysql, pandas\n", "conn = pymysql.connect(\n", " host='localhost', user='root', password='toor', db='bookwarrior',\n", " charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)\n", "df = pandas.read_sql('SELECT * FROM updated WHERE Id <= 1000', conn)\n", "data = df.to_dict('records')\n", "print len(data)" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class Blazegraph:\n", " def __init__(self, endpoint='http://localhost:9999/blazegraph/namespace/kb/sparql'):\n", " self.db = SPARQLWrapper.SPARQLWrapper(endpoint)\n", " def send(self, sparql):\n", " self.db.setQuery(sparql)\n", " self.db.method = 'POST'\n", " self.db.setReturnFormat(SPARQLWrapper.JSON)\n", " return self.db.query()\n", " def from_sparql_response(self, v):\n", " if 'datatype' in v and v['datatype'] == 'http://www.w3.org/2001/XMLSchema#integer':\n", " return int(v['value'])\n", " else:\n", " return v['value']\n", " def query(self, sparql):\n", " results = self.send(sparql).convert()\n", " return [{k: self.from_sparql_response(v) for k,v in result.iteritems()} for result in results[\"results\"][\"bindings\"]]\n", " def execute(self, sparql):\n", " return self.send(sparql).response.read()" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import os" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wall time: 4min 9s\n" ] } ], "source": [ "%%time\n", "bg = Blazegraph()\n", "for rec in data:\n", " subj = 'http://gen.lib.rus.ec/book/index.php?md5=%s' % rec['MD5'].upper()\n", " sparql_props = ['lg:%s %s' % (k, rdflib.Literal(v).n3()) for k, v in rec.items() if v != '']\n", " sparql = '''\n", " PREFIX lg: \n", " INSERT DATA { %s ''' % rdflib.URIRef(subj).n3() + ';\\n'.join(sparql_props) + ' . }'\n", " bg.queryUpdate(sparql)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{u'c': 26647}]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bg.query('SELECT (COUNT(?s) AS ?c) WHERE { ?s ?p ?o . }')" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1184866800L" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "os.path.getsize(\"C:\\\\Temp\\\\blazegraph\\\\blazegraph.jnl\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Вставка 1000 инсертами 26647 триплов 249 сек, вес БД 1.18 ГБ." ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": true }, "outputs": [], "source": [ "triples = []\n", "for i, rec in enumerate(data):\n", " subj = 'http://gen.lib.rus.ec/book/index.php?md5=%s' % rec['MD5'].upper()\n", " sparql_props = ['lg:%s %s' % (k, rdflib.Literal(v).n3()) for k, v in rec.items() if v != '']\n", " sparql = '%s ' % rdflib.URIRef(subj).n3() + ';\\n'.join(sparql_props) + ' .'\n", " triples.append(sparql)" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1000" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(triples)" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "ename": "KeyboardInterrupt", "evalue": "", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mget_ipython\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_cell_magic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mu'time'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34mu''\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34mu\"bg = Blazegraph()\\nfor rec in data:\\n subj = 'http://gen.lib.rus.ec/book/index.php?md5=%s' % rec['MD5'].upper()\\n for k, v in rec.items():\\n if v != '':\\n sparql = '''\\n PREFIX lg: \\n INSERT DATA { %s %s %s . }''' % (rdflib.URIRef(subj).n3(), 'lg:%s' % k, rdflib.Literal(v).n3())\\n bg.queryUpdate(sparql)\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\site-packages\\IPython\\core\\interactiveshell.pyc\u001b[0m in \u001b[0;36mrun_cell_magic\u001b[1;34m(self, magic_name, line, cell)\u001b[0m\n\u001b[0;32m 2291\u001b[0m \u001b[0mmagic_arg_s\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mvar_expand\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mline\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstack_depth\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2292\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbuiltin_trap\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2293\u001b[1;33m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmagic_arg_s\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcell\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2294\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2295\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m\u001b[0m in \u001b[0;36mtime\u001b[1;34m(self, line, cell, local_ns)\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\site-packages\\IPython\\core\\magic.pyc\u001b[0m in \u001b[0;36m\u001b[1;34m(f, *a, **k)\u001b[0m\n\u001b[0;32m 191\u001b[0m \u001b[1;31m# but it's overkill for just that one bit of state.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 192\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mmagic_deco\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 193\u001b[1;33m \u001b[0mcall\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mlambda\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 194\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 195\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mcallable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\site-packages\\IPython\\core\\magics\\execution.pyc\u001b[0m in \u001b[0;36mtime\u001b[1;34m(self, line, cell, local_ns)\u001b[0m\n\u001b[0;32m 1165\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1166\u001b[0m \u001b[0mst\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mclock2\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1167\u001b[1;33m \u001b[1;32mexec\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcode\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mglob\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlocal_ns\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1168\u001b[0m \u001b[0mend\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mclock2\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1169\u001b[0m \u001b[0mout\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n", "\u001b[1;32m\u001b[0m in \u001b[0;36mqueryUpdate\u001b[1;34m(self, sparql)\u001b[0m\n\u001b[0;32m 18\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m{\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfrom_sparql_response\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mv\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mv\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0miteritems\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m}\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mresults\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"results\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"bindings\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mqueryUpdate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msparql\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 20\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msparql\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32m\u001b[0m in \u001b[0;36msend\u001b[1;34m(self, sparql)\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdb\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmethod\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'POST'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdb\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msetReturnFormat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mSPARQLWrapper\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mJSON\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 8\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdb\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mquery\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 9\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mexecute\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msparql\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 10\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msparql\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mresponse\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\site-packages\\SPARQLWrapper\\Wrapper.pyc\u001b[0m in \u001b[0;36mquery\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 599\u001b[0m \u001b[1;33m@\u001b[0m\u001b[0mrtype\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mL\u001b[0m\u001b[1;33m{\u001b[0m\u001b[0mQueryResult\u001b[0m\u001b[1;33m}\u001b[0m \u001b[0minstance\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 600\u001b[0m \"\"\"\n\u001b[1;32m--> 601\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mQueryResult\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_query\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 602\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 603\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mqueryAndConvert\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\site-packages\\SPARQLWrapper\\Wrapper.pyc\u001b[0m in \u001b[0;36m_query\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 569\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 570\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 571\u001b[1;33m \u001b[0mresponse\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0murlopener\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrequest\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 572\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresponse\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreturnFormat\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 573\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0murllib2\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mHTTPError\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\urllib2.pyc\u001b[0m in \u001b[0;36murlopen\u001b[1;34m(url, data, timeout, cafile, capath, cadefault, context)\u001b[0m\n\u001b[0;32m 152\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 153\u001b[0m \u001b[0mopener\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_opener\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 154\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mopener\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0murl\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 155\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 156\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0minstall_opener\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mopener\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\urllib2.pyc\u001b[0m in \u001b[0;36mopen\u001b[1;34m(self, fullurl, data, timeout)\u001b[0m\n\u001b[0;32m 427\u001b[0m \u001b[0mreq\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmeth\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mreq\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 428\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 429\u001b[1;33m \u001b[0mresponse\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_open\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mreq\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 430\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 431\u001b[0m \u001b[1;31m# post-process response\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\urllib2.pyc\u001b[0m in \u001b[0;36m_open\u001b[1;34m(self, req, data)\u001b[0m\n\u001b[0;32m 445\u001b[0m \u001b[0mprotocol\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mreq\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_type\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 446\u001b[0m result = self._call_chain(self.handle_open, protocol, protocol +\n\u001b[1;32m--> 447\u001b[1;33m '_open', req)\n\u001b[0m\u001b[0;32m 448\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 449\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\urllib2.pyc\u001b[0m in \u001b[0;36m_call_chain\u001b[1;34m(self, chain, kind, meth_name, *args)\u001b[0m\n\u001b[0;32m 405\u001b[0m \u001b[0mfunc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mhandler\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmeth_name\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 406\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 407\u001b[1;33m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 408\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 409\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\urllib2.pyc\u001b[0m in \u001b[0;36mhttp_open\u001b[1;34m(self, req)\u001b[0m\n\u001b[0;32m 1226\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1227\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mhttp_open\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mreq\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1228\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdo_open\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mhttplib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mHTTPConnection\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mreq\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1229\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1230\u001b[0m \u001b[0mhttp_request\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mAbstractHTTPHandler\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdo_request_\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\urllib2.pyc\u001b[0m in \u001b[0;36mdo_open\u001b[1;34m(self, http_class, req, **http_conn_args)\u001b[0m\n\u001b[0;32m 1199\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1200\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1201\u001b[1;33m \u001b[0mr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mh\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetresponse\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbuffering\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1202\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;31m# buffering kw not supported\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1203\u001b[0m \u001b[0mr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mh\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetresponse\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\httplib.pyc\u001b[0m in \u001b[0;36mgetresponse\u001b[1;34m(self, buffering)\u001b[0m\n\u001b[0;32m 1134\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1135\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1136\u001b[1;33m \u001b[0mresponse\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbegin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1137\u001b[0m \u001b[1;32massert\u001b[0m \u001b[0mresponse\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwill_close\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[0m_UNKNOWN\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1138\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__state\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_CS_IDLE\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\httplib.pyc\u001b[0m in \u001b[0;36mbegin\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 451\u001b[0m \u001b[1;31m# read until we get a non-100 response\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 452\u001b[0m \u001b[1;32mwhile\u001b[0m \u001b[0mTrue\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 453\u001b[1;33m \u001b[0mversion\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstatus\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mreason\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_read_status\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 454\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mstatus\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[0mCONTINUE\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 455\u001b[0m \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\httplib.pyc\u001b[0m in \u001b[0;36m_read_status\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 407\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_read_status\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 408\u001b[0m \u001b[1;31m# Initialize with Simple-Response defaults\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 409\u001b[1;33m \u001b[0mline\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreadline\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_MAXLINE\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 410\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mline\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m>\u001b[0m \u001b[0m_MAXLINE\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 411\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mLineTooLong\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"header line\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\socket.pyc\u001b[0m in \u001b[0;36mreadline\u001b[1;34m(self, size)\u001b[0m\n\u001b[0;32m 478\u001b[0m \u001b[1;32mwhile\u001b[0m \u001b[0mTrue\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 479\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 480\u001b[1;33m \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_sock\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrecv\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_rbufsize\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 481\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0merror\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 482\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m==\u001b[0m \u001b[0mEINTR\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mKeyboardInterrupt\u001b[0m: " ] } ], "source": [ "%%time\n", "bg = Blazegraph()\n", "for rec in data:\n", " subj = 'http://gen.lib.rus.ec/book/index.php?md5=%s' % rec['MD5'].upper()\n", " for k, v in rec.items():\n", " if v != '':\n", " sparql = '''\n", " PREFIX lg: \n", " INSERT DATA { %s %s %s . }''' % (rdflib.URIRef(subj).n3(), 'lg:%s' % k, rdflib.Literal(v).n3())\n", " bg.queryUpdate(sparql)" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{u'c': 2043}]" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bg.query('SELECT (COUNT(?s) AS ?c) WHERE { ?s ?p ?o . }')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Вставка инсертом на каждый трипл ? триплов ? сек\n", "\n", "Разосрался до 2 ГБ, почти ничего не вставив.\n", "\n", "todo Некомплиментарненько" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wall time: 31.5 s\n" ] } ], "source": [ "%%time\n", "bg = Blazegraph()\n", "step = 10\n", "for i in range(0, len(triples), step):\n", " sparql = '''\n", " PREFIX lg: \n", " INSERT DATA { ''' + '\\n'.join(triples[i : i + step]) + ''' }'''\n", " bg.queryUpdate(sparql)" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{u'c': 26647}]\n", "144700736\n" ] } ], "source": [ "print bg.query('SELECT (COUNT(?s) AS ?c) WHERE { ?s ?p ?o . }')\n", "print os.path.getsize(\"C:\\\\Temp\\\\blazegraph\\\\blazegraph.jnl\")" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wall time: 1.82 s\n" ] } ], "source": [ "%%time\n", "bg = Blazegraph()\n", "step = 100\n", "for i in range(0, len(triples), step):\n", " sparql = '''\n", " PREFIX lg: \n", " DISABLE ENTAILMENTS;\n", " INSERT DATA { ''' + '\\n'.join(triples[i : i + step]) + ''' }'''\n", " bg.queryUpdate(sparql)" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{u'c': 26555}]\n", "44039504\n" ] } ], "source": [ "print bg.query('SELECT (COUNT(?s) AS ?c) WHERE { ?s ?p ?o . }')\n", "print os.path.getsize(\"C:\\\\Temp\\\\blazegraph\\\\blazegraph.jnl\")" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wall time: 17.1 s\n" ] } ], "source": [ "%%time\n", "bg = Blazegraph()\n", "step = 1\n", "for i in range(0, len(triples), step):\n", " sparql = '''\n", " PREFIX lg: \n", " INSERT DATA { ''' + '\\n'.join(triples[i : i + step]) + ''' }'''\n", " bg.queryUpdate(sparql)" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{u'c': 26555}]\n", "1184866800\n" ] } ], "source": [ "print bg.query('SELECT (COUNT(?s) AS ?c) WHERE { ?s ?p ?o . }')\n", "print os.path.getsize(\"C:\\\\Temp\\\\blazegraph\\\\blazegraph.jnl\")" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "collapsed": false }, "outputs": [], "source": [ "g = rdflib.Graph()\n", "for i, rec in enumerate(data):\n", " for k, v in rec.items():\n", " if v != '':\n", " s = 'http://gen.lib.rus.ec/book/index.php?md5=%s' % rec['MD5'].upper()\n", " p = 'http://gen.lib.rus.ec/#%s' % k\n", " o = v\n", " g.add((rdflib.URIRef(s), rdflib.URIRef(p), rdflib.Literal(o)))" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "26368" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(g)" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "collapsed": false }, "outputs": [], "source": [ "g.serialize('libgen1000.ttl', format='turtle')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Загрузка этого файла с вкладки Update в Blazegraph Workbench: modified: 26368 milliseconds: 1888, 10.5 МБ" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Поскольку SPARQL-запросы существенно свободнее по форме по сравнению с SQL, семантическая БД при изменениях вынуждена перестраивать куда более заметное количество индексов, что приводит к скорости вставки порядка 100 триплов в секунду. Большинство осмысленных данных значительно больше, поэтому их обычно загружают в семантическую БД в пакетном режиме, из файла." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo как заливать в blazegraph ttl, как генерить и читать ttl из питона, как делать запросы с квадами" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo как запретить rules.log?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo Пример CONSTRUCT, парсинга rdflib, оперирования с rdflib.Graph" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Примеры запросов вставки и удаления:\n", " \n", "```sparql\n", "INSERT DATA {\n", " dc:title \"A new book\" ;\n", " dc:creator \"A.N.Other\" .\n", "}\n", "```\n", "\n", "```sparql\n", "DELETE { ?book ?p ?v } WHERE {\n", " ?book dc:date ?date .\n", " FILTER ( ?date < \"2000-01-01T00:00:00\"^^xsd:dateTime )\n", " ?book ?p ?v\n", "}\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Документы" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### PDF" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " PyPDF2 (1.26.0)\n", " reportlab -- писать в PDF, векторная графика и все такое\n", " https://github.com/pmaupin/pdfrw pure Python library that reads and writes PDFs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### MS Word" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "doc?\n", "\n", " pip install python-docx\n", "\n", " from docx import Document\n", " from docx.shared import Inches\n", "\n", " guestnames=['Иван', 'Олег', 'Ольга', 'Мария и Александр']\n", "\n", " for x in guestnames:\n", " document = Document()\n", " document.add_heading('Приглашение на свадьбу', 0)\n", " p = document.add_paragraph(x+', спешим пригласить Вас на свадьбу') \n", " p.add_run(' Татьяны и Дмитрия Раутенко').bold = True\n", " p.add_run(', которая состоится 12.05.2017 в усадьбе Тихая роща.')\n", " document.add_heading('Мы ждём вас, на наш праздник!!!', level=1)\n", " document.add_paragraph('')\n", " document.add_picture('1.jpg', width=Inches(5.25))\n", " document.add_page_break()\n", " document.save(x+'.docx')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### MS Excel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " xlrd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### OpenDocument\n", "\n", " PyUNO" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### textract" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " textract\n", " .doc via antiword\n", " .docx via python-docx\n", " .csv .eml .json .odt .txt via python builtins\n", " .epub via ebooklib\n", " .gif .jpg .jpeg .png .tiff .tif via tesseract-ocr\n", " .html and .htm via beautifulsoup4\n", " .mp3 .ogg .wav via SpeechRecognition and sox\n", " .msg via msg-extractor\n", " .pdf via pdftotext (default) or pdfminer.six\n", " .pptx via python-pptx\n", " .ps via ps2text\n", " .rtf via unrtf\n", " .xls .xlsx via xlrd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### DjVu" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Для работы с популярным форматов сканов DjVu можно использовать библиотеку `python-djvulibre`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "http://djvu.sourceforge.net/ качаем Source TAR.GZ djvulibre-3.5.27.tar.gz\n", "распаковываем\n", "\n", "http://libjpeg.sourceforge.net/ распаковываем в c:\\Temp\\djvulibre-3.5.27\\win32\\jpeg\\jpeg-6b\\\n", "\n", "\"C:\\Temp\\djvulibre-3.5.27\\win32\\djvulibre\\djvulibre.sln\" билдим release x64\n", "\n", "переименовываем djvulibre-3.5.27/win32/djvulibre/x64/Release/libdjvulibre.lib в djvulibre.lib\n", "\n", "pip install python-djvulibre --global-option build_ext --global-option --compiler=msvc --global-option \"--include-dirs=c:/Temp/djvulibre-3.5.27\"\t --global-option \"--library-dirs=c:/Temp/djvulibre-3.5.27/win32/djvulibre/x64/Release\"\n", "\n", "скопировать libdjvulibre.dll и libjpeg.dll в Anaconda2\\Lib\\site-packages\\djvu\\\n", "```" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import djvu\n", "import djvu.decode\n", "import numpy" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "%pylab inline" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "filename = 'D:\\\\(library)\\\\(__Unsorted)\\\\P. J. Plauger Programming on purpose III essays on software technology 1994.djvu'" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3250 5010\n" ] } ], "source": [ "djvu_pixel_format = djvu.decode.PixelFormatRgbMask(0xff0000, 0xff00, 0xff, bpp=32)\n", "djvu_pixel_format.rows_top_to_bottom = 1\n", "djvu_pixel_format.y_top_to_bottom = 0\n", "img = None\n", "\n", "class Context(djvu.decode.Context):\n", " def handle_message(self, message):\n", " if isinstance(message, djvu.decode.ErrorMessage):\n", " print message\n", " # Exceptions in handle_message() are ignored, so sys.exit() wouldn't work here.\n", " os._exit(1)\n", "\n", " def process(self, djvu_path, mode):\n", " document = self.new_document(djvu.decode.FileURI(djvu_path))\n", " document.decoding_job.wait()\n", " page = document.pages[2]\n", " page_job = page.decode(wait=True)\n", " width, height = page_job.size\n", " print width, height\n", " rect = (0, 0, width, height)\n", " color_buffer = numpy.zeros((height, width), dtype=numpy.uint32)\n", " page_job.render(mode, rect, rect, djvu_pixel_format, row_alignment=1, buffer=color_buffer)\n", " return color_buffer\n", "\n", "context = Context()\n", "img = context.process(filename, djvu.decode.RENDER_COLOR) # RENDER_FOREGROUND RENDER_BACKGROUND RENDER_MASK_ONLY" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo что это?\n", "\n", " #mask_buffer = numpy.zeros((height, bytes_per_line), dtype=numpy.uint32)\n", " #if mode == djvu.decode.RENDER_FOREGROUND:\n", " # page_job.render(djvu.decode.RENDER_MASK_ONLY, rect, rect, djvu_pixel_format, row_alignment=1, buffer=mask_buffer)\n", " # mask_buffer <<= 24\n", " # color_buffer |= mask_buffer\n", " #color_buffer ^= 0xff000000\n", " #surface.write_to_png(png_path)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [], "source": [ "img3d = zeros((img.shape[0], img.shape[1], 3), dtype=uint8)\n", "img3d[:,:,0] = img >> 16\n", "img3d[:,:,1] = (img >> 8) & 0xFF\n", "img3d[:,:,2] = img & 0xFF" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtYAAARUCAYAAABSuFQvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd8VHW+//H3lExm0hupkEIICQSkBMgCgleK0hYQC9Jd\nFmmrF0S4EpGfujZwRRDZpUoRaQoISBWpAQEh1NBbEkgjIXWSTKacz+8Pbs41Aop7j8vu3vfz8eCf\n4cyZc85kHnmdyfd8j05EQERERERE/zv6h70BRERERET/DhjWREREREQaYFgTEREREWmAYU1ERERE\npAGGNRERERGRBhjWREREREQaYFgTEREREWmAYU1EREREpAGGNRERERGRBoy/ZuGgoCCJjo7+jTaF\niIiIiOifT0ZGBgoLC3W/tNyvCuvo6GgcO3bs798qIiIiIqJ/Ma1atXqg5TgUhIiIiIhIAwxrIiIi\nIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiI\niIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYi\nIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJ\niIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxr\nIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDD\nmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTA\nsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiIN\nMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhI\nAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi\n0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiI\niDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIi\nIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiI\niIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYi\nIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJ\niIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxr\nIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDD\nmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTA\nsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiIN\nMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhI\nAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi\n0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiI\niDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIi\nIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiI\niIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYi\nIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJ\niIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxrIiIiIiINMKyJiIiIiDTAsCYiIiIi0gDDmoiIiIhIAwxr\n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\nzl//+lf+8Y9/MHXqVLZv347D4eCXX35RB5plZmY2OMgwNzeXJUuWMHr0aOx2O8uXLyc5OZkJEya4\nBGK+vr7cc8897N+/n0uXLjFy5Mgb9u7V1dVx/PhxbDYb+fn55OTkkJycfMNebmfVm9LSUmpra/n5\n559JSEhwyfO32+1qJYwrV65QVFREq1at8PLyYubMmRw7dozPPvuMNm3a8NhjjzWYB26z2dTP3WKx\ncOzYMYKDgxt8X85rzWw2q9ecM2D39/dn6NChzJ07l5kzZzJlyhR8fHzIyckhPj6eTp06UVBQgM1m\n4+DBg9xzzz14enpit9sxm82UlZVx9epVYmJi1O/o2rVrCQsLIzExkYSEBK5evUp1dTUajYby8nLC\nwsIYO3YsO3fuZM6cOXh6etK7d29qamooKCige/fuDBo0iBUrVvD2228TEhJCSkoKFRUVFBcXM3z4\ncDWX+nrOsnOFhYVYrVb2799Pv379XM6fcwyA8+nYpUuXCAwMpLi4GJvNhsFgwGQysXXrVj777DPs\ndjuZmZncdtttWK1WLl68SHV1NdnZ2aSlpWEymbh48SI1NTVkZ2eTmpqKRqPhxx9/ZNy4cYwePZqM\njIwGPxeHw8Hp06e5dOkStbW1ZGdnk5iYCFy7SaytreXw4cMkJydjMBiwWCzYbDZyc3Opra0lOjqa\nYcOGsWzZMqZOncrs2bNp1aqVmt+fnp5OVlYWI0aMYMCAASxatEjkXQuC8G9JO3v27GY3Xr58+exJ\nkyb9fkfzL0ar1RIaGkp6erpakSMpKYm+ffvSuXNnunbtyh133EF6ejpt2rShf//+DBo0iF69ehEa\nGkq3bt245ZZb6NixI/fddx+33XYbPXr0UOtOh4eHq+XE/P396/2Q+Pn54e/vz+7du+s9hnY+Vg0O\nDuaee+6hffv2JCUl0aFDB5KSkpr8S0lJYfjw4fTs2ZNWrVrdMAA7fPgwTz31lDpg8/jx4/Tv37/R\nXiVvb2+Ki4vZvXs3a9euZe/evfTv35/Kykry8vKIiooiNTWVCxcukJuby8WLF1m/fj2bNm0iKyuL\n6dOnM2DAALRaLWfOnOG5557DZDJRUlKCt7c3qampzJ07l7Nnz6LT6aiurmbAgAEcOHCATz75hK1b\nt/L555/j5+fHrFmzCAgI4MUXX+TAgQPY7XZqa2vp27cvRqORU6dOsXv3bhRFYcCAAcTFxREYGMiu\nXbvYsmULn376KZs3byYmJobevXurAVhlZSUXLlwgNDSUmTNnkpKSQk1NDeHh4S6P/e12Oz/99BMA\n3377LRs3bmTjxo3Ex8fz97//ndDQ0Ho3asHBwWzatIk+ffrw8MMPNxiYXW/Lli3MnDkTi8VCZWUl\n58+f584777xhtZfz58/z/PPPc+nSJXx9fTlx4gRpaWlER0erbb755htmz56NyWSipqaG3Nxc+vXr\nh6enJ35+fmqZwz179uDn5+cy2YrT0aNHeeKJJygrK8NqtXLs2DH69evX4Gyhp0+f5uWXX0aSJCor\nK2ndujVt2rQBrj0JSU5OpqioiK+//povv/yS1atXc+TIEe644w6sVitTpkyhpKSE7OxsDAYDPXr0\nQJIkvv32W44ePUpgYCA9e/ZEp9Pxww8/cOzYMXbs2EH79u2Ji4vj+eef59ChQ1RWVqIoCn369CEx\nMZGAgAD279/Pxo0b2bp1q5pmNHjwYKKjo/H392fnzp1s3ryZTz/9lK1btxIXF9fobIk2m41p06bx\nxRdfqO87LCzM5dq5ePEiTz31FDU1NRgMBo4cOUKvXr3w9vZm//79HDx4kM2bN5OZmUnXrl2xWq2c\nP3+ezp078/nnn7N9+3a0Wi3nzp3jtttu4/3332f79u1oNBpyc3O5/fbb8fHxYeXKlezbt4/p06eT\nmJjY4E35hQsXePTRRykoKMBgMHD06FHat2/P2bNneeWVVzCbzRw+fJj27duTmJiIxWJhw4YNZGdn\n07lzZ1q3bk3nzp0pLy/n+++/Z+PGjWzatIlPP/2U+Ph40tPTKS4uZtWqVXTs2JEBAwb84RPiCIIg\nXG/58uVMmjTppRu1k24m7y4jI0M5dOjQP3Vg/05kWaaiooKioiJqa2vVQYY3O1mMVqulTZs2Lnml\nFouF9957j/fff5+LFy/y8ccfM2jQIJf1FEXhzJkzjBgxglOnTuHm5oa7u7taBxmgS5cuPPbYYy4T\noTSHt7c34eHh9SZraYjJZOL48eNqyoCXlxcpKSlN9ijV1tZy5MgRtWesffv2XLp0iYKCAqKjo4mN\njcVsNmMymbh69SrFxcXqJDNhYWHqMVVVVXHy5Em8vb3VgWrR0dFcvXpV7cl3d3cnMDCQ8vJyzpw5\ng81mU8sTBgcHI8syJ0+exGQyqYP1IiMj0ev1lJaWkpeXR1hYGCEhIWot6zNnzlBSUsKVK1fUwXbO\n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\n+/fH3d0djUZDcHAwvXv3xsvLi3/84x907tyZw4cP8/zzz+Pv74+fnx8tWrTg+vXrWK1WZDIZfn5+\nuLi40LRpU4YPH45OpwNgyJAhrFy5kosXL5KXl0eNGjWYNGkSQgju3LnDiRMnpAqv4n9WxN3d3fH1\n9aVu3br0798fjUZDWFgYzzzzDMePH6e0tFTqo169etGpUycuXbokJRInJiYSEBBA165dnYWgnDhx\n4uTfhDOwrgKDwcCHH374yJLmQggMBgNarRaZTIbRaEQmk0mOHvbAuiIiIiL45JNPCA8Pp0+fPrRs\n2ZKsrCxOnjz5yPZZLBY+/vhjFixYACDpm1UqFSUlJRQWFuLm5oavr2+FX6ydO3dm9uzZ1U5ePHHi\nBL///rtU8MROWVkZ06dPZ8OGDaxZs4ZPP/20SnmJXq9HoVBIemqNRkP9+vUZPXo0O3fulGQrMplM\nSsT7c/sf3qZWq3F3d0cmk0myGKVSSUBAAFevXgUe6HLv3buHxWJxcImwF6axe2mbzWYp6NJqtVLf\nyGQyoqKiqkzOFEJw5swZioqKqF27NkFBQUycOJFRo0YRFxfHuHHjyM/PJyAg4JF9bbPZKCgoQKfT\nSfp8b29vunTpwtChQ5kyZQr379/n3r172Gy2colvf+4vhUJB3bp1pediTx60/9t+zcoICgpCLpfj\n5eXF3LlzmTZtGomJiezZswdfX1+mTJnCW2+9JZ3v4aqe+fn5lJWVodVqqVOnDgEBAdStW5ehQ4fS\nrl07qb8VCgWNGzd+ZAKsSqWiSZMm7N27l6NHj/LGG29U+RmDB5+V9PR0LBaL9Lm091OTJk0IDAyk\noKBACpABhyRQ+yTaw8NDcleRyWQEBQVV+NkKDAzEw8ND+r89eVin06HRaLDZbBw/fpw1a9Zw/fp1\nIiMjqVGjhpSs/DAajUbSkctkMiIiIspNiDUaDUOHDuW1115j8+bNjBs3js2bNzNkyBApuHfixIkT\nJ/96nIF1FSiVSjp27FjpCmxJSQnXr19HLpcTEBBARkYGkZGRFBUVERgYSHFxMWlpadSpU4fCwkKy\nsrJQqVTUq1ePgoIChBDk5eUxc+ZMaSWvRo0aTJkyhVdffZWMjIwKryuTyahXrx5dunTBarVSVFSE\nSqXCw8ODvLw8tFotJSUlUqCp0+kwmUx4eXnh6ekpnSc0NLTa+urS0lJWrFhB27Zt6dq1a7mEsbFj\nx/L9999z5MgRCgoKJJu/ivjiiy/w9fUlNjbWISgpKyvDZrMREBCATCZDr9dz7949QkJCsFqtj6UF\nVygUBAUFSf9Xq9W0bduWffv2cfHiRQYMGCAFTSUlJZSUlNC4ceMqE+Gqs+qXk5ODzWYjKysLIQQ9\ne/ZkwYIFvPXWW4wZMwYPDw9q1qwpJcFqtdoKA8n8/HzefvttpkyZ4lBURghBSUkJrq6ueHl54efn\nJyVc2my2Cs+VnZ2NyWQiJCSkynvKy8uT3rQ83A6j0Si94gJo1KgRW7Zs4fr162zdupUVK1bwzTff\nMGzYMHJzc8tZUwYFBaHT6fD19eWVV16pMsG1smJKDyOXyxk8eDDr16/n6NGjzJs3j0mTJlWZa6DR\naGjVqhVHjhzh0qVL9OjRQ+org8FASUkJERERuLi4VFrVtCJCQkKqNS7szkHBwcG4urpy+vRpRo4c\niRCCuXPn8swzz7B69WqOHz/+yHNVdr3u3bvTrFkzEhIS0Gq1GAwG6a2BEydOnDj59+AMrKvAxcWF\nHj16kJeXV+Hv7cGGxWKhsLAQi8WCTqeTXDf0ej05OTnUrFkTpVIpFc8oLCwkMjISHx8f9Ho9L730\nEh988AHTpk0jJCSEp59+mqVLlzJ58mSSk5PLBSpyuZy+ffvSsWNHyYJNpVJhMpkICAhwCJ6BClcy\nNRoNPj4+1SoQI4Tgl19+4dy5cyxZsqTCFe7IyEjCw8O5fPkyx48fp1+/fpV+oaelpbFt2zaeeOIJ\n6tevj1wuJzs7m1WrVqFQKBg4cKDkqmK1WikoKJAs2h4O8P78HMxms1Q0xWw2c+PGDTw8PKT2duzY\nEZ1Ox86dO3nxxReJiooC4Pz58xgMBgYNGoRarZYCyZKSEkwmk+QXnZ+fL9krVkbz5s1RqVSsXr2a\nli1b0rp1a/r168euXbvYvHkzQgi+/vprmjZtyvHjx5k9e7bDBMCOyWTi/PnzxMfHM2PGDMmx5Ny5\nc2zdupVWrVoRExODq6sr3t7e7Nixg/79+9OqVSvkcjkmk0kaFwUFBej1eq5fv07Pnj0dnktpaanU\nZ76+vpLjRteuXbFYLKxbt46CggJSUlKw2Wzo9XpmzpzJmDFjaNWqFeHh4Rw6dAgPDw9UKhUpKSmY\nzWYKCwsRQkiruo0aNSIxMZEff/yRwYMHo1Qq0ev1KJVKaQXXarWSnJxcad8+TIMGDZgwYQITJ05k\n4cKFFBcXM378eMLCwqSAWQhBdnY2KpUKb29vOnfuzLJly9i6dSuDBw8mPDxcKjRjNpsZNGgQLi4u\nmEymcqv34n+sNf888UhKSsLV1VXyp7dTWFiIwWDAxcUFq9XK999/j8FgYOTIkbi4uHDy5Enu3LnD\n2LFjGTRoEJmZmVLF1dLSUmmM2/9vNBqlFXD7yvqfx6G3tzfdu3dn1qxZzJgxg1mzZlU4tpw4ceLE\nyb+Q6gix7T//15IX79y5I/r27SvCw8NF7dq1K/2pVauW8PX1FZ6eniI4OFja5ufnJ9zd3UVQUJAI\nDg4WwcHBIjQ0VPj5+Yk5c+YIm80mbDab2LFjh/D09BTdu3cXt27dEjabTUrUe/fdd4WXl1e5pEWl\nUinUarVQq9VCq9UKb29v4eHhIYKCgqpsq/2nWbNmYtq0aaK0tPSR/ZCYmCiaN28uXF1dxYIFCypM\neDx06JDw9/cXgGjUqJE4dOhQpQlT8+fPF1qtVtSrV0+8+eabYtq0aaJjx44iICBALFu2TBiNRmEy\nmcQXX3whtFqtCAsLEwcPHhRWq1Xs2LFDeHh4iNq1a4vjx48Ls9ksNm3aJIKDg4W3t7fYsmWLsFgs\noqysTPTu3Vt4enqK1atXC5PJJEpLS8XUqVOFRqMRTz75pNi2bZvYuXOnaNeunZgwYYIoKioSVqtV\n7N27V9SoUUN4eHiIOXPmCL1eL4QQIiEhQSiVSjF8+HBRVFRU4b3l5uaKl19+WWg0GlGjRg0xaNAg\n8corr4jw8HDRvn17UbduXaFUKoWHh4dYtmyZlET5Z/Lz80W3bt2EVqsVnTp1EpMnTxZjxowRERER\nIiYmRpw+fVrYbDZRWloqpk2bJrRarahbt66YPHmyWLhwoRg6dKj49ddfRUZGhhgzZoyQy+UiJiZG\nJCUlCSGEKCoqEm3bthX+/v7i0KFDQgghLl68KGrVqiW8vLzEgAEDRP/+/UX9+vWFUqkUTZo0Edeu\nXRNZWVmiWbNmonv37iI+Pl68++67IjAwUKxfv17YbDYxc+ZMIZPJRNu2bcXkyZPF+fPnpcTBoKAg\nERAQIIYOHSpee+010a1bN7Fv3z6Rn58v3nnnHSGXy8XTTz8tMjIyHjkmhXiQALt06VLRuHFj4ebm\nJho2bChGjRolli5dKj766CMxYsQI0apVK/H5558LIYQwGAwiLi5OuLm5iW7duoldu3aJrVu3itat\nW4spU6YIg8EgbDabOHnypAgODhY+Pj5i+/btwmw2i8OHD4vo6Gjh6uoqFi5cKEwmkxBCiLfeeku4\nuLiI2bNnC4PBIG7duiVq1qwp1Gq1eP7550V8fLz4+OOPRdOmTcX8+fOl5N4VK1YIpVIpwsPDxccf\nfyy6d+8ufHx8hEwmEx06dBA3b94UP/30kwgLCxMajUZMnTpVFBQUCCGE+O6774RarRaDBw8W+fn5\nDn1y+fJlERoaKsLCwsTVq1er1Y9OnDhx4uTROJMX/wYCAwOZOnUqWVlZj9w3PT2d7OxsIiIicHd3\nx2AwcOvWLby9vSkrK6O4uBi5XE5YWBgymYxOnToBD1aQ7XKTAwcO8MYbb7B69Wpq1apFdHQ0n3zy\nCc2aNWPy5MncvXtXup5Go2HEiBH4+/sTGBhYrrLio7BLUqrz6j0vL4/IyEhq164tVXf883E2m40e\nPXoQGRmJ0WiUypJXxKhRo6hTpw4///wzycnJnD9/nsjISN577z26desmeS4nJSXRrVs3AFJSUqQy\n1X369MFoNHL9+nVatWpFamoqgwcPxmazcePGDSwWCyqVisGDB6NWq7lz5w5WqxVXV1cmTpyIv78/\nR48eZc2aNfj7+zNq1CgGDhyIh4cHZrOZK1eu0K5dOwBSU1MxGAy4u7sTHR3NwIEDCQkJqXTV2sfH\nh6VLl9K1a1e2b98uWcjNnj2b7t27U1RUxA8//IBcLmfYsGGVvjHQ6XSsXLmS77//ntOnT5OYmIhC\noaB///6MGDGC+vXrI5PJcHV15f3336du3brs3btX0pTXq1ePyMhIbt++TV5eHs8//zxBQUGkpaUR\nHR2NWq2mZ8+eGAwGaXW0QYMGrFq1itWrV/PHH3/QrVs3Zs2axdatW7ly5QrJycn07NmTiRMnsnPn\nTn744QfUajULFizg2WefRSaTMWjQIE6cOEFaWhonT55k6NChyGQyunfvzurVq0lISCA/P5+srCy6\ndu1Ku3btuH37NpmZmfTr1w+FQsH169epUaPGI8elu7s7o0ePZsCAARw5coT9+/dz9+5dTp48iUKh\noE6dOgwfPpz+/fsDDz4zU6dOJSgoiMTERFauXElAQABvv/22lBwohOCPP/6gc+fOlJSUSKXj//jj\nD7p3745MJiMjI4OSkhJ0Oh19+vQhMzOTzMxMh6RWd3d38vPziY+Pp27dunz88cd0795det7PPfcc\nmZmZ7N+/ny1bttCtWzc++OADzp49i9VqxWq1cvnyZVq0aAHAvXv30Ov16HQ6IiMjpXFoNBod+iQi\nIoKmTZsSERFBZGTkI/vQiRMnTpz8vcjsX6rVoWXLluJRiXz/L2GxWDh16hQXLlyolktHdQgKCqJd\nu3aEhoZK2zIzM+nevTu///47MpmMIUOGSK4Y9oqKn3/+OZMmTZJe27u5udGtWzdatGhRTvpRGWq1\nGqvViru7O0ajkebNmxMTE/NI7bL4H7kLPJgI2JPpHsZeDMd+LiHEI5PQ7LIKe2Lbw9XpHr4mPJC/\nKBQKrFarNCt8eNvDxz1cidJqtZZLgLRvNxqNqNXqclXxrFarJAV4+H7tbVIoFNWqMGmv0GkvkvJX\nqwxarVZKS0ul4j4VPS/7fvbPs71v7G22J4I+XMXS3m8P34v4n0qABoMBT09PqVqoXeMul8urHA9C\nCIqKijAajbi4uKDT6Rx+Z68eaLVa0Wg0DpIfO9Xp38ru32w2U1xcjEwmkwrjVFbNsLLnbx/LD4+x\nh6Uh9nH+8Jiw90NaWhqdO3emXr16bNy4EYvFglarrbAd9vwIq9WKTqcrl5D4qHFob5t9X/ukIDY2\nlrlz59K2bdvH6kMnTpw4cVI5LVu25OzZs4/8IneuWFeBwWAgPj6ew4cPV6mrfRw8PT2ZP3++FFhb\nLBb27t0ruQEIIdi5cyd169Zl+vTpUuDz7LPPsnTpUmnVurS0lO+++459+/bh5eVVraDtz24Hffr0\nYeHChZKGuKrjHmXL9+cy2tVpj1wux9XVtULNdmXXrCiorGxiUFFp74e3V3ZPCoWi0hLZ1bUntK8m\nP265+IrOo1QqHRwmqtqvou1V3WdF+6vVaoeKnBU928rOabdErKqNf25nZc/pcXj43I+qxPio519R\nex7+f1V9YbFYsNls5OTkYDKZqkzUVCgUksNIZb+vzji0WCysWbOG3377jfT0dOrXr0/z5s0rPa8T\nJ06cOPnX4Qysq8DT05MvvviCjIyMSp0C/ryyav/Cs68g2Ww2B9mE3bNXCEF+fj7r1q3jk08+cbAA\ne+WVVxgxYgQymQyTyYRSqSQkJIQmTZo4yEHgwQxqzpw5eHl5SSuQ9i/eqoJbhUJBcHDwY5WDduLE\nSeWYTCbWrl1LdnY2OTk5LF++nEmTJj2WV/xfve7JkyfZtWsXTZs2JS4uzmFi5MSJEydO/n04pSBV\nYC/pXJntHSC5fNhfD9tXoPR6vSQHsJddDg4OZsKECej1etasWcNPP/3EmTNnyukkmzVrRmhoKAEB\nAWRnZ9O5c2dGjx7NtGnTmDt3rsO+Wq2W6OhowsLCKC4ulvxy/fz8Hun40b59e1566aVqOYM4ceKk\nasxmMz/99BMWi4WysjKio6Np0KDBY9lE/hWEEGRlZZGSkkLNmjWrbQHoxIkTJ06qj1MK8jdgtVrJ\nz8+v1G7vYezaU/vqtl07GRwcLB0fHByMEII5c+awcuVKB92mSqWiVq1aqNVqSSebn5+PUqmkrKwM\nIQS9evVi48aN3LlzRzrOYDCQlpaG1WpFq9VKHtBFRUVYLBZKS0srlREUFRWVs65z4sTJX0OlUtGz\nZ89/+3VlMhmBgYEEBgb+26/txIkTJ04ccQbWVeDr68snn3xCQUFBlWWsH8aecGQymRBC4OnpSY0a\nNVCpVNhsNhYtWsSWLVvK+eQ2aNCAhQsX4u7ujlwux8PDQ9JyKpVKiouLad++PWvWrCE2NpbU1FTg\nQUA/cuRIBg4ciEqlkpLk7NczGo24u7tL7Xd1dZWSHdVq9b/8NbUTJ06cOHHixMn/FZyBdRXcvn2b\nuLg4rl+/TnFx8V86h7u7O+vWrSMmJobjx4+zYsUKcnJyyu13/fp1XnnllQpf4dqrCK5cuRKVSuUQ\n5NtsNpYvX05CQoLDMa6urlLRFI1GI7Xfw8MDPz8/ZDIZAwYM4K233vqnE8ecOHHixIkTJ06cOAPr\nKvHz8+O5554jKSmpSslEYWEhSqVSqpDm7+9PVlYW3t7ekufz77//zuTJk6WVZnjwCrdhw4YO1nvw\nYBW6Tp065Obmkp+fT1BQEOHh4WRkZDB58mQyMzOlfX19fSXLvbKyMlQqFX5+fgQEBJCbm4uXlxd5\neXnk5uYSGhpKUVERQUFByGQyWrRo8R+rxbTZbBQXF5ORkYFaraZ27dr/2036pzGbzfzxxx+kpqbS\nrFkzAgICHuv4srIyKYlWqVTi6uoqPT+TyURhYSH37t0jIiLikS4i8ODtSlZWFm5ubnh5eTlsz8nJ\nQalU4uPj8x87Rpw4ceLEiZP/NJyBdRVoNBq6dOkiFXOxly339fVFr9dL2ml74qK/vz8KhYKCggKC\ngoLw9/fnzJkzjB07lqSkJHJzcx3Or1arGTlyJM2aNXPYLpPJcHd3R6vVSqvbarWa5cuX89tvvzns\nGxUVRVxcnFR4JjMzE61WS2BgoFRS2e4VbPcktvvhqAyHpwAAIABJREFUent7VytoKiwsZN++fRgM\nBiwWC0lJSQ4uJv7+/rz55puEhYU9fidXwtWrVxk/fjxJSUk8//zzzJs372879/8WP//8M6NHj+bu\n3busWbOGYcOGPfIYk8nE5cuX2b9/P7/++qv05kGr1VK7dm06duxIz549Wbt2LV999RV5eXls27aN\n1q1bA1TqvW0wGPj666/58ssvady4MV988QWenp6UlpayadMmli9fTlhYGPHx8VVaxlWHwsJCzp49\nS0pKCiEhIXTq1KmcxaMQgt9++43z588DEB0dzRNPPPFvfZuSm5vL0qVL8fLyQqvVotFo6N27t8Ok\nw4kTJ06cOKkKZ2BdBX/88QdvvPEG6enp2Gw2DAYDVqsVT09PSkpK0Ov10r4ymUxa3SssLKR58+YM\nHjyYJUuWcPny5QrPX1ZWxuTJk6XgwV78QSaT4eLigkajkRIMFQoFxcXF5VbOT58+Tf/+/fHx8UEu\nl5Ofn49arUan02E2m6UiEn8OoOVyOa+//jrjxo2rViGXEydOsHr1amw2GzExMVIQnZuby6ZNm2ja\ntOnfGliHhobSs2dPjh8/7hDE/zfTqlUrOnfuzKpVq6rli56Tk8OiRYv45ptvqF27Nv369aN+/foo\nFApu3LjBpk2bSEhIYNu2bXTr1o39+/dz8+ZNB/vHtLQ0Zs+eTY8ePRgwYADwwPf4s88+4/Tp00yd\nOhVAKoKyYsUK9u7dy3vvvVel1/PjkJqaypQpUzhz5gyurq5Mnz6d8ePHO7jR2Gw2Dh06xOzZs5HL\n5cyYMYP27dv/09d+HGw2G1lZWcydOxeLxcKIESPo0aPHv7UNfzd5eXls2bKF1NRUtFotvXr1omnT\nppJTidlsJjExUZr0+/j44O/vj8Fg4N69e/j7+9O+fftyzkGlpaWcPn2a0NBQ6tSp4/A7m81GWloa\ne/bsIS0tDYCGDRvy3HPPOfi622w2kpKS2L17N0VFRWi1Wtq0acMTTzzxSG99J06cOPlPxRlYV0FY\nWBjz5s3j5s2bDpXhKsNms5GcnExGRgbfffcdx48fd7DS8/PzY+DAgQ7e0VqtFoPBgFwuJyQkhPT0\ndKxWK0qlEp1OJ5UT1+v1LFy40EEGIpfL6dGjB3Xr1pW2eXh4ULNmTTIzMwkPD6ewsBC9Xl9h0Bsd\nHV2tFWtvb2/GjBnD9u3b0Wg0rFu3joiICOCBrWBcXNxjyxoehU6no0OHDtUquf7fgqenJ23atGHV\nqlWP3Fev1zNt2jQSEhIYPnw4EydOlCQ8AN27d6dfv37ExsaiVCqJjo6mfv36JCYmOpznypUrbN26\nFT8/PymwvnXrFtu2bWPhwoU8/fTT0jnT0tLYsGEDH3zwAYMGDfrbJCCNGjViyZIlPPPMM2RmZjJv\n3jyioqLo16+fdA2FQsGbb77JTz/9hFar5c033/yX29T9GX9/f6ZOncqxY8coKipiwoQJ+Pr6/lvb\n8HeSm5vLpEmT+OGHHwDIyspizZo1LFq0iL59+yKXy7l9+zavvvoqaWlpqNVq3NzccHNzo6SkhIKC\nAoYMGUKbNm0cAmv7M/zxxx+ZOXNmucD63r17vPDCC9y+fRu5XE52djYqlQqLxcLw4cOl/fbt28f4\n8eNJS0tDLpdjMpnQarXExcUxadIkpw2oEydO/itx/uV6BEqlEo1Gg4uLCzk5OeXcPP5M7dq1uXnz\nJsXFxeX8qb28vGjRokWV1fjsntd2atWqBUDTpk358ccfHQJrmUxGQEAAzZs3LxcE2YvQeHp64unp\nWW5ioNFoyl2rKjw8PPDw8MDV1RVfX19pJdPb25sFCxY4V5iqSXWCVSEE69ev5+uvv6Znz57MmjWr\nXDVDmUxGaGgoK1asqNJmrWPHjmzevJlGjRpJ265cuUJGRgYeHh4O7blx4wapqakOZcj/DuRyOb6+\nvnh4eBAQEMDVq1eZNWsWDRo0ICoqSrqWVqslJCREqsj5v4FarcbFxeW/3r6utLSUqVOncvnyZXbt\n2oVOp2PHjh189NFHTJkyhWbNmlG7dm00Gg0ajYZhw4YxbNgwaSJ7+PBhvvjiC4YMGeIwuc3JySEu\nLo6CggK+/vrrcjI2eDBJ6tOnD7169cLDw4NNmzYxY8YMfvrpJ1588UUpYL5y5QqhoaHMmjWLGjVq\nsGfPHtasWcM333zDiy++SHh4+L+ns5w4ceLkb8QZWFfB3bt3iYuL4/79+1itVgoKCigtLa0wuDYa\njdLr/YoSHV1cXMjMzCQuLu6x2yGTyejbt2+54Nhms7F161Z27NiBm5ub5Hf9MPYSzzabDZvNRmlp\nqRSQv/baa8TFxVUriNLpdPj5+ZVzRykpKUGpVOLi4iJdOysrCy8vL2w2G+np6SiVSoKCgsqtPtts\nNoqKiqQkS51O5yBbqaj8NTzo35ycHEn2EhISglKpxGQyOUxm3NzcUCqVCCEwmUyoVCrJb9xoNGI2\nm1EoFJJFob1NBQUF5ObmIpfLCQ4OdkgSfLjt1dnPXkAoNzcXNzc38vPzH9nXxcXFbN68GYVCwejR\noyV7xD8jk8kcVgsrCkbd3Nzo0qWLQ7syMjIc5CJ27t+/j9FoLDeGhBCUlJSQlZUFPHjzotVqH1v/\nrNPpmDdvHnPnzuXgwYN88MEHrF69WloVlsvl1K1bl5s3b5a7vl6vJzMz06Gv7YVYHr5/lUpV4fM2\nmUyYTCbkcjkajeaRY95ewfThNhiNRumNkr+/vzQBsfePXq/H19dX2sfeTpvNRmFhITk5Obi5ueHr\n6yuNFbsGPj09HaPRiLe3t+TaYzabK7w/uz89PPDOVqvV5e4nKyuLgwcP8u6770oT77Fjx5KSksLq\n1as5cOAAo0aNQqlUUqtWLaZPny4FslarlZ9//plu3brx1FNPSee2WCzEx8eTmZnJmjVrCA0NrbAf\ng4KCeP/996XfPf/888THx2M0Gh3+do4cOZLY2FhJQte6dWsuXrzImTNnSE9PdwbWTpw4+a/EGVhX\nQXh4OAkJCVitVsl1oaioCLlcjlwux2KxSKXL9+7dy5IlSyosfd6tWzdee+01B7mEPYCsKMD5M3K5\nHJlMxmuvveawPTIyknnz5knJViUlJQ5BkYuLCy4uLmi1WukLXK/Xo1QqCQwM/EuOD2VlZWRkZGAy\nmSguLmbx4sU0b96c2NhY7ty5w9KlSzl69ChdunQhJSWFX3/9FZVKxXPPPcfkyZOlldf09HTWrVvH\n0aNHpeC0adOmxMTEEBwcTM+ePQkMDCz3Kr6kpIR169aRkJCA2WzGaDTSs2dP3nvvPU6fPs2cOXMw\nGo0oFAomTJjAgAEDyM7OZsqUKYwdO5bGjRtjsViYOXMmR44coVatWixdupSAgAAMBgPr169n48aN\nFBUVUVRURKtWrRg/fjytWrWSAkmDwcC6devYtGmTtF/r1q0ZP348LVu2lPbLzMxkxYoVHDt2jOLi\nYqxWK/fu3UOhUFS5wp+Zmckff/xBjRo1qFevXrWfUXR0tEOwm5uby549ezh9+jTt2rXjpZdewmQy\ncfbsWUpLS/n555+x2Wz4+flRp04dzp07R2lpKcePH8fDwwNvb2/q1atHYmIin332GdnZ2VLy7rJl\nyxwkSNUlKCiIzz77jFdffZW9e/eybNkyPvjgA1xcXJDJZOXkH1arlYMHD7J06VLp+vXr12f69Omk\np6czY8YMysrKkMvljB07lueff578/HwmT55MbGwsMTExWK1W5syZw48//khISAhLly4lODi42m0W\nQnDp0iU+//xzrly5glwuR6fT8eGHH/KPf/yD9evXk5CQQFFREf369WPdunWUlZUxffp0XnzxRdav\nX88333xDaWkpVquVmJgYFi1ahLu7O6mpqSxcuJATJ05IVVPfeecd+vfvz86dO1myZImUfDp27FiG\nDh3KoUOH+OijjzCbzXTp0oWZM2eW08JfunSJvLw8GjVqJI0fV1dXevfuzVdffUVmZiZCCFQqFR06\ndHB4e3Xx4kV27tzJ4sWLHcbpsWPH+Oqrr4iLi+PIkSOUlZUREhLCP/7xD4c3Kg+PV5vNxpUrVzAa\njTz77LMOk+s/y8fsE3Q/P7/Hej5OnDhx8p+EM7CuAoPBwIYNGyT5RVFREbdv36Z27dp4enqSlpZG\nTk4OQgiSkpIqDKrhwSv2NWvWOGzz9vZGrVZz//79arUlKyuLGzduOGxLS0tj3rx5aLXacvvL5XIi\nIiIcfmc0GjEajXh6eiKXy+nduzdPPPFEta5vJyUlheeeew6ZTEZpaSkZGRnMnz8feLCideHCBX77\n7Tdu3LjBK6+8wogRI9i2bRuLFy8mLCyMt956C5PJxOzZs9m/fz/Lly8nIiKCDRs2MHfuXNavX8+o\nUaN4+umnyzlZCCHYtm0bkyZNYsyYMYwcOZJTp07xzjvvIJPJmDBhAk899RQff/wx7du3p2XLlggh\n2L9/P+vXrycqKoqGDRuiUCho3Lgxq1evZsSIEeh0OsrKyvj8889Zv34906dPp3nz5hw5coRZs2Zx\n/vx51q9fT+vWrSkrK2P+/PkkJCQwffp0mjVrxuHDh5k9e7a0X6tWrcjJyWH8+PEkJiYyd+5cWrVq\nxY0bN5g2bRqlpaVVJnrevXuXvLw8wsLCHktjrlKpHIIaq9XKgQMH2LRpE2azmZdeeonk5GSOHDki\nJTAuW7aMfv36MWbMGPbt2yf5oq9fv54uXbowY8YM4uLi8PPzY82aNeTn5zN79myHxN3HQSaT0bhx\nY+bPn8/LL7/M4sWLadiwIc8++2yFmuoLFy4wevRomjRpwrp168jPz+f1119n/PjxrFy5kh49ejBz\n5kxiYmJo3bo1QggOHDjAunXrCAoKolmzZigUCpo0acLy5csZNmwYPj4+j9XmrKws3nnnHbKzs4mP\nj8fb25vJkyfz5ptvsmPHDnx9fUlNTeXWrVsUFxfTrVs3jh8/TlRUFKdOnWLy5MmMHDmSESNGcOLE\nCbZv347ZbKa4uJipU6dy5MgRVq5cSf369VmyZAljx47F39+fTp06kZiYyIoVK6hZsyYxMTEAxMTE\n4OLiQn5+Pj169Kiw3/Lz87FYLOXe+DRp0oRatWpx/fp1rFYr3t7evPvuu9I4KysrIz4+noYNG9Ki\nRQvpOKPRSEJCAmlpaXz66aeYzWbMZjMlJSUMGDCA+fPnl5POpKWlER8fL92v/S1DZdrp9PR0UlNT\nee655wgJCXmsZ+TEiRMn/yk4K4NUQVlZGXq9noKCAs6fP8+NGzdwc3Pjzp07/Pbbb2RmZkqr2RW5\nPLi7uxMZGUlYWBhWq9XhJycnh3v37pXb/ucfi8VCamoqly9frlCCUtlxZrOZa9eu8dtvv0k/V69e\nxWAwcOHCBTIzMykoKHjsPtHpdLz55pvMmDGDDz74gHr16klShTp16vD666/j4uLCsGHD+Oyzz5gx\nYwbz589HrVZz8uRJSRpx/PhxmjZtSteuXYmOjqZv3764ubnRrl07ZsyYUaGsobCwkNWrV+Ph4cFz\nzz1HQEAAjRs3xsfHh2PHjqFQKBg0aBB+fn4EBgYSHBxMcXExW7ZswWw2s3btWu7evYtcLsdgMEhO\nBWq1mnPnzrFkyRK6du3K0KFDadiwIW+88QZTpkzh9u3bLFq0iNLSUn777TeWLFnC008/zZAhQ6T9\nPvzwQ/744w9pv40bN7Jz507GjBnD4MGDiYyMpEePHlLyVlXJsPaVS5PJVO2KnxUREBDAuHHj8PLy\nokaNGgBERETQsWNH1Go1n376Kbt372bq1KnUrl2bHj16oFQqmTp1Krt372bOnDmYTCbS0tJwc3ND\np9PRpk0b1q1bR3R09F9ul0wmo0OHDsyYMQOLxcKkSZM4d+5cOQmK1Wpl/fr1ZGRkMHToUMmBIioq\nirNnz1JUVCSNA39/f2rWrElJSQmbN2/GaDSyYcMG/vjjD2QyGSUlJdStW5chQ4Y8tn77p59+4sSJ\nE/Tp04fGjRsTFBRETEwMKSkpXLlyhT59+tC2bVtcXV2ZPXs2CxYsYNeuXbRu3Zp79+6Rn5+Pu7s7\nPj4+DB06lGXLluHh4cH58+fZs2cP7du354knnsDf35+WLVtSUFDAyZMnCQwMZNKkSdJbkIcnWWVl\nZcTFxdGhQ4dKJTkWiwWDweCwzcvLC29vb0kyJZPJJCmJEILjx49z7Ngx3nnnHYfV6oKCAk6fPo1a\nrSY2NpYff/yRPXv20KNHDzZv3szKlSvL/X26du0ax44dk45/66232L9/f4VSubKyMr744guCg4MZ\nN27c/1NJy06cOPm/hXPFugoCAgIYP368ZLMnk8kkrbIQAqVSicViwWaz8c033/DRRx85fLn07duX\nd955B19fX+RyuaQZLisrQ61W4+rqil6vf2RC5LVr14iNjZWsq+yEh4czbdo0atWq9cjkQYVCgUql\nQqvVotfr0Wg0uLu7P7YUJCgoiBdeeIGAgACEEERFRUlfgjKZTEr07N27txTAxMTEULNmTUn2olKp\n8PLy4sqVK1y8eJHGjRtz9epVzGYznTp1wsvLq8J23b9/n1u3bpGTk8O4cePw9/cnIyOD4uJievXq\nhZubG7Vr16Zly5ZcvXqV3NxcEhMTKSws5M033+Srr77ip59+YtiwYRw4cICBAwfi4+ODzWZjz549\nFBQU0KRJE2lFTalU0r9/f5YtW8aJEyfIyMhg9+7dFBYWOuynUqkYMGAAy5cv58SJE6Snp/PLL7+g\n0Wjo2rWrtKIok8kICQnBbDaTmppa6duCkJAQvLy8yM7O5s6dO1IC618hLCyMwMBAaYXczc2Nhg0b\n4uLiQqNGjRySz+zbGzZsKG3Pzc2lefPm7N27l6SkJGkS1L9//7/cJngwHocNG0ZycjILFizg7bff\nLlc9tKSkhHPnzmE0Gvnkk0/Yvn07RUVFJCcn06JFC/z9/fHy8qJNmzZcunSJnJwczp8/T0ZGBmPG\njGH16tX8+OOP1KxZkx9//JF+/fo9VsIuPJAynDlzBpPJxLfffktycjJms5nk5GSio6OJjIxEJpOh\nVCrx9fWlSZMmqFQqqaBRVFQUoaGhfPzxx+zYsYPGjRszdOhQAgMDuXjxIoWFhRw5coThw4cjl8u5\ndesWNWvWlPq/Ro0avPzyy7z77rt8//33vPHGG5w6dQp4IDGrSudeVlbGnTt3yt2P1WrF19e33Gcs\nNzeXhQsX0qFDBwcJCTyw7cvLy+OJJ55g/Pjx0puw2bNnc+bMGY4ePcqECRNwd3eXjvnHP/7Bnj17\nKCwsZP78+SxfvpwtW7bQq1cvh1Vrq9XKunXrSExMfGyZjhMnTpz8p+EMrKsgNTWVt956i5SUFFxc\nXFAoFA6eyq6urlKyV15eXrkAeffu3Zw9e1b68nNzc0OtVlNQUICnpye+vr7cvXv3kTrrkpIS0tPT\ny22/fv06Q4cOxcfH55GrcHYrLZ1OR25uLp6enrz++uvVtlUTQmCz2RySumQyGV27dpVKp9u/LGUy\nmYPmU6PROFQC9PLy4u233yY2NpYXX3yRiIgIkpOTeeaZZxgxYkSl7bGvxttX8uzBot2qUKVSoVKp\naNu2LUeOHOHYsWMkJCQwYcIEmjVrxoEDB4iPjycyMpI7d+7QsWNH6VoajQar1UpaWprkJQ4PfH3D\nwsK4du0aQohK9/P19SUsLIzk5GSEEAghJA/xh/Hw8ECr1VYZ4AUEBNCkSRP279/P5s2badmypYNF\n4+NQUlJSzge8sLCwwlXDoqKicmPYx8eHpUuXEh8fz8GDB/nhhx/Yv38/9+/fZ+LEiY+VwFhWVuZQ\nJEmtVvPee+9x/fp1du/ezbvvvotCoZD0ukIIrFYrLi4uvPHGGzz55JPSsf7+/pL+vn379uzbt4+j\nR4+yY8cO3nnnHdq1a8ehQ4dYtWoVTZo04caNG7z99tt/qeCMXeL17LPPEhsbKz1TDw8PhyDQx8en\nnMykefPmfP3116xevZqTJ0+yfv169u3bx7fffiudt3379syePVv6zLi5uVGzZk3gwWepZ8+efPHF\nF2zYsIFnnnmGhIQE+vbtK72FqAh/f39cXFy4desWNptNuu/79++TkZFBRESEQ19YLBa+/PJLkpKS\n+PTTT1Gr1Q7nMxgMlJSU4Ovr6/C7kJAQatSoIeWB2M9lXwm3e+qPGzeOffv2kZqaSmlpqfT3wGq1\n8t1337F8+XJmzJhB69atpcRgb2/vf2uBICdOnDj5O3AG1lWg0+l48cUXuX37tkMp8srQ6/Xs379f\nklgUFxdz584dnnnmmUp1ndUtqpKXl8eePXscpAFWq1VKnvPx8aFnz54OK0Z2NBoNZWVlUtBk11k+\nTtZ9Xl6eVP76YRmDTCbjwoUL7N69m0mTJlV6/MOBnEwmo1mzZvj6+lJWVkZ0dDTjxo2jbdu2Dg4Y\ner1eCgztAXVwcDA5OTnUqlWrUjlCq1atEELw3nvvUbduXTp37oxOp2PQoEHMnz+f0aNHEx0dTb16\n9aT2tG7dGjc3N06dOoVer5faodfrycjIoEGDBgQGBla6X1FREenp6TRs2JCAgAA8PDzIz89n7969\nNGjQAJVKhdlsZt++fRQWFkpVOytCq9Xy+uuvk5iYyNq1a6XX4xVp6R8mKysLi8XiEEjbE27tjh5A\npUmrFQUy9gnTnDlziIuL47vvvuO9997j4MGDjBs3Djc3N2k1Mzw8vErv4ZKSknLVR729vZk2bRrJ\nycns3r0bQJLLaDQa6tWrx9mzZwkMDKzUd71FixYolUomTZpEeHg4Xbt2xcfHhyFDhvDRRx/xxhtv\nEB4eTsOGDavsv4ex5yPodDoaN26MXC5Hq9XSoEGDcn1kH9sGg4Hi4mKHhFu9Xk9UVBRr1qwhLS2N\nJUuWsHTpUo4dO0aHDh2kyXa9evXKBbN2wsLC6N+/P/Pn/3/s3XdcFNf6P/DPFhZYWHrvRYooTUBA\nEAtKYjcq1tgTE6NGr9cWk5joL0ZTNIkxliTmqjHFEqNYErtoAKMINhRBFBSkt2V32f78/vDufEWK\nmJCY3Jz368U/y8ycMzNnZp45c8qHWLhwIQoLC7F8+fI2g87OnTvDzc0NKSkpmDFjBjw9PaHX65GV\nlQWFQtGkRpqIcO3aNWzatAlJSUnw9/dvdpydnJy4WvaKigruhUIqlUImk3FNubRaLT7//HM4Oztj\n+PDh3HaMjIwgFArh7+/PvSQaguply5ZhwYIFGDRoEHg8HvLz8/H+++/j448/bnVEHIZhmL8qFli3\nwcLCAr1790ZlZSWABw/6tmYBlEqluHLlSpO2yzweD9HR0ejXr99vHhtYpVLh559/xqFDh1pdRqlU\nQiqVIjExEeHh4Y+t6REIBO0O6okI1dXVaGhoQG1tLU6fPo34+HhIpVIoFAqsWbMGarWaGxZNo9Hg\nzp070Ol0EAgEaGxshFwuR319PZRKJczNzXH48GEUFRXBw8MDarUaJ06cwMWLFxEdHY3Y2FiYmpqi\noqICdXV1uHXrFhQKBaytrdGnTx+sW7cO69evx8KFC2Fubo6ysjKIxWLuRaFr165c7fEbb7zBNS0Z\nP348vv76a9y8eROvvvpqk1r+sLAwhIeH49dff8WuXbswadIkCIVCpKWloaqqCosXL4a5uTm6deuG\nsLAwZGRkYPfu3Zg4cSKEQiF++eUX1NTU4PXXX+fagO/atQsff/wx7OzsMGjQIGRkZGDHjh1cu/mH\naxIfxuPxkJSUhNmzZ+Ojjz7CypUrcfv2bcyZMwfe3t4Qi8WQy+VoaGhATk4OIiIiYGNjg4KCAigU\nCty6dQuJiYkAwI1GUlZWxn1xKC4ubtb+lohQUlLCjRxjqI0vLi7GrFmz8O677yI4OBjdu3eHhYUF\nwsLCIBKJUFFRgWnTpkGpVGLXrl0tTqhCRKirq+P6LDxc08/j8RAaGoqVK1diypQpTa4doVCIpKQk\nfP/99/j000/h6+sLNzc3NDQ0oL6+ngt4AwMD4ePjgytXrmDhwoVcM4fRo0dj69atXFOqJxlrva6u\nDlKpFA4ODujRowdcXFywc+dO9OrVCxEREdBqtbh79y5CQ0Oh1WpRU1ODqqoqFBcXw8PDg9u/U6dO\nceXA3d0dERERsLCwQGhoKLp27YqAgACcPHkSu3btwrPPPgsiQmFhITp37szV6vL5fAwcOBCbNm3C\n999/jwULFnATNLXGxcUFgwcPxvr16/H222/j5Zdfxt27d7F69WqMGjWqSTOkmpoavP3222hoaMDU\nqVNb/Pplb2+PmJgYfPfdd1i4cCEmTpwIa2tr7NmzB15eXpg8eTL4fD6qq6vxxRdfgM/nw9nZGaGh\noVAoFPjyyy9hbGyMl156CQKBAESEc+fOYf78+VAoFMjPz8cPP/wAHo+Ho0eP4urVq+2alIthGOYv\nx/DZuj1/ERER9E9SVFREw4YNIw8PD/Lw8KDAwEDy8PAgd3f3Fv9cXV1JIpGQWCwmExMT4vP5ZGpq\nSjY2Nq2u4+bmRk5OTq3+37BdMzMzEolEJBQKydTUlExMTMjY2JjEYnGTPysrqza3Zfjz9fWljRs3\nkl6vf+xxKCsro+TkZDIzMyOxWExOTk4UGBhIjo6OZG1tTUKhkJYsWUK5ubkUGRlJAMjb25v27NlD\nRET19fUUHR1NFhYW9N1335FcLqcXX3yRBAIBubi4kLe3N3l5eZGVlRVZWlrSqlWr6O7duzRy5Egy\nMTEhKysr2rhxI+l0OiooKKC+ffuSSCQiPz8/Cg0NpS5dunBpEREpFAoaOnQoBQQE0O3bt7nflUol\nTZgwgVxcXCg7O7vJPur1ejp79ix16dKFbG1taerUqfTGG29QTEwMrV69mhQKBbfcmTNnKCgoiOzs\n7GjatGn0xhtvUHR0NL333nvccgqFgt58802SSCRkampK/v7+1K1bNxo6dCgZGRlRaGgo5eXltXnc\nGxoaaNu2bdSvXz+ytrYmFxcXiouLo+TkZIoDNYqJAAAgAElEQVSNjaWgoCCKjIykS5cuUUpKCvn6\n+pJQKKSoqCi6ceMG3b9/n5599lni8Xjk7u5OR44coezsbAoODiYAlJSURFevXiUiotzcXIqNjSUA\nFBcXR+fOneOugS5dulBQUBCNHj2aIiMjKTw8nFvv2LFjZGZmRv/6179Io9G0uB81NTU0duxY4vP5\nFBERQTdu3Gi2TGNjI61YsYLEYjGNHj2a1Go1V3ZmzZpFJiYm5ObmRqGhoRQUFERLly7l0lMqlTR6\n9Gjy8fFpckzVajW98MIL5OjoSOfPn2/zWBuUl5dT165dKT4+nurr67ntrF+/nqytrcnW1pZCQkKo\na9euNHLkSKqurqY1a9aQvb09mZub0/jx47n1iIgOHz5MNjY2lJCQQKNGjSI/Pz8aPXo01dbWkk6n\no71795KbmxtJJBIKDg6m4OBg6t27NxUWFjbJl0KhoBEjRpCdnR2lp6e3a19yc3O5a8VwbU2bNo0q\nKyubLLdjxw6ysLCg8ePHk0wma3Fber2eLl26RJGRkWRkZERisZjs7e1p4MCBlJeXx91HlEolzZ8/\nnywsLMjZ2ZkGDBhAcXFxFB0dTampqaTT6YiIqLi4mGJjY7l7mpmZGUkkEjIxMSGBQED9+/cnqVTa\nrv1kGIb5M/w3Bn5srMyjFtpatiYyMpIyMzP/qBj/L0er1aKwsBClpaUttklti0KhQFlZGTw9Pduc\nmlmr1aK6uvqxs7wpFAoolUpoNBrY2tpCr9dDrVa32PSjPYRCIQICAto1lrVCocDx48dhbm7OTbhS\nWFjI1XgKBAIkJiZCJBLhp59+4mqaYmJi0K1bN2i1Wvz888+oqKhAfHw8bt26hTFjxuC5557D0qVL\nuXG2DbWyYrEYO3bswNmzZ2FlZYWqqioEBQVxtWzFxcU4ceIEqqqqUF9fj549eyIhIYGraSMi5Obm\norS0FAkJCVzzBEMat27dQt++fZuN/avX63Hjxg2kpaWhvLwcVlZW6NatGyIjI5t8ptfr9bh+/TrS\n09NRVlYGa2trdOvWDVFRUU1GM5DL5UhPT8fly5fB4/HQt29fuLu74/Dhw3B2dkZkZCSsra3bPPb0\n368A2dnZuH79Ou7du4f79+/D1tYWYWFhiI+Ph4eHB86fP48bN27A3NwcUqkUgwYNAhHh0KFD0Gg0\n4PF46NWrF3Q6Hc6ePQvgQW1x79690blzZ+Tn5+P48eNcOY+NjUV4eDh0Oh0uXryIrKws6PV6iMVi\nJCQkcDN7Llu2DFu2bMG+ffsQExPT4j5UV1cjJSUFjY2NEAgEePbZZ1vskKlQKHD48GE4OjoiLi6O\nq82XSqU4evQoSktLUVJSgpCQEDz77LNc8yoi4maN7NOnT5PzXVRUhBs3bnDl83GysrIwaNAgzJs3\nr8kkJyqVCmfPnkVeXh6Ki4vh7u6OAQMGwMPDAzdu3OCauJiamiIkJIQrLwqFAqdOneKakjk4OKBP\nnz7cdafT6XDhwgVcunQJpaWlsLS0RFJSUrMmJ0SE5cuXIy8vD1u2bGlXm3siQnl5OY4dO4YrV64g\nICAAI0eObFbmysrKkJ2djS5durQ66Ythe4WFhbhw4QKqqqpga2uLPn36wN7evsk6DQ0NyMzMxM2b\nN1FaWgo7OzsMHjwYnp6eTcaCP3jwIIRCIfR6PXf/q6iogFwuR3h4OIKDgzt0BlCGYZjfIzIyEpmZ\nmY+9KbHAmvnTff/993j++efx8ccfY9asWdxQX1KpFCNGjICXlxc2bdrULPB9lKHs/hEP3/Zuuz3L\ndWQ+H71en2bgcf36dYwZMwYjRozA0qVLW20j3FEe3veO3m+pVIo9e/bg2rVrkMvlePfdd1tt1vJH\n5aGlcqJUKlFTU4OGhga89NJLeO2115CUlPREaf+ReW5v2ixAZhjm7669gTVrY8386cLCwhAUFIRN\nmzbBzs4O4eHhKCsrwzfffAO1Wo25c+e22QnO4I98WLd32+1ZriPz+VcKUFQqFf79739zY4H/0f7I\nfVcoFDh27Bh8fX2xdOnSFoPqPzoPj26biLB9+3Z88sknMDIy4r5QPGkenmaZ+SuVV4ZhmD8Dq7Fm\n/nSGJhdffPEFqqqqIJfLoVarERsbi1GjRj3RNN4M0xGICEqlkhtW86+AiLBr1y58+OGHcHd3x/vv\nv49OnTo97WwxDMP8I7GmIMxfGv13XGy9Xg+5XA6BQAAzMzM2bi3DPESr1UIqlcLY2BhisZi9cDIM\nwzwlrCkI85fG4/EgEAggEAhgZWX1tLPDMH9JQqGw1THwGYZhmL8eVj3IMAzDMAzDMB2ABdYMwzAM\nwzAM0wFYYM0wDMMwDMMwHYAF1gzDMAzDMAzTAVhgzTAMwzAMwzAdgAXWDMMwDMMwDNMBWGDNMAzD\nMAzDMB2ABdYMwzAMwzAM0wFYYM0wDMMwDMMwHYAF1gzDMAzDMAzTAVhgzTAMwzAMwzAdgAXWDMMw\nDMMwDNMBWGDNMAzDMAzDMB2ABdYMwzAMwzAM0wFYYM0wDMMwDMMwHYAF1gzDMAzDMAzTAVhgzTAM\nwzAMwzAdgAXWDMMwDMMwDNMBWGDNMAzDMAzDMB2ABdYMwzAMwzAM0wFYYM0wDMMwDMMwHYAF1gzD\nMAzDMAzTAVhgzTAMwzAMwzAdgAXWDMMwDMMwDNMBWGDNMAzDMAzDMB2ABdYMwzAMwzAM0wFYYM0w\nDMMwDMMwHYAF1gzDMAzDMAzTAVhgzTAMwzAMwzAdgAXWDMMwDMMwDNMBWGD9B9Hr9ZDJZCgpKYFW\nqwURNfvtz0ZEUCqVUKvVf3ra/wREBLVajdra2qdyfv/JDNcXET3xujqdDnK5/Det+6R+Tz5/b7pK\npRIqlepPTfeP9rSO59/BX+3YGPLDMP/rhE87A39HRIQrV66AiBAaGgoej9fk/2q1GmvXrsWxY8eg\n0+nw3XffwdbWFmvWrMHx48e535ydnf+0PN+5cwe7d+9Geno6Ro4ciYkTJ/5paf9TXL58GR9++CHy\n8/OxatUq9O3bt93rqtVqVFdXQ6VSwcHBAWKxuNkyer0e5eXlUCqV4PP5cHR0hImJSUfuwt9SXV0d\nduzYgTt37mD+/PlwdXVt13oajQb79u3D6dOnUVdXh08//RQ2NjZ/SB6JCJcvX8ahQ4eg0+mwcOFC\nmJqa/iFpPUoqlWLLli04efIkevTogUWLFkEgEPwpaf+RGhoacODAAaSnp2PChAmIjY192ln6SyAi\n/PLLL0hNTYVcLsfixYthZWX11PKj0+lw+PBhXLhwAWKxGPPnz4dIJHpq+WGYPxqrsf4N6urqsGDB\nAsydOxc1NTXN/i8QCODr64s7d+6gqKgIGo0GfD4fnTp1avLbb1VZWYlVq1YhPT293etoNBqkp6cj\nJSUFRUVFvzltpnUCgQB5eXm4ePEiysvL272eTqfDxo0b0b9/f/Tu3Rtz5sxBVVVVs+VKSkrw/PPP\no1evXhgyZAiysrI6Mvt/SyUlJfjXv/6FQ4cOobi4GDdv3mz3unq9HpWVldi5cycuXLjw2Nrc0tJS\nXLp0CY2NjU+cTyLCiRMnsGLFCuzdu/c3beP3MAT1hYWFf2q6f6Samhp88MEH+Oyzz5CTk/O0s/OX\n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\n//79ycbGhnbv3k1arbZZfg8ePEiOjo5kbGxMhw4d4n4/evQoeXh4kJubG33++eeUnZ1Ny5cvp5CQ\nEDp9+nSrHb+IiF577TUCQOHh4bRlyxb68ccfaerUqdSjRw+u41xNTQ316tWLhEIhjR07lhYsWEAB\nAQEkEonIxsaGduzYQWVlZTR16lTi8XgUExNDBQUFTdL54osvSCAQkI+PD02ZMoWOHj3aap5kMhm9\n+uqrZGJiQkOHDqWTJ09Samoq9e3bl6ZOncp1st26dSuZmJhQdHQ05eTktNkJ79atW+Tl5UVmZmY0\natQoeuedd0gmk9HWrVvJycmJjIyMaNmyZdxoFtu2bSMej0djx44lqVRKFRUVlJSURABo7ty5JJfL\nae3ateTp6UkbN26knTt3Uq9evSguLo7ruPeouro6ioyMJIFAQDExMfTBBx/QypUrqXfv3vTll19y\nnR4N9wB/f3+yt7enjz/+mLKysmjt2rXUpUsXOnDgANcpLD09nVvuk08+oaysLFqzZg116dKFDh06\nRDqdjuRyOb333nskFAopIiKCLl++TFKplFavXk22trbk6+tLmzdv5jpzPkyj0dC6devI2NiYvL29\n6fTp06RUKun9998nS0tLsra2pu+++450Oh3JZDJKSEggS0tL+uyzz0ipVNLkyZOJx+NRUlISbdmy\nhRISEsjExISEQiHNmTOnSUc2rVZLS5cuJR6PR5MmTSKVStXq+TQwjApia2tLL774In3++ec0ceJE\nGjVqFNfx2XCNODs7k5OTE82aNYuWLVtGzz//PH3zzTctblelUtG6detIIpGQvb09HTx4sMl1dPr0\naXJxcSFnZ2eaM2cOrVu3jiZOnEjff/89ET3oUG5tbU2Wlpa0ZMkS+uGHH2j+/PnUs2dPblQXpVJJ\na9euJXNzc3J0dKSff/65SRoymYxmz55NJiYmNHz4cDp16hSlpqZS79696YUXXqCamhoiIrp27Rp1\n6dKFTExM6LnnnqM5c+ZQ586dycbGhkQiEb333nukUChIoVDQuHHjSCgU0jPPPEOvv/469e/fnyws\nLMjGxoaOHTvGdcLt378/iUQiGjx4MG3bto0+//xzmjdvHpWWllJBQQFFRESQRCKhiRMn0tq1a2nO\nnDm0YsUK0mq1dOLECXJ1dSULCwuaPHkyTZ8+nfz8/EgikZClpSXX+Vgul9OAAQOoa9euVFpa+thz\n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\nJk2aRNHR0fT888+TVqsllUpFc+bModjYWHrggQeoV69eNGzYMNJoNL+o3q9evUre3t6UmppKly9f\nppKSEjpy5AilpqbS9evXqbOzk1avXk0JCQk0cuRIiouLI6VSSQsXLqTW1lZiGIa+/fZb6tWrF7m6\nutKIESMoPDyc+Hw+jR8/ni3vmzl+/DjFxsaSUCikhIQE6tmzJykUCuLz+RQXF0cLFy6kqKgoCgsL\nIxcXF/Lz86Njx44RwzBsmW/fvp0GDx5M6enp1KdPH4qJiaFVq1aRWq0mov/P3nVHR1Vt728mmWTS\nJ5n03kglJIQWQCkSCFUE6YLyUKmCFQXkp09EigqI+ERBij55SO+9hg4hBAglhfTe+5RM+X5/5M1d\nDEkA3/M1zbcWa5E79567T9tnn3P33h954MABBgcH08LCggMHDqSXlxdNTU350ksvUaVS8dKlS4yN\njeWgQYP4wgsvsGPHjly1ahUbGxtbbKfz589z5MiRDA0N5b59+6jT6bhhwwaGhIRQLpezb9++9Pb2\nplQqpY2NDd9++23W1tZSr9fz0KFDtLOzo4eHB+fPn8+lS5cyIyODer2eRUVFfP3119mxY0f279+f\nvr6+9Pf358qVK6lUKqlSqfjGG2/Q2dmZbm5ujIuLo7W1Na2srLhr1y5u3LiR0dHR9PDw4MSJExkU\nFER7e3s6OTlxxowZXLVqFYODg+nq6koHBweOGDGCxcXFJEmtVss1a9YwKiqKoaGh9PHxoUwm48SJ\nE1lZWUmSPHLkCOVyOWUyGYcMGcJZs2axsLCQixYtYu/evTlw4EDhXr1ezytXrjA2Npbdu3dn7969\n6ezszG7duvH48ePU6XQsLi7muHHj6OjoyPbt27Nr1660t7enRCJhUFAQT5w4IfTz00Kj0XDv3r2M\njY1lVFQUIyIi6OXlxUGDBrG8vJxarZa7d+9m165d2adPH3bt2pWOjo4cOnQob9++Tb1ez+TkZPbp\n06fF+f7MM8/w3r17JJv02uDBgykSiRgTE8ORI0fy5MmTJMnk5GQOGDCA4eHhbNeuHeVyOYODg3n2\n7Fnq9Xrq9XqWlpbyww8/ZHR0NCMjIxkeHk5XV1d+++23TEtLY/v27WlmZsbnnnuO48ePF977KPbs\n2UMzMzPGxcVRqVQ+VTvp9Xrm5+fzT3/6E6Ojo9m/f396e3szMDCQa9asoVKppFKp5PTp0+nk5EQP\n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\nREQE09PT/005/vspKCjgBx98wNGjR/PChQu8cOECBwwYQCsrK7733nviwqvX6zllyhSGh4fzxo0b\nfPnyJffu3ctKlSrR3d2dV65cIUmePn2an3zyCTdt2sRVq1ZRqVRy7Nixf2qx/fLLL1m3bl1u2LCB\n27dv5/bt27lv3z4zoSQ2NpZhYWGcOnUqNRoNtVotjx8/zqpVq9LDw4M3b94kSWq1Wnbv3p3NmjXj\nihUruHbtWjZt2pRSqZRdu3ZlQUHBW/NSVFTEwYMHs0GDBlyyZAk3bNjANm3aUC6Xs1WrVszJyRHT\n7t69m87OzoyOjqbRaGRhYSHHjRtHtVrN48ePmz3XYDBw3bp1rFmzJleuXMmMjIwSdVRQUMCpU6dy\n586dvHXrFletWkVHR0fWrFnz7+5rly5doo2NDceNG2d2PSUlhb///rvZtV9++YWVK1eml5cXZTIZ\nv/vuuzLbMScnh++//z6trKw4ZcoUarVa7tmzh35+ftyzZ4+ZwF5eNm/eTD8/P86YMYPbtm3jsGHD\naGtrS09PT967d09M9+DBA9atW5fjx4/njRs3+PPPP7NWrVpUKpVcsmQJjUYjHz58yJEjR3LZsmXc\nu3cv3d3d2a5dOxYWFpY7P/fv36e/vz+//PJLsV9u376d9+7dM/v4Xrx4MYOCgnj+/HmmpaXxypUr\nbNSoEZVKJZcuXSqm/eyzz1ijRg0uWrSImzdvZvfu3alQKFirVi3x4+RtHDt2jFWrVuXEiRO5bds2\nTpo0ic7OznRwcOCZM2fEdEePHmXVqlU5adIkbtu2jRMnTqSTkxMdHR157ty5Es8tKirikiVLaGNj\nQwDcsGGD+JsgCNy1axcrVarEY8eOUafTMTs7m/Pnz6e1tTXbt2/P3NzcctepBQsWLPyVsQjW/ySM\nRiOHDRtWqmCdkZHB+vXrMyQkhC9evKBGo2Hz5s3p7+/PpKQkZmRk8OXLl8zKyipVCNHr9UxMTOSN\nGzd4+/ZtZmdnm6UTBIH5+fl89uyZmPb69euMjY0tdZeyqKiI6enpTE1NpUaj+dO7RUajkWlpaWY7\nyk+ePKG3tzfDwsKYlpZG8vVubJ06dThr1ixxN81oNPK7776jXC7n5MmTxWum358+fUpvb29OnDjx\nT+Vp1qxZ/OSTT2gwGKjX62kwGEqUa926dXRycuKFCxfMyjJ16lTK5XJu2bJFvPbgwQOmpaVREAQK\n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\n+gIRwWAw4JNPPsH27dvxwQcfXJNgRalUwtfXF+np6UhJScGMGTPg4eGB/fv346effsL8+fPbjO3t\nCoWFhUhOTkZISAj+9re/XdOc4IiICMTHx+Po0aP4+OOPcdttt8HNzQ1bt26Fj48P7r77bpe2lhcV\nFWH16tWorKzE3LlzERoaioKCAqSmpuKee+7Bdddd57J9AZdugmbMmIEZM2YAuHTtbN++Henp6Xjg\ngQdw1113ubx+jx8/jueeew41NTV47LHH4O7ujoaGBmzcuBF9+/bFDTfc4NL9ERFOnDiBRx55BKIo\nIiYmBufOnQMRYf369fj555/x1FNPubxl2fH0ITMzE3a7Hc3NzSAiTgthjLE/oq68Rcbx+aO9eZGI\nqLi4mJKTkykpKYnUajV5eHjQHXfcQYsXL6a8vDwiuvQGti+//JJ69uxJarWafH19KTAwkJYsWUIm\nk+malEsURfr+++9pzJgxNHr0aDp48CAJgnDN9rV7926KiIggtVpNPXv2pH79+lF8fDwlJydTS0uL\ny/dptVrpiSeeIKVSSa+++uo1OzYHURRp8+bNFBAQQGq1mqKjo6l37970pz/9iY4cOeLyt/aVl5fT\nmDFjSK1WU2hoKA0YMIB69uxJTz75JNXV1bl0X79UX19PH374IY0YMYIAUO/evWndunVktVpdup8T\nJ05QdHQ06XQ6uu222+j111+n8ePH0w033EBZWVkur9OSkhIaPXo0ASCZTEbu7u7k7+9P/v7+0hsf\nXf19NJvNtH79enrggQcoMDCQ5HI5DRw4kF5++WXauXMn2e12l+6PMcbY74PfvOgiMpkMPj4+uPXW\nWzFp0iSo1WqYzWbI5XKphU8mk2HChAmIjo5GWloazp49izFjxiApKemajkSg0Wjw17/+FTfffLPT\nmNauJpPJkJSUhO3bt+PIkSM4ceIEZDIZpk6dihEjRlyTvFW5XI6kpCR069YNDz744DUfwUImk+H2\n22+HXq/Hnj17UF1djfDwcNx3332Ij493ed0GBQVhzZo12L17Nw4dOgSFQoHRo0fjL3/5yzXJsf4l\ntVqNqVOnYurUqQAupRa5emSX3r17Y926ddixYwdKSkpw4MABDB8+HPfffz9iYmJcXqcymQx9+/bF\nsGHDIIqi9OKioqIimM1m3HbbbdckD1qtVmPw4MEYPHgwNBqietPUAAAgAElEQVQNLBYLiOg3G3WF\nMcbYfw4ZXcFIAEOGDKGMjIxrWJz/fo47FplM9j/5KNhxfACu+TG2vjZ/y7p0BJi/xTn8Levz90JE\nEEURFosFGo3mmgWcrb97wP9fM7/l+WSMMfa/aciQIcjIyLjsjwi3WLvY//qP9295fL9XPf6WLY3/\n69cLcOkYFQoFPDw8rvl+2qtLbjlmjDH2W+FfHMYYY4wxxlyAA2vGGGOMMcZcgANrxhhjjDHGXIAD\na8YYY4wxxlyAA2vGGGOMMcZcgANrxhhjjDHGXIADa8YYY4wxxlyAA2vGGGOMMcZcgANrxhhjjDHG\nXIADa8YYY4wxxlyAA2vGGGOMMcZcgANrxhhjjDHGXIADa8YYY4wxxlyAA2vGGGOMMcZcgANrxhhj\njDHGXIADa8YYY4wxxlyAA2vGGGOMMcZcgANrxhhjjDHGXIADa8YYY4wxxlyAA2vGGGOMMcZcgANr\nxhhjjDHGXIADa8YYY4wxxlyAA2vGGGOMMcZcgANrxhhjjDHGXIADa8YYY4wxxlyAA2vGGGOMMcZc\ngANrxhhjjDHGXIADa8YYY4wxxlyAA2vGGGOMMcZcgANrxhhjjDHGXIADa8YYY4wxxlxA+XsX4D+Z\nKIowmUwgonbny+VyuLu7QyaTtZlnNpshiiLc3d1ht9uhVCrbXe5/nc1mg8ViaTNdrVZDrVb/DiX6\n7+C49gDA3d0dcnnX74FFUYQgCFCpVNeqeP+xiAhmsxmCIEAmk0nfT6vVCrVa/Yf8DjLGGPvtcGDd\niWPHjmH+/PlSgPNLHh4emDNnDsaNGydNEwQBO3fuRGpqKoxGI6KiotDU1AQvLy8oFAr069cP9957\nL3x8fKR1DAYDli9fjqKiojb7iIiIwLRp0xASEuIUFNjtdqxbtw6HDh3CzTffjMmTJ0uBFBHh+++/\nx759+zB79mwEBga6qkq6TBAE7N69G59++imKi4vb3Jx069YNM2fOxKhRo64oaPwlo9GIlStX4uzZ\ns9K07t27Y8aMGR0eNxEhIyMD2dnZHd409ezZE9dffz2Uyqv7ihQXF2Pfvn2w2Wztzvfx8cHYsWOh\n0+mkaUajEcuWLcOePXsgiiK6d+/udBMSHh6ORx55pN3jq6+vx5tvvokLFy5Ar9cDAIKDgzFr1iz4\n+/s7LVtbW4ulS5eioqJCmta/f3/cf//98PLyare8JpMJ33zzDWpqaqRp0dHRuP766+Hm5tbuOoIg\n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\nGg0SExMxYsQI6ebHMa50WloaTCYTDAYDdDodIiMjkZ+fD4vFgqFDh2LMmDHtvjb8SlRVVWH37t0w\nGAyoqamBUqlEbGwsKisrUVtbi/DwcNx5551OL4kxm83IycmBIAior69vk9qh1WoxbNiwNqN7NDc3\n4/jx4zAYDAAuXVdGoxFmsxlqtRojRoxAXFyc0xORw4cPIzMzE3V1dVCpVJDJZLBardBqtVCpVEhK\nSkKfPn2k68tkMuHTTz/FoUOHUFtb67SOh4cH1Go17rrrLtxyyy3SfkRRRHZ2Ng4ePAiTyYTm5mb4\n+PggJCQEZ8+ehSiKGDlyJG688carfoJRU1OD6upq2Gw2FBcXtxlRJCAgAMOGDWu38zBjjDHWkSFD\nhiAjI+OyL4LgwJoxdkVa50a3HsHGEUgrFIqreq08Y4wx9p+mq4E1p4Iwxq6ITCaDUqn8XZ6EMMYY\nY//JuFmJMcYYY4wxF+DAmjHGGGOMMRfgwJoxxhhjjDEX4MCaMcYYY4wxF+DAmjHGGGOMMRfgwJox\nxhhjjDEX4MCaMcYYY4wxF+DAmjHGGGOMMRfgwJoxxhhjjDEX4MCaMcYYY4wxF+DAmjHGGGOMMRfg\nwJoxxhhjjDEX4MCaMcYYY4wxF+DAmjHGGGOMMRfgwJoxxhhjjDEX4MCaMcYYY4wxF+DAmjHGGGOM\nMRfgwJoxxhhjjDEX4MCaMcYYY4wxF+DAmjHGGGOMMRfgwJoxxhhjjDEX4MCaMcYYY4wxF+DAmjHG\nGGOMMRfgwJoxxhhjjDEX4MCaMcYYY4wxF+DAmjHGGGOMMRfgwJoxxhhjjDEX4MCaMcYYY4wxF+DA\nmjHGGGOMMRfgwJoxxhhjjDEX4MCaMcYYY4wxF+DAmjHGGGOMMRfgwJoxxhhjjDEX4MCaMcYYY4wx\nF+DAmjHGGGOMMRdQ/t4F+E9GRLDb7TCbzVAqlVCpVGhsbERtbS1UKhUCAwPh7u4OmUz2exf1N0VE\nsNlsICJYrVYolUpoNBqpHogIJpMJgiBApVJBEAS4u7tDLr/8fVxzczMKCwuRl5eHhIQE9OrVq91p\nHZXLarVCLpdDoVDAYrFI5439NogIgiCgsrISOp0OXl5eXVrHbrdDJpNBoVBI25DJZBBFESqVyuk7\nRkRdKktH68hkMukaVigUkMvlnX6HO9rf/8L3vqamBvv370dhYSH+9re/ISws7IrW/0+qG8f3/+zZ\n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\nNDc3o1evXvD398eaNWtw9OhRVFdX48cff8Q777yDO++8E5MmTZJSro4dO4aBAwdKKVMGgwEHDx6E\nwWDApk2bpO+q0WjEmjVrMH36dOTn5+Ott96Cp6cnKioq8MQTTyAvLw/h4eHo3r07du/eja+++grV\n1dXIzs5GcnIyEhIS8Nhjj0GhUMBmsyEtLQ0xMTFSw4HNZsO+fftgNBqxffv2qx6SkDH2B9KVRGzH\n54/WebGwsJBGjhxJnp6e5OHhQdHR0XTw4MF2l62oqKCJEyeSp6cnBQYG0urVq9vMnzx5MqnVaure\nvTv169ePevXqRSkpKVRVVUXjx48nrVZLPj4+NHPmTLJYLERE9Oyzz5JOp6MnnniCLBYL5eXlUWxs\nLCkUCoqIiKDXXnuNBEGgTz75hIKCgkir1dINN9xAFy9eJFEU6fjx43TTTTeRj48P9erViwYPHkwD\nBw6krKwsstvttHPnToqLiyMfHx8KCgqiiIgImjlzJrW0tHRYLzt37qSePXuSVqslvV5PU6ZMkToE\nEl3qmDZnzhwKDAykqKgo6tOnD61bt47MZjM9//zzpNfrydfXl+Li4mj06NE0evRoio6OpunTp9O3\n335Lffv2paCgIOrWrRtt3LiRDh065DRt06ZN7ZbLarXS008/Tb6+vuTp6UnR0dH08ssvU0lJCY0Z\nM4a0Wi35+vrS7NmzpfqdNWsW6XQ6euqpp8hqtVJubi7FxMSQUqmkiIgIeuONN0gURaqrq6MHH3yQ\n3NzcKCIiQjp/CxcupNraWpo6dSrpdDry8/OjZcuWSR3m6urq6LbbbiOtVkve3t700EMPkclkIiKi\nl19+mTw9Penhhx8mk8lEhw8fpoSEBNJoNNSjRw9KSEigKVOmUHx8PPXr148OHDhAVVVVdMMNN5Bc\nLqdu3brRtGnTyGQyUUpKCgUEBJBWq6WkpCSqqKggoksdCceNG0darZYmTZpEr776Kt1888308MMP\nS51vP/roI/L39yetVkv9+vWjrKwsIrrUiTQ0NJR69+5NJ06coAsXLtD/sffe4VFV2///e2rKJJNJ\nQnpCek9IIWCAhC4tYAE7ggKKclEBBQteRK/gBwFBEbEgFy5RIELooQcUSSGNEEKCqaT3Nplezvr9\nwZ3zIxAgCFi+97yeJw8PZ87Ze51dZtbee5WRI0eSubk5eXp6UmBgID355JMUERFBAQEBtHXrVuro\n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\nTURERESkAgZrIiIiIiIVMFgTEREREamAwZqIiIiISAUM1kREREREKmCwJiIiIiJSAYM1EREREZEK\nGKyJiIiIiFTAYE1EREREpAIGayIiIiIiFTBYExERERGpgMGaiIiIiEgFDNZERERERCpgsCYiIiIi\nUgGDNRERERGRChisiYiIiIhUwGBNRERERKQCBmsiIiIiIhUwWBMRERERqYDBmoiIiIhIBQzWRERE\nREQqYLAmIiIiIlIBgzURERERkQoYrImIiIiIVMBgTURERESkAgZrIiIiIiIVMFgTEREREamAwZqI\niIiISAUM1kREREREKmCwJiIiIiJSAYM1EREREZEKGKyJiIiIiFTAYE1EREREpAIGayIiIiIiFTBY\nExERERGpgMGaiIiIiEgFDNZERERERCpgsCYiIiIiUgGDNRERERGRChisiYiIiIhUwGBNRERERKQC\nBmsiIiIiIhUwWBMRERERqYDBmoiIiIhIBQzWREREREQqYLAmIiIiIlIBgzURERERkQoYrImIiIiI\nVMBgTURERESkAgZrIiIiIiIVMFgTEREREamAwZqIiIiISAUaEbn9hTWaJgB1X93qEBERERF97QwW\nkehbLfSlgjUREREREfWOQ0GIiIiIiFTAYE1EREREpAIGayIiIiIiFTBYExERERGpgMGaiIiIiEgF\nDNZERERERCpgsCYiIiIiUgGDNRERERGRChisiYiIiIhU8P8ApIf8+UExRBUAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure(figsize=(16, 20))\n", "xticks([]); yticks([])\n", "imshow(img3d, interpolation='bilinear');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### OCR" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Распознать скан может помочь библиотека `pyocr`, являющаяся враппером над open-source OCR Tesseract от Google." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "скачать и поставить https://github.com/tesseract-ocr/tesseract/wiki/Downloads#binaries-for-windows\n", " указать инсталлеру скачать rus training\n", "добавить в PATH\n", "\n", "pip install pyocr\n", "```" ] }, { "cell_type": "code", "execution_count": 108, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pyocr" ] }, { "cell_type": "code", "execution_count": 114, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Tesseract (sh) [u'eng', u'osd', u'rus']\n" ] } ], "source": [ "for tool in pyocr.get_available_tools():\n", " print tool.get_name(), tool.get_available_languages()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from PIL import Image\n", "im = Image.fromarray(img3d)" ] }, { "cell_type": "code", "execution_count": 118, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wall time: 10.3 s\n" ] } ], "source": [ "%%time\n", "ocred = tool.image_to_string(im)" ] }, { "cell_type": "code", "execution_count": 119, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "u'Acquisitions editor: Paul Becker\\n\\nEditorial assistant: Noreen Regina\\n\\nCover design director: Eloise Starkweather\\nCover designer: Lundgren Graphics\\nManufacturing buyer: Mary E. McCartney\\n\\n\\xa91994 by P.J. Plauger\\n\\nPublished by PTR Prentice-Hall, Inc.\\nA Simon & Schuster Company\\n\\nEnglewood Cliffs, New Jersey 07632\\n\\n \\n\\nAll rights reserved. No part of this book may be reproduced,\\nin any form or by any means, without permission in writing\\nof the author.\\n\\nThe publisher offers discounts on this book when ordered in\\n\\nbulk quantities. For more information, contact Corporate Sales Department,\\nPTR Prentice Hall, 113 Sylvan Avenue, Englewood Cliffs, NJ 07632.\\nPhone: 201-592-2863; FAX: 201-592-2249.\\n\\nPrinted in the United States of America\\n10 9 8 7 6 5 4 3 2 1\\n\\nISBN - O-13-328113-2\\n\\nPrentice-Hall International (UK) Limited, London\\nPrentice-Hall of Australia, Pty. Limited, Sydney\\nPrentice-Hall Canada Inc., Toronto\\n\\nPrentice-Hall Hispanoamericana, S.A., Mexico\\nPrentice-Hall of India Private Limited, New Delhi\\nPrentice-Hall of Japan, Inc., Tokyo\\n\\nSimon & Schuster Asia Pte. Ltd., Singapore\\n\\nEditora Prentice-Hall do Brazil, Ltda., Rio de Janeiro'" ] }, "execution_count": 119, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ocred" ] }, { "cell_type": "code", "execution_count": 149, "metadata": { "collapsed": true }, "outputs": [], "source": [ "mine = u'''Acquisitions editor: Paul Becker\n", "Editorial assistant: Noreen Regina\n", "Cover design director: Eloise Starkweather\n", "Cover designer: Lundgren Graphics\n", "Manufacturing buyer: Mary E. McCartney\n", "\n", "©1994 by P.J. Plauger\n", "\n", "Published by PTR Prentice-Hall, Inc.\n", "A Simon & Schuster Company\n", "Englewood Cliffs, New Jersey 07632\n", "\n", "All rights reserved. No part of this book may be reproduced,\n", "in any form or by any means, without permission in writing\n", "of the author.\n", "\n", "The publisher offers discounts on this book when ordered in\n", "bulk quantities. For more information, contact Corporate Sales Department,\n", "PTR Prentice Hall, 113 Sylvan Avenue, Englewood Cliffs, NJ 07632.\n", "Phone: 201-592-2863; FAX: 201-592-2249.\n", "\n", "Printed in the United States of America\n", "10 9 8 7 6 5 4 3 2 1\n", "\n", "ISBN 0-13-328113-2\n", "\n", "Prentice-Hall International (UK) Limited, London\n", "Prentice-Hall of Australia, Pty. Limited, Sydney\n", "Prentice-Hall Canada Inc., Toronto\n", "Prentice-Hall Hispanoamericana, S.A., Mexico\n", "Prentice-Hall of India Private Limited, New Delhi\n", "Prentice-Hall of Japan, Inc., Tokyo\n", "Simon & Schuster Asia Pte. Ltd., Singapore\n", "Editora Prentice-Hall do Brazil, Ltda., Rio de Janeiro'''" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "У меня на перепечатку ушло 5 минут ровно" ] }, { "cell_type": "code", "execution_count": 152, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def colored_diff(s_was, s_become):\n", " import difflib\n", " from colorama import Fore, Back, Style\n", " result = []\n", " for item in difflib.Differ().compare(s_was, s_become):\n", " typ, _, ch = item\n", " if typ == ' ':\n", " result.append(ch)\n", " elif typ == '-':\n", " result.append(Fore.YELLOW + Back.RED + ch + Style.RESET_ALL + Fore.BLACK)\n", " elif typ == '+':\n", " result.append(Fore.YELLOW + Back.GREEN + ch + Style.RESET_ALL + Fore.BLACK)\n", " return ''.join(result)" ] }, { "cell_type": "code", "execution_count": 153, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Acquisitions editor: Paul Becker\n", "\u001b[33m\u001b[41m\n", "\u001b[0m\u001b[30mEditorial assistant: Noreen Regina\u001b[33m\u001b[41m\n", "\u001b[0m\u001b[30m\n", "Cover design director: Eloise Starkweather\n", "Cover designer: Lundgren Graphics\n", "Manufacturing buyer: Mary E. McCartney\n", "\n", "©1994 by P.J. Plauger\n", "\n", "Published by PTR Prentice-Hall, Inc.\n", "A Simon & Schuster Company\n", "\u001b[33m\u001b[41m\n", "\u001b[0m\u001b[30mEnglewood Cliffs, New Jersey 07632\n", "\n", "\u001b[33m\u001b[41m \u001b[0m\u001b[30m\u001b[33m\u001b[41m\n", "\u001b[0m\u001b[30m\u001b[33m\u001b[41m\n", "\u001b[0m\u001b[30mAll rights reserved. No part of this book may be reproduced,\n", "in any form or by any means, without permission in writing\n", "of the author.\n", "\n", "The publisher offers discounts on this book when ordered in\u001b[33m\u001b[41m\n", "\u001b[0m\u001b[30m\n", "bulk quantities. For more information, contact Corporate Sales Department,\n", "PTR Prentice Hall, 113 Sylvan Avenue, Englewood Cliffs, NJ 07632.\n", "Phone: 201-592-2863; FAX: 201-592-2249.\n", "\n", "Printed in the United States of America\n", "10 9 8 7 6 5 4 3 2 1\n", "\n", "ISBN \u001b[33m\u001b[42m0\u001b[0m\u001b[30m\u001b[33m\u001b[41m-\u001b[0m\u001b[30m\u001b[33m\u001b[41m \u001b[0m\u001b[30m\u001b[33m\u001b[41mO\u001b[0m\u001b[30m-13-328113-2\n", "\n", "Prentice-Hall International (UK) Limited, London\n", "Prentice-Hall of Australia, Pty. Limited, Sydney\n", "Prentice-Hall Canada Inc., Toronto\n", "\u001b[33m\u001b[41m\n", "\u001b[0m\u001b[30mPrentice-Hall Hispanoamericana, S.A., Mexico\n", "Prentice-Hall of India Private Limited, New Delhi\n", "Prentice-Hall of Japan, Inc., Tokyo\n", "\u001b[33m\u001b[41m\n", "\u001b[0m\u001b[30mSimon & Schuster Asia Pte. Ltd., Singapore\n", "\u001b[33m\u001b[41m\n", "\u001b[0m\u001b[30mEditora Prentice-Hall do Brazil, Ltda., Rio de Janeiro\n" ] } ], "source": [ "print colored_diff(ocred, mine)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Системы контроля версий" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "todo http://gitpython.readthedocs.io/en/stable/tutorial.html" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Значительное количество информационных артефактов, особенно разрабатываемых коллективно, хранится в системах контроля версий, таких, как `git`. Для автоматизации доступа к ним существует библиотека `GitPython`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "todo Читать блоб в любом месте истории, дифф, git blame, реп посложнее? доступ по пути в tree?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "pip install GitPython\n", "```" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import git" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "repo = git.Repo('c:\\\\Temp\\\\python-finediff-copy-for-gitpython')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "False\n", "[]\n" ] } ], "source": [ "print repo.is_dirty()\n", "print repo.untracked_files" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "repo.refs" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "repo.tags" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "repo.heads" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'master'" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "repo.heads.master.name" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Перечисление коммитов" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9596490bbb905d194eff4a34e2920a77dab0acea do 2018-05-24 14:53:46+03:00\n", "\"Installation\" in README.md\n", "[]\n", "\n", "abf3e7bcbd985cd1c00f2b98fac94acdec21ce8e do 2018-05-24 14:47:28+03:00\n", "initial commit\n", "\n" ] } ], "source": [ "for commit in repo.iter_commits(max_count=10):\n", " print commit, commit.author.name, commit.authored_datetime\n", " print commit.message.strip()\n", " if len(commit.parents):\n", " print commit.parents[0].diff(commit)\n", " print" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "last_master_commit = repo.refs['master'].commit\n", "last_master_commit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Свойства коммита" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9596490bbb905d194eff4a34e2920a77dab0acea\n", "do sharp-c@yandex.ru\n", "2018-05-24 14:53:46+03:00\n", "\n", "(,)\n", "\n", "README.md README.md\n", "251 bytes -> 354 bytes\n", "\n", "@@ -5,4 +5,10 @@ This is Python port of https://github.com/gorhill/PHP-FineDiff, library for stri\n", " import finediff\n", " finediff.FineDiff('abcdef', 'badefo').renderDiffToHTML()\n", " ```\n", "-`'abcadefo'`\n", "\\ No newline at end of file\n", "+`'abcadefo'`\n", "+\n", "+### Installation\n", "+\n", "+```bash\n", "+pip install https://github.com/sharpden/python-finediff/tarball/master\n", "+```\n", "\n" ] } ], "source": [ "print last_master_commit.hexsha\n", "print last_master_commit.author.name, last_master_commit.author.email\n", "print last_master_commit.authored_datetime\n", "print\n", "print last_master_commit.parents\n", "print\n", "for diff in last_master_commit.parents[0].diff(last_master_commit, create_patch=True):\n", " print diff.a_path, diff.b_path\n", " print '%d bytes -> %d bytes' % (len(diff.a_blob.data_stream.read()), len(diff.b_blob.data_stream.read()))\n", " print\n", " print diff.diff" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Доступ к дереву файлов конкретного коммита" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "last_master_commit.tree" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "README.md 354\n", "'# python-finediff\\nThis is Python port of'\n", "finediff.py 16327\n", "'# -*- coding: utf-8 -*-\\n# Based on http:'\n", "setup.py 887\n", "'import sys\\nimport os\\nfrom setuptools imp'\n" ] } ], "source": [ "for blob in last_master_commit.tree.traverse():\n", " print blob.path, blob.size\n", " print repr(blob.data_stream.read()[:40])" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 2 }