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

Ali Haidar Ahmad

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

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

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

  • عدد الأيام التي تصدر بها

    43

كل منشورات العضو Ali Haidar Ahmad

  1. يمكنك استخدام الدالة replaceAll: public String replaceAll(String regex, String replacement) تقبل هذه الدالة تعبيراً منتظماً "regular expression(regex)" و سلسلة نصية String كوسطاء. حيث تستخدم هذه الدالة للبحث في الـ String الذي قام باستدعائها عن Substring ما لتبديله بنص جديد. حيث أننا نضع مكان الباراميتر regex نص يمثل النص الذي نريد استبداله. ومكان الباراميتر replacement نمرر النص الذي سيحل مكانه. وكلما تم إيجاد نفس قيمة الباراميتر regex سيتم إستبدالها بقيمة الباراميتر replacement. مثال عن هذه الدالة: public class MyClass { public static void main(String args[]) { String str = "casd bla bla bla daerve "; System.out.println( str.replaceAll("bla bla bla", "") ); // :الخرج سيكون //casd daerve } } الآن لحذف سلسلة معينة من ملف باستخدام طريقة replaceAll نتبع مايلي: أولاً: نقوم بتحميل محتويات الملف كسلسلة String. ثانياً: نقوم باستبدل الكلمة المطلوبة (أو الكلمات أو ال substring) بسلسلة فارغة باستخدام replaceAll. ثالثاً: أعد كتابة السلسلة الناتجة في الملف مرة أخرى. كالتالي: import java.io.PrintWriter; import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; public class StringExample { //string يقرأ الملف كسلسلة نصية fileToString نعرف تابع public static String ReadFileAsString(String Path) throws Exception{ Scanner in = new Scanner(new File(Path)); StringBuffer myfile = new StringBuffer(); String read = null; //myfile نبدأ الآن بقراءة الملف وتخزين محتوياته في while (in.hasNextLine()) { read = sc.nextLine(); myfile.append(read); } return myfile.toString(); } // الآن سنطبق خطوتي الحذف والكتابة فوق الملف الأصلي لتعديل محتواه public static void main(String args[]) throws FileNotFoundException { // نضع مسار الملف String Path = "f.txt"; // نمرره للدالة السابقة String file = ReadFileAsString(Path); // الحذف file = file.replaceAll("\\b نضع مانريد حذفه هنا \\b", ""); // نعيد كتابة الملف من جديد بعد التعديل PrintWriter wr = new PrintWriter(new File(Path)); wr.append(file); wr.flush(); // يمكننا الآن عرض محتوياته بعد التعديل كالتالي System.out.println(ReadFileAsString(Path)); } }
  2. يمكنك معرفة الدقة Accuracy و ال loss للنموذج من خلال الدالة evaluate، حيث لها الشكل التالي: Model.evaluate( x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None, callbacks=None, return_dict=False ) # أو بالشكل المختصر Model.evaluate( x=None, y=None ) حيث أن x يشير إلى بيانات الدخل (بيانات الاختبار)، ويجب أن يكون مصفوفة نمباي (أو نوع آخر يشابهها)، أو قائمة من المصفوفات "list of arrays" (في حالة كان نموذجك متعدد الدخل multiple inputs). أو يمكن أن تكون مصفوفة تنسر "TensorFlow tensor" أو قائمة من التنسر "list of tensors" (في حالة كان نموذجك متعدد الدخل multiple inputs). أو قاموس يربط اسم بمصفوفة أو تنسر في حال كان لمصفوفات الدخل أسماء. أو tf.data مجموعة بيانات مكونة من خلال تنسرفلو، بحيث تكون من الشكل (inputs, targets) أو (inputs, targets, sample_weights).أو مولد generator أو تسلسل keras.utils.Sequence بحيث يعيد (inputs, targets) أو (inputs, targets, sample_weights). أما ثاني وسيطة y هي بيانات الهدف أو ال Target أو ال label، وبشكل مشابه لبيانات الدخل x يجب أن تكون Numpy array(s) أو TensorFlow tensor(s)، ويجب أن تكوم متسقة مع x، أي بمعنى إذا كانت x تحوي 400 عينة فهذا يعني أنه يجب أن يكون لدينا 400 target، و لايجب أن يكون x نمباي و y تنسر أو العكس. وفي حالة كانت بيانات الإدخال x من النوع dataset, generator, أو keras.utils.Sequence فلا تقم بتمرير قيم ال y لأنهم يحصلون علبها بشكل تلقائي من خلال x. الوسيط الثالث هو ال batch_size وهو يمثل حجم دفعة البيانات، وهو عدد صحيح يشير إلى عدد العيانات التي سيتم تطبيق خوارزمية الانتشار الأمامي عليها لحساب القيم المتوقعة. في حالة كانت بيانات الإدخال x من النوع dataset, generator, أو keras.utils.Sequence فلاتقم بتحديد هذا الوسيط لأنهم في الأساس يقومون بتوليد باتشات. وأيضاً في حالة لم تقوم بتعيين قيمة للباتش "None" فسأخذ القيمة الافتراضية 32. الوسيط الرابع هو ال verbose لعرض تفاصيل عملية التوقع في حال ضبطه على 0 لن تظهر لك التفاصيل "أي الوضع الصامت"، أما في حالة ضبطه على 1 فهذا يعني أنك تريد أن تظهر لك التفاصيل. الوسيط الخامس sample_weight هو مصفوفة أوزان (اختياري) لعينات التدريب وتستخدم أيضاً لتوزين دالة التكلفة.ويمكنك إما تمرير مصفوفة Numpy مسطحة (1D) بنفس طول عينات الإدخال (ربط 1: 1 بين الأوزان والعينات). أو في حالة البيانات الزمنية ، يمكنك تمرير مصفوفة ثنائية الأبعاد ذات شكل (عينات ، طول التسلسل) ، لتطبيق وزن مختلف لكل خطوة زمنية لكل عينة. وهذه الخاصية غير مدعومة في حالة كانت بيانات الإدخال x من النوع dataset, generator, أو keras.utils.Sequence.. الوسيط steps هو عدد صحيح أو None إجمالي عدد الخطوات (مجموعات العينات) قبل الإعلان عن انتهاء حقبة واحدة وبدء المرحلة التالية. عند التدريب باستخدام موترات الإدخال مثل TensorFlow data tensors ، فإن القيمة الافتراضيةNone تساوي عدد العينات في مجموعة البيانات الخاصة بك مقسوماً على حجم الباتش، أو 1 إذا تعذر تحديد ذلك. إذا كانت x عبارة عن tf.data ، وكانت "steps=" None ، فسيتم تشغيل الحقبة حتى يتم استنفاد مجموعة بيانات الإدخال. وهذه الوسيطة غير مدعومة عندما تكون مدخلاتك هي مصفوفات. الوسيط callbacks هو قائمة من keras.callbacks.Callback وهي قائمة الاسترجاعات المطلوب تقديمها أثناء التقييم. الوسيط الأخير في حالة ضبطه على True ٍيتم تخزين النتائج (التكلفة loss والدقة acc ) في قاموس وإلا سيتم التخزين ضمن قائمة. مثال: from keras.datasets import imdb from keras.preprocessing import sequence max_features = 10000 maxlen = 100 batch_size = 32 print('Loading data...') (input_train, y_train), (input_test, y_test) = imdb.load_data( num_words=max_features) print(len(input_train), 'train sequences') print(len(input_test), 'test sequences') print('Pad sequences (samples x time)') input_train = sequence.pad_sequences(input_train, maxlen=maxlen) input_test = sequence.pad_sequences(input_test, maxlen=maxlen) print('input_train shape:', input_train.shape) print('input_test shape:', input_test.shape) from keras.layers import Dense,Embedding,SimpleRNN model = Sequential() model.add(Embedding(max_features, 32)) model.add(SimpleRNN(32)) model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc']) history = model.fit(input_train, y_train, epochs=4, batch_size=128, validation_split=0.2) ################################ results = model.evaluate(input_test, y_test,verbose=1) # 782/782 [==============================] - 7s 8ms/step - loss: 0.4739 - acc: 0.8250 results # [0.4739033281803131, 0.824999988079071]
  3. ستؤدي إضافة - إلى ترتيبها بترتيب تنازلي. يمكنك أيضًا تعيين هذا عن طريق إضافة ترتيب افتراضي إلى التعريف الخاص بنموذجك. هذا يعني أنه عند إجراء استعلام ، تقوم فقط بعمل MyModel.objects.all () وسيظهر بالترتيب الصحيح. class MyModel(models.Model): check_at = models.DateField() class Meta: ordering = ('-check_at',) كما يمكنك استخدام earliest و latest كالتالي: User.objects.filter(role='user').earliest('check_at') # أو User.objects.filter(role='user').latest('-check_at')
  4. يمكنك القيام بذلك من خلال ModelCheckpoint وهو عبارة عن callback. حيث يقوم بحفظ النموذج الأفضل ضمن ملف h5 ونقوم بتعريفه بالشكل التالي: mc = ModelCheckpoint('best_model.h5') لكن هذا لايكفي حيث يجب علينا أن نقوم بتحديد المقياس الذي ستتم مراقبته لكي يتم حفظ أفضل نموذج على أساسه (غالباً validation accuracy) ويتم ذلك من خلال الوسيط monitor: mc = ModelCheckpoint('best_model.h5', monitor='val_loss') # أو val_acc أي أنه سيتم اعتماد المقياس val_loss لحفظ أفضل نموذج تمت ملاحظته خلال عملية التدريب. أيضاً يجب أن نحدد له ال mode أي الهدف الذي نسعى له وهو إما أقل قيمة للمقياس أو أعلى قيمة له (طبعاً في حالة ال loss سيكون الهدف minimaiz وفي حالة ال accuracy ستكون maximaiz): mc = ModelCheckpoint('best_model.h5', monitor='val_loss', mode='min') أي سيتم حفظ النموذج عند ال epoch الذي يملك أقل قيمة لل validation loss، وفي حالة لم نحدد له ال mod سيأخذ قيمة auto وسيعتبر دوماً min في حالة كانت ال monitor هي loss و max في حالة Accuracy. وأخيراً نحن نريد فقط أفضل نموذج لذا سنستخدم الوسيط save_best_only ونضبطه على True: mc = ModelCheckpoint('best_model.h5', monitor='val_loss', mode='min', save_best_only=True) في حالة عدم ضبطه على true سيتم حفظ النموذج الأفضل مقارنة بال Epoch السابق. والذي قد لايكون الأفضل خلال كامل عملية التدريب. وأخيراً لتطبيقه خلال عملية التدريب يجب أن نقوم بتمريره إلى الدالة fit كالتالي: model.fit(trainX, trainy, validation_data=(testX, testy), epochs=4, verbose=0, callbacks=[mc]) وإذا أردنا معرفة ال Epoch الذي تم حفظ النموذج عنده نضيف الوسيط verbose ونضبطه على 1، وبالتالي يصبح نموذجك كالتالي: from sklearn.datasets import make_moons from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.callbacks import EarlyStopping from tensorflow.keras.callbacks import ModelCheckpoint from matplotlib import pyplot from keras.models import load_model X, y = make_moons(n_samples=100, noise=0.2, random_state=1) n_train = 30 trainX, testX = X[:n_train, :], X[n_train:, :] trainy, testy = y[:n_train], y[n_train:] # define model model = Sequential() model.add(Dense(500, input_dim=2, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) #callback إضافة ال mc = ModelCheckpoint('best_model.h5', monitor='val_accuracy', mode='max', verbose=1, save_best_only=True) # fit model history = model.fit(trainX, trainy, validation_data=(testX, testy), epochs=4, verbose=0, callbacks=[mc]) ويمكنك استخدامه جنباً إلى جمب مع ال Earlystoping كالتالي: from sklearn.datasets import make_moons from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.callbacks import EarlyStopping from tensorflow.keras.callbacks import ModelCheckpoint from matplotlib import pyplot from keras.models import load_model # generate 2d classification dataset X, y = make_moons(n_samples=100, noise=0.2, random_state=1) # split into train and test n_train = 30 trainX, testX = X[:n_train, :], X[n_train:, :] trainy, testy = y[:n_train], y[n_train:] # define model model = Sequential() model.add(Dense(500, input_dim=2, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) es = EarlyStopping(monitor='val_loss', mode='min', verbose=1) mc = ModelCheckpoint('best_model.h5', monitor='val_accuracy', mode='max', verbose=1, save_best_only=True) # fit model history = model.fit(trainX, trainy, validation_data=(testX, testy), epochs=4, verbose=0, callbacks=[mc,es])
  5. بمكنك القيام بذلك من خلال الدالة mask: import pandas as pd import numpy as np df = pd.DataFrame({'Date' : ['11/8/2011', '11/9/2011', '11/10/2011', '11/11/2011', '11/12/2011'], 'Event' : ['Dance', 'Painting', 'Dance', 'Dance', 'Painting']}) df """ Date Event 0 11/8/2011 Dance 1 11/9/2011 Painting 2 11/10/2011 Dance 3 11/11/2011 Dance 4 11/12/2011 Painting """ #Hip-Hop بال Dance استبدال ال df['Event'].mask(df['Event'] == 'Dance', 'Hip-Hop', inplace=True) #لكي يتم التعديل على البيانات الأصلية inplace==True نضع df """ Date Event 0 11/8/2011 Hip-Hop 1 11/9/2011 Painting 2 11/10/2011 Hip-Hop 3 11/11/2011 Hip-Hop 4 11/12/2011 Painting """ ,أو باستخدام df.where: import pandas as pd import numpy as np df = pd.DataFrame({'Date' : ['11/8/2011', '11/9/2011', '11/10/2011', '11/11/2011', '11/12/2011'], 'Event' : ['Dance', 'Painting', 'Dance', 'Dance', 'Painting']}) #Hip-Hop بال Dance استبدال ال m = df.Event == 'Dance' df.where(~m,other='Hip-Hop') أو من خلال np.where: import pandas as pd import numpy as np df = pd.DataFrame({'Date' : ['11/8/2011', '11/9/2011', '11/10/2011', '11/11/2011', '11/12/2011'], 'Event' : ['Dance', 'Painting', 'Dance', 'Dance', 'Painting']}) #Art بال Painting استبدال ال df['Event'] = np.where((df.Event == 'Painting'),'Art',df.Event) df """ Date Event 0 11/8/2011 Dance 1 11/9/2011 Art 2 11/10/2011 Dance 3 11/11/2011 Dance 4 11/12/2011 Art """ إضافة للطريقة التي قدمها أحمد وهي iloc: import pandas as pd import numpy as np df = pd.DataFrame({'Date' : ['11/8/2011', '11/9/2011', '11/10/2011', '11/11/2011', '11/12/2011'], 'Event' : ['Dance', 'Painting', 'Dance', 'Dance', 'Painting']}) #Hip-Hop بال Dance استبدال ال df.loc[(df.Event == 'Dance'),'Event']='Hip-Hop' df """ Date Event 0 11/8/2011 Hip-Hop 1 11/9/2011 Painting 2 11/10/2011 Hip-Hop 3 11/11/2011 Hip-Hop 4 11/12/2011 Painting """
  6. يمكنك استخدام select_related عندما يكون الكائن الذي ستحدده كائن واحد، وبالتالي OneToOneField أو ForeignKey. ويمكنك استخدام prefetch_related عندما تحصل على "set" من الأشياء ، لذا ManyToManyFields كما ذكرت أو reverse ForeignKeys.والمثال التالي لتفهم أكثر المقصود ب reverse ForeignKeys: class mymodel(models.Model): pass class my2(models.Model): f = ForeignKey(mymodel) # علاقة Forward ForeignKey my2.objects.select_related('f').all() # Reverse ForeignKey mymodel.objects.prefetch_related('modelb_set').all() الفرق هو أن select_related يقوم بضم SQL وبالتالي يحصل على النتائج مرة أخرى كجزء من الجدول من خادم SQL. من ناحية أخرى ، ينفذ prefetch_related استعلامًا آخر وبالتالي يقلل من الأعمدة الزائدة في الكائن الأصلي أي يكافئ mymodel في المثال التالي. يمكنك استخدام prefetch_related لأي شيء يمكنك استخدام select_related له. الاختلافات أو المفاضلات بينهما هي أنه يجب على prefetch_related إنشاء وإرسال قائمة بالمعرفات للاختيار مرة أخرى إلى الخادم، وقد يستغرق ذلك بعض الوقت. حيث أن Django يرسل قائمة ويطلب فيها تحديد بعض المعلومات. وفي هذه الحالة إذا كانت البيانات التي تم جلبها مسبقاً متناثرة، فقد يكون هذا أمراً جيداً، ولكن إذا كانت أقرب إلى one-to-one، فقد يؤدي ذلك إلى إهدار الكثير من الاتصالات. أيضاً هناك فائدة ل prefetch_related إضافية تتمثل في استخدام كائن واحد لتمثيل كل كائن في قاعدة البيانات. أما باستخدام select_related، سيتم إنشاء كائنات مكررة في Python لكل كائن "parent". وكما نعلم فإن الكائنات في Python تحجز حجم كبير من الذاكرة، وهذا أمر سلبي.
  7. يجب أن تجعل الفلتر ديناميكياً ثم عليك استخدام Lambda مثلاً: from django.db.models import Q brands = ['ABC','DEF' , 'GHI'] queryset = Product.objects.filter(reduce(lambda x, y: x | y, [Q(brand=item) for item in brands])) بحيث أن: reduce(lambda x, y: x | y, [Q(brand=item) for item in brands]) <==> Q(brand=brands[0]) | Q(brand=brands[1]) |.....
  8. الغراف Graph يقوم بتمثيل العمليات والمتغيرات التي قمت بتعريفها في الكود وتحديد العلاقات بينها على شكل عقد تشكل مجتمعةً البيان أي ال Graph . وهو لا يحسب أي شيء، ولا يحتفظ بأي قيم، هو فقط يحدد العمليات التي حددتها في التعليمات البرمجية الخاصة بك (الكود الذي كتبته). أما Session تسمح بتنفيذ ال graph أو جزء منه إذ يقوم بتنفيذ كل العقد node الموجودة في البيان وينفذ العمليات فيه ويحمل القيم الفعلية للنتائج والمتغيرات الوسيطية . ويقوم بتخصيص الموارد (على جهاز واحد أو أكثر) لتنفيذ هذه المهام. مثلاً هنا لدينا غراف مع 3 متغيرات و 3 عمليات: graph = tf.Graph() with graph.as_default(): variable = tf.Variable(42, name='foo') # تعريف متغير initialize = tf.global_variables_initializer() # يعين القيمة الأولية 42 لهذا المتغير assign = variable.assign(13) # يعين القيمة الجديدة 13 لهذا المتغير أيضاً تجدر الملاحظة إلى أنك لست مجبراً على كتابة أول سطرين، فتنشرفلو تقوم بإنشاء غراف افتراضي لك (أي لست مضطراً لتعريفه بنفسك). الآن لتنفيذ أي من العمليات الثلاث المحددة، نحتاج إلى إنشاء جلسة لهذا البيان. حيث ستخصص الجلسة أيضاً ذاكرة لتخزين القيمة الحالية للمتغير variable. with tf.Session(graph=graph) as sess: sess.run(initialize) sess.run(assign) print(sess.run(variable)) # Output: 13 أيضاً يجب أن تدرك أن قيمة المتغير صالحة فقط خلال جلسة واحدة. إذا حاولنا الاستعلام عن القيمة بعد ذلك في جلسة ثانية، فسيقوم TensorFlow بإعطاء خطأ لأن المتغير لم تتم تهيئته هناك. with tf.Session(graph=graph) as sess: print(sess.run(variable)) # Error: Attempting to use uninitialized value foo وبالطبع ، يمكننا استخدام البيان في أكثر من جلسة، حيث علينا فقط إعادة تهيئة المتغيرات مرة أخرى. لكن ستكون القيم في الجلسة الجديدة مستقلة تماماً عن الأولى: with tf.Session(graph=graph) as sess: sess.run(initialize) print(sess.run(variable)) # Output: 42
  9. لاتوجد طريقة في تنسرفلو للقيام بذلك مع أنها مهمة، لذلك نلجأ لاستخدام Timeline للحصول على وقت التنفيذ لكل عقدة في البيان، لكنن هنا يجب أن نقوم بضبط كل من الوسيطيتين options و run_metadeta كما في المثال التالي: import tensorflow as tf from tensorflow.python.client import timeline x = tf.random_normal([500, 500]) y = tf.random_normal([500, 500]) res = tf.matmul(x, y) with tf.Session() as sess: run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE) # نقوم بتشغيل الغراف مع خيار التتبع الكامل run_metadata = tf.RunMetadata() sess.run(res, options=run_options, run_metadata=run_metadata) #Timeline الآن نقوم بإنشاء كائن من til = timeline.Timeline(run_metadata.step_stats) t = til.generate_chrome_trace_format() #json ثم تخزينه في ملف with open('time.json', 'w') as file: file.write(t)
  10. عندما تقوم بتثبيت tensorflow-gpu جنباً إلى جنب مع نسخة tensorflow السابقة ، ينشأ هذا الخطأ، ولحلها يجب أن تقوم بالتالي: 1.قم بإزالة حزم tensorflow-gpu و tensorflow و tensorflow-base من Anaconda. باستخدام: conda remove tensorflow-gpu tensorflow tensorflow-base 2. أعد تثبيت تنسرفلو: conda install tensorflow #if you want to install cpu version conda install tensorflow-gpu # gpu version
  11. إضافة لما ذكره أحمد، يمكنك استخدام set options بالشكل التالي لعرض أقصى مايمكن: pd.set_option('display.max_columns', None) pd.set_option('display.expand_frame_repr', False) pd.set_option('max_colwidth', -1) ويمكنك أيضاً استخدام option_context كالتالي: with pd.option_context('display.max_rows', None, 'display.max_columns', None): print (df)
  12. كذلك يمكنك استخدام خاصية group_by : query = Members.objects.all().query query.group_by = ['role'] results = QuerySet(query=query, model=Members) وحسب التوثيق، يمكنك أيضاً استخدام regroup للتجميع حسب السمات "attributes". أيضاً هذه الطريقة لا تعمل بالشكل الذي تتوقعه إذا لم تكن قائمة القواميس مرتبة بمفتاح، لذا قم بفرز قائمتك (أو ال query set الخاصة بك) حسب مفتاح grouper قبل تمريرها إلى regroup: cities = [ {'name': 'Mumbai', 'population': '19,000,000', 'country': 'India'}, {'name': 'Calcutta', 'population': '15,000,000', 'country': 'India'}, {'name': 'New York', 'population': '20,000,000', 'country': 'USA'}, {'name': 'Chicago', 'population': '7,000,000', 'country': 'USA'}, {'name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'}, ] ... ... {% regroup cities by country as country_list %} <ul> {% for country in country_list %} <li>{{ country.grouper }} <ul> {% for city in country.list %} <li>{{ city.name }}: {{ city.population }}</li> {% endfor %} </ul> </li> {% endfor %} </ul> """ # الناتج سيكون كالتالي: .. .. USA New York: 20,000,000 Chicago: 7,000,000 Japan Tokyo: 33,000,000 """
  13. يمكنك القيام بذلك من خلال الدالة strftime: import pandas as pd df = pd.DataFrame({"Date": ["26-12-2007", "27-12-2007", "28-12-2007"]}) df # لاحظ أن ترنيبها هو أيام-شهر-سنة #أي: dd-mm-yy """ Date 0 26-12-2007 1 27-12-2007 2 28-12-2007 """ # إذا أردنا جعلها # yy-mm-dd df["Date"] = pd.to_datetime(df["Date"]).dt.strftime('%Y-%m-%d') df """ Date 0 2007-12-26 1 2007-12-27 2 2007-12-28 """ # إذا أردنا جعلها # mm-dd-yy df["Date"] = pd.to_datetime(df["Date"]).dt.strftime('%m-%d-%Y') df """ Date 0 12-26-2007 1 12-27-2007 2 12-28-2007 """ أيضاً تمكنك هذه الدالة من تغيير شكل الفاصل بينهم: import pandas as pd df = pd.DataFrame({"Date": ["26-12-2007", "27-12-2007", "28-12-2007"]}) df """ Date 0 26-12-2007 1 27-12-2007 2 28-12-2007 """ # لتغييره إلى باكسلاش "/" df["Date"] = pd.to_datetime(df["Date"]).dt.strftime('%Y/%m/%d') df """ Date 0 2007/12/26 1 2007/12/27 2 2007/12/28 """ كما يمكنك القيام بذلك بالشكل التالي من خلال الوسيطة dayfirst بحيث عند ضبطها على False يكون اليوم في النهاية أو ضبطها على True ليكون في البداية وهذه هي أبسط وأسهل طريقة: import pandas as pd df = pd.DataFrame({"Date": ["26-12-2007", "27-12-2007", "28-12-2007"]}) df df["Date"]=pd.to_datetime(df["Date"].astype(str), dayfirst = False) df """ Date 0 2007-12-26 1 2007-12-27 2 2007-12-28 """
  14. تحدث هذه المشكلة لأنه تم إنشاء دليل .npm في الدليل الرئيسي الخاص بك مع سماحيات الجذر root. على الأرجح، كان أول أمر npm قمت بتشغيله هو sudo npm -g وأنت الآن تحاول تثبيت npm في دليل محلي. لذا لحل مشكلتك: sudo chown -R yourusername ~/.npm
  15. لإظهار رسالة flash ، يجب عليك تثبيت وحدة flash في مشروعك باستخدام cmd: npm install express-session --save npm install cookie-parser --save npm install connect-flash --save الآن عليك إضافة بعض التعليمات البرمجية إلى ملف app.js للوصول إلى هذه الوحدات: var session = require('express-session'); var cookieParser = require('cookie-parser'); var flash = require('connect-flash'); var app = express(); app.use(cookieParser('secret')); app.use(session({cookie: { maxAge: 60000 }})); app.use(flash()); \\flash الآن إنشاء رسالة req.flash('success', 'Registration successfully'); res.locals.message = req.flash(); \\ لعرضها <% if(locals.message){ %> <div class="alert alert-success" role="alert"> <strong>Well done!</strong> <%=message.success%> </div> <% } %>
  16. الإجابة التي قدمها sam ممتازة. أيضاُ يمكنك القيام بذلك كالتالي: import multer from 'multer'; import * as nanoid from 'nanoid'; import * as mime from 'mime-types'; const storage = multer.diskStorage({ destination: function (req,file,cb) { cb(null, '/path/to/uploads/'); }, filename: function (req,file,cb) { // يولد اسمًا فريدًا.ليس مقاومًا للتصادم ولكنه فريد بما يكفي للتطبيقات صغيرةالحجم let id = nanoid(); // تحتاج إلى استخدام نوع الملف لأن اسم الملف قد لا يكون له امتداد على الإطلاق let ext = mime.extension(file.mimetype); cb(null, `${id}.${ext}`); } });
  17. إضافة لما قدمه sam في حالة عدم تعيين req.xhr ، على سبيل المثال في أطر عمل مثل Angularjs ، حيث تمت إزالته ، فيجب عليك أيضًا التحقق مما إذا كان بإمكان الرأس قبول استجابة JSON (أو XML ، أو أيًا كان ما يرسله XHR كاستجابة بدلاً من HTML ). if (req.xhr || req.headers.accept.indexOf('json') > -1) { // الخاص بك هنا xhr إرسال رد } else { // أرسل ردك الطبيعي هنا }
  18. المستندات الخاصة بـ app.render: تقوم بتقديم عرض مع رد اتصال callback يستجيب مع السلسلة المقدمة. هذا هو المتغير على مستوى التطبيق لـ res.render () ، وبخلاف ذلك يتصرف بنفس الطريقة. أما المستندات لـ res.render: تقوم بتقديم عرض مع رد اتصال يستجيب مع السلسلة المقدمة. عند حدوث خطأ بعد ذلك ، يتم استدعاء (err )next. عندما يتم توفير رد نداء ، يتم تمرير كل من الخطأ المحتمل والسلسلة المقدمة ، ولا يتم تنفيذ أي استجابة تلقائية كيف يمكنني معرفة متى أستخدم أيهما؟ فيما يلي بعض الاختلافات: يمكنك استدعاء app.render على مستوى الجذر و res.render داخل مسار / برمجية وسيطة فقط. يقوم app.render دائمًا بإرجاع html في وظيفة رد الاتصال ، بينما يقوم res.render بذلك فقط عندما تحدد وظيفة رد الاتصال كمعامل ثالث. إذا اتصلت بـ res.render بدون المعامل الثالث / وظيفة رد الاتصال ، فسيتم إرسال html المقدم إلى العميل برمز الحالة . // app.render app.render('index', {title: 'res vs app render'}, function(err, html) { console.log(html) }); // logs the following string (from default index.jade) <!DOCTYPE html><html><head><title>res vs app render</title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>res vs app render</h1><p>Welcome to res vs app render</p></body></html> // res.render // بدون الوسيط الثالث app.get('/render', function(req, res) { res.render('index', {title: 'res vs app render'}) }) //لكنه يرسله للعميل index.jade يعرض أيضًا //GET /render على text/html مع الحالة 200 والنص من نوع المحتوى // res.render مع الوسيط الثالث app.get('/render', function(req, res) { res.render('index', {title: 'res vs app render'}, function(err, html) { console.log(html); res.send('done'); }) }) //index.jade ويرسل "تم" إلى العميل بدلاً من ذلك من محتوى app.render يسجل مثل يستخدم res.render app.render داخليًا لتقديم ملفات القوالب. يمكنك استخدام وظائف التقديم لإنشاء رسائل بريد إلكتروني بتنسيق html. اعتماداً على هيكل التطبيق الخاص بك ، قد لا يكون لديك دائماً إمكانية الوصول إلى الكائن app . // على سبيل المثال داخل مسار خارجي // app.js var routes = require('routes'); app.get('/mail', function(req, res) { // app object is available -> app.render }) app.get('/sendmail', routes.sendmail); // routes.js exports.sendmail = function(req, res) { // can't use app.render -> therefore res.render }
  19. الطريقة الأفضل هي استخدام القوائم: # نقوم بإنشاء قائمة فارغة data = [] #هو تابع تقوم من خلاله بالوصول لبياناتك function for a, b, c in function(): # تقوم بإضافة البيانات سطر سطر كالتالي data.append([a, b, c]) # نقوم بتحويل القائمة السابقة إلى داتافريم ونضع أسماء الأعمدة التي نريدها df = pd.DataFrame(data, columns=['lib', 'qty1', 'qty2']) أما الطرق الأخرى فهي غير عملية عندما تكون بياناتك كبيرة لأنها تأخذ وقت كبير.
  20. إضافة لما قدمه أحمد يمكنك القيام بذلك بالشكل التالي من خلال الدالة json_normalize: import pandas as pd from ast import literal_eval import numpy as np df = {'Station ID': [8809, 8810, 8811, 8812, 8813, 8814], 'Pollutants': ['{"a": "46", "b": "3", "c": "12"}', '{"a": "36", "b": "5", "c": "8"}', '{"b": "2", "c": "7"}', '{"c": "11"}', '{"a": "82", "c": "15"}', np.nan]} df = pd.DataFrame(df) df """ Station ID Pollutants 0 8809 {"a": "46", "b": "3", "c": "12"} 1 8810 {"a": "36", "b": "5", "c": "8"} 2 8811 {"b": "2", "c": "7"} 3 8812 {"c": "11"} 4 8813 {"a": "82", "c": "15"} 5 8814 NaN """ # '{}' نقوم باستبدال القيم المفقودة ب # وذلك إذا كان العمود عبارة عن سلاسل نصية # df.Pollutants = df.Pollutants.fillna('{}') df.Pollutants = df.Pollutants.fillna({i: {} for i in df.index}) # {} أما إذا لم يكن سلاسل نصية نستبدله ب # تحويل عمود القواميس إلى قواميس # تخطي هذا السطر، إذا كان العمود يحتوي على قاموس df.Pollutants = df.Pollutants.apply(literal_eval) # لتقسيم العمود json_normalize الآن نقوم بتطبيق التابع #لدمج الناتج مع بيانات الداتافريم الأساسي join ثم بعدها نقوم بتطبيق df = df.join(pd.json_normalize(df.Pollutants)) #Pollutants الآن نحذف العمود df.drop(columns=['Pollutants'], inplace=True) # نستعرض البيانات df """ Station ID a b c 0 8809 46 3 12 1 8810 36 5 8 2 8811 NaN 2 7 3 8812 NaN NaN 11 4 8813 82 NaN 15 5 8814 NaN NaN NaN """
  21. إذا كانت قيمة ترغب في الحصول عليها لكل طلب & نموذج ، فإن استخدام معالج السياق "context processor" يكون أفضل حل كالتالي.. ننشئ ملف Context_processors.py في مجلد التطبيق. ولنفترض أنني أريد الحصول على قيمة ADMIN_PREFIX_VALUE في كل سياق: from django.conf import settings def _m(request): # إرجاع القيمة التي تريدها كقاموس يمكنك إضافة قيم متعددة هناك return {'ADMIN_MEDIA_URL': settings.ADMIN_MEDIA_PREFIX} #settings.py أضف معالج السياق إلى ملف TEMPLATES = [{ # .. 'OPTIONS': { 'context_processors': [ # .. "your_app.context_processors.admin_media", ], } }] # view في ال RequestContext استخدم #بهذا تلقائياً render shortcut الخاص بك لإضافة معالجات السياق التي تريدها ضمن القالب الذي تريده. يقوم from django.shortcuts import render def admin_media(request): return render(request, "index.html") # وأخيراً ضمن القالب الخاص بك ... <a href="{{ ADMIN_MEDIA_URL }}">path to admin media</a> ... كما أن أبسط طريقة تتجلى باستخدام custom template tag: from django import template from django.conf import settings register = template.Library() # settings value @register.simple_tag def settings_value(name): return getattr(settings, name, "") # ونستخدم {% settings_value "LANGUAGE_CODE" %}
  22. في تنسرفلو 1، التعليمة x.assign(1) لاتقوم بتعيين القيمة 1 ل x ولكنه يقوم بإنشاء tf.Operation (عملية) وبالتالي عليك القيام بتنفيذها بشكل صريح (أي sess.run(x.assign(1))) . * ويمكنك استخدام استدعاء Operation.run أو Session.run لتنفيذ هذه العملية : my_opration = a.assign(7) s.run(my_opration) a.eval() # ###################### أو ################ my_opration = a.assign(7) my_opration.op.run()` a.eval() # 7 أما في الإصدارات الأحدث من تنسرفلو أصبح بإمكانك استخدام x.assign مباشرةً لتحديث القيمة: a.assign(5) a.eval() # 5 كما يمكنك استخدام tf.Variable.load(value, session) لإسناد قيمة جديدة لكن فقط في TF1، فقد تم إلغاؤها في TF2: import tensorflow as tf a = tf.Variable(0) s = tf.Session() s.run(tf.global_variables_initializer()) print(s.run(a)) # 0 a.load(7, s) print(sess.run(a)) # 7
  23. إضافة لماقدمه سامح أشرف يمكنك استخدام WhiteNoise حيث يسمح WhiteNoise لتطبيق الويب الخاص بك بخدمة الملفات الستاتيكية الخاصة به ، مما يجعله وحدة قائمة بذاتها يمكن نشرها في أي مكان دون الاعتماد على nginx أو Amazon S3 أو أي خدمة خارجية أخرى: # أولاُ قم بتثبيتها # pip install WhiteNoise==2.0.6 # :الخاص بك إلى wsgi.py وقم بتغيير ملف from django.core.wsgi import get_wsgi_application from whitenoise.django import DjangoWhiteNoise application = get_wsgi_application() application = DjangoWhiteNoise(application) لكن عموماً لاينصح باستخدام هذه الطريقة في حفظ الملفات الستاتيكية، إليك الطريقة التالية التي تتمثل بإضافة السطر التالي إلى urls.py: from django.views.static import serve ثم: #urlpatterns أضف العنوانين التاليين في url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}), url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}), #DEBUG=FALSE قابلين للوصول عندما static و media الآن سيكون كل من ملفي
  24. في الرابط التالي يوجد شرح لسبب وجود 3 ملفات (في الإصدارات المختلفة): أما بالنسبة لاستعادة النموذج فيمكنك القيام بذلك كالتالي: with tf.Session() as sess: saver = tf.train.import_meta_graph('/tmp/model.ckpt.meta') saver.restore(sess, "/tmp/model.ckpt") بدلاً من ذلك ، يمكنك القيام بالتالي: # أعد إنشاء نفس المتغيرات بالضبط v1 = tf.Variable(..., name="v1") v2 = tf.Variable(..., name="v2") ... # checkpoint الآن قم بتحميل ال with tf.Session() as sess: saver = tf.train.Saver() saver.restore(sess, "/tmp/model.ckpt")
  25. الموديول tf.app.flags هو تابع توفره Tensorflow لتنفيذ ال "command line flags" أي إشارات سطر الأوامر لكود Tensorflow الخاص بك. على سبيل المثال ، فإن الكود الذي صادفته سيقوم بما يلي: flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.') تحدد الوسيطة الأولى اسم العلامة flag بينما تحدد الثانية القيمة الافتراضية في حالة عدم تحديد العلامة flag أثناء تنفيذ الملف. لذلك إذا قمت بتشغيل ما يلي: $ python fully_connected_feed.py --learning_rate 1.00 سيتم ضبط معدل التعلم على 1.00 وسيبقى 0.01 إذا لم يتم تحديد قيمة للعلم flag. ومايزال تجريبي لذا قد لاتجد توثيقاً لذا يوصى بتنفيذ تحليل العلم "flag parsing" باستخدام argparse أو أي مكتبة أخرى تفضلها.
×
×
  • أضف...