Skip to content

Instantly share code, notes, and snippets.

@mormegil-cz
Last active February 12, 2019 16:59
Show Gist options
  • Save mormegil-cz/9d0a3f2e355bc437f6d418216049f51c to your computer and use it in GitHub Desktop.
Save mormegil-cz/9d0a3f2e355bc437f6d418216049f51c to your computer and use it in GitHub Desktop.
Authority ID statistics from Wikidata
# NKČR AUT Památkový katalog Zanikleobce.cz Prazdnedomy.cz Vodnimlyny.cz Znicenekostely.cz Křížky a vetřelci Count
1 X 231505
2 X 39322
3 X X 379
4 X 2609
5 X X 25
6 X X 17
7 X X X 1
8 X 753
9 X X 1
10 X X 628
11 X X X 11
12 X X 102
13 X X X 1
14 X X X 62
15 X X X X 2
16 X 27
17 X X 0
18 X X 271
19 X X X 2
20 X X 0
21 X X X 0
22 X X X 3
23 X X X X 0
24 X X 13
25 X X X 0
26 X X X 14
27 X X X X 0
28 X X X 4
29 X X X X 0
30 X X X X 4
31 X X X X X 0
32 X 147
33 X X 3
34 X X 94
35 X X X 1
36 X X 12
37 X X X 0
38 X X X 3
39 X X X X 0
40 X X 3
41 X X X 0
42 X X X 18
43 X X X X 0
44 X X X 2
45 X X X X 1
46 X X X X 3
47 X X X X X 0
48 X X 0
49 X X X 0
50 X X X 0
51 X X X X 0
52 X X X 0
53 X X X X 0
54 X X X X 0
55 X X X X X 0
56 X X X 0
57 X X X X 0
58 X X X X 0
59 X X X X X 0
60 X X X X 0
61 X X X X X 0
62 X X X X X 0
63 X X X X X X 0
64 X 31
65 X X 103
66 X X 40
67 X X X 1
68 X X 0
69 X X X 0
70 X X X 0
71 X X X X 0
72 X X 0
73 X X X 0
74 X X X 0
75 X X X X 0
76 X X X 0
77 X X X X 0
78 X X X X 0
79 X X X X X 0
80 X X 0
81 X X X 0
82 X X X 0
83 X X X X 0
84 X X X 0
85 X X X X 0
86 X X X X 0
87 X X X X X 0
88 X X X 0
89 X X X X 0
90 X X X X 0
91 X X X X X 0
92 X X X X 0
93 X X X X X 0
94 X X X X X 0
95 X X X X X X 0
96 X X 0
97 X X X 0
98 X X X 0
99 X X X X 0
100 X X X 0
101 X X X X 0
102 X X X X 0
103 X X X X X 0
104 X X X 0
105 X X X X 0
106 X X X X 0
107 X X X X X 0
108 X X X X 0
109 X X X X X 0
110 X X X X X 0
111 X X X X X X 0
112 X X X 0
113 X X X X 0
114 X X X X 0
115 X X X X X 0
116 X X X X 0
117 X X X X X 0
118 X X X X X 0
119 X X X X X X 0
120 X X X X 0
121 X X X X X 0
122 X X X X X 0
123 X X X X X X 0
124 X X X X X 0
125 X X X X X X 0
126 X X X X X X 0
127 X X X X X X X 0
We can make this file beautiful and searchable if this error is corrected: No commas found in this CSV file in line 0.
#;NKČR AUT;Památkový katalog;Zanikleobce.cz;Prazdnedomy.cz;Vodnimlyny.cz;Znicenekostely.cz;Křížky a vetřelci;Count
1;X;;;;;;;231505
2;;X;;;;;;39322
3;X;X;;;;;;379
4;;;X;;;;;2609
5;X;;X;;;;;25
6;;X;X;;;;;17
7;X;X;X;;;;;1
8;;;;X;;;;753
9;X;;;X;;;;1
10;;X;;X;;;;628
11;X;X;;X;;;;11
12;;;X;X;;;;102
13;X;;X;X;;;;1
14;;X;X;X;;;;62
15;X;X;X;X;;;;2
16;;;;;X;;;27
17;X;;;;X;;;0
18;;X;;;X;;;271
19;X;X;;;X;;;2
20;;;X;;X;;;0
21;X;;X;;X;;;0
22;;X;X;;X;;;3
23;X;X;X;;X;;;0
24;;;;X;X;;;13
25;X;;;X;X;;;0
26;;X;;X;X;;;14
27;X;X;;X;X;;;0
28;;;X;X;X;;;4
29;X;;X;X;X;;;0
30;;X;X;X;X;;;4
31;X;X;X;X;X;;;0
32;;;;;;X;;147
33;X;;;;;X;;3
34;;X;;;;X;;94
35;X;X;;;;X;;1
36;;;X;;;X;;12
37;X;;X;;;X;;0
38;;X;X;;;X;;3
39;X;X;X;;;X;;0
40;;;;X;;X;;3
41;X;;;X;;X;;0
42;;X;;X;;X;;18
43;X;X;;X;;X;;0
44;;;X;X;;X;;2
45;X;;X;X;;X;;1
46;;X;X;X;;X;;3
47;X;X;X;X;;X;;0
48;;;;;X;X;;0
49;X;;;;X;X;;0
50;;X;;;X;X;;0
51;X;X;;;X;X;;0
52;;;X;;X;X;;0
53;X;;X;;X;X;;0
54;;X;X;;X;X;;0
55;X;X;X;;X;X;;0
56;;;;X;X;X;;0
57;X;;;X;X;X;;0
58;;X;;X;X;X;;0
59;X;X;;X;X;X;;0
60;;;X;X;X;X;;0
61;X;;X;X;X;X;;0
62;;X;X;X;X;X;;0
63;X;X;X;X;X;X;;0
64;;;;;;;X;31
65;X;;;;;;X;103
66;;X;;;;;X;40
67;X;X;;;;;X;1
68;;;X;;;;X;0
69;X;;X;;;;X;0
70;;X;X;;;;X;0
71;X;X;X;;;;X;0
72;;;;X;;;X;0
73;X;;;X;;;X;0
74;;X;;X;;;X;0
75;X;X;;X;;;X;0
76;;;X;X;;;X;0
77;X;;X;X;;;X;0
78;;X;X;X;;;X;0
79;X;X;X;X;;;X;0
80;;;;;X;;X;0
81;X;;;;X;;X;0
82;;X;;;X;;X;0
83;X;X;;;X;;X;0
84;;;X;;X;;X;0
85;X;;X;;X;;X;0
86;;X;X;;X;;X;0
87;X;X;X;;X;;X;0
88;;;;X;X;;X;0
89;X;;;X;X;;X;0
90;;X;;X;X;;X;0
91;X;X;;X;X;;X;0
92;;;X;X;X;;X;0
93;X;;X;X;X;;X;0
94;;X;X;X;X;;X;0
95;X;X;X;X;X;;X;0
96;;;;;;X;X;0
97;X;;;;;X;X;0
98;;X;;;;X;X;0
99;X;X;;;;X;X;0
100;;;X;;;X;X;0
101;X;;X;;;X;X;0
102;;X;X;;;X;X;0
103;X;X;X;;;X;X;0
104;;;;X;;X;X;0
105;X;;;X;;X;X;0
106;;X;;X;;X;X;0
107;X;X;;X;;X;X;0
108;;;X;X;;X;X;0
109;X;;X;X;;X;X;0
110;;X;X;X;;X;X;0
111;X;X;X;X;;X;X;0
112;;;;;X;X;X;0
113;X;;;;X;X;X;0
114;;X;;;X;X;X;0
115;X;X;;;X;X;X;0
116;;;X;;X;X;X;0
117;X;;X;;X;X;X;0
118;;X;X;;X;X;X;0
119;X;X;X;;X;X;X;0
120;;;;X;X;X;X;0
121;X;;;X;X;X;X;0
122;;X;;X;X;X;X;0
123;X;X;;X;X;X;X;0
124;;;X;X;X;X;X;0
125;X;;X;X;X;X;X;0
126;;X;X;X;X;X;X;0
127;X;X;X;X;X;X;X;0
const request = require('request-promise');
const properties = ['P691', 'P4075', 'P3003', 'P5011', 'P6406', 'P5515', 'P4935'];
const propertyNames = ['NKČR AUT', 'Památkový katalog', 'Zanikleobce.cz', 'Prazdnedomy.cz', 'Vodnimlyny.cz', 'Znicenekostely.cz', 'Křížky a vetřelci'];
const MAX_INDEX = 1 << properties.length;
async function main() {
let header = '#;';
for (let i = 0; i < propertyNames.length; ++i) {
header += propertyNames[i];
header += ';';
}
header += 'Count';
console.info(header);
try {
await downloadCounts(2);
} catch (e) {
console.error(e);
}
}
async function downloadCounts(startOffset) {
for (let index = startOffset; index < MAX_INDEX; ++index) {
if (index > startOffset) {
await sleep(2000);
}
let count = await executeQuery(index);
let row = index + ';';
for (let i = 0; i < propertyNames.length; ++i) {
if ((index & (1 << i)) != 0) {
row += 'X';
}
row += ';';
}
row += count;
console.info(row);
}
}
async function executeQuery(index) {
let sparql = 'SELECT (COUNT(?item) AS ?count) WHERE { ';
for (let i = 0; i < properties.length; ++i) {
if ((index & (1 << i)) != 0) {
sparql += '?item wdt:' + properties[i] + ' []. ';
} else {
hasNegative = true;
}
}
for (let i = 0; i < properties.length; ++i) {
if ((index & (1 << i)) === 0) {
sparql += 'MINUS { ?item wdt:' + properties[i] + ' []. } ';
}
}
sparql += '}';
//console.debug(sparql);
const queryResult = await request({
url: 'https://query.wikidata.org/sparql',
method: 'GET',
json: true,
qs: {
'query': sparql
}
});
if (!queryResult || !queryResult.results || !queryResult.results.bindings || !queryResult.results.bindings.length || !queryResult.results.bindings[0].count) {
console.log(queryResult);
throw Error('No usable data received from query')
}
return +queryResult.results.bindings[0].count.value;
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment