데이터 소스 Python 라이브러리

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

  • JSON 문자열 -- 데이터를 사용하는 시각화를 호스팅하는 페이지를 호스팅하는 경우 JSON 문자열을 생성하여 DataTable 생성자에 전달하여 채울 수 있습니다.
  • JSON 응답 -- 시각화를 호스팅하는 페이지를 호스팅하지 않고 외부 시각화를 위한 데이터 소스 역할만 하려는 경우 데이터 요청에 대한 응답으로 반환될 수 있는 완전한 JSON 응답 문자열을 만들 수 있습니다.
  • 자바스크립트 문자열 -- Python 테이블의 데이터로 google.visualization.DataTable 객체를 만들고 채우는 여러 줄의 자바스크립트 코드로 구성된 문자열로 데이터 테이블을 출력할 수 있습니다. 그런 다음 엔진에서 이 JavaScript를 실행하여 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')]
  • Dictionary of lists: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
  • Dictionary of dictionaries: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • 어떤 수준의 중첩으로든 이러한 방식으로 적용됩니다.

3. 데이터 채우기

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

  • schema: [("color", "string"), ("shape", "string")]
  • 데이터: [['파란색', '정사각형'], ['빨간색', '원']]

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

  • schema: {("rowname", "string"): [("color", "string"), ("shape", "string")] }
  • 데이터: {"row1": ["blue", "정사각형"], "row2": ["red", "circle"]}

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

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

Table: 
      Color    Shape
      blue     square
      red      circle

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

4. 데이터 출력

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

사용 예

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

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")