Shanraq.org сайтының негізін қалаушы. Мен экономика мен ашкөздіктің айырмашылығын ажыратамын — Аристотель соңғысын «хроматистика» деп атады. Менің ойымша, осы айырмашылықтан басқаның бәрі дерлік туындайды: әлемнің құрылымы да, оған деген көзқарасымыз да.
Shanraq-тың ашық курсы Python тілін біртұтас жоба арқылы меңгеруге көмектеседі: білім алушы ресми дереккөздерден мәлімет алады, оны тексереді, талдайды және нәтижесін қайта жасауға болатын есепке айналдырады. 57 сабақтың кімге арналғанын, қалай құрылғанын және ақша тақырыбының неліктен дайын жауап емес, оқу міндеті екенін түсіндіреміз.
Python курсының елу үшінші сабағы. Дерек пішінін функция сигнатурасында сипаттап, `None` мәнін тексеру арқылы типті тарылтамыз және үйлеспейтін мәндерді бағдарлама орындалмай тұрып `mypy` көмегімен табамыз.
Python бастапқы курсының елу бесінші әрі соңғы сабағы. Барлық тексеруді бір шлюзге жинап, есептің өзгермейтін каталогын құрамыз, оны тек сәтті тексеруден кейін жариялап, дереккөз бен жинау уақытын оқырманға көрсетеміз.
Python курсының елу төртінші сабағы. Тікелей тәуелділіктерді толық lock-файлдан бөліп, Python нұсқасын бекітеміз және бір жылдан кейін де қайта жиналатын таза орта құрамыз.
Python курсының елу екінші сабағы. Жоба ережелерін автоматты тесттерге айналдырамыз: қалыпты жағдайды, шекараны және күтілетін қатені тексеріп, бүкіл жинақты бір пәрменмен іске қосамыз.
Python курсының елу бірінші сабағы. Бақылауды, есептелген қорытындыны және себеп туралы түсіндірмені бөлеміз. Код санды тексеріп, есепті қайталай алады, ал сенімді естілетін себеп дербес дәлел мен адам тексеруінсіз тек болжам болып қалады.
Python курсының елуінші сабағы. Модельге тұрақты дереккөз идентификаторлары бар шағын кесте береміз, құрылымды тұжырым қабылдап, әр санды бастапқы жазбамен салыстырамыз. Модель сөзбен атауды ұсынады, ал тексерілген мәнді, бірлікті және жылды қорытынды мәтінге код қояды.
Python курсының қырық тоғызыншы сабағы. Модельден еркін мәтін емес, берілген схемаға сай JSON сұраймыз, оны стандартты `json` модулімен талдап, `jsonschema` кітапханасымен тексереміз. Синтаксис, құрылым және факт деп бөлінген үш шекара әдемі жазылған қатені есепке өткізбейді.
Python курсының қырық сегізінші сабағы. Модельге сұранысты кездейсоқ бір жолмен жазуды тоқтатамыз: рөлді, міндетті, деректі және шектеуді бөлеміз, temperature, seed пен жауап шегін бекітеміз, содан кейін бүкіл сұранысты нәтижемен бірге сақтаймыз. Бірдей сұраныс тексерілетін тәжірибеге айналады, бірақ мәтіннің байтқа дейін бірдей болуына уәде бермейді.
Python курсының қырық жетінші сабағы. Ollama орнатып, API кілтінсіз алғашқы жауапты аламыз және сұраныстың бүкіл жолын талдаймыз: бағдарлама JSON-ды localhost мекенжайына жібереді, HTTP жауабын тексереді, содан кейін ғана модель мәтінін алады. Жергілікті портты сыртқа өзіңіз ашпасаңыз, дерек компьютеріңізде қалады.
Python курсының қырық алтыншы сабағы, модельдер модулінің соңы. Сол түзу 2100 жылға 146 206 индексін уәде етеді — әрі бірде-бір жауабын күмәнді деп белгілемейді. Шекараны қолмен жазуға тура келеді: неде үйренді, қайда тексерілді, қандай ауқымда қателеседі, қай жылдан кейін қолданылмайды.
Python курсының қырық бесінші сабағы. Модель «иә» не «жоқ» деп жауап береді: келесі жылы инфляция он пайыздан жоғары бола ма. Дәлдігі 0.75, ал әрқашан «жоқ» дейтін модельдікі 0.675 — әрі қате матрицасы сонда жиырма алты жоғары жылдың жиырмасы өткізіп жіберілгенін көрсетеді.
Python курсының қырық төртінші сабағы. Сол модель, сол дерек: үйреткен жылдарында қате 2.48, көрмегенінде 35.99. Уақыт бойынша кесудің орнына кездейсоқ кесу 5.37 көрсетеді әрі өтірік айтады. Бесінші дәрежелі көпмүше дерлік мінсіз үйренеді де, түзуден үш есе нашар қателеседі.
Python курсының қырық үшінші сабағы. Он алты жылдық баға арқылы жүргізілген түзу R² 0.927 береді әрі «өткен жылдағыдай» деген ережеден жүздік тармаққа ұтылады. Оның қатесі кездейсоқ емес, пішіні бар: плюс, минус, плюс. Логарифмдегі түзу екі есе аз қателеседі, өйткені баға көбейтіледі.
Python курсының қырық екінші сабағы. 2022 жылы әлемдік тамақ 14.9 %-ға қымбаттады — бәріне бірдей. Он көршінің инфляциясы 8.6-дан 72.3 %-ға дейін шықты, сегіз есе айырма. Екі әдеттегі себеп — бағам мен ақша — тексеріледі, әрі бір ел жауапты жылжытады, ақшада таңбасын ауыстырады.
Python курсының қырық бірінші сабағы. Ресми кестенің бір жолында сол бір бағалар туралы бес сан тұр, әрі бесеуі де дұрыс. Әрқайсысы қандай сұраққа жауап беретіні, жарияланымда басылмаған себеттің салмақтарын қалай алуға болатыны және Дүниежүзілік банкте неге басқа сан шығатыны.
Python курсының қырқыншы сабағы. Елдегі бүкіл ақшаның тоғыз пайызын ғана Ұлттық Банк басып шығарған; қалған тоқсан бірі — банк несие бергенде пайда болған шоттағы жазбалар. Агрегаттар матрёшка ретінде, ЖІӨ теңгесіне қанша ақша, ақша көбейткіші — және бұл туралы заңда не жазылған.
Python курсының отыз тоғызыншы сабағы. «Инфляция 8 %, ал менде бәрі екі есе қымбаттады» — екеуі де бір мезгілде шындық, ажырататыны — салмақтар. Себет, әр позицияның шығыстағы үлесі, өсімге қосқан үлесі — және себет 69.8 %-ға өскен жерде жай орташа неге 84.6 % уәде ететіні.
Python курсының отыз сегізінші сабағы. Он жылдың мөлшерлемелерін қоссаңыз, 92.98 % болады — әрі бұл қате жауап: баға 141.98 %-ға өсті, өйткені пайыздар көбейтіледі. `cumprod` арқылы индекс, көбейткіш, жылдық орташа мөлшерлеме және 2014 жылғы мың теңге — одан 2024-ке 413 теңге ғана қалған.
Python курсының отыз жетінші сабағы және ақша модулінің басы. Он ел, бір жыл: орташа 20.48 %, медиана 13.88 % — әрі орташа он елдің сегізіндегіден жоғары. Бір елді алыңыз: орташа 5.76-ға ығысады, медиана 0.03-ке. `mean`, `median`, `std` және өлшемді нәтижеге дейін таңдайтын ереже.
Python курсының отыз алтыншы сабағы және есеп туралы модульдің соңы. Бір `main()` ішіндегі төрт қадам, уақытша файл арқылы жазу, зардапсыз қайталау және қайтару коды; тапсырмада `--dry-run` режимі қосылады. Әрі бәрі сол үшін жасалған ереже: қолжетімсіз дереккөз кешегі есепті өшірмей, орнында қалдырады.
Python курсының отыз бесінші сабағы. `1234567.891` пен `1 234 567,89` — бір сан және екі түрлі есеп. Пішім жолдары, бізше бөлгіштер, жұпқа қарай дөңгелектейтін `round`, ақшаға арналған `Decimal` және дөңгелектелген сомаға тең келмейтін дөңгелектелгендердің сомасы.
Python курсының отыз төртінші сабағы. HTML-ді деректен жинаймыз: жол жалғаудың орнына үлгі, кестеден келгеннің бәріне `html.escape`, файл ішіндегі сурет — және өзін өзі тексеретін бет. Бір файл, ол кез келген браузерде ашылады, PDF-ке басылады және хатпен бір тіркеме болып кетеді.
Python курсының отыз үшінші сабағы. Сол екі сан: нөлден бағана 1.31 есе биік, ось сегізден басталса — 4.86 есе. Сол бір сызық кесіндісі: кең парақта 14°, тар парақта 73°. Пайыз бен пайыздық тармақ, қатардың қай бөлігін алу, әр графикте тұруға тиіс бес нәрсе — және өзін өзі тексеретін график.
Python курсының отыз бірінші сабағы. Күн индексі тізім істей алмайтынды істейді: `asfreq` жоқ күндерді көрсетеді, `resample` күндерді аптаға жинайды, `rolling` тегістейді. Әрі тегістеудің өлшенген құны: ауқым екі есе кемиді, ал нағыз шыңның күні қатардан жоғалып кетеді.
Сабақ емес, pandas модулінің қалың бөлігі алдындағы анықтамалық бет. Сегіз сөз — кесте, баған, белгі мен позиция, маска, жетіспейтін мән, кілт, түр және пішін — үш жолдық бір кестеде. Қазір бір рет оқып шығыңыз да, сөз кездескенде қайта оралыңыз: қасында ол қай сабақта түсіндірілетіні жазулы.
Python курсының отызыншы сабағы. Дерек сынып келеді: сандар жол болып, қала үш түрлі жазылып, егіз жол мен бос ұяшық қоса келеді. `isna`, `errors="coerce"` бар `to_numeric`, `astype`, `drop_duplicates` — және сабақтың басты сұрағы: жетіспейтін мәнді тастау ма, толтыру ма, әрі оның құны қандай.
Python курсының жиырма тоғызыншы сабағы. `merge` екі кестені кілт бойынша біріктіреді — әрі әдепкі күйінде жұбы табылмаған жолдарды үнсіз лақтырып тастайды. `inner` мен `left`, `indicator`, белгі бойынша `join`, жолдарды көбейтетін қайталанған кілт және оны ұстайтын `validate`.
Python курсының жиырма сегізінші сабағы. `groupby` — сұрақ болып жазылған цикл: кестені кілт бойынша кесу, әр бөлігін санау, кері жинау. `agg` пен өз баған аттары, екі кілт, кестеде жоқ кілт, үлес үшін `transform`, `count` пен `size`-дың айырмасы және үнсіз жоғалатын топтар.
Python курсының жиырма жетінші сабағы. Маска — «иә» мен «жоқтан» тұратын баған, әрі кесте сонымен тұтас сүзіледі, циклсіз. `df[маска]`, `.loc[маска, бағандар]`, `&`, `|`, `~` және міндетті жақшалар, `isin`, `between`, `str`, әрі сүзгіден кейін қайта саналмайтын белгілер.
Python курсының жиырма алтыншы сабағы. Басқа жүйеден келген файл — бұл бөлгіш, бөлшектегі үтір, BOM және өз белгісі бар жетіспейтін мән; циклде әрқайсысын есте ұстау керек, ал `read_csv`-те бұлар — параметрлер. `read_csv`, `to_csv`, `read_sql` және `to_sql`, әрі файлдың кесте туралы нені ұмытатыны.
Python курсының жиырма бесінші сабағы. Жол белгісі бар кесте тізімше жауап бермейді: `loc` белгі бойынша, `iloc` нөмір бойынша алады, ал екі қатардың қосындысы рет бойынша емес, жыл бойынша есептеледі. `DataFrame` мен `Series`, индекс, тілімдер және өзі пайда болатын `NaN`.
Python курсының жиырма төртінші сабағы. pandas модулі басталуға тиіс сұрақтан басталады: ол соған тұра ма. Жауапты сенім емес, өлшем береді. pandas қырық есе жылдам болатын жер, тек екі есе болатын жер, кәдімгі циклден баяу болатын жер, жады неге тұрады — және кесте қашан керек екені.
Python курсының жиырма үшінші сабағы. Түнде сізсіз жұмыс істейтін бағдарлама: кодты түзетудің орнына аргументтер, `print` орнына деңгейлері бар журнал, қатар жүретін екі іске қосуға қарсы құлып және кестенің жалғыз оқитын нәрсесі — қайтару коды. Плюс cron, launchd пен systemd.
Python курсының жиырма екінші сабағы. Дерекқор өзі санайды: `GROUP BY` әр валютаға бір жол береді, `JOIN` екінші кестеден атауын қояды, ал ай — күн жолының алғашқы жеті таңбасынан жасалған топ. Плюс тұзақ: бос жауап бойынша `avg` нөл емес, `None` қайтарады.
Python курсының жиырма бірінші сабағы. Файлдың орнына дерекқор: жол қосылады, кешегілері қала береді, ал күнді қайта жүргізу қосарлама жасамайды. Плюс екі өлшенген тұзақ: мәнді сұранысқа жабыстыру бір валютаның орнына бүкіл кестені берді, ал `commit`-сіз жабу жазбаны жоғалтты.
Python курсының жиырмасыншы сабағы. Бөтен серверге сыпайылық үш нәрседен тұрады: таймаут — мәңгі күтпеу, кідірісі екі еселенетін қайталау — құлағанды ұрмау, кэш — екі рет сұрамау. Өз серверімізде өлшенді: төрт оқу, бір сұраныс.
Python курсының он тоғызыншы сабағы. Ұлттық банктің сол жауабы, бірақ оны талдағыш оқиды: 39 валюта, бағам жолдың кесегі емес, тег аты бойынша. Плюс екі тұзақ: жоқ тег үшін `find` `None` қайтарады, ал аттар кеңістігі бар тег қысқа атымен мүлде табылмайды.
Python курсының он сегізінші сабағы. Ұлттық банкке сұраныс: 200, `text/xml`, 11 407 байт — әрі бұл жол емес, `bytes`. Плюс қателерді өңдеуді бұзатын айырма: `HTTPError` — сервер «жоқ» деп жауап берді, `URLError` — жауап мүлде болмады.
Python курсының он жетінші сабағы. Шолу бір ұзын файлға дейін өсті, әрі оны атауларға бөлетін кез келді. `import` бөтен файлды тұтас орындайды, `__name__` модульді іске қосылғаннан ажыратады, ал қасындағы өз `csv.py` файлы стандарттысын үнсіз ауыстырады.
Python курсының он алтыншы сабағы. Жүз мың квадрат тізіммен төрт мегабайтқа жуық орын алады, генератормен — 376 байт: барлық сандарымен қоса өлшенді. Айырма қалай санауда емес, мәндердің қашан пайда болуында. Плюс басты қате: генератор бір реттік, әрі онымен екінші аралау үнсіз бос нәтиже береді.
Python курсының он бесінші сабағы. Тізімдегі бес атаудың әртүрлісі — төртеу: жиын қайталауды үнсіз жеп қояды. Оның есесіне екі деректер экспортына қойылған үш сұрақ үш таңбамен шешіледі: `&` — екеуінде де не бар, `-` — не қалмаған, `|` — бәрі бірге. Плюс `{}` — бос жиын емес, бос сөздік.
Python курсының он төртінші сабағы. 15 қаңтар мен 1 наурыздың арасы — 45 күн, оны сіз емес, `timedelta` санайды. Плюс екі тұзақ: `01.02.2026` бірде-бір қатесіз екі пішіммен де талданады — қаңтар мен ақпан болып, — ал белдеусіз уақытты белдеуі бардан алуға болмайды, әрі Python мұны тіке айтады.
Python курсының он үшінші сабағы. Дүниежүзілік банктің жауабы — екі элементтен тұратын тізім: қызметтік бөлік пен жазбалар. Оны қолмен талдап, есепті үнсіз бұзатын нәрсені табамыз: `null` `None` болады, ал сан-кілттер JSON арқылы айналып келгенде жол болып оралады — `2025` кетеді, `"2025"` келеді.
Python курсының он екінші сабағы. `2022,15.0,"шок, соғыс, логистика"` жолында `split(",")` үштің орнына бес бөлік береді — өлшенді. csv модулі үшеу береді. Қоса `DictReader`, міндетті `newline=""` және Excel белгісі: бағана орнында тұрса да, `row["year"]` `KeyError` жауабын береді.
Python курсының он бірінші сабағы. Бағдарлама деректі жазады, оны жол-жолмен оқиды да, есепті қасына қояды. Жолды жолдарды жабыстыру емес, `Path` құрайды: Windows-та сол жол кері қиғаш сызықпен жазылады. Ал кодтауды әрқашан көрсетеді — онсыз оны сіз емес, жүйе таңдайды.
Python курсының оныншы сабағы. Басқа жүйеден экспортталған деректің бес жолынан үшеуі ғана талданды: үтір — нүкте, ал «дерек жоқ» пен бос жол сан емес. `try/except/else/finally`, бір жолмен жасалатын өз қате атауы және басты білік — traceback-ті соңғы жолынан бастап, төменнен жоғары оқу.
Python курсының тоғызыншы сабағы. Қатарды аралау ат алады да, кез келген қатарды санайды: Қазақстан — 11,52%, әлем — 4,68%. Қоса бос қатарда есепті тоқтататын `assert`, `sorted(key=)` ішіндегі `lambda` және өлшенген тұзақ: тақырыптағы `into=[]` мәндерді жинап қояды.
Python курсының сегізінші сабағы. Отыздың орнына бір салыстыру: цикл қатарды өзі аралайды, `continue` дерегі жоқ жылды аттайды, жинақтауыш орташаны санайды — бес жылда 11,52%. Қоса екі тұзақ: `zip` қатарды қысқасы бойынша үнсіз қияды, ал шығуы жоқ `while` шеттен өтіп құлайды.
Python курсының жетінші сабағы. Сан өздігінен ештеңе айтпайды: 11,4% — көп пе, аз ба? Шарт салыстырады да, жолды таңдайды. Инфляцияда өлшенді: 2025 жылы Қазақстан — 11,4%, әлем — 3,0%. Қоса деректе жұмыс істеудің басты ережесі: қатардағы жетіспейтін мән — нөл емес, оны `is None` арқылы тексереді.
Go курсының қырық алтыншы сабағы. Хостинг сіз үшін үш нәрсені шешеді: порт PORT айнымалысында келеді, машинаның барлық мекенжайын тыңдау керек, ал тегін тарифтің дискі әр деплойда жоғалады — өлшенді: сол құпиясөзбен кіру бұрын 303, кейін 401. Әрі бір статикалық файлға жинау.
Python курсының алтыншы сабағы. Атау бойынша бағалар: қатенің орнына `get`, аралаудың орнына `in`, дайын кесте ретінде `items()`. Өлшенді: жоқ кілтке жүгіну — бос емес, `KeyError`; Counter себетті бір жолда санайды, ал defaultdict кәдімгі сөздік құлайтын жерде нөлді өзі қояды.
Python курсының бесінші сабағы. Тізімдегі бағалар: индекстер, тілімдер, өзгерту, сома мен ең үлкені — бірде-бір циклсіз. Бәрі сүрінетін айырма өлшенді: sorted() жаңа тізім қайтарады, .sort() бастапқысын өзгертіп, None береді. Сондай-ақ өзгеруден бас тартатын кортеж: TypeError.
Python курсының төртінші сабағы. Бөтен файлдан дерек мәтінмен келеді, ал мәтін санға айналмайынша оны қосудың мағынасы жоқ: «260» + «260» 260260 береді. Ақшаның басты ережесі де өлшенді: 0.1 + 0.2 0.3-ке тең емес, ал Decimal — тең. Қоса None, сондай-ақ == пен is.
Алаңның екінші тегін курсы — 55 сабақ: деректен өзі жаңарып тұратын есепке дейін. Неге Python, неге веб емес, дерек пен ЖИ, оқырман нақты нені санайтыны: бағалар 3,48 есе өсті, мың теңге тұрған нәрсе 3481 теңге тұрады. Тіркеусіз әрі төлемсіз, үш тілде.
Python курсының үшінші сабағы. Дүкен чегінде санаймыз: бірдің орнына екі бөлу, қалдық, дәреже, содан кейін жолдар — қиып алу, ауыстыру, кесу, жабыстыру. Оның үстіне санды мәтін ішіне қоятын f-жолдар: 52 751 740 084 727 ₸ разрядпен, 11,4% үтірден кейінгі бір таңбамен.
Python курсының екінші сабағы. Тілді орнатамыз, жобаның ортасын жасаймыз, кешегі бағдарламаны соған көшіреміз. Өлшенді: ортаға орнатылған пакет сырттан көрінбейді — `ModuleNotFoundError`, — орта дәл сол үшін жасалады. `.venv` қалтасы 17 МБ тартады және репозиторийге кетпейді.
Python курсының бірінші сабағы. Кітапхана орнатудың қажеті жоқ: дайын бағдарлама ресми сандарды өзі алып, солар бойынша санайды. Қазақстанда бағалар 2010 жылдан бері 3,48 есе өсті: мың теңге тұрған нәрсе 3481 теңге тұрады. Ал өңірдің басқа елдерінде сол шоктан кейін инфляция үш есе төмен. Бұл — өзіңіз санаудың алғашқы себебі.
Go курсының елуінші, соңғы сабағы. Дженериктер — үшеудің орнына бір функция, ал типке қойылған шартты компилятор тексереді: `string` іске қосылғанға дейін өтпейтіні өлшенді. Олардың `any`-ден несімен жақсы екені де өлшенді: 534 наносекунд пен 1801.