데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      SPARQL with Python

      joyhong 22.06.29
      2,364 8 0

      SPARQL - Graph Notebook 활용편

      RDF 형태의 데이터는 주어-술어-목적어 이렇게 트리플 구조를 가지고 있기 때문에 이들을 연결하면 그래프 형태로 표현이 됩니다.

      이러한 특징으로 인해 그래프 형태로 visualization이 가능한데, 그래프로 그리기 위한 여러가지 라이브러리들이 존재합니다.

      그 중에서 간단하게 사용할 수 있는 graph-notebook 이라는 라이브러리가 있습니다.

      graph-notebook은 그래프 데이터베이스에 질의하여 결과를 가져올 수 있는데

      SPARQL,Gremlin, Cypher 언어를 지원합니다.

      이 중에서 우리는 RDF를 사용하기 때문에 SPARQL언어를 사용하여 SPARQL Endpoint에 질의하여 결과를 그래프로 표현해보도록 하겠습니다.

      SPARQL은 로컬에 구성한 Endpoint로 질의를 하거나 다른 공개된 endpoint를 활용할 수 있습니다.

      • 사용하는 라이브러리graph-notebook(https://pypi.org/project/graph-notebook)

      • 필수적으로 설치가 되어 있어야 하는 라이브러리

        Tornado, RDFLib (보다 자세한 내용은 위 링크에서 확인하세요)

      설정

      제일 먼저 대상이 되는 endpoint 주소와 포트, 그리고 여러 정보를 설정합니다.대상 endpoint 주소는 (제 기준)http://localhost:3030/publicdata/query 입니다.수정이 필요한 곳 (host, port, sparql:path)

      %%graph_notebook_config
      {
          "host":"localhost",   
          "port":3030,          
          "auth_mode":"DEFAULT",
          "iam_credentials_provider_type":"ROLE",
          "load_from_s3_arn":"",
          "ssl": false,
          "aws_region":"us-east-1",
          "sparql": {
              "path": "publicdata/query"   
          }
      }
      set notebook config to:
      {
        "host": "localhost",
        "port": 3030,
        "auth_mode": "DEFAULT",
        "load_from_s3_arn": "",
        "ssl": false,
        "aws_region": "us-east-1",
        "sparql": {
          "path": "publicdata/query"
        }
      }
      
      
      
      
      
      <graph_notebook.configuration.generate_config.Configuration at 0x7ff68656adf0>

      쥬피터 화면을 넒게 쓰기 원하면 아래를 실행

      from IPython.core.display import display, HTML
      display(HTML("<style>.container { width:100% !important; }</style>"))

      질의

      %%sparql --expand-all 
      select *
      where{
          ?s ?p ?o.
      } LIMIT 30

      보통 실행 결과는 Table, Graph, JSON, Query Metadata 이렇게 4개의 탭이 나타납니다.

      위의 코드에 대한 결과는 아래와 같습니다.

      sparq;_1.png

      sparq_2.png

      sparq_3.png

      sparq_4.png


      DBpedia 활용

      만약 로컬컴퓨터에 SPARQL 엔드포인트가 없거나 외부의 엔드포인트를 사용하는 경우에도 호스트 지정만 변경해주면 사용이 가능합니다.

      아래의 예시에서는 dbpedia에서 제공하는 엔드포인트에 질의를 하여 결과를 가져오는 예시입니다.

      endpoint 설정

      %%graph_notebook_config
      {
          "host":"dbpedia.org",
          "port":443,
          "auth_mode":"DEFAULT",
          "iam_credentials_provider_type":"ROLE",
          "load_from_s3_arn":"",
          "ssl": true,
          "aws_region":"us-east-1"
      }
      set notebook config to:
      {
        "host": "dbpedia.org",
        "port": 443,
        "auth_mode": "DEFAULT",
        "load_from_s3_arn": "",
        "ssl": true,
        "aws_region": "us-east-1",
        "sparql": {
          "path": "sparql"
        }
      }
      
      
      
      
      
      <graph_notebook.configuration.generate_config.Configuration at 0x7ff689946160>

      서울 출신 가수

      %%sparql --expand-all
      prefix dbo:    <http://dbpedia.org/ontology/> 
      select ?s ?p ?o
      where{
          ?s dct:subject <http://dbpedia.org/resource/Category:Singers_from_Seoul>.
          ?s ?p ?o .
          filter(?p!=rdf:type)
      } LIMIT 500

      sparq_5.png

      아이유에 대한 정보

      이번에는 아이유에 대한 URI를 통해 해당 정보를 찾아보겠습니다.

      %%sparql --expand-all
      
      SELECT * 
      WHERE {
          ?s ?p ?o.
          FILTER(?s=<http://dbpedia.org/resource/IU_(singer)>)
      }

      sparq_7.png

      정보가 많아서 그래프 형식으로 보기에는 좀 불편하겠네요..

      이럴 때 다른 형식의 결과를 보는게 나을 것 같습니다.

      정리

      이상으로 쥬피터 환경에서 SPARQL을 활용하는 방법에 대해 짧게 소개하였습니다.

      참고로 원하는 SPARQL을 작성하고 결과를 받아올 수는 있지만 그래프로 표현되지 않는 형식일 때는 그래프 탭이 나타나지 않습니다.

      %%sparql --expand-all
      
      SELECT ?s ?label ?bdate (group_concat(?comt) as ?cmt) 
      WHERE {
          ?s dct:subject dbc:Singers_from_Seoul.
          ?s rdfs:label ?label.
          FILTER(lang(?label)='ko')
          ?s dbo:birthDate ?bdate.
          ?s rdfs:comment ?comt.
      } GROUP BY ?s ?label ?bdate
      LIMIT 100

      sparq_8.png

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      joyhong 님의 최신 블로그

      더보기
      동영상 기고하기