Shanraq.org Shanraq.org
Инфляция — көбейткіш: теңге қанша тұрған
IT

Python: деректен өз есебіңізге дейін 39-сабақ (барлығы 56)

Инфляция — көбейткіш: теңге қанша тұрған

Python курсының отыз сегізінші сабағы. Он жылдың мөлшерлемелерін қоссаңыз, 92.98 % болады — әрі бұл қате жауап: баға 141.98 %-ға өсті, өйткені пайыздар көбейтіледі. `cumprod` арқылы индекс, көбейткіш, жылдық орташа мөлшерлеме және 2014 жылғы мың теңге — одан 2024-ке 413 теңге ғана қалған.

Не үшін керек

Инфляция жылдық пайызбен жарияланады, ал адамдар жылдар бойы өмір сүреді. Он пайызды бір санға қосу — ең алдымен ойға келетін нәрсе, әрі бұл он жылдық қатарда бір жарым есе қателесетін қате.

Дұрыс жауапты көбейткіш береді. Қалған жауаптардың бәрі де содан шығады: баға неше есе өсті, былтырғы мың теңге бүгін қанша тұрады, табыс шынымен өсті ме әлде тек номиналда ма.

Бірден тұтас

kobeitkish.py файлы. Мөлшерлемелер — Дүниежүзілік банк деректерінен, 2014 жыл база ретінде алынған.

"""38-сабақ: инфляция — көбейткіш, немесе теңге қанша тұрған.

Жылдық пайыздар қосылмайды: олар көбейтіледі. Мөлшерлемелер қатарынан индекс
жиналады, индекстен — мың теңгеге не болғаны шығады.
Мөлшерлемелердің дереккөзі — Дүниежүзілік банк, FP.CPI.TOTL.ZG.
"""

import pandas as pd

# Қазақстандағы жылдық инфляция, пайызбен. 2014 — база, сондықтан оның
# мөлшерлемесі қатарда керек емес: индекс содан саналады.
rates = pd.Series(
    [6.68, 14.36, 7.44, 6.16, 5.33, 6.72, 8.04, 15.03, 14.53, 8.69],
    index=[2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024],
    name="мөлшерлеме",
)

# Әр жылдың өз көбейткіші бар: 6.68 % деген 1.0668 болады.
factors = 1 + rates / 100
# Жинақталған көбейтінді — баға индексінің өзі. База: 2014 жыл = 100.
index = (factors.cumprod() * 100).round(2)
total = factors.prod()

print("== Баға индексі, 2014 = 100")
print(index.to_string())

print()
print("== Он жылда баға неше есе өсті")
print("  көбейткіш:", round(total, 3))
print("  өсім:", round((total - 1) * 100, 2), "%")
print("  қатардағы пайыздар қосындысы:", round(rates.sum(), 2), "% — әрі ол дұрыс емес")
print("  айырма:", round((total - 1) * 100 - rates.sum(), 2), "пайыздық тармақ")

print()
print("== Мың теңгеге не болды")
kept = 1000 / total
print("  2014 жылғы мың теңге 2024-те сол кездегі", round(kept, 2), "теңгедей ғана сатып алады")
print("  жоғалтқаны:", round(100 - kept / 10, 2), "% сатып алу қабілеті")
print("  сол затты алу үшін 2024-те керек:", round(1000 * total, 2), "теңге")

print()
print("== Қай жылды орташа деп санау керек")
geometric = total ** (1 / len(rates)) - 1
print("  көбейткіштер бойынша жылдық орташа:", round(geometric * 100, 2), "%")
print("  мөлшерлемелердің арифметикалық орташасы:", round(rates.mean(), 2), "%")
print("  он жылда біріншісі береді:", round((1 + geometric) ** len(rates), 3))
print("  ал екіншісі:", round((1 + rates.mean() / 100) ** len(rates), 3))

print()
print("== 2014 жылғы чек әр жылдың бағасында")
basket = 12000
print(" ", basket, "теңгелік 2014 жылғы чек — бұл:")
for year in (2016, 2020, 2024):
    print(f"    {year}: {round(basket * index[year] / 100, 2)} теңге")

print()
print("== Кері жүріс: номинал 2014 жылдың ақшасымен")
nominal = pd.Series({2016: 15000, 2020: 20000, 2024: 30000}, name="номинал")
real = (nominal / index[nominal.index] * 100).round(2)
print(pd.DataFrame({"номинал": nominal, "2014 теңгесімен": real}).to_string())

Шығысы:

== Баға индексі, 2014 = 100
2015    106.68
2016    122.00
2017    131.08
2018    139.15
2019    146.57
2020    156.42
2021    168.99
2022    194.39
2023    222.64
2024    241.98

