Wenn es Zeit ist, eine endgültige Erklärung einzureichen, werden Sie bei erneuter Bestätigung der Buchhaltungsdaten einige Fehler im Konto finden. Ich dachte, es wäre gut, wenn Sie die Buchhaltungsdaten durch maschinelles Lernen lernen und das Konto vorhersagen könnten.
Exportieren Sie die Daten im CSV-Format aus der Buchhaltungssoftware und verwenden Sie sie. Diese Daten verwenden übrigens die Software "JDL IBEX Treasurer" als Beispiel.
http://www.jdl.co.jp/co/soft/ibex-ab/
Laden Sie die Daten mit dem folgenden Code.
python
import pandas as pd
filename = "JDL-Kontobuch-xxxx-xxxx-Tagebuch.csv"
df = pd.read_csv(filename, encoding="Shift-JIS", skiprows=3)
Grenzen Sie die zu verwendenden Daten aus den gelesenen Daten ein. Hier verwenden wir den Code und den Namen der Beschreibung und des Belastungspostens.
python
columns = ["Beschreibung", "Betreff belasten", "Betreff belasten正式名称"]
df_counts = df[columns].dropna()
Informationen zu den Beschreibungsdaten Durch morphologische Analyse werden die Zeichendaten als gerichteter numerischer Wert vektorisiert.
Eine Bibliothek namens Janome wird für die morphologische Analyse verwendet.
http://mocobeta.github.io/janome/
Wenn es nicht installiert ist, müssen Sie es mit dem folgenden Befehl installieren.
python
$ pip install janome
Der folgende Code konvertiert die Beschreibungsdaten in Token-Daten.
python
from janome.tokenizer import Tokenizer
t = Tokenizer()
notes = []
for ix in df_counts.index:
note = df_counts.ix[ix,"Beschreibung"]
tokens = t.tokenize(note.replace(' ',' '))
words = ""
for token in tokens:
words += " " + token.surface
notes.append(words.replace(' \u3000', ''))
Infolgedessen wird die folgende Konvertierung durchgeführt und es wird eine Zeichenfolge mit einem Abstand von halber Breite für jedes Wort.
Originalzusammenfassungsdaten "Souvenirgebühr BLUE SKY Haneda" Daten nach Änderung "Souvenirgebühr BLUE SKY Haneda"
Diese Zeichenfolge wird mit dem folgenden Code vektorisiert und als Eingabedaten verwendet.
python
from sklearn.feature_extraction.text import TfidfVectorizer
vect = TfidfVectorizer()
vect.fit(notes)
X = vect.transform(notes)
Es verwendet auch den Kontocode als Lehrerdaten.
python
y = df_counts.Betreff belasten.as_matrix().astype("int").flatten()
Die in numerische Werte konvertierten Daten werden durch Kreuzvalidierung in Trainingsdaten und Verifizierungsdaten unterteilt.
python
from sklearn import cross_validation
test_size = 0.2
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=test_size)
Lernen Sie mit den geteilten Daten. Hier verwenden wir LinearSVC als Modell.
python
from sklearn.svm import LinearSVC
clf = LinearSVC(C=120.0, random_state=42)
clf.fit(X_train, y_train)
clf.score(X_test, y_test)
Die Punktzahl war "0,89932885906040272".
Geben Sie aus den gelernten Ergebnissen die Testdaten wie unten gezeigt ein und überprüfen Sie, welche Art von Konto erwartet wird.
python
tests = [
"Autobahnnutzungsgebühr",
"Kosten für PC-Teile",
"Stempelgebühr"
]
notes = []
for note in tests:
tokens = t.tokenize(note)
words = ""
for token in tokens:
words += " " + token.surface
notes.append(words)
X = vect.transform(notes)
result = clf.predict(X)
df_rs = df_counts[["Offizieller Name des Belastungssubjekts", "Betreff belasten"]]
df_rs.index = df_counts["Betreff belasten"].astype("int")
df_rs = df_rs[~df_rs.index.duplicated()]["Offizieller Name des Belastungssubjekts"]
for i in range(len(tests)):
print(tests[i], "\t[",df_rs.ix[result[i]], "]")
Das Ausgabeergebnis ist ...
python
Autobahnnutzungsgebühr[Reisekosten Transport]
Kosten für PC-Teile[liefert Kosten]
Stempelgebühr[Kommunikationskosten]
Es fühlt sich ziemlich gut an (^ - ^)
Übrigens braucht der Transferschein etwas mehr Einfallsreichtum.
Ich dachte, es wäre besser, wenn ich auch Informationen zu Monaten, Tagen und Abschlüssen verwenden könnte, aber ich war mir nicht sicher, wie ich mit den Lerndaten umgehen sollte, also werde ich später darauf eingehen.
Was soll ich als nächstes tun?
Wenn Sie versuchen, das obige Programm so zu verwenden, wie es ist, ist es nicht effizient, da die tatsächlichen Daten bei jeder Ausführung gelesen, gelernt und dann vorhergesagt werden. Speichern Sie daher die Trainingsdaten und lesen Sie in dem zu prognostizierenden Teil die trainierten Daten und ändern Sie sie in Vorhersagen.
Sie können die Trainingsdaten speichern, indem Sie am Ende des obigen Programms den folgenden Code hinzufügen.
python
from sklearn.externals import joblib
joblib.dump(vect, 'data/vect.pkl')
joblib.dump(clf, 'data/clf.pkl')
df_rs.to_csv("data/code.csv")
Laden Sie im neuen Programm die Trainingsdaten wie folgt.
python
import pandas as pd
filename = "data/code.csv"
df = pd.read_csv(filename, header=None)
df.index = df.pop(0)
df_rs = df.pop(1)
from sklearn.externals import joblib
clf = joblib.load('data/clf.pkl')
vect = joblib.load('data/vect.pkl')
Führen Sie nach dem Lesen der Trainingsdaten die Vorhersage weiter aus.
python
from janome.tokenizer import Tokenizer
t = Tokenizer()
tests = [
"Autobahnnutzungsgebühr",
"Kosten für PC-Teile",
"Stempelgebühr",
]
notes = []
for note in tests:
tokens = t.tokenize(note)
words = ""
for token in tokens:
words += " " + token.surface
notes.append(words)
X = vect.transform(notes)
result = clf.predict(X)
for i in range(len(tests)):
print(tests[i], "\t[",df_rs.loc[result[i]], "]")
Das Ausführungsergebnis ist ...
python
Autobahnnutzungsgebühr[Reisekosten Transport]
Kosten für PC-Teile[liefert Kosten]
Stempelgebühr[Kommunikationskosten]
erledigt!