Skip to content

Instantly share code, notes, and snippets.

@sonalisharma
Created May 1, 2013 18:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sonalisharma/5497468 to your computer and use it in GitHub Desktop.
Save sonalisharma/5497468 to your computer and use it in GitHub Desktop.
{
"metadata": {
"name": "Book Hunters"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": "#Book Hunters\n\nhttps://github.com/fchasen/bookhunters\n\n###Team Members\n\nFred, Luis, Sonali\n\n###Overview\n\nWhen we search for books on the internet we are often overwhelmed with results coming from various sources. It\u2019s difficult to get direct trusted urls to books. Project Gutenberg, HathiTrust and Open Library, all provide an extensive library of books online, each with their own large repositories. By combining their catalogs, Book Hunters enables querying for a book across those different sources, our project will also highlight key statistics about the three datasets which will make it easier for the user to choose the library that best meets their needs. \n\n###Data sources\n\nOpen Library - http://openlibrary.org/\n\nHathiTrust - http://www.hathitrust.org/\n\nGutenberg - http://www.gutenberg.org/"
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "Import libraries and Connect to database"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Each library's data needed to be imported into the databse differently.\n\nThe following links provided the urls to the data and code we used to import each of the datasets.\n\nThis process takes several hours, so shown for reproducibility only.\n\nOpen Library - https://ec2-54-225-70-191.compute-1.amazonaws.com:80/5fb75e17-1eb2-4eb1-8d52-2eb5c3e18fe9\n\nHathiTrust - \n\nGutenberg - "
},
{
"cell_type": "code",
"collapsed": false,
"input": "HTML(\n\"<a href='http://hathitrust.com' target='_blank'><img src='https://si0.twimg.com/profile_images/128419119/hathi_logo_bigger.jpg'/></a>\"+\n\"<a href='http://gutenberg.org' target='_blank'><img src='http://www.gutenberg.org/pics/pg-logo-002.png'/></a>\"+\n\"<a href='http://openlibrary.org/'><img src='http://openlibrary.org/images/logo_OL-lg.png'/></a>\"\n) ",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<a href='http://hathitrust.com' target='_blank'><img src='https://si0.twimg.com/profile_images/128419119/hathi_logo_bigger.jpg'/></a><a href='http://gutenberg.org' target='_blank'><img src='http://www.gutenberg.org/pics/pg-logo-002.png'/></a><a href='http://openlibrary.org/'><img src='http://openlibrary.org/images/logo_OL-lg.png'/></a>",
"output_type": "pyout",
"prompt_number": 185,
"text": "<IPython.core.display.HTML at 0x899f810>"
}
],
"prompt_number": 185
},
{
"cell_type": "code",
"collapsed": false,
"input": "#Importing libraries\n\nimport matplotlib.pyplot as plt\nimport pandas as pd\nfrom itertools import islice\nimport numpy as np\n#Useful way of priting dataframe using html\nfrom IPython.core.display import HTML\nimport IPython.core.display\n",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stderr",
"text": "/usr/local/lib/python2.7/dist-packages/pytz/__init__.py:35: UserWarning: Module logging was already imported from /usr/lib/python2.7/logging/__init__.pyc, but /usr/local/lib/python2.7/dist-packages is being added to sys.path\n from pkg_resources import resource_stream\n"
}
],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": "#Connect to database, our data is in mysql hosted on ec2 cluster. Since the size of data was huge hence it was essential to use a database.\nimport MySQLdb\ndb = MySQLdb.connect(host=\"bookhunters.cicwejvpogpp.us-east-1.rds.amazonaws.com\", port=3306, user=\"bookhunters\", passwd=\"wwod13pw!\",\ndb=\"bookhunters\")\ncursor = db.cursor()",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": "# execute SQL select statement to fetch results from database\ncursor.execute(\"select 'Hathtrust' , count(1) from ht_books union select 'Gutenberg', count(1) from gut_books union select 'Open library', count(1) from ol_books\")\nresults = cursor.fetchall()",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "Fetching overall statistics"
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": "Total Count"
},
{
"cell_type": "code",
"collapsed": false,
"input": "#Store results in a dataframe\nl = list(results)\ndf = pd.DataFrame(l, columns=[\"Source\",\"Count\"])\ndf = df.set_index(df.Source)\ndf",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": "Books count in a bar graph"
},
{
"cell_type": "code",
"collapsed": false,
"input": "df['Count'].plot(kind = 'bar',title=\"Total books\")",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": "#Plot graphs based on publish date\ncursor.execute(\"select pubdate,'Hathitrust' as Source, COUNT(1) from ht_books group by pubdate, 'Hathitrust' union select publish_date,'Openlibrary' as Source, COUNT(1) from ol_books group by publish_date,'Openlibrary' union select created,'Gutenberg' as Source, COUNT(1) from gut_books group by created,'Gutenberg'\")\ndates = cursor.fetchall()\n",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 136
},
{
"cell_type": "code",
"collapsed": false,
"input": "dateslist = list(dates)\ndfdates=pd.DataFrame(dateslist,columns=[\"Year\",\"Source\",\"Count\"])\n#display(HTML(dfdates[:-25].to_html()))",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 137
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": "Number of books by Year"
},
{
"cell_type": "code",
"collapsed": false,
"input": "#Parsing the dates field to fetch only the year, remove redundant text.\nimport re\ndef returnnumber(num): \n try:\n tmp = re.findall((\"(\\d{4})\") ,num)\n if (len(tmp)==1):\n return int(\"\".join(tmp))\n else:\n return None\n except:\n return None\n ",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 138
},
{
"cell_type": "code",
"collapsed": false,
"input": "#Removing null fields from the dataframe to add another column called FilteredDate to store parsed date.\ndfdates.dropna()\ns = pd.Series()\ns = dfdates.Year.apply(returnnumber)\ndfdates[\"FilteredDate\"]=s",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 139
},
{
"cell_type": "code",
"collapsed": false,
"input": "dfdates.sort('FilteredDate')\ndfdates = dfdates[(dfdates.FilteredDate>1990) & (dfdates.FilteredDate<2007)]\n#display(HTML(dfdates.to_html()))",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 143
},
{
"cell_type": "code",
"collapsed": false,
"input": "#Plot the books publishes by year between 1990 and 2002\nd = dfdates.pivot_table('Count', rows='FilteredDate', cols='Source', aggfunc=sum)\nd",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th>Source</th>\n <th>Gutenberg</th>\n <th>Hathitrust</th>\n <th>Openlibrary</th>\n </tr>\n <tr>\n <th>FilteredDate</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>1991</th>\n <td> 5</td>\n <td> 58774</td>\n <td> 1389</td>\n </tr>\n <tr>\n <th>1992</th>\n <td> 13</td>\n <td> 52561</td>\n <td> 1498</td>\n </tr>\n <tr>\n <th>1993</th>\n <td> 36</td>\n <td> 32109</td>\n <td> 1832</td>\n </tr>\n <tr>\n <th>1994</th>\n <td> 58</td>\n <td> 16576</td>\n <td> 1724</td>\n </tr>\n <tr>\n <th>1995</th>\n <td> 110</td>\n <td> 16136</td>\n <td> 1620</td>\n </tr>\n <tr>\n <th>1996</th>\n <td> 335</td>\n <td> 14864</td>\n <td> 1649</td>\n </tr>\n <tr>\n <th>1997</th>\n <td> 335</td>\n <td> 13812</td>\n <td> 1679</td>\n </tr>\n <tr>\n <th>1998</th>\n <td> 350</td>\n <td> 12870</td>\n <td> 1703</td>\n </tr>\n <tr>\n <th>1999</th>\n <td> 344</td>\n <td> 19557</td>\n <td> 1630</td>\n </tr>\n <tr>\n <th>2000</th>\n <td> 356</td>\n <td> 12103</td>\n <td> 1817</td>\n </tr>\n <tr>\n <th>2001</th>\n <td> 332</td>\n <td> 11023</td>\n <td> 1427</td>\n </tr>\n <tr>\n <th>2002</th>\n <td> 388</td>\n <td> 10277</td>\n <td> 1423</td>\n </tr>\n <tr>\n <th>2003</th>\n <td> 1481</td>\n <td> 10003</td>\n <td> 1398</td>\n </tr>\n <tr>\n <th>2004</th>\n <td> 7124</td>\n <td> 9891</td>\n <td> 1262</td>\n </tr>\n <tr>\n <th>2005</th>\n <td> 5145</td>\n <td> 9425</td>\n <td> 1222</td>\n </tr>\n <tr>\n <th>2006</th>\n <td> 3637</td>\n <td> 8401</td>\n <td> 1147</td>\n </tr>\n </tbody>\n</table>\n</div>",
"output_type": "pyout",
"prompt_number": 144,
"text": "Source Gutenberg Hathitrust Openlibrary\nFilteredDate \n1991 5 58774 1389\n1992 13 52561 1498\n1993 36 32109 1832\n1994 58 16576 1724\n1995 110 16136 1620\n1996 335 14864 1649\n1997 335 13812 1679\n1998 350 12870 1703\n1999 344 19557 1630\n2000 356 12103 1817\n2001 332 11023 1427\n2002 388 10277 1423\n2003 1481 10003 1398\n2004 7124 9891 1262\n2005 5145 9425 1222\n2006 3637 8401 1147"
}
],
"prompt_number": 144
},
{
"cell_type": "code",
"collapsed": false,
"input": "d.plot(title=\"Total books collection by year\", linewidth=2.5 )",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 145,
"text": "<matplotlib.axes.AxesSubplot at 0x7146fd0>"
},
{
"output_type": "display_data",
"png": "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\n"
}
],
"prompt_number": 145
},
{
"cell_type": "code",
"collapsed": false,
"input": "def ipynb_input(varname, prompt=''):\n \"\"\"Prompt user for input and assign string val to given variable name.\"\"\"\n js_code = (\"\"\"\n var value = prompt(\"{prompt}\",\"\");\n var py_code = \"{varname} = '\" + value + \"'\";\n IPython.notebook.kernel.execute(py_code);\n \"\"\").format(prompt=prompt, varname=varname)\n return IPython.core.display.Javascript(js_code)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 146
},
{
"cell_type": "code",
"collapsed": false,
"input": "ipynb_input(\"queryterm\", prompt='Enter keywords from book title: ')",
"language": "python",
"metadata": {},
"outputs": [
{
"javascript": "\n var value = prompt(\"Enter keywords from book title: \",\"\");\n var py_code = \"queryterm = '\" + value + \"'\";\n IPython.notebook.kernel.execute(py_code);\n ",
"output_type": "pyout",
"prompt_number": 147,
"text": "<IPython.core.display.Javascript at 0x737aa90>"
}
],
"prompt_number": 147
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Plot books count by year"
},
{
"cell_type": "code",
"collapsed": false,
"input": "cursor.execute(\"select lang as lang,count(1) as count,'Hathitrust' as Source from ht_books where lang is not null group by (lang)\") \ndflang_ht = pd.DataFrame(list(cursor.fetchall()),columns=['Language','Count','Source'])\ncursor.execute(\"select lang as lang ,count(1) as count,'Gutenberg' as Source from gut_books where lang is not null group by (lang)\")\ndflang_gb = pd.DataFrame(list(cursor.fetchall()),columns=['Language','Count','Source'])\ncursor.execute(\"select language as lang,count(1) as count, 'Openlibrary' as Source from ol_books where language is not null group by (language)\")\ndflang_ol = pd.DataFrame(list(cursor.fetchall()),columns=['Language','Count','Source'])",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": "#Function to translate date abbreviation to their full form\ndef language(l):\n langdict= { 'eng':'English',\n 'ger':'German',\n 'fre':'French',\n 'chi':'Chinese',\n 'jpn':'Japan',\n 'rus':'Russian',\n 'en':'English',\n 'fr':'French',\n 'de':'Dutch',\n 'nl':'Dutch',\n 'pt':'Portugese',\n 'spa':'Spanish',\n 'ita':'Italian',\n 'lat':'Latin',\n 'fr':'French',\n 'fi':'Finnish' }\n try:\n if len(l)>3:\n tmp= l[-3:]\n else:\n tmp=l\n return langdict[tmp]\n except:\n return 'Other'\n ",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 148
},
{
"cell_type": "code",
"collapsed": false,
"input": "dflang_gb6= dflang_gb[dflang_gb.Language.str.strip()!=\"\"].sort('Count')[::-1][:6]\ndflang_ol6 = dflang_ol[dflang_ol.Language.str.strip()!=\"\"].sort('Count')[::-1][:6]\ndflang_ht6 = dflang_ht[dflang_ht.Language.str.strip()!=\"\"].sort('Count')[::-1][:6]\ndflang_gb6['Lang']= dflang_gb[dflang_gb.Language.str.strip()!=\"\"].sort('Count')[::-1][:6].Language.apply(language)\ndflang_ol6['Lang']= dflang_ol[dflang_ol.Language.str.strip()!=\"\"].sort('Count')[::-1][:6].Language.apply(language)\ndflang_ht6['Lang']= dflang_ht[dflang_ht.Language.str.strip()!=\"\"].sort('Count')[::-1][:6].Language.apply(language)\ndf_mer_lang = dflang_gb6.append(dflang_ol6).append(dflang_ht6)",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Books by language"
},
{
"cell_type": "code",
"collapsed": false,
"input": "df_mer_lang = df_mer_lang.pivot_table('Count', rows='Lang', cols='Source', aggfunc=sum)\ndf_mer_lang.fillna(0)",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Plot books count by language for the three data sources"
},
{
"cell_type": "code",
"collapsed": false,
"input": "fig = plt.figure()\nfig.set_size_inches(10,10)\nax1 = fig.add_subplot(2, 2, 1)\ndf_mer_lang.fillna(0)['Gutenberg'].plot(kind=\"barh\", title=\"Gutenberg\",color='r')\nax2 = fig.add_subplot(2, 2, 2)\ndf_mer_lang.fillna(0)['Openlibrary'].plot(kind=\"barh\", title=\"Openlibrary\",color='b')\nax3 = fig.add_subplot(2, 2, 3)\nprint \"\\n\"\nprint \"\\n\"\ndf_mer_lang.fillna(0)['Hathitrust'].plot(kind=\"barh\", title=\"Hathitrust\",color='g')",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": "#Format still working in this\n# LUIS TO REVIEW THIS QUERY, NOT RETURNING EPUB OR TEXT COUNTS\nquery = \" \".join([\"select COUNT(FORM) AS formatcnt, FORM as format, Source\",\n\"from( select case WHEN gut_files.FORMAT LIKE '%epub%' then 'epub'\", \n\"else case WHEN gut_files.FORMAT LIKE '%pdf%' THEN 'pdf' \",\n\"else case WHEN gut_files.format like '%text%' THEN 'text' END END END AS FORM , 'Gutenberg' as Source\",\n\"from gut_files) a\",\n\"group by FORM , Source\",\n\"union SELECT count('PDF') as formatcnt,'pdf' as format, 'Hathitrust'as Source from ht_books where Access='allow' group by 'PDF','Hathitrust' \",\n\"union select count('epub') as formatcnt,'epub' as format, 'Openlibrary' as Source from ol_books group by 'epub','Openlibrary' \",\n\"union select count('text') as formatcnt, 'text' as format, 'Openlibrary' as Source from ol_books group by 'text','Openlibrary' \",\n\"union select count('pdf') as formatcnt, 'pdf' as format, 'Openlibrary' as Source from ol_books group by 'pdf','Openlibrary' \"\n])\ncursor.execute(query)\nformatres = list(cursor.fetchall())\ndfformatres = pd.DataFrame(formatres,columns=['Count','Format','Source'])\n",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": "dfformatres = dfformatres.pivot_table('Count', rows='Format', cols='Source', aggfunc=sum)",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": "dfformatres.plot(kind=\"bar\", stacked=True)",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Prompt the user to search for a book"
},
{
"cell_type": "code",
"collapsed": false,
"input": "def ipynb_input(varname, prompt=''):\n \"\"\"Prompt user for input and assign string val to given variable name.\"\"\"\n js_code = (\"\"\"\n var value = prompt(\"{prompt}\",\"\");\n var py_code = \"{varname} = '\" + value + \"'\";\n IPython.notebook.kernel.execute(py_code);\n \"\"\").format(prompt=prompt, varname=varname)\n return IPython.core.display.Javascript(js_code)\n",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 166
},
{
"cell_type": "code",
"collapsed": false,
"input": "ipynb_input(\"queryterm\", prompt='Enter keywords from book title: ')",
"language": "python",
"metadata": {},
"outputs": [
{
"javascript": "\n var value = prompt(\"Enter keywords from book title: \",\"\");\n var py_code = \"queryterm = '\" + value + \"'\";\n IPython.notebook.kernel.execute(py_code);\n ",
"output_type": "pyout",
"prompt_number": 167,
"text": "<IPython.core.display.Javascript at 0x8774090>"
}
],
"prompt_number": 167
},
{
"cell_type": "code",
"collapsed": false,
"input": "### need to put data for open library\n\nquery = \"\".join([\"select distinct 'Gutenberg' as source, g.title as title, \" ,\n\"g.creator as author, g.lang as language,'Unknown' as pubdate, 'public domain' as rights, \",\n\"(select about from gut_files where format like '%pdf%' and etext_id=g.etext_id limit 1) as pdf, \",\n\"(select about from gut_files where format like '%text%' and etext_id=g.etext_id limit 1) as text, \",\n\"(select about from gut_files where format like '%epub%' and etext_id=g.etext_id limit 1) as epub \",\n\"from gut_books g \",\n\"where lower(title) like lower('%\"+queryterm+\"%') \" ,\n\"union \",\n\"select distinct 'Hathitrust' as source, Title as title, \",\n\"'Unknown' as author, lang as language, PubDate as pubdate, case Access when 'allow' then 'public domain' else 'non public' end as rights, \",\n\"concat('http://hdl.handle.net/2027/',VolumeID) as pdf,'N/A' as epub, 'N/A' as text from \",\n\"ht_books where lower(Title) like lower('%\"+queryterm+\"%') and Access = 'allow' \",\n\"union \",\n\"select distinct 'OpenLibrary' as source, title, name as author, \",\n\"language, publish_date as pubdate, 'Unknown' as rights, \",\n\"concat('http://www.archive.org/download/',ocaid, '/', ocaid, '.pdf') as pdf, \",\n\"concat('http://www.archive.org/download/',ocaid, '/', ocaid, '_djvu.txt') as text, \",\n\"concat('http://www.archive.org/download/',ocaid, '/', ocaid, '.epub') as epub \",\n\"from ol_books LEFT JOIN ol_authors ON ol_books.author_key = ol_authors.key where lower(title) like lower('%\"+queryterm+\"%')\"])\ncursor.execute(query)\nres = list(cursor.fetchall())\n",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 172
},
{
"cell_type": "code",
"collapsed": false,
"input": "if(len(res)):\n dfresult = pd.DataFrame(res ,columns=['source','title', 'author','language','pubdate','rights','pdf','text','epub'] )\n print \"Total Results:\",len(dfresult)\nelse:\n print \"No results returned, try again\"",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "Total Results: 21\n"
}
],
"prompt_number": 173
},
{
"cell_type": "code",
"collapsed": false,
"input": "source = dfresult.groupby('source')\nsource['source'].value_counts().plot(kind=\"bar\", title=\"Count distribution of searched results\")",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 174,
"text": "<matplotlib.axes.AxesSubplot at 0x8774110>"
},
{
"output_type": "display_data",
"png": "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\n"
}
],
"prompt_number": 174
},
{
"cell_type": "code",
"collapsed": false,
"input": "dfresult.language.apply(language)\nlbl= dfresult.language.apply(language).value_counts().index\npie(dfresult.language.apply(language).value_counts(), labels=lbl, autopct='%1.1f%%')",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 175,
"text": "([<matplotlib.patches.Wedge at 0x89c8310>,\n <matplotlib.patches.Wedge at 0x89c8950>],\n [<matplotlib.text.Text at 0x89c87d0>, <matplotlib.text.Text at 0x89c8e10>],\n [<matplotlib.text.Text at 0x89c88d0>, <matplotlib.text.Text at 0x89c89d0>])"
},
{
"output_type": "display_data",
"png": "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\nJE6nk4MHD5KRkcHOnd4y3r07g9zcLMLDGxMS0hy3uzl2u/crlL3VxX+nK/KB7F9uBkM2ZnM2JlM2\nHk82dns2UVH1aNs2jh494oiPjyMuLo62bdtiscjIX1SclK6oEsXFxeTk5JCdnU12djZZWdkcPJjN\n4cPZ5ORkc+JENk5nCWZzMzStOR5PXdzuKJzOaJzOKCAKiC79Wvb7aCAc7wkfxt999ZTe3GW+OvAW\naD5w9g/fh4ScxWTKJyQkH007ja7nUFycDbioV685TZs2Jza2OW3aNKdFi+Y0b/7rLTJSTrsWl09K\nV/hMYWEh2dnZ5OTkcPr0ac6ePUt+fj5nzpzl5Ml88vLyycs7y5kz+eTnn6WwMJ/CwrO4XCV4PG50\n3fObrwaDhqYZf/M1JCQUiyWKyMhoIiOjqFUritq1o6lTJ4r69aOpVSuKqKgooqOjiY6OplmzZjRv\n3pxatWrJtofCJ6R0hRDCh2SmXwghfEhKVwghfEhKVwghfEhKVwghfEhKVwghfEhKVwghfEhKVwgh\nfEhKVwghfEhKVwghfEhKVwghfEhKVwghfEhKVwghfEhKVwghfEhKVwghfEhKVwghfEhKVwghfEhK\nVwghfEhKVwghfEhKVwghfEhKVwghfEhKVwghfEhKVwghfEhKVwghfEhKVwghfEhKVwghfEhKVwgh\nfEhKVwghfEhKVwghfOj/A5+1Cui5r5hxAAAAAElFTkSuQmCC\n"
}
],
"prompt_number": 175
},
{
"cell_type": "code",
"collapsed": false,
"input": "def maketable(df):\n imagedict={6:\"http://fchasen.com/cal/open-data/icons/pdf-icon.png\",\n 8:\"http://fchasen.com/cal/open-data/icons/epub-icon.png\",\n 7:\"http://fchasen.com/cal/open-data/icons/text-icon.png\"}\n columns=df.columns\n \n table =\"<table><thead>\"\n table +=\" <tr><th>Results</th>\"\n for i in columns:\n table += \"<th>{0}</th>\".format(i)\n table += \"</tr></thead><tbody>\"\n for k,s in dfresult.iterrows():\n table +=\"<tr>\"\n table += \"<th>{0}</th>\".format(k)\n \n for colnum,j in enumerate(s):\n #print type(j)\n try:\n if (colnum in [6,7,8]):\n if j is not None and j[:4]==\"http\":\n table += \"<td style='word-break:break-word;'><a href='{0}' target='_blank' style='word-break:break-word;'><img src='{1}' style='height:50px; margin: 0 auto;'/></td>\".format(j,imagedict[colnum])\n else:\n table += \"<td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td>\"\n else:\n table += \"<td>{0}</td>\".format(j)\n except:\n table += \"<td>{0}</td>\".format(j)\n table += \"</tr>\"\n\n table += \"</tbody></table>\"\n return table",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 218
},
{
"cell_type": "code",
"collapsed": false,
"input": "HTML(maketable(dfresult))",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<table><thead> <tr><th>Results</th><th>source</th><th>title</th><th>author</th><th>language</th><th>pubdate</th><th>rights</th><th>pdf</th><th>text</th><th>epub</th></tr></thead><tbody><tr><th>0</th><td>Gutenberg</td><td>Tenniel Illustrations for Alice in Wonderland</td><td>Tenniel, John, Sir, 1820-1914</td><td>None</td><td>Unknown</td><td>public domain</td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='word-break:break-word;'><a href='http://www.gutenberg.org/dirs/1/1/114/114-h/114-h.htm' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/text-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td></tr><tr><th>1</th><td>Gutenberg</td><td>Alice in Wonderland Retold in Words of One Syllable</td><td>\n </td><td>en</td><td>Unknown</td><td>public domain</td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='word-break:break-word;'><a href='http://www.gutenberg.org/dirs/1/9/5/5/19551/19551-8.txt' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/text-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.gutenberg.org/cache/epub/19551/pg19551.epub' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/epub-icon.png' style='height:50px; margin: 0 auto;'/></td></tr><tr><th>2</th><td>Gutenberg</td><td>Alice in Blunderland An Iridescent Dream</td><td>Bangs, John Kendrick, 1862-1922</td><td>en</td><td>Unknown</td><td>public domain</td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='word-break:break-word;'><a href='http://www.gutenberg.org/dirs/2/8/0/6/28069/28069-8.txt' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/text-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.gutenberg.org/cache/epub/28069/pg28069.epub' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/epub-icon.png' style='height:50px; margin: 0 auto;'/></td></tr><tr><th>3</th><td>Gutenberg</td><td>Alice in Wonderland A Dramatization of Lewis Carroll's \"Alice's Adventures in Wonderland\" and \"Through the Looking Glass\"</td><td>Gerstenberg, Alice, 1885-1972</td><td>en</td><td>Unknown</td><td>public domain</td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='word-break:break-word;'><a href='http://www.gutenberg.org/dirs/3/5/6/8/35688/35688-h/35688-h.htm' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/text-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.gutenberg.org/cache/epub/35688/pg35688.epub' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/epub-icon.png' style='height:50px; margin: 0 auto;'/></td></tr><tr><th>4</th><td>Gutenberg</td><td>The Story of Lewis Carroll Told for Young People by the Real Alice in Wonderland</td><td>Bowman, Isa</td><td>en</td><td>Unknown</td><td>public domain</td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='word-break:break-word;'><a href='http://www.gutenberg.org/dirs/3/5/9/9/35990/35990-8.txt' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/text-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.gutenberg.org/cache/epub/35990/pg35990.epub' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/epub-icon.png' style='height:50px; margin: 0 auto;'/></td></tr><tr><th>5</th><td>Gutenberg</td><td>Songs From Alice in Wonderland and Through the Looking-Glass</td><td>Carroll, Lewis, 1832-1898</td><td>en</td><td>Unknown</td><td>public domain</td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='word-break:break-word;'><a href='http://www.gutenberg.org/dirs/3/6/3/0/36308/36308-8.txt' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/text-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.gutenberg.org/cache/epub/36308/pg36308.epub' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/epub-icon.png' style='height:50px; margin: 0 auto;'/></td></tr><tr><th>6</th><td>Hathitrust</td><td>A new Alice in the old Wonderland, with sixty-seven illustrations by Anna M. Richards, jr.</td><td>Unknown</td><td>eng</td><td>1895</td><td>public domain</td><td style='word-break:break-word;'><a href='http://hdl.handle.net/2027/mdp.39015008784962' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td></tr><tr><th>7</th><td>Hathitrust</td><td>A new Alice in the old Wonderland, with sixty-seven illustrations by Anna M. Richards, jr.</td><td>Unknown</td><td>eng</td><td>1895</td><td>public domain</td><td style='word-break:break-word;'><a href='http://hdl.handle.net/2027/nyp.33433082297437' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td></tr><tr><th>8</th><td>Hathitrust</td><td>Malice in kulturland. By Horace Wyatt. With illustrations by W. Tell.</td><td>Unknown</td><td>eng</td><td>1915</td><td>public domain</td><td style='word-break:break-word;'><a href='http://hdl.handle.net/2027/mdp.39015063991320' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td></tr><tr><th>9</th><td>Hathitrust</td><td>Malice in kulturland. By Horace Wyatt. With illustrations by W. Tell.</td><td>Unknown</td><td>eng</td><td>1915</td><td>public domain</td><td style='word-break:break-word;'><a href='http://hdl.handle.net/2027/uc1.b283306' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td></tr><tr><th>10</th><td>Hathitrust</td><td>Malice in kulturland. By Horace Wyatt. With illustrations by W. Tell.</td><td>Unknown</td><td>eng</td><td>1915</td><td>public domain</td><td style='word-break:break-word;'><a href='http://hdl.handle.net/2027/uc2.ark:/13960/t3dz0' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td></tr><tr><th>11</th><td>Hathitrust</td><td>Alice in Jungleland,</td><td>Unknown</td><td>eng</td><td>1927</td><td>public domain</td><td style='word-break:break-word;'><a href='http://hdl.handle.net/2027/mdp.39015035802944' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td></tr><tr><th>12</th><td>Hathitrust</td><td>Alice in Wonderland, by Lewis Carroll [pseud.] With the original illustrations drawn by Sir John Tenniel.</td><td>Unknown</td><td>eng</td><td>1940</td><td>public domain</td><td style='word-break:break-word;'><a href='http://hdl.handle.net/2027/mdp.39015066045934' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td></tr><tr><th>13</th><td>Hathitrust</td><td>Lost in the bungle (with apologies to Lewis Carroll) by Edwin M. Otterbourg ... with an introduction by the Hon. John C. Knox ... Being a continuation of the difficulties of Alice in Rankbustland.</td><td>Unknown</td><td>eng</td><td>1933</td><td>public domain</td><td style='word-break:break-word;'><a href='http://hdl.handle.net/2027/mdp.39015035110504' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td></tr><tr><th>14</th><td>Hathitrust</td><td>Alice in Wonderland, a choral ballad for solo voice ad lib. and two-part chorus with pianoforte or orchestral accompaniment. Poems by Lewis Carroll (with a prologue and incidental verse by Frederick H. Martens)</td><td>Unknown</td><td>eng</td><td>1918</td><td>public domain</td><td style='word-break:break-word;'><a href='http://hdl.handle.net/2027/mdp.39015007861670' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td><td style='text-align:center'><img src='http://fchasen.com/cal/open-data/icons/none-icon.png' style='height:30px; margin: 10px auto;'/></td></tr><tr><th>15</th><td>OpenLibrary</td><td>Alice in jeopardy</td><td>None</td><td>/languages/eng</td><td>2005</td><td>Unknown</td><td style='word-break:break-word;'><a href='http://www.archive.org/download/aliceinjeopardy00mcba/aliceinjeopardy00mcba.pdf' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.archive.org/download/aliceinjeopardy00mcba/aliceinjeopardy00mcba_djvu.txt' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/text-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.archive.org/download/aliceinjeopardy00mcba/aliceinjeopardy00mcba.epub' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/epub-icon.png' style='height:50px; margin: 0 auto;'/></td></tr><tr><th>16</th><td>OpenLibrary</td><td>Alice in Blunderland</td><td>None</td><td>/languages/eng</td><td>2003</td><td>Unknown</td><td style='word-break:break-word;'><a href='http://www.archive.org/download/aliceinblunderla00nayl/aliceinblunderla00nayl.pdf' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.archive.org/download/aliceinblunderla00nayl/aliceinblunderla00nayl_djvu.txt' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/text-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.archive.org/download/aliceinblunderla00nayl/aliceinblunderla00nayl.epub' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/epub-icon.png' style='height:50px; margin: 0 auto;'/></td></tr><tr><th>17</th><td>OpenLibrary</td><td>Malice in Kulturland</td><td>None</td><td>/languages/eng</td><td>1915</td><td>Unknown</td><td style='word-break:break-word;'><a href='http://www.archive.org/download/maliceinkulturla00wyat/maliceinkulturla00wyat.pdf' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.archive.org/download/maliceinkulturla00wyat/maliceinkulturla00wyat_djvu.txt' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/text-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.archive.org/download/maliceinkulturla00wyat/maliceinkulturla00wyat.epub' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/epub-icon.png' style='height:50px; margin: 0 auto;'/></td></tr><tr><th>18</th><td>OpenLibrary</td><td>Malice in kulturland</td><td>None</td><td>None</td><td>1917</td><td>Unknown</td><td style='word-break:break-word;'><a href='http://www.archive.org/download/maliceinkulturla00wyatuoft/maliceinkulturla00wyatuoft.pdf' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.archive.org/download/maliceinkulturla00wyatuoft/maliceinkulturla00wyatuoft_djvu.txt' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/text-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.archive.org/download/maliceinkulturla00wyatuoft/maliceinkulturla00wyatuoft.epub' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/epub-icon.png' style='height:50px; margin: 0 auto;'/></td></tr><tr><th>19</th><td>OpenLibrary</td><td>Alice in Wonderland</td><td>None</td><td>None</td><td>1915</td><td>Unknown</td><td style='word-break:break-word;'><a href='http://www.archive.org/download/aliceinwonderlan00gersrich/aliceinwonderlan00gersrich.pdf' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.archive.org/download/aliceinwonderlan00gersrich/aliceinwonderlan00gersrich_djvu.txt' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/text-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.archive.org/download/aliceinwonderlan00gersrich/aliceinwonderlan00gersrich.epub' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/epub-icon.png' style='height:50px; margin: 0 auto;'/></td></tr><tr><th>20</th><td>OpenLibrary</td><td>Alice in Lace (Alice)</td><td>None</td><td>/languages/eng</td><td>August 1, 1997</td><td>Unknown</td><td style='word-break:break-word;'><a href='http://www.archive.org/download/aliceinlace00nayl/aliceinlace00nayl.pdf' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/pdf-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.archive.org/download/aliceinlace00nayl/aliceinlace00nayl_djvu.txt' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/text-icon.png' style='height:50px; margin: 0 auto;'/></td><td style='word-break:break-word;'><a href='http://www.archive.org/download/aliceinlace00nayl/aliceinlace00nayl.epub' target='_blank' style='word-break:break-word;'><img src='http://fchasen.com/cal/open-data/icons/epub-icon.png' style='height:50px; margin: 0 auto;'/></td></tr></tbody></table>",
"output_type": "pyout",
"prompt_number": 220,
"text": "<IPython.core.display.HTML at 0x7439d90>"
}
],
"prompt_number": 220
},
{
"cell_type": "code",
"collapsed": false,
"input": "#Fetching books only from hathitrust\nquery = \"\".join([\"select Title as title, 'Unknown' as subtitle, 'Unknown' as author,\",\n\"lang as language, PubDate as pubdate, Access as rights, concat('http://hdl.handle.net/2027/',VolumeID) as link,\",\n\"'pdf' as format from ht_books where title like '%\" ,\nqueryterm,\n\"%'\"])\nquery\ncursor.execute(query)\nhtres = list(cursor.fetchall())\ndfht= pd.DataFrame(htres , columns=['title','subtitle','author','language','pubdate','rights','link','format'])",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 199
},
{
"cell_type": "code",
"collapsed": false,
"input": "#dislaying results from hathitrust\ndisplay(HTML(dfht.to_html()))",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>title</th>\n <th>subtitle</th>\n <th>author</th>\n <th>language</th>\n <th>pubdate</th>\n <th>rights</th>\n <th>link</th>\n <th>format</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0 </th>\n <td> A new Alice in the old Wonderland, with sixty-...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1895</td>\n <td> allow</td>\n <td> http://hdl.handle.net/2027/mdp.39015008784962</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>1 </th>\n <td> A new Alice in the old Wonderland, with sixty-...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1895</td>\n <td> allow</td>\n <td> http://hdl.handle.net/2027/nyp.33433082297437</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>2 </th>\n <td> Malice in kulturland. By Horace Wyatt. With il...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1915</td>\n <td> allow</td>\n <td> http://hdl.handle.net/2027/mdp.39015063991320</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>3 </th>\n <td> Malice in kulturland. By Horace Wyatt. With il...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1915</td>\n <td> allow</td>\n <td> http://hdl.handle.net/2027/uc1.b283306</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>4 </th>\n <td> Malice in kulturland. By Horace Wyatt. With il...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1915</td>\n <td> allow</td>\n <td> http://hdl.handle.net/2027/uc2.ark:/13960/t3dz0</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>5 </th>\n <td> Alice in genderland : reflections on language,...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1985</td>\n <td> deny</td>\n <td> http://hdl.handle.net/2027/mdp.39015012149491</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>6 </th>\n <td> Alice in Wonderland;</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1949</td>\n <td> deny</td>\n <td> http://hdl.handle.net/2027/mdp.39015002461609</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>7 </th>\n <td> Alice in Womanland = or, The feminine mistake.</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1967</td>\n <td> deny</td>\n <td> http://hdl.handle.net/2027/mdp.39015002252503</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>8 </th>\n <td> Alice : a musical play in two acts based on Le...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1981</td>\n <td> deny</td>\n <td> http://hdl.handle.net/2027/mdp.39015013624773</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>9 </th>\n <td> Malice in Wonderland : contemporary satire in ...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> |||</td>\n <td> 1967</td>\n <td> deny</td>\n <td> http://hdl.handle.net/2027/mdp.39015011327312</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>10</th>\n <td> Alice in Jungleland,</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1927</td>\n <td> allow</td>\n <td> http://hdl.handle.net/2027/mdp.39015035802944</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>11</th>\n <td> The Illustrators of Alice in Wonderland and Th...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1972</td>\n <td> deny</td>\n <td> http://hdl.handle.net/2027/mdp.39015031601399</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>12</th>\n <td> Alice in many tongues : the translations of Al...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1964</td>\n <td> deny</td>\n <td> http://hdl.handle.net/2027/mdp.39015005368181</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>13</th>\n <td> Alice in Wonderland, by Lewis Carroll [pseud.]...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1940</td>\n <td> allow</td>\n <td> http://hdl.handle.net/2027/mdp.39015066045934</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>14</th>\n <td> Alice in Wonderland, adapted for the stage by ...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1932</td>\n <td> deny</td>\n <td> http://hdl.handle.net/2027/mdp.39015002514530</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>15</th>\n <td> Lost in the bungle (with apologies to Lewis Ca...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1933</td>\n <td> allow</td>\n <td> http://hdl.handle.net/2027/mdp.39015035110504</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>16</th>\n <td> Alice in rapture, sort of / Phyllis Reynolds N...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1989</td>\n <td> deny</td>\n <td> http://hdl.handle.net/2027/mdp.39015015497368</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>17</th>\n <td> Alice in Wonderland, a choral ballad for solo ...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1918</td>\n <td> allow</td>\n <td> http://hdl.handle.net/2027/mdp.39015007861670</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>18</th>\n <td> Alice in wormland : selected poems / Dorothy H...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1990</td>\n <td> deny</td>\n <td> http://hdl.handle.net/2027/mdp.39015019427775</td>\n <td> pdf</td>\n </tr>\n <tr>\n <th>19</th>\n <td> Three choruses from Alice in Wonderland. First...</td>\n <td> Unknown</td>\n <td> Unknown</td>\n <td> eng</td>\n <td> 1944</td>\n <td> deny</td>\n <td> http://hdl.handle.net/2027/mdp.39015007868196</td>\n <td> pdf</td>\n </tr>\n </tbody>\n</table>",
"output_type": "display_data",
"text": "<IPython.core.display.HTML at 0x411d690>"
}
],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": "dfht.pubdate.apply(returnnumber).value_counts().plot(kind=\"bar\", title = \"number of books published per year for the queries book\")",
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'returnnumber' is not defined",
"output_type": "pyerr",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-22-8d2049bf90e6>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mdfht\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpubdate\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mreturnnumber\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mvalue_counts\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkind\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"bar\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtitle\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m\"number of books published per year for the queries book\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mNameError\u001b[0m: name 'returnnumber' is not defined"
]
}
],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": "dfht.language.apply(language)\nlbl = dfht.language.apply(language).value_counts().index\npie(dfht.language.apply(language).value_counts(), labels=lbl, autopct='%1.1f%%')\n",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 23,
"text": "([<matplotlib.patches.Wedge at 0x46dd390>,\n <matplotlib.patches.Wedge at 0x46dd9d0>],\n [<matplotlib.text.Text at 0x46dd850>, <matplotlib.text.Text at 0x46dde90>],\n [<matplotlib.text.Text at 0x46dd950>, <matplotlib.text.Text at 0x46dda50>])"
},
{
"output_type": "display_data",
"png": "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\n"
}
],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": "display(HTML(\"<a href='#http://google.com\">fred</a>'))",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment