Wikidata:Mezi bajty/OpenRefine Workshop
Wikidata Workshop OpenRefine je workshop zaměřený na použití OpenRefine (http://openrefine.org/), což je mocný nástroj při importu dat - hlavně co se týče čištění dat, párování s existujícími položkami a nahrávání (viz také Wikidata:Tools/OpenRefine). Nástroj je opensource a multiplatformní - funguje pod Windows, Linuxem i Macem. Prakticky si zkusíme nějaký ten import dat do Wikidat. Viz také Událost na FB.
Na workshop je třeba donést si vlastní notebook ideálně s již nainstalovaným OpenRefine, na místě zřejmě nebudou k dispozici. Organizátorem této akce je Josef Klamo za finanční podpory Wikimedia Czech Republic (Q15735556). Pro mimopražské je možné nechat si proplatit jízdní výdaje, viz ticker v trackeru.
Termín a místo konání
[edit]Termín: 10. ledna 2020, 18:00 - 20:00
Místo: Kancelář spolku Wikimedia Czech Republic (Q15735556) v SVĚT–HUB (Q55657858), budova Slovenská 21 (Q60577795).
Předpokládaný program:
- 18:00 - 18:50 - úvod a import jednoduchého datasetu společně
- 18:50 - 19:10 - přestávka
- 19:10 - 20:00 - import složitějšího menšího datasetu
- 20:00 - dále - volná zábava (s importy i bez importů)
Co si připravit
[edit]- notebook s nainstalovaným OpenRefine (http://openrefine.org/download.html) - stačí verze 3.2 (odvážlivci mohou zkusit i 3.3 RC1), k dispozici bude zřejmě jen jeden notebook
- menší dataset na import do druhé části workshopu (ideálně do 1000 položek); kdo si nepřinese, bude mu přidělen
Účastníci
[edit]Zapsat se můžete zde nebo do FB události.
- Vojtěch Dostál (talk) 13:31, 3 January 2020 (UTC)
- --MIGORMCZ (talk) 12:02, 7 January 2020 (UTC)
- Nečekal jsem to, ale vypadá to, že nakonec mám čas.--Ben Skála (talk) 12:57, 8 January 2020 (UTC)
- těším se na vás, páni a dámy. --Frettie (talk) 09:50, 9 January 2020 (UTC)
- Linda.jansova (talk) 05:47, 10 January 2020 (UTC)
Cheatsheet
[edit]- Textové GREL funkce
- Joinování tabulek - např: cell.cross('NKCR-QID convert table','nkcr').cells['item'].value[0]
- API call pro reconciliation podle českých štítků: https://wdreconcile.toolforge.org/cs/api
- Získat QID z reconciled sloupce - cell.recon.match.id
- Vyzobnutí části textu regulákem - Nějaký text (závorka) - value.match(/(.*) \((.*)\)/)[0] -> Nějaký text (případně value.match(/(.*) \((.*)\)/)[1] -> závorka).
- Nový sloupec s čímkoliv "nějaký text"
- Srovnání dvou sloupců: if(cells["a"].value == cells["b"].value, "Y", "N")
- Počet urč. znaků v určitém stringu: value.split(",").length()-1
- Ztransformovat URL stránky na Wikipedii do ASCII tak, aby ho bylo možné reconciliovat: substring(value,0,indexOf(value,"/wiki/")+6) + escape(substring(value,indexOf(value,"/wiki/")+6),'url')
- Jak vytáhnout z daného QID daný sitelink - návod: https://groups.google.com/g/openrefine/c/nplJxIFOPR8/m/QmKE0WyEAQAJ
- Převést datum DD.MM.RRRR na RRRR-MM-DD : forEach(value.replace(" ","").split("."),v,if(length(v)==1,0+v,v)).reverse().join("-")
- Výpočet vzdálenosti mezi dvěma GPS
import math
def haversine_distance(lat1, lon1, lat2, lon2):
R = 6371 # Earth's radius in kilometers
dLat = math.radians(lat2 - lat1) # Convert degrees to radians
dLon = math.radians(lon2 - lon1) # Convert degrees to radians
a = math.sin(dLat/2) * math.sin(dLat/2) + \
math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) * \
math.sin(dLon/2) * math.sin(dLon/2)
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
distance = R * c # Distance in kilometers
return round(distance, 2) # Return the distance rounded to 2 decimal places
lat1 = float(cells["lat"].value) # Latitude of the first point
lon1 = float(cells["lon"].value) # Longitude of the first point
lat2 = float(cells["GPS_X"].value) # Latitude of the second point
lon2 = float(cells["GPS_Y"].value) # Longitude of the second point
distance = haversine_distance(lat1, lon1, lat2, lon2) # Calculate the distance
return distance
- API cally
- Převedení textu na správný URL encoding => escape(value,"url")
- Je stránka redirect? Fetch URL => "https://commons.wikimedia.org/w/api.php?action=query&titles=" + value + "&prop=info&format=json"
- Kategorie, v nichž je daná stránka kategorizována => "https://commons.wikimedia.org/w/api.php?action=query&format=json&titles=" + value.replace(" ","_").escape('url') + "&prop=categories"
- Parsovat tyto kategorie do seznamu => value.parseJson().query.pages.find(/Category\:.*?"/).join(";").replace('"',"")
- Získat QID z kategorie, která je napojena na Wikidata => fetch URL => "https://www.wikidata.org/w/api.php?action=wbgetentities&props=info&sites=commonswiki&format=json&titles="+value.replace(" ","_").escape('url')
- Obrázky v kategorii: "https://commons.wikimedia.org/w/api.php?action=query&format=json&list=categorymembers&cmtitle=Category:"+value.escape('url')+"&cmtype=file"
- A pak forEach(value.parseJson().query.categorymembers,v,v.title).join("|")