# observations

observation_id: 109851427
source: inaturalist
observed_on: 2019-07-08
quality_grade: research
source_url: https://www.inaturalist.org/observations/109851427
place_guess:
Russia, N Caucasus, Karachay-Cherkes Republic, Karachaevsk District, 6.3 km NE Dombay Town, a cold swamp with Carex rostrata in a fir/spruce forest


# checks

check_type: Abdeckung
frage: Welche Pflanzen haben weniger als zwei ausgewählte Bilder?
expected: 0 Zeilen
actual: 0 Zeilen
status: BESTANDEN
note: Vollständigkeit. Das Programm plant je Art zwei Bilder ein.
sql:
SELECT p.scientific_name, COUNT(i.image_id) AS bilder
FROM plants p
LEFT JOIN images i ON i.plant_id = p.plant_id
GROUP BY p.plant_id
HAVING COUNT(i.image_id) < 2
ORDER BY bilder, p.scientific_name


check_type: Dubletten
frage: Welche Bild-URLs kommen mehrfach vor?
expected: 0 Zeilen
actual: 0 Zeilen
status: BESTANDEN
note: Datenqualität. Dasselbe Foto zweimal wäre eine stille Dublette.
sql:
SELECT url, COUNT(*) AS anzahl
FROM images
WHERE url IS NOT NULL
GROUP BY url
HAVING COUNT(*) > 1
ORDER BY anzahl DESC


check_type: Nachvollziehbarkeit
frage: Welche Bilder haben keine Quell-ID oder keine Quell-URL?
expected: 0 Zeilen
actual: 0 Zeilen
status: BESTANDEN
note: Ohne Beobachtungs- und Foto-ID lässt sich ein Bild nicht zurückverfolgen.
sql:
SELECT i.filename, i.image_id, i.observation_id, o.source_url
FROM images i
LEFT JOIN observations o ON o.observation_id = i.observation_id
WHERE i.image_id IS NULL OR TRIM(i.image_id) = ''
   OR i.observation_id IS NULL OR TRIM(i.observation_id) = ''
   OR o.source_url IS NULL OR TRIM(o.source_url) = ''
ORDER BY i.filename


check_type: Lizenz
frage: Welche Bilder tragen keine verwertbare Lizenzangabe?
expected: 0 Zeilen
actual: 0 Zeilen
status: BESTANDEN
note: Fremdes Bildmaterial ohne Lizenz darf nicht verwendet werden.
sql:
SELECT filename, author, license_code
FROM images
WHERE license_code IS NULL OR TRIM(license_code) = ''
   OR license_code NOT IN ('cc0','cc-by','cc-by-sa','cc-by-nc','cc-by-nc-sa')
ORDER BY filename


check_type: Nutzbarkeit
frage: Welche Bilder unterschreiten die Mindestkantenlänge von 500 px?
expected: 0 Zeilen
actual: 0 Zeilen
status: BESTANDEN
note: Schwelle aus src/config.py des Originalprogramms, hier nachgeprüft.
sql:
SELECT filename, width, height, MIN(width, height) AS kurze_kante
FROM images
WHERE width IS NOT NULL AND height IS NOT NULL
  AND MIN(width, height) < 500
ORDER BY kurze_kante


check_type: Ablage
frage: Zu welchen Metadatensätzen fehlt die Bilddatei im Ordner?
expected: 0 Zeilen
actual: 6 Zeilen
status: BEFUND
note: Metadaten und Dateibestand müssen sich decken, sonst zeigt der Datensatz ins Leere.
sql:
SELECT i.filename, p.scientific_name, i.license_code
FROM images i
JOIN plants p ON p.plant_id = i.plant_id
WHERE i.file_present = 0
ORDER BY p.scientific_name, i.selected_rank


check_type: Plausibilität
frage: Stammen die beiden Bilder einer Art aus verschiedenen Beobachtungen?
expected: 0 Zeilen
actual: 0 Zeilen
status: BESTANDEN
note: Zwei Fotos derselben Beobachtung zeigen dieselbe Pflanze am selben Tag.
sql:
SELECT p.scientific_name,
       COUNT(i.image_id)                 AS bilder,
       COUNT(DISTINCT i.observation_id)  AS beobachtungen
FROM plants p
JOIN images i ON i.plant_id = p.plant_id
GROUP BY p.plant_id
HAVING COUNT(i.image_id) > COUNT(DISTINCT i.observation_id)
ORDER BY p.scientific_name


check_type: Taxonomie
frage: Bei welchen Arten steht hinter dem abweichenden Namen ein anderer Artbegriff?
expected: kein Sollwert
actual: 21 Zeilen
status: GEZÄHLT
sql:
SELECT scientific_name, taxon_name, taxon_id
FROM plants
WHERE name_abweichung = 1
  AND name_kern <> taxon_kern
ORDER BY scientific_name

note:
Ein abweichender Name ist meist nur Schreibweise. Bleibt er auch nach Normalisierung verschieden, hat iNaturalist ein anderes Taxon geliefert – das muss ein Mensch entscheiden, nicht die Abfrage.


