3 पॉइंट द्वारा GN⁺ 2024-04-05 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Great Tables एक table-creation package है जो data analysis flow को Python code के भीतर बनाए रखते हुए 20वीं सदी के मध्य की printed tables की परिष्कृत अभिव्यक्ति क्षमता को फिर से लाने की कोशिश करता है
  • Table सिर्फ rows और columns का grid नहीं है, बल्कि column order, labels और separators के जरिए values को ढूंढना और compare करना आसान बनाने वाला information-presentation format है
  • प्राचीन Sumerian clay tablets से लेकर Manual of Tabular Presentation तक, tables ने information density और format दोनों को साथ-साथ विकसित किया, लेकिन शुरुआती spreadsheets में calculation सुविधा की तुलना में अभिव्यक्ति क्षमता कम थी
  • Great Tables table को 6 components में बांटता है और tab_*, fmt_*, opt_*() API families के जरिए structure, formatting और styling को अलग करता है
  • यह package large-scale interactive exploration के बजाय papers, books और reports में जाने वाली static summary tables की publication और presentation quality बढ़ाने पर focused है

Great Tables जिस table-creation dilemma को हल करना चाहता है

  • Table, plot की तरह, information प्रस्तुत करने के final stage में महत्वपूर्ण है, और effective table design में अपेक्षा से ज्यादा refinement और nuance होता है
  • आज data workers को आमतौर पर दो विकल्पों के बीच compromise करना पड़ता है
    • Excel जैसे tools में data copy करके table फिर से बनाना
    • बिना polish की गई table को वैसे ही दिखाना
  • Great Tables इस dilemma को Python code-based interface से हल करने की कोशिश करने वाला package है
  • लक्ष्य है कि data collection, analysis और summary table creation तक सब कुछ Python के अंदर संभालते हुए भी expressive tables बनाई जा सकें

Table की बुनियादी परिभाषा और readability elements

  • Table को दो बुनियादी नियमों में summarize किया जा सकता है
    • Data columns और rows में प्रस्तुत होता है
    • Data मुख्यतः text के रूप में प्रस्तुत होता है
  • Example table में लोगों को rows में, और name, address, city, postal code, date of birth, height, weight जैसी characteristics को columns में रखा जाता है
  • यह arrangement individual values ढूंढना या rows और columns के बीच compare करना आसान बनाता है
  • Rows के बीच horizontal lines अनिवार्य नहीं हैं, लेकिन individual rows को visually अलग करने में सहायक होती हैं
  • Columns का order भी readability पर सीधे असर डालता है
    • अगर Name column दाईं ओर सबसे अंत में हो, तो हर record का subject तुरंत नहीं दिखता और reader ज्यादा confuse हो सकता है
    • Column labels बताते हैं कि हर column में कौन सा data है, और ज्यादातर मामलों में guesswork कम करते हैं

प्राचीन tables का इतिहास

  • Tables की शुरुआत information रखने वाले container यानी square grid से हुई
  • France की Lascaux और Niaux caves की दीवारों पर लगभग 25,000 साल पुराने grid representations बचे हुए हैं
  • ईसा पूर्व दूसरी सदी में Hipparchus ने latitude और longitude से celestial और terrestrial positions को दिखाया, और लगभग 150 CE में Ptolemy की Geographia में grid का उपयोग करने वाली map-making methods शामिल थीं
  • Rome की centuriation roads, canals और farmland के जरिए square grid बनाने वाली land-surveying system थी
  • लगभग 10,000 साल पहले agriculture के व्यापक होने के बाद, agriculture, livestock और division of labor से जुड़ी economic transactions को record और manage करने की जरूरत बढ़ी

Sumer और Mesopotamia की table structure

  • ईसा पूर्व चौथे millennium में Mesopotamian cities दूरस्थ kingdoms से trade करती थीं और उन्हें records रखने पड़ते थे; Uruk में मिली clay tablets में शुरुआती लेकिन sophisticated tables बचे हुए हैं
  • ईसा पूर्व 3200–3000 के आसपास की Uruk clay tablet में beer production के लिए barley और malt deliveries record हैं
    • Structure right-to-left पढ़ा जाता है
    • हर cell में word या concept दिखाने वाला ideogram और quantity दिखाने वाला number है
    • लगभग दो rows में से प्रत्येक एक व्यक्ति से correspond करती है
    • दाईं ओर की दो columns में malt और barley quantities हैं
    • तीसरा column व्यक्ति-वार subtotal दिखाता है, और सबसे बायां column total दिखाता है
    • सबसे नीचे की row में responsible official का name है, इसलिए यह footer की तरह काम करती है
  • लगभग एक हजार साल बाद की Nippur Enlil temple clay tablet में income sources और 50 temple workers के monthly expenses हैं
    • अधिक regular grid दिखाई देता है
    • Month names के रूप में column headings और individual names व occupations के रूप में row headings हैं
    • इसमें empty cells जहां information नहीं है, numeric values, 6-month subtotals, totals और explanatory notes शामिल हैं
  • बाद में tables का medium clay से wax tablets, papyrus और paper में बदल गया, और writing technology व table design भी साथ-साथ बदले

20वीं सदी के मध्य में table design का शिखर

  • 20वीं सदी का मध्य table design के लिए खास तौर पर मजबूत दौर माना जाता है
  • Offset printing, typewriters और varitype जैसी document-production technologies इतनी विकसित हो गई थीं कि table elements को सटीक रूप से typeset किया जा सके
  • Page space constraints थे, लेकिन table को एक page में fit करने या कई pages में divide करने के कई solutions मौजूद थे
  • Advanced printing technology और table-design knowledge के मिलन से सुंदर tables बनाई जा सकती थीं
  • U.S. Census Bureau की Manual of Tabular Presentation information-dense tables के ideal design को विस्तार से cover करने वाला काम है
    • Table के विभिन्न parts को name देकर rigorously explain करती है
    • अलग-अलग table-creation situations में क्या करना चाहिए और क्या नहीं करना चाहिए, इस पर strong recommendations देती है
    • दिखाती है कि table दिखने में अच्छी होने के साथ-साथ बहुत information भी समेट सकती है
  • Great Tables इस document के table-design principles से काफी कुछ अपनाता है और इस assumption से शुरू करता है कि वे principles आज भी valid हैं

Spreadsheets के बाद पीछे हटना और सीमाएं

  • 1970–1980 के दशक में computing technology accessible होने लगी, जिससे लोग electronic और printed दोनों forms में tables बना सके
  • Calculable tables की लोकप्रियता 1979 में VisiCalc के साथ शुरू हुई मानी जा सकती है
  • VisiCalc values को quickly calculate कर सकता था, लेकिन presentation tables बनाने के लिए इसकी expressiveness limited थी
    • Grid cells को presentation-style borders नहीं दिए जा सकते थे
    • Values को format नहीं किया जा सकता था
    • Table print भी नहीं की जा सकती थी
  • अगले 10–15 वर्षों में spreadsheet tables बेहतर दिखने लगीं
    • 1990s की शुरुआत में Excel tables में borders लगाए जा सकते थे
    • Typography support बेहतर हुआ
    • Value formatting capabilities भी बढ़ीं
  • फिर भी, पिछले 30 सालों की Excel tables को Manual of Tabular Presentation के स्तर तक पहुंचना मुश्किल माना गया
  • Data analysis Excel के बाहर भी होने लगा, जिससे तीन inefficient scenarios बने
    • Python में analysis और table creation दोनों करना, लेकिन table quality कम होना
    • Excel में analysis और table creation दोनों करना, लेकिन analysis flexibility कम होना
    • Python में analysis करके Excel में copy कर table बनाना, लेकिन reproducibility न होना

