شعار زيفيرنت

افعلها حتى تصنعها: إنشاء مجموعات بيانات واقعية اصطناعية للعملاء

التاريخ:

افعلها حتى تصنعها: إنشاء مجموعات بيانات واقعية اصطناعية للعملاء
الصورة عن طريق mcmurryjulie على Pixabay

 

أصبحت القدرة على إنشاء واستخدام البيانات التركيبية في المشاريع مهارة لا غنى عنها لعلماء البيانات.

لدي مكتوب في الماضي حول استخدام مكتبة Python مختلق لإنشاء مجموعات البيانات التركيبية الخاصة بك. بدلاً من تكرار أي شيء في هذه المقالة ، دعنا نتعامل مع هذا باعتباره ثانيًا في سلسلة إنشاء بيانات تركيبية لمشاريع علوم البيانات الخاصة بك. هذه المرة ، دعنا ننشئ بعض بيانات طلبات العملاء المزيفة.

إذا كنت لا تعرف أي شيء عن Faker ، أو كيفية استخدامه ، أو ما يمكنك فعله به ، فأقترح عليك ذلك تحقق من المقال السابق لأول مرة.

خطة

 
تتمثل الخطة في تجميع نسخة مصغرة من مجموعة من الجداول التي سيتم استخدامها في حالة العمل في العالم الحقيقي لنظام طلب العميل.

بصرف النظر عن العناصر للشراء ، دعنا نفكر في ما هو مطلوب في مثل هذا السيناريو.

  • العملاء - في ما لا يمثل مفاجأة كبيرة ، إذا كنت ستنشئ نظامًا لتتبع طلبات العملاء ، فستحتاج إلى عملاء
  • بطاقات الائتمان - يحتاج العملاء إلى الدفع مقابل الأشياء ، وفي السيناريو المبسط لدينا لا يمكنهم القيام بذلك إلا باستخدام بطاقات الائتمان
  • الطلبات - سيتكون الطلب من العميل والتكلفة وبطاقة ائتمان للدفع

هذه هي البيانات التي نحتاجها ، لذا فهذه هي البيانات التي سنصنعها. بعد أن تمر بهذا ، ستجد على الأرجح طرقًا لجعلها أكثر قوة ، وأكثر تفصيلاً ، وأكثر تشابهًا مع العالم الحقيقي ، والتي يجب أن تكون قادرًا على المضي قدمًا والقيام بها بنفسك.

الواردات ووظائف المساعد

 
هيا بنا نبدأ. أولا ، الواردات.

من faker import Faker import faker.providers.credit_card استيراد الباندا كما pd استيراد عشوائي من randint الاستيراد العشوائي

بعد ذلك ، دعنا نكتب بعض الوظائف المساعدة التي ستكون مفيدة بعد ذلك بقليل.

def random_n_digits (n): range_start = 10 ** (n-1) range_end = (10 ** n) -1 عودة randint (range_start ، range_end) def unique_rand (rands ، n): new_int = random_n_digits (n) إذا لم يكن new_int في rands: rands.append (new_int) else: unique_rand (rands، n) إرجاع new_int، rands def Generator_cost (): cost = 'digits = randint (1، 4) cost + = str (random_n_digits (digits)) cost + = '.' + str (random_n_digits (2)) تكلفة الإرجاع

الوظيفة الأولى ، random_n_digits، لتوليد عدد صحيح عشوائي من الطول n. مع الإسناد إلى هذه إجابة StackOverflow، انظر المثال أدناه:

