Google tiene una biblioteca de código abierto de Python que crea objetos DataTable
para el consumo mediante visualizaciones. Esta biblioteca se puede usar para crear una DataTable
en Python y generarla en cualquiera de los tres formatos siguientes:
- String JSON: Si alojas la página que aloja la visualización que usa tus datos, puedes generar una string JSON para pasarla a un constructor
DataTable
y propagarla. - Respuesta de JSON: Si no alojas la página que aloja la visualización y solo deseas actuar como una fuente de datos para visualizaciones externas, puedes crear una string de respuesta JSON completa que se puede mostrar en respuesta a una solicitud de datos.
- String de JavaScript: Puedes generar la tabla de datos como una string que consta de varias líneas de código JavaScript que crearán y propagarán un objeto
google.visualization.DataTable
con los datos de tu tabla de Python. Luego, puedes ejecutar este código JavaScript en un motor para generar y propagar el objetogoogle.visualization.DataTable
. Por lo general, se usa solo para depuración.
En este documento, se supone que comprendes la programación básica de Python y que leíste la documentación de visualización introductoria para crear una visualización y usar una visualización.
Contenido
Cómo usar la biblioteca
A continuación, se detallan los pasos básicos.
1. Crea un objeto gviz_api.DataTable
Importa la biblioteca gviz_api.py desde el vínculo anterior y crea una instancia de la clase gviz_api.DataTable
. La clase toma dos parámetros: un esquema de tabla, que describirá el formato de los datos en la tabla y los datos opcionales para propagar la tabla. Puedes agregar datos más adelante, si lo deseas, o reemplazarlos por completo, pero no quitar filas individuales o borrar el esquema de la tabla.
2. Describe el esquema de tu tabla
El esquema table_description
especifica el esquema de la tabla que se pasa al constructor. No podrás cambiarlo más adelante. En el esquema, se describen todas las columnas de la tabla: el tipo de datos de cada columna, el ID y una etiqueta opcional.
Cada columna se describe mediante una tupla: (ID [,data_type [,label[,custom_properties]]]).
- ID: un ID de string que se usa para identificar la columna. Puede incluir espacios. El ID de cada columna debe ser único.
- data_type: [opcional] Un descriptor de string del tipo de datos de Python de los datos en esa columna. Puedes encontrar una lista de los tipos de datos admitidos en el método SingleValueToJS(). Los ejemplos incluyen “string” y “boolean”. Si no se especifica, el valor predeterminado es “string”.
- etiqueta: un nombre fácil de usar para la columna, que se puede mostrar como parte de la visualización. Si no se especifica, se usa el valor del ID.
- custom_properties: un diccionario {String:String} de propiedades de columna personalizadas.
El esquema de tabla es una colección de tuplas de descriptor de columna. Cada miembro de la lista, clave de diccionario o valor de diccionario debe ser otra colección o una tupla descriptor. Puedes usar cualquier combinación de diccionarios o listas, pero cada clave, valor o miembro debe evaluarse a la tupla descriptora. Estos son algunos ejemplos.
- Lista de columnas: [('a', 'number'), ('b', 'string')]
- Diccionario de listas: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
- Diccionario de diccionarios: {('a', 'number'): {'b': 'number', 'c': 'string'}}
- Y así con cualquier nivel de anidación.
3. Propaga los datos
Para agregar datos a la tabla, crea una estructura de elementos de datos en la misma estructura que el esquema de la tabla. Por ejemplo, si tu esquema es una lista, los datos deben ser una lista:
- esquema: [("color", "string"), ("shape", "string")]
- datos: [["azul", "cuadrado"], ["rojo", "círculo"]]
Si el esquema es un diccionario, los datos deben ser un diccionario:
- esquema: {("rowname", "string"): [("color", "string"), ("shape", "string")] }
- datos: {"row1": ["blue", "square"], "row2": ["red", "circle"]}
Una fila de la tabla es una sección de los datos y el esquema correspondientes. Por ejemplo, así es como se aplica un esquema de una lista de dos columnas a dos filas de datos.
Schema:[(color),(shape)] / \ Data: [["blue", "square"], ["red", "circle"]] Table: Color Shape blue square red circle
Ten en cuenta que aquí las claves del diccionario se evalúan como datos de columna. Puedes encontrar ejemplos más complejos en la documentación del método AppendData() en el código. El propósito de permitir ese anidamiento complejo es permitirte usar una estructura de datos de Python adecuada para tus necesidades.
4. Genera tus datos
El formato de salida más común es JSON, por lo que probablemente usarás la función ToJsonResponse()
para crear los datos que se mostrarán. Sin embargo, si analizas la solicitud de entrada y admites diferentes formatos de salida, puedes llamar a cualquiera de los otros métodos de salida para mostrar otros formatos, incluidos los valores separados por comas, los valores separados por tabulaciones y JavaScript. Por lo general, JavaScript solo se usa para la depuración. Consulta Cómo implementar una fuente de datos si deseas obtener información sobre cómo procesar una solicitud para obtener el formato de respuesta preferido.
Ejemplo de uso
Estos son algunos ejemplos que muestran cómo usar los distintos formatos de salida.
Ejemplo de ToJSon y 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()
Ejemplo de ToJSonResponse
Un cliente remoto usa JSonResponse en una solicitud de datos.
#!/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")