Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save amir-saniyan/7f1e8d596d898b7df1a0e767c8ba4a1c to your computer and use it in GitHub Desktop.

Select an option

Save amir-saniyan/7f1e8d596d898b7df1a0e767c8ba4a1c to your computer and use it in GitHub Desktop.
Python for Genomic Data Science

01_week-one/01_module-1/04_lecture-1-overview-of-python

01 — Overview of Python

مرور کلی زبان پایتون در علم داده‌های ژنومی

خلاصه کلی

در این درس، زبان برنامه‌نویسی Python معرفی می‌شود و نقش آن در حوزه Genomic Data Science و Bioinformatics بررسی می‌گردد. هدف اصلی این بخش، آشنایی اولیه با دلیل اهمیت یادگیری برنامه‌نویسی برای زیست‌شناسان، اصول طراحی یک برنامه، ویژگی‌های زبان Python و تاریخچه توسعه آن است.

اهداف یادگیری

پس از مطالعه این درس، باید بتوانید:

  • توضیح دهید چرا یک زیست‌شناس ممکن است به برنامه‌نویسی نیاز داشته باشد.
  • مراحل طراحی یک برنامه را قبل از نوشتن کد درک کنید.
  • مفهوم Pseudocode (شبه‌کد) را توضیح دهید.
  • ویژگی‌های اصلی Python را بشناسید.
  • تفاوت زبان‌های Interpreted و Compiled را بیان کنید.
  • تاریخچه و نسخه‌های مختلف Python را بشناسید.
  • دلیل محبوبیت Python در زیست‌محاسبات (Bioinformatics) را درک کنید.

مفاهیم کلیدی


1. Programming for Genomic Data Science

برنامه‌نویسی برای علم داده‌های ژنومی

تعریف ساده

استفاده از زبان‌های برنامه‌نویسی برای تحلیل، پردازش و مدیریت داده‌های زیستی مانند توالی‌های DNA، RNA و داده‌های ژنومی.

توضیح دقیق

این دوره برای افرادی طراحی شده است که:

  • دانشمند کامپیوتر نیستند.
  • پیش‌زمینه برنامه‌نویسی ندارند.
  • در حوزه‌هایی مانند زیست‌شناسی مولکولی و ژنتیک فعالیت می‌کنند.

هدف دوره این نیست که یک برنامه‌نویس حرفه‌ای ایجاد کند، بلکه هدف آن ایجاد مهارت کافی برای انجام وظایف محاسباتی در زیست‌شناسی است.

اهمیت

در زیست‌شناسی مدرن، حجم داده‌ها بسیار زیاد شده است. توانایی نوشتن برنامه‌های کوچک می‌تواند به پژوهشگر اجازه دهد:

  • داده‌ها را سازمان‌دهی کند.
  • تحلیل‌های اختصاصی انجام دهد.
  • ابزارهای جدید ایجاد کند.
  • محدودیت ابزارهای آماده را برطرف کند.

2. Why Learn Programming?

چرا برنامه‌نویسی یاد بگیریم؟

تعریف ساده

برنامه‌نویسی یعنی دادن دستورهای دقیق به کامپیوتر برای انجام عملیات روی داده‌ها.

توضیح دقیق

یک زیست‌شناس الزاماً برای انجام Bioinformatics به برنامه‌نویسی نیاز ندارد، زیرا ابزارهای آماده زیادی وجود دارند.

اما برنامه‌نویسی زمانی بسیار مفید می‌شود که:

  • ابزار موجود کاری که شما نیاز دارید انجام نمی‌دهد.
  • فردی برای نوشتن ابزار جدید در دسترس نیست.
  • نیاز دارید داده‌های خود را به شکل خاصی خلاصه یا پردازش کنید.

مثال

فرض کنید یک پژوهشگر هزاران توالی DNA دارد و می‌خواهد:

  • طول هر توالی را محاسبه کند.
  • درصد GC را اندازه‌گیری کند.
  • توالی‌های خاصی را پیدا کند.

اگر ابزار آماده وجود نداشته باشد، یک برنامه کوچک Python می‌تواند این کار را انجام دهد.


3. Programming Strategy

راهبرد طراحی برنامه

تعریف ساده

قبل از نوشتن کد، باید مشخص کنیم:

  1. چه داده‌ای داریم؟
  2. چه کاری باید روی آن انجام شود؟
  3. خروجی چه خواهد بود؟

توضیح دقیق

کامپیوتر فقط دستورهای دقیق را اجرا می‌کند. بنابراین برنامه‌نویس باید:

  • نوع داده را مشخص کند.
  • قالب داده را تعیین کند.
  • مراحل پردازش را طراحی کند.

یک برنامه را می‌توان مانند دستور پخت غذا تصور کرد.


تشبیه برنامه‌نویسی با دستور پخت کیک

برنامه‌نویسی پخت کیک
داده‌ها (Data) مواد اولیه
الگوریتم مراحل تهیه کیک
پردازش مخلوط کردن و پختن
خروجی کیک آماده

قبل از شروع برنامه‌نویسی باید بدانیم:

  • چه داده‌ای وارد برنامه می‌شود.
  • چه عملیات‌هایی انجام می‌شود.
  • نتیجه نهایی چیست.

4. Pseudocode

شبه‌کد

تعریف ساده

شبه‌کد، توضیح مراحل یک برنامه با زبان ساده و نزدیک به زبان برنامه‌نویسی است، اما قابل اجرا توسط کامپیوتر نیست.

توضیح دقیق

وقتی برنامه کمی پیچیده می‌شود، نوشتن شبه‌کد کمک می‌کند:

  • ایده برنامه مشخص شود.
  • خطاهای منطقی قبل از کدنویسی پیدا شوند.
  • طراحی برنامه ساده‌تر شود.

مثال: محاسبه GC Content در DNA

DNA شامل چهار نوکلئوتید است:

  • A
  • C
  • G
  • T

درصد GC نشان می‌دهد چه مقدار از DNA شامل بازهای:

  • G (Guanine)
  • C (Cytosine)

است.

مراحل شبه‌کد:

  1. دریافت توالی DNA
  2. شمارش تعداد Cها
  3. شمارش تعداد Gها
  4. محاسبه طول توالی
  5. جمع کردن G و C
  6. تقسیم مقدار به طول کل توالی
  7. تبدیل به درصد
  8. نمایش نتیجه

فرمول:

[ GC% = \frac{G+C}{Total\ Length} \times 100 ]


5. Python Programming Language

زبان برنامه‌نویسی پایتون

تعریف ساده

Python یک زبان برنامه‌نویسی سطح بالا، ساده و قدرتمند است که برای کاربردهای مختلف از جمله تحلیل داده و Bioinformatics استفاده می‌شود.

ویژگی‌های مهم


Easy to Learn

یادگیری آسان

Python دارای:

  • ساختار دستوری ساده (Simple Syntax)
  • خوانایی بالا (Readability)

است.

برنامه‌های Python معمولاً کوتاه‌تر از برنامه‌های مشابه در:

  • C
  • C++
  • Java

هستند.


Object-Oriented Programming

برنامه‌نویسی شیءگرا

Python از مفهوم Object-Oriented Programming (OOP) پشتیبانی می‌کند.

در این روش، داده‌ها و عملکردهای مربوط به آن‌ها در قالب اشیاء (Objects) سازمان‌دهی می‌شوند.

البته برای بسیاری از برنامه‌های ساده این ویژگی ضروری نیست.


Built-in Data Structures

ساختارهای داده داخلی

Python دارای ساختارهای داده آماده است که:

  • نیاز به پیاده‌سازی دستی ندارند.
  • کار با داده‌ها را سریع‌تر می‌کنند.

مانند:

  • Lists
  • Dictionaries
  • Tuples

6. Interpreted Language

زبان مفسری

تعریف ساده

در زبان مفسری، کد برنامه مستقیماً توسط Interpreter اجرا می‌شود و نیاز به مرحله Compile ندارد.

Python چگونه اجرا می‌شود؟

می‌توان:

  • یک خط کد نوشت.
  • همان لحظه اجرا کرد.
  • نتیجه را مشاهده کرد.

مثلاً در محیط Python:

>>> print("Hello")

بلافاصله اجرا می‌شود.


مقایسه Interpreted و Compiled

ویژگی Interpreted Compiled
مثال Python C, C++
اجرا خط به خط پس از کامپایل
سرعت معمولاً کمتر معمولاً بیشتر
توسعه و آزمایش آسان‌تر پیچیده‌تر

نکته مهم

ضعف Python:

  • سرعت کمتر نسبت به زبان‌هایی مانند C و C++

اما برای داده‌ها و پروژه‌های این دوره، Python کاملاً مناسب است.


7. History of Python

تاریخچه پایتون

توسعه‌دهنده

Python توسط:

Guido van Rossum

در اواخر دهه ۱۹۸۰ و اوایل دهه ۱۹۹۰ توسعه یافت.

محل توسعه اولیه:

National Research Institute for Mathematics and Computer Science


نسخه‌های مهم Python

نسخه سال انتشار ویژگی
Python 1.0 1994 اولین نسخه رسمی
Python 2.0 2000 بهبود امکانات و توسعه جامعه
Python 3.0 2008 نسخه جدید با تغییرات اساسی

Python 2 در مقابل Python 3

Python 3:

  • کتابخانه‌های جدیدتر دارد.
  • نسخه آینده‌محور محسوب می‌شود.

اما Python 2:

  • در برخی سیستم‌ها از قبل نصب شده بود.
  • هنوز در برخی پروژه‌های قدیمی استفاده می‌شد.

برای پروژه‌های جدید، Python 3 پیشنهاد می‌شود.


8. Advantages of Python

مزایای Python

1. Simple Syntax

ساختار ساده و خوانا

2. Interactive

امکان آزمایش سریع کدها

3. Large Standard Library

کتابخانه‌های آماده فراوان

4. Portable

قابل اجرا روی:

  • Windows
  • Linux
  • Mac

5. Extensible

قابلیت اتصال به زبان‌هایی مانند C و C++

6. Scalable

مناسب برای:

  • برنامه‌های کوچک
  • پروژه‌های بزرگ

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
Programming برنامه‌نویسی نوشتن دستور برای کامپیوتر
Python پایتون زبان برنامه‌نویسی مورد استفاده در این دوره
Bioinformatics زیست‌اطلاعاتی استفاده از محاسبات برای تحلیل داده‌های زیستی
Genomic Data Science علم داده‌های ژنومی تحلیل داده‌های ژنتیکی با روش‌های محاسباتی
Data داده اطلاعاتی که برنامه روی آن کار می‌کند
Algorithm الگوریتم مجموعه مراحل حل یک مسئله
Pseudocode شبه‌کد نمایش مراحل برنامه بدون زبان واقعی
DNA Sequence توالی DNA ترتیب نوکلئوتیدهای DNA
GC Content درصد GC نسبت بازهای G و C در DNA
Interpreter مفسر برنامه‌ای که کد را مستقیم اجرا می‌کند
Compiler کامپایلر برنامه‌ای که کد را به زبان ماشین تبدیل می‌کند
Object-Oriented Programming برنامه‌نویسی شیءگرا مدل سازمان‌دهی برنامه بر اساس اشیاء
Syntax نحو زبان قوانین نوشتن کد
Standard Library کتابخانه استاندارد مجموعه توابع آماده زبان

مثال‌ها و تشبیه‌ها

مثال ۱: برنامه محاسبه GC Content

هدف:

محاسبه درصد بازهای G و C در یک توالی DNA.

ورودی:

ATGCGCAT

شمارش:

  • G = 2
  • C = 2
  • طول توالی = 8

محاسبه:

[ GC%= \frac{4}{8}\times100=50% ]

خروجی:

GC Content = 50%

مثال ۲: برنامه‌نویسی مانند دستور پخت

برای ساخت برنامه:

  • ابتدا مواد اولیه (داده‌ها) را جمع می‌کنیم.
  • مراحل پردازش را مشخص می‌کنیم.
  • نتیجه نهایی را تعیین می‌کنیم.

بدون طراحی مناسب، برنامه ممکن است اشتباه اجرا شود.


خلاصه نهایی مرور سریع

  • Python یک زبان برنامه‌نویسی ساده و قدرتمند برای تحلیل داده‌های ژنومی است.
  • زیست‌شناسان بدون برنامه‌نویسی هم می‌توانند از ابزارهای آماده استفاده کنند، اما برنامه‌نویسی توانایی حل مسائل اختصاصی را افزایش می‌دهد.
  • قبل از نوشتن کد باید داده، مراحل پردازش و خروجی مشخص شوند.
  • شبه‌کد ابزاری برای طراحی برنامه قبل از کدنویسی است.
  • Python یک زبان Interpreted است و نیاز به کامپایل ندارد.
  • زبان‌های Compiled مانند C و C++ معمولاً سریع‌تر هستند.
  • Python دارای ساختار ساده، کتابخانه‌های گسترده و قابلیت اجرا روی سیستم‌های مختلف است.
  • محاسبه GC Content یکی از مثال‌های ساده کاربرد Python در ژنومیک است.
  • Python توسط Guido van Rossum ایجاد شد.
  • برای پروژه‌های جدید معمولاً Python 3 توصیه می‌شود.

سوالات مرور

1. چرا یک زیست‌شناس باید برنامه‌نویسی یاد بگیرد؟

پاسخ: برای انجام تحلیل‌های اختصاصی، پردازش داده‌های بزرگ، ساخت ابزارهای جدید و حل مسائلی که ابزار آماده برای آن‌ها وجود ندارد.


2. تفاوت اصلی زبان Interpreted و Compiled چیست؟

پاسخ: در زبان Interpreted مانند Python، کد مستقیماً اجرا می‌شود؛ اما در زبان‌های Compiled مانند C ابتدا باید کد به فایل اجرایی تبدیل شود.


3. شبه‌کد چه کاربردی دارد؟

پاسخ: برای طراحی منطق برنامه قبل از نوشتن کد واقعی استفاده می‌شود و کمک می‌کند مراحل حل مسئله مشخص شوند.


4. GC Content در DNA چیست؟

پاسخ: درصد نوکلئوتیدهای G و C نسبت به کل طول توالی DNA است.


5. چرا Python برای Bioinformatics محبوب است؟

پاسخ: زیرا یادگیری آسان، کتابخانه‌های فراوان، خوانایی بالا و قابلیت پردازش مناسب داده‌های زیستی دارد.


6. مهم‌ترین محدودیت Python چیست؟

پاسخ: سرعت اجرای آن نسبت به زبان‌های کامپایل‌شونده مانند C و C++ کمتر است، بنابراین برای پردازش‌های بسیار سنگین ممکن است نیاز به زبان‌های سریع‌تر باشد.


01_week-one/01_module-1/06_lecture-2-1-first-steps-toward-programming-part-1

01 — First Steps Toward Programming (Part 1)

اولین گام‌ها در برنامه‌نویسی با Python: انواع داده و عملیات پایه


خلاصه کلی

در این درس، اولین گام‌های عملی برنامه‌نویسی با زبان Python معرفی می‌شود. هدف اصلی این بخش، آشنایی با مفاهیم پایه‌ای مانند Data Types (انواع داده)، انجام عملیات روی داده‌ها، کار با Numbers (اعداد) و Strings (رشته‌ها) و استفاده از آن‌ها در تحلیل داده‌های زیستی است.

در پایان این درس، دانشجو قادر خواهد بود:

  • محیط Python Interpreter را اجرا کند.
  • عملیات ریاضی ساده انجام دهد.
  • انواع مختلف داده‌های عددی را تشخیص دهد.
  • با رشته‌ها (Strings) کار کند.
  • توالی‌های DNA را به‌عنوان رشته پردازش کند.
  • عملیات پایه روی داده‌های متنی انجام دهد.

مفاهیم کلیدی


1. Python Interpreter

مفسر پایتون

تعریف ساده

Python Interpreter محیطی است که کدهای Python را دریافت کرده و بلافاصله اجرا می‌کند.

توضیح دقیق

برای شروع کار با Python می‌توان در یک Terminal دستور زیر را وارد کرد:

python

پس از اجرا، مفسر Python فعال شده و آماده دریافت دستورات است.

مثال:

print("Hello World")

خروجی:

Hello World

این ویژگی یکی از مزیت‌های زبان‌های Interpreted است، زیرا امکان آزمایش سریع دستورات را فراهم می‌کند.


2. Data Types

انواع داده

تعریف ساده

نوع داده مشخص می‌کند که یک مقدار چه نوع اطلاعاتی را نشان می‌دهد و چه عملیات‌هایی می‌توان روی آن انجام داد.

در این درس دو نوع داده اصلی معرفی می‌شوند:

  1. Numbers
  2. Strings

3. Numbers

داده‌های عددی

تعریف ساده

اعداد در Python برای انجام محاسبات ریاضی استفاده می‌شوند.

Python می‌تواند مانند یک ماشین حساب عمل کند.

مثال:

5 + 5

خروجی:

10

عملیات ریاضی در Python

جمع (Addition)

5 + 5

نتیجه:

10

تفریق و ضرب

مثال:

10.5 - 2 * 3

ترتیب عملیات مانند ریاضیات معمول است:

ابتدا ضرب:

[ 2 \times 3 = 6 ]

سپس:

[ 10.5 - 6 = 4.5 ]


توان (Power)

در Python برای توان از دو علامت ستاره استفاده می‌شود:

10 ** 2

نتیجه:

100

تقسیم صحیح (Floor Division)

در برخی نسخه‌های Python، تقسیم اعداد صحیح ممکن است فقط بخش صحیح نتیجه را برگرداند.

مثال:

12 / 5

در Python 2:

2

اما در Python 3:

2.4

باقی‌مانده تقسیم (Modulo)

برای محاسبه باقی‌مانده تقسیم از علامت % استفاده می‌شود.

مثال:

17 % 3

نتیجه:

2

زیرا:

[ 17 = (3 \times 5) + 2 ]


4. Numeric Data Types

انواع داده‌های عددی

Python چند نوع عددی دارد:


Integer (int)

عدد صحیح

تعریف

اعدادی بدون بخش اعشاری.

مثال:

5

برای مشاهده نوع داده:

type(5)

خروجی:

int

Float

عدد اعشاری

تعریف

اعدادی که دارای بخش اعشاری هستند.

مثال:

3.5

بررسی نوع:

type(3.5)

خروجی:

float

در علوم کامپیوتر، اعداد حقیقی معمولاً با نام Float شناخته می‌شوند.


Complex Number

عدد مختلط

تعریف

اعدادی که شامل بخش حقیقی و موهومی هستند.

در Python بخش موهومی با حرف j نمایش داده می‌شود.

مثال:

3 + 2j

نوع:

type(3+2j)

خروجی:

complex

کاربرد

اعداد مختلط در بیشتر کاربردهای Bioinformatics استفاده نمی‌شوند، اما Python از آن‌ها پشتیبانی می‌کند.


5. Strings

رشته‌ها

تعریف ساده

String مجموعه‌ای از کاراکترها است که داخل علامت نقل قول قرار می‌گیرد.

مثال:

"atg"

یا:

'atg'

اهمیت Strings در زیست‌شناسی

در Bioinformatics، بسیاری از داده‌ها به شکل رشته هستند.

مثلاً:

DNA Sequence

یک توالی DNA:

ATGCGTAC

در واقع یک String از حروف زیر است:

  • A
  • T
  • G
  • C

Protein Sequence

توالی پروتئین نیز یک String است، اما با الفبای بزرگ‌تر:

  • 20 اسید آمینه مختلف

بنابراین تحلیل توالی‌های زیستی تا حد زیادی شامل کار با Strings است.


6. String Quotes

علامت‌های نقل قول در رشته‌ها

Python اجازه می‌دهد Stringها با:

  • Single Quote ' '
  • Double Quote " "

تعریف شوند.

مثال:

'atg'

یا:

"atg"

هر دو صحیح هستند.


مشکل استفاده از نقل قول داخلی

مثال:

'This is a codon, isn't it?'

این کد خطا ایجاد می‌کند.

دلیل:

Python تصور می‌کند علامت ' در کلمه:

isn't

پایان String است.


راه‌حل اول: استفاده از Double Quote

مثال:

"This is a codon, isn't it?"

اکنون Python می‌داند که String با علامت " شروع و پایان می‌یابد.


راه‌حل دوم: Escape Character

می‌توان از Backslash استفاده کرد:

'This is a codon, isn\'t it?'

علامت \ به Python می‌گوید که کاراکتر بعدی را به‌عنوان یک کاراکتر معمولی در نظر بگیرد.


7. Escape Characters

کاراکترهای فرار

تعریف

Escape Characterها برای نمایش کاراکترهای خاص استفاده می‌شوند.

در Python، علامت:

\

کاراکتر Escape است.


مهم‌ترین Escape Characterها

کد معنی
\n خط جدید (New Line)
\t Tab
\\ نمایش خود Backslash
\" نمایش Double Quote

8. Multi-line Strings

رشته‌های چندخطی

تعریف

برای ذخیره رشته‌های طولانی می‌توان از سه علامت نقل قول استفاده کرد:

"""
sequence
sequence
sequence
"""

کاربرد در Bioinformatics

توالی‌های DNA معمولاً بسیار طولانی هستند و نمی‌توان آن‌ها را در یک خط نوشت.

Python می‌تواند چند خط را به‌عنوان یک String واحد ذخیره کند.

مثال:

ATGC
CGTA
GGCA

به صورت یک رشته ذخیره می‌شود.


9. Print Function

تابع چاپ

تعریف

تابع print() برای نمایش خروجی به شکل خواناتر استفاده می‌شود.

مثال:

print("ATGC\nCGTA")

خروجی:

ATGC
CGTA

به جای نمایش:

ATGC\nCGTA

10. String Operations

عملیات روی رشته‌ها

برخلاف اعداد، روی Stringها عملیات ریاضی معمول انجام نمی‌شود، اما Python چند عملیات مهم ارائه می‌دهد.


Concatenation

اتصال رشته‌ها

تعریف

ترکیب چند رشته با علامت +.

مثال:

"atg" + "ccc"

نتیجه:

atgccc

Replication

تکرار رشته

تعریف

تکرار یک رشته با استفاده از *.

مثال:

"atg" * 3

نتیجه:

atgatgatg

Membership Testing

بررسی وجود یک کاراکتر یا رشته

برای بررسی وجود یک مقدار از:

  • in
  • not in

استفاده می‌شود.


مثال

بررسی وجود:

"atg" in "atgcct"

نتیجه:

True

بررسی نبودن:

"n" in "atgc"

نتیجه:

False

نکات مهم

  • Python دارای انواع داده مختلف است و هر نوع داده عملیات خاص خود را دارد.

  • DNA و Protein Sequenceها در Python به شکل String ذخیره می‌شوند.

  • ترتیب عملیات ریاضی در Python مانند ریاضیات استاندارد است.

  • برای تشخیص نوع داده از تابع داخلی type() استفاده می‌شود.

  • در Python 3، تقسیم اعداد صحیح نتیجه اعشاری واقعی تولید می‌کند.

  • برای ذخیره رشته‌های چندخطی از Triple Quotes استفاده می‌شود.

  • Escape Character با Backslash (\) مشخص می‌شود.

  • عملیات مهم روی Stringها شامل:

    • اتصال
    • تکرار
    • بررسی وجود

است.

  • یادگیری کار با Stringها برای تحلیل توالی‌های DNA ضروری است.

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
Data Type نوع داده مشخص‌کننده نوع اطلاعات در برنامه
Number عدد داده عددی قابل محاسبه
Integer (int) عدد صحیح عدد بدون بخش اعشاری
Float عدد اعشاری عدد دارای بخش اعشاری
Complex Number عدد مختلط عدد دارای بخش حقیقی و موهومی
String رشته مجموعه‌ای از کاراکترها
Character کاراکتر یک نماد یا حرف منفرد
DNA Sequence توالی DNA ترتیب نوکلئوتیدهای DNA
Protein Sequence توالی پروتئین ترتیب اسیدهای آمینه
Interpreter مفسر اجراکننده مستقیم کد
Escape Character کاراکتر فرار نمایش کاراکترهای خاص
Concatenation اتصال رشته‌ها ترکیب چند String
Replication تکرار رشته ایجاد نسخه‌های متعدد از String
Membership عضویت بررسی وجود یک مقدار در رشته
Modulo باقی‌مانده تقسیم عملگر %

مثال‌ها و تشبیه‌ها

مثال: DNA به عنوان String

توالی:

ATGCGT

در Python مانند یک متن ساده ذخیره می‌شود:

dna = "ATGCGT"

سپس می‌توان:

  • طول آن را بررسی کرد.
  • کاراکترها را جستجو کرد.
  • تعداد G و C را شمرد.

خلاصه نهایی مرور سریع

  • Python Interpreter امکان اجرای فوری دستورات را فراهم می‌کند.
  • داده‌ها در Python دارای انواع مختلف هستند.
  • مهم‌ترین انواع عددی شامل Integer، Float و Complex هستند.
  • String مجموعه‌ای از کاراکترهاست که با ' ' یا " " تعریف می‌شود.
  • توالی‌های DNA و Protein در Bioinformatics معمولاً به شکل String ذخیره می‌شوند.
  • برای نمایش کاراکترهای خاص از Escape Character استفاده می‌شود.
  • \n برای ایجاد خط جدید استفاده می‌شود.
  • رشته‌های طولانی DNA را می‌توان با Triple Quotes ذخیره کرد.
  • تابع print() خروجی رشته‌ها را خواناتر نمایش می‌دهد.
  • عملیات مهم روی Stringها شامل اتصال، تکرار و بررسی وجود است.