def random_n_digits (n): range_start = 10 ** (n-1) range_end = (10 ** n) -1 عودة randint (range_start ، range_end) print (random_n_digits (3)) print (random_n_digits (5)) print (random_n_digits (10)
745 98435 7629340561

سيكون هذا مفيدًا للمعرفات مثل أرقام العملاء والطلبات.

الوظيفة التالية ، unique_rand()، لضمان أن يكون المعرف الذي تم إنشاؤه فريدًا لنظامنا. يأخذ ببساطة قائمة من الأعداد الصحيحة وعددًا صحيحًا يمثل طول عدد صحيح جديد ليتم إنشاؤه ، ويستخدم الوظيفة السابقة لإنشاء عدد صحيح جديد بهذا الطول ، ويتحقق من هذا العدد الصحيح الجديد مقابل القائمة الفريدة ، وإذا كان هذا العدد الصحيح الجديد هو أيضًا فريد من نوعه ، يتم إضافته إلى القائمة.

يتم إعطاء فائدة الوظيفة النهائية من خلال اسمها ، generate_cost(). لإنشاء تكلفة ، تُنشئ الدالة بشكل عشوائي عددًا صحيحًا بين 1 و 4 ، والذي سيصبح طول سلسلة أرقام المكان بالدولار للتكلفة التي تم إنشاؤها. يتم بعد ذلك استخدام random_n_digits () لتوليد عدد صحيح بهذا الطول. بعد ذلك ، تتكرر العملية لإنشاء عدد صحيح مكون من رقمين ، والذي يصبح جزء السنتات العشرية من التكلفة ، إلى الجانب الأيمن من العلامة العشرية. يتم وضع هذين معًا وإعادتهما.

الآن دعنا ننتقل إلى تزويرها.

 

لا تقلق ، حتى إيلين مزيفة.
لا تقلق ، حتى إيلين مزيفة.

 

خلق العملاء

 
مع ذلك ، دعونا نحصل على العملاء. سيشمل عملاؤنا البالغ عددهم 10,000 السمات التالية:

  • هوية الزبون (cust_id) - تم إنشاؤه باستخدام وظائف المساعد الموضحة أعلاه
  • اسم الزبون (name) - تم إنشاؤه باستخدام Faker ؛ use_weighting=True يعني أنه تم إجراء محاولة لجعل تردد القيم المولدة يطابق ترددات العالم الحقيقي (سيتم إنشاء "ليزا" بشكل متكرر أكثر من "Braelynn") ؛ تشير اللغات إلى مكان إنشاء الأسماء
  • عنوان العميل (address) - تم إنشاؤه باستخدام Faker
  • رقم هاتف العميل (phone_number) - تم إنشاؤه باستخدام Faker
  • تاريخ ميلاد العميل (dob) - تم إنشاؤه باستخدام Faker
  • حقل نص ملاحظة العميل (note) - تم إنشاؤه باستخدام Faker

يقوم الكود أيضًا بتخزين معرفات فريدة للعملاء (cust_ids) كقائمة لمقارنة المعرفات التي تم إنشاؤها حديثًا بالمعرفات الموجودة لضمان التفرد. بعد ذلك ، يتم تمرير القاموس المستخدم لتخزين بيانات العميل إلى Pandas DataFrame جديد ، ويتم تخزينه في النهاية في ملف CSV.

fake = Faker (['en_US'، 'en_UK'، 'it_IT'، 'de_DE'، 'fr_FR']، use_weighting = True) customers = {} cust_ids = [] for i in range (0، 10000): customers [ i] = {} عملاء [i] ['cust_id']، cust_ids = unique_rand (cust_ids، 8) customers [i] ['name'] = fake.name () customers [i] ['address'] = وهمي. العنوان (). استبدل ('n'، '،') customers [i] ['phone_number'] = fake.phone_number () customers [i] ['dob'] = fake.date () customers [i] [' note '] = fake.text (). replace (' n '،' ') customer_df = pd.DataFrame (customers) .T print (customer_df) customer_df.to_csv (' customer_data.csv '، index = False)
 cust_id name 0 52287029 Jay Brown 1 85688731 Frédérique Martel 2 95499535 Georges Leclerc 3 28715621 Christian Carpenter 4 94472217 لورين واتس ... ... العنوان Camanni phone_number 9995 Flat 70168635، Hart Islands، East Elliotchester، DY9996N ... 10483280 9997 41868059 شارع Chevalier، 9998 BourgeoisBourg 28049517x9999 26781527 0 Poole way، Taylorstad، KW9 6FT 0117 4960802 Rotonda Olivetti 1، Sandro salentino .. 93506 . (625.665.4731) 5846 2 Jolanda-Seifert-Allee 43، 45 Koblenz +0 0780881522 ... ... ... 3 Strada Molesini 99 Appartamento 48332، Ariasso ven ... +00960 (04254) 4 113 Trubring 91518، 39 Ansbach +353 5623602 9995 3 32 44 0 Strada Casarin 1214960433 Piano 9996، Settimo Giovanni ne ... +86 28785 33 Marga-Trubin-Straße 5/61، 32 Feuchtwangen (08) 79 9997 avenue Susanne Berthelot، 01 Poirier- sur-Ra ... 8 39 dob note 695 7780253-9998-2 Interroger dormi r لكن ذكرياتنا الرائعة ... 4 13495-07310-491854 مشابهة لـ désert dominer lutte. ربع مليون ... 9999 70292-0114-4960083 Occaecati occaecati temporibus a asperiores di ... 0 2004-08-20 Rem itaque maxime dolor eum omnis. Eligendi qu ... 1 2009-07-08 رسم اللون بشكل طبيعي. Modi non autem conseq ... ... ... ... 2 2021-04-17 حالة اللغة الأبيض تستقبل قريبًا. عادة ما تكون ... 3 1999-05-03 Similique quasi eos pariatur اللاحقة حرية ... 4 1997-06-02 Voluptatum Practiceem omnis rem. Beatae al ... 9995 1981-06-06 عالج التصويت منطقة الكنيسة الفقيرة ناقش الحجج بالحمل ... 9996 2020-01-03 اذهب وتذكر المركز نحو قسم الطعام الحقيقي. S ... [9997 صف × 2018 أعمدة]

إنشاء بطاقات ائتمان

 
يحتاج العملاء إلى طريقة للدفع مقابل طلباتهم ، لذلك دعونا نمنحهم جميع بطاقات الائتمان.

في الواقع ، في محاولة للتبسيط ، سننشئ بطاقات ائتمان دون تخصيصها لأي عميل معين. بدلاً من ذلك ، سنقوم فقط بمطابقة العملاء والبطاقات مع الطلبات. يمكنك تعديل هذا بقليل من البراعة لتعيين بطاقات للعملاء ثم التأكد من دفع ثمن الطلبات بالبطاقات المناسبة. سأترك هذا تمرينًا للقراء المهتمين.

ستجد أدناه أنه يتم إنشاء أرقام بطاقات الائتمان الفريدة بنفس الوظائف المساعدة وطريقة أساسية مثل معرفات العميل الفريدة. أرقام بطاقات الائتمان قصيرة بشكل مصطنع ، لكن انطلق واجعلها طويلة كما تريد. يتم إنشاء باقي البيانات باستخدام Faker. يتم بعد ذلك إدخال البيانات في Pandas DataFrame وحفظها كملف CSV لاستخدامها لاحقًا.

Credit_cards = {} cc_ids = [] بالنسبة لـ i في النطاق (0 ، 10000): Credit_cards [i] = {} credit_cards [i] ['cc_id']، cc_ids = unique_rand (cc_ids، 5) credit_cards [i] ['type '] = fake.credit_card_provider () credit_cards [i] [' number '] = fake.credit_card_number () credit_cards [i] [' ccv '] = fake.credit_card_security_code () credit_cards [i] [' expire '] = وهمي. Credit_card_expire () credit_cards_df = pd.DataFrame (Credit_cards) .T print (credit_cards_df) credit_cards_df.to_csv ('credit_card_data.csv' ، index = False)
 cc_id type number ccv expire 0 33257 JCB 16 digit 213177754612892 121/11 24 1 VISA 86707 digit 16 6573538482942722 042/11 31 2 VISA 96668 خانة 16 4780281393619055/671 01 23 VISA 3 خانة 73749 16 3520725757002891 319/04 ... ... ... ... 28 4 تأشيرة 26342 رقم 13 30141856563149/495 10 29 مايسترو 9995 14141/13 4617204802844 640 فيزا 04 رقمًا 27 9996 / 35599 639006455203 384 VISA 12 رقمًا 21 9997 46479/16 503885514391 587 Mastercard 08 24 9998/78536 [19 صف × 4789890563459 أعمدة]

إنشاء أوامر

 
الآن دعونا نجني بعض المال لأنفسنا.

ستكون الطلبات فريدة بنفس طريقة معرفات العملاء وأرقام بطاقات الائتمان السابقة. سنقوم بعد ذلك بربط عميل عشوائي وبطاقة ائتمان عشوائية في أمر ما ، وإنشاء تكلفة عشوائية باستخدام ثالث وظائف المساعدة الأصلية الثلاث التي تم تقديمها مسبقًا.

في ما أصبح خط أنابيب شائعًا ، نقوم بعد ذلك بإنشاء Pandas DataFrame للقاموس ، وحفظ البيانات في ملف بتنسيق CSV.

الطلبات = {} order_ids = [] للأوامر في النطاق (0 ، 1000): الطلبات [i] = {} الطلبات [i] ['order_id'] ، order_ids = unique_rand (order_ids، 10) الطلبات [i] ['cust_id '] = أوامر عشوائية. Orders_df) orders_df.to_csv ('orders.csv' ، الفهرس = خطأ)
 order_id cust_id cc_id cost 0 9526379779 21484387 95840 6471.85 1 6999189530 90073074 75578 5.31 2 6124881941 84882923 13358 962.21 3 7476579071 91911770 22301 60.82 4 4102308607 60614412 ... 28339 8086.96 995 2021016579 42107923 24863 4165.62 996 9279206414 49397693 45436 1.27 997 3378899620 40173623 96470 32.64 [998 صف × 2222207181 أعمدة]

 
