티스토리 뷰
RDFlib은 RDF 데이터를 처리하기 위한 파이썬 라이브러리다. 간단한 예제를 통해 그래프를 만들고, SPARQL 쿼리를 수행한 후 데이터를 pandas.DataFrame
으로 변환하는 과정을 소개합니다.
1. RDFlib 설치
pip install rdflib
2. 그래프 불러오기 또는 그래프 생성하기
2-1. 그래프 데이터 불러오기
Turtle(.ttl), XML/RDF(.rdf) 형식의 데이터가 있다면, .parse()
메서드를 사용한다.
- 예시 파일: sample.ttl
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 데이터로 변환하여 사용할 수 있다.
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로 저장하는 것을 권장함
반응형
'지식그래프(Knowledge Graph)' 카테고리의 다른 글
[스크랩] 지식그래프 임베딩 (Knowledge Graph Embedding, KGE) (3) | 2024.05.23 |
---|---|
[스크랩] Going Meta - RAG with Knowledge Graphs (with Neo4j) (0) | 2024.05.20 |
[rdflib] 네임스페이스(namespace) 추가하기(feat. schema1) (1) | 2024.01.11 |
[SPARQL] URI를 '/'로 구분하고 마지막 문자열만 추출 (0) | 2023.08.11 |
[SPARQL] GROUP_CONCAT 여러 행을 단일 행으로 출력 (0) | 2023.08.11 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Claude
- difflib
- hadoop
- python'
- writerow
- psycopg
- 지식그래프
- PostgreSQL
- LLM
- MongoDB
- knowlegegraph
- vervel
- p-tuing
- cursorai
- polars
- TextRank
- rdflib
- knowledgegraph
- vscode
- PEFT
- python
- Encoding
- 3d-force-graph
- SPARQL
- Postgis
- Vue3
- 키워드추출
- 지식그래프임베딩
- ChatGPT
- pandas
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함