Shanraq.org Shanraq.org
Өзіңіздің инфляцияңыз: сіздің себет пен ресми себет
IT

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

Өзіңіздің инфляцияңыз: сіздің себет пен ресми себет

Python курсының отыз тоғызыншы сабағы. «Инфляция 8 %, ал менде бәрі екі есе қымбаттады» — екеуі де бір мезгілде шындық, ажырататыны — салмақтар. Себет, әр позицияның шығыстағы үлесі, өсімге қосқан үлесі — және себет 69.8 %-ға өскен жерде жай орташа неге 84.6 % уәде ететіні.

Не үшін керек

Ресми индекс орташа үй шаруашылығының себетін санайды. Олардың арасында сіздің себетіңіз жоқ: сізде өз жалдауыңыз, өз жолыңыз, өз балаларыңыз және өз мысығыңыз бар. Сондықтан «ресми 65 %» мен «менде 70 %-ға өсті» — дау емес, екі түрлі сұрақ.

Өз инфляцияңызды бір кеште санауға болады, чектер болса. Ол баға белгілері бойынша орташамен емес, салмақтармен саналады: әр позиция сіздің ақшаңызда қанша орын алады.

Бірден тұтас

sebet.py файлы. Мұндағы ресми көбейткіш нағыз — Қазақстанның 2019–2024 жылдардағы тұтыну бағасы индексі, Дүниежүзілік банк деректері. Себеттің өзі — мысал: өз чектеріңізді қойыңыз, арифметика өзгермейді.

"""39-сабақ: өзіңіздің инфляцияңыз — сіздің себет пен ресми себет.

Мұндағы ресми көбейткіш нағыз: Дүниежүзілік банк деректері бойынша
Қазақстанның 2019–2024 жылдардағы тұтыну бағасының индексі. Себет — мысал:
өз чектеріңізді қойыңыз, арифметика өзгермейді.
"""

import pandas as pd

# Ресми индекс (2010 = 100): бесжылдықтың басы мен соңы.
OFFICIAL_2019 = 189.30
OFFICIAL_2024 = 312.53

# Себет мысалы: ай сайын не алынады, сол кезде және қазір қандай бағамен.
basket = pd.DataFrame(
    [
        ("нан, бөлке", 20, 90, 180),
        ("сүт, литр", 15, 260, 480),
        ("жұмыртқа, ондық", 8, 350, 1000),
        ("ет, кг", 4, 1600, 3200),
        ("жол жүру, сапар", 40, 80, 100),
        ("интернет, ай", 1, 5000, 6500),
        ("жалдау, ай", 1, 90000, 150000),
    ],
    columns=["атауы", "қанша", "болған", "болды"],
)

# Позицияның себеттегі құны: сол кезде және қазір.
basket["сонда"] = basket["қанша"] * basket["болған"]
basket["қазір"] = basket["қанша"] * basket["болды"]
# Салмақ — базалық жылдың шығысындағы үлес. Салмақтардың қосындысы 1.
basket["салмақ"] = basket["сонда"] / basket["сонда"].sum()
basket["өсті, есе"] = basket["болды"] / basket["болған"]

print("== Себет")
print(basket[["атауы", "қанша", "болған", "болды", "өсті, есе"]].round(3).to_string(index=False))

print()
print("== Салмақтар: айыңыз шын мәнінде неден тұрады")
weights = basket[["атауы", "салмақ"]].sort_values("салмақ", ascending=False)
print(weights.assign(**{"салмақ": (weights["салмақ"] * 100).round(1)}).to_string(index=False))

print()
print("== Бір сұраққа үш жауап")
personal = basket["қазір"].sum() / basket["сонда"].sum()
simple = basket["өсті, есе"].mean()
official = OFFICIAL_2024 / OFFICIAL_2019
print("  себет тұтас:", round(personal, 3), "→", round((personal - 1) * 100, 1), "%")
print("  позициялар бойынша жай орташа:", round(simple, 3), "→", round((simple - 1) * 100, 1), "%")
print("  ресми индекс:", round(official, 3), "→", round((official - 1) * 100, 1), "%")

print()
print("== Себетіңізді кім көтерді")
basket["үлесі"] = basket["салмақ"] * (basket["өсті, есе"] - 1)
contribution = basket[["атауы", "салмақ", "өсті, есе", "үлесі"]].sort_values("үлесі", ascending=False)
print(contribution.round(3).to_string(index=False))
print("  үлестер қосындысы:", round(basket["үлесі"].sum(), 3), "— себеттің өсімі осы")

print()
print("== Айлық шығыс")
print("  сол кезде:", basket["сонда"].sum(), "теңге")
print("  қазір:", basket["қазір"].sum(), "теңге")
print("  айырма:", basket["қазір"].sum() - basket["сонда"].sum(), "теңге айына")

Шығысы:

== Себет
          атауы  қанша  болған  болды  өсті, есе
     нан, бөлке     20      90    180      2.000
      сүт, литр     15     260    480      1.846
жұмыртқа, ондық      8     350   1000      2.857
         ет, кг      4    1600   3200      2.000
жол жүру, сапар     40      80    100      1.250
   интернет, ай      1    5000   6500      1.300
     жалдау, ай      1   90000 150000      1.667

== Салмақтар: айыңыз шын мәнінде неден тұрады
          атауы  салмақ
     жалдау, ай    79.6
         ет, кг     5.7
   интернет, ай     4.4
      сүт, литр     3.4
жол жүру, сапар     2.8
жұмыртқа, ондық     2.5
     нан, бөлке     1.6

== Бір сұраққа үш жауап
  себет тұтас: 1.698 → 69.8 %
  позициялар бойынша жай орташа: 1.846 → 84.6 %
  ресми индекс: 1.651 → 65.1 %

== Себетіңізді кім көтерді
          атауы  салмақ  өсті, есе  үлесі
     жалдау, ай   0.796      1.667  0.531
         ет, кг   0.057      2.000  0.057
жұмыртқа, ондық   0.025      2.857  0.046
      сүт, литр   0.034      1.846  0.029
     нан, бөлке   0.016      2.000  0.016
   интернет, ай   0.044      1.300  0.013
жол жүру, сапар   0.028      1.250  0.007
  үлестер қосындысы: 0.698 — себеттің өсімі осы

== Айлық шығыс
  сол кезде: 113100 теңге
  қазір: 192100 теңге
  айырма: 79000 теңге айына

Талдау

Себет — баға тізімі емес, шығыс тізімі

Бөлкенің бағасы сіздің айыңыз туралы ештеңе айтпайды. Айтатыны — баға × саны: айына жиырма рет алынатын 90 теңгелік бөлке — 1800 теңге, ал айына бір рет төленетін жалдау — 90 000. Себетте олар қатар тұр, әрі екіншісі біріншісінен елу есе ауыр.

Сондықтан чектермен бірінші істейтін нәрсе — оларды баға белгісіне емес, құнға айналдыру.

Салмақ — базалық жылдың шығысындағы үлес

салмақ = позицияның құны ÷ бүкіл себеттің құны. Салмақтардың қосындысы бірге тең, әрі бұл себет кімдікі деген сұраққа толық жауап:

жалдау, ай 79.6
ет, кг 5.7
интернет, ай 4.4

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

Себет индексі: бүгінгі құн мен сол кездегі құн

себет тұтас: 1.698 → 69.8 %

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

Жай орташа неге өтірік айтады

позициялар бойынша жай орташа: 1.846 → 84.6 %

Ол жұмыртқа мен жалдауды бірдей маңызды деп санайды. Жұмыртқа 2.86 есе қымбаттады әрі 2.5 % салмақ алады — олардың үлесі жалдау үлесінің әр теңгесіне шамамен тоғыз тиын (0.046 ÷ 0.531). Ал жай орташада олар бірдей тартады, сондықтан жауап шындықтан он бес тармақ жоғары шығады.

Ереже: позициялар бойынша ешқашан орташа алмайды. Ақша бойынша алады.

Үлес: себетті кім көтерді

үлес = салмақ × (неше есе өсті − 1). Үлестердің қосындысы себеттің өсіміне дәлме-дәл тең — шығыста көрініп тұр: екі жерде де 0.698.

жалдау, ай 0.796  1.667  0.531
жұмыртқа, ондық 0.025  2.857  0.046

Жалдау жұмыртқадан баяу өсті, ал себетті он екі есе қатты көтерді. Ыдыратудың ең пайдалы жері де осы: ол бірдеңе істеуге тұрарлық позицияны атайды.

Сіздің индексіңіз ресмиден неге ажырайды

Бұл оқу мысалында айырманы әртүрлі салмақтар түсіндіреді. Нақты деректерде тауарлар мен қызметтер, дүкендер, өңірлер, жеңілдіктер, сапа және байқалған бағалар да өзгеше болуы мүмкін: ресми себет — ел бойынша орташаланған шығыс құрылымы, тамаққа, тұрғын үйге, көлікке, байланысқа және қалғанының бәріне үлестерімен. Ол жарияланады, әрі оны бір рет қарап шыққан жөн — Ұлттық статистика бюросы ТБИ неден жиналатынын түсіндіреді.

