اذهب إلى المحتوى

Ahmed Sharshar

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

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

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

كل منشورات العضو Ahmed Sharshar

  1. المشكلة تكمن في النسخة، حيث أن matplotlib 3.1.1 ظهرت به تلك المشكلة وتمت معالجتها في النسخ الاحقة ابتداء من matplotlib 3.1.2، لذا كل ما عليك فعله هو تحميل النسخة الجديدة وسيعمل كل شئ بصورة صحيحة. أما اذا أردت العمل على تلك النسخة فعليك أن تقوم بضبط أبعاد الصورة بشكل يدوي كالتالي: import seaborn as sns df_corr = someDataFrame.corr() ax = sns.heatmap(df_corr, annot=True) bottom, top = ax.get_ylim() ax.set_ylim(bottom + 0.5, top - 0.5) وهنا وضعنا أبعاد للصورة من أعلى وأسفل بحيث لا يتم قطع أول صف وأخر صف.
  2. الكدو الذي قمت بتجربته يقوم بتقسيم مساحة الرسم الى عدة مساحات صغيرة بجانب بعضها كالتالي: fig, ax = plt.subplots(2, 2) مثلا الكود السابق سيتيح لك رسم شكلين بيانيين في الصف ومثلهما في العمود. الكود التالي يوضح مثالا لكيفية رسم عدة رسومات بجانب بعضها: import matplotlib.pyplot as plt x = range(10) y = range(10) fig, ax = plt.subplots(nrows=2, ncols=2) for row in ax: for col in row: col.plot(x, y) plt.show() وهو كود مختصر عوضا عن أن تقوم بتحديد مكان كل رسمة وعناصرها كالتالي: fig = plt.figure() plt.subplot(2, 2, 1) plt.plot(x, y) plt.subplot(2, 2, 2) plt.plot(x, y) plt.subplot(2, 2, 3) plt.plot(x, y) plt.subplot(2, 2, 4) plt.plot(x, y) plt.show() وبكلتا الطريقيتين يكون شكل الخرج كالتالي: لاحظ وجود رسمتين بكل صف وكل عمود.
  3. ببساطة يمكنك في البداية عمل النموذج الذي تريد تدريبه الأن ثم تقوم بحفظ النموذج على حاسوبك كملف، الملف الذي تحفظه يحتوى على شكل النموذج وكذلك قيم العناصر التي تم تدريبها، بعد ذلك يمكنك تحميل النموذج واستكمال تدريبه، أنظر الكود التالي كمثال: import numpy as np import tensorflow as tf from tensorflow import keras def get_model(): # Create a simple model. inputs = keras.Input(shape=(32,)) outputs = keras.layers.Dense(1)(inputs) model = keras.Model(inputs, outputs) model.compile(optimizer="adam", loss="mean_squared_error") return model model = get_model() # تدريب النموذج test_input = np.random.random((128, 32)) test_target = np.random.random((128, 1)) model.fit(test_input, test_target) # حفظ النوذج بعد تدريبه model.save("my_model") # اعادة تحميل النموذج reconstructed_model = keras.models.load_model("my_model") np.testing.assert_allclose( model.predict(test_input), reconstructed_model.predict(test_input) ) #استكمال أو اعادة تدريب النموذج المدرب reconstructed_model.fit(test_input, test_target)
  4. pound أو الباوند هي عملة بريطانيا وتسمي ايضا الجنية الاسترليني والبرنامج ببساطة يقوم بالتحويل بالعملات عن طريق ضرب أو قسمة كل عملة بقيمتها نسبيا للعملة التي يريد التحويل اليها.
  5. ببساطة pk هي المميز الخاص بالبيانات عن id ، لكن بوجة عام لا فرق كبير بينهما، لكن يفضل استخدام id عن pk حيث انها أسرع بحوالي 7 مرات، أنظر المثال التالي: %timeit obj.id 46 ns ± 0.187 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) %timeit obj.pk 347 ns ± 11.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) لكن لو استخدمت pk فهي تجلب لك العناصر المميزة دون أن يكون اسمها id ام لا، وهذا ما يجعله أبطأ في الاستخدام.
  6. يمكنك استخدام الدالة inspect_checkpoint.py والتي توفر لنا طريقة الحصول على القيم، استخدامها بسيط للغاية أنظر المثال التالي للتوضيح: import tensorflow as tf from tensorflow.python.tools.inspect_checkpoint import print_tensors_in_checkpoint_file latest_ckp = tf.train.latest_checkpoint('./') print_tensors_in_checkpoint_file(latest_ckp, all_tensors=True, tensor_name='') ببساطة تضع الملف الذي تريد أن تخرج فيه القيم وكذلك تضع all_tensor=True وذلك ليخرج لنا قيمة كل المتغيرات مع أسمها.
  7. يمكنك استخدام csvlogger وذلك لحفظ نتائج كل epoch على حدة، استخدامها بسيط حيث تعرف الدالة كالتالي: tf.keras.callbacks.CSVLogger( filename, separator=',', append=False ) واستخدامها بسيط حيث يتم اضافة اسم الملف الذي تريد التحميل فيه ثم وضعها في Model.fit كالتالي: csv_logger = CSVLogger('example.log') model.fit(X_train, Y_train, callbacks=[csv_]) المثال التالي يوضح كيفية استخدامها في عملية التدريب: def train(): data = load_train_data() data = data.reshape((data.shape[0],data.shape[1],data.shape[2],1)) data = data.astype('float32')/255.0 # model selection if args.pretrain: model = load_model(args.pretrain, compile=False) else: if args.model == 'DnCNN': model = models.DnCNN() # تشغيل النموذج model.compile(optimizer=Adam(), loss=['mse']) ckpt = ModelCheckpoint(save_dir+'/model_{epoch:02d}.h5', monitor='val_loss', verbose=0, period=args.save_every) csv_logger = CSVLogger(save_dir+'/log.csv', append=True, separator=',') lr = LearningRateScheduler(step_decay) # التدريب history = model.fit_generator(train_datagen(data, batch_size=args.batch_size), steps_per_epoch=len(data)//args.batch_size, epochs=args.epoch, verbose=1, callbacks=[ckpt, csv_logger, lr]) return model
  8. الاستخدام الصحيح للدالة هو كالتالي: customer.source,created = Source.objects.get_or_create(name="News") وهو يقوم بإرجاع tuple بحيث يكون العنصر الاول هو الكائن الذي تم ارجاعه بينما العنصر الثاني هي قيمة منطقية، اما صواب واما خطأ بحيث تشير الى اذا ما كان تم انشاء الكائن ام لا. المثال التالي يوضح كيفية استخدامها: p, created = country.objects.get_or_create( city='Cairo country='Egypt ) >>> created False لاحظ أنه لم يتم إنشاء التابع لانه لم يتم ذكره بداخل defaults.
  9. يمكنك البحث عن الكلمة بغض النظر عن طريقة كتابتها سواء بحروف كبيرة أو صغيرة ببساطة بالكود التالي: MyClass.objects.filter(name__iexact=search) حيث search هلى الكلمة التي تبحث عنها، أو يمكنك البحث عنها اذا كانت جزءا من كلمة طويلة كالتالي: MyClass.objects.filter(name__icontains=search)
  10. يمكنك عمل تعليقات لعدة سطور بنفس الطريقة التي تقوم بعمل تعليق لسطر واحد باستخدام # كالتالي: # هذا كيف # يمكنك كتابة # تعليق في # عدة سطور أو باستخدام """ """ كالتالي: """ هذا تعليق """
  11. يمكن عمل concat كالتالي: pd.concat([d1, d2, d3, d4, d5]) أو يمكنك كذلك استخدام ignore_index كالتالي: pd.concat([d1, d2, d3, d4, d5], ignore_index=True) أو يمكنك عمل append لكل ال dataframes مرة واحدة كالتالي: import numpy as np import pandas as pd dates = np.asarray(pd.date_range('1/1/2021', periods=8)) df1 = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['D1', 'D2', 'D3', 'D4']) df2 = df1.copy() df3 = df1.copy() df = df1.append([df2, df3])
  12. يمكنك ببساطة استخدام السطر التالي لحذف علامات الموجي + والسالب - وكذلك الحروف الكبيرة أو الصغيرة التي تريد كالتالي: data['result'] = data['result'].map(lambda x: x.lstrip('+-').rstrip('ABCDE')) أو يمكنك استخدام الكود التالي أيضا: df['result'] = df['result'].str.replace(r'\D', '') df time result 1 01:00 52 2 02:00 62 3 03:00 72 4 04:00 82 5 05:00 92
  13. يمكنك استخدام الدالة sort_values وذلك لترتيب قيم العناصر سواء تصاعيا أو تنازليا بناء على العمود الذي تريد، الكود التالي يوضح كيفية استخدامها: In [1]: df.sort_values(by=['2'], ascending=True) Out[1]: 1 2 4 January 1.0 3 February 2.0 7 March 3.0 0 April 4.0 8 May 5.0 6 June 6.0 5 July 7.0 1 August 8.0 11 September 9.0 10 October 10.0 9 November 11.0 2 December 12.0 اذا أردت الترتيب بشكل تنازلي يمكنك جعل ascending=False.
  14. يمكنك استخدام as_type لتغيير شكل الخرج "الفرق" للشكل الذي تريده ببساطة كالتالي: import pandas df = pandas.DataFrame(columns=['start_date','end_date','ans']) df.start_date = [pandas.Timestamp('2021-01-24 13:03:12.050000'), pandas.Timestamp('2021-01-27 11:57:18.240000'), pandas.Timestamp('2021-01-23 10:07:47.660000')] df.end_date = [pandas.Timestamp('2021-01-26 23:41:21.870000'), pandas.Timestamp('2021-01-27 15:38:22.540000'), pandas.Timestamp('2021-01-23 18:50:41.420000')] (df.end_date-df.start_date).astype('timedelta64[h]') وتكون الإجابة على الشكل التالي: 0 58 1 3 2 8 dtype: float64 لاحظ أنه لا وجود للعمود days وانما تم تحويلها الى ساعات.
  15. يمكنك استخدام Series.reindex لضمان عدم تجاهل التواريخ التى عدد الأحداث بها 0 حيث أن groupby تقوم فقط بالاحتفاظ بالقيم التى عددها 1 أو أكثر ، أنظر الكود التالي: import pandas as pd idx = pd.date_range('09-01-2021', '09-30-2021') s = pd.Series({'09-02-2021': 2, '09-03-2021': 10, '09-06-2021': 5, '09-07-2021': 1}) s.index = pd.DatetimeIndex(s.index) s = s.reindex(idx, fill_value=0) print(s) وتكون النتيجة كالتالي: 2021-09-01 0 2021-09-02 2 2021-09-03 10 2021-09-04 0 2021-09-05 0 2021-09-06 5 ... لاحظ أن القيم التى = 0 لم يتم إلغاؤها.
  16. يمكنك حساب النسبة المئوية بسهولة عن طريق عمل groupby لكل المكاتب وقسمتها على المبيعات كالتالي: import numpy as np import pandas as pd np.random.seed(0) df = pd.DataFrame({'city': ['Cairo', 'Dohha', 'Riyadh', 'Dubai'] * 3, 'office_id': range(1, 7) * 2, 'sales': [np.random.randint(100000, 999999) for _ in range(12)]}) state_office = df.groupby(['city', 'office_id']).agg({'sales': 'sum'}) percent = state_office.groupby(level=0).apply(lambda x: 100 * x / float(x.sum())) وتظهر النتيجة بالشكل الأتي: city office_id sales Cairo 2 16.981365 4 19.250033 6 63.768601 Dohha 1 19.331879 3 33.858747 5 46.809373 Riyadh 1 36.851857 3 19.874290 5 43.273852 Dubai 2 34.707233 4 35.511259 6 29.781508
  17. الفرق المحوري بين الدالتين أن size يمكن أن تحتوي على NaN اما count فلا،أنظر المثال التالي للتوضيح أكثر: In [1]: df = pd.DataFrame({'x':[0,1,2,2], 'y':[1,2,4,np.NaN], 'z':np.random.randn(4)}) df Out[46]: a b c 0 0 1 1.067627 1 1 2 0.458084 2 2 NaN -2.238091 3 2 4 1.256943 In [2]: print(df.groupby(['x'])['y'].count()) x 0 1 1 1 2 1 In [3]: print(df.groupby(['x'])['y'].size()) x 0 1 1 1 2 2 لاحظ أنه في count لم يقم بعَد ال NaN بينما قام بعَدها في size.
  18. اذا كنت تريد التعديل على ال dataframe بحيث تقوم بعمل نسخة معدلة مع ابقاء النسخة الأصلية غير معدلة يمكنك عمل التالي: df.xs('C')['D']=20 اما اذا أردت التعديل على ال dataframe الأصلية فيمكنك استخدام الكود التالي: df.at['C', 'D'] = 20 وكذلك يمكنك استخدام set_value كالتالي: df.set_value('C', 'D', 20)
  19. يمكنك استخدام option_context لطباعة كافة ال dataframe كالتالي: with pd.option_context('display.max_rows', None, 'display.max_columns', None): print(df) اذا كنت تستخدم jupyter-notebook يجب أن تستخدم display(df) بدلا من print(df) كذلك يمكنك استخدام الكود التالي: print(df.to_string()) وهذا أيضا سيقوم بطباعة كافة ال dataframe على الشاشة
  20. في البداية قمت بتحويل أسماء الأعمدة الي list وذلك للتأكد من كتابتها بطريقة صحيحة: print (df.columns.tolist()) وقد ظهر أن هناك بعض المسافات الزائدة في أسماء الأعمدة: print (df.columns.tolist()) ['Name', ' Date', ' review'] ^ ^ ويمكنك الاستغناء عن تلك المسافات بالكود التالي: new_df.columns = df.columns.str.strip() أو باستخدام الكود التالي اثناءء تحميل الملف: df = pd.read_csv("D:\\data.csv", skipinitialspace=True)
  21. يمكنك استخدام الكود التالي للتحويل ببساطة: filename_queue = tf.train.string_input_producer(['/Users/Ahmed/Desktop/test.png']) reader = tf.WholeFileReader() key, value = reader.read(filename_queue) my_img = tf.image.decode_png(value) # use decode_png or decode_jpeg decoder based on your files. init_op = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init_op) coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(coord=coord) for i in range(1): image = my_img.eval() print(image.shape) Image.show(Image.fromarray(np.asarray(image))) coord.request_stop() coord.join(threads)
  22. يمكنك استخدام الدالة index لخلق عمود خاص بالفهرس index كالتالي: df['index1'] = df.index أو استخدام الدالة .reset_index كذلك: df.reset_index(level=0, inplace=True) أو استخدامها بالطريقة التالية وفي كل الطرق تكون النتيجة كالتالي: df = df.rename_axis('index').reset_index() print(df) index col1 col2 0 0 384444683 593 1 1 384444684 594 2 2 384444686 596
  23. يظهر الخطأ نتيجة عدم معرفة ال parser برأس البيانات header حيث يعتبر أن أول صف هو بداية البيانات رغم أنه ليس كذلك، لذا يمكنك تجربة الكود التالي لتغطي هذا الخطأ والذي يقوم بعدم اعتبار أول صفين ضمن البيانات: data = pd.read_csv(path, skiprows=2) أو يمكنك ترك pandas تعالج الخطأ بنفسها عن طريق تجنب الصفوف التى تظهر الخطأ كالتالي: df = pd.read_csv('data.csv', error_bad_lines=False)
  24. يمكنك ببساطة استخدام الدالة groupby ثم استخدام count لحساب عدد تكرار كل عنصر كالتالي: In [1]: df = pd.DataFrame({'a':list('abccbac')}) df.groupby('a').count() Out[1]: a c 3 a 2 a 2 أو مباشرة يمكنك استخدام value_counts() لعد عدد القيم كالتالي: In [2]: df['a'].value_counts() Out[2]: c 3 a 2 b 2 اما اذا أردت حساب قيمة تكرار كل عنصر بشكل مفرداً ووضعها في عمود للتكرارات يمكنك استخدام transform كالتالي: In [4]: df['freq'] = df.groupby('a')['a'].transform('count') df Out[4]: a freq 0 a 2 1 b 3 2 c 2 3 c 2 4 b 3 5 a 2 6 b 3
  25. يمكنك البحث عن طريق عمل list بها المقاطع التى تريد البحث عنها ثم استخدام الدالة searchfor كالتالي: >>> searchfor = ['og', 'at'] >>> s[s.str.contains('|'.join(searchfor))] 0 cat 1 hat 2 bat 3 dog كذلك يمكنك استخدام str.contains ووضع المقاطع التي نريد بها مباشرة كالتالي: >>> df = pd.DataFrame(s) >>> df[s.str.contains('og|at')] 0 cat 1 hat 2 bat 3 dog
×
×
  • أضف...