سوالات مرور

1. چرا Stringها در Bioinformatics اهمیت زیادی دارند؟

پاسخ: زیرا داده‌های زیستی مانند DNA Sequence و Protein Sequence معمولاً به صورت مجموعه‌ای از حروف ذخیره می‌شوند و این ساختار دقیقاً با Stringها تطابق دارد.


2. تفاوت Integer و Float چیست؟

پاسخ: Integer اعداد بدون بخش اعشاری هستند، اما Float شامل بخش اعشاری است.

مثال:

5 → Integer
5.5 → Float

3. چگونه می‌توان نوع یک داده را در Python بررسی کرد؟

پاسخ:

با استفاده از تابع:

type()

مثال:

type(5)

4. چرا کد زیر خطا ایجاد می‌کند؟

'This isn't correct'

پاسخ: زیرا علامت ' داخل کلمه isn't باعث می‌شود Python تصور کند رشته در همان نقطه پایان یافته است.


5. چگونه دو String را به هم متصل می‌کنیم؟

پاسخ: با استفاده از عملگر +.

مثال:

"ATG" + "CGT"

خروجی:

ATGCGT

6. چگونه بررسی کنیم یک کاراکتر در یک رشته وجود دارد؟

پاسخ: با استفاده از عملگر in.

مثال:

"G" in "ATGC"

نتیجه:

True

01_week-one/01_module-1/07_lecture-2-2-first-steps-toward-programming-part-2

01 — First Steps Toward Programming (Part 2)

اولین گام‌ها در برنامه‌نویسی با Python: متغیرها و پردازش رشته‌ها


خلاصه کلی

در این درس، مفاهیم پایه‌ای‌تر برنامه‌نویسی در Python معرفی می‌شوند. تمرکز اصلی این بخش بر مفهوم Variables (متغیرها)، قوانین نام‌گذاری متغیرها، دسترسی به بخش‌هایی از رشته‌ها (String Indexing and Slicing) و استفاده از توابع و متدهای داخلی Python برای پردازش داده‌های زیستی است.

از آنجا که داده‌های زیستی مانند DNA Sequence و Protein Sequence عمدتاً به شکل رشته ذخیره می‌شوند، یادگیری روش‌های کار با Stringها یکی از مهارت‌های پایه در Bioinformatics Programming محسوب می‌شود.


اهداف یادگیری

در پایان این درس، دانشجو باید بتواند:

  • مفهوم متغیر در Python را توضیح دهد.
  • مقداردهی و تغییر مقدار متغیرها را انجام دهد.
  • قوانین نام‌گذاری متغیرها را رعایت کند.
  • به کاراکترهای خاص یک رشته دسترسی پیدا کند.
  • بخش‌هایی از یک رشته را استخراج کند.
  • طول یک رشته را محاسبه کند.
  • از متدهای String برای تحلیل توالی‌های DNA استفاده کند.

مفاهیم کلیدی


1. Variables

متغیرها

تعریف ساده

Variable یک نام برای ذخیره یک مقدار در حافظه کامپیوتر است.

به جای کار مستقیم با داده‌ها، آن‌ها را داخل متغیرها ذخیره می‌کنیم تا بتوانیم بعداً از آن‌ها استفاده یا آن‌ها را تغییر دهیم.


توضیح دقیق

در Python مقداردهی متغیر با علامت مساوی:

=

انجام می‌شود.

مثال:

codon = "ATG"

در اینجا:

  • نام متغیر: codon
  • مقدار ذخیره‌شده: "ATG"

اکنون به جای استفاده مستقیم از رشته "ATG" می‌توان از نام codon استفاده کرد.


مثال در زیست‌شناسی

dna_sequence = "GTACCGTA"

در این مثال:

  • dna_sequence یک متغیر است.
  • مقدار آن یک توالی DNA است.

نکته مهم

زمانی که یک متغیر مقداردهی می‌شود، Python معمولاً چیزی نمایش نمی‌دهد.

مثلاً:

codon = "ATG"

خروجی ندارد.

اما اگر:

codon

را وارد کنیم، مقدار آن نمایش داده می‌شود.


2. Assignment

مقداردهی متغیر

تعریف

قرار دادن یک مقدار در یک متغیر.

مثال:

a = 4

یعنی مقدار ۴ را در متغیر a ذخیره کن.


تفاوت Assignment با مساوی ریاضی

در برنامه‌نویسی:

b = b + 3

به معنی معادله ریاضی نیست.

بلکه یعنی:

  1. مقدار فعلی b را بردار.
  2. سه واحد به آن اضافه کن.
  3. نتیجه جدید را دوباره در b ذخیره کن.

مثال:

ابتدا:

b = 4

سپس:

b = b + 3

نتیجه:

b = 7

اما مقدار:

a

همچنان:

4

است.


3. Variable Naming Rules

قوانین نام‌گذاری متغیرها

نام متغیرها باید از قوانین مشخصی پیروی کند.


قانون ۱: حساس بودن به حروف بزرگ و کوچک

Python به تفاوت بین حروف بزرگ و کوچک حساس است.

این سه متغیر متفاوت هستند:

myvariable = 1

MyVariable = 2

MYVARIABLE = 3

بنابراین:

  • DNA
  • dna

دو متغیر جداگانه هستند.


قانون ۲: شروع نام متغیر

نام متغیر باید با:

  • حرف انگلیسی
  • یا underscore (_)

شروع شود.

صحیح:

sequence1
_DNA
name

غلط:

1sequence

زیرا با عدد شروع شده است.


قانون ۳: کاراکترهای مجاز

مجاز:

  • حروف
  • اعداد (به جز ابتدای نام)
  • underscore

غیرمجاز:

name#
year@20

نکته مهم

در برنامه‌های علمی بهتر است نام متغیرها معنی‌دار باشند.

ضعیف:

x
a
s

بهتر:

dnaSequence
genomeLength
gcContent

4. String Indexing

دسترسی به کاراکترهای رشته

تعریف ساده

Indexing یعنی دسترسی به یک کاراکتر خاص در یک رشته.

برای این کار از براکت استفاده می‌شود:

string[index]

مثال

فرض کنید:

dna = "GATTC"

برای گرفتن اولین کاراکتر:

dna[0]

نتیجه:

G

نکته مهم: شمارش از صفر

در Python اولین موقعیت رشته شماره:

0

است.

مثال:

کاراکتر Index
G 0
A 1
T 2
T 3
C 4

این روش در اکثر زبان‌های برنامه‌نویسی وجود دارد.


5. Negative Indexing

اندیس‌گذاری منفی

Python اجازه می‌دهد از انتهای رشته به عقب حرکت کنیم.

مثال:

dna[-1]

یعنی:

آخرین کاراکتر رشته.

اگر:

GATTC

باشد:

dna[-1]

نتیجه:

C

جدول:

Index موقعیت
-1 آخرین کاراکتر
-2 دومین کاراکتر از انتها

6. String Slicing

برش رشته

تعریف

استخراج بخشی از یک رشته.

ساختار:

string[start:end]

قانون مهم

عدد دوم شامل نمی‌شود.

مثال:

dna[0:3]

یعنی:

  • شروع از index 0
  • پایان قبل از index 3

پس:

indexهای:

0,1,2

برگردانده می‌شوند.


مثال

رشته:

GATTCA

کد:

dna[0:3]

نتیجه:

GAT

حذف start

اگر مقدار اول نوشته نشود:

dna[:3]

یعنی:

از ابتدای رشته تا قبل از index 3.


حذف end

اگر مقدار دوم حذف شود:

dna[2:]

یعنی:

از index 2 تا انتهای رشته.


7. Built-in Function len()

تابع طول رشته

تعریف

تابع:

len()

تعداد کاراکترهای یک رشته را برمی‌گرداند.

مثال:

len(dna)

اگر طول DNA برابر 49 باشد:

خروجی:

49

8. Object-Oriented Programming

برنامه‌نویسی شیءگرا

تعریف ساده

در برنامه‌نویسی شیءگرا، داده‌ها به صورت Object (شیء) در نظر گرفته می‌شوند که دارای:

  • ویژگی‌ها (Attributes)
  • عملکردها (Methods)

هستند.


مثال انسانی

یک انسان می‌تواند یک Object باشد.

ویژگی‌ها:

  • نام
  • آدرس

عملکردها:

  • صحبت کردن
  • فکر کردن

String به عنوان Object

در Python، String فقط یک مقدار ساده نیست؛ بلکه یک Object است.

بنابراین می‌تواند عملکردهای مخصوص خود را داشته باشد.

این عملکردها:

Methods (متدها)

نامیده می‌شوند.


9. String Methods

متدهای رشته


Method: count()

کاربرد

شمارش تعداد وقوع یک کاراکتر یا رشته در یک String.

مثال:

dna.count('c')

تعداد Cها را در DNA محاسبه می‌کند.

مثال خروجی:

9

همچنین می‌توان رشته‌های بزرگ‌تر را شمارش کرد:

dna.count('gc')

تعداد دفعات وجود الگوی:

GC

را برمی‌گرداند.


Method: upper()

کاربرد

تبدیل تمام حروف String به حروف بزرگ.

مثال:

dna.upper()

نکته مهم:

این متد مقدار اصلی متغیر را تغییر نمی‌دهد.

مثلاً:

dna.upper()

فقط یک نسخه جدید ایجاد می‌کند.


Method: find()

کاربرد

پیدا کردن اولین موقعیت یک Substring.

مثال:

dna.find('ag')

نتیجه:

16

یعنی اولین AG در index شماره 16 قرار دارد.


جستجوی بعدی

می‌توان مشخص کرد جستجو از کجا شروع شود:

dna.find('ag',17)

Method: rfind()

کاربرد

جستجو از انتهای رشته.

مثال:

dna.rfind('ag')

آخرین موقعیت AG را پیدا می‌کند.


Method: islower()

بررسی می‌کند آیا تمام حروف کوچک هستند یا خیر.

مثال:

dna.islower()

Method: isupper()

بررسی می‌کند آیا تمام حروف بزرگ هستند یا خیر.


Method: replace()

کاربرد

جایگزین کردن بخشی از رشته.

مثال:

dna.replace('a','A')

تمام aهای کوچک را به A بزرگ تبدیل می‌کند.


نکات مهم

  • متغیرها برای ذخیره و مدیریت داده‌ها ضروری هستند.
  • علامت = در Python برای مقداردهی استفاده می‌شود، نه مقایسه ریاضی.
  • نام متغیرها باید خوانا و معنی‌دار باشند.
  • Python به حروف بزرگ و کوچک حساس است.
  • Index در Python از صفر شروع می‌شود.
  • در Slicing، موقعیت پایان شامل نمی‌شود.
  • داده‌های DNA در Python معمولاً به شکل String ذخیره می‌شوند.
  • Stringها در Python دارای متدهای داخلی زیادی هستند.
  • متدها با نقطه (.) فراخوانی می‌شوند.
  • بسیاری از متدهای String مقدار اصلی را تغییر نمی‌دهند، بلکه نتیجه جدید ایجاد می‌کنند.

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
Variable متغیر نامی برای ذخیره یک مقدار
Assignment مقداردهی ذخیره مقدار در متغیر
Variable Name نام متغیر شناسه‌ای که برای داده انتخاب می‌شود
Case Sensitive حساس به بزرگی حروف تفاوت بین حروف بزرگ و کوچک
Index اندیس شماره موقعیت یک کاراکتر
Indexing اندیس‌گذاری دسترسی به کاراکتر خاص
Slicing برش رشته استخراج بخشی از رشته
String Object شیء رشته‌ای String به عنوان یک Object
Method متد تابع مربوط به یک Object
Attribute ویژگی اطلاعات مربوط به یک Object
Built-in Function تابع داخلی تابع آماده Python
Substring زیررشته بخشی از یک رشته بزرگ‌تر
Concatenation اتصال رشته‌ها ترکیب چند String
Replace جایگزینی تغییر یک بخش از رشته

مثال‌ها و تشبیه‌ها

تشبیه متغیر به ظرف

متغیر مانند یک ظرف دارای برچسب است.

مثلاً:

ظرف: dna_sequence

محتوا:
ATGCGCTA

به جای اینکه هر بار کل توالی را بنویسیم، فقط نام ظرف را استفاده می‌کنیم.


مثال کاربردی در ژنومیک

فرض کنید:

dna = "ATGCGTAC"

می‌توانیم:

اولین باز را پیدا کنیم:

dna[0]

خروجی:

A

یا سه باز اول را بگیریم:

dna[:3]

خروجی:

ATG

خلاصه نهایی مرور سریع

  • Variable برای ذخیره داده‌ها در Python استفاده می‌شود.

  • مقداردهی با علامت = انجام می‌شود.

  • نام متغیر باید با حرف یا _ شروع شود.

  • Python به بزرگی و کوچکی حروف حساس است.

  • DNA Sequenceها معمولاً به صورت String ذخیره می‌شوند.

  • Index در Python از صفر شروع می‌شود.

  • Index منفی از انتهای رشته شمارش می‌کند.

  • Slicing برای استخراج بخش‌هایی از رشته استفاده می‌شود.

  • len() طول رشته را برمی‌گرداند.

  • Stringها دارای Methodهایی مانند:

    • count()
    • upper()
    • find()
    • replace() هستند.
  • متدها با استفاده از عملگر نقطه (.) فراخوانی می‌شوند.


سوالات مرور

1. Variable چیست؟

پاسخ: متغیری است که یک مقدار را ذخیره می‌کند و با یک نام قابل دسترسی است.


2. چرا دستور زیر با مفهوم ریاضی مساوی نیست؟

b = b + 3

پاسخ: زیرا در برنامه‌نویسی علامت = به معنی مقداردهی است، یعنی مقدار جدیدی بر اساس مقدار قبلی ساخته و ذخیره می‌شود.


3. چرا DNA در Python به صورت String ذخیره می‌شود؟

پاسخ: زیرا توالی DNA مجموعه‌ای از کاراکترهای A، T، G و C است و ساختار String برای نمایش آن مناسب است.


4. نتیجه کد زیر چیست؟

"GENOME"[0]

پاسخ:

G

زیرا اولین موقعیت رشته در Python برابر index صفر است.


5. تفاوت Index و Slicing چیست؟

پاسخ:

  • Index یک کاراکتر مشخص را انتخاب می‌کند.
  • Slicing یک بخش از رشته را استخراج می‌کند.

6. کاربرد متد find() چیست؟

پاسخ: برای پیدا کردن موقعیت اولین وقوع یک رشته یا زیررشته در یک String استفاده می‌شود.


7. چگونه تعداد Cها را در یک توالی DNA پیدا کنیم؟

پاسخ:

با استفاده از:

dna.count('c')

این دستور تعداد C موجود در رشته DNA را برمی‌گرداند.


01_week-one/01_module-1/08_lecture-2-3-first-steps-toward-programming-part-3-8-57

01 — First Steps Toward Programming (Part 3)

ساخت اولین برنامه Python برای محاسبه درصد GC در DNA


خلاصه کلی

در این درس، مفاهیم پایه‌ای که در بخش‌های قبل آموخته شد، برای ساخت اولین برنامه واقعی در Python به کار گرفته می‌شوند. هدف اصلی، طراحی برنامه‌ای برای محاسبه GC Content (درصد GC) در یک توالی DNA است.

در این برنامه از مفاهیمی مانند:

  • متغیرها (Variables)
  • رشته‌ها (Strings)
  • متدهای رشته‌ای (String Methods)
  • توابع داخلی (Built-in Functions)
  • عملیات ریاضی
  • ذخیره برنامه در فایل
  • اجرای فایل Python
  • نوشتن توضیحات (Comments)

استفاده می‌شود.


اهداف یادگیری

پس از مطالعه این درس، دانشجو باید بتواند:

  • یک برنامه ساده Python برای تحلیل DNA بنویسد.
  • تعداد نوکلئوتیدهای خاص را در یک توالی شمارش کند.
  • طول یک توالی DNA را محاسبه کند.
  • درصد GC را محاسبه و نمایش دهد.
  • برنامه Python را در یک فایل ذخیره و اجرا کند.
  • برای خوانایی بهتر کد، Comment اضافه کند.

مفاهیم کلیدی


1. GC Content Calculation

محاسبه درصد GC در DNA

تعریف ساده

GC Content درصد بازهای نیتروژنی:

  • Guanine (G)
  • Cytosine (C)

در یک توالی DNA است.


اهمیت در زیست‌شناسی

درصد GC یکی از ویژگی‌های مهم ژنوم است و برای بررسی ویژگی‌های DNA گونه‌های مختلف استفاده می‌شود.

فرمول:

[ GC% = \frac{G+C}{Total\ Length} \times 100 ]


2. طراحی برنامه با Pseudocode

طراحی برنامه قبل از کدنویسی

قبل از نوشتن Python، ابتدا مراحل حل مسئله مشخص می‌شوند.

الگوریتم محاسبه GC Content:

  1. دریافت توالی DNA
  2. شمارش تعداد Cها
  3. شمارش تعداد Gها
  4. محاسبه طول DNA
  5. جمع تعداد G و C
  6. تقسیم بر طول کل DNA
  7. ضرب در 100 برای تبدیل به درصد
  8. نمایش نتیجه

3. Implementing GC Calculation in Python

پیاده‌سازی محاسبه GC در Python

فرض کنید توالی DNA داریم:

dna = "atgcgc..."

شمارش Cها

از متد:

count()

استفاده می‌کنیم.

مثال:

no_c = dna.count('c')

در اینجا:

  • dna.count('c')
  • تعداد Cهای موجود در DNA را برمی‌گرداند.
  • مقدار حاصل در متغیر no_c ذخیره می‌شود.

شمارش Gها

مشابه C:

no_g = dna.count('g')

محاسبه طول DNA

از تابع:

len()

استفاده می‌کنیم.

مثال:

dna_length = len(dna)

محاسبه درصد GC

فرمول در Python:

gc_percent = ((no_c + no_g) * 100.0) / dna_length

مراحل:

  1. تعداد C و G جمع می‌شود.
  2. در 100 ضرب می‌شود.
  3. بر طول DNA تقسیم می‌شود.

نمایش نتیجه

با:

print(gc_percent)

نتیجه نمایش داده می‌شود.

مثلاً:

53.06

4. Python Scripts

فایل‌های برنامه Python

مشکل اجرای مستقیم در Interpreter

اگر برنامه را خط به خط در Python Interpreter بنویسیم:

  • برنامه فقط همان لحظه وجود دارد.
  • برای اجرای دوباره باید همه دستورات را دوباره وارد کنیم.

این روش برای برنامه‌های واقعی مناسب نیست.


راه‌حل: ذخیره برنامه در فایل

کدها در یک فایل متنی ذخیره می‌شوند.

مثلاً:

gc.py

پسوند:

.py

نشان‌دهنده فایل Python است.


اجرای فایل Python

به جای وارد کردن دستورات، فایل را به Python می‌دهیم:

python gc.py

Python فایل را خوانده و اجرا می‌کند.


5. Shebang Line

خط معرفی مفسر Python

تعریف

در سیستم‌های Unix/Linux می‌توان در ابتدای فایل Python خطی قرار داد که مشخص کند برنامه با چه مفسری اجرا شود.

مثال:

#!/usr/bin/python

کاربرد

این خط به سیستم عامل می‌گوید:

«این فایل یک برنامه Python است، آن را با Python اجرا کن.»

پس به جای:

python gc.py

می‌توان نوشت:

./gc.py

6. Executable Permission

مجوز اجرای فایل

در سیستم Unix، یک فایل معمولاً به صورت پیش‌فرض قابل اجرا نیست.

برای فعال کردن اجرای فایل از دستور:

chmod

استفاده می‌شود.

مثال:

chmod a+x gc.py

معنی:

  • a → همه کاربران
  • +x → اضافه کردن قابلیت اجرا

7. Finding Python Location

پیدا کردن مسیر Python

برای پیدا کردن محل نصب Python:

which python

استفاده می‌شود.

خروجی ممکن است:

/usr/bin/python

باشد.

این مسیر در خط Shebang استفاده می‌شود.


8. Comments

توضیحات در کد

تعریف

Commentها بخش‌هایی از برنامه هستند که توسط Python اجرا نمی‌شوند و فقط برای توضیح کد نوشته می‌شوند.


اهمیت Comments

در برنامه‌های بزرگ:

  • به یادآوری هدف کد کمک می‌کنند.
  • فهم برنامه توسط دیگران را آسان‌تر می‌کنند.
  • نگهداری برنامه در آینده ساده‌تر می‌شود.

روش اول: Triple Quotes

برای توضیحات چندخطی:

"""
This program computes
GC content of DNA
"""

Python این بخش را نادیده می‌گیرد.


روش دوم: علامت

برای توضیح کوتاه:

no_c = dna.count('c')  # count C bases

هر چیزی بعد از:

#

تا پایان خط Comment محسوب می‌شود.


نکات مهم

  • یک برنامه خوب ابتدا طراحی می‌شود و سپس نوشته می‌شود.
  • GC Content یکی از مثال‌های ساده کاربرد Python در Bioinformatics است.
  • متد count() برای شمارش کاراکترها در DNA استفاده می‌شود.
  • تابع len() طول توالی DNA را محاسبه می‌کند.
  • ذخیره برنامه در فایل .py امکان اجرای مجدد را فراهم می‌کند.
  • خط Shebang برای اجرای مستقیم برنامه در Unix استفاده می‌شود.
  • مجوز اجرایی فایل باید با chmod تنظیم شود.
  • Commentها بخش مهمی از برنامه‌نویسی حرفه‌ای هستند.
  • نام‌گذاری مناسب متغیرها خوانایی کد را افزایش می‌دهد.

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
GC Content درصد GC درصد بازهای G و C در DNA
Algorithm الگوریتم مراحل حل یک مسئله
Script اسکریپت فایل شامل دستورات برنامه
Python Interpreter مفسر Python اجراکننده کدهای Python
Source Code کد منبع دستورات نوشته‌شده برنامه
File Extension پسوند فایل بخش انتهایی نام فایل مانند .py
Shebang خط معرفی مفسر دستور ابتدای فایل برای مشخص کردن Interpreter
Executable قابل اجرا فایلی که سیستم اجازه اجرای آن را دارد
Permission مجوز سطح دسترسی فایل
chmod تغییر مجوز فایل دستور Unix برای تغییر Permission
Comment توضیح کد متن نادیده گرفته‌شده توسط Python
Documentation مستندسازی توضیح دادن عملکرد برنامه
Method متد تابع وابسته به یک Object

مثال‌ها و تشبیه‌ها

مثال: برنامه GC Content مانند شمارش حروف یک کتاب

فرض کنید یک کتاب دارید و می‌خواهید درصد حروف خاصی را محاسبه کنید:

  • تعداد حرف G و C → تعداد حروف موردنظر
  • تعداد کل حروف → طول کتاب
  • تقسیم این دو → درصد حضور آن‌ها

در DNA نیز دقیقاً همین کار انجام می‌شود.


نمونه برنامه کامل

dna = "atgcgcaa"

no_c = dna.count('c')
no_g = dna.count('g')

dna_length = len(dna)

gc_percent = ((no_c + no_g) * 100.0) / dna_length

print(gc_percent)

خلاصه نهایی مرور سریع

  • اولین برنامه Python این دوره برای محاسبه GC Content نوشته شد.
  • GC Content برابر درصد G و C نسبت به کل DNA است.
  • متد count() تعداد یک کاراکتر را در String پیدا می‌کند.
  • تابع len() طول DNA را محاسبه می‌کند.
  • نتیجه محاسبه در متغیر gc_percent ذخیره می‌شود.
  • برنامه‌ها بهتر است در فایل‌های .py ذخیره شوند.
  • فایل Python را می‌توان با Python Interpreter اجرا کرد.
  • Shebang اجازه اجرای مستقیم فایل در Unix را می‌دهد.
  • دستور chmod a+x فایل را اجرایی می‌کند.
  • Commentها برای توضیح و نگهداری بهتر کد ضروری هستند.

سوالات مرور

1. GC Content چیست؟

پاسخ: درصد بازهای Guanine و Cytosine نسبت به کل طول یک توالی DNA است.


2. چرا برنامه را در فایل .py ذخیره می‌کنیم؟

پاسخ: زیرا می‌توانیم برنامه را بارها اجرا کنیم بدون اینکه دوباره دستورات را وارد کنیم.


3. تابع len() چه کاری انجام می‌دهد؟

پاسخ: طول یک رشته یا تعداد کاراکترهای موجود در آن را برمی‌گرداند.


4. کاربرد دستور chmod a+x چیست؟

پاسخ: مجوز اجرای فایل را برای کاربران فعال می‌کند.


5. چرا استفاده از Comment در برنامه‌نویسی مهم است؟

پاسخ: زیرا توضیح می‌دهد برنامه چه کاری انجام می‌دهد و باعث می‌شود کد در آینده راحت‌تر فهمیده و نگهداری شود.


6. تفاوت اجرای کد در Interpreter و Script چیست؟

پاسخ:

  • در Interpreter دستورات معمولاً به صورت تعاملی و خط‌به‌خط اجرا می‌شوند.
  • در Script، مجموعه دستورات در یک فایل ذخیره شده و یکجا اجرا می‌شوند.

01_week-one/01_module-1/09_lecture-2-4-first-steps-toward-programming-part-4-9-58

