[PYTHON] Extrahieren und zeichnen Sie die neuesten Bevölkerungsdaten aus den von der Stadt bereitgestellten PDF-Daten

Städte und Gemeinden bevorzugen PDFs, um Daten bereitzustellen. Wir werden versuchen, Daten in ein so umständliches Format zu konvertieren, indem wir einen Befehl verwenden, um sie in ein Textformat zu konvertieren und sie mit Daten aus Gotenba City zu zeichnen. (Es entspricht den Daten vom 08. Juni 2017 der Verwaltung.)

Vorbereitungen

  1. Schöne Python-Suppe
  2. R Zoo
  3. Linux Poppler, parallel, wget

Die Installationsmethode ist wie folgt.

# pip install bs4
$ R
> install.packages("zoo")
# pacman -S poppler parallel wget

Skript erstellt

get_pdf_links.py


import urllib.request
from bs4 import BeautifulSoup
import re

url = "http://www.city.gotemba.shizuoka.jp/gyousei/g-6/g-6-1/2475.html"
req = urllib.request.Request(url, headers={'User-Agent': "Magic Browser"})
con = urllib.request.urlopen(req)
soup = BeautifulSoup(con.read(), 'html.parser')
result = soup.find_all("li")
li = []
for link in result:
    if re.match(r'.*PDF.*', link.get_text()) is not None:
        li.append(link.find("a")['href'])

for link in li:
    print(link)

pdf/print_data.py


import re, os

txt_files = []
for filename in os.listdir('.'):
    if filename.endswith('txt'):
        txt_files.append(filename)

txt_files.remove(".txt")

data = []
for filename in txt_files:
    fp = open(filename)
    year = None
    month = None
    population = None
    for i,line in enumerate(fp):
        if i == 0:
            year = re.sub(r'Heisei([0-9]+)Jahr.*$', r'\1', line)
            year = year.replace("\n","")
            month = re.sub(r'Heisei[0-9]+Jahr([0-9]+)Mond.*$', r'\1', line)
            month = month.replace("\n","")
        elif i == 554:
            population = line.replace(",","")
            population = population.replace("\n","")
    data.append([int(year), int(month), int(population)])
    fp.close()
data_fmt = []
for val in data:
    data_fmt.append([val[0]+1988, val[1], val[2]])

data_fmt.sort()
data_fmt2 = []
for val in data_fmt:
    data_fmt2.append([str(val[0])+"-"+str(val[1]), val[2]])

print("date, population")
for val in data_fmt2:
    print(val[0]+","+str(val[1]))

pdf/plot_data.R


library(zoo)
data <- read.csv("data.csv", header=T)
z <- read.zoo(data, FUN = as.yearmon)
plot(z)

Ausführungsskript

process.sh


#/bin/bash

python get_pdf_links.py | parallel --gnu "wget {}"
mv *.pdf pdf
cd pdf
for file in *.pdf; do pdftotext "$file" "$file.txt"; done
rm dd92f76ed99f94259ade29d559663bc1.pdf.txt
rm 7a76d9a16bcc1ce29875b76a6ef12a2e.pdf.txt 
python print_data.py > data.csv
Rscript plot_data.R

Die Ausgabedaten sind Rplots.pdf im PDF

Ausgabedaten

Screenshot from 2017-06-08 15-36-54.png

Hinweis

PDF-Dateien eignen sich gut zum Drucken und erleichtern das Lesen. Das Parsen als einfacher Text kann jedoch mühsam sein. In einigen PDF-Dateien werden erfasste Bilder anstelle von Text eingebettet, sodass Sie sie möglicherweise überhaupt nicht öffnen können. Daher löscht rm Dateien, die von process.sh nicht geöffnet werden können. Für diese Dateien gibt es keine Problemumgehung.

Persönliche Anfrage

Wenn die Regierung die Daten visualisieren möchte, sollte das Dateiformat nicht nur PDF, sondern auch Nur-Text-Format wie CSV sein. Sie können keine neuen Erkenntnisse gewinnen, wenn Sie sich nur die aggregierten Diagramme ansehen. Durch das Lesen der Rohdaten als numerische Werte ist ein breites Spektrum an Analysen möglich.

Recommended Posts

Extrahieren und zeichnen Sie die neuesten Bevölkerungsdaten aus den von der Stadt bereitgestellten PDF-Daten
Die Bildanalyse war mit den von Microsoft COCO bereitgestellten Daten und der API einfach
Extrahieren Sie Bilder und Tabellen mit Python aus PDF, um die Berichtslast zu verringern
Daten Langling PDF über den Ausbruch der Influenza durch das Ministerium für Gesundheit, Arbeit und Soziales
Daten aus S3 extrahieren
Folgen Sie der Datenstruktur von Blender und extrahieren Sie die Scheitelpunktkoordinaten aus fbx
Scrapen der gewünschten Daten von der Website durch Verknüpfen von Python und Excel
Verarbeiten Sie die aus einem bestimmten Kassensystem entnommenen Daten, um eine Übersichtstabelle nach Produkt und Zeit zu erstellen
Gzip komprimiert Daten durch Streaming
CSV-Daten extrahieren und berechnen
Beginn der Niko Niko Encyclopedia Analysis ~ JSON und berühren Sie die bereitgestellten Daten ~
Extrahieren Sie Text aus [python] pdf und lesen Sie Zeichen mit Open-Jtalk vor
Bereiten Sie eine Hochgeschwindigkeitsanalyseumgebung vor, indem Sie in der Datenanalyseumgebung auf MySQL klicken