ugrás a tartalomhoz

Adatelemzés

csla · 2013. Jún. 19. (Sze), 00.54
Sziasztok!

Adott egy MySQL vagy PostgreSQL tábla, ami eseményeket tartalmaz, nagyjából 2 és fél milliót. Az egyszerűség kedvéért legyen benne két mező: esemény időpontja, objektum azonosítója (amivel az esemény történt).
A feladat az, hogy megkeressem azokat az objektumokat, amelyekkel gyakran történik meg nagyjából egy időben az esemény.

Én első közelítésben arra gondoltam, hogy készítek egy lekérdezést (MySQL verzióban), amelyik összeszedi, hogy azonos perceken belül mely objektumokkal történt esemény, és ezekben keresek ismétlődő mintákat. Valahogy így:
SELECT perc,GROUP_CONCAT(objektum ORDER BY objektum separator ",") FROM esemenyek GROUP BY perc
Egyből látszik a hátrány: csak azok az esetek gyűjthetők ki ezzel, amelyeknél nem "lóg át" másik percbe egy-egy elvileg oda kapcsolódó esemény. Persze ha elég gyakori az eset, akkor valószínű, hogy találunk olyat, aminél nem lóg át, és ez már részleges eredményt hozhat, találhatunk párat. Feltéve persze, ha van egyáltalán ilyen... ezt sajnos nem tudjuk.

Ti hogyan állnátok neki? Van ilyesmire bevált módszer, eljárás?

(A kategóriaválasztás esetleges, a téma ebben a tálalásban inkább elméleti, de a megvalósítás - az adatbázisokon kívül - PHP-ben kell/lesz.)
 
1

Lassú lesz

Hidvégi Gábor · 2013. Jún. 19. (Sze), 06.04
Első körben meghatároznék egy rádiuszt, pl +/- 60 másodperc, aztán egyesével végigmennék a sorokon, SELECT COUNT(objektum) WHERE ido >= (eredeti_objektum_timestamp - 60) AND ido <= (eredeti_objektum_timestamp + 60);
2

A feladat az, hogy

MadBence · 2013. Jún. 19. (Sze), 12.36
A feladat az, hogy megkeressem azokat az objektumokat, amelyekkel gyakran történik meg nagyjából egy időben az esemény.
Nem értem a kérdést, most azt keresed, hogy egy objektummal ugyanaz az esemény milyen gyakran következik be, egy objektummal több féle esemény hogy követi egymást, egy esemény hány objektummal kapcsolatban fordul elő...
3

Egyik sem. :)

csla · 2013. Jún. 19. (Sze), 12.56
Ahogy írtam, azokat az objektumokat keresem, amelyekkel gyakran történik egyszerre (de ez nem pontosan egy időpontban való megtörténést jelent, hanem pár másodperces különbségekkel) ugyanaz az esemény.

Például ha az objektumok gépek, az esemény pedig az, hogy hibázik a gép, akkor a feladat az, hogy megkeressük azokat, amelyek gyakran hibáznak egyszerre.
5

SELECT e1.esemeny,

MadBence · 2013. Jún. 19. (Sze), 14.46
SELECT e1.esemeny, e1.objektum, e2.objektum FROM esemenyek e1
JOIN esemenyek e2 ON e1.esemeny = e2.esemeny
WHERE ABS(e1.perc-e2.perc)<hatarertek AND e1.id>e2.id
Azok az objektumpárok, amiken ugyanaz az esemény következett be adott időn belül (duplikációk szűrésével)
4

miért nem szkript?

szabo.b.gabor · 2013. Jún. 19. (Sze), 13.20
szerintem kérd le időrendben a rekordokat, aztán valami szkripttel építs jó kis adatstruktúrákat, amiken már könnyen ellenőrizheted a feltételeid.

ezekből ahogy berakod az újakat ki is veheted a régieket, hogy ne nőjenek hatalmas méretűre.

szerintem rugalmasabb megoldást kapsz így, és a teljesítménye sem lesz azért annyira rossz, ha jól csinálod.
6

Első körben kellenek teszt

inf · 2013. Jún. 21. (P), 03.18
Első körben kellenek teszt adatok, amiknél előre tudod, hogy milyen eredményt vársz.

A második kört már leírták mások, meg lehet ezt csinálni elég egyszerű algoritmussal is... Ha valami bonyolultabb statisztikai módszert használnál, akkor olvasgass itt: http://lmgtfy.com/?q=data+mining+temporal+patterns

Ha megokosodtál data mining témában, akkor én szívesen olvasnék cikket, vagy legalább egy rövid leírást róla... ;-) Ha esetleg elakadnál írj nyugodtan, illetve, ha meghaladja a mi statisztikai képességeinket a dolog, akkor itt biztosan tudnak segíteni: http://stats.stackexchange.com/