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.)
Die Installationsmethode ist wie folgt.
# pip install bs4
$ R
> install.packages("zoo")
# pacman -S poppler parallel wget
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)
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
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.
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