[PYTHON] Geschichte der Bildanalyse von PDF-Dateien und Datenextraktion

Einführung

Es handelt sich um offene Daten, was derzeit ein heißes Thema ist, aber es handelt sich nicht unbedingt um Rohdaten wie CSV, sodass die Handhabung möglicherweise subtil schwierig ist. Die Tatsache, dass wir neue Daten veröffentlichen, die wir haben, sollte natürlich gelobt werden, und wir erwarten sie mit dem Gefühl, dass "ich wirklich Rohdaten will". Deshalb ist es keine schlechte Sache, weil es in PDF veröffentlicht wurde, aber wenn die Daten verwendet werden, ist es notwendig, sie maschinenlesbarer als PDF zu machen. Diesmal basieren die CSV-Daten auf den PDF-Daten von Informationen zur Stausituation im Auto während der Hauptverkehrszeit am Morgen, die vom Sapporo City Transportation Bureau veröffentlicht wurden. Ich werde das Verfahren für das Training vorstellen.

Politik

Die von der oben genannten Website erhaltene PDF-Datei hat dieses Format スクリーンショット 2020-03-18 21.38.35.png

Derzeit sind die Daten strukturiert und fühlen sich wie eine Excel-Ausgabe als PDF an. "Von der Struktur zur Analyseroute" kommt mir in den Sinn, aber es schien, als würde es Zeit und Mühe kosten, wie die in der Tabelle gespeicherten Japaner, die während der Analyse verstümmelt werden. Deshalb habe ich ein Verfahren wie das folgende Bild entwickelt.

スクリーンショット 2020-03-18 21.38.35.JPG

Die Verwendung von Bildverarbeitungssoftware war mühsam, daher habe ich sie auf meinem iPad handgeschrieben. Kurz gesagt, als ich mir einige PDFs ansah, stellte ich fest, dass sich die obere linke Zelle in der linken und rechten Tabelle immer an derselben Position befindet und die Zellengrößen alle gleich sind. Wenn Sie dann den RGB-Wert (= Farbe) des roten Punkts im Bild extrahieren und in Daten zum Überlastungsgrad konvertieren, erhalten Sie die gewünschten Daten.

Fazit

Ich konnte es so umsetzen https://github.com/Kanahiro/sapporo_subway_analyze/

Geben Sie CSV wie folgt aus スクリーンショット 2020-03-18 22.07.30.png

Sie können sehen, dass der rote Teil 4 ist, der weiße Teil 0 ist und der blaue Teil 2 ist. Befolgen Sie nun die Schritte zum Lesen von PDF → Konvertieren in ein Bild → Abrufen der Farbe des angegebenen Pixels → Generieren der Überlastungsgraddaten der Zelle aus der Farbe → Konvertieren in eine CSV-Datei.

Von PDF in Bild konvertieren

Referenz: Zusammenfassung der PDF-Verarbeitung von Python (Kombination / Aufteilung, Bildkonvertierung, Kennwortfreigabe)

Verwenden Sie pdf2image. Informationen zur Verwendung finden Sie im obigen Artikel. In dem Artikel heißt es pip install poppler, aber derzeit kann es nicht mit pip installiert werden. Für Linux: Die Erklärung anderer Betriebssysteme entfällt.

sudo apt install poppler-utils

Ruft den RGB-Wert des angegebenen Pixels aus dem Bild ab

Die von pdf2image gelesenen Daten können in ein Numpy-Array konvertiert werden. Mit anderen Worten wird das RGB-Array in das zweidimensionale Array eingefügt, das der Pixelstruktur entspricht, um ein dreidimensionales Array zu bilden.

#convert_from_Pfad ist eine Funktion von pdf2image
pdf_images = convert_from_path(pdffile)
img_array = np.asarray(pdf_images[0])
'''
img_Array-Beispiel

[[[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

(Weggelassen)

 ...

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]]

Die Ränder der PDF-Datei sind weiß, daher ist es natürlich, aber [255 255 255], das heißt, es ist alles weiß. Ich konnte es in einem Array in Pixeleinheiten speichern.

Zugriff auf ein bestimmtes Pixel (data_of_pixel)


x = START_CELL[0] + c * CELL_SIZE[0] #x-Koordinate
y = START_CELL[1] + r * CELL_SIZE[1] #y-Koordinate
data_of_pixel = img_array[y][x]

Es wird sein. Jetzt können Sie den RGB-Wert eines bestimmten Teils des PDF-konvertierten Bildes abrufen.

Beurteilung der Überlastung

Auf dem obigen Bild können Sie sehen, dass die Überlastung in der Reihenfolge Weiß, Hellblau, Blau, Gelb und Rot höher ist. Im Legenden- und Datenbereich oben rechts wurde das PDF jedoch mit leicht unterschiedlichen RGB-Werten fertiggestellt. Glücklicherweise gibt es von Stufe zu Stufe einen großen Farbunterschied, daher möchte ich hier anhand der Größe des Unterschieds der RGB-Werte zwischen der Legende und den Zellen im Datenbereich beurteilen.

#RGB-Wert der Überlastungslegende
CROWD_RGBs = [
    [255, 255, 255],
    [112, 200, 241],
    [57, 83, 164],
    [246, 235, 20],
    [237, 32, 36]
]

def rgb_to_type(rgb_list)->int:
    #Farbdifferenzschwelle
    threshold = 50
    color_array = np.asarray(rgb_list)
    for i in range(len(CROWD_RGBs)):
        crowd_rgb_array = np.asarray(CROWD_RGBs[i])
        color_dist = abs(color_array - crowd_rgb_array)
        sum_dist = color_dist.sum()
        if sum_dist < threshold:
            return i #0 -4 Wie voll

Wenn Sie eine Liste mit RGB-Werten an diese Funktion übergeben, wird der Überlastungsgrad als ganzzahliger Wert von 0 bis 4 zurückgegeben. Wir vergleichen den RGB-Wert des Pixels, den wir zuvor erhalten haben, mit dem RGB-Wert der Überlastungslegende. Die Summe der absoluten Werte der Differenzen zwischen den RGB-Werten wird als Farbdifferenz definiert, und wenn die Differenz innerhalb von 50 liegt, wird der Grad der Überlastung bestimmt.

Damit wird der Überlastungsgrad aller Zellen beurteilt, und wenn er in CSV konvertiert wird, werden die CSV-Daten zu Beginn vervollständigt.

Am Ende

Diese Art der Verarbeitung ist eine bestimmte Geschichte im offenen Datenbereich. Einige Leute sagten, sie würden Reis aus Reiskuchen machen, aber ist es okay für mich, mich Alchemist zu nennen? Reis kann jedoch nicht ohne Primärdaten (Mochi) geschmolzen werden, deshalb bin ich nur dafür dankbar, danke immer. Da die Datenmenge zugenommen hat, frage ich mich, ob die nächste Stufe die Qualität dieser Daten sein wird ...

Recommended Posts

Geschichte der Bildanalyse von PDF-Dateien und Datenextraktion
Datenbereinigung 3 Verwendung von OpenCV und Vorverarbeitung von Bilddaten
Analyse von Finanzdaten durch Pandas und deren Visualisierung (2)
Analyse von Finanzdaten durch Pandas und deren Visualisierung (1)
Analyse der Messdaten (2) -Hydrobacter und Anpassung, lmfit Empfehlung-
Anwendung von Python: Datenbereinigung Teil 3: Verwendung von OpenCV und Vorverarbeitung von Bilddaten
Daten-Wrangling-PDF-Datei mit dem Status meiner Kartenausstellung
Beginn der Niko Niko Encyclopedia Analysis ~ JSON und berühren Sie die bereitgestellten Daten ~
Empfohlene Bücher und Quellen für die Datenanalyseprogrammierung (Python oder R)
Die Geschichte von Python und die Geschichte von NaN
Praxis der Datenanalyse durch Python und Pandas (Tokyo COVID-19 Data Edition)
Die Geschichte des "Lochs" in der Akte
10 Auswahlen der Datenextraktion durch pandas.DataFrame.query
Empfehlung zur Datenanalyse mit MessagePack
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Datenverarbeitung 2 Analyse verschiedener Datenformate
Stellen Sie die PDF-Datei ab und stempeln Sie alle Seiten mit vertraulichen Stempeln (Bildern).
Zusammenfassung der Wahrscheinlichkeitsverteilungen, die häufig in Statistiken und Datenanalysen vorkommen
Visualisierung und Analyse von Stava Twitter-Datenstandortinformationen
Datenverarbeitung 1 Datenformatierung und Dateieingabe / -ausgabe
Extraktion von tweet.js (json.loads und eval) (Python)
Trennung von Design und Daten in matplotlib
Die Geschichte, deep3d auszuprobieren und zu verlieren
Analyse des Röntgenmikrotomographiebildes durch Python
[Bildklassifizierung] Hundegesichtsanalyse
[Python] Von der morphologischen Analyse von CSV-Daten bis zur CSV-Ausgabe und Diagrammanzeige [GiNZA]
Die Bildanalyse war mit den von Microsoft COCO bereitgestellten Daten und der API einfach
Praxis der Erstellung einer Datenanalyseplattform mit BigQuery und Cloud DataFlow (Datenverarbeitung)
Generieren und veröffentlichen Sie Dummy-Bilddaten mit Django
Lesen Sie Tabellendaten in einer PDF-Datei mit Python
Bildverarbeitung? Die Geschichte, Python für zu starten
Glättung von Zeitreihen und Wellenformdaten 3 Methoden (Glättung)
Die Geschichte des Lesens von HSPICE-Daten in Python
Verarbeitung und Beurteilung des Datenanalyseplans (Teil 1)
Emotionale Analyse umfangreicher Tweet-Daten durch NLTK
Ich habe versucht, morphologische Analyse und Wortvektorisierung
Aufgezeichnete Umgebung für die Datenanalyse mit Python
[Kleine Geschichte] Laden Sie das Bild von Ghibli sofort herunter
Sortieren Sie Fashion-MNIST-Daten und speichern Sie sie als PNG-Datei
Verarbeitung und Beurteilung des Datenanalyseplans (Teil 2)
Geschichte rund um die Datenanalyse durch maschinelles Lernen
Holen Sie sich mit Python eine große Menge von Starbas Twitter-Daten und probieren Sie die Datenanalyse Teil 1 aus
Data Langling (pdfplumber) PDF über den Ausbruch der Influenza durch das Ministerium für Gesundheit, Arbeit und Soziales
Eine Geschichte über die Verbesserung des Programms zum teilweisen Füllen von binärisierten 3D-Bilddaten
[Neueste Methode] Visualisierung von Zeitreihendaten und Extraktion häufiger Muster mithilfe des Pan-Matrix-Profils
Daten Langling PDF über den Ausbruch der Influenza durch das Ministerium für Gesundheit, Arbeit und Soziales
[In-Database Python Analysis Tutorial mit SQL Server 2017] Schritt 4: Feature-Extraktion von Daten mit T-SQL
Eine Geschichte über den Versuch, mit der kostenlosen Stufe von AWS zur COVID-19-Analyse beizutragen, und das Scheitern
[Python-Anfängermemo] Bedeutung und Methode zur Bestätigung des fehlenden NaN-Werts vor der Datenanalyse