मुख्य सामग्री पर जाएँ

Python और Tableau के साथ डेटा का दृश्यांकन ट्यूटोरियल

जानें कि आप Python का उपयोग करके Tableau की डेटा विज़ुअलाइज़ेशन क्षमताओं का विस्तार कैसे कर सकते हैं।
· 15 मि॰ पढ़ें

AI के साथ खोजें

Python Tableau Tutorial

Tableau के साथ Python का उपयोग क्यों करें

Tableau नए डेटा फ़ील्ड बढ़ाने और बनाने के कई विकल्प देता है। आप calculated fields का उपयोग करके अंकगणितीय, तार्किक, स्थानिक और प्रेडिक्टिव मॉडलिंग फ़ंक्शंस चला सकते हैं। Tableau एक शक्तिशाली बिज़नेस इंटेलिजेंस (BI) टूल है, लेकिन इसकी कुछ सीमाएँ हैं; यहीं Python भाषा काम आती है।  

डेटा समुदाय में Python एक लोकप्रिय प्रोग्रामिंग भाषा है। आप इससे डेटा एक्सट्रैक्ट, क्लीन, प्रोसेस कर सकते हैं और जटिल सांख्यिकीय फ़ंक्शंस लागू कर सकते हैं। यह मशीन लर्निंग फ्रेमवर्क्स, डेटा ऑर्केस्ट्रेशन, मल्टीप्रोसेसिंग और समृद्ध लाइब्रेरियों देता है, जिनसे लगभग कोई भी काम संभव हो पाता है। 

Python बहुउद्देशीय भाषा है, और Tableau के साथ इसका उपयोग हमें बेहद जटिल कार्य करने की आज़ादी देता है। इस ट्यूटोरियल में, हम Python से डेटा निकालने और साफ़ करने वाले हैं। उसके बाद, हम साफ़ डेटा का उपयोग Tableau पर डेटा विज़ुअलाइज़ेशन बनाने के लिए करेंगे।

हम Tabpy का उपयोग करके Tableau Python सर्वर नहीं बनाएंगे और न ही Tableau के भीतर Python स्क्रिप्ट चलाएँगे। इसके बजाय, हम पहले Python (Jupyter Notebook) में डेटा निकालकर साफ़ करेंगे और फिर Tableau से इंटरैक्टिव विज़ुअलाइज़ेशन बनाएँगे। 

Data Visualization with Tableau
Goodreads Data Viz | Tableau Public

यह Goodreads API और Tableau पर जटिल विज़ुअलाइज़ेशन बनाने पर आधारित स्टेप-बाय-स्टेप कोड ट्यूटोरियल है। नीचे दिए गए लिंक से कोड और Tableau डैशबोर्ड तक पहुँचें। 

Python के साथ डेटा इन्जेशन और प्रोसेसिंग

ट्यूटोरियल के पहले भाग में, हम Goodreads API का उपयोग कर सार्वजनिक डेटा एक्सेस करना सीखेंगे। हमारे मामले में, हम उपयोगकर्ता प्रोफ़ाइल पर ध्यान देंगे और उसे पढ़ने योग्य Pandas dataframe में बदलेंगे। आगे हम डेटा को साफ़ करके CSV फ़ाइल फ़ॉर्मैट में एक्सपोर्ट करेंगे। 

शुरुआत करना

हम Python कोड चलाने के लिए DataLab का उपयोग करेंगे। यह डेटा साइंस कार्यों के लिए आवश्यक Python पैकेजों के साथ आता है। 

यदि आप Python में नए हैं और लोकल मशीन पर वातावरण सेट करना चाहते हैं, तो Anaconda इंस्टॉल करें। यह Python, Jupyter Notebook, और ज़रूरी Python पैकेज इंस्टॉल करेगा। 

कोड लिखने से पहले, हमें xmltodict पैकेज इंस्टॉल करना है, क्योंकि यह DataLab या Anaconda डेटा स्टैक का हिस्सा नहीं है। हम गायब Python पैकेज को इंस्टॉल करने के लिए `pip` का उपयोग करेंगे।

नोट: `!` सिंबल केवल Jupyter Notebooks में काम करता है। यह हमें Jupyter कोड सेल के भीतर टर्मिनल तक पहुँचने देता है। 