Great Tables का table model

  • Great Tables एक Python package है जो 20वीं सदी के मध्य की tables की elegance को code interface की power के साथ जोड़ना चाहता है
  • यह table को 6 independent components के combination के रूप में व्यक्त करता है
    • Table Header: title और subtitle डालकर table content को concise तरीके से explain करने की जगह
    • Column Labels: हर column के content को define करते हैं; spanner कई column groups के ऊपर रखा जाने वाला title है
    • Stub Head: top-left position, जहां विभिन्न प्रकार के labels रखे जा सकते हैं
    • Row Stub: row information और row group labels के लिए area
    • Table Body: cells शामिल करता है और data इसी area में स्थित होता है
    • Table Footer: table content से related additional information रखने की जगह
  • Great Tables में code से table body बनाने के बाद styling, formatting और दूसरे components को iteratively add करने का तरीका अपनाया जाता है
  • Example code GT(simple_table, rowname_col="Name") से शुरू होता है और title, stub head, column spanner, source note, date व integer formatting, और style options जोड़ता है
  • Example table में blue row stub row labels को table body से अलग करता है
    • हर व्यक्ति एक unique observation है, इसलिए row के subject को highlight करता है
    • Title table में मौजूद content को explain करता है
    • Location और Personal Characteristics spanners columns को meaningful groups में बांटते हैं
    • Blue lines और cell background का consistent use professional look बनाता है
  • Table components add करने वाली methods tab_ से शुरू होती हैं
    • उदाहरण: tab_header() Table Header बनाता है

Formatting और nanoplots

  • सिर्फ table structure बनाना काफी नहीं है; अलग-अलग domains में values दिखाने की requirements अलग होती हैं
  • एक number भी community norms और expectations के अनुसार कई तरीकों से display किया जा सकता है
  • Dates, time और currency शामिल करने पर formatting का scope और बड़ा हो जाता है
  • Raw value 134,000 requirements के अनुसार अलग-अलग तरीके से व्यक्त हो सकती है
  • जब values को images या plots के रूप में convey करना हो, formatting problem और बढ़ जाती है
  • अगर कोई medical analyst patient test results में improvement या deterioration trend convey करना चाहता है, तो पूरी row की number sequence पढ़ने वाला तरीका interpretation को धीमा कर सकता है
  • fmt_nanoplot() nanoplots के जरिए table के अंदर छोटी trend visualizations देता है
    • Data points पर mouse hover करने से हर date की value देखी जा सकती है
    • Nanoplots plot की quick visual interpretation और table की compactness के बीच balance का लक्ष्य रखते हैं
  • Great Tables की formatting methods fmt_ से शुरू होती हैं
  • Package अलग-अलग users की जरूरतों के अनुरूप कई formatting methods और useful options देने की कोशिश करता है

Publication और presentation के लिए static summary tables पर focus

  • Great Tables tables के साथ interaction के कई तरीकों में से publication और presentation display पर focus करता है
  • Database analysis में सैकड़ों, हजारों या उससे भी ज्यादा records explore और filter करने के लिए simple table display उपयुक्त हो सकता है
  • Results publish करना अलग काम है, जहां structure, formatting और styling central होते हैं
  • सुंदर table display को ये काम करने चाहिए
    • Information को digest करना आसान बनाए
    • जहां जरूरत हो वहां additional context दे
    • Document या organization की style का पालन करे
  • Target use case journals, books और reports में दिखने वाले तरीके से data presentation है
  • Great Tables मानता है कि static summary tables अलग focus के योग्य क्षेत्र हैं, और opt_*() methods के जरिए readers को बेहतर tables देना आसान बनाना चाहता है
  • Package की success criterion उन tables की quality है जिन्हें बनाया जा सकता है, और API improvements पर काम जारी रखने की योजना है
  • Community feedback के लिए Discord Server खुला रखा गया है

