ספריית Python למקור נתונים

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