!pip install xmltodict

>>> Collecting xmltodict
>>>   Using cached xmltodict-0.13.0-py2.py3-none-any.whl (10.0 kB)
>>> Installing collected packages: xmltodict
>>> Successfully installed xmltodict-0.13.0

अगले चरण में, हम आवश्यक पैकेज इम्पोर्ट करेंगे। 

import pandas as pd
import xmltodict
import urllib.request

प्रोफ़ाइल लिंक को पार्स करना

उपयोगकर्ता डेटा निकालने के लिए हमें user id और user name दोनों चाहिए। इस सेक्शन में, हम उपयोगकर्ता (Abid) की प्रोफ़ाइल लिंक पार्स करेंगे। 

नोट: आप अपने मित्र की प्रोफ़ाइल या अपनी प्रोफ़ाइल लिंक का उपयोग करें और यह स्क्रिप्ट चलाएँ। 

  1. यह लिंक से अंकों को फ़िल्टर करके user_id निकालता है और “73376016” लौटाता है। 
  2. user_name निकालने के लिए, हम स्ट्रिंग को user_id पर स्प्लिट करेंगे और फिर “-” पर स्प्लिट करके उपयोगकर्ता नाम पाएँगे। “-” को स्पेस से बदलने पर हमें “abid” मिलता है।
  3. अंत में, हम user_id को user_name के साथ जोड़ेंगे। यह यूनिक आईडी अगले भाग में उपयोगकर्ता डेटा एक्सेस करने के लिए काम आएगी।
Goodread_profile = "https://www.goodreads.com/user/show/73376016-abid"

user_id = ''.join(filter(lambda i: i.isdigit(), Goodread_profile))
user_name = Goodread_profile.split(user_id, 1)[1].split('-', 1)[1].replace('-', ' ')
user_id_name = user_id+'-'+user_name

print(user_id_name)

>>> 73376016-abid

Goodreads डेटा निष्कर्षण

2020 के अंत में, Goodreads ने डेवलपर API देना बंद कर दिया। पूरा विवरण आप यहाँ पढ़ सकते हैं। इस समस्या से निपटने के लिए, हम पुराने प्रोजेक्ट्स जैसे streamlit_goodreads_app की API keys का उपयोग करेंगे। यह प्रोजेक्ट API से Goodreads उपयोगकर्ता डेटा एक्सेस करना समझाता है। 

Goodreads बिना API key के भी CSV फ़ाइल फ़ॉर्मैट में डेटा डाउनलोड करने का विकल्प देता है, लेकिन वह केवल किसी एक उपयोगकर्ता तक सीमित है और हमें रीयल-टाइम डेटा निकालने की आज़ादी नहीं देता। 

इस सेक्शन में, हम ऐसे फ़ंक्शंस बनाएँगे जो user_id_name, version, shelf, per_page और apiKey लें। 

  • apiKey: सार्वजनिक डेटा तक पहुँच के लिए
  • version: नवीनतम डेटा प्रकार निर्दिष्ट करने के लिए
  • shelf: उपयोगकर्ता प्रोफ़ाइल में कई shelves होती हैं—मुख्यतः read, to-read, और currently-reading
  • per_page: प्रति पेज पुस्तकों की एंट्रियों की संख्या

फ़ंक्शन, उपयोगकर्ता इनपुट के आधार पर URL तैयार करता है और फिर urllib.request से डेटा डाउनलोड करता है। अंततः, हमें डेटा XML फ़ॉर्मैट में मिलता है। 

apiKey = "ZRnySx6awjQuExO9tKEJXw"
version = "2"
shelf = "read"
per_page = "200"

def get_user_data(user_id, apiKey, version, shelf, per_page):
    api_url_base = "https://www.goodreads.com/review/list"
    final_url = (
        api_url_base
        + user_id
        + ".xml?key="
        + apiKey
        + "&v="
        + version
        + "&shelf="
        + shelf
        + "&per_page="
        + per_page
    )
    contents = urllib.request.urlopen(final_url).read()
    return contents
contents = get_user_data(user_id_name,apiKey,version, shelf, per_page)
print(contents[0:100])


>>> b'<?xml version="1.0" encoding="UTF-8"?>\n<GoodreadsResponse>\n  <Request>\n    <authentication>true</aut'

XML को JSON में बदलना

हमारा प्रारंभिक डेटा XML फ़ॉर्मैट में है, और इसे सीधे संरचित डेटाबेस में बदलने का तरीका नहीं है। इसलिए, हम xmltodict Python पैकेज का उपयोग करके इसे JSON में रूपांतरित करेंगे। 

XML डेटा nested JSON फ़ॉर्मैट में बदल जाता है, और बुक रिव्यू डेटा की पहली एंट्री दिखाने के लिए हम encapsulated डेटा तक पहुँचने हेतु square brackets का उपयोग करेंगे। 

आप मेटाडेटा के साथ प्रयोग कर सकते हैं और और विकल्पों को एक्सप्लोर कर सकते हैं, पर इस ट्यूटोरियल में हम उपयोगकर्ता की समीक्षाओं वाले डेटा पर ध्यान देंगे।  

contents_json = xmltodict.parse(contents)
print(contents_json["GoodreadsResponse"]["reviews"]["review"][:1])

>>> [{'id': '4626706284', 'book': {'id': {'@type': 'integer', '#text': '57771224'}, 'isbn': '1250809606', 'isbn13': '9781250809605', 'text_reviews_count': {'@type': 'integer', '#text': '150'}, 'uri': 'kca://book/amzn1.gr.book.v3.tcNoY0o7ErAhczdQ', 'title': 'Good Intentions', 'title_without_series': 'Good Intentions', 'image_url': .........

JSON को Pandas Dataframe में बदलना 

JSON डेटा प्रकार को Pandas dataframe में बदलने के लिए, हम json_normalize फ़ंक्शन का उपयोग करेंगे। रिव्यू डेटा तीसरे स्तर पर मौजूद है, और उसे एक्सेस करने के लिए हम GoodreadsResponse, reviews और review तक जाएँगे।

डेटाफ़्रेम दिखाने से पहले, हम अप्रासंगिक डेटा को फ़िल्टर करेंगे—date_updated कॉलम गायब होने वाली पुस्तकों को ड्रॉप करके। 

CSV फाइलें, स्प्रेडशीट्स, JSON, SQL डेटाबेस, और APIs को Pandas से ingest करने के विभिन्न तरीक़े सीखें: Streamlined Data Ingestion with pandas कोर्स। 

df = pd.json_normalize(contents_json["GoodreadsResponse"]["reviews"]["review"])
df = df[df["date_updated"].notnull()]
df.head()

Converting JSON to Pandas Dataframe

डेटा क्लीनिंग

कच्चा डेटाफ़्रेम काफ़ी साफ़ दिखता है, लेकिन हमें कॉलमों की संख्या घटानी है। 

जैसा कि दिख रहा है, कुल 61 कॉलम हैं।

df.shape
(200, 61)

चलिए खाली कॉलम ड्रॉप करते हैं। 

df.dropna(axis=1, how='all', inplace=True)
df.shape
(200, 58)

हमने सफलतापूर्वक 3 कॉलम, जिनमें मान गायब थे, ड्रॉप कर दिए।

अब हम `df.columns` से सभी कॉलम नाम जाँचेंगे और सबसे उपयोगी कॉलम चुनेंगे। 

final_df = df[
    [
        "rating",
        "started_at",
        "read_at",
        "date_added",
        "book.title",
        "book.average_rating",
        'book.ratings_count',
        "book.publication_year",
        "book.authors.author.name"
    ]
]
final_df.head()

जैसा कि हम देख सकते हैं, अंतिम डेटाफ़्रेम प्रासंगिक डेटा फ़ील्ड्स के साथ साफ़ दिख रहा है। 

Final Dataframe

CSV फ़ाइल एक्सपोर्ट करना

अंतिम सेक्शन में, हम डेटाफ़्रेम को Tableau-संगत CSV फ़ाइल में एक्सपोर्ट करेंगे। to_csv फ़ंक्शन में, फ़ाइल का नाम एक्सटेंशन सहित दें और index आर्गुमेंट को False कर दें ताकि इंडेक्स न जुड़े। 

final_df.to_csv("abid_goodreads_clean_data.csv",index=False)

CSV फ़ाइल वर्तमान डायरेक्टरी में दिखेगी।

Goodreads Clean CSV File

Goodreads Clean CSV फ़ाइल

आप Python Jupyter Notebook भी देख सकते हैं: Goodreads API का उपयोग करके डेटा इन्जेशन। यह आपके कोड को डिबग करने में मदद करेगा और यदि आप Python प्रोग्रामिंग भाग छोड़ना चाहते हैं, तो आप Copy & Edit बटन पर क्लिक करके स्क्रिप्ट चलाकर फ़ाइल डाउनलोड कर सकते हैं। 

Tableau में डेटा विज़ुअलाइज़ेशन

दूसरे भाग में, हम साफ़ डेटा का उपयोग करके Tableau में सरल और जटिल डेटा विज़ुअलाइज़ेशन बनाएँगे। हमारा लक्ष्य इंटरैक्टिव चार्ट बनाना है जो उपयोगकर्ता के किताब पढ़ने के व्यवहार को समझने में मदद करें। 

डेटा कनेक्ट करना

हम Text फ़ाइल विकल्प चुनकर CSV फ़ाइल, abid_goodreads_clean_data.csv, से कनेक्ट करेंगे। उसके बाद, हम Started At, Read At और Date Added डेटा फ़ील्ड्स को Date & Time में बदलेंगे, जैसा नीचे दिखाया गया है। 

नोट: शुरुआत में ही अपने डेटा फ़ील्ड्स को सही प्रकार में संशोधित करना एक अच्छी प्रैक्टिस है।  

Connecting Data and Modifying Data Types
डेटा कनेक्ट करना और डेटा टाइप में बदलाव

रेटिंग हिस्टोग्राम बनाना

इस सेक्शन में, हम उपयोगकर्ता की बुक रेटिंग का हिस्टोग्राम बनाएँगे। 

  • पहले, Rating फ़ील्ड को Rows शेल्फ पर ड्रैग और ड्रॉप करें। 

User Rating Histogram Part 1
यूज़र रेटिंग हिस्टोग्राम भाग 1

  • Show Me ड्रॉप-डाउन बटन पर क्लिक कर विज़ुअलाइज़ेशन टेम्प्लेट्स देखें। हम Histogram विकल्प क्लिक कर bar chart को हिस्टोग्राम में बदलेंगे।

User Rating Histogram Part 2
यूज़र रेटिंग हिस्टोग्राम भाग 2

  • Rating अक्ष पर 0.5 के अंतराल वाले टिक मार्क हैं। नीचे वाले अक्ष पर राइट-क्लिक करके Edit Axis चुनें। फिर Tick Marks टैब में जाकर Major Tick Marks को Fixed करें। सुनिश्चित करें कि Tick Origin 0 और Tick Interval 1 है।


यूज़र रेटिंग हिस्टोग्राम भाग 3

  • हम अक्ष लेबल्स साफ़ करके, बार के रंग और बॉर्डर बदलकर, तथा मार्क लेबल्स जोड़कर हिस्टोग्राम को कस्टमाइज़ करेंगे। ये सब आप Marks पैनल के विकल्पों से कर सकते हैं। यह बीच-बाएँ सेक्शन में मिलता है। 

User Rating Histogram Part 4
यूज़र रेटिंग हिस्टोग्राम भाग 4

उपयोगकर्ता ने आमतौर पर 3 और 4 के बीच रेटिंग दी है। शून्य रेटिंग वे किताबें हैं जिन्हें रेट नहीं किया गया। 

लाइन प्लॉट

लाइन चार्ट प्लॉट करने के लिए:

  1. Book.Publication Year फ़ील्ड को Rows और Columns शेल्फ पर ड्रैग और ड्रॉप करें।
  2. Rows डेटा फ़ील्ड को राइट-क्लिक करके Measure > Count चुनकर काउंट में बदलें। 
  3. Columns डेटा फ़ील्ड को राइट-क्लिक करके Dimensions चुनकर डाइमेंशन में बदलें।
  4. Marks पैनल में जाएँ, Automatic ड्रॉपडाउन विकल्प पर क्लिक करें और उसे Line में बदलें। 
  5. अक्ष लेबल साफ़ करें, चार्ट कस्टमाइज़ करें, शीर्षक जोड़ें और null मान हटाएँ।

Book Publication Year Line Plot
बुक पब्लिकेशन ईयर लाइन प्लॉट

उपयोगकर्ता ने कुछ पुरानी किताबें भी पढ़ी हैं, लेकिन विशेष रुचि 2015 से 2020 के बीच प्रकाशित पुस्तकों में रही है। 

यदि आप अभिभूत महसूस कर रहे हैं और Tableau की बुनियादी बातें सीखना चाहते हैं, तो Eugenia Anello का Tableau Tutorial for Beginners सहायक हो सकता है। 

बॉक्स प्लॉट

बॉक्स-एंड-व्हिस्कर प्लॉट बनाने के लिए:

  1. Books.Ratings Count डेटा फ़ील्ड को Rows शेल्फ पर ड्रैग और ड्रॉप करें। इसे Discrete से Continuous में बदलें। 
  2. Books.Ratings Count डेटा फ़ील्ड को Marks पैनल के Detail विकल्प पर ड्रैग और ड्रॉप करें। इसे Measure से Dimension में बदलें।
  3. Show Me ड्रॉप-डाउन विकल्प पर क्लिक करें और box-and-whisker plots विकल्प चुनें। 
  4. इसे क्षैतिज बनाने के लिए डेटा फ़ील्ड को Rows से Columns शेल्फ पर ले जाएँ। 
  5. अंतिम भाग पूरी तरह कस्टमाइज़ेशन का है। हम साइज बढ़ाएँगे, रंग बदलेंगे, शीर्षक जोड़ेंगे, और अक्ष का नाम “Popularity” रखेंगे।

Number of Reviews per Book Boxplot
प्रति पुस्तक समीक्षाओं की संख्या बॉक्सप्लॉट

लगता है उपयोगकर्ता कम लोकप्रिय और कुछ प्रसिद्ध किताबें पढ़ता है। इसका मतलब है कि उसकी पसंद सामग्री पर आधारित है, लोकप्रियता पर नहीं। 

बबल प्लॉट

हमने उपयोगकर्ता के किताब पढ़ने के व्यवहार के बारे में सीखने के लिए सरल लेकिन शानदार विज़ुअलाइज़ेशन बनाए हैं। अगला, हम अधिक जटिल डेटा विज़ुअलाइज़ेशन सीखेंगे जिसमें नया calculated field बनाना, bins एडिट करना, और मल्टीपल लेयर्स बनाना शामिल है।

बबल प्लॉट्स में, लेबल यह दिखाते हैं कि किसी पुस्तक को पूरा करने में उपयोगकर्ता को कितने दिन लगे, और बबल का आकार आवृत्ति को दर्शाता है। हमारे पास duration के लिए कोई डेटा फ़ील्ड नहीं है, लेकिन हम Started At और Read At का उपयोग करके इसे बना सकते हैं।

पहले चरण में, Data पैनल में नीचे वाले तीर पर क्लिक करें और Create Calculated Field चुनकर नया calculated field बनाइए। 

Creating Calculated Field
Calculated Field बनाना

नई विंडो खुलेगी, और आपको ये करना है:

  1. शीर्षक फ़ील्ड का नाम “Read Duration” रखें
  2. DATEDIFF फ़ंक्शन का उपयोग करके Read At और Started At के बीच का अंतर निकालें।
  3. सुनिश्चित करें कि फ़ंक्शन का पहला आर्गुमेंट “day” है।
  4. दूसरा और तीसरा आर्गुमेंट के रूप में फ़ील्ड नामों को स्क्वायर ब्रैकेट में ड्रैग-एंड-ड्रॉप करें या टाइप करें। 

Read Duration in Days
दिनों में Read Duration

Read Duration डेटा फ़ील्ड continuous है, और पैक्ड बबल्स विज़ुअलाइज़ेशन प्लॉट करने के लिए हमें इसे छोटे खंडों—bins—में बाँटना होगा। 

  1. नए बनाए गए `Read Duration` फ़ील्ड को Rows शेल्फ पर ड्रैग और ड्रॉप करें।
  2. Show Me पर क्लिक करके histogram चुनें। यह आपके लिए अपने-आप एक bin फ़ील्ड बना देगा।

Creates a Bin Field
Bin फ़ील्ड बनता है 

  1. हाल ही में बने Read Duration (bin) फ़ील्ड पर राइट-क्लिक करें और Read Duration in Days विकल्प चुनें।
  2. Size of Bins को 10 में बदलें। इससे छोटे-छोटे डेटा खंड बनेंगे, जो अधिक परिशुद्ध पैक्ड बबल्स प्लॉट बनाने में मदद करेंगे। 

Editing Bins
Bins एडिट करना

कठिन हिस्सा पार हो गया, अब मेहनत का फल देखने का समय है। 

  1. सरल विज़ुअलाइज़ेशन बनाने के लिए, Show Me पर क्लिक करें और packed bubbles विकल्प चुनें। आपको अलग-अलग आकार के एक-रंग वाले वृत्त दिखेंगे। 
  2. कुछ रंग जोड़ने के लिए, Read Duration फ़ील्ड को Marks पैनल के Color विकल्प पर ड्रैग और ड्रॉप करें। 
  3. फ़ील्ड पर राइट-क्लिक करके Measure > Count (Distinct) चुनकर रंग फ़ील्ड को Count (Distinct) में बदलें। इससे हर bin या लेबल को अलग रंग मिलेगा। 

Unicolor Packed Bubbles Plot
एक-रंग पैक्ड बबल्स प्लॉट

  1. Marks पैनल में Color विकल्प पर क्लिक करें और Edit Colors… > Sunrise-Sunset Diverging चुनें। आप अपनी पसंद का कोई भी ग्रेडिएंट रंग चुन सकते हैं। 
  2. अंतिम भाग पूरी तरह कस्टमाइज़ेशन का है—सुनिश्चित करें कि आपकी विज़ुअलाइज़ेशन आकर्षक हो और सही संदेश दे।

Packed Bubbles Plot
पैक्ड बबल्स प्लॉट 

अधिकांश किताबें उपयोगकर्ता ने एक दिन से कम में पूरी कर लीं। आप 300 से ऊपर के कुछ आउटलायर्स भी देख सकते हैं। 

हम इन विज़ुअलाइज़ेशंस को मिलाकर Tableau डैशबोर्ड भी बना सकते हैं। इस ट्यूटोरियल में Tableau डैशबोर्ड बनाना सीखें।

निष्कर्ष

इस ट्यूटोरियल में, हमने Python के महत्व और उसे Tableau के साथ उपयोग करना सीखा। पहले भाग में, हमने डेवलपर API का उपयोग करके Goodreads उपयोगकर्ता डेटा निकाला और XML डेटा को साफ़-सुथरे, संरचित Pandas डेटाफ़्रेम में बदला। दूसरे भाग में, हमने साफ़ डेटा से सरल और जटिल दोनों तरह के डेटा विज़ुअलाइज़ेशन बनाए। 

Python और Tableau का संयोजन संभावनाओं की नई दुनिया खोलता है। आप डेटा पाइपलाइन्स एकीकृत कर सकते हैं, मशीन लर्निंग मॉडल लागू कर सकते हैं, जटिल सांख्यिकीय विश्लेषण चला सकते हैं, और ऐसे कई कार्य कर सकते हैं जो केवल Tableau पर संभव नहीं हैं। 

आप DataLab पर Python कोड मुफ़्त में चला सकते हैं, और इसमें इस उदाहरण को चलाने के लिए सभी आवश्यक पैकेज उपलब्ध हैं। Tableau विज़ुअलाइज़ेशन बनाने के लिए, हमने Tableau का मुफ़्त संस्करण Tableau Public उपयोग किया है।

यदि आप Python में नए हैं और इसकी फ़ंक्शनैलिटी व सिंटैक्स के बारे में और सीखना चाहते हैं, तो Introduction to Data Science in Python कोर्स देखें। साथ ही, आप Tableau Fundamentals स्किल ट्रैक लेकर Tableau विज़ुअलाइज़ेशन और कस्टमाइज़ेशन की बुनियाद पर महारत हासिल कर सकते हैं। इसमें 5 कोर्स हैं जो Tableau का परिचय, डेटा विश्लेषण, इंटरैक्टिव डैशबोर्ड बनाना, केस स्टडी पर काम करना और मल्टीपल डेटा सोर्सेज से कनेक्ट करना कवर करते हैं।

विषय