1 टिप्पणियां

 
GN⁺ 2024-04-05
Hacker News की राय
  • Great Tables ने Python/Jupyter tables के क्षेत्र में काफी अच्छा काम किया है, और ऐसा लगता है कि यह graphics grammar की तरह लगभग table grammar बना रहा है
    अच्छा होगा अगर और projects भी अपनी philosophy और goals को इसी तरह समझाएँ
    मैंने Jupyter के लिए Buckaroo नाम की एक अलग table library बनाई है, लेकिन उसका approach अलग है
    Buckaroo का लक्ष्य interactive तरीके से काम करते हुए कई formats और post-processing functions को जल्दी-जल्दी आज़माकर tables से अहम insights निकालने में मदद करना है
    basic exploratory data analysis करते समय बार-बार वही commands type करनी पड़ती हैं, इसलिए मुझे लगा कि वे commands और insights table के अंदर ही होने चाहिए
    Great Tables ज़्यादा उस दिशा में बना लगता है जहाँ presentation tables को manually format किया जाता है
    https://github.com/paddymul/buckaroo
    https://youtu.be/GPl6_9n31NE
    • Buckaroo पर काम के लिए धन्यवाद। Jupyter का print() और IPython display() dead static output की सीमा से बंधे हैं, और पुराने printf debugging जैसे लगते हैं; मेरी समझ में Buckaroo इसी को हल करने के लिए बनाया गया था
      Visidata के shortcuts और interaction style को आप कैसे देखते हैं, यह जानना चाहूँगा
      मैंने पहले Visidata इस्तेमाल किया है, और dataframes को explore करने के लिए यह आखिर Jupyter के अंदर क्यों नहीं आ सकता, यह सवाल मुझे हमेशा रहा
      मैं इस बात से सहमत हूँ कि Great Tables table grammar को formalize करने की एक और कोशिश जैसा दिखता है, और tabular form की ताकत तथा R/pandas/Arrow/polars ecosystem के जरिए dataframe concept के फैलाव को देखते हुए यह approach स्वागतयोग्य है
      हालांकि मेरी जानकारी में यह term मूल रूप से 90s की statistical language S में पहली बार इस्तेमाल हुआ था
      [1] https://towardsdatascience.com/preventing-the-death-of-the-d...
  • Great Tables के examples मेरे taste के हिसाब से बहुत complex हैं। title के ऊपर-नीचे horizontal lines अनावश्यक लगती हैं, और पहली column यानी row labels से alignment भी मुझे ठीक नहीं लगा
    नीचे थोड़ा whitespace देकर और bold font इस्तेमाल करके बिना noise के visual hierarchy दी जा सकती है
    row label background बहुत dark है और font weight की वजह से पढ़ना मुश्किल होता है, इसलिए बहुत हल्का blue बेहतर होगा
    row group label “Name” को italic में रखना भी मुझे पसंद नहीं आया
    बीच में floating top column label table को scan करना मुश्किल बनाता है; left alignment काफी बेहतर लगेगा
    आखिर में font भी मुझे वाकई पसंद नहीं आया, हालांकि यह browser की वजह से भी हो सकता है
    मैंने कुछ बदलावों के साथ एक mockup बनाया है, और मेरे हिसाब से यह table पढ़ने में काफी आसान है
    https://i.imgur.com/iMMf5vo.png
    • Edward Tufte की Beautiful Evidence पढ़कर देखनी चाहिए
      यह readability और data के message या core को distract करने वाली चीज़ों जैसे अभी बताए गए मुद्दों पर बात करती है
      अगर आपने sparkline देखा है, तो वह term भी Tufte ने ही गढ़ा था
      हर UI review में मैं यह देखने के लिए इस किताब को पलटता हूँ कि कहीं हमसे कुछ छूट तो नहीं गया, और किसी भी page से पढ़ना शुरू करें तो भी यह दिलचस्प किताब है
      साथ ही इसमें PowerPoint खराब क्यों है, इस पर लंबा essay भी है
      [1] https://www.edwardtufte.com/tufte/books_be
      [2] https://en.wikipedia.org/wiki/Sparkline
    • table title या तो ऊपर center-aligned होना चाहिए या नीचे caption के रूप में
      अगर उसे किसी column के ऊपर left-align कर दें, तो आम तौर पर गलत या अनचाहे तरीके से वह title table की information hierarchy का top level जैसा दिखने लगता है
      ऊपर वाले modernist संशोधन में title “names, addresses, characteristics” कहता है, लेकिन alignment से ऐसा लगता है जैसे names को exclude कर रहा हो, इसलिए तुरंत खटकता है
      इसके उलट census manual लगभग सभी labels को उनके box के भीतर center-align करता है, और जहाँ ऐसा नहीं है वहाँ भी अधिकतर indentation की वजह से है
      साथ ही वह column width labels के बजाय data के हिसाब से तय करता है, और indentation व hyphenation को adjust करने में हिचकता नहीं
      नतीजा यह है कि horizontal रूप से dense होने के बावजूद intuitively समझ में आता है
      और सोचने पर title खुद भी अच्छा नहीं है
      titles और captions को context, scope और purpose बताना चाहिए; अगर वे ऐसा नहीं कर पाते, तो editorial sin यह है कि उन्होंने अपने होने को justify नहीं किया, इसलिए उन्हें पूरी तरह हटाया जा सकता है
      मौजूदा title को information या generality खोए बिना “Table 1” से बदला जा सकता है
      table presentation को first principles से discuss और reconstruct करने वाले article के लिए यह कुछ निराशाजनक है
      table titles information catalog की एक अहम layer बनाते हैं, इसलिए यह हैरानी की बात नहीं कि census manual ने title composition पर पूरा chapter दिया है
      भाषा कुछ domain-specific और पुराने अंदाज़ की है, लेकिन देखने लायक है
    • मुझे समझ नहीं आता कि हर row को अपने-आप में एक record जैसा महसूस कराने के लिए horizontal lines या striping जैसे elements क्यों नहीं हैं
    • आपका mockup improved version है। article के example में समस्या यह है कि table के अंदर हर अक्षर और संख्या का visual weight समान है
    • मुझे लगता है इसे और आगे ले जाया जा सकता है। title को “remote correspondents” तक छोटा किया जा सकता है, क्योंकि बाकी हिस्सा column names से duplicate होता है
      blue emphasis भी अब title से duplicate हो रहा है, इसलिए सब हटाया जा सकता है, और “personal characteristics” व “location” का distinction भी organization में सार्थक मदद नहीं करता, इसलिए उसे भी हटाना बेहतर होगा
  • इतिहास वाली बातें दिलचस्प हैं, अच्छा लेख है
    हाल के इतिहास में CALS tables का निर्माण भी आता है: https://en.wikipedia.org/wiki/CALS_Table_Model
    Datalogics https://en.wikipedia.org/wiki/Datalogics CALS table concept में गहराई से शामिल था

