mdeck 3.7.1 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/README.md +3 -3
- package/assets/base.css +9 -5
- package/assets/extensions/themes/academic/extension.toml +4 -1
- package/assets/extensions/themes/academic/styles.css +22 -22
- package/assets/extensions/themes/glass/extension.toml +7 -1
- package/assets/extensions/themes/glass/styles.css +17 -17
- package/assets/extensions/themes/minimal/extension.toml +3 -1
- package/assets/extensions/themes/minimal/styles.css +14 -14
- package/assets/extensions/themes/neue/extension.toml +3 -1
- package/assets/extensions/themes/neue/styles.css +14 -14
- package/assets/extensions/themes/plain/extension.toml +7 -1
- package/assets/extensions/themes/plain/styles.css +17 -17
- package/assets/extensions/themes/work/extension.toml +8 -2
- package/assets/extensions/themes/work/styles.css +26 -26
- package/docs/reference/authoring.md +21 -4
- package/docs/reference/extensions.md +5 -1
- package/docs/reference/themes.md +6 -2
- package/docs/site/content/drawing.md +1 -1
- package/docs/site/content/presenting.md +45 -0
- package/docs/site/content/theme-authoring.md +28 -0
- package/examples/python/slides.de.md +493 -0
- package/examples/python/{slides.md → slides.en.md} +1 -1
- package/examples/python/slides.fa.md +492 -0
- package/examples/python/slides.hi.md +492 -0
- package/examples/showcase/slides.md +33 -0
- package/package.json +1 -1
- package/skills/write-slides/SKILL.md +1 -0
- package/src/build/config.js +1 -1
- package/src/build/slidesPlugin.js +34 -4
- package/src/cli/index.js +4 -0
- package/src/cli/themes.js +2 -0
- package/src/components/callout.css +10 -10
- package/src/components/citation.css +2 -2
- package/src/components/code-block.css +3 -3
- package/src/components/poll.css +6 -6
- package/src/components/video-player.css +1 -1
- package/src/core/editDeck.js +3 -2
- package/src/core/icons.js +1 -0
- package/src/core/languages.js +51 -0
- package/src/core/parseSlides.js +15 -3
- package/src/core/validateDeck.js +13 -1
- package/src/editor/components/DeckSettings.jsx +37 -3
- package/src/editor/components/ExtensionForms.jsx +12 -0
- package/src/editor/components/MetaFields.jsx +7 -0
- package/src/editor/extensions.js +6 -3
- package/src/extensions/appearance.js +6 -2
- package/src/extensions/manifest.js +3 -3
- package/src/extensions/params.js +113 -0
- package/src/layouts/layoutApi.jsx +7 -1
- package/src/live/answer/answer.css +2 -2
- package/src/runtime/chrome.jsx +6 -7
- package/src/runtime/deck-stage.js +249 -11
- package/src/runtime/hotspots.js +98 -0
- package/src/runtime/ink/bus.js +12 -1
- package/src/runtime/ink/room.js +20 -8
- package/src/runtime/main.jsx +152 -22
- package/src/runtime/zoom/camera.js +77 -0
- /package/examples/python/{slides.drawings.json → slides.en.drawings.json} +0 -0
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
---
|
|
2
|
+
theme: academic
|
|
3
|
+
meta:
|
|
4
|
+
title: "آشنایی با Python"
|
|
5
|
+
author: "Tilman Schieber"
|
|
6
|
+
organization: "FHNW"
|
|
7
|
+
date: "2026-05-19"
|
|
8
|
+
palette: paper
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
:::meta
|
|
13
|
+
layout: title
|
|
14
|
+
id: python-for-life-sciences
|
|
15
|
+
:::
|
|
16
|
+
# Python برای علوم زیستی.
|
|
17
|
+
## آشنایی گامبهگام برای دانشجویان کارشناسی ارشد.
|
|
18
|
+
|
|
19
|
+
:::notes
|
|
20
|
+
به درس Python خوش آمدید. این جلسه هیچ تجربهٔ قبلی در برنامهنویسی را فرض نمیکند.
|
|
21
|
+
|
|
22
|
+
- گامبهگام پیش میرویم؛ هر وقت سؤالی داشتید، بیدرنگ بپرسید
|
|
23
|
+
- همهٔ کدها مستقیم در مرورگر اجرا میشوند؛ امروز نیازی به نصب چیزی نیست
|
|
24
|
+
- هدف: در پایان میتوانید یک مجموعهداده را بارگذاری کنید، بررسی کنید و نمودارش را بکشید
|
|
25
|
+
:::
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
:::meta
|
|
29
|
+
layout: focus
|
|
30
|
+
eyebrow: چرا Python؟
|
|
31
|
+
id: the-tools-your-field-uses-are-written-in
|
|
32
|
+
:::
|
|
33
|
+
# ابزارهای رشتهٔ شما *با Python نوشته شدهاند*.
|
|
34
|
+
|
|
35
|
+
:::notes
|
|
36
|
+
Python در دانشگاه و صنعت، زبان غالب برای کارهای دادهمحور است.
|
|
37
|
+
علوم زیستی هم استثنا نیست: بیوانفورماتیک، تصویربرداری و تحلیل دادههای بالینی همه روی Python اجرا میشوند.
|
|
38
|
+
|
|
39
|
+
اکوسیستم آن (NumPy، Pandas، Matplotlib، scikit-learn، BioPython) بیرقیب است.
|
|
40
|
+
اشاره کنید که R هنوز در آمار رایج است، اما Python تا حد زیادی به زبان مشترک تبدیل شده است.
|
|
41
|
+
:::
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
:::meta
|
|
45
|
+
layout: chapter
|
|
46
|
+
number: 1
|
|
47
|
+
part: شروع کار
|
|
48
|
+
description: متغیرها، نوعها و نخستین خطوط کد شما.
|
|
49
|
+
id: variables-and-data-types
|
|
50
|
+
:::
|
|
51
|
+
# متغیرها و نوعهای داده.
|
|
52
|
+
|
|
53
|
+
:::notes
|
|
54
|
+
حتی اگر دانشجویان قبلاً کمی Python دیدهاند، از همینجا شروع کنید. از پایه میسازیم.
|
|
55
|
+
زمان تقریبی این فصل: ۲۰ دقیقه.
|
|
56
|
+
:::
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
:::meta
|
|
60
|
+
layout: split
|
|
61
|
+
section: متغیرها
|
|
62
|
+
id: variables-store-data
|
|
63
|
+
props:
|
|
64
|
+
ratio: [3, 2]
|
|
65
|
+
:::
|
|
66
|
+
# متغیر نامی برای یک مقدار است.
|
|
67
|
+
:::slot left
|
|
68
|
+
```python live editable copy
|
|
69
|
+
name = "E. coli"
|
|
70
|
+
genome_size = 4_641_652 # جفت باز
|
|
71
|
+
gc_content = 0.506 # کسر
|
|
72
|
+
|
|
73
|
+
print(name, genome_size, gc_content)
|
|
74
|
+
print(f"GC content: {gc_content:.1%}")
|
|
75
|
+
```
|
|
76
|
+
:::
|
|
77
|
+
:::slot right
|
|
78
|
+
بدون اعلان: Python نوع را از خود مقدار تشخیص میدهد.
|
|
79
|
+
|
|
80
|
+
**امتحان کنید:** `gc_content` را به `0.65` تغییر دهید و دوباره اجرا کنید.
|
|
81
|
+
:::
|
|
82
|
+
|
|
83
|
+
:::notes
|
|
84
|
+
متغیر فقط نامی است که به یک مقدار وصل شده. Python نوع را خودکار تشخیص میدهد.
|
|
85
|
+
|
|
86
|
+
یادآوری کنید: نه نقطهویرگول، نه اعلان نوع، نه کد اضافی. رشتهٔ `f"…"` مقداری را درون متن قالببندی میکند؛ `:.1%` کسر را بهصورت درصد نشان میدهد.
|
|
87
|
+
دانشجویان را تشویق کنید مقادیر را تغییر دهند و دوباره اجرا کنند؛ هدف بلوک زنده همین است.
|
|
88
|
+
:::
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
:::meta
|
|
92
|
+
section: نوعهای داده
|
|
93
|
+
id: four-types-cover-most-biology-data
|
|
94
|
+
:::
|
|
95
|
+
# چهار نوع، بیشتر دادههای زیستی را پوشش میدهند.
|
|
96
|
+
|
|
97
|
+
:::steps
|
|
98
|
+
- **`int`** — اعداد صحیح: شمارشها، موقعیتها، اندیسها
|
|
99
|
+
- **`float`** — اعداد اعشاری: غلظتها، p-value، تغییرات چندبرابری
|
|
100
|
+
- **`str`** — متن: نام ژنها، توالیها، شناسهٔ نمونهها
|
|
101
|
+
- **`bool`** — True یا False: پرچم معناداری، فیلترهای کیفیت
|
|
102
|
+
:::
|
|
103
|
+
|
|
104
|
+
:::notes
|
|
105
|
+
هر بار یک نوع را نشان دهید و پیش از نمایش بعدی، از تجربهٔ آزمایشگاهی دانشجویان مثالی بخواهید.
|
|
106
|
+
|
|
107
|
+
تأکید کنید که مقادیر بولی معمولاً از مقایسه به دست میآیند، نه از نوشتن مستقیم True/False. اسلاید بعدی از همهٔ کلاس میپرسد.
|
|
108
|
+
:::
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
:::meta
|
|
112
|
+
section: نوعهای داده
|
|
113
|
+
title: "نظرسنجی: نوع p-value"
|
|
114
|
+
id: poll-the-type-of-a-p-value
|
|
115
|
+
:::
|
|
116
|
+
# p-value از چه نوعی است؟
|
|
117
|
+
|
|
118
|
+
<poll room="p-value" options="int|float|str|bool" answer="float" />
|
|
119
|
+
|
|
120
|
+
:::notes
|
|
121
|
+
یک بررسی کوتاه پیش از ادامه. گوشیها با کد QR وصل میشوند؛ ارائه را با `mdeck run slides.fa.md --network` شروع کنید تا به این رایانه دسترسی داشته باشند.
|
|
122
|
+
|
|
123
|
+
پاسخ: `float`؛ دکمهٔ تیک زیر نمودار آن را علامت میزند. اگر بسیاری `bool` را انتخاب کردند، به *پرچم معناداری* فکر میکنند که از آن محاسبه میشود (`p < 0.05`): فرصت خوبی است تا نشان دهید مقایسهها مقدار بولی میسازند.
|
|
124
|
+
:::
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
:::meta
|
|
128
|
+
layout: split
|
|
129
|
+
section: رشتهها
|
|
130
|
+
props:
|
|
131
|
+
ratio: [3, 2]
|
|
132
|
+
:::
|
|
133
|
+
# رشتهها مثل توالی رفتار میکنند.
|
|
134
|
+
:::slot left
|
|
135
|
+
```python live editable copy
|
|
136
|
+
dna = "ATGCGTAAGCTTGAC"
|
|
137
|
+
|
|
138
|
+
print("Length: ", len(dna))
|
|
139
|
+
print("First codon:", dna[:3])
|
|
140
|
+
print("A count: ", dna.count("A"))
|
|
141
|
+
print("Reversed: ", dna[::-1])
|
|
142
|
+
print("As RNA: ", dna.replace("T", "U"))
|
|
143
|
+
```
|
|
144
|
+
:::
|
|
145
|
+
:::slot right
|
|
146
|
+
برش، شمارش و جایگزینی روی هر متنی یکسان کار میکنند.
|
|
147
|
+
|
|
148
|
+
**امتحان کنید:** آخرین کدون را با `dna[-3:]` چاپ کنید.
|
|
149
|
+
:::
|
|
150
|
+
|
|
151
|
+
:::notes
|
|
152
|
+
رشتهها توالیاند؛ میتوانید آنها را درست مثل یک توالی نوکلئوتیدی برش بزنید.
|
|
153
|
+
`replace("T", "U")` رونویسی در یک خط است. این مفاهیم بعداً مستقیم به BioPython منتقل میشوند.
|
|
154
|
+
:::
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
:::meta
|
|
158
|
+
layout: chapter
|
|
159
|
+
number: 2
|
|
160
|
+
part: مجموعهها
|
|
161
|
+
description: نگهداشتن چند مقدار با هم و دسترسی به آنها.
|
|
162
|
+
:::
|
|
163
|
+
# لیستها و دیکشنریها.
|
|
164
|
+
|
|
165
|
+
:::notes
|
|
166
|
+
بیشتر دادههای واقعی یک مقدار تنها نیستند. لیستها و دیکشنریها دو مجموعهٔ پرکاربرد اصلیاند.
|
|
167
|
+
زمان تقریبی این فصل: ۲۵ دقیقه.
|
|
168
|
+
:::
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
:::meta
|
|
172
|
+
layout: split
|
|
173
|
+
section: لیستها
|
|
174
|
+
props:
|
|
175
|
+
ratio: [3, 2]
|
|
176
|
+
:::
|
|
177
|
+
# لیست مقادیر را به ترتیب نگه میدارد.
|
|
178
|
+
:::slot left
|
|
179
|
+
```python live editable copy
|
|
180
|
+
conc = [0.12, 0.45, 0.33, 0.78, 0.21]
|
|
181
|
+
|
|
182
|
+
print("Samples:", len(conc))
|
|
183
|
+
print("First: ", conc[0])
|
|
184
|
+
print("Last: ", conc[-1])
|
|
185
|
+
print("Sorted: ", sorted(conc))
|
|
186
|
+
print("Mean: ", sum(conc) / len(conc))
|
|
187
|
+
```
|
|
188
|
+
:::
|
|
189
|
+
:::slot right
|
|
190
|
+
شمارش از صفر شروع میشود: `conc[0]` اولین عضو است و `conc[-1]` آخرین.
|
|
191
|
+
|
|
192
|
+
**امتحان کنید:** مقدار ششمی اضافه کنید و تغییر میانگین را ببینید.
|
|
193
|
+
:::
|
|
194
|
+
|
|
195
|
+
:::notes
|
|
196
|
+
لیستها ترتیب را حفظ میکنند و مقدار تکراری را میپذیرند. اندیس از ۰ شروع میشود. اندیسهای منفی از انتها میشمارند.
|
|
197
|
+
مناسب برای: سریهای زمانی، اندازهگیریهای تکراری، مراحل پردازش به ترتیب.
|
|
198
|
+
|
|
199
|
+
اشتباه رایج: دانشجویان برای اولین عضو اندیس ۱ را امتحان میکنند. اندیسگذاری از ۰ را زود جا بیندازید.
|
|
200
|
+
:::
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
:::meta
|
|
204
|
+
layout: split
|
|
205
|
+
section: دیکشنریها
|
|
206
|
+
props:
|
|
207
|
+
ratio: [3, 2]
|
|
208
|
+
:::
|
|
209
|
+
# دیکشنری مقادیر را با نامشان پیدا میکند.
|
|
210
|
+
:::slot left
|
|
211
|
+
```python live editable copy
|
|
212
|
+
sample = {
|
|
213
|
+
"id": "S042",
|
|
214
|
+
"organism": "Mus musculus",
|
|
215
|
+
"tissue": "liver",
|
|
216
|
+
"weight_mg": 312,
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
print(sample["organism"])
|
|
220
|
+
sample["weight_mg"] = 318 # بهروزرسانی یک فیلد
|
|
221
|
+
print(sample)
|
|
222
|
+
```
|
|
223
|
+
:::
|
|
224
|
+
:::slot right
|
|
225
|
+
هر دیکشنری یک نمونه را توصیف میکند: لازم نیست شمارهٔ ستونها را به خاطر بسپارید.
|
|
226
|
+
|
|
227
|
+
**امتحان کنید:** `"treated": True` را اضافه کنید.
|
|
228
|
+
:::
|
|
229
|
+
|
|
230
|
+
:::notes
|
|
231
|
+
دیکشنریها کلیدها را به مقادیر نگاشت میکنند. برای رکوردهای ساختاریافته عالیاند: یک دیکشنری = یک نمونه.
|
|
232
|
+
بعدها یک لیست از دیکشنریها به یک DataFrame در Pandas تبدیل میشود. این بذر را همین حالا بکارید.
|
|
233
|
+
:::
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
:::meta
|
|
237
|
+
layout: chapter
|
|
238
|
+
number: 3
|
|
239
|
+
part: کنترل جریان
|
|
240
|
+
description: تصمیمگیری و تکرار عملیات روی دادهها.
|
|
241
|
+
:::
|
|
242
|
+
# تصمیمها و حلقهها.
|
|
243
|
+
|
|
244
|
+
:::notes
|
|
245
|
+
این دو ساختار، if و for، بخش عمدهٔ منطق اسکریپتهای پردازش داده را پوشش میدهند.
|
|
246
|
+
زمان تقریبی این فصل: ۲۵ دقیقه.
|
|
247
|
+
:::
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
:::meta
|
|
251
|
+
layout: split
|
|
252
|
+
section: شرطها
|
|
253
|
+
props:
|
|
254
|
+
ratio: [3, 2]
|
|
255
|
+
:::
|
|
256
|
+
# `if` یک مسیر را انتخاب میکند.
|
|
257
|
+
:::slot left
|
|
258
|
+
```python live editable copy
|
|
259
|
+
p_value = 0.023
|
|
260
|
+
fold_change = 2.4
|
|
261
|
+
|
|
262
|
+
if p_value < 0.05 and fold_change > 2:
|
|
263
|
+
print("Significant upregulation")
|
|
264
|
+
elif p_value < 0.05:
|
|
265
|
+
print("Significant, modest effect")
|
|
266
|
+
else:
|
|
267
|
+
print("Not significant")
|
|
268
|
+
```
|
|
269
|
+
:::
|
|
270
|
+
:::slot right
|
|
271
|
+
تورفتگی همان بلوک است: Python از فاصله استفاده میکند، نه از آکولاد.
|
|
272
|
+
|
|
273
|
+
**امتحان کنید:** `fold_change = 1.5` را قرار دهید.
|
|
274
|
+
:::
|
|
275
|
+
|
|
276
|
+
:::notes
|
|
277
|
+
if / elif / else همهٔ شاخهها را پوشش میدهد. در Python تورفتگی سلیقهای نیست؛ بخشی از نحو است.
|
|
278
|
+
دانشجویانی که از زبانهای دیگر یا R میآیند اینجا گیر میکنند. دونقطه و تورفتگی اجباریاند.
|
|
279
|
+
نشان دهید اگر دونقطه را فراموش کنید چه میشود: Python خطای SyntaxError میدهد.
|
|
280
|
+
:::
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
:::meta
|
|
284
|
+
layout: split
|
|
285
|
+
section: حلقهها
|
|
286
|
+
props:
|
|
287
|
+
ratio: [3, 2]
|
|
288
|
+
:::
|
|
289
|
+
# `for` یک کار را برای هر عضو تکرار میکند.
|
|
290
|
+
:::slot left
|
|
291
|
+
```python live editable copy
|
|
292
|
+
values = [1.2, 0.8, 2.1, 1.5, 0.9, 2.8]
|
|
293
|
+
|
|
294
|
+
above = []
|
|
295
|
+
for value in values:
|
|
296
|
+
if value > 1.0:
|
|
297
|
+
above.append(value)
|
|
298
|
+
|
|
299
|
+
print(len(above), "of", len(values))
|
|
300
|
+
print(above)
|
|
301
|
+
```
|
|
302
|
+
:::
|
|
303
|
+
:::slot right
|
|
304
|
+
حلقه، آزمون، جمعآوری: الگوی اصلی فیلتر کردن دادهها.
|
|
305
|
+
|
|
306
|
+
**امتحان کنید:** به جای آن، مقادیر کمتر از 1.0 را بشمارید.
|
|
307
|
+
:::
|
|
308
|
+
|
|
309
|
+
:::notes
|
|
310
|
+
حلقههای for روی هر مجموعهای پیمایش میکنند. این الگو، یعنی حلقه، آزمون، جمعآوری، در قلب تقریباً هر اسکریپت پردازش دادهای است که دانشجویان خواهند نوشت.
|
|
311
|
+
|
|
312
|
+
کلید **D** را بزنید و یک مقدار را روی اسلاید در حلقه دنبال کنید: به `value`، از میان `if`، به `above`. Escape طراحی را متوقف میکند؛ نقاشی با اسلاید میماند.
|
|
313
|
+
:::
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
:::meta
|
|
317
|
+
layout: chapter
|
|
318
|
+
number: 4
|
|
319
|
+
part: تابعها
|
|
320
|
+
description: بستهبندی منطق برای استفادهٔ دوباره و آزمودن.
|
|
321
|
+
:::
|
|
322
|
+
# تابعها منطق را برای استفادهٔ دوباره بستهبندی میکنند.
|
|
323
|
+
|
|
324
|
+
:::notes
|
|
325
|
+
تابعها نخستین گام به سوی کدی قابل استفادهٔ دوباره و قابل آزموناند.
|
|
326
|
+
انگیزه دهید: «همین محاسبه را روی ۲۰۰ نمونه اجرا خواهید کرد؛ یک بار بنویسید، ۲۰۰ بار فراخوانی کنید.»
|
|
327
|
+
زمان تقریبی این فصل: ۲۰ دقیقه.
|
|
328
|
+
:::
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
:::meta
|
|
332
|
+
layout: split
|
|
333
|
+
section: تابعها
|
|
334
|
+
props:
|
|
335
|
+
ratio: [3, 2]
|
|
336
|
+
:::
|
|
337
|
+
# تابع ورودیها را به خروجی تبدیل میکند.
|
|
338
|
+
:::slot left
|
|
339
|
+
```python live editable copy
|
|
340
|
+
def gc_content(seq):
|
|
341
|
+
"""کسر GC یک توالی را برمیگرداند."""
|
|
342
|
+
gc = seq.count("G") + seq.count("C")
|
|
343
|
+
return gc / len(seq)
|
|
344
|
+
|
|
345
|
+
for seq in ["ATGCGC", "AATTAA", "GCGCGC"]:
|
|
346
|
+
print(seq, f"{gc_content(seq):.0%}")
|
|
347
|
+
```
|
|
348
|
+
:::
|
|
349
|
+
:::slot right
|
|
350
|
+
یک بار بنویسید، سپس آن را روی هر نمونه فراخوانی کنید.
|
|
351
|
+
|
|
352
|
+
**امتحان کنید:** توالی خودتان را به لیست اضافه کنید.
|
|
353
|
+
:::
|
|
354
|
+
|
|
355
|
+
:::notes
|
|
356
|
+
def، پارامترها، return: کل نحو همین است.
|
|
357
|
+
مرحلهبهمرحله توضیح دهید: یک بار تعریف کنید، بارها با ورودیهای مختلف فراخوانی کنید.
|
|
358
|
+
docstring (رشتهٔ سهگیومهای پس از def) روش درستی است؛ زود معرفیاش کنید.
|
|
359
|
+
:::
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
:::meta
|
|
363
|
+
layout: chapter
|
|
364
|
+
number: 5
|
|
365
|
+
part: Python علمی
|
|
366
|
+
description: NumPy، Pandas و Matplotlib، سه ستون اصلی.
|
|
367
|
+
:::
|
|
368
|
+
# پشتهٔ علمی.
|
|
369
|
+
|
|
370
|
+
:::notes
|
|
371
|
+
همین سه کتابخانهاند که Python را به زبان غالب علم داده تبدیل کردهاند.
|
|
372
|
+
دانشجویان در عمل Python خالص زیادی نمینویسند؛ از اینها استفاده میکنند.
|
|
373
|
+
زمان تقریبی این فصل: ۳۰ دقیقه.
|
|
374
|
+
:::
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
:::meta
|
|
378
|
+
section: Python علمی
|
|
379
|
+
:::
|
|
380
|
+
# سه کتابخانه بیشتر کارهای علوم زیستی را پوشش میدهند.
|
|
381
|
+
|
|
382
|
+
:::steps
|
|
383
|
+
- **NumPy** — آرایههای سریع: محاسبه روی کل مجموعهداده بهیکباره
|
|
384
|
+
- **Pandas** — جدولها: بارگذاری، فیلتر، گروهبندی و خلاصهسازی دادههای صفحهگسترده
|
|
385
|
+
- **Matplotlib** — نمودارها، با کنترل روی تکتک اجزا
|
|
386
|
+
:::
|
|
387
|
+
|
|
388
|
+
:::notes
|
|
389
|
+
مروری کوتاه پیش از ورود به جزئیات. پیام اصلی: این کتابخانهها کارهای سنگین را انجام میدهند،
|
|
390
|
+
پس دانشجویان کد کمتری مینویسند و نتایجی سریعتر و مطمئنتر از حلقههای Python خالص میگیرند.
|
|
391
|
+
:::
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
:::meta
|
|
395
|
+
layout: split
|
|
396
|
+
section: NumPy
|
|
397
|
+
props:
|
|
398
|
+
ratio: [3, 2]
|
|
399
|
+
:::
|
|
400
|
+
# NumPy روی کل آرایه محاسبه میکند.
|
|
401
|
+
:::slot left
|
|
402
|
+
```python live copy
|
|
403
|
+
import numpy as np
|
|
404
|
+
|
|
405
|
+
m = np.array([1.2, 0.8, 2.1, 1.5, 0.9, 2.8])
|
|
406
|
+
|
|
407
|
+
print("Mean: ", m.mean().round(3))
|
|
408
|
+
print("Std: ", m.std().round(3))
|
|
409
|
+
print("Median:", np.median(m))
|
|
410
|
+
print("> 1.5: ", m[m > 1.5])
|
|
411
|
+
```
|
|
412
|
+
:::
|
|
413
|
+
:::slot right
|
|
414
|
+
`m[m > 1.5]` بدون حلقه فیلتر میکند.
|
|
415
|
+
|
|
416
|
+
آن را با حلقهٔ `for` دو فصل قبل مقایسه کنید.
|
|
417
|
+
:::
|
|
418
|
+
|
|
419
|
+
:::notes
|
|
420
|
+
عملیات NumPy بهیکباره روی کل آرایه اعمال میشوند؛ بدون حلقه. هم سریعتر است و هم خواناتر.
|
|
421
|
+
عادت به این سبک برداری زمان میبرد، اما ارزش دارد زود یاد گرفته شود.
|
|
422
|
+
نمایش: پیش از اجرا از دانشجویان بخواهید حدس بزنند `m > 1.5` چه برمیگرداند.
|
|
423
|
+
:::
|
|
424
|
+
|
|
425
|
+
---
|
|
426
|
+
:::meta
|
|
427
|
+
layout: focus
|
|
428
|
+
eyebrow: نکتهٔ کلیدی
|
|
429
|
+
:::
|
|
430
|
+
# عملیات را روی *آرایهها* بنویسید، نه روی تکمقدارها.
|
|
431
|
+
|
|
432
|
+
:::notes
|
|
433
|
+
این مهمترین تغییر ذهنی از Python خالص به Python علمی است.
|
|
434
|
+
تکرارش کنید، بگذارید جا بیفتد. دانشجویانی که زود آن را درونی کنند، بعدها کد بسیار تمیزتری مینویسند.
|
|
435
|
+
:::
|
|
436
|
+
|
|
437
|
+
---
|
|
438
|
+
:::meta
|
|
439
|
+
layout: chapter
|
|
440
|
+
number: 6
|
|
441
|
+
part: گامهای بعدی
|
|
442
|
+
description: از اینجا به کجا برویم.
|
|
443
|
+
id: keep-going
|
|
444
|
+
:::
|
|
445
|
+
# ادامه دهید.
|
|
446
|
+
|
|
447
|
+
:::notes
|
|
448
|
+
با یک نقشهٔ راه جمعبندی کنید. دانشجویان پس از یک درس مقدماتی اغلب احساس سردرگمی میکنند؛ گامهای بعدی مشخص به آنها بدهید
|
|
449
|
+
و بهترین منابع رایگان را معرفی کنید.
|
|
450
|
+
:::
|
|
451
|
+
|
|
452
|
+
---
|
|
453
|
+
:::meta
|
|
454
|
+
section: گامهای بعدی
|
|
455
|
+
:::
|
|
456
|
+
# بعد از این چه یاد بگیریم.
|
|
457
|
+
|
|
458
|
+
- **Pandas** — بارگذاری CSV، فیلتر کردن سطرها، محاسبهٔ آمار گروهها
|
|
459
|
+
- **Matplotlib و Seaborn** — نمودار پراکندگی، نقشهٔ حرارتی، نمودار آتشفشانی
|
|
460
|
+
- **scikit-learn** — طبقهبندی، خوشهبندی، کاهش ابعاد
|
|
461
|
+
- **BioPython** — توالیها، BLAST، فایلهای GenBank و PDB
|
|
462
|
+
|
|
463
|
+
:::notes
|
|
464
|
+
برای خودآموزی: آموزش رسمی Python برای نحو، و مستندات Pandas برای کار با داده.
|
|
465
|
+
دورههای رایگان Python و Pandas در Kaggle عالیاند و با سرعت دلخواه پیش میروند.
|
|
466
|
+
بهطور خاص برای علوم زیستی: مستندات BioPython و کتاب درسی Python for Bioinformatics (Bassi).
|
|
467
|
+
:::
|
|
468
|
+
|
|
469
|
+
---
|
|
470
|
+
:::meta
|
|
471
|
+
layout: focus
|
|
472
|
+
eyebrow: به خاطر بسپارید
|
|
473
|
+
:::
|
|
474
|
+
# بهترین راه یادگیری برنامهنویسی، *نوشتن کد* است.
|
|
475
|
+
|
|
476
|
+
:::notes
|
|
477
|
+
با همین جمعبندی کنید. برنامهنویسی یک مهارت است و تمرین میخواهد. چند هفتهٔ اول کند به نظر میرسد،
|
|
478
|
+
بعد همهچیز جا میافتد. به تمرین روزانه تشویق کنید، حتی با اسکریپتهای کوچک. به تمرینها اشاره کنید.
|
|
479
|
+
:::
|
|
480
|
+
|
|
481
|
+
---
|
|
482
|
+
:::meta
|
|
483
|
+
layout: title
|
|
484
|
+
:::
|
|
485
|
+
# سؤالی هست؟
|
|
486
|
+
## سپاسگزارم؛ حالا لپتاپهایتان را باز کنید.
|
|
487
|
+
|
|
488
|
+
:::notes
|
|
489
|
+
برای پرسشها وقت بگذارید.
|
|
490
|
+
به دانشجویان یادآوری کنید مطالب درس را کجا پیدا کنند و چطور با شما تماس بگیرند.
|
|
491
|
+
جلسهٔ بعد به Pandas و بارگذاری مجموعهدادههای واقعی میپردازد.
|
|
492
|
+
:::
|