01 — First Steps Toward Programming (Part 4)

دریافت ورودی از کاربر، تبدیل داده‌ها و قالب‌بندی خروجی در Python


خلاصه کلی

در این درس، روش‌های دریافت داده از کاربر و نمایش بهتر خروجی‌ها در Python بررسی می‌شود. تا این مرحله، داده‌های DNA به صورت مستقیم داخل برنامه نوشته می‌شدند؛ اما در برنامه‌های واقعی، معمولاً داده‌ها از کاربر یا فایل دریافت می‌شوند.

در این بخش یاد می‌گیریم:

  • چگونه از کاربر ورودی دریافت کنیم.
  • چرا ورودی‌ها همیشه به صورت String ذخیره می‌شوند.
  • چگونه String را به عدد تبدیل کنیم.
  • چگونه خروجی برنامه را با قالب‌بندی مناسب نمایش دهیم.
  • چگونه نتیجه محاسبات زیستی مانند GC Content را خواناتر چاپ کنیم.

مفاهیم کلیدی


1. User Input

دریافت ورودی از کاربر

تعریف ساده

User Input روشی است که برنامه به جای دریافت داده‌های از پیش نوشته‌شده، از کاربر اطلاعات دریافت می‌کند.


تابع Input

در Python برای دریافت ورودی از کاربر از تابع:

input()

استفاده می‌شود.

در Python 2 این تابع:

raw_input()

نام دارد.


مثال

dna = input("Enter a DNA sequence please:")

عملکرد:

  1. پیام زیر نمایش داده می‌شود:
Enter a DNA sequence please:
  1. برنامه منتظر ورود کاربر می‌ماند.
  2. مقدار واردشده در متغیر dna ذخیره می‌شود.

کاربرد در Bioinformatics

به جای نوشتن مستقیم:

dna = "ATGCGTA..."

می‌توان از کاربر یا فایل، توالی DNA دریافت کرد.

این روش برای داده‌های بزرگ ژنومی ضروری است.


2. Input Always Returns String

ورودی همیشه به صورت رشته ذخیره می‌شود

نکته مهم

حتی اگر کاربر عدد وارد کند، Python آن را به صورت String دریافت می‌کند.

مثال:

my_number = input("Please enter a number:")

اگر کاربر وارد کند:

10

مقدار واقعی:

"10"

است، نه:

10

اهمیت این موضوع

در ظاهر این دو مشابه هستند:

10
"10"

اما در Python تفاوت دارند:

  • 10 → عدد صحیح (Integer)
  • "10" → رشته (String)

بنابراین قبل از انجام محاسبات باید تبدیل انجام شود.


3. Type Conversion

تبدیل نوع داده‌ها

برای تبدیل String به انواع دیگر داده، از توابع تبدیل استفاده می‌کنیم.


Integer Conversion

تابع:

int()

کاربرد:

تبدیل رشته به عدد صحیح.

مثال:

actual_number = int(my_number)

اگر:

my_number = "10"

باشد:

نتیجه:

actual_number = 10

خواهد بود.


Float Conversion

تابع:

float()

برای تبدیل به عدد اعشاری استفاده می‌شود.

مثال:

x = float("10.5")

نتیجه:

10.5

Complex Conversion

تابع:

complex()

برای ایجاد اعداد مختلط استفاده می‌شود.

مثال:

complex("2+3j")

اگرچه در اکثر برنامه‌های Bioinformatics استفاده کمی دارد.


Character Conversion

تابع:

chr()

یک عدد را به کاراکتر تبدیل می‌کند.

مثال:

chr(65)

خروجی:

A

دلیل وجود chr()

کامپیوترها در داخل خود، کاراکترها را با عدد ذخیره می‌کنند.

برای مثال:

عدد کاراکتر
65 A
66 B

تابع chr() این تبدیل را انجام می‌دهد.


4. Output Formatting

قالب‌بندی خروجی

مشکل خروجی خام

در برنامه GC Content ممکن است خروجی مانند زیر باشد:

53.06122448979591

اما معمولاً نیاز نداریم این تعداد رقم اعشار نمایش داده شود.


چاپ چند مقدار با print

تابع print() می‌تواند چند مقدار را همزمان دریافت کند.

مثال:

print("The DNA sequence's GC content is", gc_percent, "%")

در اینجا سه مقدار چاپ می‌شود:

  1. متن
  2. مقدار متغیر
  3. علامت درصد

5. String Formatting with %

قالب‌بندی با علامت درصد

برای کنترل تعداد ارقام خروجی از Formatting استفاده می‌کنیم.


نمایش عدد اعشاری

فرمت:

%f

برای اعداد اعشاری (Floating Point) استفاده می‌شود.


مثال:

print("GC content is %5.3f" % gc_percent)

ساختار %5.3f

این دستور سه بخش دارد:

%5.3f

1. %

شروع دستور قالب‌بندی


2. 5

عرض کل فیلد خروجی را مشخص می‌کند.

یعنی حداقل 5 کاراکتر برای نمایش اختصاص داده شود.


3. 3

تعداد ارقام بعد از اعشار را مشخص می‌کند.

مثلاً:

53.061

4. f

یعنی مقدار موردنظر یک:

floating point number

است.


6. Formatting Other Data Types

قالب‌بندی انواع دیگر داده

Python فرمت‌های مختلفی برای نمایش داده دارد.


Integer Format

%d

برای عدد صحیح.

مثال:

print("%d" % 10.6)

خروجی:

10

زیرا بخش اعشاری حذف می‌شود.


تعیین طول فیلد

مثال:

%3d

یعنی عدد در فضایی با عرض 3 کاراکتر نمایش داده شود.

اگر فضای اضافی وجود داشته باشد، Python آن را با فاصله پر می‌کند.


Octal Format

%o

نمایش عدد در مبنای هشت.

مثال:

10 → 12

Hexadecimal Format

%x

نمایش عدد در مبنای شانزده.


Scientific Notation

%e

برای نمایش علمی اعداد بزرگ.

مثال:

10.6

به شکل:

1.06e+01

نمایش داده می‌شود.


String Format

%s

برای چاپ رشته‌ها.

مثال:

print("%s" % dna)

خروجی:

توالی DNA نمایش داده می‌شود.


نکات مهم

  • تابع input() همیشه خروجی از نوع String تولید می‌کند.
  • برای انجام محاسبات روی ورودی عددی باید ابتدا از int() یا float() استفاده کرد.
  • در Python 2 نام تابع ورودی raw_input() است، اما در Python 3 از input() استفاده می‌شود.
  • داده‌های زیستی مانند DNA معمولاً به صورت String ذخیره می‌شوند.
  • قالب‌بندی خروجی باعث می‌شود نتایج علمی خواناتر باشند.
  • برای نمایش درصد GC معمولاً تعداد محدودی رقم اعشار کافی است.
  • %f برای اعداد اعشاری و %s برای رشته‌ها استفاده می‌شود.
  • تابع chr() ارتباط بین نمایش عددی داخلی کامپیوتر و کاراکترها را نشان می‌دهد.

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
User Input ورودی کاربر داده‌ای که توسط کاربر وارد برنامه می‌شود
Input Function تابع دریافت ورودی تابعی برای گرفتن اطلاعات از کاربر
String رشته مجموعه‌ای از کاراکترها
Integer عدد صحیح عدد بدون بخش اعشاری
Float عدد اعشاری عدد دارای بخش اعشاری
Type Conversion تبدیل نوع داده تغییر نوع یک مقدار به نوع دیگر
Output Formatting قالب‌بندی خروجی کنترل نحوه نمایش نتیجه
Floating Point Number عدد ممیز شناور عدد دارای اعشار
Scientific Notation نمایش علمی نمایش اعداد بزرگ به شکل توان ده
Character Encoding کدگذاری کاراکتر تبدیل کاراکترها به نمایش عددی در کامپیوتر
ASCII استاندارد نمایش کاراکترها نگاشت اعداد به حروف و نمادها
Interpreter مفسر برنامه‌ای که کد Python را اجرا می‌کند

مثال‌ها و تشبیه‌ها

مثال: ورودی DNA مانند دریافت نمونه آزمایشگاهی

در یک آزمایشگاه، برنامه نباید همیشه یک نمونه ثابت را تحلیل کند.

بهتر است:

  1. نمونه جدید دریافت شود.
  2. برنامه آن را ذخیره کند.
  3. تحلیل روی نمونه انجام شود.

تابع input() همان مرحله دریافت نمونه جدید است.


مثال GC Content

بدون قالب‌بندی:

GC content = 53.06122448979591

با قالب‌بندی:

GC content = 53.061

نتیجه برای گزارش علمی خواناتر است.


خلاصه نهایی مرور سریع

  • تابع input() برای دریافت داده از کاربر استفاده می‌شود.
  • در Python 2 تابع مشابه آن raw_input() است.
  • ورودی‌های دریافت‌شده همیشه String هستند.
  • برای تبدیل String به عدد از int() و float() استفاده می‌کنیم.
  • تابع chr() عدد را به کاراکتر تبدیل می‌کند.
  • تابع print() می‌تواند چند مقدار را همزمان چاپ کند.
  • قالب‌بندی خروجی با % تعداد ارقام و نوع داده را کنترل می‌کند.
  • %f برای اعداد اعشاری استفاده می‌شود.
  • %d برای اعداد صحیح استفاده می‌شود.
  • %s برای رشته‌ها استفاده می‌شود.
  • قالب‌بندی مناسب خروجی برای گزارش‌های علمی اهمیت زیادی دارد.

سوالات مرور

1. چرا مقدار واردشده توسط کاربر همیشه String است؟

پاسخ: زیرا Python ورودی دریافت‌شده از صفحه‌کلید را ابتدا به عنوان متن ذخیره می‌کند و نوع اصلی آن را تشخیص نمی‌دهد.


2. چگونه مقدار "25" را به عدد صحیح تبدیل می‌کنیم؟

پاسخ:

با تابع:

int("25")

نتیجه:

25

3. تفاوت 10 و "10" چیست؟

پاسخ:

  • 10 یک Integer است.
  • "10" یک String است.

اولی قابل استفاده در محاسبات عددی است، اما دومی ابتدا باید تبدیل شود.


4. کاربرد %5.3f چیست؟

پاسخ: برای نمایش یک عدد اعشاری با عرض 5 کاراکتر و 3 رقم بعد از اعشار استفاده می‌شود.


5. چرا قالب‌بندی خروجی در Bioinformatics مهم است؟

پاسخ: زیرا نتایج تحلیل‌های زیستی مانند GC Content معمولاً در گزارش‌ها استفاده می‌شوند و باید خوانا و استاندارد نمایش داده شوند.


02_week-two/01_module-2/01_lecture-3-1-data-structures-part-1-11-58

درس 3-1: ساختارهای داده (Data Structures) در پایتون – بخش اول: Lists

خلاصه کلی

در این درس با یکی از مهم‌ترین ساختارهای داده در Python یعنی List (لیست) آشنا می‌شویم. لیست‌ها برای ذخیره و مدیریت مجموعه‌ای از داده‌ها استفاده می‌شوند و در تحلیل داده‌های زیستی، مانند ذخیره اطلاعات ژن‌ها، توالی‌ها و نتایج آزمایش‌ها، کاربرد فراوان دارند.

در این بخش مفاهیمی مانند:

  • ایجاد و دسترسی به عناصر لیست
  • تفاوت List و String از نظر تغییرپذیری
  • عملیات روی لیست‌ها
  • متدهای مهم List
  • استفاده از List به عنوان Stack
  • مرتب‌سازی داده‌ها

بررسی می‌شوند.

هدف یادگیری

پس از مطالعه این درس باید بتوانید:

  • داده‌های چندگانه را در قالب List ذخیره کنید.
  • عناصر لیست را با Index پیدا و تغییر دهید.
  • تفاوت بین داده‌های Mutable و Immutable را درک کنید.
  • از متدهای مهم لیست برای پردازش داده‌ها استفاده کنید.
  • لیست‌ها را مرتب و مدیریت کنید.

مفاهیم کلیدی

1. List (لیست)

تعریف ساده

List یک ساختار داده در Python است که چندین مقدار را در یک مجموعه مرتب ذخیره می‌کند.

لیست با استفاده از براکت مربع ایجاد می‌شود:

my_list = [value1, value2, value3]

مثال:

gene_expression = ["gene", 0.05, 0.01, 7.33e-08]

این لیست شامل:

  • نام یک ژن (String)
  • سه مقدار عددی (Float)

است.


توضیح دقیق

بر خلاف بسیاری از ساختارهای داده که فقط یک نوع داده را ذخیره می‌کنند، در Python یک List می‌تواند شامل انواع مختلف داده باشد:

مثلاً:

["BRCA1", 2.5, True, 10]

شامل:

  • String
  • Float
  • Boolean
  • Integer

است.

هنگامی که یک List ساخته می‌شود، داده‌های آن در حافظه کامپیوتر ذخیره می‌شوند و متغیر List در واقع به محل ذخیره آن داده‌ها اشاره می‌کند.

به عبارت دیگر:

Variable → Memory Location → List Data

اهمیت در Bioinformatics

در تحلیل داده‌های زیستی، List برای ذخیره مواردی مانند:

  • نام ژن‌ها
  • مقادیر بیان ژن (Gene Expression)
  • نتایج آزمایش‌ها
  • توالی‌های مختلف

بسیار استفاده می‌شود.


2. Indexing در List (اندیس‌گذاری)

مانند String، عناصر List نیز با Index قابل دسترسی هستند.

نکته مهم:

در Python شمارش از صفر (0) شروع می‌شود.

مثال:

gene_expression = ["gene", 0.05, 0.01, 7.33e-08]

اندیس‌ها:

مقدار Index
gene 0
0.05 1
0.01 2
7.33e-08 3

دسترسی:

gene_expression[2]

خروجی:

0.01

دسترسی به آخرین عنصر

با Index منفی می‌توان از انتهای لیست شمارش کرد.

مثال:

gene_expression[-1]

آخرین مقدار لیست را برمی‌گرداند.


3. Mutable و Immutable

یکی از مهم‌ترین تفاوت‌های List و String در Python مربوط به تغییرپذیری است.


Immutable Data Type (نوع داده تغییرناپذیر)

مثال: String

String ها قابل تغییر مستقیم نیستند.

مثال:

motif = "ACGT"
motif[0] = "T"

خطا ایجاد می‌کند.

زیرا String:

Immutable

است.

یعنی پس از ایجاد، محتوای آن قابل تغییر نیست.


Mutable Data Type (نوع داده تغییرپذیر)

مثال: List

List ها قابل تغییر هستند.

مثال:

gene_expression[0] = "LIF"

اکنون مقدار اولین عنصر تغییر کرده است.

بنابراین:

نوع داده قابل تغییر؟
String خیر
List بله

4. Slicing در List (برش لیست)

مانند String می‌توان بخشی از List را جدا کرد.

ساختار:

list[start:end]

مثال:

gene_expression[1:3]

عناصر Index:

1 , 2

را برمی‌گرداند.

نکته:

Index انتهایی شامل نمی‌شود.


استفاده از Index منفی در Slice

مثال:

gene_expression[-3:]

یعنی:

از سومین عنصر انتهایی تا پایان لیست.


تغییر دادن Slice

برخلاف Slice معمولی که فقط یک نسخه جدید ایجاد می‌کند، اگر به Slice مقدار جدید بدهیم، لیست اصلی تغییر می‌کند.

مثال:

gene_expression[1:3] = [10]

دو عنصر قبلی با یک عنصر جدید جایگزین می‌شوند.


5. عملیات روی List

Concatenation (الحاق)

دو List را می‌توان با علامت + ترکیب کرد.

مثال:

list1 + list2

نتیجه:

یک List جدید ایجاد می‌شود.


طول List

با تابع:

len()

تعداد عناصر مشخص می‌شود.

مثال:

len(gene_expression)

خروجی:

3

حذف عناصر با del

برای حذف عنصر:

del gene_expression[1]

عنصر دارای Index 1 حذف می‌شود.

پس از حذف، عناصر بعدی جابه‌جا می‌شوند.


6. متدهای مهم List

List ها مانند String ها دارای Method هستند.


extend()

کاربرد:

اضافه کردن عناصر یک List دیگر به انتهای List.

مثال:

gene_expression.extend([5,6])

تفاوت با +:

  • + یک List جدید می‌سازد.
  • extend() خود List اصلی را تغییر می‌دهد.

count()

تعداد تکرار یک مقدار را پیدا می‌کند.

مثال:

gene_expression.count("LIF")

اگر خروجی:

1

باشد، یعنی یک بار وجود دارد.

اگر:

0

باشد، آن مقدار وجود ندارد.


reverse()

ترتیب عناصر را معکوس می‌کند.

مثال:

gene_expression.reverse()

7. Stack با استفاده از List

Stack (پشته)

Stack یک ساختار داده است که قانون:

Last In, First Out (LIFO)

را دنبال می‌کند.

یعنی:

آخرین چیزی که وارد می‌شود، اولین چیزی است که خارج می‌شود.


مثال واقعی

مانند یک دسته بشقاب:

  • بشقاب جدید روی همه قرار می‌گیرد.
  • اولین بشقابی که برمی‌داریم، آخرین بشقاب اضافه‌شده است.

append()

اضافه کردن عنصر به انتهای Stack:

stack.append("e")

pop()

برداشتن آخرین عنصر:

element = stack.pop()

آخرین عنصر اضافه‌شده حذف و برگردانده می‌شود.


8. Sorting در List (مرتب‌سازی)

دو روش اصلی وجود دارد:


sorted()

یک List مرتب‌شده جدید ایجاد می‌کند.

مثال:

sorted(mylist)

اما List اصلی تغییر نمی‌کند.


sort()

خود List را مرتب می‌کند.

مثال:

mylist.sort()

بعد از اجرای آن، ترتیب اصلی List تغییر می‌کند.


تفاوت sorted و sort

تابع تغییر List اصلی خروجی
sorted() خیر List جدید
sort() بله تغییر همان List

مرتب‌سازی String ها

Python می‌تواند String ها را نیز مرتب کند.

مثال:

sorted(["A","G","C","T"])

خروجی:

["A","C","G","T"]

بر اساس ترتیب الفبایی مرتب می‌شوند.


نکات مهم

  • List یکی از پرکاربردترین ساختارهای داده در Python است.
  • List با [] ساخته می‌شود.
  • Index در Python از صفر شروع می‌شود.
  • Index منفی برای دسترسی از انتهای List استفاده می‌شود.
  • List ها Mutable هستند، اما String ها Immutable هستند.
  • تغییر مستقیم عناصر List امکان‌پذیر است.
  • Slice معمولی List اصلی را تغییر نمی‌دهد.
  • اختصاص مقدار جدید به Slice باعث تغییر List می‌شود.
  • append() فقط یک عنصر اضافه می‌کند.
  • extend() چندین عنصر را از یک List اضافه می‌کند.
  • sort() لیست اصلی را تغییر می‌دهد ولی sorted() یک نسخه جدید می‌سازد.
  • Stack با ترکیب append() و pop() ساخته می‌شود.

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
Data Structure ساختار داده روشی برای ذخیره و سازمان‌دهی داده‌ها
List لیست ساختار داده مرتب برای نگهداری چند مقدار
Index اندیس شماره موقعیت یک عنصر در داده
Slice برش استخراج بخشی از یک ساختار داده
Mutable تغییرپذیر داده‌ای که پس از ایجاد قابل تغییر است
Immutable تغییرناپذیر داده‌ای که پس از ایجاد تغییر نمی‌کند
Method متد تابعی که متعلق به یک Object است
Concatenation اتصال ترکیب دو ساختار داده
Stack پشته ساختار داده با قانون LIFO
Append افزودن اضافه کردن یک عنصر به انتهای List
Pop حذف و بازگرداندن حذف آخرین عنصر List
Sort مرتب‌سازی درجا مرتب کردن همان List
Sorted مرتب‌سازی جدید ایجاد نسخه مرتب‌شده جدید

مثال‌ها و تشبیه‌ها

مثال Stack

List مانند یک دسته بشقاب است:

A
B
C
D

اگر E اضافه شود:

A
B
C
D
E

با pop():

E حذف می‌شود

زیرا آخرین عنصر اضافه‌شده، اولین عنصر خارج‌شده است.


مثال زیستی

فرض کنید نتایج بیان یک ژن در شرایط مختلف را داریم:

gene_expression = ["BRCA1", 2.3, 4.5, 1.2]

می‌توانیم:

  • نام ژن را تغییر دهیم.
  • مقادیر را بررسی کنیم.
  • داده‌ها را مرتب کنیم.

خلاصه نهایی مرور سریع

  • List ساختاری برای ذخیره چند مقدار در Python است.
  • List ها می‌توانند انواع مختلف داده را همزمان ذخیره کنند.
  • دسترسی به عناصر List با Index انجام می‌شود.
  • شمارش Index در Python از صفر شروع می‌شود.
  • String ها Immutable و List ها Mutable هستند.
  • Slice برای استخراج بخش‌هایی از List استفاده می‌شود.
  • extend() لیست را تغییر می‌دهد، ولی + لیست جدید ایجاد می‌کند.
  • append() یک عنصر اضافه می‌کند.
  • pop() آخرین عنصر را حذف می‌کند.
  • List می‌تواند به عنوان Stack استفاده شود.
  • sorted() نسخه مرتب‌شده جدید می‌سازد.
  • sort() همان List را تغییر می‌دهد.

سوالات مرور

سوال 1: List چیست و چه تفاوتی با String دارد؟

پاسخ:

List یک ساختار داده برای ذخیره چند مقدار است و قابل تغییر است. اما String یک رشته متنی است و پس از ایجاد قابل تغییر نیست.


سوال 2: چرا gene_expression[2] سومین عنصر را برمی‌گرداند؟

پاسخ:

زیرا Python از Zero-based Indexing استفاده می‌کند؛ بنابراین:

  • عنصر اول → Index 0
  • عنصر دوم → Index 1
  • عنصر سوم → Index 2

سوال 3: تفاوت append() و extend() چیست؟

پاسخ:

append() یک عنصر به List اضافه می‌کند، اما extend() عناصر یک List دیگر را به List موجود اضافه می‌کند.


سوال 4: تفاوت sort() و sorted() چیست؟

پاسخ:

sort() خود List را تغییر می‌دهد، اما sorted() یک List جدید مرتب‌شده ایجاد می‌کند و List اصلی بدون تغییر باقی می‌ماند.


سوال 5: چرا String ها قابل تغییر نیستند اما List ها هستند؟

پاسخ:

در Python، String ها به عنوان داده‌های Immutable طراحی شده‌اند، بنابراین تغییر یک کاراکتر باعث ایجاد خطا می‌شود. اما List ها Mutable هستند و عناصر داخلی آن‌ها قابل تغییر است.


02_week-two/01_module-2/02_lecture-3-2-data-structures-part-2-10-41

درس 3-2: ساختارهای داده (Data Structures) در پایتون – Tuple، Set و Dictionary

خلاصه کلی

در درس‌های قبلی با ساختارهای داده ساده‌تر مانند Numbers و Strings آشنا شدیم. در این درس سه ساختار داده مهم و پرکاربرد Python معرفی می‌شوند:

  1. Tuple (تاپل)
  2. Set (مجموعه)
  3. Dictionary (دیکشنری)

این ساختارها امکان ذخیره، سازمان‌دهی و بازیابی داده‌ها را به شکل‌های مختلف فراهم می‌کنند و در تحلیل داده‌های زیستی (Bioinformatics) کاربرد زیادی دارند.

هدف یادگیری

در پایان این درس باید بتوانید:

  • تفاوت Tuple و List را درک کنید.
  • داده‌های بدون تکرار را با Set مدیریت کنید.
  • عملیات مجموعه‌ای مانند Union و Intersection را انجام دهید.
  • داده‌ها را به صورت Key-Value در Dictionary ذخیره و بازیابی کنید.
  • روش افزودن، حذف و تغییر داده‌ها در Dictionary را یاد بگیرید.

مفاهیم کلیدی

1. Tuple (تاپل)

تعریف ساده

Tuple ساختاری شبیه List است که چندین مقدار را ذخیره می‌کند، اما عناصر آن پس از ایجاد قابل تغییر نیستند.

به عبارت دیگر:

Tuple یک ساختار داده Immutable (تغییرناپذیر) است.


ایجاد Tuple

Tuple با قرار دادن مقادیر کنار هم و جدا کردن آن‌ها با کاما ساخته می‌شود.

مثال:

t = ("BRCA1", 0.05, 0.01)

Python آن را به شکل زیر نمایش می‌دهد:

("BRCA1", 0.05, 0.01)

همچنین می‌توان از پرانتز استفاده کرد:

t = ("BRCA1", 0.05, 0.01)

هر دو روش نتیجه یکسان دارند.


ویژگی‌های Tuple

Tuple مانند List دارای ویژگی‌های زیر است:

  • دارای Index است.
  • امکان دسترسی به عناصر وجود دارد.
  • می‌توان روی آن عملیات‌هایی مانند خواندن، جستجو و شمارش انجام داد.

اما:

  • نمی‌توان عناصر آن را تغییر داد.
  • نمی‌توان عنصر جدید اضافه کرد.
  • نمی‌توان عنصر حذف کرد.

کاربرد Tuple در زیست‌محاسبات

Tuple معمولاً برای ذخیره داده‌هایی استفاده می‌شود که نباید تغییر کنند.