Datalogics के कर्मचारी SGML बनाने वाली ISO समिति में शामिल थे, और उन्होंने दस्तावेज़ीकरण से जुड़े अमेरिकी रक्षा विभाग के कर्मचारियों और contractors समेत कई लोगों को SGML की training दी थी
मैं SGML-आधारित document editor बनाने वाली team में शामिल था, जिसकी एक capability उस element के SGML context के आधार पर element की formatting करना था
यह XSLT और उसके परिवार के आने से पहले की बात थी
Datalogics के लोगों ने Microsoft को XML समझने में मदद की। जैसे, “नहीं, आप XML element tags के uppercase/lowercase को मनमाने तरीके से नहीं बदल सकते”
TeX users के पास भी table formatting को लेकर काफी sophisticated विचार हैं
एक अजीब side note के तौर पर, उस समय सीखा था कि किसी fighter jet के पूरे documents print किए जाएँ, तो वे aircraft से भी भारी होंगे और football field के आकार के file cabinets के समूह को भर देंगे
और आज कई लोग XML पसंद नहीं करते, लेकिन SGML दुनिया से आने वाले के लिए XML एक बड़ा वरदान है

  • Visicalc के बारे में लिखा है कि “grid cells को presentation के लिए border style नहीं दिया जा सकता था, values को format नहीं किया जा सकता था, और tables को print तक नहीं किया जा सकता था”, लेकिन यह पूरी तरह सही नहीं लगता
    मुझे याद है कि पहले version में भी सीमित सही, format support था
    http://www.bricklin.com/history/refcard3.htm के मुताबिक /F command से alignment set किया जा सकता था और number format, जैसे dollars और cents, तय किया जा सकता था
    यह document version 1.35 पर आधारित है, लेकिन मुझे लगता है कि पहली release भी कम से कम dollars और cents दिखाने तक support करती थी
  • Table में dollar amounts जैसे numeric data को लेकर मुझे हमेशा जो बात खटकती थी, वह यह है कि quantities की तुलना visually linear नहीं बल्कि log जैसी दिखती है
    उदाहरण के लिए, अगर costs $1500, $130, $110, $210 हैं, तो आखिरी तीन rows का text पहली row के text के लगभग 4/5 आकार जैसा दिखता है
    लेकिन तीनों को मिलाकर भी top amount के सिर्फ 1/3 के बराबर हैं
    लोग digits की संख्या को visually देखते हैं, जो मोटे तौर पर log10 जैसा है
    यह समस्या इतनी आम थी कि finance-related spreadsheets में मैंने हर बार in-cell bar charts डालना शुरू कर दिया
    वरना meetings absolute amount के हिसाब से सबसे बड़े खर्च की तुलना में बिल्कुल मामूली items पर बहस करते-करते भटक जाती हैं
    असल में, ऐसे VM पर जो सिर्फ monthly license cost में $15K वाला database engine चला रहा था, cloud server log collection के $15/month cost पर हमने कई meetings खर्च कर दी थीं
  • मैं Great Tables के co-maintainers में से एक हूँ
    मैं इसे Rich Iannone के साथ maintain करता हूँ
    जब package philosophy समझाने को कहा जाए तो table display के 5,000 साल के इतिहास की कहानी सुनाने वाला software developer Rich के अलावा मैं किसी को नहीं जानता
  • शानदार। साझा करने के लिए धन्यवाद
    हैरानी होती है कि लगातार बिगड़ती data table representation को इतने लंबे समय तक ऐसे ही छोड़ा गया
    लेख में जिन mid-20th-century modern tables की ओर इशारा किया गया है, वे सचमुच चमकदार examples लगते हैं
    Python से data analysis फिर से आज़माने का मन हो गया, और कुछ API improvements और extensions भी दिमाग में आए जिन्हें बनाना चाहूँगा
  • मुझे यह package पसंद है और मैं इसे R में कई सालों से इस्तेमाल कर रहा हूँ
    HTML tables बनाने के लिए यह बेहतरीन है, लेकिन PDF और DOCX output थोड़ा कम polished है
    हाल में focus Python version को R version के स्तर तक लाने की ओर shift होता दिख रहा है, जिससे R development की speed धीमी हुई लगती है—इसकी थोड़ी चिंता है
    फिर भी, आप कोई भी language इस्तेमाल करते हों, इसे देखना worthwhile है
  • बेहतरीन। 90s में मैंने एक colleague के साथ EBRI Datebook on Employee Benefits लिखी थी, जो mostly tables वाली किताब थी
    SAS के अलावा हमारा मुख्य tool Table Producing Language, यानी TPL नाम की एक पुरानी language थी
    यह 1970s तक जाती है, लेकिन syntax समझ लेने पर TPL अविश्वसनीय रूप से flexible, expressive और efficient थी
    Great Tables के designers को TPL पर नज़र डालनी चाहिए
    यह Great Tables के लक्ष्य वाली हर चीज़ handle करती है, और शायद कुछ और tricks भी रखती है
    https://www.ojp.gov/pdffiles1/Digitization/68013NCJRS.pdf
    बहरहाल, Great Tables बनाने के लिए धन्यवाद
    Python में table generation की quality को काफी बेहतर बनाने में यह बहुत मदद करता है
  • इस व्यक्ति को award मिलना चाहिए। 1) शानदार काम, 2) details पर ध्यान, 3) गहरी research, 4) और बेहतरीन presentation style, जिससे “तो यह आखिर है क्या?”, “शुरुआत कैसे करूँ?”, “कोई example दे सकते हैं?” जैसे आम सवाल बच जाते हैं
    Show HN पर post करने वालों को इससे सीखना चाहिए
  • इस विषय पर एक किताब भी है: https://en.wikipedia.org/wiki/The_History_of_Mathematical_Ta...
    एक दिलचस्प side note के तौर पर, spreadsheets पर trained AI models को context समझने के लिए column names, headers जैसी “अच्छी tables” चाहिए होती हैं
    Fortap ऐसा एक example है: https://arxiv.org/abs/2109.07323