Lab Solutions

From info216
Revision as of 12:15, 17 February 2025 by Sogar7469 (talk | contribs) (→‎Lab 2)

Here we will present suggested solutions after each lab. The page will be updated as the course progresses

Getting started (Lab 1)

from rdflib import Graph, Namespace

ex = Namespace('http://example.org/')

g = Graph()

g.bind("ex", ex)

# The Mueller Investigation was lead by Robert Mueller
g.add((ex.MuellerInvestigation, ex.leadBy, ex.RobertMueller))

# It involved Paul Manafort, Rick Gates, George Papadopoulos, Michael Flynn, Michael Cohen, and Roger Stone.
g.add((ex.MuellerInvestigation, ex.involved, ex.PaulManafort))
g.add((ex.MuellerInvestigation, ex.involved, ex.RickGates))
g.add((ex.MuellerInvestigation, ex.involved, ex.GeorgePapadopoulos))
g.add((ex.MuellerInvestigation, ex.involved, ex.MichaelFlynn))
g.add((ex.MuellerInvestigation, ex.involved, ex.MichaelCohen))
g.add((ex.MuellerInvestigation, ex.involved, ex.RogerStone))

# Paul Manafort was business partner of Rick Gates
g.add((ex.PaulManafort, ex.businessPartner, ex.RickGates))

# He was campaign chairman for Donald Trump
g.add((ex.PaulManafort, ex.campaignChairman, ex.DonaldTrump))

# He was charged with money laundering, tax evasion, and foreign lobbying.
g.add((ex.PaulManafort, ex.chargedWith, ex.MoneyLaundering))
g.add((ex.PaulManafort, ex.chargedWith, ex.TaxEvasion))
g.add((ex.PaulManafort, ex.chargedWith, ex.ForeignLobbying))

# He was convicted for bank and tax fraud.
g.add((ex.PaulManafort, ex.convictedOf, ex.BankFraud))
g.add((ex.PaulManafort, ex.convictedOf, ex.TaxFraud))

# He pleaded guilty to conspiracy.
g.add((ex.PaulManafort, ex.pleadGuiltyTo, ex.Conspiracy))

# He was sentenced to prison.
g.add((ex.PaulManafort, ex.sentencedTo, ex.Prison))

# He negotiated a plea agreement.
g.add((ex.PaulManafort, ex.negotiated, ex.PleaAgreement))

# Rick Gates was charged with money laundering, tax evasion and foreign lobbying.
g.add((ex.RickGates, ex.chargedWith, ex.MoneyLaundering))
g.add((ex.RickGates, ex.chargedWith, ex.TaxEvasion))
g.add((ex.RickGates, ex.chargedWith, ex.ForeignLobbying))

# He pleaded guilty to conspiracy and lying to FBI.
g.add((ex.RickGates, ex.pleadGuiltyTo, ex.Conspiracy))
g.add((ex.RickGates, ex.pleadGuiltyTo, ex.LyingToFBI))

# Use the serialize method of rdflib.Graph to write out the model in different formats (on screen or to file)
print(g.serialize(format="ttl")) # To screen
#g.serialize("lab1.ttl", format="ttl") # To file

# Loop through the triples in the model to print out all triples that have pleading guilty as predicate
for subject, object in g[ : ex.pleadGuiltyTo :]:
    print(subject, ex.pleadGuiltyTo, object)

# --- IF you have more time tasks ---

# Michael Cohen, Michael Flynn and the lying is part of lab 2 and therefore the answer is not provided this week 

#Write a method (function) that submits your model for rendering and saves the returned image to file.
import requests
import shutil

def graphToImage(graphInput):
    data = {"rdf":graphInput, "from":"ttl", "to":"png"}
    link = "http://www.ldf.fi/service/rdf-grapher"
    response = requests.get(link, params = data, stream=True)
    # print(response.content)
    print(response.raw)
    with open("lab1.png", "wb") as file:
        shutil.copyfileobj(response.raw, file)

graph = g.serialize(format="ttl")
graphToImage(graph)

Lab 2

List all triples in your graph.

select * where { 
	?s ?p ?o .
} 

List the first 100 triples in your graph.

select * where { 
	?s ?p ?o .
} limit 100 

Count the number of triples in your graph.

select (count(?s)as ?tripleCount) where { 
	?s ?p ?o .
} 

Count the number of indictments in your graph.

PREFIX muellerkg: <http://example.org#>
select (Count(?s)as ?numIndictment) where { 
	?s ?p muellerkg:Indictment .
} 

List everyone who pleaded guilty, along with the name of the investigation.

PREFIX m: <http://example.org#>
select ?name ?s where { 
	?s ?p m:guilty-plea;
    	m:name ?name.
}  

List everyone who were convicted, but who had their conviction overturned by which president.

PREFIX muellerkg: <http://example.org#>
#List everyone who were convicted, but who had their conviction overturned by which president.

select ?name ?president   where { 
	?s ?p muellerkg:conviction;
		muellerkg:name ?name;
    	muellerkg:overturned true;
     	muellerkg:president ?president.  	
} limit 100 

For each investigation, list the number of indictments made.

PREFIX muellerkg: <http://example.org#>
select ?investigation (count(?investigation) as ?numIndictments) where { 
	?s muellerkg:investigation ?investigation .
} group by (?investigation)

For each investigation with multiple indictments, list the number of indictments made.

PREFIX muellerkg: <http://example.org#>
select ?investigation (count(?investigation) as ?numIndictments) where { 
	?s muellerkg:investigation ?investigation.
} group by (?investigation)
having (?numIndictments > 1)

For each investigation with multiple indictments, list the number of indictments made, sorted with the most indictments first.

PREFIX muellerkg: <http://example.org#>
select ?investigation (count(?investigation) as ?numIndictments) where { 
	?s muellerkg:investigation ?investigation.
} group by (?investigation)
having (?numIndictments > 1)
order by desc(?numIndictments)

For each president, list the numbers of convictions and of pardons made after conviction.

PREFIX muellerkg: <http://example.org#>
SELECT ?president (COUNT(?conviction) AS ?numConvictions) (COUNT(?pardon) AS ?numPardoned) 
WHERE { 
    ?indictment muellerkg:president ?president ;
                muellerkg:outcome muellerkg:conviction .
    BIND(?indictment AS ?conviction)
    OPTIONAL {
        ?indictment muellerkg:pardoned true .
        BIND(?indictment AS ?pardon)
    }
} 
GROUP BY ?president