Мысалдағы алшақтық — 4.8 пайыздық тармақ, әрі ол түгелдей салмақтармен түсіндіріледі: бұл себетте жалға алынған тұрғын үй ресмидегіден төрт есе көп орын алады.

Осыдан екі адал сөйлем шығады: «елдегі инфляция 65 %» және «менің инфляциям 70 %». Екеуі де дұрыс, әрі екеуі де «кімнің себеті» дегенді айтпай тұрып мағынасыз.

Бұл есеп нені істей алмайды

Тауар сатылымнан жоғалды, жаңасы шықты, сапасы өзгерді, сіз басқа ауданға көштіңіз — бекітілген себетте бұған орын жоқ. Ресми статистика мұны ауыстырулармен және салмақтарды қайта қараумен шешеді; қалай екені — ресми статистиканы қалай оқу керектігі туралы сабақта, ол әлі алда.

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

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

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

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

  1. Өз инфляцияңызды чектегі позициялардың баға өсімінің орташасы ретінде санауға неге болмайды?
  2. Позицияның салмағы деген не және ол қайдан алынады?
  3. Дүкендегі баға бәріне бірдей болса, сіздің индексіңіз ресмиден неге ажырайды?

Жаттығу

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

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

import pandas as pd

two = pd.DataFrame(
    [("сіріңке", 100, 30, 90), ("жалдау", 1, 90000, 99000)],
    columns=["атауы", "қанша", "болған", "болды"],
)
two["сонда"] = two["қанша"] * two["болған"]
two["қазір"] = two["қанша"] * two["болды"]
print("жай орташа:", round((two["болды"] / two["болған"]).mean(), 3))
print("себет бойынша:", round(two["қазір"].sum() / two["сонда"].sum(), 3))

2. Бос орынды толтырыңыз. ... орнына салмақтарды санаңыз: әр позицияның шығыстағы үлесін.

# айлық шығыстың үш жолы, теңгемен
import pandas as pd

cost = pd.Series([1800, 3900, 90000], index=["нан", "сүт", "жалдау"])
weights = ...
print((weights * 100).round(1).to_dict())

3. Түзетіңіз. Бағдарлама «сіздің инфляцияңызды» баға белгілері бойынша санайды да, сандарды ұмытады.

# нанды айына жиырма рет алады, жалдауды — бір рет
import pandas as pd

basket = pd.DataFrame(
    [("нан", 20, 90, 180), ("жалдау", 1, 90000, 150000)],
    columns=["атауы", "қанша", "болған", "болды"],
)
print("сіздің инфляцияңыз:", round(((basket["болды"] / basket["болған"]).mean() - 1) * 100, 1), "%")

Тапсырма

Міндетті. Чектер кестесі бойынша салмақтарды, өз себетіңіздің индексін және әр позицияның үлесін санаңыз. Позицияларды үлесі бойынша кемуімен, қорытындыны сол жылдардағы ресми көбейткіштің қасында және айырманы тармақпен басып шығарыңыз. Бөлек: өсімнің ең көбін түсіндіретін позицияны атаңыз — оның салмағы мен бүкіл өсімдегі үлесі. Соңында тексеру: үлестер қосындысы себеттің өсімімен сәйкес келуге тиіс.

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

== Өсімге үлес, кемуі бойынша
          атауы  салмақ  өсті, есе  үлесі
     жалдау, ай   0.796      1.667  0.531
         ет, кг   0.057      2.000  0.057
жұмыртқа, ондық   0.025      2.857  0.046
      сүт, литр   0.034      1.846  0.029
     нан, бөлке   0.016      2.000  0.016
   интернет, ай   0.044      1.300  0.013
жол жүру, сапар   0.028      1.250  0.007

== Қорытынды
  менің себетім: 1.698 → 69.8 %
  ресми индекс: 1.651 → 65.1 %
  айырма: 4.8 пайыздық тармақ

== Бір позиция түсіндіреді
  позиция: жалдау, ай
  салмағы: 79.6 % себеттің
  үлесі: 75.9 % бүкіл өсімнің

== Тексеру
  үлестер қосындысы: 0.6985
  себеттің өсімі: 0.6985
  сәйкес келді: True

Дайын болғаны: шығыс жол-жолымен сәйкес келеді; салмақтар бағадан емес, құннан саналады; индекс — жолдар бойынша орташа емес, қосындылардың бір бөлуі; тексеру «шамамен» емес, дәл сәйкес келеді.

Өз деректеріңізде. Бір айлық чектеріңізді алыңыз — қайталанатын кемінде он позиция, — әрі бес жыл бұрынғы бағаларын (есте қалғаны, ескі фотолар, хат алмасу, прайстар). Өз индексіңізді санап, сол кезеңдегі ресмимен салыстырыңыз. Сосын үлестер бойынша ыдыратуға қараңыз: бір-екі позиция өсімнің жартысынан көбін түсіндіретіні дерлік сөзсіз. Сіздің шешіміңіз бірдеңені өзгертетін позициялар — солар, қалғаны шу.

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

  • Базалық жылдың орнына бүгінгі жылдың сандарын алып индекс санаңыз (бұл Пааше индексі) және Ласпейреспен салыстырыңыз.
  • Себеттен жалдауды алып тастап, салмақтардың да, қорытындының да қалай өзгеретінін қараңыз: бұл «пәтер өзімдікі болса ше» дегенге жауап.
  • Позицияларды топтарға бөліңіз — тамақ, тұрғын үй, көлік, байланыс — әрі әр позицияның орнына әр топтың үлесін санаңыз.

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

Қадам жоқ: жиынтық елдер бойынша ресми қатарларды оқиды, ал себет — сіздің жеке файлыңыз, әрі жалпы жиынтықта оған орын жоқ.

Бірақ сабақтың бір ойы жобада қазірдің өзінде жұмыс істейді. Жиынтықтың индексі (он сегізінші қадам) ресми мөлшерлемелерге, яғни бөтен салмақтарға сүйенеді — әрі жиынтық «баға 1.6 есе өсті» дегенде мұны есте ұстаған жөн. Ол оқырманның себеті туралы емес, елдің орташа себеті туралы айтады.

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

Жауаптар

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

Сұрақтарға

  1. Өйткені позициялар бойынша орташа барлық позицияны бірдей маңызды деп санайды, ал олар бірдей емес: жұмыртқа шығыстың 2.5 %-ын, жалдау 79.6 %-ын алады. Мысалда жай орташа нағыз 69.8 %-дың орнына 84.6 % береді.
  2. Салмақ — базалық жылдың шығысындағы үлес: позицияның құнын бүкіл себеттің құнына бөлген нәтиже. Ол бағадан емес, баға × саны-дан, яғни сол позицияға қанша ақша кететінінен алынады.
  3. Өйткені баға емес, салмақтар әртүрлі. Ресми себет — ел бойынша орташаланған шығыс құрылымы; сізде жалдау сексен пайыз алуы мүмкін, ал орташада — айтарлықтай аз. Бір баға белгілері әртүрлі салмаққа жайылғанда әртүрлі индекс береді.

Жаттығуға

  1. Сіріңке үш есе қымбаттады, жалдау — оннан бірге. Жай орташа әрқайсысынан жартысын алады, себет — ақша бойынша, ал ақшада сіріңкенің салмағы жоққа тән.
жай орташа: 2.05
себет бойынша: 1.161
  1. cost / cost.sum(). Салмақтар — үлестер, қосындысы бірге тең, әрі олар құннан саналады.
import pandas as pd

cost = pd.Series([1800, 3900, 90000], index=["нан", "сүт", "жалдау"])
weights = cost / cost.sum()
print((weights * 100).round(1).to_dict())
{'нан': 1.9, 'сүт': 4.1, 'жалдау': 94.0}
  1. Құн бойынша санау керек: бағаларды сандарға көбейтіп, қосындыларды бөлу.
import pandas as pd

basket = pd.DataFrame(
    [("нан", 20, 90, 180), ("жалдау", 1, 90000, 150000)],
    columns=["атауы", "қанша", "болған", "болды"],
)
then = basket["қанша"] * basket["болған"]
now = basket["қанша"] * basket["болды"]
print("сіздің инфляцияңыз:", round((now.sum() / then.sum() - 1) * 100, 1), "%")
сіздің инфляцияңыз: 67.3 %

Тапсырмаға

Үлестер бойынша ыдырату үлестердің қосындысы себеттің өсіміне тең болуына сүйенеді. Бұл кездейсоқтық емес: Σ салмақ × (өсім − 1)(Σ қазір ÷ Σ сонда) − 1 дегеннің өзі, тек позициялар бойынша жазылған. Сондықтан тапсырманың соңындағы тексеру шамамен емес, дәл сәйкес келеді, ал кез келген алшақтық салмақтардағы қатені білдіреді.

Ресми индекспен салыстыру 4.8 тармақ айырма береді. Пайдалысы санның өзі емес, оны түсіндіруге болатыны: бұл себетте жалдау 79.6 % салмақ алады, әрі ресми санмен болатын бүкіл дау нанның бағасы туралы емес, тұрғын үйдің үлесі туралы.

Дереккөздер

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

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

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

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

Пікірлер (0)

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