مثلاً:

  • مشخصات ثابت یک ژن
  • مختصات یک موقعیت ژنومی
  • اطلاعات یک نمونه آزمایشگاهی

2. Set (مجموعه)

تعریف ساده

Set مجموعه‌ای از عناصر بدون ترتیب و بدون مقدار تکراری است.

ویژگی‌های اصلی:

  • عنصر تکراری ندارد.
  • Index ندارد.
  • ترتیب عناصر مهم نیست.

مثال زیستی: Gene Ontology

فرض کنید می‌خواهیم Annotationهای مربوط به ژن BRCA1 را ذخیره کنیم.

مثلاً:

BRCA1 = {
"DNA repair",
"cell cycle",
"DNA repair"
}

اگر مقدار "DNA repair" دوبار وارد شود، Python آن را فقط یک بار نگه می‌دارد.

نتیجه:

{
"DNA repair",
"cell cycle"
}

کاربرد Set در Bioinformatics

Set برای مقایسه مجموعه‌های زیستی بسیار مفید است.

مثلاً:

  • مقایسه Gene Ontology بین دو ژن
  • پیدا کردن ویژگی‌های مشترک دو مجموعه داده
  • حذف داده‌های تکراری

عملیات روی Set

فرض کنید:

BRCA1 = {...}
BRCA2 = {...}

1. Union (اجتماع)

تمام عناصر موجود در هر دو مجموعه را برمی‌گرداند.

عملگر:

|

مثال:

BRCA1 | BRCA2

نتیجه:

تمام Annotationهای هر دو ژن.


2. Intersection (اشتراک)

عناصر مشترک بین دو Set را پیدا می‌کند.

عملگر:

&

مثال:

BRCA1 & BRCA2

نتیجه:

Annotationهایی که هر دو ژن دارند.


3. Difference (تفاضل)

عناصر موجود در یک Set ولی نه در دیگری.

عملگر:

-

مثال:

BRCA1 - BRCA2

نتیجه:

Annotationهای اختصاصی BRCA1.


3. Dictionary (دیکشنری)

تعریف ساده

Dictionary ساختاری است که داده‌ها را به صورت:

Key : Value

ذخیره می‌کند.

مانند یک فرهنگ لغت:

  • کلمه → معنی

در Python:

  • Key → Value

ساختار Dictionary

Dictionary با آکولاد ساخته می‌شود:

dictionary = {
key1:value1,
key2:value2
}

مثال زیستی:

TF_motif = {
"ATF":"TGACGTCA",
"SP1":"GGGCGG"
}

در اینجا:

Key:

نام فاکتور رونویسی

Value:

توالی DNA مربوط به آن


ویژگی‌های Key و Value

Key:

باید Immutable باشد.

مثلاً:

مجاز:

  • String
  • Number

غیرمجاز:

  • List

Value:

می‌تواند هر نوع داده‌ای باشد:

  • String
  • Number
  • List
  • Dictionary
  • Object

دسترسی به Dictionary

برای گرفتن مقدار، از Key استفاده می‌کنیم.

مثال:

TF_motif["ATF"]

خروجی:

TGACGTCA

اگر Key وجود نداشته باشد

مثلاً:

TF_motif["NF1"]

اگر NF1 وجود نداشته باشد، Python خطا می‌دهد.


بررسی وجود Key

با:

in

می‌توان بررسی کرد.

مثال:

"NF1" in TF_motif

خروجی:

False

تغییر و مدیریت Dictionary

افزودن مقدار جدید

برای اضافه کردن Key جدید:

TF_motif["AP1"] = "TGACTCA"

تغییر مقدار موجود

اگر Key از قبل وجود داشته باشد:

TF_motif["AP1"] = "NEW_SEQUENCE"

مقدار قبلی جایگزین می‌شود.


حذف مقدار

با:

del

مثال:

del TF_motif["SP1"]

کل ورودی حذف می‌شود.


افزودن چند مقدار با update()

برای اضافه کردن چند Key-Value:

TF_motif.update(new_dictionary)

این روش چندین مقدار را همزمان اضافه می‌کند.


توابع مهم Dictionary

len()

تعداد Key-Value ها را برمی‌گرداند.

مثال:

len(TF_motif)

خروجی:

6

یعنی Dictionary شامل 6 زوج Key-Value است.


keys()

تمام Key ها را برمی‌گرداند.

مثال:

list(TF_motif.keys())

خروجی:

["ATF","SP1","c-Myc"]

values()

تمام Value ها را برمی‌گرداند.

مثال:

list(TF_motif.values())

sorted()

برای مرتب‌سازی Key یا Value ها استفاده می‌شود.

مثال:

sorted(TF_motif.keys())

نکته مهم درباره مرتب‌سازی

در Python:

حروف بزرگ قبل از حروف کوچک قرار می‌گیرند.

مثلاً:

ATF
SP1
c-Myc

ممکن است c-Myc در انتها قرار گیرد، زیرا:

C بزرگ < c کوچک

مقایسه String، List و Dictionary

ویژگی String List Dictionary
ترتیب دارد بله بله خیر
Index دارد بله بله خیر
Mutable خیر بله بله
عنصر تکراری بله بله Key خیر
دسترسی Index Index Key

نکات مهم

  • Tuple مانند List است اما Immutable است.
  • Set برای حذف داده‌های تکراری مناسب است.
  • Set ها ترتیب ندارند و Index ندارند.
  • عملیات Union، Intersection و Difference روی Set انجام می‌شود.
  • Dictionary داده‌ها را به شکل Key-Value ذخیره می‌کند.
  • Key در Dictionary باید Immutable باشد.
  • Value در Dictionary می‌تواند هر نوع داده‌ای باشد.
  • دسترسی به Dictionary با Key انجام می‌شود.
  • استفاده از Key غیرموجود باعث خطا می‌شود.
  • keys() کلیدها و values() مقادیر را برمی‌گرداند.
  • Dictionary برای ذخیره اطلاعات مرتبط بسیار مناسب است.

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
Tuple تاپل ساختار داده مرتب و تغییرناپذیر
Immutable تغییرناپذیر داده‌ای که پس از ایجاد تغییر نمی‌کند
Set مجموعه مجموعه‌ای بدون ترتیب و بدون مقدار تکراری
Duplicate مقدار تکراری داده‌ای که بیش از یک بار وجود دارد
Union اجتماع ترکیب عناصر دو مجموعه
Intersection اشتراک عناصر مشترک دو مجموعه
Difference تفاضل عناصر موجود در یک مجموعه و نه دیگری
Dictionary دیکشنری ساختار Key-Value
Key کلید مقدار مورد استفاده برای جستجو
Value مقدار داده مرتبط با یک Key
Update به‌روزرسانی افزودن یا تغییر داده‌ها
Annotation حاشیه‌گذاری/توضیح داده اطلاعات مرتبط با داده زیستی

مثال‌ها و تشبیه‌ها

مثال Dictionary

Dictionary مانند فرهنگ لغت است:

در فرهنگ:

Gene → BRCA1 function

در Python:

Key → Value

مثلاً:

ATF → TGACGTCA

یعنی:

نام فاکتور رونویسی → توالی DNA آن


مثال Set در ژنتیک

دو ژن BRCA1 و BRCA2 را در نظر بگیرید:

BRCA1:
DNA repair
Cell cycle

BRCA2:
DNA repair
Recombination

اشتراک:

DNA repair

فقط با عملیات Intersection قابل استخراج است.


خلاصه نهایی مرور سریع

  • Tuple نسخه غیرقابل تغییر List است.
  • Set مجموعه‌ای بدون ترتیب و بدون داده تکراری است.
  • Dictionary داده‌ها را به صورت Key-Value ذخیره می‌کند.
  • Tuple برای داده‌های ثابت مناسب است.
  • Set برای حذف تکرار و مقایسه مجموعه‌ها کاربرد دارد.
  • Dictionary برای ارتباط دادن دو نوع داده استفاده می‌شود.
  • Key در Dictionary باید Immutable باشد.
  • مقدار Value در Dictionary محدودیتی ندارد.
  • Union با |، Intersection با & و Difference با - انجام می‌شود.
  • keys() کلیدها و values() مقادیر Dictionary را استخراج می‌کنند.

سوالات مرور

سوال 1: تفاوت اصلی List و Tuple چیست؟

پاسخ:

List قابل تغییر است (Mutable)، اما Tuple پس از ایجاد قابل تغییر نیست (Immutable).


سوال 2: چرا Set برای Gene Ontology مناسب است؟

پاسخ:

زیرا Set داده‌های تکراری را حذف می‌کند و امکان مقایسه مجموعه Annotationهای ژن‌ها را فراهم می‌کند.


سوال 3: چگونه می‌توان فهمید یک Key در Dictionary وجود دارد؟

پاسخ:

با استفاده از عملگر in:

"ATF" in TF_motif

سوال 4: Dictionary چه تفاوتی با List دارد؟

پاسخ:

List با Index به عناصر دسترسی دارد، اما Dictionary با Key.


سوال 5: اگر بخواهیم Annotation مشترک دو ژن را پیدا کنیم، از چه عملیاتی استفاده می‌کنیم؟

پاسخ:

از Intersection:

BRCA1 & BRCA2

که عناصر مشترک دو Set را برمی‌گرداند.


02_week-two/01_module-2/04_lecture-4-1-ifs-and-loops-part-1-11-26

کنترل جریان برنامه در پایتون: شرط‌ها و تصمیم‌گیری (If Statements and Boolean Expressions)

خلاصه کلی

در برنامه‌نویسی، معمولاً لازم نیست دستورات همیشه به صورت خطی و پشت سر هم اجرا شوند. بسیاری از برنامه‌ها نیاز دارند بر اساس شرایط مختلف تصمیم بگیرند یا بخش‌هایی از کد را فقط در شرایط خاص اجرا کنند.

در این درس با مفاهیم زیر آشنا می‌شویم:

  • ساختارهای تصمیم‌گیری در Python
  • دستورهای if، else و elif
  • عبارت‌های منطقی و Boolean Expressions
  • عملگرهای مقایسه‌ای، عضویت و هویت
  • ترکیب چند شرط با and، or و not
  • کاربرد شرط‌ها در تحلیل داده‌های زیستی مانند بررسی توالی DNA

هدف اصلی این بخش، یادگیری نحوه کنترل مسیر اجرای برنامه و ایجاد برنامه‌هایی است که بتوانند بر اساس داده‌های ورودی تصمیم بگیرند.


مفاهیم کلیدی

1. Control Flow (کنترل جریان برنامه)

تعریف ساده

Control Flow مشخص می‌کند که دستورات یک برنامه با چه ترتیبی اجرا شوند.

توضیح دقیق

در برنامه‌های ساده، دستورات معمولاً از خط اول تا آخر اجرا می‌شوند. اما در برنامه‌های واقعی، نیاز داریم:

  • اگر یک شرط برقرار بود، کاری انجام شود.
  • اگر شرط برقرار نبود، کار دیگری انجام شود.
  • چند حالت مختلف بررسی شوند.

برای این کار از ساختارهای کنترلی استفاده می‌کنیم.

اهمیت و کاربرد

در زیست‌محاسبات (Bioinformatics)، کنترل جریان برای کارهایی مانند:

  • بررسی معتبر بودن توالی DNA
  • تشخیص وجود بازهای نامشخص
  • تصمیم‌گیری بر اساس ویژگی‌های داده‌های ژنتیکی

بسیار مهم است.


2. if Statement (دستور شرطی اگر)

تعریف ساده

دستور if اجازه می‌دهد یک بخش از کد فقط زمانی اجرا شود که یک شرط درست باشد.

ساختار کلی:

if condition:
    statements

اگر مقدار condition برابر True باشد، دستورات داخل بلوک اجرا می‌شوند.


مثال زیستی

فرض کنید کاربر یک توالی DNA وارد می‌کند و می‌خواهیم بررسی کنیم آیا باز نامشخص N در آن وجود دارد یا نه:

dna = input("Enter a DNA sequence:")

if 'n' in dna:
    nbases = dna.count('n')
    print(nbases)

در این مثال:

  • شرط بررسی می‌کند آیا n داخل DNA وجود دارد.
  • اگر وجود داشته باشد، تعداد آن شمرده می‌شود.

3. Indentation (تورفتگی در پایتون)

تعریف ساده

در Python، فاصله ابتدای خطوط مشخص می‌کند کدام دستورات متعلق به یک بلوک هستند.

مثال:

if 'n' in dna:
    print("Undefined bases found")

خط print به دلیل تورفتگی، بخشی از دستور if است.

نکته مهم

در زبان‌هایی مانند C یا Java معمولاً از {} استفاده می‌شود، اما Python از فاصله‌گذاری استفاده می‌کند.


4. Boolean Expression (عبارت بولی)

تعریف ساده

عبارتی که فقط یکی از دو مقدار زیر را برمی‌گرداند:

  • True
  • False

مثال:

0 < 1

نتیجه:

True

مثال دیگر:

len('atgcgt') >= 10

نتیجه:

False

5. Comparison Operators (عملگرهای مقایسه‌ای)

برای مقایسه مقادیر استفاده می‌شوند.

عملگر مفهوم
== برابر بودن
!= نابرابر بودن
< کوچک‌تر
> بزرگ‌تر
<= کوچک‌تر یا مساوی
>= بزرگ‌تر یا مساوی

تفاوت = و ==

یکی از مهم‌ترین نکات Python:

=

عملگر انتساب (Assignment)

مثال:

a = 5

یعنی مقدار 5 را داخل متغیر a ذخیره کن.


==

عملگر مقایسه

مثال:

a == 5

یعنی بررسی کن آیا مقدار a برابر 5 است یا خیر.


6. Membership Operators (عملگرهای عضویت)

برای بررسی وجود یک مقدار در یک مجموعه استفاده می‌شوند.

دو عملگر اصلی:

عملگر کاربرد
in آیا وجود دارد؟
not in آیا وجود ندارد؟

مثال DNA:

motif in dna

بررسی می‌کند آیا یک الگوی DNA در توالی بزرگ‌تر وجود دارد یا خیر.

مثلاً:

"ATG" in "CCCATGTT"

نتیجه:

True

7. Identity Operators (عملگرهای هویتی)

عملگرهای:

  • is
  • is not

بررسی می‌کنند آیا دو متغیر به یک شیء در حافظه اشاره می‌کنند یا خیر.


تفاوت is و ==

==

مقایسه مقدار

is

مقایسه هویت شیء در حافظه

مثال:

alphabet = ['a','c','g','t']

new_alphabet = alphabet[:]

در اینجا:

alphabet == new_alphabet

نتیجه:

True

چون محتویات یکسان هستند.

اما:

alphabet is new_alphabet

نتیجه:

False

زیرا دو لیست جداگانه در حافظه هستند.


8. if-else Statement (ساختار اگر-در غیر این صورت)

تعریف

برای زمانی استفاده می‌شود که دو حالت ممکن داریم.

ساختار:

if condition:
    code1
else:
    code2

مثال:

if 'n' in dna:
    print("Undefined bases exist")
else:
    print("DNA sequence has no undefined bases")

اگر n وجود داشته باشد پیام اول چاپ می‌شود، در غیر این صورت پیام دوم.


9. elif Statement (شرط‌های چندگانه)

تعریف

وقتی چند حالت مختلف داریم از elif استفاده می‌کنیم.

ساختار:

if condition1:
    code1

elif condition2:
    code2

else:
    code3

مثال DNA

ممکن است کاربر:

  • n کوچک وارد کند.
  • N بزرگ وارد کند.
  • هیچ‌کدام را وارد نکند.

پس:

if 'n' in dna:
    ...
elif 'N' in dna:
    ...
else:
    ...

10. Logical Operators (عملگرهای منطقی)

برای ترکیب چند شرط استفاده می‌شوند.

عملگر مفهوم
and هر دو شرط باید درست باشند
or حداقل یکی از شرط‌ها درست باشد
not معکوس کردن شرط

مثال

بررسی وجود باز نامشخص:

if 'n' in dna or 'N' in dna:
    print("Undefined bases")

یعنی:

اگر n یا N وجود داشت، توالی دارای باز نامشخص است.


نکات مهم

  • شرط‌ها مسیر اجرای برنامه را تغییر می‌دهند.
  • در Python، بلوک‌های کد با indentation مشخص می‌شوند.
  • هر شرط در if باید یک مقدار Boolean تولید کند.
  • برای مقایسه مقدار از == استفاده می‌کنیم، نه =.
  • عملگر in برای جستجوی وجود یک مقدار در رشته‌ها و لیست‌ها بسیار کاربردی است.
  • is با == متفاوت است؛ یکی هویت شیء و دیگری مقدار را بررسی می‌کند.
  • رشته‌ها و لیست‌ها رفتار متفاوتی در حافظه دارند.
  • می‌توان چند شرط را با and، or و not ترکیب کرد.
  • در تحلیل DNA معمولاً باید حروف بزرگ و کوچک را جداگانه یا با یک شرط ترکیبی بررسی کرد.

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
Control Flow کنترل جریان تعیین ترتیب اجرای دستورات برنامه
Conditional Statement دستور شرطی اجرای کد بر اساس یک شرط
if Statement دستور اگر اجرای کد در صورت درست بودن شرط
else Statement دستور در غیر این صورت اجرای کد وقتی شرط غلط است
elif Statement شرط دیگر بررسی شرط‌های اضافی
Boolean Expression عبارت بولی عبارتی که True یا False تولید می‌کند
Comparison Operator عملگر مقایسه‌ای مقایسه دو مقدار
Membership Operator عملگر عضویت بررسی وجود یک عنصر در مجموعه
Identity Operator عملگر هویتی بررسی یکسان بودن شیء در حافظه
Logical Operator عملگر منطقی ترکیب چند شرط
Condition شرط عبارتی که باید ارزیابی شود
Indentation تورفتگی فاصله ابتدای خط برای تعیین بلوک کد

مثال‌ها و تشبیه‌ها

مثال DNA و بازهای نامشخص

فرض کنید یک توالی DNA داریم:

ATGCNNAG

حرف N نشان‌دهنده باز ناشناخته است.

برنامه می‌تواند بررسی کند:

  • آیا N وجود دارد؟
  • چند بار تکرار شده؟
  • آیا توالی معتبر است؟

این یک مثال واقعی از کاربرد شرط‌ها در Bioinformatics است.


تشبیه Identity Operator

فرض کنید دو کتاب دارید:

  • هر دو عنوان و متن یکسان دارند.
  • اما یکی نسخه چاپی جداگانه است.

== می‌گوید:

محتوای دو کتاب یکسان است.

is می‌گوید:

آیا دقیقاً همان کتاب فیزیکی هستند؟


خلاصه نهایی مرور سریع

  • ساختارهای کنترلی باعث می‌شوند برنامه بر اساس شرایط تصمیم بگیرد.
  • دستور if برای اجرای شرطی کد استفاده می‌شود.
  • Python برای مشخص کردن بلوک‌ها از indentation استفاده می‌کند.
  • عبارت‌های Boolean فقط مقدار True یا False دارند.
  • = برای انتساب و == برای مقایسه استفاده می‌شود.
  • عملگر in وجود یک عنصر در رشته یا لیست را بررسی می‌کند.
  • is بررسی می‌کند دو متغیر به یک شیء حافظه‌ای اشاره می‌کنند یا خیر.
  • else حالت جایگزین زمانی اجرا می‌شود که شرط غلط باشد.
  • elif امکان بررسی چند شرط پشت سر هم را فراهم می‌کند.
  • and، or و not برای ترکیب شرایط استفاده می‌شوند.
  • در داده‌های زیستی، شرط‌ها برای اعتبارسنجی و تحلیل توالی‌ها بسیار مهم هستند.

سوالات مرور

1. دستور if در Python چه کاری انجام می‌دهد؟

پاسخ: دستور if اجازه می‌دهد یک بخش از برنامه فقط زمانی اجرا شود که یک شرط مقدار True داشته باشد.


2. تفاوت بین = و == چیست؟

پاسخ: = برای ذخیره مقدار در یک متغیر استفاده می‌شود، اما == برای مقایسه دو مقدار است.


3. چرا در Python از indentation استفاده می‌شود؟

پاسخ: برای مشخص کردن اینکه کدام دستورات متعلق به یک بلوک مانند if هستند.


4. تفاوت == و is چیست؟

پاسخ: == مقدار دو متغیر را مقایسه می‌کند، اما is بررسی می‌کند آیا دو متغیر به یک شیء واحد در حافظه اشاره می‌کنند یا خیر.


5. چگونه بررسی کنیم یک DNA شامل باز نامشخص باشد؟

**پاسخ:

if 'N' in dna or 'n' in dna:
    print("Undefined bases")

این شرط بررسی می‌کند آیا یکی از شکل‌های باز نامشخص در توالی وجود دارد یا خیر.


02_week-two/01_module-2/05_lecture-4-2-ifs-and-loops-part-2-15-28

کنترل جریان برنامه در پایتون: شرط‌ها و حلقه‌ها

Python Control Flow: If Statements and Loops


خلاصه کلی

در برنامه‌نویسی، معمولاً لازم نیست دستورات همیشه به صورت خطی و پشت سر هم اجرا شوند. ساختارهای کنترل جریان (Control Structures) به برنامه اجازه می‌دهند بر اساس شرایط مختلف تصمیم‌گیری کند یا یک بخش از کد را چندین بار اجرا نماید.

در این درس دو مفهوم اصلی بررسی می‌شوند:

  1. شرط‌ها (Conditional Statements) برای تصمیم‌گیری در برنامه
  2. حلقه‌ها (Loops) برای تکرار عملیات روی داده‌های زیاد

این مفاهیم در تحلیل داده‌های زیستی، مخصوصاً هنگام پردازش توالی‌های DNA و پروتئین، اهمیت زیادی دارند؛ زیرا معمولاً با فایل‌ها و مجموعه داده‌های بسیار بزرگ سروکار داریم.


مفاهیم کلیدی


1. Control Flow / ساختار کنترل جریان

تعریف ساده

ساختارهای کنترل جریان تعیین می‌کنند که برنامه کدام بخش از کد را اجرا کند و چه زمانی اجرا را تکرار نماید.

توضیح دقیق

به صورت پیش‌فرض، برنامه‌ها دستورات را از بالا به پایین اجرا می‌کنند. اما با استفاده از کنترل جریان می‌توان:

  • اجرای کد را بر اساس یک شرط تغییر داد.
  • بخشی از برنامه را چندین بار اجرا کرد.
  • در شرایط خاص اجرای حلقه را متوقف کرد.

دو نوع اصلی کنترل جریان:

  • تصمیم‌گیری → if
  • تکرار → loops

2. Boolean Expression / عبارت بولی

تعریف ساده

عبارتی که فقط یکی از دو مقدار زیر را تولید می‌کند:

  • True
  • False

توضیح دقیق

شرط‌هایی که در دستورات if استفاده می‌شوند، معمولاً عبارت‌های بولی هستند.

مثال:

0 < 1

خروجی:

True

یا:

len("ATGC") >= 10

خروجی:

False

3. Conditional Statements / دستورات شرطی

ساختار if

تعریف ساده

دستور if اجازه می‌دهد یک بخش از کد فقط زمانی اجرا شود که یک شرط درست باشد.

ساختار:

if condition:
    statements

مثال زیستی:

بررسی وجود باز غیرمشخص (N) در DNA:

if "n" in dna:
    nbases = dna.count("n")

اگر حرف n در توالی DNA وجود داشته باشد، تعداد آن شمرده می‌شود.


4. if-else Statement / شرط if-else

تعریف ساده

برای زمانی استفاده می‌شود که بخواهیم برای هر دو حالت درست و غلط شرط، دستور مشخصی داشته باشیم.

ساختار:

if condition:
    code1
else:
    code2

مثال:

if "N" in dna:
    print("DNA contains undefined bases")
else:
    print("DNA has no undefined bases")

اگر DNA شامل N باشد پیام اول چاپ می‌شود، در غیر این صورت پیام دوم.


5. elif Statement / شرط چندگانه

تعریف ساده

برای بررسی چندین شرط مختلف در یک ساختار شرطی استفاده می‌شود.

ساختار:

if condition1:
    code1
elif condition2:
    code2
else:
    code3

مثال:

بررسی وجود بازهای غیرمشخص کوچک و بزرگ:

if "n" in dna:
    ...
elif "N" in dna:
    ...
else:
    ...

6. Comparison Operators / عملگرهای مقایسه‌ای

برای مقایسه مقادیر استفاده می‌شوند.

عملگر معنی
== برابر است
!= نابرابر است
< کوچک‌تر
> بزرگ‌تر
<= کوچک‌تر یا مساوی
>= بزرگ‌تر یا مساوی

نکته مهم

در پایتون:

=

برای انتساب مقدار است.

مثال:

x = 10

اما:

==

برای مقایسه است.

مثال:

x == 10

7. Membership Operators / عملگرهای عضویت

دو عملگر مهم:

in

بررسی وجود یک عنصر در یک مجموعه:

"A" in "ATGC"

خروجی:

True

not in

بررسی نبودن عنصر:

"U" not in protein

8. Identity Operators / عملگرهای هویتی

دو عملگر:

  • is
  • is not

تفاوت با ==

== بررسی می‌کند دو مقدار برابر هستند یا نه.

اما:

is

بررسی می‌کند آیا دو متغیر به یک شیء یکسان در حافظه اشاره می‌کنند یا خیر.

مثال:

alphabet = ["A","C","G","T"]

new_alphabet = alphabet[:]

دو لیست مقدار مشابه دارند:

alphabet == new_alphabet

نتیجه:

True

اما:

alphabet is new_alphabet

نتیجه:

False

زیرا دو شیء متفاوت در حافظه هستند.


9. Logical Operators / عملگرهای منطقی

برای ترکیب چند شرط استفاده می‌شوند.

and

هر دو شرط باید درست باشند.

مثال:

A and B

or

حداقل یکی از شرط‌ها باید درست باشد.

مثال:

"n" in dna or "N" in dna

not

مقدار شرط را معکوس می‌کند.

مثال:

not True

نتیجه:

False

10. Loops / حلقه‌ها

تعریف ساده

حلقه‌ها اجازه می‌دهند یک قطعه کد چندین بار اجرا شود.

اهمیت در زیست‌محاسبات

در داده‌های ژنومی معمولاً:

  • میلیون‌ها باز DNA
  • هزاران توالی پروتئین
  • فایل‌های بزرگ ژنومی

وجود دارند و بررسی دستی آن‌ها امکان‌پذیر نیست.


11. While Loop / حلقه while

تعریف ساده

تا زمانی که یک شرط درست باشد، کد تکرار می‌شود.

ساختار:

while condition:
    code

مثال: پیدا کردن جایگاه‌های splice site در DNA

هدف:

پیدا کردن تمام توالی‌های:

GT

در DNA.

تابع:

dna.find("gt")

اگر پیدا نشود:

-1

برمی‌گرداند.

حلقه تا زمانی ادامه دارد که مقدار پیدا شده معتبر باشد.


12. For Loop / حلقه for

تعریف ساده

برای پیمایش روی عناصر یک مجموعه یا توالی استفاده می‌شود.

ساختار:

for item in sequence:
    code

مثال:

for motif in motifs:
    print(motif)

هر بار یک motif پردازش می‌شود.


13. Range Function / تابع range

برای ایجاد مجموعه‌ای از اعداد استفاده می‌شود.

مثال:

range(4)

تولید می‌کند:

0,1,2,3

مثال:

for i in range(4):
    print(i)

خروجی:

0
1
2
3

تعیین شروع و گام

ساختار:

range(start, stop, step)

مثال:

range(1,10,2)

خروجی:

1,3,5,7,9

14. break Statement / دستور break

تعریف ساده

حلقه را فوراً متوقف می‌کند.

مثال:

بررسی معتبر بودن پروتئین:

اگر یک آمینواسید غیرمجاز پیدا شود:

break

اجرا متوقف می‌شود.


15. continue Statement / دستور continue

تعریف ساده

ادامه حلقه را حفظ می‌کند اما اجرای باقی کدهای همان تکرار را رد می‌کند.

مثال:

حذف آمینواسیدهای غیرمجاز:

اگر کاراکتر غیرمجاز باشد:

continue

و به عنصر بعدی می‌رود.


16. Loop Else / else در حلقه‌ها

پایتون اجازه می‌دهد بعد از حلقه for یا while از else استفاده کنیم.

مثال:

for x in sequence:
    ...
else:
    ...

نکته مهم

else فقط زمانی اجرا می‌شود که حلقه بدون break تمام شود.

اگر حلقه با break متوقف شود:

  • بخش else اجرا نمی‌شود.

17. pass Statement / دستور خالی

تعریف ساده

دستوری است که هیچ کاری انجام نمی‌دهد.

کاربرد:

وقتی از نظر ساختاری باید دستوری وجود داشته باشد اما هنوز کدی برای آن ننوشته‌ایم.

مثال:

if condition:
    pass

بعداً می‌توان جای آن کد واقعی قرار داد.


نکات مهم

  • دستورات شرطی با if مسیر اجرای برنامه را تغییر می‌دهند.

  • شرط‌ها همیشه باید یک مقدار بولی (True یا False) تولید کنند.

  • در پایتون فاصله‌گذاری (Indentation) برای مشخص کردن بلوک کد ضروری است.

  • حلقه while زمانی مناسب است که تعداد تکرار مشخص نیست و وابسته به یک شرط است.

  • حلقه for برای پیمایش روی مجموعه‌ها و تعداد مشخصی از عناصر مناسب است.

  • = با == تفاوت دارد:

    • = → مقداردهی
    • == → مقایسه
  • is با == متفاوت است:

    • == → برابری مقدار
    • is → یکسان بودن شیء در حافظه
  • break حلقه را متوقف می‌کند.

  • continue فقط یک مرحله از حلقه را رد می‌کند.

  • else در حلقه فقط زمانی اجرا می‌شود که حلقه با break متوقف نشده باشد.


اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
Control Flow جریان کنترل تعیین مسیر اجرای برنامه
Conditional Statement دستور شرطی اجرای کد بر اساس شرط
Boolean Expression عبارت بولی عبارتی با مقدار True یا False
Comparison Operator عملگر مقایسه‌ای مقایسه دو مقدار
Membership Operator عملگر عضویت بررسی وجود عنصر در مجموعه
Identity Operator عملگر هویتی بررسی یکسان بودن شیء
Logical Operator عملگر منطقی ترکیب چند شرط
Loop حلقه اجرای تکراری کد
While Loop حلقه while تکرار تا زمانی که شرط درست است
For Loop حلقه for پیمایش روی مجموعه
Range بازه عددی تولید دنباله اعداد
Break توقف حلقه خروج فوری از حلقه
Continue ادامه حلقه رفتن به تکرار بعدی
Pass دستور خنثی بدون انجام عملیات
Indentation تورفتگی فاصله ابتدای خطوط برای تعیین بلوک

مثال‌ها و تشبیه‌ها

مثال پیدا کردن splice site در DNA

فرض کنید یک توالی DNA داریم:

ATGGTACGT

می‌خواهیم تمام موقعیت‌هایی که GT وجود دارد پیدا کنیم.

حلقه while:

  1. اولین GT را پیدا می‌کند.
  2. موقعیت آن را ذخیره می‌کند.
  3. جستجو را از موقعیت بعد ادامه می‌دهد.
  4. این کار تا زمانی ادامه دارد که دیگر GT وجود نداشته باشد.

تشبیه حلقه‌ها

حلقه‌ها مانند بررسی یک کتاب بزرگ هستند:

به جای اینکه بگوییم:

«صفحه ۱ را بررسی کن، صفحه ۲ را بررسی کن، صفحه ۳ را بررسی کن...»

یک حلقه می‌نویسیم که:

«هر صفحه را بررسی کن و همین عملیات را تکرار کن.»


خلاصه نهایی مرور سریع

  • ساختارهای کنترل جریان باعث تغییر مسیر اجرای برنامه می‌شوند.
  • if برای تصمیم‌گیری بر اساس شرط استفاده می‌شود.
  • شرط‌ها باید مقدار Boolean تولید کنند.
  • elif برای بررسی چند شرط متوالی استفاده می‌شود.
  • and، or و not برای ترکیب شرایط هستند.
  • for برای پیمایش روی عناصر یک مجموعه استفاده می‌شود.
  • while تا زمانی که شرط برقرار باشد اجرا می‌شود.
  • تابع range() برای تولید دنباله اعداد کاربرد دارد.
  • break حلقه را متوقف می‌کند.
  • continue یک مرحله از حلقه را رد می‌کند.
  • pass یک جای‌نگهدار بدون عملیات است.
  • در Python تورفتگی خطوط برای تعیین بلوک‌های کد حیاتی است.

سوالات مرور

1. سوال مفهومی:

چرا در تحلیل داده‌های ژنومی استفاده از حلقه‌ها ضروری است؟

پاسخ: زیرا داده‌های ژنومی معمولاً بسیار بزرگ هستند و انجام عملیات تکراری روی میلیون‌ها عنصر بدون حلقه امکان‌پذیر نیست.


2. سوال تعریفی:

تفاوت while و for چیست؟

پاسخ: while تا زمانی اجرا می‌شود که یک شرط برقرار باشد، اما for معمولاً برای پیمایش روی عناصر یک مجموعه یا بازه عددی استفاده می‌شود.


3. سوال کاربردی:

اگر بخواهیم بررسی کنیم آیا DNA شامل باز N است، از چه عملگری استفاده می‌کنیم؟

پاسخ:

از عملگر عضویت in:

"N" in dna

4. سوال مفهومی:

تفاوت break و continue چیست؟

پاسخ:

  • break کل حلقه را متوقف می‌کند.
  • continue فقط اجرای فعلی را رد کرده و به تکرار بعدی می‌رود.

5. سوال کاربردی:

چرا ممکن است از else بعد از حلقه استفاده کنیم؟

پاسخ: برای اجرای کدی که فقط زمانی اجرا شود که حلقه بدون استفاده از break کامل شده باشد.


03_week-three/01_module-3/01_lecture-5-1-functions-part-1-5-54

توابع در پایتون (Functions) – بخش اول

Python Functions – Part 1


خلاصه کلی

در این درس با مفهوم Function (تابع) در برنامه‌نویسی پایتون آشنا می‌شویم. توابع یکی از مهم‌ترین ابزارهای برنامه‌نویسی هستند که به ما اجازه می‌دهند یک قطعه کد را یک بار بنویسیم و بارها در برنامه استفاده کنیم.

در زیست‌محاسبات (Bioinformatics)، توابع اهمیت ویژه‌ای دارند زیرا بسیاری از عملیات روی توالی‌های DNA و پروتئین به صورت تکراری انجام می‌شوند؛ مانند:

  • محاسبه درصد GC در DNA
  • بررسی وجود codonهای توقف (Stop Codons)
  • پردازش و تحلیل توالی‌ها

هدف این درس:

  • آشنایی با مفهوم تابع
  • یادگیری نحوه تعریف تابع در Python
  • آشنایی با ورودی، خروجی و مستندسازی توابع
  • درک مفهوم Scope (دامنه دسترسی متغیرها)

مفاهیم کلیدی


1. Function / تابع

تعریف ساده

تابع یک بخش مستقل از برنامه است که:

  1. ورودی دریافت می‌کند.
  2. روی ورودی عملیات انجام می‌دهد.
  3. یک خروجی برمی‌گرداند.

ساختار کلی:

Input → Processing → Output

توضیح دقیق

تابع مانند یک ماشین کوچک در برنامه است.

برای مثال:

  • ورودی: یک توالی DNA
  • پردازش: شمارش بازهای G و C
  • خروجی: درصد GC

به جای نوشتن دوباره کد محاسبه GC در قسمت‌های مختلف برنامه، آن را داخل یک تابع قرار می‌دهیم و هر زمان لازم بود آن را فراخوانی می‌کنیم.


اهمیت و کاربرد

استفاده از توابع باعث می‌شود:

1. Reusability / قابلیت استفاده مجدد

یک بار کد نوشته می‌شود و بارها استفاده می‌شود.

2. خوانایی بهتر برنامه

برنامه به مجموعه‌ای از مراحل مشخص تقسیم می‌شود.

مثلاً:

calculate_GC()
check_stop_codons()
translate_DNA()

هر تابع یک وظیفه مشخص دارد.

3. همکاری در پروژه‌های بزرگ

می‌توان از توابع نوشته‌شده توسط دیگر برنامه‌نویسان استفاده کرد بدون اینکه لازم باشد جزئیات داخلی آن‌ها را بدانیم.


2. Built-in Functions / توابع داخلی پایتون

تعریف

توابعی هستند که از قبل در Python وجود دارند.

مثال:

print()

برای نمایش خروجی:

print("Hello")

len()

برای محاسبه طول:

len("ATGC")

خروجی:

4

3. User Defined Function / تابع تعریف‌شده توسط کاربر

تعریف

تابعی که خود برنامه‌نویس ایجاد می‌کند.

در Python با کلمه کلیدی:

def

ساخته می‌شود.


4. تعریف تابع در Python

ساختار کلی:

def function_name(arguments):
    statements
    return output

اجزای اصلی:

بخش توضیح
def اعلام شروع تعریف تابع
function_name نام تابع
arguments ورودی‌های تابع
: شروع بلوک تابع
indentation مشخص‌کننده بدنه تابع
return مقدار خروجی

5. Indentation / تورفتگی

در Python برخلاف بسیاری از زبان‌ها، تورفتگی برای مشخص کردن بلوک کد ضروری است.

مثال:

def example():
    print("Hello")

خط دوم متعلق به تابع است زیرا دارای تورفتگی است.


6. Documentation String / رشته توضیح تابع

تعریف

اولین خط داخل تابع می‌تواند یک متن توضیحی درباره عملکرد تابع باشد.

مثال:

def GC(DNA):
    "Computes GC percentage of a DNA sequence"

این متن برای مستندسازی تابع استفاده می‌شود.


مشاهده مستندات تابع

با دستور:

help(GC)

می‌توان توضیحات تابع را مشاهده کرد.


7. Return Statement / دستور بازگرداندن خروجی

تعریف

برای برگرداندن نتیجه محاسبه تابع استفاده می‌شود.

ساختار:

return value

مثال:

return GC_percent

پس از اجرای تابع، مقدار خروجی به برنامه اصلی برمی‌گردد.


مثال اصلی درس: تابع محاسبه درصد GC

هدف

ایجاد تابعی که درصد بازهای:

  • G
  • C

را در یک توالی DNA محاسبه کند.


تعریف تابع

def GC(DNA):

ورودی:

DNA

یک رشته شامل توالی DNA است.


مراحل محاسبه

1. شمارش بازهای نامشخص

اگر DNA شامل:

N

باشد، نمی‌توان آن را در محاسبه وارد کرد.

پس تعداد آن‌ها را ذخیره می‌کنیم:

nbases = DNA.count("N")

2. محاسبه درصد GC

فرمول:

[ GC% = \frac{G+C}{Total\ Bases} \times 100 ]

اما تعداد بازهای نامشخص حذف می‌شود:

[ GC% = \frac{G+C}{Length(DNA)-N} \times100 ]


3. برگرداندن نتیجه

نتیجه در متغیری مانند:

GC_percent

ذخیره شده و با:

return GC_percent

برگردانده می‌شود.


8. Calling a Function / فراخوانی تابع

پس از تعریف تابع، می‌توان آن را اجرا کرد.

مثال:

GC("ATGCGCTA")

تابع:

  1. توالی را دریافت می‌کند.
  2. درصد GC را محاسبه می‌کند.
  3. مقدار خروجی را برمی‌گرداند.

9. Variable Scope / دامنه متغیرها

تعریف ساده

Scope مشخص می‌کند یک متغیر در کدام بخش برنامه قابل مشاهده و استفاده است.

دو نوع اصلی دارد:

  1. Global Scope
  2. Local Scope

10. Global Variable / متغیر سراسری

تعریف

متغیری که خارج از تمام توابع تعریف می‌شود.

مثال:

dna = "ATGC"

این متغیر در بخش‌های مختلف برنامه قابل دسترسی است.


11. Local Variable / متغیر محلی

تعریف

متغیری که داخل یک تابع تعریف می‌شود.

مثال:

def GC(DNA):
    nbases = 3

در اینجا:

nbases

فقط داخل تابع GC وجود دارد.


نکته مهم

پس از پایان اجرای تابع، برنامه اصلی نمی‌تواند به متغیر محلی دسترسی داشته باشد.

مثلاً:

print(nbases)

باعث خطا می‌شود زیرا:

nbases

در خارج از تابع شناخته‌شده نیست.


نکات مهم

  • توابع برای کاهش تکرار کد و افزایش خوانایی برنامه استفاده می‌شوند.
  • هر تابع بهتر است یک وظیفه مشخص انجام دهد.
  • تعریف تابع با def انجام می‌شود.
  • بدنه تابع باید دارای indentation باشد.
  • return مقدار خروجی تابع را مشخص می‌کند.
  • رشته توضیحی ابتدای تابع برای مستندسازی استفاده می‌شود.
  • متغیرهای داخل تابع معمولاً Local هستند.
  • متغیرهای خارج از تابع Global هستند.
  • یک متغیر محلی فقط در محدوده تابع خودش قابل استفاده است.
  • در پروژه‌های Bioinformatics، توابع برای تحلیل‌های تکراری روی توالی‌ها بسیار مهم هستند.

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
Function تابع بخش مستقل برنامه که ورودی گرفته و خروجی تولید می‌کند
Argument آرگومان / ورودی تابع مقداری که هنگام فراخوانی به تابع داده می‌شود
Input ورودی داده‌ای که تابع دریافت می‌کند
Output خروجی نتیجه‌ای که تابع برمی‌گرداند
Built-in Function تابع داخلی تابع آماده موجود در Python
User Defined Function تابع تعریف‌شده توسط کاربر تابعی که برنامه‌نویس ایجاد می‌کند
Definition تعریف تابع ایجاد ساختار تابع با def
Return Statement دستور بازگشت برگرداندن نتیجه تابع
Documentation String رشته مستندسازی توضیح عملکرد تابع
Scope دامنه دسترسی محدوده‌ای که متغیر قابل استفاده است
Global Variable متغیر سراسری متغیری قابل دسترسی در کل برنامه
Local Variable متغیر محلی متغیری محدود به یک تابع

مثال‌ها و تشبیه‌ها

تشبیه تابع به ماشین حساب

تابع مانند یک دستگاه است:

ورودی:

دو عدد

عملیات:

جمع کردن

خروجی:

نتیجه جمع

در Bioinformatics نیز:

ورودی:

DNA sequence

عملیات:

محاسبه تعداد G و C

خروجی:

GC percentage

مثال زیستی

فرض کنید چند هزار توالی DNA داریم.

بدون تابع:

برای هر توالی باید دوباره کد محاسبه GC را بنویسیم.

با تابع:

GC(sequence1)
GC(sequence2)
GC(sequence3)

همان کد برای همه توالی‌ها استفاده می‌شود.


خلاصه نهایی مرور سریع

  • تابع مجموعه‌ای از دستورات است که یک کار مشخص انجام می‌دهد.
  • توابع باعث کاهش تکرار کد و افزایش خوانایی می‌شوند.
  • توابع داخلی مانند print() و len() از قبل در Python وجود دارند.
  • توابع جدید با def ساخته می‌شوند.
  • ورودی‌های تابع در قالب argument دریافت می‌شوند.
  • خروجی تابع با return مشخص می‌شود.
  • اولین خط تابع می‌تواند توضیح مستندسازی باشد.
  • Scope تعیین می‌کند متغیر در کدام بخش برنامه قابل استفاده است.
  • Global Variable خارج از تابع تعریف می‌شود.
  • Local Variable فقط داخل همان تابع قابل مشاهده است.
  • در تحلیل زیستی، توابع برای عملیات تکراری روی DNA و پروتئین بسیار کاربردی هستند.

سوالات مرور

1. سوال مفهومی:

چرا استفاده از توابع در برنامه‌نویسی مفید است؟

پاسخ: زیرا باعث استفاده مجدد از کد، کاهش خطا، افزایش خوانایی و ساده‌تر شدن ساختار برنامه می‌شود.


2. سوال تعریفی:

تابع چیست؟

پاسخ: تابع بخشی از برنامه است که ورودی دریافت می‌کند، عملیات مشخصی انجام می‌دهد و یک خروجی تولید می‌کند.


3. سوال کاربردی:

اگر بخواهیم درصد GC یک DNA را چندین بار محاسبه کنیم، بهترین روش چیست؟

پاسخ: ایجاد یک تابع مانند GC(DNA) و فراخوانی آن برای هر توالی.


4. سوال مفهومی:

تفاوت Global و Local Variable چیست؟

پاسخ:

  • Global Variable در کل برنامه قابل دسترسی است.
  • Local Variable فقط داخل تابعی که در آن تعریف شده قابل استفاده است.

5. سوال کاربردی:

چرا متغیر nbases در تابع GC خارج از تابع قابل استفاده نیست؟

پاسخ: زیرا داخل تابع تعریف شده و Scope آن محلی است. خارج از تابع، Python آن متغیر را نمی‌شناسد.


03_week-three/01_module-3/02_lecture-5-2-functions-part-2-8-20

توابع در پایتون (Functions) — بخش دوم: توابع بولی، پارامترهای پیش‌فرض و کاربرد در تحلیل توالی DNA

خلاصه کلی

در این درس مفهوم Function (تابع) در پایتون ادامه داده می‌شود و با نوع خاصی از توابع به نام Boolean Functions (توابع بولی) آشنا می‌شویم. این توابع به جای بازگرداندن مقدارهای پیچیده، فقط یکی از دو مقدار True یا False را برمی‌گردانند و معمولاً برای تصمیم‌گیری در ساختارهای شرطی مانند if استفاده می‌شوند.

در ادامه، یک مثال زیستی واقعی بررسی می‌شود: طراحی تابعی برای تشخیص وجود In-frame Stop Codon در یک توالی DNA. همچنین مفهوم مهم Default Parameter (پارامتر پیش‌فرض) معرفی می‌شود که به تابع اجازه می‌دهد در صورت عدم دریافت یک ورودی، از مقدار مشخصی استفاده کند.

هدف یادگیری این بخش

  • درک مفهوم توابع بولی در پایتون
  • یادگیری طراحی توابع برای مسائل زیستی مانند تحلیل DNA
  • آشنایی با نحوه پیمایش توالی DNA در قالب Codon
  • استفاده از پارامترهای پیش‌فرض در توابع

مفاهیم کلیدی

1. Boolean Function (تابع بولی)

تعریف ساده

تابعی است که خروجی آن فقط یکی از دو مقدار منطقی زیر است:

  • True (درست)
  • False (نادرست)

توضیح دقیق

در برنامه‌نویسی همیشه لازم نیست یک تابع عدد، رشته یا داده پیچیده برگرداند. گاهی فقط می‌خواهیم بدانیم یک شرط برقرار است یا خیر.

مثلاً:

  • آیا یک توالی DNA دارای Codon توقف است؟
  • آیا یک رشته شامل یک الگوی خاص است؟
  • آیا یک داده معتبر است؟

در این موارد از تابع بولی استفاده می‌کنیم.

ساختار استفاده:

if boolean_function(data):
    do something

تابع بررسی می‌کند و اگر نتیجه True باشد، کد داخل شرط اجرا می‌شود.

اهمیت در زیست‌محاسبات

در Bioinformatics بسیاری از توابع برای پاسخ به سوالات بله/خیر استفاده می‌شوند:

  • آیا توالی DNA دارای Mutation خاصی است؟
  • آیا یک توالی شامل Motif مشخصی است؟
  • آیا پروتئین دارای ویژگی خاصی است؟

2. Stop Codon (کدون توقف)

تعریف ساده

Stop Codon یک توالی سه نوکلئوتیدی در DNA یا RNA است که پایان ترجمه پروتئین را مشخص می‌کند.

توضیح دقیق

در ترجمه DNA به پروتئین:

  • توالی DNA به گروه‌های سه‌تایی تقسیم می‌شود.
  • هر گروه سه‌تایی یک Codon (کدون) نام دارد.
  • هر Codon معمولاً یک آمینواسید را مشخص می‌کند.

اما سه Codon ویژه وجود دارند که به جای آمینواسید، پایان ترجمه را اعلام می‌کنند:

Stop Codon
TGA
TAG
TAA

3. Reading Frame (چارچوب خوانش)

تعریف ساده

Reading Frame مشخص می‌کند تقسیم توالی DNA به Codonها از کدام موقعیت شروع شود.

توضیح دقیق

چون هر Codon سه باز دارد، یک توالی DNA می‌تواند سه حالت خوانش داشته باشد:

  • Frame 0 → شروع از باز اول
  • Frame 1 → شروع از باز دوم
  • Frame 2 → شروع از باز سوم

مثال:

DNA:
AAATGA

Frame 0:
AAA | TGA

Frame 1:
AAT | GA...

Frame 2:
ATG | A...

یک Stop Codon ممکن است در یک Reading Frame وجود داشته باشد ولی در Frame دیگر دیده نشود.

اهمیت

در تحلیل ژن‌ها، پیدا کردن Codon توقف باید در چارچوب خوانش صحیح انجام شود؛ زیرا یک تغییر در نقطه شروع باعث تغییر تمام Codonهای بعدی می‌شود.


4. طراحی تابع has_stop_codon

هدف: بررسی اینکه آیا یک توالی DNA دارای Stop Codon در یک Reading Frame مشخص است یا خیر.

ساختار کلی تابع:

def has_stop_codon(dna):

ورودی:

  • dna → توالی DNA

خروجی:

  • True → اگر Stop Codon پیدا شود
  • False → اگر پیدا نشود

الگوریتم تابع

مرحله ۱: مقدار پیش‌فرض

ابتدا فرض می‌کنیم Stop Codon وجود ندارد:

stop_codon_found = False

مرحله ۲: پیمایش DNA

با حلقه for سه باز سه باز حرکت می‌کنیم:

for i in range(0, len(dna), 3):

یعنی:

  • شروع از موقعیت صفر
  • پایان تا انتهای DNA
  • افزایش سه‌تایی

مرحله ۳: استخراج Codon

سه باز متوالی استخراج می‌شوند:

codon = dna[i:i+3]

مثلاً:

ATGCGTAA

به شکل زیر بررسی می‌شود:

ATG
CGT
AA

مرحله ۴: بررسی Stop Codon

Codon بررسی شده با لیست Stop Codonها مقایسه می‌شود:

if codon in stop_codons:

اگر پیدا شود:

stop_codon_found = True
break

و تابع متوقف می‌شود.


5. Default Parameter (پارامتر پیش‌فرض)

تعریف ساده

پارامتری است که اگر کاربر هنگام فراخوانی تابع مقدار آن را وارد نکند، مقدار مشخصی به صورت خودکار دریافت می‌کند.

