Exemplos de consultas
Retornando todos os cursos com um dado nome
Com o uso de expressoes regulares (regex), a consulta do Código a seguir irá trazer tanto os cursos que tenham Engenharias ‘De’ quanto os ‘Da’ Computação no nome.
import datadotworld as dw
sparql = '''
prefix ccso: <https://w3id.org/ccso/ccso#>
SELECT ?name ?u
WHERE {
?cursos a ccso:ProgramofStudy.
?cursos ccso:psName ?name.
?cursos ccso:belongsTo ?u.
FILTER regex(?name, "ENGENHARIA D. COMPUTAÇÃO", "i" )
}
'''
results = dw.query('dbacademic/dbacademic', sparql, query_type='sparql')
df = results.dataframe
df
Executando em um Python Notebook, como o Google Colab, teriamos a seguinte saída:
Contando a quantidade de docentes por estado
Direto do Google Colab, poderiamos fazer uma consulta que carregue os docentes de todas as universidade. Porém, como cada universidade tem um link para o repositório DBpedia, podemos pegar outras informações que estao conectadas a universidade. Como o estado que esta localizado aquela universidade, e então a partir disso contar a quantidade de docentes por estado.
import matplotlib.pyplot as plt
import seaborn as sns
sparql = '''
prefix CCSO: <https://w3id.org/ccso/ccso#>
PREFIX dbp: <http://pt.dbpedia.org/property/>
PREFIX dbo: <http://dbpedia.org/ontology/>
prefix foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?Estado (count (DISTINCT ?s) as ?Docentes) where {
service <http://pt.dbpedia.org/sparql> {
?o dbp:nome ?nomeuniv.
?o dbo:state ?state.
?state dbp:nome ?Estado.
}
?s a CCSO:Professor.
?s CCSO:worksFor ?o.
}
GROUP BY ?Estado
ORDER BY DESC (?Docentes)
'''
results = dw.query('dbacademic/dbacademic', sparql, query_type='sparql')
df = results.dataframe
sns.set(style="whitegrid")
# Plotando o gráfico de barras
sns.barplot(x='Estado', y='Docentes', data=df)
# Configurando os rótulos dos eixos
plt.xlabel('Estado')
plt.ylabel('Docentes')
# Configurando o título do gráfico
plt.title('Docentes por Estado')
# Rotacionando os rótulos na vertical
plt.xticks(rotation='vertical')
# Exibindo o gráfico
plt.show()
Contando a quantidade de Universidades por estado
Lembrando que estes resultados estão sendo executados em uma base de dados incompleta e possivelmente desatualizada.
Para contar as instituições por estado, usaremos uma consulta muito parecido. Mudará a variável que será usada para contar:
import matplotlib.pyplot as plt
import seaborn as sns
sparql = '''
prefix CCSO: <https://w3id.org/ccso/ccso#>
PREFIX dbp: <http://pt.dbpedia.org/property/>
PREFIX dbo: <http://dbpedia.org/ontology/>
prefix foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?Estado (count (DISTINCT ?o) as ?Instituicoes) where {
service <http://pt.dbpedia.org/sparql> {
?o dbp:nome ?nomeuniv.
?o dbo:state ?state.
?state dbp:nome ?Estado.
}
?s a CCSO:Professor.
?s CCSO:worksFor ?o.
}
GROUP BY ?Estado
ORDER BY DESC (?Instituicoes)
'''
results = dw.query('dbacademic/dbacademic', sparql, query_type='sparql')
df = results.dataframe
sns.set(style="whitegrid")
# Plotando o gráfico de barras
sns.barplot(x='Estado', y='Instituicoes', data=df)
# Configurando os rótulos dos eixos
plt.xlabel('Estado')
plt.ylabel('Instituições')
# Configurando o título do gráfico
plt.title('Instituições por Estado')
# Rotacionando os rótulos na vertical
plt.xticks(rotation='vertical')
# Exibindo o gráfico
plt.show()