النتيجة أنه يجب أن يكون لديك ثلاثة ملفات CSV تشكل محاكاة حقيقية لعملية تجارية فعلية.

ماذا تفعل بالبيانات التركيبية الآن؟ الحصول على الإبداع. أنت استطاع القيام ببعض الدراسة أو تعلم بعض التقنيات أو المفاهيم الجديدة أو القيام بمشروع ما. تتضمن بعض الأفكار الأكثر تحديدًا ما يلي: استخدام Python لإنشاء قاعدة بيانات SQL من هذه البيانات لممارسة مهارات SQL الخاصة بك معها ؛ تنفيذ مشروع استكشاف البيانات ؛ تصور بعض البيانات التركيبية بطرق مثيرة للاهتمام ؛ معرفة نوع المعالجة المسبقة للبيانات التي يمكن أن تأتي بأدائها ، مثل تقسيم أسماء العملاء إلى الأولى والأخيرة ، والتحقق من أن كل عميل لديه بطاقة ائتمان ، مما يضمن عدم قدرة الأطفال الصغار على الشراء.

وتذكر فقط: استمر في تزويرها.

 
 
ماثيو مايو (@ mtmayo13) هو عالم بيانات ورئيس تحرير KDnuggets ، المصدر الأساسي لعلوم البيانات والتعلم الآلي عبر الإنترنت. تكمن اهتماماته في معالجة اللغة الطبيعية ، وتصميم الخوارزميات وتحسينها ، والتعلم غير الخاضع للإشراف ، والشبكات العصبية ، والأساليب الآلية للتعلم الآلي. ماثيو حاصل على درجة الماجستير في علوم الكمبيوتر ودبلوم الدراسات العليا في استخراج البيانات. يمكن الوصول إليه على editor1 في kdnuggets [dot] com.

المصدر: https://www.kdnuggets.com/2022/01/fake-realistic-synthetic-customer-datasets-projects.html

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة