في هذه المقالة، سنعرض لك بعض المكتبات المفيدة لطباعة جدول في Python وتنسيقه بسرعة وسهولة وبطريقة جذابة بصريًا – أي طباعة رائعة. مع القليل من الجهد، ستكون جداولك جاهزة للنشر عبر الإنترنت، أو تقرير تحليلي، أو ورقة علمية.
برزت لغة بايثون كواحدة من اللغات المفضلة لتحليل البيانات. إنها قوية ومرنة. تركيبها الواضح وسهل الفهم يجعلها لغة رائعة للتعلم، حتى للمبتدئين. يوفر العدد الهائل من المكتبات مفتوحة المصدر وظائف لكل شيء بدءًا من استخراج البيانات وتنظيفها ومعالجتها وحتى التصور و تعلم الآلة.
لنبدأ بإلقاء نظرة على بعض الطرق السريعة لطباعة الجداول في بايثون لتلك الأوقات التي تكون فيها في عجلة من أمرك.
طباعة ليست جميلة جدًا
أثناء مرحلة تحليل البيانات الاستكشافية، من حقك ألا تقلق كثيرًا بشأن الجماليات. ليس من المنطقي إضاعة وقتك في إنتاج رسوم بيانية وجداول جميلة المظهر. وبدلاً من ذلك، أنت مهتم فقط بفهم البيانات.
هناك بعض التقنيات السريعة لطباعة جدول في بايثون. الأول هو تنسيق السلسلة باستخدام التابع FORMAT(). لنفترض أن لديك بعض البيانات الجدولية المخزنة في قائمة القوائم. يمكن طباعة هذا بسرعة صفًا تلو الآخر كما هو موضح أدناه:
table = [[1, 2222, 30, 500], [4, 55, 6777, 1]]
for row in table:
print('| {:1} | {:^4} | {:>4} | {:<3} |'.format(*row))
هذه الطريقة سريعة التنفيذ وسهلة الفهم ولكن بها بعض العيوب. الأكثر وضوحًا هو أنه يجب عليك معرفة وتحديد عرض كل عمود، وذلك من خلال الأعداد الصحيحة في دالة print()
. يمكنك التغلب على ذلك عن طريق كتابة بعض التعليمات البرمجية للعثور على الحد الأقصى لطول الأرقام في كل عمود، ولكن هذا يضيف تعقيدًا إلى ما يجب أن يكون مهمة سريعة.
لاحظ أن الأعمدة الثاني والثالث والرابع يتم توسيطها ومحاذاة لليمين ومحاذاة لليسار على التوالي. ويتم التحكم في ذلك بواسطة الأحرف ^
و>
و<
. ومع ذلك، أبعد من ذلك، لديك القليل من التحكم في كيفية طباعة الجدول.
خيار آخر هو مكتبة الباندا، التي أصبحت العمود الفقري لتحليلات البيانات في بايثون. إذا كنت تشعر أنك بحاجة إلى تحسين لعبة الباندا لديك قليلًا، فإليك مقالًا حول العمل باستخدام إطارات البيانات. من السهل تحويل جدول إلى إطار بيانات وطباعة محتوياته:
import pandas as pd
table = [[1, 2222, 30, 500], [4, 55, 6777, 1]]
df = pd.DataFrame(table, columns = ['a', 'b', 'c', 'd'], index=['row_1', 'row_2'])
print(df)
يعد هذا أبسط من الطريقة الأولى حيث لا يلزمك تحديد عرض الأعمدة أو تنسيقها. ويوفر خيارًا لتسمية الأعمدة والصفوف من أجل الوضوح.
من الممكن تخصيص مظهر إطار البيانات المطبوع، لكنه مرهق. يمكنك استخدام pd.set_option()
لإعداد أشياء مثل المحاذاة وعرض العمود، ولكن يمكن أن يضيف ذلك العديد من الأسطر إلى برنامجك بسرعة. يتم أيضًا تقييد عدد الصفوف التي يمكن عرضها بواسطة رقم ثابت افتراضي، لذا يتعين عليك تعيين خيار Display.max_rows
على df.shape[0]+1
لرؤية جميع الصفوف.
طباعة جميلة
عند الانتهاء من مرحلة تحليل البيانات الاستكشافية، قد ترغب في جعل جداولك تبدو أجمل. توفر مكتبتان وظيفة طباعة القيم المفصولة بفواصل (CSV) : TABULATE وPRETTYTABLE. لا تأتي هذه بشكل قياسي مع Python، لذا يتعين عليك تثبيتها باستخدام أمر PIP INSTALL السريع.
عند الحديث عن بيانات CSV، إذا كنت تريد معرفة كيفية القراءة والكتابة بتنسيق البيانات هذا، فراجع هذه المقالة. لدينا أيضًا بعض الدروس حول كيفية قراءة وكتابة ملفات Excel بلغة بايثون، والتي من المفيد أيضًا معرفتها.
tabulate
توفر مكتبة TABULATE الدعم لعدد قليل من أنواع البيانات المختلفة بما في ذلك قوائم القوائم ومصفوفات NumPy وإطارات بيانات الباندا وغيرها. بمجرد التثبيت، ما عليك سوى الاتصال بالمكتبة وتمرير بياناتك إلى دالة tabulate كما هو موضح أدناه:
from tabulate import tabulate
table = [[1, 2222, 30, 500], [4, 55, 6777, 1]]
print(tabulate(table))
هذا ليس جميلًا بشكل خاص بعد، ولكن الانتقال من هنا إلى شيء أكثر جاذبية من الناحية المرئية هو مجرد مسألة تحديد بعض المعلمات الاختيارية. إذا كان الجدول الخاص بك يحتوي على رأس، فيمكنك تحديد ذلك باستخدام الكلمة الأساسية للرؤوس، ويمكنك تحديد الكلمة الأساسية tablefmt
لتغيير المظهر.
هناك العديد من الخيارات للاختيار من بينها. لتلك اللحظات التي تشعر فيها بالقليل من الخيال، يمكنك تجربة ما يلي:
table = [['col 1', 'col 2', 'col 3', 'col 4'], [1, 2222, 30, 500], [4, 55, 6777, 1]]
print(tabulate(table, headers='firstrow', tablefmt='fancy_grid'))
من الميزات الرائعة لهذه المكتبة العدد الكبير من التنسيقات المحددة مسبقًا للمساعدة في نشر الجداول بطرق مختلفة. على سبيل المثال، يوفر تنسيق mediawiki
علامة الجدول المستخدمة في Wikipedia، وهو أمر مفيد إذا كنت تخطط لكتابة صفحة Wikipedia أو تحريرها. بالنسبة لتقارير التحليلات أو المنشورات العلمية، هناك العديد من تنسيقات اللاتكس بالإضافة إلى دعم نشر الجداول في برنامج إدارة المشاريع الشهير Jira أو على GitHub. فيما يلي مثال يوضح كيف يمكنك استخدام سطر واحد من لغة Python لإعداد البيانات الجدولية لنشرها عبر الإنترنت باستخدام تنسيق html:
>>> print(tabulate(table, headers='firstrow', tablefmt='html'))
<table>
<thead>
<tr><th style="text-align: right;"> col 1</th><th style="text-align: right;"> col 2</th><th style="text-align: right;"> col 3</th><th style="text-align: right;"> col 4</th></tr>
</thead>
<tbody>
<tr><td style="text-align: right;"> 1</td><td style="text-align: right;"> 2222</td><td style="text-align: right;"> 30</td><td style="text-align: right;"> 500</td></tr>
<tr><td style="text-align: right;"> 4</td><td style="text-align: right;"> 55</td><td style="text-align: right;"> 6777</td><td style="text-align: right;"> 1</td></tr>
</tbody>
</table>
prettytable
توفر مكتبة PRETTYTABLE حلاً بديلاً مع بعض الوظائف الفريدة. سنستخدم فئة PrettyTable()
لتحديد الجداول وتعديلها وطباعتها في لغة بايثون.
فيما يلي كيفية تعريف كائن جدول بمعلومات الرأس، ثم إضافة صفوف متعددة مرة واحدة باستخدام التابع add_rows()
:
from prettytable import PrettyTable
table = [['col 1', 'col 2', 'col 3', 'col 4'], [1, 2222, 30, 500], [4, 55, 6777, 1]]
tab = PrettyTable(table[0])
tab.add_rows(table[1:])
من هنا، يمكنك ببساطة print()
الجدول لتصوره في نموذج ASCII، أو يمكنك استخدام العديد من التوابع المتاحة لتعديل وتنسيق البيانات الجدولية. لإضافة صف واحد، هناك التابع add_row()
؛ لإضافة عمود، استخدم التابع add_column()
. يحتوي الأخير على وسيطتين مطلوبتين: سلسلة لتحديد اسم الحقل وقائمة أو صف كعمود. يمكنك أيضًا تحديد المحاذاة الأفقية والرأسية كما هو موضح في المثال التالي:
tab.add_column('col 5', [-123, 43], align='r', valign='t')
print(tab)
في كثير من الحالات، يتم حفظ بياناتك الجدولية في ملف CSV أو قاعدة بيانات. تأتي مكتبة Prettytable مزودة بوظيفة قراءة البيانات من مصدر خارجي مثل ملف CSV، كما هو موضح أدناه:
from prettytable import from_csv
with open('data_file.csv') as table_file:
tab = from_csv(table_file)
بالنسبة لقواعد البيانات التي تحتوي على مكتبة Python التي تتوافق مع Python DB-API – قاعدة بيانات SQLite، على سبيل المثال – يمكنك تحديد كائن المؤشر ثم إنشاء جدول باستخدام دالة from_db_cursor()
من Prettytable. للقيام بذلك، تحتاج فقط إلى حوالي 4 أسطر من كود بايثون.
إحدى ميزات هذه المكتبة هي القدرة على تعديل البيانات الجدولية. والوظيفة الأخرى هي الوظيفة الإضافية التي تمنحك التحكم في البيانات التي سيتم عرضها من الجدول. يتيح لك استخدام التابع get_string()
مع وسيطة fields
التحكم في الأعمدة التي سيتم عرضها. وبالمثل، تسمح لك وسيطتا start
والنهاية بتحديد فهارس الصفوف التي تريد عرضها. تحتوي هذه الطريقة أيضًا على الكلمة الأساسية sortby
، والتي تتيح لك فرز البيانات الجدولية حسب عمود معين.
مثل مكتبة tabulate، تأتي مكتبة Prettytable أيضًا بتنسيقات محددة مسبقًا للمساعدة في نشر الجداول بطرق مختلفة. يمكنك النشر بأسلوب متوافق مع Microsoft Word، على سبيل المثال، وهناك تنسيقات لـ JSON وHTML مع خيارات التخصيص.
إذا كنت تريد مزيدًا من التحكم الدقيق في عرض البيانات الجدولية، فيمكنك أيضًا تحديد الخصائص يدويًا. دعونا نلقي نظرة على مثال أكثر تعقيدًا لتكوين البيانات الجدولية في بايثون:
from prettytable import ALL, FRAME
tab = PrettyTable(table[0])
tab.add_rows(table[1:])
tab.hrules = ALL
tab.vrules = FRAME
tab.int_format = '8'
tab.padding_width = 2
tab.junction_char = '.'
tab.sortby = 'col 2'
print(tab)
الأفكار الختامية حول طباعة البيانات الجدولية بشكل جميل في بايثون
لقد اكتشفنا طرقًا مختلفة لعرض البيانات الجدولية في بايثون. سواء كنت تبحث عن تمثيل سريع للمساعدة في فهم بياناتك أو إعداد جدولك للنشر عبر الإنترنت أو في مجلة علمية، فإن الطرق التي تمت مناقشتها هنا توفر لك الأدوات اللازمة للبدء.
ولكن هناك دائمًا ما يمكن اكتشافه أكثر مما يمكننا تغطيته في المقالة. نحن نشجعك على تجربة مقتطفات التعليمات البرمجية والبدء في إنشاء تصور جميل لبياناتك الجدولية في Python.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.