데이터 소스 Python 라이브러리

Google은 시각화에 사용할 DataTable 객체를 만드는 Python 라이브러리를 오픈소스로 제공합니다. 이 라이브러리를 사용하면 Python에서 DataTable를 만들고 다음 세 가지 형식 중 하나로 출력할 수 있습니다.

  • JSON 문자열 -- 데이터를 사용하는 시각화를 호스팅하는 페이지를 호스팅하는 경우 JSON 생성자를 전달하여 DataTable 생성자에 채우면 됩니다.
  • JSON 응답 -- 시각화를 호스팅하는 페이지를 호스팅하지 않고 외부 시각화의 데이터 소스로 사용하려는 경우 데이터 요청에 대한 응답으로 반환될 수 있는 완전한 JSON 응답 문자열을 만들 수 있습니다.
  • 자바스크립트 문자열 -- google.visualization.DataTable 객체를 만들고 Python 테이블의 데이터로 채우는 자바스크립트 코드의 여러 줄로 구성된 문자열로 데이터 테이블을 출력할 수 있습니다. 그런 다음 엔진에서 이 자바스크립트를 실행하여 google.visualization.DataTable 객체를 생성하고 채울 수 있습니다. 이는 일반적으로 디버깅에만 사용됩니다.

이 문서에서는 개발자가 기본 Python 프로그래밍을 이해하고 시각화 만들기시각화 사용에 관한 소개 시각화 문서를 읽었다고 가정합니다.

목차

라이브러리 사용 방법

다음은 기본 단계에 관한 자세한 내용입니다.

1. gviz_api.DataTable 객체 만들기

위 링크에서 gviz_api.py 라이브러리를 가져와 gviz_api.DataTable 클래스를 인스턴스화합니다. 이 클래스는 두 가지 매개변수를 사용합니다. 하나는 테이블의 데이터 형식을 설명하는 테이블 스키마이고 다른 하나는 테이블을 채울 데이터(선택사항)입니다. 원하는 경우 나중에 데이터를 추가하거나 데이터를 완전히 덮어쓸 수 있지만 개별 행을 삭제하거나 테이블 스키마를 지울 수는 없습니다.

2. 테이블 스키마 설명

테이블 스키마는 생성자에 전달된 table_description 매개변수로 지정됩니다. 나중에 변경할 수 없습니다. 스키마는 각 열의 데이터 유형, ID, 선택적 라벨 등 테이블의 모든 열을 설명합니다.

각 열은 튜플(ID [,data_type [,label [,custom_properties]]])로 설명됩니다.

  • ID - 열을 식별하는 데 사용되는 문자열 ID입니다. 공백을 포함할 수 있습니다. 각 열의 ID는 고유해야 합니다.
  • data_type - [선택사항] 해당 열에 있는 데이터의 Python 데이터 유형에 대한 문자열 설명입니다. 지원되는 데이터 유형 목록은 SingleValueToJS() 메서드에서 찾을 수 있습니다. '문자열'과 '부울'을 예로 들 수 있습니다. 지정하지 않으면 기본값은 'string'입니다.
  • label - 시각화의 일부로 표시될 수 있는 사용자 친화적인 열 이름입니다. 지정하지 않으면 ID 값이 사용됩니다.
  • custom_properties - 커스텀 열 속성의 {String:String} 사전입니다.

테이블 스키마는 열 설명자 튜플의 컬렉션입니다. 모든 목록 멤버, 사전 키 또는 사전 값은 다른 컬렉션 또는 설명자 튜플이어야 합니다. 사전이나 목록을 어떤 조합으로든 사용할 수 있지만 모든 키, 값 또는 구성원은 설명어 튜플로 평가되어야 합니다. 다음은 몇 가지 예입니다.

  • 열 목록: [('a', 'number'), ('b', 'string')]
  • 목록 사전: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
  • 사전 사전: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • 어느 정도의 중첩이든 마찬가지입니다.

3. 데이터 채우기

테이블에 데이터를 추가하려면 테이블 스키마와 동일한 구조로 데이터 요소 구조를 빌드합니다. 예를 들어 스키마가 목록인 경우 데이터는 목록이어야 합니다.

  • schema: [("색상", "문자열"), ("도형", "문자열")]
  • 데이터: [["파란색", "정사각형"], ["빨간색", "원"]]

스키마가 사전인 경우 데이터는 사전이어야 합니다.

  • schema: {("행 이름", "문자열"): [("색상", "문자열"), ("도형", "문자열")] }
  • 데이터: {"행1": ["파란색", "정사각형"], "행2": ["빨간색", "원"]}

