티스토리 뷰

RDFlib은 RDF 데이터를 처리하기 위한 파이썬 라이브러리다. 간단한 예제를 통해 그래프를 만들고, SPARQL 쿼리를 수행한 후 데이터를 pandas.DataFrame으로 변환하는 과정을 소개합니다.

1. RDFlib 설치

pip install rdflib

2. 그래프 불러오기 또는 그래프 생성하기

참고: RDFlib 공식 문서 - 그래프 파싱

2-1. 그래프 데이터 불러오기

Turtle(.ttl), XML/RDF(.rdf) 형식의 데이터가 있다면, .parse() 메서드를 사용한다.

import rdflib
from rdflib import Graph

# 파일 불러오기
g = Graph()
g.parse("sample.ttl", format="ttl")

2-2. 그래프 데이터 생성하기

RDF 데이터가 없다면, RDFlib으로 생성할 수 있다. Graph 객체에 트리플(주어, 서술어, 목적어)을 추가하여 데이터 간 관계를 정의한다.

from rdflib import URIRef, Literal, Namespace

# 네임스페이스 정의
ex = Namespace("http://example.org/")

# 그래프 초기화
g = Graph()

# 트리플 추가 (Alice knows Bob)
g.add((ex.Alice, ex.knows, ex.Bob))

# 트리플 추가 (Alice의 이름은 'Alice')
g.add((ex.Alice, ex.name, Literal("Alice")))

# 그래프 내의 모든 트리플 출력
for subj, pred, obj in g:
    print(subj, pred, obj)

2-3. CSV로 그래프 데이터 생성하기

그래프 데이터로 변환해야하는 경우, CSV를 RDF 데이터로 변환하여 사용할 수 있다.


참고: RDFlib 공식 문서 - 그래프 생성

 

CSV 파일 예시 (person.csv)

name friend
Alice Bob
Bob Carol
Carol Alice

CSV 데이터를 RDF 그래프로 변환

import pandas as pd
from rdflib import URIRef, Literal, Namespace

# CSV 파일 불러오기
df = pd.read_csv("person.csv")

# 네임스페이스 정의
ex = Namespace("http://example.org/")

# 그래프 초기화
g = Graph()

# CSV 데이터에서 트리플 추가
for _, row in df.iterrows():
    person = URIRef(ex[row['name']]) # URI 개체로 타입지정
    friend = URIRef(ex[row['friend']])
    g.add((person, ex.knows, friend)) # 속성으로 knows를 부여함

# 그래프 내의 모든 트리플 출력
for subj, pred, obj in g:
    print(subj, pred, obj)

3. SPARQL 쿼리와 DataFrame 변환

RDFlib을 사용하여 SPARQL 쿼리를 실행할 수 있다. 쿼리 결과는 pandas.DataFrame으로 변환하여 CSV로 저장할 수 있다.

SPARQL 쿼리 예제

아래는 "Alice가 알고 있는 사람"을 쿼리하여 결과를 DataFrame으로 변환하는 예시

from rdflib import Graph
import pandas as pd

# 그래프 데이터 정의 (위에서 만든 g 사용)
query = """
    SELECT ?person ?knows
    WHERE {
        ?person <http://example.org/knows> ?knows .
    }
"""

# SPARQL 쿼리 실행
results = g.query(query)

# DataFrame으로 변환
df = pd.DataFrame(results, columns=[str(var) for var in results.vars])
# 모든 값을 문자열로 변환
df = df.applymap(lambda x: str(x) if isinstance(x, rdflib.term.Literal) else x) 
# 결과 출력
print(df)

데이터 프레임으로 만들 때, 주의할 점은 값의 타입이 rdflib.term.Literal으로 만들어지기 때문에
이후 데이터 전처리를 진행한다면 반드시 타입을 변경해주는 코드를 추가해야한다.

4. DataFrame을 CSV로 저장하기

SPARQL 쿼리 결과를 pandas.DataFrame으로 변환한 후, 필요에 따라 CSV 파일로 저장할 수 있다.

# CSV로 저장
df.to_csv("sparql_results.csv", index=False, encoding='utf-8-sig')

한글과 호환을 위해 UTF-8-SIG로 저장하는 것을 권장함

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함