Archives:
- November 2011
- Avgust 2011
- Junij 2011
- Maj 2011
- April 2011
- Januar 2011
- December 2010
- November 2010
- Avgust 2010
- Julij 2010
- Junij 2010
- Maj 2010
- Februar 2010
- Januar 2010
- December 2009
- November 2009
- September 2009
- Julij 2009
- Junij 2009
- April 2009
- Marec 2009
- Februar 2009
- November 2008
- Oktober 2008
- September 2008
- Avgust 2008
- Julij 2008
- Junij 2008
- Maj 2008
- April 2008
- Marec 2008
- Januar 2008
- December 2007
- November 2007
- Oktober 2007
- September 2007
- Avgust 2007
- Julij 2007
- Junij 2007
- Maj 2007
- April 2007
- Marec 2007
- Februar 2007
- Januar 2007
- December 2006
- November 2006
- Oktober 2006
- September 2006
- Avgust 2006
- Julij 2006
- Junij 2006
- Maj 2006
- April 2006
- Marec 2006
- Februar 2006
- Januar 2006
- December 2005
- November 2005
- Oktober 2005
- September 2005
- Avgust 2005
- Julij 2005
Meta:
Categories:
- blunt-hate
- comp
- debian
- django
- dogbert
- dovhcajt
- faks
- kiberpipa
- kitchen sink
- kultura
- linux
- ljubljana
- mediji
- opendata
- pootle
- python
- slovenija
- zanimivosti
Recent Posts:
- Prosti podatki za zabavo: 22. Liffe
- Kako pravilno uporabljati Supervizor
- Trgovanje z Burmo
- Avtoprevozniški hlapci
- Ne tolerirajte, da vam pijanci narekujejo dejanja
- Kolesarska zmaga: Bicike(LJ) in Android aplikacija
- Zakaj mora vsak operater kakršnega koli omrežja javno objaviti pregled nad stanjem omrežja
- 598
- Naj poslancem krava crkne
- Malo delo: da ali ne?
Blogroll:
Prosti podatki za zabavo: 22. Liffe
Posted on November 2nd, 2011 in dovhcajt, kultura, ljubljana, opendata, python, slovenija |
Prosti podatki so pogosto opevani kot zelo uporabna reč, vendar je očitno, da marsikdo te uporabnosti ne prepozna. Pa poglejmo zakaj so podatki, ki so dostopni v tabelarični obliki, lahko uporabni.
Recimo, da si na primer želimo ogledat kak film na Ljubljanskem mednarodnem filmskem festivalu. Izbire je preveč, zato je nujno narediti selekcijo. Kako to narediti? Ročni način bi bil, da z miško klikaš po seznamu, prebereš opise, morda pogledaš še video in si sproti ustvariš zaznamke. Če se ti da še malenkost bolj potrudit (ali če je opis premalo sporočilen), pogledaš še na IMDB za oceno. Na podlagi teh zaznamkov se potem odločiš za ožji izbor.
Malo manj ročni način je z uporabo računalniškega programa. Program festivala žal ni na voljo v tabelarični obliki, kar pomeni, da bo s pridobivanjem podatkov nekoliko več dela. Podatke je potrebno izvleči iz kode spletne strani.
Za programiranje bom uporabil prost programski jezik Python. Najprej preberimo kodo spletne strani. Da bo program “razumel” kodo, bomo uporabili dodatno knjižnico lxml. Sam sem uporabil Python 2.7 in lxml 2.3.
#!/usr/bin/python # nalozimo knjiznico import lxml.html # naslov, kjer se nahaja program festivala root = 'http://www.liffe.si/program/abc-seznam/' # preberimo spletno stran h = lxml.html.parse(root).getroot() h.make_links_absolute(root)
Zdaj smo prebrali spletno stran. Ta se nahaja v spremenljivki h. Iz naložene spletne strani je zdaj potrebno dobiti zapise o posameznem filmu. Koda spletne strani ima obliko drevesa. S plezanjem po drevesni strukturi izberemo delčke strani, ki nas zanimajo. Če izberemo vse vrstice, bomo lahko prebrali vse filme.
# ... koda se nadaljuje od zgoraj
# zanimajo nas zapisi v tabeli filmov
# s spodnjim ukazom poiščemo vrstice (tr) znotraj tabele (table),
# ki se nahaja znotraj obrazca (form), katerega atribut "id" je "pluginAppForm"
trs = h.xpath('//form[@id="pluginAppForm"]//table/tr')
# seznam za shranjevanje zapisov
filmi = []
# sprehodimo se po vseh vrsticah
for tr in trs:
# znotraj vrstice tr izberemo polja
tds = tr.xpath('.//td')
# iz vsakega polja poberemo besedilo
teksti = []
for c in tds:
teksti = teksti + c.xpath('.//text()')
# ker so v nekaterih vrsticah črte med črkami abecede,
# je potrebno te vrstice ignorirati, kar naredimo tu
if len(teksti) != 6:
continue
# izpisimo informacije, ki jih imamo sedaj
print teksti
# dodajmo informacije o filmu v seznam filmov
filmi.append(teksti)
Datoteka: liffe1.py
Zdaj smo uspeli prebrati kar nekaj informacij o filmih, ki se bodo na festivalu predvajali. Slovenski naslov, naslov v izvirniku, država in leto, režiserja, jezik in kategorijo, v katero je na festivalu umeščen.
Ker bi želeli to prebrati kot preglednico, se nam splača to shraniti v zapis, ki ga bo prebavil Calc ali Excel. Najenostavnejši je CSV oz. z vejico ločena polja.
# informacije o filmih so shranjene v spremenljivki "filmi"
# nalozimo modul csv
import csv
# odprimo novo datoteko liffe22.csv, v katero bomo podatke shranili
wr = csv.writer(open('liffe22.csv','w'))
# vpisimo naslove stolpcev
wr.writerow(['Naslov', 'Originalni naslov', 'Drzava, Leto', 'Rezija', 'Jezik', 'Kategorija'])
# vsak film vpisemo v datoteko
for f in filmi:
polja = []
for p in f:
polja.append(p.encode('utf-8'))
wr.writerow(polja)
Datoteka: liffe2.py
Če sedaj datoteko liffe22.csv odpremo z Excelom oz. Calcom, bomo videli nekaj podobnega spodnji sliki:
Z uporabo preglednice lahko potem izvajamo bolj zanimive stvari, npr. filtriramo. Najprej uporabimo AutoFilter:

