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