194 lines
4.1 KiB
Plaintext
194 lines
4.1 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"First, we need to load the [cheshire](https://github.com/dakrone/cheshire) module to load json."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"(require '[cheshire.core :as cheshire])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Second, we define a variable that points to the url we wished to download"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"#'user/election-results-url"
|
|
]
|
|
},
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def election-results-url \"https://dgeq.org/doc/gen7-4-2014/resultats.json\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Then, we download the content of the url as a \"string\". See the [slurp](https://clojuredocs.org/clojure.core/slurp) function to see how it works."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"#'user/raw-data"
|
|
]
|
|
},
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def raw-data (slurp election-results-url))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now, let's print some information about the downloaded string...\n",
|
|
"\n",
|
|
"We can use [subs](https://clojuredocs.org/clojure.core/subs) for that"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"the length of the string is... 193056\n",
|
|
"the string starts with... {\"statistiques\":{\"partisPolitiques\":[{\"numeroParti\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"(println \"the length of the string is...\" (count raw-data))\n",
|
|
"(println \"the string starts with...\" (subs raw-data 0 50))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We can now use cheshire to load the data. The `parse-string` functions looks awesome to do that."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"#'user/data"
|
|
]
|
|
},
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def data (cheshire/parse-string raw-data true))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We can now explore the real data structure.."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"the data structure type is... clojure.lang.PersistentArrayMap\n",
|
|
"the keys are... (:statistiques :circonscriptions)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"(println \"the data structure type is... \" (type data))\n",
|
|
"(println \"the keys are... \" (keys data))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We can now use the clojure inverse of `slurp`, the [spit](https://clojuredocs.org/clojure.core/spit) function, to serialize the data to a file. The file should be named `resources/data/election-2014.edn`."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 25,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"(spit \"resources/data/election-2014.edn\" (str data))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Lein-Clojure",
|
|
"language": "clojure",
|
|
"name": "lein-clojure"
|
|
},
|
|
"language_info": {
|
|
"file_extension": ".clj",
|
|
"mimetype": "text/x-clojure",
|
|
"name": "clojure",
|
|
"version": "1.9.0"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|