Google יצרה קוד פתוח לספריית Python שיוצרת אובייקטים של DataTable
לצורך צריכה על ידי הצגה חזותית. ניתן להשתמש בספרייה הזו כדי ליצור DataTable
ב-Python וליצור פלט בכל אחד משלושת הפורמטים הבאים:
- מחרוזת JSON -- אם אתם מארחים את הדף שמארח את
התצוגה החזותית שמשתמשת בנתונים שלכם, תוכלו ליצור מחרוזת JSON
כדי להעביר אותה לבנאי
DataTable
כדי לאכלס אותה. - תגובת JSON -- אם לא מתארח הדף שמארח את התצוגה החזותית, ורוצה לשמש רק כמקור נתונים להמחשות חיצוניות, ניתן ליצור מחרוזת תגובת JSON מלאה שניתן להחזיר בתגובה לבקשת נתונים.
- מחרוזת JavaScript – אפשר ליצור פלט של טבלת הנתונים כמחרוזת המורכבת מכמה שורות של קוד JavaScript שייצרו ויאכלסו אובייקט
google.visualization.DataTable
בנתונים מטבלת Python. לאחר מכן אפשר להריץ את JavaScript הזה במנוע כדי ליצור ולאכלס את האובייקטgoogle.visualization.DataTable
. הפעולה הזו משמשת בדרך כלל לניפוי באגים בלבד.
המסמך הזה מניח שאתה מבין תכנות Python בסיסי, וקראת את מסמכי התיעוד החזותי ל יצירת תצוגה חזותית ובאמצעות הצגה חזותית.
תוכן עניינים
איך להשתמש בספרייה
לפניכם השלבים הבסיסיים, בפירוט:
1. יצירת
אובייקט gviz_api.DataTable
ייבוא ספריית gviz_api.py מהקישור שלמעלה ויצירת כיתה של gviz_api.DataTable
. בכיתה יש שני פרמטרים:
סכימת טבלה, שמתארת את פורמט הנתונים בטבלה, ונתונים אופציונליים שאפשר לאכלס בהם את הטבלה. אפשר להוסיף נתונים מאוחר יותר, אם רוצים,
או להחליף את הנתונים לחלוטין, אבל לא להסיר שורות ספציפיות
או לנקות את סכימת הטבלה.
2. תיאור של סכימת הטבלה
סכימת הטבלה מצוינת על ידי הפרמטר table_description
שמעבירים לבנאי. לא ניתן לשנות אותו מאוחר יותר. הסכימה מתארת את כל העמודות בטבלה: סוג הנתונים של כל עמודה, המזהה ותווית אופציונלית.
כל עמודה מתוארת באמצעות נקודה צבעונית: (מזהה [,data_type [,label [,custom_properties]]]).
- ID – מזהה מחרוזת המשמש לזיהוי העמודה. אפשר לכלול רווחים. המזהה של כל עמודה צריך להיות ייחודי.
- data_type – [אופציונלי] מתאר מחרוזת של סוג הנתונים בעמודה הזו ב-Python. אפשר למצוא רשימה של סוגי הנתונים הנתמכים בשיטה SingleValueToJS() . לדוגמה: "string" ו-"boolean". אם לא צוין, ברירת המחדל היא "string" (מחרוזת).
- label – שם עמודה ידידותי למשתמש, שיכול להופיע כחלק מהתצוגה החזותית. אם לא צוין ערך, המערכת תשתמש בערך המזהה.
- custom_properties - מילון {String:String} של מאפייני העמודות בהתאמה אישית.
סכימת הטבלה היא אוסף של מילות תיאור של עמודות. כל חבר ברשימה, מפתח מילון או ערך מילון חייבים להיות אוסף אחר או תווי תיאור. אפשר להשתמש בכל שילוב של מילונים או רשימות, אבל כל מפתח, ערך או כל חבר בקהילה צריך להעריך בסופו של דבר את שמתאים למחרוזת התיאור. ריכזנו כאן כמה דוגמאות.
- רשימת העמודות: [('a', 'number'), ('b', 'string')]
- מילון של רשימות: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
- מילון מילונים: {('a', 'number'): {'b': 'number', 'c': 'string'}}
- וכן הלאה, בכל רמה של קינון.
3. אכלוס הנתונים
כדי להוסיף נתונים לטבלה, צריך ליצור מבנה של אלמנטים מהנתונים בדיוק באותו מבנה כמו בסכימת הטבלה. לדוגמה, אם הסכימה היא רשימה, הנתונים צריכים להיות רשימה:
- סכימה: [("color", "string"), ("shape", "string")]
- נתונים: [["blue", "ריבוע"], ["אדום", "עיגול"]]
אם הסכימה היא מילון, הנתונים חייבים להיות מילון:
- סכימה: {("rowname", "string"): [("color", "string"), ("shape", "string")] }
- נתונים: {"row1": ["כחול", "ריבוע"], "שורה2": ["אדום", "עיגול"]}
שורה אחת בטבלה היא קטע של הנתונים והסכימה התואמים. לדוגמה, כך מחילים סכימה של רשימה של שתי עמודות על שתי שורות נתונים.
Schema:[(color),(shape)] / \ Data: [["blue", "square"], ["red", "circle"]] Table: Color Shape blue square red circle
חשוב לשים לב שמקשי המילון מבצעים הערכה של נתוני העמודות. ניתן למצוא דוגמאות מורכבות יותר במסמכי התיעוד של שיטת AppendData() בקוד. המטרה של סידור פנימי מורכב היא לאפשר לך להשתמש במבנה נתונים של Python שמתאים לצרכים שלך.
4. פלט הנתונים
פורמט הפלט הנפוץ ביותר הוא JSON, ולכן ככל הנראה תשתמש בפונקציה ToJsonResponse()
כדי ליצור את הנתונים שיחזרו. עם זאת, אם מנתחים את בקשת הקלט ותומכים בפורמטים שונים של פלט, אפשר להפעיל קריאה לכל אחת משיטות הפלט האחרות כדי להחזיר פורמטים אחרים, כולל ערכים מופרדים בפסיקים, ערכים מופרדים בטאבים ו-JavaScript. 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
לקוח מרוחק משתמש בבקשת JSon בבקשת נתונים.
#!/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")