Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Mär 29, 2024 10:47

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Gehäufte werte aus liste finden?
BeitragVerfasst: Di Jul 29, 2014 16:01 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich habe folgendes Scenario:
Es gibt ein Tool in welchem Benutzer einen Knopf drücken können wenn ein gewisses Ereignis passiert ist (unabhängig von dem Tool, wie z.B. wenn es Regnet). Diese Usereingabe wird nun an einen Server geschickt welcher es in einer Datenbank speichert (z.B. "User X hat zu folgendem Timestamp bestätigt das es Regnet").


Mein Ziel ist es jetzt, aus all diesen Daten die von mehreren Tausend Benutzern übertragen wurden, herauszufinden wann es angefangen hat zu Regnen. Das Problem ist, es hat sicherlich nicht jeder User zur gleichen Sekunde den Knopf gedrückt. Zudem gibt es einigermaßen viele fehl-angaben wo jemand absichtlich oder versehentlich zu einem zufälligen Zeitpunkt den Knopf gedrückt hat, sowie Leute die absichtlich pausenlos den Knopf drücken.


Die frage ist jetzt, wie bekomme ich am geschicktesten heraus, zu welchem Zeitpunkt gehäuft die meisten Einträge vorhanden sind? Ich habe einen haufen Timestamps und muss daraus berechnen wann es angefangen hat zu Regnen. Als kleine neben Regel gibt es noch die Tatsache, dass mindestens 10 Stunden zwischen jedem Regen liegen.


Wie mache ich das am geschicktesten?

Aya


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 30, 2014 10:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Hi,
ich hab sowas noch nicht selber gemacht. Aber bei sowas würde ich die Events zeitlich zusamenzählen (zB. meldungen pro Min, 5 Min, ...). Daraus kann man dann eine Funktion abhängig vom zeitlichen Verlauf berechnen. Dann würde ich über den Ansteig dieser gehen (damit man unabhängig von festen Zahlen und noise ist). Bei einer Steigerung von zB. 60% wäre dann "regen".

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 30, 2014 14:54 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich zögere gerade ein bisschen mit Antworten, weil ich glaube, dass du dein Problem auf ein anderes übertragen hast. Da ists oft schwierig, eine angemessene Lösung zu produzieren. Ist das richtig, und wenn ja, kannst du bitte dein Originalproblem beschreiben?

viele grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jul 31, 2014 08:32 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Naja ist jetzt nun kein ungewöhnliches Problem. Dein Hauptproblem ist halt nur das der Regen nicht bloß eine Sekunde dauert.

- Group By über Zeit durch X
- Sum(1) über die Gruppe
- Wenn die Summe größer X ist dann hast du einen Eintrag
- du brauchst ein Running Value für das Offset zum nächstmöglichen Startpunkt
- du brauchst ein Running Value für die Länge vom aktuellen möglichen Startpunkt
- potenziellen Startpunkt ermitteln (muss größer Offset sein)
- wenn die Länge größer X ist,dann ist es ein Regen.
- wenn es ein Regen ist, dann ist Offset = Offset + Länge + deine 10 Stunden

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Aug 09, 2014 15:07 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Was du machst sind statistische Auswertungen. Du willst z.B. Ausreiser eleminieren (wenn jemand ein Ereignis aus Spass meldet)
Um solche Auswertungen zu machen, musst du die Natur der Verteilung kennen. Sind deine Ergebnisse Normalverteilt? Gibt es Gruppen? Ist es eine HockeyStick verteilung oder eine Badewannenkurve?

Ich denke hier kann dir ein Statistiker weiter helfen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Sep 24, 2014 22:36 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Wenn es wirklich sehr viele Einträge sind, kannst Du einfach den Mittelwert bilden.
Die Ausreißer sollten dann nicht ins Gewicht fallen.
Evtl. noch nen Schwellenwert festlegen, um zu prüfen, ob das Ereignis auch stattgefunden hat, oder nur ein paar Spaßvögel gedrückt haben.

Wenn es nicht so viele Einträge wären, würde ich einfach Intervalle definieren, z.B. alle 10 Minuten, und die Einträge entsprechend reinschieben.
Für den genauen Zeitpunkt kannst Du auch hier einfach über die Zeiten innerhalb der relevanten Intervalle mitteln.

Über die Art der Verteilung würd ich mir keine Gedanken machen.
Sollten zwar annähernd normalverteilt sein, wenn sie im wesentlichen von der Eingabe eines menschlichen Nutzers abhängen, allerdings frag ich mich, ob das bei so einer inhomogenen Größe wie in dem Bespiel hier noch auffällt.
Mittelwert sollte reichen.
Problematisch wirds bloß, wenn absichtlich viele Einträge an gewissen Zeiten konzentriert geschickt werden. Aber da könnte man ja auch ohne Probleme eine Normalverteilung vortäuschen...

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 23:40 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hallo Vinz. Mittelwerte gibt es viele.
Arithmetisches Mittel, Gewichtetes Mittel, Median, Modus

Das was du dir vorstellst funktioniert nur bei einer Gleichverteilung. Statistische Analyse ist etwas komplizierter als das.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Sep 26, 2014 00:09 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Hi Flash,
welcher von denen würde hier außer dem arithmetischen Mittelwert Sinn machen?
-Modus ist der häufigste Wert. (bei {1,1,100,101,102,103} wäre das 1)
-Median der mittlere Wert (bei {1,2,1000} wäre das 2...)
-Gewichtete Mittel erhält man wenn man die Ereignisse unterschiedlich stark wichtet...

Eine Gleichverteilung ist hier garantiert nicht zu erwarten, die hast Du z.B. bei einem idealen Würfel.
Trotzdem kannst Du das arithmetische Mittel, auch empirischer Erwartungswert genannt, für beliebige Verteilungen bilden.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Sep 26, 2014 15:22 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Bei solchen Zahlen würde es halt Sinn machen nach Gruppen zu suchen. Z.B. gibt es wohl bei deiner ersten Reihe eine Gruppe bei "1" und eine bei "101".
Jede dieser Gruppen zeichnet aus, dass sie nur eine geringe Streuung hat.

Wie gesagt: Der Versuch eine Zahlenmenge auf genau 1 Kennzahl zu reduzieren macht je nach Verteilung wenig sinn, denn diese Kennzahl kann einen Bereich in deiner Menge beschreiben, der selbst gar nicht vorkommt oder unwichtig ist.

Aber ich bin auch kein Statistiker. Ich würde nur halt mit dem konkreten Problem mal zu einem Gehen. An den Mathe-Fakultäten rennen da genug rum. Und Mathematiker mögen es üblicherweise, wenn sie anstatt blöd angeguckt zu werden, mal ihre Fachkenntnisse konkret anwenden dürfen. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 32 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.101s | 18 Queries | GZIP : On ]