Ahmed Sharshar

الأعضاء
  • المساهمات

    348
  • تاريخ الانضمام

  • تاريخ آخر زيارة

السُّمعة بالموقع

100 Excellent
  1. لفهم أي لغة برمجة بشكل صحيح يجب في البداية أن تتعلم الأساسيات، وأقصد بتعلم الأساسيات هي البدء من بداية اللغة مع تعلم متطلباتها الأولية، وأثناء تعلم اللغة يجب عليك التطبيق خطوة بخطوة على كل شئ جديد تحصله حتى لو كان بسيطا، فتلك الخطوات البسيطة تساعدك على بناء اساسات قوية، وعند نهاية كل مرحلة تقوم بتنفيذ مشروع يربط كل تلك الأجزاء البسيطة سويا. أيا كانت اللغة التي تنوى تعلمها فلها مجتمع متكامل توجد عليه المشكلات التى واجهت الأخرين وحلها، في الغالب تجد مشكلتك مشابهة لمشاكل أخرى، وان كانت جديدة، يمكنك طرحها وسيقومون بالرد عليك سريعا. في نهاية كل محتوى، قم بتنفيذ تطبيق عملى على ما تعلمته وذلك حتى تعرف فائدة ما تعلمته على أرض الواقع وتعرف المشكلات وتكون خبرات في بيئة العمل المستقبلية لك.
  2. ببساطة علامة = واحدة تعني assign والذي تعني تعيين قيمة لمتغير مثلا : x = 5 تعني أن قيمة x تم تعيينها في الذاكرة ب 5. اما == فهي تعني التأكد اذا كانت قيمتان تساويان بعضهما أم لا، فهي مثل علامات المقارنة > أو < فمثلا: x = 6 #تعيين قيمة ل x ب 6 x == 7 >> False في المثال السابق قمنا بتعيين قيمة للمتغير x ب 6 ، بعد ذلك استخدمنا == لنسأل اذا ما كانت قيمة x تساوي 7 أم لا ، وبما أنها لا تساوي 7 لذلك فانها تقوم بارجاع False أي خطأ، أما اذا كانت تساوي القيمة ذاتها فسوف تقوم بارجاع True. و تستخدم == بكثرة في المقارنات المنطقية والتي نستخدمها بداخل if أوwhile كالتالي: x = 6 while x == 6: print('hello') هنا بما ان x = 6 لذا سيظل يطبع hello الى ما لا نهاية.
  3. هناك اختلاف كبير بين تصميم المواقع من حيث الخلفية front end أو برمجة المواقع back end ودمج الاثنين سويا هو ما يسمي full stack وبالتفصيل كالتالي: تصميم المواقع والذي يهتم بشكل الموقع وألوانه وكل ذلك يتم باستخدام لغات التصميم وهي HTML و CSS و JavaScript . برمجة المواقع وهي تفاصيل أداء المواقع والذي يرتبط بقواعد البيانات ويؤدي مهمات الموقع وهكذا، وهذا يحتاج لغات برمجة مثل php و python. وفي مجال برمجة المواقع، تعتبر php هي اللغة الأكثر استخداما في هذا المجال لأنها ببساطة مصممة لذل، لذا تعلمها سيكون مطلوبا بشدة وستلقي دعما واسعا لذا هي المفضلة. كذلك استخدام بايثون أصبح سهلا وذلك لأن طريقة كتابتها سهلة، الا انها لم تلق الدعم الازم حتى الان في هذا المجال بينما تمتاز بايثون بعلوم البيانات. لذا كلتا اللغتين مفضلتان الا أن php تكون مطلوبة أكثر.
  4. عوضا عن اضافة القيم بشكل يدوي وهو ما لم يتم استخدامه عادة في التطبيقات العملية، يمكنك كذلك اظهار قيمة كل خلية بشكل تلقائي كالتالي: import seaborn as sns import pandas as pd import numpy as np # قاعدة البيانات df = pd.DataFrame(np.random.random((10,10)), columns=["a","b","c","d","e","f","g","h","i","j"]) # رسم الخريطة sns.heatmap(df, annot=True, annot_kws={"size": 7}) وتظهر كالتالي: بعدذلك تستطيع دمجها مع أي رموز أخرى كما في الإجابة السابقة.
  5. بالاضافة للطريقة السابقة يمكنك استخدام ايضا الطريقة التالية: for _, spine in res.spines.items(): spine.set_visible(True) المثال التالي يوضح كيف نضيف اطاراً حول الأربع أركان: import seaborn as sns import numpy as np import pandas as pd import matplotlib.pyplot as plt data = np.array([[25.55535942, 1.99598017, 9.78107706], [ 4.95758736, 39.68268716, 16.78109873], [ 0.45401194, 0.10003128, 0.6921669 ]]) df = pd.DataFrame(data=data) fig = plt.figure(num=None, figsize=(10, 10), dpi=80, facecolor='w', edgecolor='k') cmap = sns.cubehelix_palette(light=1, as_cmap=True) res = sns.heatmap(df, annot=True, vmin=0.0, vmax=100.0, fmt='.2f', cmap=cmap, cbar_kws={"shrink": .82}) res.invert_yaxis() #اظهار الاطار for _, spine in res.spines.items(): spine.set_visible(True) plt.title('Seaborn heatmap - with frame') plt.savefig('seaborn_heatmap_with_frame_01.png') plt.show() ويظهر الاطار كالتالي: بالإضافة لهذا يمكننا وضع إطار حول كل خليه داخل الرسمة كذلك بنفس الطريقة كالتالي: import seaborn as sns import numpy as np import pandas as pd import matplotlib.pyplot as plt data = np.array([[25.55535942, 1.99598017, 9.78107706], [ 4.95758736, 39.68268716, 16.78109873], [ 0.45401194, 0.10003128, 0.6921669 ]]) df = pd.DataFrame(data=data) fig = plt.figure(num=None, figsize=(10, 10), dpi=80, facecolor='w', edgecolor='k') cmap = sns.cubehelix_palette(light=1, as_cmap=True) res = sns.heatmap(df, annot=True, vmin=0.0, vmax=100.0, fmt='.2f', cmap=cmap, cbar_kws={"shrink": .82}, linewidths=0.1, linecolor='gray') #اظهار الاطار res.invert_yaxis() plt.title('Seaborn heatmap - with frame') plt.savefig('seaborn_heatmap_with_frame_and_cell_border_01.png') plt.show() وتظهر كالتالي: لاحظ اننا يمكننا تغيير لون الإطار كذلك باستخدام الألوان المتاحة في المكتبة، وكذلك عرضة وحجمه.
  6. بناء على التوضيح في الإجابة السابقة دعنا نأخذ مثالا على كيفية تطبيق هذا في الرسم: # استدعاء المكتبات import seaborn as sns import matplotlib.pyplot as plt # استخدام اللون الرمادي كخلفية) sns.set(style="darkgrid") df = sns.load_dataset('iris') #ضبط اللون الخاص بكل رسمة my_pal = {"versicolor": "g", "setosa": "b", "virginica":"m"} sns.boxplot(x=df["species"], y=df["sepal_length"], palette=my_pal) plt.show() وتكون شكل الرسمة كالتالي: لاحظ أننا نستطيع تغيير سواء الوان الرسمة أو الخلفية باستخدام اختصارات الألوان التي تم شرحها مسبقا.
  7. يمكنك كذلك استخدام cbar_ax لوضع مكان شريط الألوان كما تريد، وبالتالي يمكنك تغيير أبعاده وكذلك مكانه في الصورة كالتالي: import seaborn as sns import pandas as pd import numpy as np import matplotlib.pylab as plt uniform_data = np.random.rand(10, 12) fig, ax = plt.subplots(1, 1) #مكان وحجم ال colorbar cbar_ax = fig.add_axes([.905, .3, .05, .3]) sns.heatmap(uniform_data, ax=ax, cbar_ax = cbar_ax, cbar=True) plt.show() وتظهر كالتالي:
  8. يمكنك كذلك استخدام الدالة facet.set مع استخدام المعامل axis_bgcolor وذلك لظبط ألوان الخلفية كالتالي: import seaborn as sns import matplotlib.pyplot as plt # loading dataset data = sns.load_dataset("iris") # draw lineplot facet = sns.lineplot(x="sepal_length", y="sepal_width", data=data) facet.set(axis_bgcolor='k') plt.show() أو استخدام الدالة sns.set(style = color) لضبط لون الخلفية بسهولة كالتالي: import seaborn as sns import matplotlib.pyplot as plt # loading dataset data = sns.load_dataset("iris") # ضبط اللون sns.set(style = "darkgrid") facet = sns.lineplot(x="sepal_length", y="sepal_width", data=data) plt.show() وتظهر كالتالي:
  9. بالإضافة للإجابة السابقة، يمكنك تحيك ال legend ليكون خارج الصورة في الناحية التي تريد عن طريق استخدام bbox_to_anchor() كالتالي: import seaborn as sns import matplotlib.pyplot as plt sns.set(style="whitegrid") titanic = sns.load_dataset("titanic") g = sns.factorplot("class", "survived", "sex", data=titanic, kind="bar", size=6, palette="muted", legend=False) g.despine(left=True) plt.legend(bbox_to_anchor=(1.02, 1),loc='upper left') # أعلى يسار الصور لكن خارجها g.set_ylabels("survival probability") ويكون الخرج:
  10. يمكنك تعديل حجم الخط في ال legend عن طريق استخدام setp كالتالي: import seaborn as sns import matplotlib.pylab as plt sns.set_style("whitegrid") tips = sns.load_dataset("tips") ax = sns.stripplot(x="sex", y="total_bill", hue="day", data=tips, jitter=True) plt.setp(ax.get_legend().get_texts(), fontsize='22') # لنص legend plt.setp(ax.get_legend().get_title(), fontsize='32') # لعنوان legend ax.set_title("Title", fontsize = 40) # تحديد حجم العنوان plt.show() وتظهر كالتالي: ويمكنك تحديد مكان ال legend كذلك اذا أردتها في الجانب.
  11. بجانب الحل السابق يمكنك كذلك استخدام حلقة تكرارية بسيطة وذلك عوضا عن كتابة كل سطر لكل رسمة بشكل مفصل ، المثال التالي يوضح ذلك: import numpy as np # البيانات المراد رسمها df = pd.DataFrame({'a' :['one','one','two','two','one','two','one','one','one','two'], 'b': np.random.randint(1,8,10), 'c': np.random.randint(1,8,10), 'd': np.random.randint(1,8,10), 'e': np.random.randint(1,8,10)}) names = df.columns.drop('a') ncols = len(names) fig, axes = plt.subplots(1,ncols) #حلقة تكرارية للرسم for name, ax in zip(names, axes.flatten()): sns.boxplot(y=name, x= "a", data=df, orient='v', ax=ax) plt.tight_layout() ويكون الناتج كالتالي: لاحظ اننا هنا ثبتنا اسماء الرسومات كلها، لكنك يمكنك تحديد اسم أو رقم لكل رسمة بحيث يكون مميزا لها كذلك.
  12. كما قال أستاذ محمد عن الخوارزمية فإن طريقة كتابتها سهلة للغاية هكذا: #عرف متغير يبدأ بالصفر sum = 0 #قم بعمل تكرار من 0 وحتى 101، وذلك لان أخر قيمة ستكون 100 for i in range (0,101): sum = sum + i #قم بجمع كل قيمة جديدة مع ما سبق #أطبع القيمة النهائية لحاصل الجمع print(sum) #الخرج >>> 5050
  13. اذا كنت تستخدم نسخة بعد 0.11 فالكود التالي قد يحل المشكلة: import seaborn as sns import numpy as np data = np.random.normal(size=100) path = "/path/to/img/plot.png" plot = sns.displot(data) plot.fig.savefig(path) plot.fig.clf() #أكمل رسمتك الخاصة واذا كنت تحب التكرار فيمكنك استخدام for وذلك عوضا عن وضع كل رسمة أسفل الثانية ثم وضع الفاصل وهكذا: import seaborn as sns import numpy as np for i in range(3): data = np.random.normal(size=100) path = "/path/to/img/plot2_{0:01d}.png".format(i) plot = sns.displot(data) plot.fig.savefig(path) plot.fig.clf() اما اذا كانت النسخة قبل ذلك فيجب تعديل طريقة كتابته قليلا هكذا: import seaborn as sns import numpy as np data = np.random.normal(size=100) path = "/path/to/img/plot.png" plot = sns.distplot(data) plot.get_figure().savefig(path) plot.get_figure().clf() #لاحظ اختلاف شكل الدالة المستخدمه
  14. الكود التالي يوضح كيفية تسمية كل شئ على الخريطة الحرارية heatmap، حيث يمكنك وضع عنوان رئيسي بجانب تسمة المحاور مع وضع تسمية للتدريج الحراري في الجانب هكذا: import pandas as pd import seaborn as sns from matplotlib import pyplot as plt df = pd.DataFrame({'A':(10,20,30,40), 'B':(10,20,30,40), 'C':(90,110,130,200)}) ax = sns.heatmap(df.pivot_table(index='B', columns='A', values='C'), cbar_kws={'label': 'Your Title'})#عنوان التدريج الحراري plt.title('Title', fontsize = 20) # عنوان مع خط 20 plt.xlabel('X axis', fontsize = 15) # عنوان المحور السيني مع خط 15 plt.ylabel('Y axis', fontsize = 15) # عنوان المحور الصادي مع خط 15 plt.show() وكذلك تستطيع التحكم في حجم الخطوط وألوانها وغير ذلك. ويكون الناتج كالتالي:
  15. في الاجابة السابقة يمكنك استخدام plt.ylim و plt.xlim كدوال من matplot لضبط قيم المحاور، وبنفس الطريقة يمكنك كذلك استخدام ()ax.set مع استخدام ylim للمحور الصادر و xlim للمحور السيني كالتالي: from matplotlib import pyplot as plt import seaborn as sns plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True sns.set_style("whitegrid") tips = sns.load_dataset("tips") ax = sns.boxplot(x="day", y="total_bill", data=tips) ax.set(ylim=(0, 40))#بداية ونهاية قيم المحور الصادى plt.show() والناتج هكذا: