عند استخدام بيانات تحوي مسميات باللغة العربية في بايثون فأنها تعرض بشكل معكوس ومفصل خصوصاً في الرسوم البيانية. في هذا المقال سوف نستعرض بالخطوات كيفية التعامل مع هذه المشكلة وذلك من خلال الخطوات التالية:
اولاً: تحميل الحزم التالية:
In:
!python -m pip install arabic_reshaper
!python -m pip install python-bidi
ثانيا: استخدام الكود التالي:
In:
from arabic_reshaper import arabic_reshaper
from bidi.algorithm import get_display
ثالثاً: تعريف الدالة التالية:
In:
def f(x):
out=get_display( arabic_reshaper.reshape(x))
return(out)
مثال(1): سوف نقوم بتصوير مجموعة بيانات تحوي مسميات عربية كما يلي:
In:
import matplotlib.pyplot as plt
labels = f('متزوج'), f('أعزب')
sizes = [80, 14]
colors = ['gold', 'lightcoral']
explode = (0.2, 0)
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True)
plt.title(f('الحالة الإجتماعية للعملاء'))
plt.axis('equal')
plt.show()
والذي يعطي النتيجة التالية:
ملاحظة: يمكن تحسين الخط من خلال تحميل الخط majalla ثم استخدام الكود التالي:
In: import os from matplotlib import font_manager as fm, rcParams fpath = os.path.join(rcParams["datapath"], "C:\\Desktop\\majalla.ttf") prop = fm.FontProperties(fname=fpath,size=20)
حيث يتم تغيير موقع الخط في الكود اعلاه (الموضح بالأزرق) ليتناسب مع موقع الخط على جهازك. ثم بعد ذلك نستخدم الكود:
In:
labels = f('متزوج'), f('أعزب')
sizes = [80, 14]
colors = ['gold', 'lightcoral']
explode = (0.2, 0)
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True,textprops={'fontproperties':prop})
plt.title(f('الحالة الإجتماعية للعملاء'),fontproperties=prop)
plt.axis('equal')
plt.show()
والذي يعطي النتيجة:
مثال(2): نفرض أن لدينا البيانات mydata والتي تحوي بيانات عربية وبالتالي لتمثيلها سوف يتم اتباع الخطوات التالية:
1. استيراد البيانات كما يلي:
In: import pandas as pd mydata = pd.read_csv("C:\\Desktop\\mydata.csv") mydata Out: name mark أحمد 3 محمد 5 خالد 6 علي 4 عبدالله 9
2. تطبيق الدالة المعرفة f على عمود الأسم (name) كما يلي:
In:
mydata['name']=mydata['name'].apply(f)
3. استخدام الكود التالي:
In:
mydata.plot.bar(x='name',y='mark',legend=False)
plt.ylabel(f('الدرجة من 10'),fontproperties=prop)
plt.xlabel(f('الطلاب'),fontproperties=prop)
plt.xticks(fontproperties=prop)
plt.show()
والذي يعطي النتيجة: