# coding: utf-8
from SPARQLWrapper import SPARQLWrapper, JSON
import pandas as pd
import numpy as np
import matplotlib
import csv as csv
person = input("URI de la personne dont il faut recuperer les dates des manifestations : ")
directory = input("Repertoire ou creer le fichier CSV en sortie : ")
#Correction sur la valeur du directory : ajout d'un antislash à la fin s'il n'y en a pas deja un
if (directory[len(directory)-1] == "\\" or directory[len(directory)-1] == "/"):
directory = directory
else:
if (directory.find("\\") == -1):
directory = directory + "/"
else:
directory = directory + "\\"
personFOAF = "<" + person + "#foaf:Person>"
personID = person.replace("http://data.bnf.fr/ark:/12148/","")
sparql = SPARQLWrapper("http://data.bnf.fr/sparql")
sparql.setQuery("""
PREFIX dcterms:
PREFIX rdarelationships:
PREFIX bnf-onto:
PREFIX owl:
select ?date (count(?date) as ?NbManifParDate) where {
?manif rdarelationships:expressionManifested ?expression.
?manif bnf-onto:firstYear ?date.
?expression owl:sameAs ?expression2.
?expression2 dcterms:contributor """ + personFOAF + """.
}
ORDER BY ASC(?date)
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
dataset = results["results"]["bindings"]
listeDesAnnees = []
listedesNbManif = []
for el in dataset:
listeDesAnnees.append(el.get("date").get("value"))
listedesNbManif.append(el.get("NbManifParDate").get("value"))
columns = ["Date","Nb manif"]
min = listeDesAnnees[0]
max = listeDesAnnees[-1]
#print (min, "-", max, "/", columns)
listeAnnees = [int(min)]
listeNbManif = [int(listedesNbManif[0])]
index=[1]
i = 1
while int(min) < int(max):
nouvMin = int(min) + 1
listeAnnees.append(nouvMin)
if (str(nouvMin) in listeDesAnnees):
pos = listeDesAnnees.index(str(nouvMin))
listeNbManif.append(int(listedesNbManif[pos]))
else:
listeNbManif.append(0)
min = nouvMin
i = i+1
index.append(i)
s1 = pd.Series(listeAnnees, index=index, name='dates')
s2 = pd.Series(listeNbManif, index=index, name='manifs')
s3 = pd.Series(listeNbManif, index=listeAnnees, name='manifs')
tableau = pd.concat([s1, s2], axis=1)
print(tableau)
s3=s3.cumsum()
s3.plot()
#Requête pour récupérer le nom de la personne, afin de nommer le fichier CSV en sortie
sparqlNom = SPARQLWrapper("http://data.bnf.fr/sparql")
sparqlNom.setQuery("""PREFIX foaf:
select ?nom where {""" + personFOAF + """foaf:name ?nom
}""")
sparqlNom.setReturnFormat(JSON)
NomSet = sparqlNom.query().convert()
nom = NomSet["results"]["bindings"]
nomListe = []
for el in nom:
nomListe.append(el.get("nom").get("value"))
nomStr = nomListe[0]
#Ecriture du fichier CSV en sortie
filename = directory + "resultats-" + nomStr + ".csv"
"""with open(filename, 'w', newline='') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(s3)"""
tableau.to_csv()
tableau.to_csv(path_or_buf=filename,sep=";", header="True",mode="w",encoding="utf-8")