Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10440[/thread]

Querschnittsreduzieren von Datensätzen



<< >> 7 Einträge, 1 Seite
AndreasM
 2007-09-21 19:31
#99833 #99833
User since
2005-10-08
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo zusammen,
ich habe eine Datei mit zeilenorientierten Datensätzen, aus denen ich eine bestimmte Anzahl Datensätze im Querschnitt extrahieren möchte. Die Restmenge möchte ich natürlich auch bestimmen.
Z. B. habe ich eine Datei mit 6000 Zeilen, von denen ich 4000 im Querschnitt herausziehen und in Datei A schreiben möchte, die restlichen 2000 will ich dann in Datei B haben.
Oder auch 2000 in Datei A, 2000 in Datei B, 2000 in Datei C usw...
Jetzt ist das Lesen und schreiben selber kein Problem, aber ich bin kein Mathematiker und habe Probleme mit dem Querschnitt an sich.

Etwas wie "Math::CrossSection" scheint es (noch?) nicht zu geben, zumindest finde ich nichts darüber (falls "CrossSection" überhaupt die richtige Übersetzung ist )

Kennt jemand ein Modul ( oder eine Funktion) , mit dem etwas ähnliches möglich ist?

Grüße
AndreasM
Ronnie
 2007-09-21 20:29
#99836 #99836
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Wenn ich ehrlich bin, ist mir völlig unklar was du mit "im Querschnitt herausziehen" meinst?! Wie sehen denn die Daten in den Zeilen aus? Nach was soll gefiltert werden?
AndreasM
 2007-09-21 22:10
#99840 #99840
User since
2005-10-08
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Es soll gar nichts gefiltert werden.
Es sind einfache Zeilen in einer Datei.

In meinem konkreten Fall: Kundenadressen. Eine Liste von 9768 Adressen (eine Adresse pro Zeile), bereits nach Postleitzahl sortiert.

3555 davon sollen in die eine Datei, der Rest in eine andere Datei.
Würde ich einfach die ersten 3555 Adressen in die eine Datei schreiben und den Rest in eine andere bekäme ich aber keinen repräsentativen Querschnitt, sondern hätte irgendwan einen harten Schnitt. Das will ich aber nicht.
Es soll, wenn möglich, aus jedem Bundesland mal einer in der einen oder anderen Datei landen.
Das meine ich mit "repräsentativem Querschnitt".

Grüße
AndreasM
Ronnie
 2007-09-22 00:13
#99842 #99842
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
AndreasM+2007-09-21 20:10:20--
Es soll gar nichts gefiltert werden.

Naja, wenn du n aus m benötigst, ist das eine Auswahl - die nach einem Kriterium erfolgen muss. Du könntest dafür die Wahrscheinlichkeit verwenden. Bei deinem Beispiel wäre die Wahrscheinlichkeit ob ein Datensatz relevant ist oder nicht 3555/9768. Vereinfacht könnte sowas so ähnlich aussehen (mit ein paar Pferdefüssen):
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl

use strict;
use warnings;

my $max     = 6;
my $lines   = 20;
my $prob    = $max / $lines;
my $cnt     = 0;

while(<DATA>) {
    last if $cnt > $max;
    (rand(1) <= $prob) and $cnt++ and print;
}

print "last one was on line: " . $.;

__DATA__
foo
bar
buz
qiz
quz
foo
bar
buz
qiz
quz
foo
bar
buz
qiz
quz
foo
bar
buz
qiz
quz

EDIT: Es gibt übrigens einen signifikanten Unterschied zwischen einem "repräsentativen Querschnitt" und dem Querschnitt - bei letzterem gehen die meisten Leute von einer Fläche aus.
AndreasM
 2007-09-22 14:04
#99853 #99853
User since
2005-10-08
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich sehe das ganze als Mengenproblem.
Es geht nicht nur um n aus m, sondern ggf. auch um

a aus n
b aus n
(c aus n)
...
wobei gelten muss :
a nicht in b
( b nicht in c UND a nicht in c)

usw usw....

Ich brauche wohl ein Mengenlehrenbuch ;)
Kennt denn jemand den korrekten englischen Begriff dadür? Das könnte mir beim Suchen helfen.
CrossSection ist wohl eher eine bildliche Schnittdarstellung.

Grüße
AndreasM
AndreasM
 2007-09-23 12:46
#99877 #99877
User since
2005-10-08
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm,

einen Algorithmus habe ich zwar (noch) nicht gefunden, aber ich benutze jetzt

Algorithm::Numerical::Shuffle

Damit mische ich die Liste mit meinen Zeilennummern durch und zähle dann einfach von oben ab (sooft ich will oder bis es nix mehr zu zählen gibt).
Es funktioniert und sieht auch vom Ergebnis her, äh, repräsentativ aus.

Grüße und Danke
AndreasM
Struppi
 2007-09-23 14:49
#99878 #99878
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
suchst Verteilung bzw. Häufigkeit?
http://de.wikipedia.org/wiki/H%C3%A4ufigkeitsverte...

Das liesse sich einfach über einen HASH lösen
<< >> 7 Einträge, 1 Seite



View all threads created 2007-09-21 19:31.