Če sedaj označimo, da želimo pregledati le perspektive, potem vidimo nekaj podobnega:
Če želimo pregledovati po letniku filma, pa naletimo na težavo, saj je leto združeno z državo. Zato moramo naš program malo popraviti:
...
if len(teksti) != 6:
continue
# locimo drzavo in leto v dve polji
drzava_leto = teksti[2].rsplit(', ', 1)
# vkomponiramo novi polji
teksti = teksti[:2] + drzava_leto + teksti[3:]
# izpisimo informacije, ki jih imamo sedaj
print teksti
...
# vpisimo naslove stolpcev
wr.writerow(['Naslov', 'Originalni naslov', 'Drzava', 'Leto', 'Rezija', 'Jezik', 'Kategorija'])
...
Datoteka: liffe3.py
Skoraj perfektno, sedaj lahko filtriramo tudi po letu izida.
Sedaj imamo podatke v tabelarični obliki v zapisu, ki ga lahko uporabimo, da podatke obogatimo še s čim drugim… na primer s podatki, ki so v IMDB. IMDB ima v bazi povprečje ocen filma, ki so jih filmu prisodili uporabniki, kar je včasih kar dober indikator. Dodajmo še to:
# nalozimo knjiznice
import lxml.html
import json
import urllib
...
# locimo drzavo in leto v dve polji
drzava_leto = teksti[2].rsplit(', ', 1)
# dodajmo še ocene in žanr iz IMDB
# sestavimo url
orig_naslov = urllib.quote(unicode(teksti[1]).encode('utf-8'))
url = 'http://www.imdbapi.com/?t=%s&y=%s' % (orig_naslov, drzava_leto[1])
# prenesimo url
imdb_text = urllib.urlopen(url).read()
# nalozimo zapis v program
imdb = json.loads(imdb_text)
# preberemo oceno
imdb_ocena = imdb.get('Rating', '')
imdb_zanr = imdb.get('Genre', '')
# vkomponiramo nova polja
teksti = teksti[:2] + drzava_leto + teksti[3:] + [imdb_ocena, imdb_zanr]
...
wr.writerow(['Naslov', 'Originalni naslov', 'Drzava', 'Leto', 'Rezija', 'Jezik', 'Kategorija', 'IMDB ocena', 'IMDB zanr'])
...
Datoteki: liffe4.py in life22.csv
Tako dobljeno CSV datoteko zdaj ponovno odpremo s Calcom oz. Excelom, ponovno uporabimo AutoFilter in podatke posortiramo padajoče po IMDB oceni (Data -> Sort). Tako dobimo dobro informacijo če je določen film vreden ogleda ali vsi pred njim bežijo.
Seveda teh ocen ni nujno upoštevat. Liffe je super priložnost, da si človek ogleda kak tretji film, ki ga brez festivala sploh ne bi opazil.
Zakaj mora vsak operater kakršnega koli omrežja javno objaviti pregled nad stanjem omrežja
Posted on Maj 18th, 2011 in opendata, slovenija |
Na Twitru se je razvila debata o Simobilovem občasnem nedelovanju omrežja, ki je za Simobilove uporabnike razmeroma znan pojav. Nikjer pa nisem mogel pogledati če je prišlo do napake na omrežju ali gre za vzdrževalna dela. Takih informacij na spletni strani Simobila ne boste našli.
Si predstavljate kaj bi se zgodilo, če bi vam elektro naenkrat nenapovedano izklopil elektriko? Ali pa ko sredi britja nenapovedano preneha teči voda in moraš uporabiti kreativne ideje, da lahko dokončaš svoje delo? Ljudje so sprva tečni, če pa se to dogaja pogost, pa se prilagodijo na nezanesljivost in si poiščejo ali ustvarijo alternative – zbiranje deževnice namesto vodovoda, baterijska svetilka za razsvetljavo v primeru odsotnosti elektrike in Vox.io v primeru nedelovanja operaterja mobilnega omrežja.
No, nekateri bodo želeli argumentirati, da je z vodovodom in elektriko drugače, da sta “nujno potrebna za življenje”. Prosim lepo, kako pa so živeli pred 200 leti, ko je bila elektrika zgolj nek čuden pojav, s katerim so se ukvarjali trije ljudje na svetu, in ko so po vodo hodili v vaške vodnjake? In ko se nekaj pripeti in moraš nujno opraviti telefonski klic, je lahko mobilni operater ravno tako nujno potreben za življenje. Ko me operater izda, bom tečen. Niti ne toliko zaradi tega, ker stvar tisti trenutek ne deluje, ampak predvsem zato, ker dobro vem, da se to stalno ponavlja in da je zadevo možno izpeljati bolj kvalitetno.
Pregledna in redno osvežena spletna stran s stanjem omrežja je prvi korak do izboljšanja. Uporabniki se privadijo, da lahko kadarkoli sami preverijo stanje omrežja, brez da bi morali čakati na telefonski liniji centra za pomoč uporabnikom in poslušati muziko, ki si je niso sami izbrali. Operater pa živi v strahu in bolečini, da mora javno objaviti nenapovedan izpad omrežja, skupaj s podrobnostmi kot so čas izpada, razlogi in trenutnim napredovanjem odprave izpada.
Ampak, dragi Simobil, to je bolečina, s katero podjetje zunanjo neprijetnost (nezadovoljstvo uporabnikov in nekvalitetna storitev) preslika v notranjo (javna osramotitev oz. uradno priznanje nesposobnosti), kar pa pomeni, da boste končno imeli motivacijo popraviti sedanje stanje. In končno bo lahko tudi navaden smrtnik izračunal kako zanesljiv ponudnik zares ste.
Javna skrivnost je, da je Simobilovo omrežje dokaj … “šibko”. Novost zame pa je, da morda (ali pa ne) ob 10h dopoldan izvajajo vzdrževalna dela, kar bi bilo sila nespametno početje. Vsekakor pa zadolženi za komunikacijo na Twittru ne deli bolečine z mano, ko pravi, da je “Vsake toliko je to [=dela na bazni postaji] potrebno.
”.
Naj šramfajo in tipkajo ponoči, če ponujajo infrastrukturno storitev, sicer ima da dela.
Mednarodna delavnica odprtih podatkov je uspela
Posted on December 6th, 2010 in ljubljana, opendata, python, slovenija |
V soboto je v 63 državah potekal open data hack day in ena izmed sodelujočih je bila prvič tudi Slovenija. Zbralo se nas je kakih osem, devet, kar se je izkazalo za ravno lepo število, da lahko že kaj naredimo. In kaj smo uspeli narediti?
V prvi vrsti je zelo pomemben popis virov podatkov, ki omogoča, da se sploh zavedamo do kakih podatkov je dostop trenutno možen in da obstaja katalog, ki popisuje vse te vire informacij. To je kar dobro uspelo, seveda pa je še kar ogromno zadev, ki še niso na seznamu.
Lotili smo se sicer večih vizualizacij, a dokočali smo le eno, je pa ta toliko bolj zanimiva – verjetnost, da bo vaš narobe parkiran avto v Ljubljani odpeljal pajek mestnega redarstva. Na voljo je tudi tabela vnosov na Google Docs.
Na koncu bi se prav lepo zahvalil Mateju Praprotniku, ki je pomagal pri organizaciji, in RTV Slovenija, ki je dogodku nudila prostor in prigrizek ter tako omogočila, da je bila prva delavnica prostih podatkov tako uspešna.




