diff --git a/generic/noCoordianteWikidata_fountains.ipynb b/generic/noCoordianteWikidata_fountains.ipynb new file mode 100644 index 0000000..d460788 --- /dev/null +++ b/generic/noCoordianteWikidata_fountains.ipynb @@ -0,0 +1,1101 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Automatic import of Hamburg drinking fountains data to Wikidata\n", + "The following script downloads fountain data from Open Data swiss as per https://github.com/water-fountains/proximap/issues/307, compares it to existing fountains in Wikidata for the same region, and creates Wikidata Quickstatement commands to complete the entries in Wikidata. New entities are created if no matching fountains are found." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initialize environment" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "191124_195208\n", + "Python v 3.6.5\n" + ] + } + ], + "source": [ + "from datetime import datetime as dt\n", + "dtFmt = \"%y%m%d_%H%M%S\"\n", + "print (dt.now().strftime(dtFmt))\n", + "import pandas as pd\n", + "import io\n", + "import numpy as np\n", + "from urllib.request import urlopen\n", + "import json\n", + "from math import *\n", + "from platform import python_version\n", + "print(\"Python v \"+python_version())\n", + "#https://github.com/paulhoule/gastrodon/issues/7 \n", + "from gastrodon import RemoteEndpoint,QName,ttl,URIRef,inline\n", + "from matplotlib import pyplot\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "#@prefix wikibase: .\n", + "prefixes=inline(\"\"\"\n", + " @prefix wd: .\n", + " @prefix wdt: .\n", + " @prefix rdf: .\n", + " @prefix rdfs: .\n", + " @prefix p: .\n", + " @prefix psv: .\n", + " @prefix wikibase: .\n", + "\"\"\").graph\n", + "endpoint=RemoteEndpoint(\n", + " #\"https://query.wikidata.org/sparql\"\n", + " \"https://query.wikidata.org/bigdata/namespace/wdq/sparql\"\n", + " ,prefixes=prefixes\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load data" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv(\"osmFountainsWithWikidataReference191124_092526.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "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", + "
latlonwikidata
047.4028308.499940Q27230124
147.4092928.494851Q27229864
247.3384118.532262Q27230215
347.3384688.530644Q27229839
447.3441988.529788Q27229951
\n", + "
" + ], + "text/plain": [ + " lat lon wikidata\n", + "0 47.402830 8.499940 Q27230124\n", + "1 47.409292 8.494851 Q27229864\n", + "2 47.338411 8.532262 Q27230215\n", + "3 47.338468 8.530644 Q27229839\n", + "4 47.344198 8.529788 Q27229951" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "267" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Identify already existing fountains\n", + "### Query fountains from Wikidata" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "def coordsFunction(row): \n", + " itemid = row['wikidata'] \n", + " query = (\"\"\"SELECT ?lat ?lon\n", + " WHERE\n", + " {{\n", + " wd:%s p:P625 ?statement.\n", + " ?statement psv:P625 ?node.\n", + " ?node wikibase:geoLatitude ?lat.\n", + " ?node wikibase:geoLongitude ?lon.\n", + " SERVICE wikibase:label { bd:serviceParam wikibase:language \"[AUTO_LANGUAGE],en\". }\n", + " }}\"\"\")%itemid \n", + " print(itemid)\n", + " data = endpoint.select(query)\n", + " #print(itemid+\" \"+data['lat'])\n", + " wdDf = pd.DataFrame(data)\n", + " #wdDf\n", + " if len(wdDf.values) == 0:\n", + " return 'noCoord'\n", + " return wdDf.values[0][0]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Q27230124\n", + "Q27229864\n", + "Q27230215\n", + "Q27229839\n", + "Q27229951\n", + "Q27229857\n", + "Q27230182\n", + "Q27229899\n", + "Q55169625\n", + "Q27229818\n", + "Q27230098\n", + "Q27229885\n", + "Q27230198\n", + "Q27230202\n", + "Q55166802\n", + "Q27229775\n", + "Q27230014\n", + "Q27230180\n", + "Q27229957\n", + "Q55166749\n", + "Q27230049\n", + "Q27229889\n", + "Q27229977\n", + "Q27229956\n", + "Q27229909\n", + "Q27229959\n", + "Q27229964\n", + "Q27230021\n", + "Q27229888\n", + "Q55165905\n", + "Q55169659\n", + "Q27229914\n", + "Q27230113\n", + "Q27229971\n", + "Q55166163\n", + "Q27229965\n", + "Q27230185\n", + "Q27229658\n", + "Q55166819\n", + "Q27229783\n", + "Q27229890\n", + "Q27229960\n", + "Q27229877\n", + "Q27229787\n", + "Q55166799\n", + "Q27229689\n", + "Q27229892\n", + "Q27230209\n", + "Q27230353\n", + "Q55170092\n", + "Q27229904\n", + "Q55169693\n", + "Q55170009\n", + "Q55170006\n", + "Q55170003\n", + "Q55170000\n", + "Q55169998\n", + "Q55169995\n", + "Q55170013\n", + "Q55170762\n", + "Q27230047\n", + "Q27229670\n", + "Q27230203\n", + "Q27229779\n", + "Q27230229\n", + "Q27229659\n", + "Q27230090\n", + "Q27230201\n", + "Q27230102\n", + "Q27229685\n", + "Q27230181\n", + "Q27230071\n", + "Q27230018\n", + "Q27229881\n", + "Q55166813\n", + "Q27230011\n", + "Q27229958\n", + "Q27230126\n", + "Q27230134\n", + "Q27229662\n", + "Q27229669\n", + "Q27229660\n", + "Q27229664\n", + "Q27229945\n", + "Q27230070\n", + "Q27229827\n", + "Q55166825\n", + "Q27230216\n", + "Q64015724\n", + "Q55166416\n", + "Q27229887\n", + "Q27230178\n", + "Q27229891\n", + "Q27229785\n", + "Q55166615\n", + "Q55166804\n", + "Q27229858\n", + "Q27230094\n", + "Q27230183\n", + "Q27230037\n", + "Q63715939\n", + "Q27230038\n", + "Q27229681\n", + "Q27229661\n", + "Q27230009\n", + "Q27229840\n", + "Q27229886\n", + "Q27229782\n", + "Q27229848\n", + "Q27229967\n", + "Q27229923\n", + "Q27229847\n", + "Q27230165\n", + "Q27230211\n", + "Q27230040\n", + "Q27230055\n", + "Q27229948\n", + "Q55166831\n", + "Q55166070\n", + "Q27229884\n", + "Q27230145\n", + "Q27229954\n", + "Q27229697\n", + "Q27230033\n", + "Q27230085\n", + "Q27230062\n", + "Q27229997\n", + "Q27229690\n", + "Q27229917\n", + "Q27230160\n", + "Q27230205\n", + "Q55169056\n", + "Q27230005\n", + "Q55169209\n", + "Q27229841\n", + "Q27229950\n", + "Q55166811\n", + "Q27229836\n", + "Q27230226\n", + "Q27230191\n", + "Q27229926\n", + "Q27229907\n", + "Q55171004\n", + "Q27229671\n", + "Q27230190\n", + "Q27230080\n", + "Q27229676\n", + "Q27229929\n", + "Q27229687\n", + "Q27230164\n", + "Q55169633\n", + "Q55169252\n", + "Q27229934\n", + "Q27229865\n", + "Q55167944\n", + "Q27230105\n", + "Q27229875\n", + "Q27230192\n", + "Q27229826\n", + "Q55167968\n", + "Q27230003\n", + "Q27230028\n", + "Q27229893\n", + "Q27230076\n", + "Q27230001\n", + "Q55166177\n", + "Q55166125\n", + "Q27132067\n", + "Q27229902\n", + "Q27229668\n", + "Q1760194\n", + "Q27230035\n", + "Q27229648\n", + "Q27229863\n", + "Q27229896\n", + "Q27230173\n", + "Q55167924\n", + "Q55166175\n", + "Q27229969\n", + "Q27229822\n", + "Q55166062\n", + "Q27230114\n", + "Q27230149\n", + "Q27230119\n", + "Q27229874\n", + "Q55170097\n", + "Q27230013\n", + "Q27229692\n", + "Q27229935\n", + "Q14906793\n", + "Q27230179\n", + "Q55166828\n", + "Q55166823\n", + "Q55167903\n", + "Q27229842\n", + "Q27229832\n", + "Q27229831\n", + "Q27229789\n", + "Q27229879\n", + "Q27229861\n", + "Q27229859\n", + "Q27229849\n", + "Q27229963\n", + "Q27229939\n", + "Q27229937\n", + "Q27229933\n", + "Q27229924\n", + "Q27229906\n", + "Q27229993\n", + "Q27230122\n", + "Q27230121\n", + "Q27230112\n", + "Q27230074\n", + "Q27230053\n", + "Q27230045\n", + "Q27230044\n", + "Q27230224\n", + "Q27230223\n", + "Q27230219\n", + "Q27230214\n", + "Q27230212\n", + "Q27230208\n", + "Q27230207\n", + "Q27230197\n", + "Q27230194\n", + "Q27230188\n", + "Q27230186\n", + "Q27230171\n", + "Q27230169\n", + "Q27230162\n", + "Q27230155\n", + "Q27230153\n", + "Q27230135\n", + "Q27230131\n", + "Q27230128\n", + "Q27230150\n", + "Q55171130\n", + "Q55170946\n", + "Q55169705\n", + "Q55170862\n", + "Q27230144\n", + "Q63863130\n", + "Q55958199\n", + "Q27229673\n", + "Q27229900\n", + "Q55170215\n", + "Q27229903\n", + "Q55170437\n", + "Q63956193\n", + "Q64174346\n", + "Q64174640\n", + "Q55166086\n", + "Q55170911\n", + "Q55169972\n", + "Q55170997\n", + "Q55170103\n", + "Q55170016\n", + "Q55169900\n", + "Q55170363\n", + "Q55170379\n", + "Q65548962\n", + "Q74369417\n", + "Q55170211\n", + "Q67588104\n", + "Q67588045\n", + "Q67587947\n", + "Q74171778\n" + ] + } + ], + "source": [ + "# Perform query on each dw\n", + "result = df.apply(coordsFunction,axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 47.4028\n", + "1 47.4093\n", + "2 47.3384\n", + "3 47.3385\n", + "4 47.3442\n", + "dtype: object" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "query_result = pd.concat([df,result],ignore_index=True, axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Total number of rows incl. duplicates 267 size 1068\n" + ] + } + ], + "source": [ + "#print(query_string)\n", + "print(\"\\n\\nTotal number of rows incl. duplicates \"+str(len(query_result))+\" size \"+str(query_result.size))" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "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", + "
0123
047.4028308.499940Q2723012447.4028
147.4092928.494851Q2722986447.4093
247.3384118.532262Q2723021547.3384
347.3384688.530644Q2722983947.3385
447.3441988.529788Q2722995147.3442
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3\n", + "0 47.402830 8.499940 Q27230124 47.4028\n", + "1 47.409292 8.494851 Q27229864 47.4093\n", + "2 47.338411 8.532262 Q27230215 47.3384\n", + "3 47.338468 8.530644 Q27229839 47.3385\n", + "4 47.344198 8.529788 Q27229951 47.3442" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query_result.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Tidy up data" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0: ignore Q27230124\n", + "1: no coord Q74171778\n", + "2: ignore Q27230215\n", + "3: ignore Q27229839\n" + ] + } + ], + "source": [ + "i=-1\n", + "for index, row in query_result.iterrows():\n", + " i+=1\n", + " if row[3] == 'noCoord':\n", + " print(str(i)+\": \"+\" no coord \"+row[2])\n", + " else:\n", + " print(str(i)+\": \"+\" ignore \"+row[2])\n", + " \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create Quickstatement commands from data\n", + "### Helper functions to format content according to Quickstatements v1 syntax" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "def process_coordinates(x, y):\n", + " # format geographic coordinates\n", + " return '@{1:1.8f}/{0:1.8f}'.format(x,y)\n", + "\n", + "\n", + "def createline(lines, item, prop, value, extra, qualifiers=[]):\n", + " # general function to create Quickstatement v1 commands\n", + " if value != '' and value != '\"\"':\n", + " statement = '{}\\t{}\\t{}'.format(item, prop, value)\n", + " if len(qualifiers):\n", + " # append qualifiers if applicable\n", + " for q in qualifiers:\n", + " statement += '\\t{}\\t{}'.format(q['prop'], q['value'])\n", + " statement += extra\n", + " statement += '\\n'\n", + " lines.append(statement)\n", + " return lines" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create statements, taking care not to overwrite existing data" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1: ignore Q27230124\n", + "2: ignore Q27229864\n", + "3: ignore Q27230215\n", + "4: ignore Q27229839\n", + "5: ignore Q27229951\n", + "6: ignore Q27229857\n", + "7: ignore Q27230182\n", + "8: ignore Q27229899\n", + "9: ignore Q55169625\n", + "10: ignore Q27229818\n", + "11: ignore Q27230098\n", + "12: ignore Q27229885\n", + "13: ignore Q27230198\n", + "14: ignore Q27230202\n", + "15: ignore Q55166802\n", + "16: ignore Q27229775\n", + "17: ignore Q27230014\n", + "18: ignore Q27230180\n", + "19: ignore Q27229957\n", + "20: ignore Q55166749\n", + "21: ignore Q27230049\n", + "22: ignore Q27229889\n", + "23: ignore Q27229977\n", + "24: ignore Q27229956\n", + "25: ignore Q27229909\n", + "26: ignore Q27229959\n", + "27: ignore Q27229964\n", + "28: ignore Q27230021\n", + "29: ignore Q27229888\n", + "30: ignore Q55165905\n", + "31: ignore Q55169659\n", + "32: ignore Q27229914\n", + "33: ignore Q27230113\n", + "34: ignore Q27229971\n", + "35: ignore Q55166163\n", + "36: ignore Q27229965\n", + "37: ignore Q27230185\n", + "38: ignore Q27229658\n", + "39: ignore Q55166819\n", + "40: ignore Q27229783\n", + "41: ignore Q27229890\n", + "42: ignore Q27229960\n", + "43: ignore Q27229877\n", + "44: ignore Q27229787\n", + "45: ignore Q55166799\n", + "46: ignore Q27229689\n", + "47: ignore Q27229892\n", + "48: ignore Q27230209\n", + "49: ignore Q27230353\n", + "50: ignore Q55170092\n", + "51: ignore Q27229904\n", + "52: ignore Q55169693\n", + "53: ignore Q55170009\n", + "54: ignore Q55170006\n", + "55: ignore Q55170003\n", + "56: ignore Q55170000\n", + "57: ignore Q55169998\n", + "58: ignore Q55169995\n", + "59: ignore Q55170013\n", + "60: ignore Q55170762\n", + "61: ignore Q27230047\n", + "62: ignore Q27229670\n", + "63: ignore Q27230203\n", + "64: ignore Q27229779\n", + "65: ignore Q27230229\n", + "66: ignore Q27229659\n", + "67: ignore Q27230090\n", + "68: ignore Q27230201\n", + "69: ignore Q27230102\n", + "70: ignore Q27229685\n", + "71: ignore Q27230181\n", + "72: ignore Q27230071\n", + "73: ignore Q27230018\n", + "74: ignore Q27229881\n", + "75: ignore Q55166813\n", + "76: ignore Q27230011\n", + "77: ignore Q27229958\n", + "78: ignore Q27230126\n", + "79: ignore Q27230134\n", + "80: ignore Q27229662\n", + "81: ignore Q27229669\n", + "82: ignore Q27229660\n", + "83: ignore Q27229664\n", + "84: ignore Q27229945\n", + "85: ignore Q27230070\n", + "86: ignore Q27229827\n", + "87: ignore Q55166825\n", + "88: ignore Q27230216\n", + "90: ignore Q55166416\n", + "91: ignore Q27229887\n", + "92: ignore Q27230178\n", + "93: ignore Q27229891\n", + "94: ignore Q27229785\n", + "95: ignore Q55166615\n", + "96: ignore Q55166804\n", + "97: ignore Q27229858\n", + "98: ignore Q27230094\n", + "99: ignore Q27230183\n", + "100: ignore Q27230037\n", + "102: ignore Q27230038\n", + "103: ignore Q27229681\n", + "104: ignore Q27229661\n", + "105: ignore Q27230009\n", + "106: ignore Q27229840\n", + "107: ignore Q27229886\n", + "108: ignore Q27229782\n", + "109: ignore Q27229848\n", + "110: ignore Q27229967\n", + "111: ignore Q27229923\n", + "112: ignore Q27229847\n", + "113: ignore Q27230165\n", + "114: ignore Q27230211\n", + "115: ignore Q27230040\n", + "116: ignore Q27230055\n", + "117: ignore Q27229948\n", + "118: ignore Q55166831\n", + "119: ignore Q55166070\n", + "120: ignore Q27229884\n", + "121: ignore Q27230145\n", + "122: ignore Q27229954\n", + "123: ignore Q27229697\n", + "124: ignore Q27230033\n", + "125: ignore Q27230085\n", + "126: ignore Q27230062\n", + "127: ignore Q27229997\n", + "128: ignore Q27229690\n", + "129: ignore Q27229917\n", + "130: ignore Q27230160\n", + "131: ignore Q27230205\n", + "132: ignore Q55169056\n", + "133: ignore Q27230005\n", + "134: ignore Q55169209\n", + "135: ignore Q27229841\n", + "136: ignore Q27229950\n", + "137: ignore Q55166811\n", + "138: ignore Q27229836\n", + "139: ignore Q27230226\n", + "140: ignore Q27230191\n", + "141: ignore Q27229926\n", + "142: ignore Q27229907\n", + "143: ignore Q55171004\n", + "144: ignore Q27229671\n", + "145: ignore Q27230190\n", + "146: ignore Q27230080\n", + "147: ignore Q27229676\n", + "148: ignore Q27229929\n", + "149: ignore Q27229687\n", + "150: ignore Q27230164\n", + "151: ignore Q55169633\n", + "152: ignore Q55169252\n", + "153: ignore Q27229934\n", + "154: ignore Q27229865\n", + "155: ignore Q55167944\n", + "156: ignore Q27230105\n", + "157: ignore Q27229875\n", + "158: ignore Q27230192\n", + "159: ignore Q27229826\n", + "160: ignore Q55167968\n", + "161: ignore Q27230003\n", + "162: ignore Q27230028\n", + "163: ignore Q27229893\n", + "164: ignore Q27230076\n", + "165: ignore Q27230001\n", + "166: ignore Q55166177\n", + "167: ignore Q55166125\n", + "168: ignore Q27132067\n", + "169: ignore Q27229902\n", + "170: ignore Q27229668\n", + "171: ignore Q1760194\n", + "172: ignore Q27230035\n", + "173: ignore Q27229648\n", + "174: ignore Q27229863\n", + "175: ignore Q27229896\n", + "176: ignore Q27230173\n", + "177: ignore Q55167924\n", + "178: ignore Q55166175\n", + "179: ignore Q27229969\n", + "180: ignore Q27229822\n", + "181: ignore Q55166062\n", + "182: ignore Q27230114\n", + "183: ignore Q27230149\n", + "184: ignore Q27230119\n", + "185: ignore Q27229874\n", + "186: ignore Q55170097\n", + "187: ignore Q27230013\n", + "188: ignore Q27229692\n", + "189: ignore Q27229935\n", + "190: ignore Q14906793\n", + "191: ignore Q27230179\n", + "192: ignore Q55166828\n", + "193: ignore Q55166823\n", + "194: ignore Q55167903\n", + "195: ignore Q27229842\n", + "196: ignore Q27229832\n", + "197: ignore Q27229831\n", + "198: ignore Q27229789\n", + "199: ignore Q27229879\n", + "200: ignore Q27229861\n", + "201: ignore Q27229859\n", + "202: ignore Q27229849\n", + "203: ignore Q27229963\n", + "204: ignore Q27229939\n", + "205: ignore Q27229937\n", + "206: ignore Q27229933\n", + "207: ignore Q27229924\n", + "208: ignore Q27229906\n", + "209: ignore Q27229993\n", + "210: ignore Q27230122\n", + "211: ignore Q27230121\n", + "212: ignore Q27230112\n", + "213: ignore Q27230074\n", + "214: ignore Q27230053\n", + "215: ignore Q27230045\n", + "216: ignore Q27230044\n", + "217: ignore Q27230224\n", + "218: ignore Q27230223\n", + "219: ignore Q27230219\n", + "220: ignore Q27230214\n", + "221: ignore Q27230212\n", + "222: ignore Q27230208\n", + "223: ignore Q27230207\n", + "224: ignore Q27230197\n", + "225: ignore Q27230194\n", + "226: ignore Q27230188\n", + "227: ignore Q27230186\n", + "228: ignore Q27230171\n", + "229: ignore Q27230169\n", + "230: ignore Q27230162\n", + "231: ignore Q27230155\n", + "232: ignore Q27230153\n", + "233: ignore Q27230135\n", + "234: ignore Q27230131\n", + "235: ignore Q27230128\n", + "236: ignore Q27230150\n", + "237: ignore Q55171130\n", + "238: ignore Q55170946\n", + "239: ignore Q55169705\n", + "240: ignore Q55170862\n", + "241: ignore Q27230144\n", + "242: ignore Q63863130\n", + "243: ignore Q55958199\n", + "244: ignore Q27229673\n", + "245: ignore Q27229900\n", + "246: ignore Q55170215\n", + "247: ignore Q27229903\n", + "248: ignore Q55170437\n", + "249: ignore Q63956193\n", + "252: ignore Q55166086\n", + "253: ignore Q55170911\n", + "254: ignore Q55169972\n", + "255: ignore Q55170997\n", + "256: ignore Q55170103\n", + "257: ignore Q55170016\n", + "258: ignore Q55169900\n", + "259: ignore Q55170363\n", + "260: ignore Q55170379\n", + "263: ignore Q55170211\n" + ] + } + ], + "source": [ + "# initialize command storage list\n", + "lines = []\n", + "statedId = \"\\tS248\\tQ1224853\"\n", + "i=0\n", + "for index, row in query_result.iterrows():\n", + " i+=1\n", + "\n", + " if row[3] == 'noCoord':\n", + " # coordinates\n", + " lines = createline(lines, row[2], 'P625', process_coordinates(row[1], row[0]),statedId)\n", + " else:\n", + " print(str(i)+\": \"+\" ignore \"+row[2])\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Write commands to file" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "wrote 'quickstatement_commands_locOrphan_fountain_191124_203343.txt' with 10 lines\n" + ] + } + ], + "source": [ + "quickStatFileName = \"quickstatement_commands_locOrphan_fountain_\"+dt.now().strftime(dtFmt)+\".txt\"\n", + "with io.open(quickStatFileName, \"w\", encoding='utf8') as f:\n", + " f.writelines(lines)\n", + "print(\"wrote '\"+quickStatFileName+\"' with \"+str(len(lines))+\" lines\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Import into Wikidata\n", + "- Go to https://tools.wmflabs.org/wikidata-todo/quick_statements.php.\n", + "- Authenticate yourself with your Wikidata account.\n", + "- Copy and paste the contents of quickstatement_commands*.txt into the blank field, and run the commands" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "see ../20191030_1600_import.png\n", + "\n", + "...\n", + "58. Processing Q72935495 (Q72935495 Lde \"Brunnen (Seelöwe-Planschbecken )\")\n", + "59. Processing Q72935495 (Q72935495 P137 Q27229237)\n", + "\n", + "All done!." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "# it may well take half an hour until it works https://query.wikidata.org/" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/generic/quickstatement_commands_locOrphan_fountain_191124_203343.txt b/generic/quickstatement_commands_locOrphan_fountain_191124_203343.txt new file mode 100644 index 0000000..a3589c4 --- /dev/null +++ b/generic/quickstatement_commands_locOrphan_fountain_191124_203343.txt @@ -0,0 +1,10 @@ +Q64015724 P625 @47.38693630/8.53661820 S248 Q1224853 +Q63715939 P625 @47.37062680/8.53448970 S248 Q1224853 +Q64174346 P625 @47.38674740/8.54636060 S248 Q1224853 +Q64174640 P625 @47.38454100/8.54671450 S248 Q1224853 +Q65548962 P625 @47.36747680/8.54844560 S248 Q1224853 +Q74369417 P625 @47.37398560/8.55262410 S248 Q1224853 +Q67588104 P625 @47.36050360/8.54779370 S248 Q1224853 +Q67588045 P625 @47.36021290/8.54790370 S248 Q1224853 +Q67587947 P625 @47.36033100/8.54782320 S248 Q1224853 +Q74171778 P625 @47.36518030/8.56882560 S248 Q1224853