Original size 500x750

Анализ исторической доходности финансовых активов

PROTECT STATUS: not protected
The project is taking part in the competition

Проект фокусируется на анализе и визуализации исторических данных о доходности финансовых инструментов — акций (Stocks) и краткосрочных государственных облигаций (T-Bills). На основе данных из Excel проводится их очистка и обработка, после чего строятся графики годовой доходности, сравнительные круговые диаграммы средних показателей и графики накопленной доходности. Проект наглядно демонстрирует различия между риском и доходностью различных активов, а также позволяет оценить их эффективность для долгосрочного инвестирования.

ГРАФИКИ

СТОЛБЧАТАЯ ДИАГРАММА

big
Original size 1280x628

График

import pandas as pd import matplotlib.pyplot as plt import numpy as np

FILE = «data.xlsx» SHEET = 0

raw = pd.read_excel (FILE, sheet_name=SHEET, header=None)

df = raw[[0, 1, 2]].copy () df.columns = [«year», «stocks», «tbills»]

df[«year»] = pd.to_numeric (df[«year»], errors="coerce») df[«stocks»] = pd.to_numeric (df[«stocks»], errors="coerce») df[«tbills»] = pd.to_numeric (df[«tbills»], errors="coerce»)

df = df.dropna (subset=[«year»]) df[«year»] = df[«year»].astype (int)

df = df[(df[«year»] >= 1928) & (df[«year»] <= 2100)] df = df.dropna (subset=[«stocks», «tbills»], how="all») df = df.sort_values («year»).reset_index (drop=True)

if df.empty: raise ValueError («Нет данных для построения графиков.»)

print («\n=== ДАННЫЕ ===») print (df.to_string (index=False))

========================================

df[«stocks_pct»] = df[«stocks»] * 100 df[«tbills_pct»] = df[«tbills»] * 100

years = df[«year»].values x = np.arange (len (years)) width = 0.45

plt.figure (figsize=(16, 6)) plt.bar (x — width/2, df[«stocks_pct»], width, label="Stocks») plt.bar (x + width/2, df[«tbills_pct»], width, label="T.Bills»)

plt.xlabel («Year») plt.ylabel («Return (%)») plt.title («Stocks vs T.Bills — Annual Returns (from 1928)») plt.xticks (x, years, rotation=90)

plt.axhline (0, linewidth=1) plt.grid (axis="y», linestyle="--», alpha=0.5) plt.legend () plt.tight_layout () plt.show ()

КРУГОВАЯ ДИАГРАММА

Original size 700x700

import pandas as pd import matplotlib.pyplot as plt import numpy as np

FILE = «data.xlsx» SHEET = 0

raw = pd.read_excel (FILE, sheet_name=SHEET, header=None)

df = raw[[0, 1, 2]].copy () df.columns = [«year», «stocks», «tbills»]

df[«year»] = pd.to_numeric (df[«year»], errors="coerce») df[«stocks»] = pd.to_numeric (df[«stocks»], errors="coerce») df[«tbills»] = pd.to_numeric (df[«tbills»], errors="coerce»)

df = df.dropna (subset=[«year»]) df[«year»] = df[«year»].astype (int)

df = df[(df[«year»] >= 1928) & (df[«year»] <= 2100)] df = df.dropna (subset=[«stocks», «tbills»], how="all») df = df.sort_values («year»).reset_index (drop=True)

if df.empty: raise ValueError («Нет данных для построения графиков.»)

print («\n=== ДАННЫЕ ===») print (df.to_string (index=False))

avg_stocks = df[«stocks»].mean () * 100 avg_tbills = df[«tbills»].mean () * 100

plt.figure (figsize=(7, 7)) plt.pie ( [avg_stocks, avg_tbills], labels=[«Stocks», «T.Bills»], autopct="%1.1f%%», startangle=90 ) plt.title («Average Annual Returns (from 1928)») plt.tight_layout () plt.show ()

ТОЧЕЧНАЯ ДИАГРАММА

Original size 1280x628

import pandas as pd import matplotlib.pyplot as plt import numpy as np

FILE = «data.xlsx» SHEET = 0

raw = pd.read_excel (FILE, sheet_name=SHEET, header=None)

df = raw[[0, 1, 2]].copy () df.columns = [«year», «stocks», «tbills»]

df[«year»] = pd.to_numeric (df[«year»], errors="coerce») df[«stocks»] = pd.to_numeric (df[«stocks»], errors="coerce») df[«tbills»] = pd.to_numeric (df[«tbills»], errors="coerce»)

df = df.dropna (subset=[«year»]) df[«year»] = df[«year»].astype (int)

df = df[(df[«year»] >= 1928) & (df[«year»] <= 2100)] df = df.dropna (subset=[«stocks», «tbills»], how="all») df = df.sort_values («year»).reset_index (drop=True)

if df.empty: raise ValueError («Нет данных для построения графиков.»)

print («\n=== ДАННЫЕ ===») print (df.to_string (index=False))

df[«stocks_growth»] = (1 + df[«stocks»].fillna (0)).cumprod () df[«tbills_growth»] = (1 + df[«tbills»].fillna (0)).cumprod ()

plt.figure (figsize=(12, 6)) plt.plot (df[«year»], df[«stocks_growth»], marker="o», label="Stocks ($1 growth)») plt.plot (df[«year»], df[«tbills_growth»], marker="o», label="T.Bills ($1 growth)»)

plt.xlabel («Year») plt.ylabel («Value of $1») plt.title («Cumulative Growth of $1 (from 1928)») plt.grid (True, linestyle="--», alpha=0.5) plt.legend () plt.tight_layout () plt.show ()

ВЫВОД

Исторический анализ свидетельствует о том, что акции (Stocks) при долгосрочном инвестировании приносят более высокую доходность, но отличаются высокой волатильностью. В то время как краткосрочные государственные облигации (T-Bills) обеспечивают более стабильный, но значительно меньший доход. Графики накопленной доходности наглядно демонстрируют преимущества инвестирования в акции на длительный срок, несмотря на краткосрочные колебания рынка.

We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more