مثال:

بدون مقدار پیش‌فرض:

def has_stop_codon(dna, frame):

کاربر مجبور است بنویسد:

has_stop_codon(dna, 0)

با مقدار پیش‌فرض:

def has_stop_codon(dna, frame=0):

اکنون:

has_stop_codon(dna)

معادل است با:

has_stop_codon(dna, 0)

اهمیت

پارامترهای پیش‌فرض باعث می‌شوند:

  • استفاده از تابع ساده‌تر شود.
  • رفتار استاندارد برای تابع تعریف شود.
  • در صورت نیاز بتوان مقدار را تغییر داد.

نکات مهم

  • تابع بولی معمولاً برای استفاده در شرط‌های if طراحی می‌شود.
  • Stop Codonها شامل سه توالی TGA, TAG, TAA هستند.
  • برای پیدا کردن Stop Codon باید Reading Frame صحیح را در نظر گرفت.
  • حرکت در DNA برای پیدا کردن Codonها معمولاً با گام ۳ انجام می‌شود.
  • استفاده از break باعث توقف فوری حلقه پس از پیدا کردن نتیجه موردنظر می‌شود.
  • در مقایسه DNA بهتر است حروف کوچک و بزرگ یکسان‌سازی شوند:

مثلاً:

dna.lower()
  • پارامترهای پیش‌فرض باید هنگام تعریف تابع مشخص شوند.
  • وجود یک Stop Codon در یک Frame الزاماً به معنی وجود آن در Frameهای دیگر نیست.

مثال‌ها و تشبیه‌ها

مثال: تقسیم DNA به Codon

فرض کنید توالی DNA زیر را داریم:

AAATGACCC

اگر از Frame 0 شروع کنیم:

AAA | TGA | CCC

Codon:

TGA

یک Stop Codon است، بنابراین تابع مقدار:

True

برمی‌گرداند.

اما اگر از Frame 1 شروع کنیم:

AAT | GAC | CC

دیگر Stop Codon وجود ندارد و نتیجه:

False

خواهد بود.


تشبیه Reading Frame

Reading Frame مانند خواندن یک جمله با فاصله‌های سه‌تایی است.

مثلاً:

THE CAT ATE

اگر گروه‌بندی را از ابتدای جمله شروع کنیم:

THE | CAT | ATE

معنی مشخصی دارد.

اما اگر یک حرف جلوتر شروع کنیم:

HEC | ATA | TE...

گروه‌بندی کاملاً تغییر می‌کند.

در DNA نیز تغییر نقطه شروع باعث تغییر Codonها می‌شود.


اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
Function تابع قطعه‌ای از کد که ورودی دریافت کرده و خروجی تولید می‌کند
Boolean Function تابع بولی تابعی که فقط True یا False برمی‌گرداند
Boolean Value مقدار منطقی یکی از دو مقدار True یا False
Stop Codon کدون توقف توالی سه‌نوکلئوتیدی که پایان ترجمه را مشخص می‌کند
Codon کدون گروه سه‌تایی نوکلئوتیدها در DNA/RNA
Reading Frame چارچوب خوانش نقطه شروع تقسیم DNA به Codonها
Default Parameter پارامتر پیش‌فرض مقداری که در صورت نبود ورودی استفاده می‌شود
Argument آرگومان مقداری که هنگام فراخوانی تابع به آن داده می‌شود
Break توقف حلقه دستور خروج فوری از حلقه
Lower Method متد تبدیل به حروف کوچک تبدیل رشته به حروف کوچک برای مقایسه آسان‌تر

خلاصه نهایی مرور سریع

  • تابع می‌تواند هر نوع داده‌ای را برگرداند، اما گاهی فقط به پاسخ True/False نیاز داریم.
  • Boolean Function برای بررسی شرایط منطقی استفاده می‌شود.
  • Stop Codonها سه توالی TGA، TAG و TAA هستند.
  • DNA هنگام ترجمه به Codonهای سه‌تایی تقسیم می‌شود.
  • سه Reading Frame مختلف برای هر توالی DNA وجود دارد.
  • وجود Stop Codon وابسته به Reading Frame است.
  • در تابع has_stop_codon ابتدا مقدار پیش‌فرض False قرار داده می‌شود.
  • حلقه for با گام ۳ برای بررسی Codonها استفاده می‌شود.
  • دستور break پس از یافتن نتیجه موردنظر حلقه را متوقف می‌کند.
  • Default Parameter باعث می‌شود تابع بدون وارد کردن همه آرگومان‌ها قابل استفاده باشد.

سوالات مرور

سوال ۱: تابع بولی چیست؟

پاسخ: تابعی است که خروجی آن فقط یکی از دو مقدار منطقی True یا False است و معمولاً برای بررسی شرایط استفاده می‌شود.


سوال ۲: چرا بررسی Stop Codon باید با Reading Frame انجام شود؟

پاسخ: زیرا DNA می‌تواند از سه نقطه مختلف به Codonهای سه‌تایی تقسیم شود و یک Stop Codon ممکن است فقط در یکی از این چارچوب‌ها وجود داشته باشد.


سوال ۳: سه Stop Codon اصلی در DNA کدام‌اند؟

پاسخ:

  • TGA
  • TAG
  • TAA

سوال ۴: چرا در تابع has_stop_codon از break استفاده می‌کنیم؟

پاسخ: زیرا هدف فقط تشخیص وجود یا عدم وجود Stop Codon است و پس از یافتن اولین مورد، ادامه بررسی ضرورتی ندارد.


سوال ۵: مزیت استفاده از پارامتر پیش‌فرض در تابع چیست؟

پاسخ: باعث می‌شود تابع در حالت معمول بدون وارد کردن مقدار اضافی قابل استفاده باشد، اما همچنان امکان تغییر مقدار در صورت نیاز وجود داشته باشد.


03_week-three/01_module-3/03_lecture-5-3-functions-part-3-13-24

درس 5-3: توابع در Python (Functions) — آرگومان‌ها، Reverse Complement و تکنیک‌های پیشرفته

خلاصه کلی

در این بخش، مفاهیم پیشرفته‌تر Functions در Python بررسی می‌شوند. پس از یادگیری ساختار اولیه توابع، در این درس با نحوه ارسال آرگومان‌ها، ایجاد توابع کاربردی در تحلیل توالی‌های DNA، مدیریت مقادیر پیش‌فرض، کار با رشته‌ها (Strings)، ساخت Reverse Complement و استفاده از تکنیک‌هایی مانند List Comprehension و آرگومان‌های متغیر آشنا می‌شویم.

هدف اصلی این درس:

  • یادگیری روش‌های مختلف ارسال ورودی به توابع
  • طراحی توابع کاربردی برای مسائل Bioinformatics
  • درک نحوه پردازش توالی‌های DNA با Python
  • آشنایی با ابزارهای قدرتمند پردازش رشته‌ها و لیست‌ها

مفاهیم کلیدی

1. Function Arguments Passing — روش ارسال آرگومان‌های تابع

تعریف ساده

هنگام فراخوانی یک تابع، مقادیری که به آن ارسال می‌کنیم Arguments نام دارند. Python دو روش اصلی برای ارسال آرگومان‌ها دارد:

  1. ارسال بر اساس موقعیت (Positional Arguments)
  2. ارسال بر اساس نام (Keyword Arguments)

Positional Arguments — آرگومان‌های موقعیتی

تعریف

در این روش، مقدار آرگومان‌ها بر اساس ترتیب قرار گرفتن آن‌ها در تعریف تابع مشخص می‌شود.

مثال:

has_stop_codon(seq, 1)

اگر تابع به شکل زیر تعریف شده باشد:

def has_stop_codon(dna, frame):

Python تشخیص می‌دهد:

  • seq → مربوط به dna
  • 1 → مربوط به frame

اهمیت

این روش رایج‌ترین و ساده‌ترین روش فراخوانی توابع است.


Keyword Arguments — آرگومان‌های نام‌گذاری‌شده

تعریف

در این روش هنگام فراخوانی تابع، نام متغیرهای ورودی را مشخص می‌کنیم.

مثال:

has_stop_codon(frame=0, dna=seq)

در این حالت ترتیب آرگومان‌ها مهم نیست.

Python بر اساس نام متغیرها مقداردهی می‌کند.

نکته مهم

برای استفاده از این روش باید نام دقیق پارامترهای تابع را بدانیم.

مثلاً:

def has_stop_codon(dna, frame):

در اینجا باید از نام‌های:

  • dna
  • frame

استفاده کنیم.


2. Reverse Complement — مکمل معکوس DNA

تعریف ساده

DNA دو رشته‌ای است و دو رشته آن مکمل یکدیگر هستند.

قواعد مکمل بودن:

Base Complement
A T
T A
C G
G C

اما علاوه بر مکمل شدن، جهت رشته DNA نیز اهمیت دارد.

بنابراین برای تبدیل یک رشته DNA به رشته مقابل، باید:

  1. رشته را برعکس کنیم (Reverse)
  2. بازهای آن را مکمل کنیم (Complement)

این عملیات را:

Reverse Complement

می‌نامیم.


اهمیت در Bioinformatics

در تحلیل ژنومی، معمولاً مشخص نیست یک الگوی DNA روی کدام رشته قرار دارد.

بنابراین باید:

  • رشته اصلی را بررسی کنیم.
  • Reverse Complement آن را نیز بررسی کنیم.

این عملیات در:

  • Genome Analysis
  • Sequence Alignment
  • Motif Searching

بسیار کاربرد دارد.


3. String Slicing — برش رشته‌ها در Python

تعریف

در Python می‌توان بخش‌هایی از یک رشته را با استفاده از Index استخراج کرد.

ساختار:

string[start:end]

مثال:

dna[0:3]

نتیجه:

سه کاراکتر اول رشته:

position 0,1,2

نکته:

Index پایان (end) شامل نمی‌شود.


Extended Slicing — برش پیشرفته

ساختار کامل:

string[start:end:step]

مثال:

dna[0:3:2]

یعنی:

  • شروع از index صفر
  • پایان قبل از index سه
  • حرکت با گام دو

نتیجه:

فقط کاراکترهای یکی در میان انتخاب می‌شوند.


Reverse کردن رشته با Slicing

یک تکنیک بسیار مهم:

seq[::-1]

معنی:

  • کل رشته را انتخاب کن.
  • با گام منفی یک حرکت کن.

نتیجه:

رشته کاملاً برعکس می‌شود.

مثال:

ATGC

تبدیل می‌شود به:

CGTA

4. Complement Function — تابع مکمل DNA

برای ایجاد مکمل DNA معمولاً از یک Dictionary استفاده می‌کنیم.

مثال:

basecomplement = {
'A':'T',
'T':'A',
'C':'G',
'G':'C'
}

Dictionary مشخص می‌کند هر باز به چه باز مکملی تبدیل شود.

همچنین باید حالت‌های:

  • حروف بزرگ
  • حروف کوچک
  • کاراکتر N

پشتیبانی شوند.


5. List Comprehension — ساخت سریع لیست

تعریف

List Comprehension روشی کوتاه برای ساخت لیست جدید از روی یک لیست یا رشته موجود است.

ساختار کلی:

new_list = [operation(item) for item in old_list]

مثال در DNA

ابتدا رشته DNA را به لیست تبدیل می‌کنیم:

letters = list(DNA)

مثلاً:

"ATGC"

تبدیل می‌شود به:

['A','T','G','C']

سپس:

letters = [basecomplement[base] for base in letters]

برای هر باز:

  • مکمل آن پیدا می‌شود.
  • لیست جدید ساخته می‌شود.

6. Split و Join در رشته‌ها

Split

تعریف

یک رشته را به لیستی از بخش‌ها تقسیم می‌کند.

مثال:

sentence.split()

نتیجه:

"DNA analysis is useful"

تبدیل می‌شود به:

["DNA","analysis","is","useful"]

Split با جداکننده مشخص

مثال:

sentence.split("and")

رشته را بر اساس کلمه and جدا می‌کند.


Join

تعریف

برعکس Split عمل می‌کند.

یک لیست را به یک رشته تبدیل می‌کند.

مثال:

"".join(letters)

تمام عناصر لیست را بدون فاصله به هم متصل می‌کند.

مثلاً:

['A','T','G','C']

تبدیل می‌شود به:

ATGC

7. Variable Number of Arguments — تعداد متغیر آرگومان‌ها

تعریف

گاهی نمی‌دانیم یک تابع چند ورودی دریافت خواهد کرد.

Python اجازه می‌دهد تعداد متغیری از آرگومان‌ها تعریف کنیم.

با استفاده از:

*args

مثال:

def newfunction(first, second, third, *rest):

اگر فراخوانی کنیم:

newfunction(1,2,3,4,5)

نتیجه:

پارامتر مقدار
first 1
second 2
third 3
rest [4,5]

نکات مهم

  • آرگومان‌های موقعیتی بر اساس ترتیب ارسال می‌شوند.

  • آرگومان‌های نام‌گذاری‌شده با نام متغیرها مشخص می‌شوند.

  • DNA دارای دو رشته مکمل است؛ بنابراین بررسی هر دو رشته اهمیت دارد.

  • Reverse Complement شامل دو مرحله است:

    1. Reverse کردن رشته
    2. Complement کردن بازها
  • در Python، [::-1] سریع‌ترین روش معکوس کردن رشته است.

  • Dictionary ابزار مناسبی برای تبدیل بازهای DNA به مکمل آن‌هاست.

  • split() رشته را به لیست تبدیل می‌کند.

  • join() لیست را دوباره به رشته تبدیل می‌کند.

  • *args برای دریافت تعداد نامحدودی ورودی استفاده می‌شود.


اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
Function Argument آرگومان تابع مقداری که هنگام فراخوانی به تابع داده می‌شود
Positional Argument آرگومان موقعیتی مقداردهی بر اساس ترتیب پارامترها
Keyword Argument آرگومان نام‌گذاری‌شده مقداردهی با نام پارامتر
Reverse Complement مکمل معکوس رشته DNA معکوس‌شده و سپس مکمل‌شده
Complement مکمل باز جفت‌شده DNA بر اساس قوانین A-T و C-G
DNA Strand رشته DNA یکی از دو رشته مکمل DNA
Slicing برش رشته استخراج بخش‌هایی از رشته با index
Step گام حرکت فاصله بین انتخاب عناصر در slicing
Dictionary فرهنگ داده ساختار داده کلیدی-مقداری
List Comprehension ساخت سریع لیست روش کوتاه ایجاد لیست جدید
Split تقسیم رشته تبدیل رشته به لیست
Join اتصال رشته‌ها تبدیل لیست به رشته
Variable Arguments آرگومان‌های متغیر دریافت تعداد دلخواه ورودی

مثال‌ها و تشبیه‌ها

مثال Reverse Complement

فرض کنید رشته DNA زیر را داریم:

CCGGAA

ابتدا آن را برعکس می‌کنیم:

AAGGCC

سپس مکمل می‌گیریم:

TTCCGG

نتیجه، Reverse Complement رشته اولیه است.


مثال جستجوی Stop Codon

برای پیدا کردن Stop Codon باید هر سه نوکلئوتید را بررسی کنیم.

مثلاً:

AAATGA

اگر از موقعیت صفر شروع کنیم:

AAA
TGA

TGA یک Stop Codon است.

اما اگر از موقعیت یک شروع کنیم:

AAT

چارچوب خواندن متفاوت خواهد بود.


خلاصه نهایی مرور سریع

  • توابع می‌توانند آرگومان‌ها را به دو روش موقعیتی و نام‌گذاری‌شده دریافت کنند.
  • Keyword Argument ترتیب آرگومان‌ها را حذف می‌کند.
  • DNA دارای دو رشته مکمل است و برای بررسی هر دو رشته از Reverse Complement استفاده می‌شود.
  • Reverse Complement ابتدا رشته را معکوس و سپس مکمل می‌کند.
  • در Python، seq[::-1] رشته را معکوس می‌کند.
  • Dictionary برای نگاشت بازهای DNA به مکمل آن‌ها استفاده می‌شود.
  • List Comprehension روش سریع ساخت لیست جدید است.
  • split() رشته را به لیست و join() لیست را به رشته تبدیل می‌کند.
  • *args امکان دریافت تعداد نامحدود آرگومان را فراهم می‌کند.
  • تکنیک‌های پردازش رشته در تحلیل داده‌های ژنومی بسیار پرکاربرد هستند.

سوالات مرور

1. تفاوت Positional Argument و Keyword Argument چیست؟

پاسخ:

در Positional Argument ترتیب ارسال اهمیت دارد، اما در Keyword Argument مقدار با نام پارامتر مشخص می‌شود و ترتیب اهمیتی ندارد.


2. Reverse Complement در DNA چه مفهومی دارد؟

پاسخ:

تبدیل یک رشته DNA به رشته مکمل در جهت مخالف است که شامل معکوس کردن رشته و سپس جایگزینی هر باز با باز مکمل آن است.


3. چرا در تحلیل ژنومی به Reverse Complement نیاز داریم؟

پاسخ:

زیرا یک الگوی DNA ممکن است روی هر کدام از دو رشته DNA قرار داشته باشد و باید هر دو جهت بررسی شوند.


4. دستور seq[::-1] چه کاری انجام می‌دهد؟

پاسخ:

رشته seq را از انتها به ابتدا می‌خواند و نسخه معکوس آن را ایجاد می‌کند.


5. تفاوت split و join چیست؟

پاسخ:

split() یک رشته را به لیست تبدیل می‌کند، در حالی که join() عناصر یک لیست را به یک رشته تبدیل می‌کند.


6. کاربرد *args در Python چیست؟

پاسخ:

برای تعریف توابعی که بتوانند تعداد متغیری از آرگومان‌ها را دریافت کنند استفاده می‌شود.


03_week-three/01_module-3/05_lecture-6-modules-and-packages-10-32

درس 6: ماژول‌ها و پکیج‌ها در Python (Modules and Packages)

خلاصه کلی

در این درس با مفهوم Module و Package در Python آشنا می‌شویم. این دو مفهوم برای سازمان‌دهی، استفاده مجدد و مدیریت بهتر کدها در پروژه‌های بزرگ ضروری هستند.

در برنامه‌نویسی، معمولاً توابعی که بارها استفاده می‌شوند نباید در هر برنامه دوباره نوشته شوند. Python با استفاده از Modules امکان ذخیره‌سازی توابع و متغیرها در فایل‌های جداگانه را فراهم می‌کند. همچنین با استفاده از Packages می‌توان چندین Module مرتبط را در قالب یک مجموعه بزرگ‌تر سازمان‌دهی کرد.

هدف یادگیری این بخش:

  • درک مفهوم Module و دلیل استفاده از آن
  • ایجاد و استفاده از Moduleهای شخصی
  • آشنایی با مسیر جستجوی Python برای پیدا کردن Moduleها
  • یادگیری مفهوم Package و ساختار آن
  • درک نحوه استفاده از Packageهای علمی مانند BioPython

مفاهیم کلیدی

1. Module — ماژول

تعریف ساده

Module یک فایل Python با پسوند .py است که شامل:

  • توابع (Functions)
  • متغیرها (Variables)
  • کدهای مرتبط

می‌باشد.

به زبان ساده، Module یک فایل حاوی مجموعه‌ای از کدهای مرتبط است که می‌توان آن را در برنامه‌های مختلف استفاده کرد.


توضیح دقیق

وقتی Python Interpreter بسته شود، تمام:

  • تعریف توابع
  • متغیرهای ایجادشده

از بین می‌روند.

برای جلوگیری از این مشکل، می‌توان کدهای مهم را داخل یک فایل Python ذخیره کرد.

مثلاً:

dnautil.py

می‌تواند شامل توابع پردازش DNA باشد:

gc(dna)

has_stop_codon(dna, frame)

reverse_complement(seq)

بعداً هر برنامه‌ای می‌تواند این Module را وارد (Import) کرده و از توابع آن استفاده کند.


اهمیت و کاربرد

استفاده از Module باعث می‌شود:

  • کدها دوباره نوشته نشوند.
  • برنامه‌ها خواناتر شوند.
  • پروژه‌ها بهتر سازمان‌دهی شوند.
  • توابع کاربردی بین چند برنامه به اشتراک گذاشته شوند.

2. Creating a Module — ایجاد یک ماژول

برای ایجاد Module کافی است یک فایل با پسوند .py بسازیم.

مثال:

dnautil.py

در ابتدای فایل می‌توان یک توضیح برای Module قرار داد:

"""
Useful functions for DNA sequence analysis
"""

سپس توابع مورد نیاز را داخل آن قرار می‌دهیم:

def gc(dna):
    ...
    
def has_stop_codon(dna, frame):
    ...

3. Import Statement — دستور وارد کردن ماژول

تعریف

برای استفاده از یک Module در Python از دستور:

import

استفاده می‌کنیم.

مثال:

import dnautil

نکته:

نیازی به نوشتن پسوند .py نیست.

درست:

import dnautil

غلط:

import dnautil.py

4. Python Module Search Path — مسیر جستجوی ماژول‌ها

تعریف

وقتی Python یک Module را Import می‌کند، باید بداند فایل آن کجاست.

Python در چند مسیر به دنبال Module می‌گردد:

  1. مسیر فعلی برنامه (Current Directory)
  2. مسیر نصب Python
  3. مسیرهای تعریف‌شده در متغیر محیطی:
PYTHONPATH

بررسی مسیرها با sys.path

Python ماژولی به نام:

sys

دارد که اطلاعات مسیرهای جستجو را نگهداری می‌کند.

مثال:

import sys

sys.path

خروجی، لیستی از مسیرهایی است که Python در آن‌ها Module جستجو می‌کند.


افزودن مسیر جدید

اگر فایل Module در مسیر دیگری باشد، می‌توان آن مسیر را اضافه کرد:

sys.path.append("/path/to/module")

مثلاً:

sys.path.append("/users/python")

پس Python می‌تواند Module موجود در آن مسیر را پیدا کند.


5. Accessing Functions from Modules — استفاده از توابع ماژول

پس از Import کردن Module، برای استفاده از توابع آن باید نام Module را نیز ذکر کنیم.

مثال:

dnautil.gc(dna)

زیرا Python باید بداند تابع gc متعلق به کدام Module است.


6. From Import — وارد کردن مستقیم توابع

روش دیگر:

from dnautil import *

این دستور تمام توابع Module را وارد می‌کند.

بعد از آن می‌توان مستقیم نوشت:

gc(dna)

وارد کردن توابع خاص

به جای وارد کردن همه توابع می‌توان فقط موارد مورد نیاز را وارد کرد:

from dnautil import gc, has_stop_codon

در این حالت فقط این دو تابع قابل استفاده هستند.


مقایسه روش‌ها

روش نحوه استفاده
import module module.function()
from module import * function()
from module import function function()

7. Package — پکیج

تعریف ساده

Package مجموعه‌ای از Moduleهای مرتبط است که در یک پوشه قرار گرفته‌اند.

به عبارت دیگر:

Package = مجموعه‌ای از Moduleها

ساختار Package

هر Package باید یک فایل خاص داشته باشد:

__init__.py

این فایل به Python اعلام می‌کند که این پوشه یک Package است.

این فایل حتی می‌تواند خالی باشد.


مثال ساخت Package زیستی

فرض کنید می‌خواهیم یک Package برای تحلیل توالی‌های زیستی بسازیم:

bioseq/
│
├── __init__.py
│
├── dnautil.py
├── rnautil.py
└── proteinutil.py

این Package شامل:

  • ابزارهای DNA
  • ابزارهای RNA
  • ابزارهای Protein

است.


8. Subpackage — زیرپکیج

Packageها می‌توانند شامل Packageهای کوچک‌تر نیز باشند.

مثلاً:

bioseq/
│
├── fasta/
│   ├── __init__.py
│   └── fastautil.py
│
└── fastq/
    ├── __init__.py
    └── fastqutil.py

در این ساختار:

  • bioseq → Package اصلی
  • fasta و fastq → Subpackage

هستند.


9. Importing Modules Inside Packages

برای استفاده از Module داخل Package چند روش وجود دارد.


روش اول

import bioseq.dnautil

برای استفاده:

bioseq.dnautil.gc(dna)

روش دوم

from bioseq import dnautil

اکنون:

dnautil.gc(dna)

کافی است.


وارد کردن یک تابع خاص از زیرمجموعه

مثال:

from bioseq.fasta.fastautil import fastaseqread

اکنون:

fastaseqread()

مستقیماً قابل استفاده است.


10. کاربرد Modules و Packages در Bioinformatics

در پروژه‌های زیستی، تعداد زیادی عملیات تکراری وجود دارد:

  • پردازش DNA
  • تحلیل RNA
  • بررسی Protein
  • خواندن فایل‌های FASTA و FASTQ

بنابراین کتابخانه‌هایی مانند:

Biopython

به شکل Package طراحی شده‌اند.

برای استفاده از آن‌ها باید:

  • Package را نصب کنیم.
  • Moduleهای مورد نیاز را Import کنیم.

نکات مهم

  • Module یک فایل .py شامل کدهای مرتبط است.
  • Package مجموعه‌ای از Moduleها است.
  • فایل __init__.py مشخص می‌کند که یک پوشه Package است.
  • Python برای یافتن Moduleها از sys.path استفاده می‌کند.
  • اگر مسیر Module در sys.path نباشد، Import با خطا مواجه می‌شود.
  • استفاده از Module باعث جلوگیری از تکرار کدنویسی می‌شود.
  • استفاده از from module import * راحت است اما ممکن است باعث تداخل نام‌ها شود.
  • در پروژه‌های بزرگ بهتر است از نام Module هنگام فراخوانی استفاده شود.
  • کتابخانه‌های تخصصی مانند Biopython بر اساس همین ساختار Module و Package ساخته شده‌اند.

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
Module ماژول فایل Python شامل توابع و متغیرها
Package پکیج مجموعه‌ای از Moduleهای مرتبط
Import وارد کردن اضافه کردن یک Module به برنامه
Function Definition تعریف تابع ایجاد یک تابع قابل استفاده
PYTHONPATH مسیر Python متغیر محیطی برای مسیر Moduleها
sys.path مسیرهای جستجوی Python لیستی از مسیرهایی که Python بررسی می‌کند
Current Directory پوشه فعلی محلی که برنامه از آن اجرا می‌شود
init.py فایل معرفی Package فایل مشخص‌کننده یک Package
Submodule زیرماژول Module داخل یک Package
Subpackage زیرپکیج Package داخل یک Package دیگر
Biopython کتابخانه زیستی Python مجموعه ابزارهای تحلیل داده‌های زیستی

مثال‌ها و تشبیه‌ها

تشبیه Module

یک Module مانند یک جعبه ابزار است.

مثلاً:

dnautil.py

یک جعبه ابزار مخصوص DNA است که ابزارهایی مانند:

  • محاسبه GC Content
  • بررسی Stop Codon
  • Reverse Complement

را در خود دارد.

هر برنامه‌ای که به این ابزارها نیاز داشته باشد، فقط این جعبه را وارد می‌کند.


تشبیه Package

Package مانند یک کیف بزرگ ابزار است.

مثلاً:

bioseq

یک کیف شامل:

  • ابزار DNA
  • ابزار RNA
  • ابزار Protein

است.


خلاصه نهایی مرور سریع

  • Module در Python یک فایل .py شامل توابع و متغیرها است.
  • هدف اصلی Module جلوگیری از تکرار کد و افزایش قابلیت استفاده مجدد است.
  • با دستور import می‌توان Moduleها را وارد کرد.
  • Python برای یافتن Moduleها مسیرهای موجود در sys.path را بررسی می‌کند.
  • sys.path.append() مسیر جدیدی به جستجو اضافه می‌کند.
  • برای استفاده از تابع یک Module می‌توان از module.function() استفاده کرد.
  • from module import * تمام توابع را وارد می‌کند.
  • Package مجموعه‌ای از Moduleهای مرتبط است.
  • وجود فایل __init__.py باعث شناسایی یک پوشه به عنوان Package می‌شود.
  • کتابخانه‌های بزرگی مانند Biopython بر پایه ساختار Package و Module ساخته شده‌اند.

سوالات مرور

1. Module در Python چیست؟

پاسخ:

یک فایل Python با پسوند .py است که شامل تعریف توابع، متغیرها یا کدهای مرتبط می‌باشد.


2. چرا از Module استفاده می‌کنیم؟

پاسخ:

برای جلوگیری از تکرار کد، سازمان‌دهی بهتر برنامه و استفاده مجدد از توابع در پروژه‌های مختلف.


3. تفاوت Module و Package چیست؟

پاسخ:

Module یک فایل Python است، اما Package مجموعه‌ای از Moduleها در یک پوشه سازمان‌دهی‌شده است.


4. نقش فایل __init__.py چیست؟

پاسخ:

به Python اعلام می‌کند که یک پوشه باید به عنوان Package شناخته شود.


5. اگر Python نتواند یک Module را پیدا کند چه باید کرد؟

پاسخ:

باید مسیر قرارگیری Module را به sys.path یا PYTHONPATH اضافه کرد.


6. تفاوت این دو دستور چیست؟

import dnautil

و

from dnautil import *

پاسخ:

در حالت اول باید هنگام استفاده نام Module نوشته شود:

dnautil.gc(dna)

اما در حالت دوم توابع مستقیماً قابل استفاده هستند:

gc(dna)

7. چرا در Bioinformatics به Packageها نیاز داریم؟

پاسخ:

زیرا تحلیل داده‌های زیستی شامل تعداد زیادی ابزار و عملیات مختلف است و Packageها امکان سازمان‌دهی و استفاده آسان از این ابزارها را فراهم می‌کنند.


04_week-four/01_module-4/01_lecture-7-1-communicating-with-the-outside-part-1-6-41

ارتباط با داده‌های خارجی در Python: کار با فایل‌ها (Communicating with the Outside – Part 1)

خلاصه کلی

در این درس با روش خواندن و نوشتن داده‌ها در فایل‌ها (File I/O) در Python آشنا می‌شویم. در پروژه‌های Genomic Data Science معمولاً حجم داده‌ها بسیار بزرگ است و وارد کردن دستی داده‌ها از طریق ترمینال امکان‌پذیر نیست؛ بنابراین برنامه‌ها باید داده‌ها را از فایل‌ها دریافت و پردازش کنند.

هدف این بخش:

  • یادگیری باز کردن فایل‌ها در Python
  • خواندن اطلاعات از فایل
  • نوشتن و اضافه کردن اطلاعات به فایل
  • مدیریت خطا هنگام کار با فایل‌ها
  • بستن صحیح فایل‌ها پس از پایان کار

مفاهیم کلیدی

1. File I/O (ورودی/خروجی فایل)

تعریف ساده

File Input/Output به عملیات خواندن داده از فایل‌ها و نوشتن داده در فایل‌ها گفته می‌شود.

توضیح دقیق

در تحلیل داده‌های زیستی، داده‌ها معمولاً در فایل‌هایی مانند:

  • FASTA
  • FASTQ
  • CSV
  • TXT

ذخیره می‌شوند. به جای اینکه کاربر داده‌ها را هنگام اجرای برنامه وارد کند، برنامه فایل را باز کرده و داده‌ها را پردازش می‌کند.

فرآیند کلی کار با فایل:

  1. باز کردن فایل (open)
  2. انجام عملیات روی فایل (خواندن یا نوشتن)
  3. بستن فایل (close)

اهمیت

تقریباً تمام پروژه‌های واقعی تحلیل داده، مخصوصاً در زیست‌محاسبات، به کار با فایل‌ها نیاز دارند.


2. open() Function (تابع باز کردن فایل)

تعریف ساده

تابع open() برای ایجاد ارتباط بین Python و یک فایل استفاده می‌شود.

ساختار کلی:

file_object = open(filename, mode)

مثال:

f = open("myfile")

حالت‌های باز کردن فایل (File Modes)

1. Read Mode (r) — حالت خواندن

برای خواندن اطلاعات از فایل استفاده می‌شود.

مثال:

f = open("myfile", "r")

نکته:

  • حالت r حالت پیش‌فرض است.
  • بنابراین می‌توان نوشت:
f = open("myfile")

2. Write Mode (w) — حالت نوشتن

برای نوشتن داده در فایل استفاده می‌شود.

مثال:

f = open("myfile", "w")

ویژگی مهم:

  • اگر فایل از قبل وجود داشته باشد، محتوای قبلی حذف می‌شود.
  • فایل جدید با محتوای جدید ساخته می‌شود.

بنابراین باید با احتیاط استفاده شود.


3. Append Mode (a) — حالت اضافه کردن

برای اضافه کردن اطلاعات جدید به انتهای فایل استفاده می‌شود.

مثال:

f = open("myfile", "a")

تفاوت با w:

حالت رفتار
w حذف محتوای قبلی و نوشتن از ابتدا
a حفظ محتوای قبلی و اضافه کردن به انتها

3. Exception Handling (مدیریت خطا)

مشکل باز کردن فایل ناموجود

اگر فایلی وجود نداشته باشد:

f = open("unknown_file")

Python خطا ایجاد می‌کند.

برای جلوگیری از توقف برنامه از ساختار:

try:
    ...
except:
    ...

استفاده می‌کنیم.


IOError Exception

مثال:

try:
    f = open("myfile")
except IOError:
    print("File does not exist")

عملکرد:

  • Python ابتدا تلاش می‌کند فایل را باز کند.
  • اگر موفق نشود، خطای IOError ایجاد می‌شود.
  • بخش except اجرا می‌شود.

اهمیت

به جای اینکه برنامه ناگهانی متوقف شود، می‌توان پیام مناسب به کاربر نمایش داد.


4. Reading Files (خواندن فایل‌ها)

فرض کنید فایل شامل دو خط باشد:

This is the first line of the file
Second line of the file

چند روش برای خواندن فایل وجود دارد.


روش اول: استفاده از حلقه for

مثال:

for line in f:
    print(line)

عملکرد:

Python فایل را خط به خط پیمایش می‌کند.

مزایا:

  • مناسب برای فایل‌های بزرگ
  • مصرف حافظه کمتر

در داده‌های ژنومی این روش بسیار مهم است، زیرا فایل‌ها ممکن است چندین گیگابایت حجم داشته باشند.


روش دوم: استفاده از read()

مثال:

f.read()

عملکرد:

کل محتوای فایل را یکجا می‌خواند.

مثلاً:

content = f.read()

خروجی:

This is the first line of the file
Second line of the file

نکته مهم

پس از خواندن فایل، مکان فعلی فایل (File Pointer) به انتهای فایل منتقل می‌شود.

بنابراین اگر دوباره:

f.read()

را اجرا کنیم، چیزی دریافت نمی‌کنیم.


5. File Pointer و seek()

مفهوم File Pointer

Python هنگام خواندن فایل، یک مکان‌نما دارد که مشخص می‌کند اکنون در کجای فایل قرار داریم.

مثلاً:

Beginning ---------> End
^                    ^
0                    EOF

پس از خواندن کامل فایل:

Pointer = End of File

seek()

برای تغییر مکان فایل استفاده می‌شود.

مثال:

f.seek(0)

یعنی:

بازگشت به ابتدای فایل

بعد از آن:

f.read()

دوباره کل فایل را می‌خواند.


6. readline() Method

تعریف

برای خواندن فقط یک خط از فایل استفاده می‌شود.

مثال:

line = f.readline()

خروجی:

This is the first line of the file

کاربرد

زمانی که فایل بسیار بزرگ است و نمی‌خواهیم کل فایل را وارد حافظه کنیم.


7. Writing Files (نوشتن در فایل)

write()

برای نوشتن رشته در فایل استفاده می‌شود.

مثال:

f.write("This is a third line")

نتیجه:

محتوا به فایل اضافه می‌شود.


Append Example

ابتدا فایل را باز می‌کنیم:

f = open("myfile", "a")

سپس:

f.write("This is a third line")

خط جدید به انتهای فایل اضافه می‌شود.


8. close() Method (بستن فایل)

تعریف

پس از پایان کار باید فایل را ببندیم.

مثال:

f.close()

اهمیت

بستن فایل:

  • منابع سیستم را آزاد می‌کند.
  • از مشکلات دسترسی جلوگیری می‌کند.
  • یک عادت برنامه‌نویسی صحیح است.

اگر فایل بسته شده باشد:

f.read()

باعث خطا خواهد شد.


نکات مهم

  • در پروژه‌های زیست‌محاسباتی، داده‌ها معمولاً از فایل خوانده می‌شوند، نه از ورودی دستی.
  • تابع open() یک File Object ایجاد می‌کند.
  • حالت پیش‌فرض open()، خواندن (r) است.
  • حالت w اطلاعات قبلی فایل را پاک می‌کند.
  • حالت a اطلاعات جدید را به انتهای فایل اضافه می‌کند.
  • پس از استفاده از فایل، باید آن را با close() ببندیم.
  • برای فایل‌های بزرگ ژنومی، خواندن خط‌به‌خط بهتر از خواندن کل فایل با read() است.
  • seek(0) مکان‌نمای فایل را به ابتدای فایل برمی‌گرداند.
  • مدیریت خطا با try/except باعث جلوگیری از توقف ناگهانی برنامه می‌شود.

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
File I/O ورودی/خروجی فایل خواندن و نوشتن داده در فایل
File Object شیء فایل شیئی که Python برای ارتباط با فایل ایجاد می‌کند
open() باز کردن فایل تابع ایجاد ارتباط با فایل
read mode حالت خواندن باز کردن فایل برای دریافت داده
write mode حالت نوشتن ایجاد یا بازنویسی فایل
append mode حالت اضافه کردن افزودن داده به انتهای فایل
File Pointer مکان‌نمای فایل موقعیت فعلی خواندن یا نوشتن در فایل
seek() تغییر مکان فایل انتقال مکان‌نما به موقعیت مشخص
readline() خواندن یک خط دریافت یک خط از فایل
write() نوشتن ذخیره رشته در فایل
close() بستن فایل پایان ارتباط با فایل
IOError خطای ورودی/خروجی خطایی که هنگام مشکل فایل رخ می‌دهد

مثال‌ها و تشبیه‌ها

تشبیه File Pointer

می‌توان فایل را مانند یک کتاب در نظر گرفت.

  • باز کردن فایل = باز کردن کتاب
  • File Pointer = انگشت شما روی صفحه‌ای که در حال خواندن آن هستید
  • read() = خواندن صفحات باقی‌مانده
  • seek(0) = برگشت به صفحه اول
  • close() = بستن کتاب

مثال زیستی

فرض کنید یک فایل DNA داریم:

ATGCGTAGCTAA
GGCCTTAGGA

به جای وارد کردن این توالی‌ها به صورت دستی:

dna = input()

می‌توانیم فایل را باز کنیم:

f = open("sequence.txt")

for line in f:
    process(line)

و هر خط DNA را پردازش کنیم.


خلاصه نهایی مرور سریع

  • Python برای کار با داده‌های بزرگ از فایل‌ها استفاده می‌کند.
  • عملیات فایل شامل باز کردن، خواندن/نوشتن و بستن فایل است.
  • تابع open() برای ایجاد File Object استفاده می‌شود.
  • r برای خواندن، w برای نوشتن و a برای اضافه کردن است.
  • حالت w محتوای قبلی فایل را حذف می‌کند.
  • حلقه for روش مناسبی برای خواندن فایل‌های بزرگ است.
  • read() کل فایل را می‌خواند.
  • readline() فقط یک خط را می‌خواند.
  • seek(0) مکان‌نمای فایل را به ابتدای فایل برمی‌گرداند.
  • استفاده از try/except خطاهای فایل را مدیریت می‌کند.
  • همیشه پس از پایان کار فایل را با close() ببندید.

سوالات مرور

سوال 1: چرا در تحلیل داده‌های ژنومی معمولاً داده‌ها را از فایل می‌خوانیم؟

پاسخ: زیرا حجم داده‌های ژنومی بسیار بزرگ است و وارد کردن دستی آن‌ها هنگام اجرای برنامه عملی نیست.


سوال 2: تفاوت حالت‌های w و a در open چیست؟

پاسخ: w فایل را بازنویسی کرده و محتوای قبلی را حذف می‌کند، اما a داده جدید را به انتهای فایل اضافه می‌کند.


سوال 3: چرا بعد از اجرای read() دوباره چیزی دریافت نمی‌کنیم؟

پاسخ: زیرا File Pointer پس از خواندن کامل فایل به انتهای آن منتقل شده است.


سوال 4: چگونه می‌توان فایل را دوباره از ابتدا خواند؟

پاسخ:

با استفاده از:

f.seek(0)

سوال 5: برای خواندن یک فایل بزرگ DNA که چند گیگابایت حجم دارد، کدام روش بهتر است؟

پاسخ:

خواندن خط‌به‌خط با حلقه for، زیرا کل فایل را همزمان وارد حافظه نمی‌کند.


04_week-four/01_module-4/02_lecture-7-2-communicating-with-the-outside-part-2-7-38

خواندن فایل‌های FASTA و پردازش داده‌های ژنومی در پایتون

Reading FASTA Files and Processing Genomic Data


خلاصه کلی

در این درس نحوه استفاده از عملیات فایل (File Operations) در پایتون برای خواندن داده‌های زیستی آموزش داده می‌شود. تمرکز اصلی درس بر روی خواندن فایل‌های FASTA و تبدیل محتوای آن به یک ساختار داده‌ای مناسب یعنی Dictionary است.

در تحلیل‌های ژنومی، داده‌ها معمولاً بسیار بزرگ‌تر از آن هستند که به صورت دستی وارد برنامه شوند؛ بنابراین باید از فایل‌ها خوانده شوند. فایل FASTA یکی از رایج‌ترین قالب‌ها برای ذخیره توالی‌های DNA است.

هدف یادگیری

در پایان این درس باید بتوانید:

  • ساختار فایل FASTA را درک کنید.
  • فایل‌های FASTA را خط‌به‌خط در پایتون بخوانید.
  • خطوط Header و Sequence را تشخیص دهید.
  • توالی‌های DNA را در یک Dictionary ذخیره کنید.
  • یک برنامه ساده برای استخراج توالی‌ها از فایل FASTA طراحی کنید.

مفاهیم کلیدی


1. FASTA Format (قالب FASTA)

تعریف ساده

FASTA یک قالب استاندارد برای ذخیره توالی‌های زیستی مانند DNA، RNA و پروتئین است.

توضیح دقیق

یک فایل FASTA معمولاً شامل یک یا چند توالی است. هر توالی دو بخش اصلی دارد:

  1. Header Line (خط عنوان)

    • با علامت > شروع می‌شود.
    • شامل شناسه (Identifier) و توضیح مربوط به توالی است.

مثال:

>seq1 human_gene
  1. Sequence Lines (خطوط توالی)

    • شامل خود توالی DNA است.
    • می‌تواند در یک خط یا چندین خط نوشته شود.

مثال:

ATGCGTACGTAG

یک فایل FASTA می‌تواند شامل چندین توالی پشت سر هم باشد:

>seq1
ATGCGT

>seq2
AACGTA

اهمیت

FASTA یکی از رایج‌ترین قالب‌ها در:

  • تحلیل توالی DNA
  • Genome Analysis
  • Sequence Alignment
  • ابزارهای Bioinformatics

است.


2. Reading Files in Python (خواندن فایل‌ها در پایتون)

تعریف ساده

برای استفاده از داده‌های ذخیره‌شده در فایل‌ها، ابتدا باید فایل را باز کرده، اطلاعات آن را خوانده و در پایان فایل را ببندیم.

روند کلی کار

فرآیند کار با فایل:

Open → Read/Process → Close

باز کردن فایل

در پایتون از تابع:

open()

استفاده می‌کنیم.

مثال:

f = open("myfile.fa")

به صورت پیش‌فرض فایل در حالت خواندن (Read Mode) باز می‌شود.


3. خواندن فایل FASTA به صورت خط‌به‌خط

تعریف ساده

به جای خواندن کل فایل، می‌توان فایل را خط‌به‌خط پردازش کرد.

مثال:

for line in f:
    print(line)

توضیح

این روش برای فایل‌های بزرگ ژنومی بسیار مناسب است، زیرا:

  • حافظه کمتری مصرف می‌کند.
  • امکان پردازش فایل‌های بسیار بزرگ را فراهم می‌کند.

4. Dictionary برای ذخیره توالی‌ها

تعریف ساده

در این برنامه، هر شناسه FASTA به عنوان کلید (Key) و توالی DNA مربوط به آن به عنوان مقدار (Value) ذخیره می‌شود.

ساختار:

seqs = {
    "sequence_id": "DNA_sequence"
}

مثال:

{
"gene1": "ATGCGTA",
"gene2": "AACCTG"
}

اهمیت

Dictionary باعث می‌شود:

  • دسترسی به توالی‌ها سریع باشد.
  • هر توالی با شناسه خودش قابل بازیابی باشد.

5. تشخیص Header در فایل FASTA

تعریف ساده

برای فهمیدن اینکه یک خط Header است یا Sequence، باید اولین کاراکتر خط بررسی شود.

در FASTA:

>

نشانه Header است.

مثال:

if line[0] == ">":

یعنی:

اگر اولین کاراکتر خط > بود، این خط مربوط به یک توالی جدید است.


6. String Methods در پردازش فایل

rstrip()

کاربرد

حذف کاراکترهای اضافی انتهای خط مانند:

  • New Line (\n)
  • Return Characters

مثال:

قبل:

ATGC\n

بعد:

ATGC

استفاده:

line = line.rstrip()

split()

کاربرد

تقسیم یک رشته به چند بخش بر اساس فاصله یا جداکننده.

مثال:

words = line.split()

اگر Header باشد:

>seq1 human gene

خروجی:

[">seq1", "human", "gene"]

7. الگوریتم خواندن FASTA

مراحل اصلی برنامه:

مرحله 1: باز کردن فایل

f = open("file.fa")

مرحله 2: ایجاد Dictionary خالی

seqs = {}

مرحله 3: خواندن فایل خط‌به‌خط

for line in f:

مرحله 4: حذف کاراکترهای اضافی

line = line.rstrip()

مرحله 5: بررسی نوع خط

اگر Header باشد:

  • نام توالی استخراج می‌شود.
  • یک ورودی جدید در Dictionary ساخته می‌شود.

اگر Header نباشد:

  • خط فعلی به انتهای توالی قبلی اضافه می‌شود.

نکات مهم

  • فایل FASTA ممکن است شامل تعداد زیادی توالی باشد.
  • طول هر توالی مشخص نیست؛ ممکن است یک خط یا میلیون‌ها خط باشد.
  • برنامه نباید فرض کند توالی در چند خط خاص قرار دارد.
  • بهترین روش، خواندن فایل تا رسیدن به Header بعدی است.
  • علامت > همیشه نشان‌دهنده شروع یک توالی جدید است.
  • برای فایل‌های بزرگ ژنومی، خواندن خط‌به‌خط بهتر از خواندن کل فایل در حافظه است.
  • Dictionary انتخاب مناسبی برای ذخیره ارتباط بین شناسه و توالی است.

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
FASTA Format قالب FASTA استاندارد ذخیره توالی‌های زیستی
Sequence توالی رشته‌ای از نوکلئوتیدهای DNA یا RNA
Header Line خط عنوان خطی که با > شروع شده و اطلاعات توالی را مشخص می‌کند
Identifier (ID) شناسه نام یکتا برای هر توالی
Dictionary فرهنگ داده / دیکشنری ساختار Key-Value برای ذخیره اطلاعات
Key کلید شناسه‌ای که برای دسترسی به مقدار استفاده می‌شود
Value مقدار داده ذخیره‌شده مربوط به کلید
File Object شیء فایل متغیری که به فایل بازشده اشاره می‌کند
Parsing تجزیه و پردازش داده استخراج اطلاعات ساختاریافته از فایل
New Line Character کاراکتر خط جدید علامت پایان هر خط در فایل متنی
rstrip() حذف انتهای رشته حذف فاصله‌ها و کاراکترهای انتهایی
split() تقسیم رشته تبدیل رشته به لیستی از بخش‌ها

مثال‌ها و تشبیه‌ها

مثال: خواندن فایل FASTA مانند خواندن کتاب

می‌توان فایل FASTA را مانند کتابی تصور کرد:

  • Header مانند عنوان یک فصل است.
  • Sequence متن آن فصل است.
  • وقتی عنوان جدیدی پیدا می‌کنیم، فصل قبلی تمام شده و فصل جدید شروع می‌شود.

برنامه باید:

  1. عنوان فصل را پیدا کند.
  2. متن مربوط به آن را جمع‌آوری کند.
  3. آن را با نام فصل ذخیره کند.

خلاصه نهایی مرور سریع

  • FASTA یک قالب استاندارد برای ذخیره توالی‌های DNA است.
  • هر توالی FASTA با یک Header که با > شروع می‌شود مشخص می‌شود.
  • توالی DNA ممکن است در چندین خط نوشته شود.
  • برای خواندن فایل‌های بزرگ ژنومی باید از File I/O استفاده کرد.
  • فایل ابتدا با open() باز و در پایان با close() بسته می‌شود.
  • بهترین روش پردازش FASTA، خواندن خط‌به‌خط فایل است.
  • Dictionary برای ذخیره رابطه بین شناسه توالی و خود توالی مناسب است.
  • line[0] برای بررسی اولین کاراکتر خط استفاده می‌شود.
  • rstrip() کاراکترهای انتهایی مانند newline را حذف می‌کند.
  • split() برای جدا کردن بخش‌های Header استفاده می‌شود.
  • خطوط غیر Header به انتهای توالی فعلی اضافه می‌شوند.
  • الگوریتم باید بتواند تعداد نامحدودی توالی FASTA را پردازش کند.

سوالات مرور

سوال 1: قالب FASTA چیست و چه ساختاری دارد؟

پاسخ:

FASTA یک قالب استاندارد برای ذخیره توالی‌های زیستی است که هر توالی شامل یک Header با علامت > و یک یا چند خط Sequence است.


سوال 2: چرا در تحلیل ژنومی داده‌ها را مستقیماً وارد برنامه نمی‌کنیم؟

پاسخ:

زیرا داده‌های ژنومی معمولاً بسیار بزرگ هستند و وارد کردن دستی آن‌ها امکان‌پذیر نیست؛ بنابراین از فایل‌ها خوانده می‌شوند.


سوال 3: چرا Dictionary برای ذخیره داده‌های FASTA مناسب است؟

پاسخ:

زیرا هر توالی یک شناسه یکتا دارد و Dictionary اجازه می‌دهد شناسه به عنوان Key و توالی به عنوان Value ذخیره شود.


سوال 4: چگونه برنامه تشخیص می‌دهد یک خط Header است؟

پاسخ:

با بررسی اولین کاراکتر خط:

