Les villes et les quartiers préfèrent les fichiers PDF pour fournir des données. Nous allons essayer de convertir les données dans un format aussi gênant en utilisant une commande pour les convertir au format texte et les tracer en utilisant les données de Gotenba City. (Il correspond aux données au 08 juin 2017 de l'administration.)
La méthode d'installation est la suivante.
# 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]+)Année.*$', r'\1', line)
year = year.replace("\n","")
month = re.sub(r'Heisei[0-9]+Année([0-9]+)Mois.*$', 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
Les données de sortie sont Rplots.pdf en pdf
Les fichiers PDF sont bons pour l'impression et les rendre plus faciles à lire, mais ils peuvent être fastidieux à analyser en texte brut. Selon le PDF, l'image capturée peut être incorporée à la place du texte, il peut donc ne pas être possible de l'ouvrir du tout. Par conséquent, rm supprime les fichiers qui ne peuvent pas être ouverts par process.sh. Il n'existe aucune solution de contournement pour ces fichiers.
Si le gouvernement souhaite visualiser les données, le format de fichier doit être non seulement PDF, mais également au format texte brut tel que csv. Vous ne pouvez pas obtenir de nouvelles informations simplement en regardant les graphiques agrégés. En lisant les données brutes sous forme de valeurs numériques, un large éventail d'analyses est possible.
Recommended Posts