Ich fand die Reaktion großartig für mich, der nur Nischensachen schrieb, also versuchte ich es ein bisschen mehr. Es ist eine Geschichte.
Klicken Sie hier für diesen Code. Was ich mache, ist das gleiche wie beim letzten Mal. https://github.com/keisuke-yanagisawa/study/blob/20151205/luigi/param_tuning.py
Dieses Mal lautet das Thema ** Ich möchte eine allgemeine Aufgabe erstellen **. Ich mache verschiedene Aufgaben, aber ich mache gerne überall allgemeine Aufgaben. Deshalb,
Ich habe eine Aufgabe gemacht, die dies für allgemeine Zwecke erledigt.
class param_tuning(luigi.Task):
tasks = luigi.Parameter() # luigi.Eindimensionales Array von Aufgaben
text_format = luigi.Parameter() #Übergeben Sie Python "mit Variablenname Beschreibung" regulären Ausdruck
reduce_pivot = luigi.Parameter() #Welche Variable für die Aggregation verwendet werden soll
reduce_rule = luigi.Parameter(default="min") #Geben Sie die zu aggregierende Funktion an, min or max
out_file = luigi.Parameter() #Name der Ausgabedatei
def requires(self):
return self.tasks;
def output(self):
return luigi.LocalTarget(self.out_file)
def run(self):
# making pandas dataframe
results = []
for task in self.requires():
with task.output().open() as taskfile:
string = taskfile.read()
groupdict = re.search(self.text_format, string).groupdict()
results.append(groupdict)
df = pd.DataFrame.from_dict(results);
df[self.reduce_pivot] = convert2num(df[self.reduce_pivot])
values = df[self.reduce_pivot]
# Aggregation of parameter tuning results
if self.reduce_rule == "min":
best_val = min(values)
elif self.reduce_rule == "max":
best_val = max(values)
else:
print("reduce_rule must be min or max. your input is %s" % self.reduce_rule)
exit(1);
# Rearrangement of column order
column_order = filter(lambda key: key != self.reduce_pivot, df.columns) + [self.reduce_pivot]
df = df[column_order]
# Outputting results as csv formatted data
df[df[self.reduce_pivot] == best_val].to_csv(self.output().fn, index=False);
Das Codieren war für verschiedene Aggregationsbeziehungen problematisch, daher überließ ich es Pandas. Es ist sehr einfach,
require ()
ausEs ist ein Mechanismus.
Eingabe ist etwas verwirrend. Ich denke, Sie können Aufgaben grundsätzlich verstehen, reduzieren und ausgeben, aber für allgemeine Zwecke wurde es schwierig, eine Schnittstelle zu erstellen, die reguläre Ausdrücke einfügt.
Verwendung des auf github veröffentlichten Codes
python param_tuning.py main_task --local-scheduler
Ich denke, es wird funktionieren, wenn Sie so etwas tun.
In Bezug auf die Verwendung dieser Allzweckaufgabe bereiten wir eine separate "Aufgabe zum Berechnen mit Parametern" und "Aufgabe für die Hauptfunktion" vor.
Der in der Hauptaufgabe beschriebene reguläre Ausdruck ist wahrscheinlich die größte Schwierigkeit (ich habe den regulären Ausdruck nicht zu oft verwendet), und ich habe ihn erklärt. Die Berechnungsausführungsaufgabe "task_param_eval" dieses Mal dient zum Ausgeben einer einzeiligen CSV-Formatdatei mit dem Namen "cost, gamma, error". Geben Sie sie daher wie folgt an.
s = "[-+]?\d*\.\d+|\d+" ## float or int expression
text_format = "(?P<cost>"+s+"),(?P<gamma>"+s+"),(?P<error>"+s+")"
Sie können den Namen mit ? P <Name>
angeben. Dies wird als Name des Headers und Drehpunkts der Ausgabe-CSV verwendet. Geben Sie ihn daher bitte richtig an.
Ich bin eine Person, die verzweifelt schlecht in der Modularisierung für das Codieren ist, aber ich denke, es ist sehr gut, es "unvermeidlich" schneiden zu können, wenn eine solche Kraft angewendet wird. Dieses Mal habe ich versucht, einen Allzweckartikel zu erstellen, der einer der Vorteile der Modularisierung ist. ... Ich würde mich über Ihre Anleitung und Ermutigung freuen, dass die Codierung überhaupt nicht gut ist.
Leihen Sie sich aus dem Stapelüberlauf unten aus, wie Sie Zahlen in regulären Ausdrücken finden. http://stackoverflow.com/questions/4703390/how-to-extract-a-floating-number-from-a-string-in-python
Recommended Posts