في هذه المقالة ، سوف نغطي أساسيات بايثون. إننا نقترب أكثر فأكثر من الهدف ، بشكل عام ، سنبدأ قريبًا العمل مع المكتبات الرئيسية لعلوم البيانات وسنستخدم TensorFlow (لكتابة ونشر الشبكات العصبية ، ستفهم التعلم العميق).
تركيب
يمكن تنزيل Python من python.org. ومع ذلك ، إذا لم يكن مثبتًا بالفعل ، فبدلاً من ذلك
أوصي حزمة توزيع Anaconda ، التي تتضمن بالفعل معظم المكتبات اللازمة للعمل في مجال علم البيانات.
إذا كنت لا تستخدم توزيع Anaconda ، فاحرص على تثبيت مدير حزمة النقاط ، مما يجعل من السهل تثبيت حزم الطرف الثالث ، حيث سنحتاج إلى بعض منها. يجدر أيضًا تثبيت غلاف IPython التفاعلي الأكثر سهولة في الاستخدام. ضع في اعتبارك أن توزيع أناكوندا يأتي مع نقطة و IPython.
بيضاء
تستخدم العديد من لغات البرمجة كتل التعليمات البرمجية التفاضلية.
الأقواس. يتم استخدام المسافة البادئة في Python:
هذا يجعل الكود سهل القراءة ، لكن في نفس الوقت يجعله يتبع التنسيق. يتم تجاهل المساحة الموجودة داخل الأقواس والأقواس المربعة ، مما يسهل كتابة التعبيرات المطوّلة:
وسهلة لقراءة التعليمات البرمجية:
لمتابعة البيان ، يتم استخدام الخط المائل العكسي في السطر التالي ، ومع ذلك ، نادرًا ما يتم استخدام هذا السجل:
two_plus_three = 2 + \ 3
رمز التنسيق مع مسافة بيضاء يجعل من الصعب نسخ ولصق رمز في قذيفة بيثون. على سبيل المثال ، محاولة نسخ التعليمات البرمجية التالية:
for i in [ 1, 2, 3, 4, 5] :
في قذيفة بيثون القياسية سوف يلقي خطأ:
لأنه بالنسبة للمترجم الفوري ، تشير السلسلة الفارغة إلى نهاية كتلة التعليمات البرمجية مع حلقة for.
لدى IPython وظيفة سحرية "٪ لصق" تقوم بلصق كل شيء على الحافظة بشكل صحيح ، بما في ذلك مسافة بيضاء.
الوحدات النمطية (استيراد المكتبات)
بعض مكتبات بيئة البرمجة القائمة على Python لا يتم تحميلها افتراضيًا. من أجل استخدام هذه الأدوات ، يجب عليك استيراد الوحدات النمطية التي تحتوي عليها.
تتمثل إحدى الطرق في استيراد الوحدة النمطية نفسها:
import re my_regex = re.compile ("[0-9]+",re.I)
هنا
re هو اسم الوحدة النمطية التي تحتوي على وظائف وثوابت للعمل مع التعبيرات العادية. من خلال استيراد الوحدة النمطية بأكملها بهذه الطريقة ، يمكنك الوصول إلى الوظائف عن طريق بادئة لهم بـ re.
إذا كان هناك بالفعل متغير يحمل الاسم في الكود ، فيمكنك استخدام الاسم المستعار للوحدة النمطية:
import re as regex my_regex = regex.compile("[0-9)+",regex.I)
يتم استخدام الاسم المستعار أيضًا في الحالات التي يكون فيها الوحدة النمطية المستوردة لها اسم مرهق أو عندما تصل الوحدة بشكل متكرر إلى الوحدة النمطية.
على سبيل المثال ، عند تصور البيانات بناءً على وحدة
matplotlib ، عادةً ما تكون
استخدم الاسم المستعار القياسي التالي:
import matplotlib.pyplot as plt
إذا كنت بحاجة إلى الحصول على عدة قيم محددة من الوحدة النمطية ، فيمكنك استيرادها بشكل صريح واستخدامها دون قيود:
from collections import defaultdict , Counter lookup = defaultdict(int) my_counter = Counter()
وظائف
الدالة هي قاعدة تأخذ وسائط إدخال صفرية أو أكثر وتُرجع النتيجة المقابلة. في Python ، يتم تعريف الوظائف عادةً باستخدام عبارة def:
def double() : """, , docstring, , . , 2""" return * 2
يتم التعامل مع وظائف بايثون ككائنات من الدرجة الأولى. هذا يعني أنه يمكن تخصيصها للمتغيرات وتمريرها إلى وظائف أخرى بنفس الطريقة مثل أي وسيطات أخرى:
بالإضافة إلى ذلك ، يمكنك بسهولة إنشاء وظائف قصيرة مجهولة المصدر أو تعبيرات lambda:
= apply_to_one(lambda : + 4)
يمكن تعيين تعبيرات Lambda للمتغيرات. ومع ذلك ، يوصى باستخدام عامل التشغيل def:
another double = lmbd : 2 *
بالإضافة إلى ذلك ، يمكنك تمرير الوسائط الافتراضية إلى معلمات الدوال ، والتي يجب تحديدها فقط عند توقع قيمة غير القيمة الافتراضية:
def my_print (message="oe " ): print (message ) my_print ( "pe")
يُنصح أحيانًا بتحديد الوسائط حسب الاسم:
في المستقبل ، سيتم استخدام الوظائف في كثير من الأحيان.
خطوط
سلاسل الأحرف (أو تسلسل الأحرف) على كلا الجانبين مقصورة على علامات اقتباس مفردة أو مزدوجة (يجب أن تتطابق):
single_quoted_string = ' '
الخط المائل العكسي يستخدم لترميز الأحرف الخاصة. على سبيل المثال:
tab_string = "\t"
إذا كنت بحاجة إلى الخط المائل العكسي نفسه ، والذي يحدث مباشرة
في أسماء الدليل في نظام التشغيل Windows ، ثم باستخدام r '"' يمكنك إنشاء
سلسلة غير منسقة :
not_tab_string = r"\t"
يتم إنشاء كتل متعددة الأسطر من النص باستخدام الثلاثي واحد (أو
مزدوج) يقتبس:
multi_line_string = """ . """
استثناءات
عندما يحدث خطأ ما ، يلقي بيثون استثناء. تتسبب الاستثناءات غير المعالجة في توقف البرنامج بشكل غير متوقع. تتم معالجة الاستثناءات باستخدام
try و
باستثناء العبارات :
try: print (0 / 0) except ZeroDivisionError : rint ( " ")
على الرغم من أن استخدام الاستثناءات في العديد من لغات البرمجة يعتبر أسلوبًا سيئًا في البرمجة ، إلا أنه في بيثون لا يوجد ما يدعو للقلق بشأن استخدامه لتنظيف الشفرة ، وفي بعض الأحيان سنفعل ذلك.
القوائم
ربما أهم بنية البيانات في بيثون هي قائمة. هذه مجرد مجموعة مرتبة (أو مجموعة) ، على غرار صفيف بلغات البرمجة الأخرى ، ولكن مع وظائف إضافية.
integer_list = [1, 2, ]
يمكنك ضبط القيمة والوصول إلى العنصر التاسع من القائمة باستخدام الأقواس المربعة:
= list(range (10))
بالإضافة إلى ذلك ، تستخدم الأقواس المربعة في "قص" القوائم:
first_three = [:]
لدى Python بيان ln يتحقق مما إذا كان عنصر ما ينتمي إلى قائمة:
1 ln [1, 2, 3]
يتكون الاختيار من عرض كل العناصر واحدًا تلو الآخر ، وبالتالي فإن الأمر يستحق استخدامه فقط عندما يكون معروفًا على وجه اليقين أن القائمة صغيرة أو لا يهم المدة التي تستغرقها عملية التحقق.
قوائم سهلة السلسلة معا:
= [1, 2, 3] . extend ( [ 4, 5, 6] )
إذا كنت تريد ترك القائمة x بدون تغيير ، فيمكنك استخدام إضافة القوائم:
= [1, 2, 3] = + [4, 5, 6]
عادة ، يتم إضافة عنصر واحد إلى القوائم في عملية واحدة:
= [1, 2, 3] x.append (0)
غالبًا ما يكون من المناسب فك ضغط قائمة إذا كنت تعرف عدد العناصر التي تحتوي عليها:
, = [1, 2]
إذا لم يكن عدد العناصر هو نفسه على جانبي التعبير ، فسيتم عرض رسالة خطأ ValueError.
بالنسبة للقيمة المهملة ، عادةً ما يتم استخدام الشرطة السفلية:
_, = [1, 2]
الصفوف
Tuples غير قابل للتغيير (أو غير قابل للتغيير) أبناء عمومة القوائم.
يمكن القيام بكل شيء تقريبًا بكل ما يمكن القيام به من خلال قائمة دون إجراء تغييرات عليها. بدلاً من الأقواس المربعة ، يتم صنع مجموعة من الأقواس الدائرية ، أو يمكنهم الاستغناء عنها على الإطلاق:
my_list = [1, 2]
توفر Tuples طريقة ملائمة لإرجاع قيم متعددة من الوظائف:
تُستخدم Tuples (والقوائم) أيضًا في مهام متعددة:
, = 1, 2
قواميس
القاموس أو القائمة النقابية هي بنية بيانات أساسية أخرى.
في ذلك ، ترتبط القيم بالمفاتيح ، والتي تتيح لك استرداد القيمة المقابلة لمفتاح معين بسرعة:
empty_dict = {}
يمكن الوصول إلى قيمة المفتاح باستخدام أقواس مربعة:
rigory_aleksee = grades[ "Grigoriy"]
إذا حاولت طلب قيمة غير موجودة في القاموس ، فستتلقى رسالة خطأ KeyError:
try: kates_grade = grades [ "Kate "] except eyError: rint ( " ! " )
يمكنك التحقق من وجود مفتاح باستخدام عامل التشغيل:
grigoriy_has_grade = "Grigoriy" in grades
تحتوي القواميس على طريقة get () والتي ، عند البحث عن مفتاح مفقود ، بدلاً من طرح استثناء ، تقوم بإرجاع القيمة الافتراضية:
grigoriy_grade = grades. get ( "Grigoriy ", 0)
يتم تنفيذ تعيين قيمة المفتاح باستخدام الأقواس المربعة نفسها:
grades [ "Tim" ] = 99
وغالبا ما تستخدم القواميس كوسيلة سهلة لتمثيل الهيكلية
المعلومات:
tweet = { "user" : " grinaleks", "text" : " - ", " retweet_count" : 100, "hashtags " : [ "# data", " #science", " #datascience " , " #awesome", "#yolo" ] }
بالإضافة إلى البحث عن مفاتيح فردية ، يمكنك الاتصال بالجميع مرة واحدة:
tweet_keys = tweet.keys()
يجب أن تكون المفاتيح غير قابلة للتغيير ؛ على وجه الخصوص ، لا يمكن استخدام القوائم كمفاتيح. إذا كنت بحاجة إلى مفتاح مركب ، فمن الأفضل استخدام tuple أو إيجاد طريقة لتحويل المفتاح إلى سلسلة.
القاموس الافتراضي
دع المستند يحتاج إلى حساب الكلمات. الحل الواضح للمشكلة هو إنشاء قاموس تكون فيه المفاتيح عبارة عن كلمات ، والقيم هي ترددات الكلمات (أو عدد مرات تواجد الكلمات في النص). أثناء فحص الكلمات ، إذا كانت الكلمة الحالية موجودة بالفعل في القاموس ، فإن ترددها يزداد ، وإذا كانت غير موجودة ، تتم إضافتها إلى القاموس:
بالإضافة إلى ذلك ، يمكنك الاستفادة من طريقة تسمى "من الأفضل أن تسأل عن المغفرة من الإذن" وتحصل على الخطأ عند محاولة الوصول إلى المفتاح المفقود:
word_ counts = { } for word in document : try: word_counts [word] += 1 except eyError : word_counts [word] = 1
الخدعة الثالثة هي استخدام طريقة get () ، التي تتغلب بأمان على الموقف باستخدام المفاتيح المفقودة:
word_counts = { } for word in document : previous_count = word_counts.get (word, 0) word_counts [word] = previous_count + 1
كل هذه التقنيات مرهقة بعض الشيء ، ولهذا السبب يُنصح باستخدام القاموس defaultdict (والذي يُسمى أيضًا القاموس بـ: القيمة الافتراضية). يبدو وكأنه قاموس عادي ، باستثناء ميزة واحدة - عند محاولة الوصول إلى مفتاح غير موجود فيه ، فإنه يضيف أولاً قيمة له باستخدام الدالة دون وسيطات ، والتي يتم توفيرها عند إنشائه. لاستخدام قواميس defaultdict ، يجب استيرادها من وحدة المجموعات:
from collections import defaultdict word_counts = defaultdict(int)
بالإضافة إلى ذلك ، فإن استخدام قواميس defaultdict يكون عمليًا عند العمل مع القوائم والقواميس وحتى مع الوظائف المعرفة من قبل المستخدم:
dd_list = defaultdict (list)
ستكون هذه الميزات مطلوبة عند استخدام القواميس لـ "الجمع"
نتائج لمفتاح معين وعندما يكون من الضروري تجنب تكرار
يتحقق من وجود مفتاح في القاموس.
قاموس العداد
تحوِّل فئة فرعية من قواميس العداد سلسلة من القيم إلى كائن يشبه الافتراضي (int) ، حيث يتم تعيين المفاتيح للترددات ، أو بشكل أكثر دقة ، يتم عرض المفاتيح (خريطة) في التردد.
سيتم استخدامه بشكل رئيسي عند إنشاء رسوم بيانية:
from collections import Counter = Counter([0,1,2,0])
وظيفتها تجعل من السهل حل مشكلة حساب ترددات الكلمات:
يحتوي قاموس العداد على الأسلوب most_common () ، والذي يكون مفيدًا غالبًا:
مجموعات
بنية مجموعة البيانات أو تعيينها عبارة عن مجموعة من العناصر غير مرتبة دون تكرار:
s = set ()
سيتم استخدام الكثير لسببين. أولاً ، العملية في مجموعات سريعة جداً. إذا كنت بحاجة إلى التحقق من مجموعة كبيرة من العناصر للانتماء إلى تسلسل معين ، فإن بنية بيانات المجموعة تكون مناسبة لهذا بشكل أفضل من القائمة:
السبب الثاني هو الحصول على عناصر فريدة في مجموعة البيانات:
item_list = [1, 2, 3, 1, 2, 3]
سيتم استخدام الكثير بشكل أقل تواترا من القواميس والقوائم.
هياكل التحكم
كما هو الحال في معظم لغات البرمجة الأخرى ، يمكن تنفيذ الإجراءات حسب الحالة باستخدام عبارة if:
if 1 > 2: message " 1 2 . . . " elif 1 > 3: message "elif 'else if '" else: message = " , else "
بالإضافة إلى ذلك ، يمكنك استخدام عامل التشغيل أحادي السطر أحادي السطر ، والذي سيُستخدم أحيانًا لاحقًا:
parity = "" if % 2 === else " "
بيثون لديه حلقة whlle:
= 0 while < 10: print (x, " 10") += 1
ومع ذلك ، سيتم استخدام حلقة for في كثير من الأحيان مع المشغل في:
for in range (lO) : print (x, " 10" ) 51
إذا كنت بحاجة إلى منطق تحكم حلقة أكثر تعقيدًا ، يمكنك استخدام العوامل
continue break: for 1n range (10) : 1f == 3: continue
نتيجة لذلك ، ستتم طباعة 0 و 1 و 2 و 4.
حقيقة
تعمل المتغيرات المنطقية في Python بنفس الطريقة التي تعمل بها معظم لغات البرمجة الأخرى ، مع استثناء واحد فقط - يتم تكبيرها:
one_is_less_than_two = 1 < 2
للإشارة إلى قيمة غير موجودة ، يتم استخدام كائن بلا خاص ، والذي يتوافق مع القيمة الخالية بلغات أخرى:
= None print (x == None )
يمكن لـ Python استخدام أي قيمة عند توقع نوع منطقي منطقي. جميع العناصر التالية هي خطأ منطقي:
- كاذبة؛ .
- لا شيء؛
- set () (set):
- [] (قائمة فارغة) ؛
- {} (قاموس فارغ) ؛
الى حد كبير كل شيء آخر يعتبر صحيحا. هذا يجعل من السهل استخدام إذا البيانات للتحقق من قوائم فارغة. أسطر فارغة ، قواميس فارغة ، إلخ. في بعض الأحيان ، يؤدي هذا إلى أخطاء يصعب التعرف عليها ، إذا لم تأخذ في الاعتبار ما يلي:
s = some_function_that_returns_a_string ()
إليك طريقة أسهل للقيام بالشيء نفسه:
first_char = s and s [0]
لأن العامل المنطقي وإرجاع القيمة الثانية ، إذا كانت الأولى صحيحة ، والقيمة الأولى ، إذا كانت خاطئة. وبالمثل ، إذا كانت x في التعبير التالي إما رقمًا ، أو ربما لا شيء ، فإن النتيجة ستكون رقماً بطريقة أو بأخرى:
safe = or 0
تأخذ الدالة Python المضمنة جميعها قائمة وتُرجع True فقط عندما يكون كل عنصر قائمة صحيحًا ، وتُرجع أي وظيفة مضمنة إلى حقيقة عندما يكون عنصر واحد على الأقل صحيحًا:
all ( [True, 1, { 3 }])