== Он жылда баға неше есе өсті
  көбейткіш: 2.42
  өсім: 141.98 %
  қатардағы пайыздар қосындысы: 92.98 % — әрі ол дұрыс емес
  айырма: 49.0 пайыздық тармақ

== Мың теңгеге не болды
  2014 жылғы мың теңге 2024-те сол кездегі 413.25 теңгедей ғана сатып алады
  жоғалтқаны: 58.67 % сатып алу қабілеті
  сол затты алу үшін 2024-те керек: 2419.84 теңге

== Қай жылды орташа деп санау керек
  көбейткіштер бойынша жылдық орташа: 9.24 %
  мөлшерлемелердің арифметикалық орташасы: 9.3 %
  он жылда біріншісі береді: 2.42
  ал екіншісі: 2.433

== 2014 жылғы чек әр жылдың бағасында
  12000 теңгелік 2014 жылғы чек — бұл:
    2016: 14640.0 теңге
    2020: 18770.4 теңге
    2024: 29037.6 теңге

== Кері жүріс: номинал 2014 жылдың ақшасымен
      номинал  2014 теңгесімен
2016    15000         12295.08
2020    20000         12786.09
2024    30000         12397.72

Талдау

Пайыз — бұл көбейткіш

Жылына 6.68 % — бұл 1.0668-ге көбейту. Қатарынан екі жыл — екі рет көбейту: 1.0668 × 1.1436, қосу емес. Қалғанының бәрі содан.

Пайыздарды қосу он жылға 92.98 % береді, көбейту — 141.98 %. Қырық тоғыз пайыздық тармақ айырма дөңгелектеу қатесі де, ұсақ-түйек те емес: бұл жауаптың жартысы.

Индекс — бұл жинақталған көбейтінді

(1 + rates / 100).cumprod() * 100 — бүкіл баға индексі бір жолда. cumprod өсе отырып көбейтеді, сондықтан әр нүктеде бұрынғы көбейткіштердің бәрінің көбейтіндісі тұрады: 2016 жыл — 122.00, яғни сол жылға баға базадан 1.22 есе өскен.

База — соған қатысты санайтын жыл. Оның дұрыс мәні жоқ: 100 үйреншікті, өйткені сонда индекс базадан пайыз ретінде оқылады. Маңыздысы басқа — базаны атау керек. «Индекс 241.98» деген сөз «2014 = 100» дегенсіз ештеңе білдірмейді.

Мың теңгеге не болды

Шатастыратын екі сұрақ, ал көбейткіш біреу:

2014 жылғы мың теңге 2024-те сол кездегі 413.25 теңгедей ғана сатып алады
сол затты алу үшін 2024-те керек: 2419.84 теңге

Біріншісі — көбейткішке бөлу: бүгінгі мың теңге ескі ақшамен қанша тұрады. Екіншісі — көбейту: ескі себет үшін бүгін қанша керек. Сандар әртүрлі (413 және 2420), сұрақ әртүрлі, ал көбейткіш сол біреу.

Сатып алу қабілетінің жоғалуы біріншісінен саналады: 100 % − 41.3 % = 58.7 %. Матрас астындағы он жылдың құны да осы.

Орташа жыл — геометриялық, арифметикалық емес

Жылдық орташа мөлшерлеме — бұл мөлшерлемелердің арифметикалық орташасы емес, сол жылдарға сол көбейткішті беретін бір мөлшерлеме:

көбейткіштер бойынша жылдық орташа: 9.24 %
мөлшерлемелердің арифметикалық орташасы: 9.3 %

Мұнда айырма аз, бірақ ол әрқашан бір жаққа: мөлшерлемелердің арифметикалық орташасы геометриялықтан ешқашан кем емес, әрі он жылда 9.3 % нағыз 2.42-нің орнына 2.433 береді. Мөлшерлемелердің шашырауы неғұрлым үлкен болса, алшақтық соғұрлым көп — құлдырауы бар қатарда ол дөрекі болып шығады.

Дефляциялау: номинал базалық жылдың ақшасында

Кері жүріс — номиналды сомасын өз жылының индексіне бөлу:

      номинал  2014 теңгесімен
2016    15000         12295.08
2020    20000         12786.09
2024    30000         12397.72

Номинал екі есе өсті, ал 2014 жылдың ақшасымен — өзгерген жоқ. «Нақты табыс» деген сөздің мәні де осы: әртүрлі жылдардың сомаларын бір жылға келтіргеннен кейін ғана салыстыруға болады.

Ереже қарапайым: әртүрлі жылдардың кез келген сомасын тек индекс арқылы салыстырады. Онсыз салыстыру өмір туралы емес, валюта туралы айтады.

Сабақ картасы

Сабақ картасы: мөлшерлеме, көбейткіш және индекс

Өз сөзіңізбен айтыңыз

Қарамай, дауыстап немесе қағазға жауап беріңіз. Жауаптар — сабақтың соңында.

  1. Он жылдың мөлшерлемелерін қосып, оны он жылдағы баға өсімі деп атауға неге болмайды?
  2. «2014 жылғы мың теңге бүгін қанша тұрады» мен «2014 жылғы мың теңгенің орнына бүгін қанша керек» сұрақтары немен ерекшеленеді?
  3. «Жалақы үш есе өсті, ал нақты ақшамен — бір жарым есе» дегені не?

Жаттығу

Тапсырмаға дейінгі үш қысқа қадам: болжау, толықтыру, түзету. Жауаптар — сабақтың соңында, бірақ алдымен өзіңіз жауап беріңіз.

1. Болжаңыз. Бұл бағдарлама не басып шығарады?

import pandas as pd

moves = pd.Series([50, -50])
print("пайыздар қосындысы:", moves.sum(), "%")
print("көбейткіш:", round((1 + moves / 100).prod(), 3))
print("мыңнан қалғаны:", round(1000 * (1 + moves / 100).prod(), 2))

2. Бос орынды толтырыңыз. ... орнына көбейткіштер қатарын индекске айналдыратынды қойыңыз.

# қатарынан үш жыл, жылына он пайыздан
import pandas as pd

rates = pd.Series([10.0, 10.0, 10.0])
index = ((1 + rates / 100)... * 100).round(2)
print(index.to_list())

3. Түзетіңіз. Бағдарлама пайыздарды қосады да, қосындыны баға өсімі деп жариялайды.

# қатарынан үш жыл: 6.68, 14.36 және 7.44 пайыз
import pandas as pd

rates = pd.Series([6.68, 14.36, 7.44])
print("өсті:", round(rates.sum(), 2), "%")
print("яғни", round(1 + rates.sum() / 100, 3), "есе")

Тапсырма

Міндетті. Қазақстанның 2015–2024 жылдардағы баға индексін жинаңыз (2014 = 100) және мыналарды басып шығарыңыз: индекстің өзін, он жылдағы көбейткішті, пайызбен өсімді, қасында «былай санауға болмайды» деген белгісі бар мөлшерлемелер қосындысын және жылдық орташа мөлшерлемені. Содан кейін 2014 жылғы мың теңге туралы екі сұраққа жауап беріңіз. Соңында үш жылдың номиналды жалақысын 2014 жылдың ақшасына келтіріп, оның номиналда неше есе, ал шын мәнінде неше есе өскенін айтыңыз.

Күтілетін шығыс:

== Индекс, 2014 = 100
2015    106.68
2016    122.00
2017    131.08
2018    139.15
2019    146.57
2020    156.42
2021    168.99
2022    194.39
2023    222.64
2024    241.98

== Он жылдың қорытындысы
  көбейткіш: 2.42
  өсім: 141.98 %
  мөлшерлемелер қосындысы (былай санауға болмайды): 92.98 %
  жылдық орташа: 9.24 %

== 2014 жылғы мың теңге
  сол кездегідей сатып алады: 413.25 теңге
  бұрынғыны алу үшін керек: 2419.84 теңге

== Үш есе өскен жалақы
      номинал  2014 теңгесімен  2016-ға нақты, %
2016   150000        122950.82              0.00
2020   250000        159826.11             29.99
2024   450000        185965.78             51.25
  номинал өсті: 3.0 есе
  нақты ақшамен: 1.51 есе

Дайын болғаны: шығыс жол-жолымен сәйкес келеді; индекс жинақтайтын циклмен емес, cumprod арқылы саналады; дефляциялау — өзіне не бергенін білмейтін бөлек функция; өсімнің бірде-бір саны пайыздарды қосумен алынбаған.

Өз деректеріңізде. Бірнеше жыл бұрын бір тұрақты нәрсеге төлеген сомаңызды алыңыз — жалдау, абонемент, жол жүру, — әрі ол ресми индекс бойынша бүгін қанша тұрар еді, соны санаңыз. Қазір қанша төлейтініңізбен салыстырыңыз. Осы екі санның айырмасы — ресми инфляция сіздікімен сәйкес келе ме деген сұраққа сіздің жеке жауабыңыз: келесі сабақ дәл сол туралы.

Қалауыңыз бойынша.

  • Базасы 2020 = 100 болатын индекс құрып, 2015–2024 көбейткішінің база ауысқаннан өзгермегеніне көз жеткізіңіз.
  • Жылына 9.24 % болғанда баға неше жылда екі есе өсетінін санап, «жетпіс ережесімен» (70 / мөлшерлеме) салыстырыңыз.
  • Бағасы түскен (теріс мөлшерлемесі бар) қатар алып, cumprod онымен не істейтінін қараңыз.

Жобада бұл қайда тұрады

Он сегізінші қадам: жиынтықта индекс пайда болады.

sholu/esep.py indeks алады — әр ел бойынша жылдық мөлшерлемелерден көбейткішті және қатардың бірінші жылы база болатын индексті жинайды. Есеп беті оларды үшінші блокпен көрсетеді: «2021 жылдан бері баға неше есе өсті».

Жиынтықтың деректерінде не шықты: 2021 жылдан 2025 жылға дейін баға Қазақстанда 1.595 есе, Өзбекстанда 1.462 есе, Ресейде 1.42 есе өсті. Бұл сандардың бірде-бірін мөлшерлемелерді қосу арқылы алуға болмайды, әрі бірде-бірі жылдың соңғы мөлшерлемесіне тең емес.

Жиынтық үшін бұл — соңғы және одан бұрынғы жыл емес, барлық жылдар қатысатын алғашқы есеп. Сондықтан сонымен бірге үзілістерге алғашқы тексеру де қосылады: индекстің мағынасы үзіліссіз жылдар қатарында ғана бар, әрі жыл түсіп қалса, indeks үнсіз санамай, ол туралы айтады.

Әлі қарастырылмағаны. Жиынтықтың индексі Дүниежүзілік банктің жылдық мөлшерлемелеріне сүйенеді, ал олардың өзі — тегістелген жылдық баға. Айлық дерек дәлірек болар еді, әрі онымен бірге маусымдық сұрақ келер еді; екеуі де ресми статистиканы қалай оқу керектігі туралы сабақты күтеді.

Жауаптар

Жауаптарды көрсету

Сұрақтарға

  1. Өйткені пайыз — көбейткіш, ал көбейткіштер көбейтіледі. Он мөлшерлеме 2.42 көбейткішін берді, яғни 141.98 % өсім, ал олардың қосындысы — 92.98 %. Қосу ешкім қоймаған сұраққа жауап береді.
  2. Бірінші сұрақ — бүгінгі мың теңге ескі ақшамен: 1000 ÷ 2.42 = 413.25. Екіншісі — ескі себет бүгінгі ақшамен: 1000 × 2.42 = 2419.84. Бір сан екі жаққа да жұмыс істейді, ал жауаптар алты есеге жуық ажырайды.
  3. Номинал үш есе өскенін, бірақ сол жылдарда баға да өскенін: екі соманы бір жылдың ақшасына келтіргеннен кейін 1.51 есе өсім қалады. Әртүрлі жылдардың сомасын индекссіз салыстыру — әртүрлі өлшем бірлігін салыстыру.

Жаттығуға

  1. Елу плюс және елу минус қосындыда нөл, көбейтіндіде 0.75 береді: өскеннен кейін жартысы үлкеннен саналады, ал құлдырау — одан да үлкеннен.
пайыздар қосындысы: 0 %
көбейткіш: 0.75
мыңнан қалғаны: 750.0
  1. .cumprod(). Жинақталған көбейтінді — индекстің өзі: 110, 121, 133.1, ал 110, 120, 130 емес.
import pandas as pd

rates = pd.Series([10.0, 10.0, 10.0])
index = ((1 + rates / 100).cumprod() * 100).round(2)
print(index.to_list())
[110.0, 121.0, 133.1]
  1. Пайыздарды қосудың орнына көбейткіштерді көбейту керек: (1 + rates / 100).prod().
import pandas as pd

rates = pd.Series([6.68, 14.36, 7.44])
print("өсті:", round((1 + rates / 100).prod(), 3), "есе")
print("яғни", round(((1 + rates / 100).prod() - 1) * 100, 2), "%")
өсті: 1.311 есе
яғни 31.08 %

Тапсырмаға

price_index пен deflate функцияларға тәртіп үшін шығарылған жоқ: индексті бір рет құрады, ал оған кейін бәрін келтіреді — жалақыны, чектерді, тарифтерді. Қатар мен индексті қабылдайтын әрі олардың мағынасын білмейтін функция үшеуімен де жұмыс істейді.

«2016-ға нақты, %» бағаны бәрі сол үшін саналған сұраққа жауап береді: номинал 200 %-ға өсті, нақты ақша — 51.25 %-ға. Екі сан да дұрыс, әрі өмірді солардың екіншісі ғана сипаттайды.

Дереккөздер

Мәтінде қате не теру қатесі кездессе, бізге айтыңыз

Тапсырманы тексеру

Алдымен VS Code-та шешіп, іске қосыңыз — редактор қатені сол жерде көрсетеді. Дайын шешімді осында қойыңыз. Тексеретін — модель: ол қатені атап көрсетеді, бірақ дайын жауапты бермейді.

Тексеру үшін кіру керек. Кіру

Пікірлер (0)

Әзірге пікір жоқ. Бірінші болыңыз.