한 개의 테이블 행은 해당 데이터 및 스키마의 섹션입니다. 예를 들어 2개 열 목록의 스키마를 데이터 2개 행에 적용하는 방법은 다음과 같습니다.

Schema:[(color),(shape)]
            /     \       
Data: [["blue", "square"], ["red", "circle"]]

Table: 
      Color    Shape
      blue     square
      red      circle

참고: 사전 키는 열 데이터로 평가됩니다. 코드의 AppendData() 메서드 문서에서 더 복잡한 예를 확인할 수 있습니다. 이러한 복잡한 중첩을 허용하는 목적은 요구사항에 적합한 Python 데이터 구조를 사용하도록 하는 것입니다.

4. 데이터 출력

가장 일반적인 출력 형식은 JSON이므로 반환할 데이터를 만드는 데 ToJsonResponse() 함수를 사용할 수 있습니다. 그러나 입력 요청을 파싱하고 다양한 출력 형식을 지원하는 경우 다른 출력 메서드를 호출하여 쉼표로 구분된 값, 탭으로 구분된 값, 자바스크립트를 비롯한 다른 형식을 반환할 수 있습니다. 자바스크립트는 일반적으로 디버깅에만 사용됩니다. 원하는 응답 형식을 얻기 위한 요청을 처리하는 방법은 데이터 소스 구현을 참고하세요.

사용 예시

다음은 다양한 출력 형식을 사용하는 방법을 보여주는 몇 가지 예입니다.

ToJSon 및 ToJS 예

#!/usr/bin/python

import gviz_api

page_template = """
<html>
  <script src="https://www.gstatic.com/charts/loader.js"></script>
  <script>
    google.charts.load('current', {packages:['table']});

    google.charts.setOnLoadCallback(drawTable);
    function drawTable() {
      %(jscode)s
      var jscode_table = new google.visualization.Table(document.getElementById('table_div_jscode'));
      jscode_table.draw(jscode_data, {showRowNumber: true});

      var json_table = new google.visualization.Table(document.getElementById('table_div_json'));
      var json_data = new google.visualization.DataTable(%(json)s, 0.6);
      json_table.draw(json_data, {showRowNumber: true});
    }
  </script>
  <body>
    <H1>Table created using ToJSCode</H1>
    <div id="table_div_jscode"></div>
    <H1>Table created using ToJSon</H1>
    <div id="table_div_json"></div>
  </body>
</html>
"""

def main():
  # Creating the data
  description = {"name": ("string", "Name"),
                 "salary": ("number", "Salary"),
                 "full_time": ("boolean", "Full Time Employee")}
  data = [{"name": "Mike", "salary": (10000, "$10,000"), "full_time": True},
          {"name": "Jim", "salary": (800, "$800"), "full_time": False},
          {"name": "Alice", "salary": (12500, "$12,500"), "full_time": True},
          {"name": "Bob", "salary": (7000, "$7,000"), "full_time": True}]

  # Loading it into gviz_api.DataTable
  data_table = gviz_api.DataTable(description)
  data_table.LoadData(data)

  # Create a JavaScript code string.
  jscode = data_table.ToJSCode("jscode_data",
                               columns_order=("name", "salary", "full_time"),
                               order_by="salary")
  # Create a JSON string.
  json = data_table.ToJSon(columns_order=("name", "salary", "full_time"),
                           order_by="salary")

  # Put the JS code and JSON string into the template.
  print "Content-type: text/html"
  print
  print page_template % vars()


if __name__ == '__main__':
  main()

ToJSonResponse 예

JSonResponse는 원격 요청에서 데이터 요청에 사용됩니다.

#!/usr/bin/python

import gviz_api

description = {"name": ("string", "Name"),
               "salary": ("number", "Salary"),
               "full_time": ("boolean", "Full Time Employee")}
data = [{"name": "Mike", "salary": (10000, "$10,000"), "full_time": True},
        {"name": "Jim", "salary": (800, "$800"), "full_time": False},
        {"name": "Alice", "salary": (12500, "$12,500"), "full_time": True},
        {"name": "Bob", "salary": (7000, "$7,000"), "full_time": True}]

data_table = gviz_api.DataTable(description)
data_table.LoadData(data)
print "Content-type: text/plain"
print
print data_table.ToJSonResponse(columns_order=("name", "salary", "full_time"),
                                order_by="salary")