if line[0] == ">":

اگر اولین کاراکتر > باشد، خط Header است.


سوال 5: اگر توالی DNA در چندین خط نوشته شده باشد، برنامه چگونه آن را ذخیره می‌کند؟

پاسخ:

هر خط Sequence به انتهای مقدار قبلی در Dictionary اضافه می‌شود تا کل توالی ساخته شود.


سوال 6: تفاوت Header Line و Sequence Line چیست؟

پاسخ:

Header اطلاعات مربوط به نام و شناسه توالی را دارد و با > شروع می‌شود؛ Sequence شامل خود بازهای DNA مانند A، T، C و G است.


04_week-four/01_module-4/03_lecture-7-3-communicating-with-the-outside-part-3-17-42

درس ۷-۳: ارتباط با محیط خارج در پایتون — بازیابی داده‌ها، آرگومان‌های خط فرمان و اجرای برنامه‌های خارجی

Communicating with the Outside Part 3


خلاصه کلی

در این درس ادامه کار با فایل‌ها و داده‌های خارجی در پایتون بررسی می‌شود. پس از یادگیری خواندن فایل‌ها و ذخیره اطلاعات در ساختارهایی مانند Dictionary، لازم است بدانیم چگونه:

  • داده‌های ذخیره‌شده در Dictionary را بازیابی کنیم.
  • ورودی‌های دریافت‌شده از خط فرمان (Command Line Arguments) را پردازش کنیم.
  • برای برنامه‌های پایتون گزینه‌های اختیاری و اجباری تعریف کنیم.
  • با جریان‌های استاندارد سیستم‌عامل (Standard Streams) کار کنیم.
  • برنامه‌های خارجی را از داخل یک اسکریپت پایتون اجرا کنیم.

هدف اصلی این بخش، آماده‌سازی برنامه‌های پایتونی برای کار در محیط واقعی تحلیل داده‌های ژنومی است؛ جایی که داده‌ها معمولاً از فایل‌ها، دستورات سیستم و نرم‌افزارهای دیگر دریافت می‌شوند.


مفاهیم کلیدی


1. Dictionary Items Method — روش items در دیکشنری

تعریف ساده

متد items() در پایتون اجازه می‌دهد کلیدها (keys) و مقدارهای (values) یک Dictionary را هم‌زمان دریافت کنیم.

توضیح دقیق

فرض کنید در درس قبل یک Dictionary به نام seqs ساخته‌ایم که شامل شناسه توالی‌های DNA و خود توالی‌ها است:

seqs = {
    "id1": "ATCGGCTA",
    "id2": "GGCATTA"
}

با استفاده از:

for name, seq in seqs.items():
    print(name, seq)

می‌توانیم تمام جفت‌های:

key → value

را پیمایش کنیم.

در این مثال:

  • name → شناسه توالی DNA
  • seq → توالی DNA مربوط به آن شناسه

اهمیت

این روش برای پردازش مجموعه‌های بزرگ داده مانند:

  • توالی‌های DNA
  • نتایج آزمایش‌ها
  • داده‌های بیوانفورماتیکی

بسیار کاربردی است.


2. Command Line Arguments — آرگومان‌های خط فرمان

تعریف ساده

Command Line Arguments اطلاعاتی هستند که هنگام اجرای یک برنامه از طریق ترمینال به آن داده می‌شوند.

مثلاً:

python processfasta.py myfile.fa

در اینجا:

  • processfasta.py → نام برنامه
  • myfile.fa → آرگومان ورودی برنامه

sys.argv — دریافت آرگومان‌ها

برای دسترسی به آرگومان‌های خط فرمان از ماژول داخلی sys استفاده می‌کنیم:

import sys

لیست آرگومان‌ها در:

sys.argv

ذخیره می‌شود.

مثلاً:

print(sys.argv)

ممکن است خروجی:

[
"processfasta.py",
"myfile.fa"
]

باشد.

اندیس‌ها:

اندیس محتوا
sys.argv[0] نام برنامه
sys.argv[1] اولین آرگومان کاربر

بنابراین:

filename = sys.argv[1]

نام فایل ورودی را دریافت می‌کند.


3. getopt Module — پردازش گزینه‌های خط فرمان

تعریف ساده

ماژول getopt برای مدیریت آرگومان‌های پیچیده‌تر استفاده می‌شود؛ مخصوصاً زمانی که برنامه:

  • گزینه‌های اختیاری دارد.
  • چندین پارامتر دریافت می‌کند.

مثال

فرض کنید برنامه‌ای داریم:

processfasta.py -l 250 myfile.fa

که معنی آن:

  • فقط توالی‌هایی با طول بیشتر از 250 باز ذخیره شوند.

در اینجا:

-l

یک گزینه است و:

250

مقدار آن است.


تعریف گزینه‌های اختیاری

مثلاً:

getopt.getopt(
    sys.argv[1:],
    "l:h"
)

معنی:

  • l → گزینه length
  • h → گزینه help

وجود : بعد از l یعنی این گزینه نیاز به مقدار دارد.

مثلاً:

-l 250

اما:

-h

فقط یک Flag است و مقدار ندارد.


4. Usage Function — تابع راهنما

تعریف

تابعی که توضیح می‌دهد کاربر چگونه باید برنامه را اجرا کند.

مثال:

def usage():
    print("Usage: processfasta.py -l length filename")

کاربرد

اگر کاربر:

  • آرگومان اشتباه وارد کند.
  • فایل ورودی را فراموش کند.
  • درخواست کمک کند.

برنامه می‌تواند پیام راهنما نمایش دهد.

گزینه رایج:

-h

برای نمایش Help استفاده می‌شود.


5. Standard Streams — جریان‌های استاندارد سیستم

سیستم‌عامل برای ارتباط برنامه‌ها با محیط سه جریان اصلی دارد:


Standard Input (stdin) — ورودی استاندارد

تعریف

جریانی برای دریافت داده.

معمولاً:

  • صفحه‌کلید
  • خروجی برنامه دیگر

به عنوان ورودی استفاده می‌شود.

در پایتون:

sys.stdin

Standard Output (stdout) — خروجی استاندارد

تعریف

محل پیش‌فرض نمایش خروجی برنامه.

مثلاً:

sys.stdout.write("Hello")

معادل نمایش روی صفحه است.


Standard Error (stderr) — خطای استاندارد

تعریف

جریانی جداگانه برای پیام‌های خطا و هشدار.

مثال:

sys.stderr.write(
"Warning: file not found"
)

مزیت:

می‌توان خروجی عادی و خطا را جداگانه ذخیره کرد.


6. Redirecting Streams — تغییر مسیر جریان‌ها

در سیستم Unix می‌توان خروجی‌ها را به فایل منتقل کرد.

مثلاً:

my_program > output.txt

خروجی عادی در فایل ذخیره می‌شود.

یا:

my_program 2> error.txt

خطاها در فایل جدا ذخیره می‌شوند.

این ویژگی برای اجرای تحلیل‌های بزرگ ژنومی بسیار مهم است.


7. subprocess Module — اجرای برنامه‌های خارجی

تعریف ساده

ماژول subprocess اجازه می‌دهد یک برنامه خارجی را از داخل پایتون اجرا کنیم.


مثال ساده

اجرای دستور Unix:

import subprocess

subprocess.call(
["ls", "-l"]
)

این دستور همانند اجرای:

ls -l

در ترمینال است.


کاربرد در Bioinformatics

بسیاری از ابزارهای ژنومی برنامه‌های مستقل هستند، مانند:

  • ابزارهای RNA-seq
  • ابزارهای Alignment
  • برنامه‌های تحلیل ژنوم

به جای اجرای دستی هر دستور، می‌توان آن‌ها را از داخل پایتون فراخوانی کرد.

مثال:

اجرای ابزار:

TopHat

برای RNA-seq alignment:

subprocess.call([
"tophat",
"genome_index",
"reads_1.fq.gz",
"reads_2.fq.gz"
])

پایتون برنامه خارجی را اجرا کرده و آرگومان‌ها را منتقل می‌کند.


نکات مهم

  • Dictionary برای ذخیره داده‌های ساختاریافته مانند ارتباط شناسه توالی ↔ توالی DNA بسیار مناسب است.
  • متد items() برای پیمایش هم‌زمان کلید و مقدار استفاده می‌شود.
  • sys.argv همیشه نام برنامه را در اندیس صفر ذخیره می‌کند.
  • برای گرفتن آرگومان‌های واقعی کاربر معمولاً از:
sys.argv[1:]

استفاده می‌کنیم.

  • getopt زمانی مفید است که برنامه گزینه‌های متعدد و اختیاری داشته باشد.
  • گزینه‌هایی مانند -h معمولاً برای نمایش راهنما استفاده می‌شوند.
  • سه جریان استاندارد عبارت‌اند از:
stdin
stdout
stderr
  • stderr جدا از خروجی معمولی است و برای پیام‌های خطا استفاده می‌شود.
  • با subprocess می‌توان ابزارهای خارجی بیوانفورماتیکی را از داخل Python کنترل کرد.

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
Dictionary دیکشنری ساختار داده‌ای برای ذخیره جفت‌های کلید و مقدار
Key کلید شناسه‌ای که برای دسترسی به مقدار استفاده می‌شود
Value مقدار داده مرتبط با یک کلید
items() method متد items دریافت کلید و مقدارهای یک Dictionary
Command Line Argument آرگومان خط فرمان اطلاعاتی که هنگام اجرای برنامه به آن داده می‌شود
sys.argv لیست آرگومان‌های سیستم محل ذخیره ورودی‌های خط فرمان
getopt پردازشگر گزینه‌های خط فرمان ماژولی برای مدیریت آرگومان‌های پیچیده
Optional Argument آرگومان اختیاری پارامتری که وجود آن الزامی نیست
Required Argument آرگومان اجباری پارامتری که باید وارد شود
stdin ورودی استاندارد جریان دریافت داده از محیط
stdout خروجی استاندارد جریان خروجی معمول برنامه
stderr خطای استاندارد جریان مخصوص پیام‌های خطا
subprocess زیرپردازش ماژول اجرای برنامه‌های خارجی
Stream جریان داده مسیر انتقال داده بین برنامه و محیط

مثال‌ها و تشبیه‌ها

مثال ۱: Dictionary توالی‌های DNA

فرض کنید یک فایل FASTA داریم:

>gene1
ATCGATCG

>gene2
GGCTTA

پس از پردازش:

seqs = {
"gene1":"ATCGATCG",
"gene2":"GGCTTA"
}

اکنون با:

seqs.items()

می‌توانیم هر ژن و توالی آن را استخراج کنیم.


مثال ۲: برنامه تحلیل FASTA

فرض کنید برنامه‌ای داریم:

processfasta.py

بدون آرگومان:

python processfasta.py

برنامه نمی‌داند کدام فایل را پردازش کند.

اما:

python processfasta.py genome.fa

نام فایل را دریافت کرده و تحلیل را شروع می‌کند.


مثال ۳: استفاده از ابزار خارجی

به جای اینکه صدها بار دستی اجرا کنیم:

tophat genome sample1.fastq
tophat genome sample2.fastq
tophat genome sample3.fastq

می‌توانیم یک حلقه پایتون بنویسیم که این دستورات را خودکار اجرا کند.


خلاصه نهایی مرور سریع

  • Dictionary برای ذخیره داده‌های مرتبط مانند شناسه و توالی DNA استفاده می‌شود.
  • متد items() کلید و مقدار را هم‌زمان برمی‌گرداند.
  • sys.argv برای دریافت ورودی‌های خط فرمان استفاده می‌شود.
  • اولین عضو sys.argv همیشه نام برنامه است.
  • getopt برای مدیریت گزینه‌های پیچیده مانند -l 250 استفاده می‌شود.
  • گزینه‌های Help معمولاً با -h پیاده‌سازی می‌شوند.
  • سیستم‌عامل سه جریان اصلی دارد: stdin، stdout و stderr.
  • stderr برای پیام‌های خطا و هشدار جدا از خروجی اصلی استفاده می‌شود.
  • subprocess امکان اجرای برنامه‌های خارجی از داخل Python را فراهم می‌کند.
  • در بیوانفورماتیک، Python اغلب برای هماهنگ کردن ابزارهای مختلف تحلیل ژنومی استفاده می‌شود.

سوالات مرور

1. متد items() در Dictionary چه کاری انجام می‌دهد؟

پاسخ: این متد تمام جفت‌های کلید و مقدار موجود در Dictionary را برمی‌گرداند و امکان پیمایش هم‌زمان آن‌ها را فراهم می‌کند.


2. تفاوت sys.argv[0] و sys.argv[1] چیست؟

پاسخ: sys.argv[0] نام برنامه است، در حالی که sys.argv[1] اولین آرگومان واقعی واردشده توسط کاربر است.


3. چرا از getopt استفاده می‌کنیم؟

پاسخ: برای مدیریت آرگومان‌های خط فرمان پیچیده‌تر، مخصوصاً زمانی که برنامه گزینه‌های اختیاری و اجباری دارد.


4. تفاوت stdout و stderr چیست؟

پاسخ: stdout برای خروجی معمول برنامه استفاده می‌شود، اما stderr مخصوص پیام‌های خطا و هشدار است و می‌تواند جداگانه ذخیره شود.


5. چرا استفاده از subprocess در علوم ژنومی مهم است؟

پاسخ: زیرا بسیاری از ابزارهای تحلیل ژنومی مستقل از Python هستند. با subprocess می‌توان این ابزارها را از داخل اسکریپت Python اجرا و خودکارسازی کرد.


04_week-four/01_module-4/05_lecture-8-biopython-13-32

درس ۸: آشنایی با Biopython و کاربرد آن در تحلیل داده‌های زیستی


خلاصه کلی

Biopython مجموعه‌ای گسترده از ابزارها و کتابخانه‌های آماده برای انجام محاسبات و تحلیل‌های زیست‌اطلاعاتی (Bioinformatics) در زبان Python است.

در این درس، هدف آموزش کامل Biopython نیست، بلکه معرفی قابلیت‌های اصلی آن و نشان دادن یک مثال واقعی از کاربرد آن در ژنومیک است.

در پایان درس یاد می‌گیریم چگونه با استفاده از Biopython:

  • فایل‌های زیستی مانند FASTA را پردازش کنیم.
  • به پایگاه‌های داده زیستی آنلاین متصل شویم.
  • برنامه معروف BLAST را از داخل Python اجرا کنیم.
  • نتایج BLAST را تحلیل و تفسیر کنیم.

مفاهیم کلیدی


1. Biopython — بایوپایتون

تعریف ساده

Biopython یک مجموعه کتابخانه و ابزار Python برای انجام وظایف مرتبط با زیست‌شناسی محاسباتی و بیوانفورماتیک است.


توضیح دقیق

پروژه Biopython در سال ۱۹۹۹ آغاز شد و هدف آن این بود که استفاده از Python در حوزه زیست‌شناسی آسان‌تر شود.

این پروژه شامل ماژول‌هایی برای کارهای مختلف است، از جمله:

  • خواندن و نوشتن فرمت‌های فایل زیستی
  • اتصال به پایگاه‌های داده زیستی
  • اجرای الگوریتم‌های تحلیل توالی
  • کار با برنامه‌های بیوانفورماتیکی

قابلیت‌های مهم Biopython

1. پردازش فایل‌های زیستی

Biopython می‌تواند فایل‌هایی مانند:

  • FASTA
  • GenBank
  • SwissProt

را بخواند و تحلیل کند.


2. دسترسی به سرویس‌های آنلاین

Biopython امکان ارتباط با پایگاه‌هایی مانند:

  • NCBI

را فراهم می‌کند.


3. ارتباط با نرم‌افزارهای بیوانفورماتیکی

بسیاری از ابزارهای تحلیل زیستی را می‌توان از داخل Python کنترل کرد.


اهمیت

در پروژه‌های واقعی ژنومیک، داده‌ها بسیار بزرگ هستند و نوشتن همه الگوریتم‌ها از ابتدا منطقی نیست.

Biopython باعث می‌شود پژوهشگر بتواند از ابزارهای آماده استفاده کند و تمرکز خود را روی تحلیل علمی داده‌ها بگذارد.


2. بررسی نصب Biopython

برای بررسی اینکه Biopython نصب است یا نه:

import Bio

اگر خطایی ایجاد نشود، Biopython نصب شده است.


برای مشاهده نسخه:

print(Bio.__version__)

خروجی مثلاً:

1.65

نسخه نصب‌شده را نشان می‌دهد.


3. BLAST — ابزار مقایسه توالی‌ها

تعریف ساده

BLAST (Basic Local Alignment Search Tool) یکی از مهم‌ترین ابزارهای بیوانفورماتیک برای پیدا کردن شباهت بین توالی‌های DNA یا پروتئین است.


توضیح دقیق

BLAST یک توالی ناشناخته را دریافت می‌کند و آن را با تعداد بسیار زیادی توالی موجود در پایگاه داده مقایسه می‌کند.

هدف:

یافتن پاسخ به این سؤال:

این توالی متعلق به چه موجود یا چه ژنی است؟


کاربرد در پزشکی و ژنومیک

مثال:

یک بیمار بسیار بیمار است.

از نمونه او توالی‌های DNA استخراج شده‌اند.

بخشی از این توالی‌ها:

  • با ژنوم انسان تطبیق داده نمی‌شوند.
  • منشأ آن‌ها ناشناخته است.

با BLAST می‌توان بررسی کرد که آیا این توالی متعلق به:

  • ویروس
  • باکتری
  • قارچ
  • موجود دیگر

است.


4. استفاده از BLAST در Biopython

برای استفاده از BLAST آنلاین از طریق Biopython:

ابتدا:

from Bio.Blast import NCBIWWW

سپس توالی FASTA خوانده می‌شود:

fasta_string = open("myseq.fa").read()

اجرای BLAST:

result_handle = NCBIWWW.qblast(
    "blastn",
    "nt",
    fasta_string
)

پارامترهای مهم

blastn

نوع جستجو:

  • DNA در برابر DNA

nt database

پایگاه داده:

Non-redundant nucleotide database

که شامل حجم بسیار زیادی از توالی‌های ثبت‌شده در NCBI است.


5. BLAST Output Parsing — تحلیل خروجی BLAST

نتیجه BLAST معمولاً بسیار بزرگ است، بنابراین باید آن را پردازش کنیم.

برای خواندن خروجی XML:

from Bio.Blast import NCBIXML

سپس:

blast_record = NCBIXML.read(result_handle)

ساختار نتایج BLAST

نتیجه BLAST شامل اطلاعات مختلفی است:


Alignment

تطبیق بین توالی Query و توالی موجود در پایگاه داده.


Score

امتیاز کیفیت تطبیق.

هرچه بیشتر باشد، تطبیق بهتر است.


E-value (Expectation Value)

تعریف

احتمال اینکه چنین تطبیقی به صورت تصادفی رخ داده باشد.


تفسیر:

  • مقدار بسیار کوچک → تطبیق واقعی و قابل اعتماد
  • مقدار بزرگ → احتمالاً تصادفی

مثلاً:

2 × 10^-29

یک تطبیق بسیار قوی است.


HSP (High Scoring Pair)

بخش‌هایی از Alignment که بالاترین امتیاز را دارند.

برای هر تطبیق، BLAST اطلاعات HSP ارائه می‌دهد.


6. فیلتر کردن نتایج BLAST با E-value

برای حذف نتایج ضعیف:

مثلاً:

e_value_thresh = 0.01

سپس فقط تطبیق‌هایی انتخاب می‌شوند که:

hsp.expect < e_value_thresh

باشند.

یعنی:

احتمال تصادفی بودن کمتر از ۱٪ باشد.


7. مثال واقعی: شناسایی عامل بیماری‌زا

مسئله

از یک بیمار توالی DNA ناشناخته‌ای به دست آمده است.

این توالی در ژنوم انسان پیدا نشده است.


راه‌حل

  1. توالی به BLAST داده می‌شود.
  2. BLAST آن را با پایگاه داده NCBI مقایسه می‌کند.
  3. بهترین تطبیق‌ها بررسی می‌شوند.

نتیجه مثال

توالی بیمار با:

Ebola virus

تطبیق کامل نشان داد.

بنابراین مشخص شد عامل بیماری:

ویروس ابولا بوده است.


نکات مهم

  • Biopython جایگزین نوشتن الگوریتم‌های پیچیده نیست؛ بلکه مجموعه‌ای از ابزارهای آماده است.
  • در پروژه‌های واقعی، استفاده از کتابخانه‌های آماده بسیار مهم است.
  • BLAST یکی از پراستفاده‌ترین ابزارهای تاریخ بیوانفورماتیک است.
  • Biopython امکان اجرای BLAST از طریق اینترنت را فراهم می‌کند.
  • خروجی BLAST معمولاً XML است و برای خواندن آن از NCBIXML استفاده می‌شود.
  • E-value معیار اصلی برای تشخیص معنی‌دار بودن یک تطبیق است.
  • مقدار E-value کوچک‌تر یعنی احتمال تصادفی بودن کمتر.
  • HSP بخش‌هایی از Alignment هستند که بیشترین شباهت را دارند.
  • در تحلیل ژنومی، ترکیب Python + Biopython + ابزارهایی مانند BLAST بسیار قدرتمند است.

اصطلاحات تخصصی

اصطلاح انگلیسی ترجمه فارسی توضیح
Biopython بایوپایتون مجموعه کتابخانه‌های Python برای بیوانفورماتیک
Bioinformatics زیست‌اطلاعات‌شناسی استفاده از محاسبات برای تحلیل داده‌های زیستی
FASTA فرمت FASTA قالب استاندارد ذخیره توالی‌های DNA و پروتئین
GenBank پایگاه GenBank فرمت و پایگاه داده توالی‌های زیستی
SwissProt پایگاه SwissProt پایگاه داده پروتئین‌ها
BLAST ابزار جستجوی شباهت توالی مقایسه توالی با پایگاه داده بزرگ
Query Sequence توالی مورد جستجو توالی ناشناخته‌ای که بررسی می‌شود
Database پایگاه داده مجموعه توالی‌های مرجع
Alignment هم‌ترازی مقایسه موقعیت‌به‌موقعیت دو توالی
Score امتیاز معیار کیفیت تطبیق
E-value مقدار انتظار احتمال رخ دادن تطبیق به صورت تصادفی
HSP جفت‌های با امتیاز بالا بخش‌های مهم Alignment
XML فرمت XML قالب ذخیره و انتقال داده‌های ساختاریافته
NCBI مرکز ملی اطلاعات زیست‌فناوری پایگاه مهم داده‌های زیستی

مثال‌ها و تشبیه‌ها

تشبیه BLAST

فرض کنید یک جمله ناشناس پیدا کرده‌اید و می‌خواهید بدانید از کدام کتاب آمده است.

BLAST مانند یک موتور جستجوی بسیار تخصصی است که این جمله را با میلیون‌ها جمله مقایسه می‌کند و نزدیک‌ترین منابع را پیدا می‌کند.

در ژنتیک:

  • جمله = توالی DNA
  • کتاب‌ها = پایگاه داده ژنومی
  • نتیجه جستجو = گونه یا ژن احتمالی

خلاصه نهایی مرور سریع

  • Biopython مجموعه ابزارهای آماده Python برای بیوانفورماتیک است.
  • این کتابخانه در سال ۱۹۹۹ ایجاد شد.
  • Biopython می‌تواند فایل‌های FASTA، GenBank و SwissProt را پردازش کند.
  • با Biopython می‌توان به سرویس‌های NCBI متصل شد.
  • BLAST برای یافتن منشأ یک توالی ناشناخته استفاده می‌شود.
  • NCBIWWW.qblast() امکان اجرای BLAST از داخل Python را فراهم می‌کند.
  • خروجی BLAST شامل Alignment، Score، E-value و HSP است.
  • E-value کوچک نشان‌دهنده تطبیق قابل اعتماد است.
  • Biopython خروجی‌های پیچیده BLAST را برای تحلیل ساده‌تر پردازش می‌کند.
  • استفاده از ابزارهای آماده، سرعت توسعه پروژه‌های ژنومی را افزایش می‌دهد.

سوالات مرور

1. Biopython چیست و چرا استفاده می‌شود؟

پاسخ: Biopython مجموعه‌ای از کتابخانه‌های Python برای انجام تحلیل‌های زیست‌اطلاعاتی است که استفاده از ابزارهای ژنومی و پردازش داده‌های زیستی را ساده می‌کند.


2. BLAST چه کاری انجام می‌دهد؟

پاسخ: BLAST یک توالی DNA یا پروتئین را با پایگاه داده بزرگی از توالی‌ها مقایسه می‌کند تا توالی‌های مشابه و منشأ احتمالی آن را پیدا کند.


3. E-value چه مفهومی دارد؟

پاسخ: E-value احتمال رخ دادن یک تطبیق به صورت تصادفی را نشان می‌دهد. مقدار کمتر نشان‌دهنده تطبیق معتبرتر است.


4. چرا از NCBIXML در Biopython استفاده می‌کنیم؟

پاسخ: برای تبدیل خروجی XML مربوط به BLAST به ساختاری قابل پردازش در Python استفاده می‌شود.


5. در یک پروژه پزشکی چگونه Biopython می‌تواند کمک کند؟

پاسخ: می‌تواند توالی‌های ناشناخته بیمار را با ابزارهایی مانند BLAST مقایسه کند و به شناسایی عامل بیماری‌زا مانند ویروس یا باکتری کمک کند.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment