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.
Die von der oben genannten Website erhaltene PDF-Datei hat dieses Format
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.
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.
Ich konnte es so umsetzen https://github.com/Kanahiro/sapporo_subway_analyze/
Geben Sie CSV wie folgt aus
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.
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
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.
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.
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