Ahmed Sharshar
الأعضاء-
المساهمات
348 -
تاريخ الانضمام
-
تاريخ آخر زيارة
آخر الزوار
لوحة آخر الزوار معطلة ولن تظهر للأعضاء
إنجازات Ahmed Sharshar
-
هناك اختلاف كبير بين تصميم المواقع من حيث الخلفية front end أو برمجة المواقع back end ودمج الاثنين سويا هو ما يسمي full stack وبالتفصيل كالتالي: تصميم المواقع والذي يهتم بشكل الموقع وألوانه وكل ذلك يتم باستخدام لغات التصميم وهي HTML و CSS و JavaScript . برمجة المواقع وهي تفاصيل أداء المواقع والذي يرتبط بقواعد البيانات ويؤدي مهمات الموقع وهكذا، وهذا يحتاج لغات برمجة مثل php و python. وفي مجال برمجة المواقع، تعتبر php هي اللغة الأكثر استخداما في هذا المجال لأنها ببساطة مصممة لذل، لذا تعلمها سيكون مطلوبا بشدة وستلقي دعما واسعا لذا هي المفضلة. كذلك استخدام بايثون أصبح سهلا وذلك لأن طريقة كتابتها سهلة، الا انها لم تلق الدعم الازم حتى الان في هذا المجال بينما تمتاز بايثون بعلوم البيانات. لذا كلتا اللغتين مفضلتان الا أن php تكون مطلوبة أكثر.
-
عوضا عن اضافة القيم بشكل يدوي وهو ما لم يتم استخدامه عادة في التطبيقات العملية، يمكنك كذلك اظهار قيمة كل خلية بشكل تلقائي كالتالي: 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}) وتظهر كالتالي: بعدذلك تستطيع دمجها مع أي رموز أخرى كما في الإجابة السابقة.
-
بالاضافة للطريقة السابقة يمكنك استخدام ايضا الطريقة التالية: 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() وتظهر كالتالي: لاحظ اننا يمكننا تغيير لون الإطار كذلك باستخدام الألوان المتاحة في المكتبة، وكذلك عرضة وحجمه.
-
بناء على التوضيح في الإجابة السابقة دعنا نأخذ مثالا على كيفية تطبيق هذا في الرسم: # استدعاء المكتبات 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() وتكون شكل الرسمة كالتالي: لاحظ أننا نستطيع تغيير سواء الوان الرسمة أو الخلفية باستخدام اختصارات الألوان التي تم شرحها مسبقا.
-
يمكنك كذلك استخدام 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() وتظهر كالتالي:
-
يمكنك كذلك استخدام الدالة 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() وتظهر كالتالي:
-
بالإضافة للإجابة السابقة، يمكنك تحيك ال 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") ويكون الخرج:
-
يمكنك تعديل حجم الخط في ال 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 كذلك اذا أردتها في الجانب.
-
بجانب الحل السابق يمكنك كذلك استخدام حلقة تكرارية بسيطة وذلك عوضا عن كتابة كل سطر لكل رسمة بشكل مفصل ، المثال التالي يوضح ذلك: 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() ويكون الناتج كالتالي: لاحظ اننا هنا ثبتنا اسماء الرسومات كلها، لكنك يمكنك تحديد اسم أو رقم لكل رسمة بحيث يكون مميزا لها كذلك.
-
كما قال أستاذ محمد عن الخوارزمية فإن طريقة كتابتها سهلة للغاية هكذا: #عرف متغير يبدأ بالصفر sum = 0 #قم بعمل تكرار من 0 وحتى 101، وذلك لان أخر قيمة ستكون 100 for i in range (0,101): sum = sum + i #قم بجمع كل قيمة جديدة مع ما سبق #أطبع القيمة النهائية لحاصل الجمع print(sum) #الخرج >>> 5050
- 2 اجابة
-
- 1
-
اذا كنت تستخدم نسخة بعد 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() #لاحظ اختلاف شكل الدالة المستخدمه
-
الكود التالي يوضح كيفية تسمية كل شئ على الخريطة الحرارية 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() وكذلك تستطيع التحكم في حجم الخطوط وألوانها وغير ذلك. ويكون الناتج كالتالي:
-
في الاجابة السابقة يمكنك استخدام 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() والناتج هكذا:
-
يمكنك كذلك استخدام اساليب تغيير الحجم في matplot نفسها داخل seaborn كالتالي: from matplotlib import pyplot import seaborn import mylib a4_dims = (11.7, 8.27) df = mylib.load_data() fig, ax = pyplot.subplots(figsize=a4_dims) seaborn.violinplot(ax=ax, data=df, **violin_options) أو استخدام catplot داخل seaborn كالتالي: sns.catplot(data=df, x='xvar', y='yvar', hue='hue_bar', height=8.27, aspect=11.7/8.27)
-
يمكنك تنجنب الخطأ الناتج عن استخدام set_axis_labels عن طريق استخدام matplotlib.pyplot.xlabel و matplotlib.pyplot.ylabel وذلك لان محاور seaborn لها نفس صيغة matplot لذا يصلح استخدام تلك الطريقة معها. كمثال لاستخدامها على الكود السابق: import pandas as pd import seaborn as sns import matplotlib.pyplot as plt fake = pd.DataFrame({'cat': ['red', 'green', 'blue'], 'val': [1, 2, 3]}) fig = sns.barplot(x = 'val', y = 'cat', data = fake, color = 'black') plt.xlabel("Colors") plt.ylabel("Values") plt.title("Colors vs Values") # يمكنك الغاء هذا السطر اذا لم تكن تختاج الى عنوان plt.show(fig) ويكون الناتج: