Big Tech Stock Analysis

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
Įvadas:
Šiame darbe atliekama išsami akcijų kainų analizė nuo 2010-01 iki 2023-01, kuri susideda iš trijų pagrindinių dalių:
1. Koreliacijos analizė visų įmonių akcijų kainų:
Šioje dalyje analizuojamas reikšmingas ryšys tarp skirtingų įmonių akcijų kainų. Tikslas – nustatyti, ar egzistuoja stipri koreliacija tarp įmonių, kuri galėtų būti naudinga investuotojams.
2. Kainų sezoniškumo analizė:
Šioje dalyje nagrinėjami akcijų kainų svyravimai priklausomai nuo metų laiko (mėnesių) ir savaitės dienų. Tikslas – nustatyti, ar egzistuoja sezoniniai ar savaitiniai modeliai, kurie galėtų būti panaudoti prognozuojant kainų pokyčius.
3. „Apple“ (AAPL) ir „Microsoft“ (MSFT) palyginimas:
Šioje dalyje lyginami dviejų technologijų gigantų – „Apple“ ir „Microsoft“ – akcijų elgesys. Tikslas – įvertinti jų kainų svyravimų panašumus ir skirtumus, taip pat nustatyti, ar jų akcijos elgiasi panašiai ar skirtingai.
Šios analizės tikslas – nustatyti reikšmingus modelius, susijusius su akcijų kainų elgesiu, ir pateikti rekomendacijas investuotojams, kurie nori numatyti kainų pokyčius ir priimti pagrįstus sprendimus.
Duomenų šaltinis:
Duomenys buvo surinkti iš Kaggle duomenų rinkinio, esančio adresu: Big Tech Giants Stock Price Data. Jie apima įvairių technologijų įmonių akcijų kainas per tam tikrą laikotarpį.
data = pd.read_csv('big_tech_stock_prices.csv')
data
stock_symbol | date | open | high | low | close | adj_close | volume | |
---|---|---|---|---|---|---|---|---|
0 | AAPL | 2010-01-04 | 7.622500 | 7.660714 | 7.585000 | 7.643214 | 6.515213 | 493729600 |
1 | AAPL | 2010-01-05 | 7.664286 | 7.699643 | 7.616071 | 7.656429 | 6.526476 | 601904800 |
2 | AAPL | 2010-01-06 | 7.656429 | 7.686786 | 7.526786 | 7.534643 | 6.422664 | 552160000 |
3 | AAPL | 2010-01-07 | 7.562500 | 7.571429 | 7.466071 | 7.520714 | 6.410790 | 477131200 |
4 | AAPL | 2010-01-08 | 7.510714 | 7.571429 | 7.466429 | 7.570714 | 6.453412 | 447610800 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
45083 | TSLA | 2022-12-22 | 136.000000 | 136.630005 | 122.260002 | 125.349998 | 125.349998 | 210090300 |
45084 | TSLA | 2022-12-23 | 126.370003 | 128.619995 | 121.019997 | 123.150002 | 123.150002 | 166989700 |
45085 | TSLA | 2022-12-27 | 117.500000 | 119.669998 | 108.760002 | 109.099998 | 109.099998 | 208643400 |
45086 | TSLA | 2022-12-28 | 110.349998 | 116.269997 | 108.239998 | 112.709999 | 112.709999 | 221070500 |
45087 | TSLA | 2022-12-29 | 120.389999 | 123.570000 | 117.500000 | 121.820000 | 121.820000 | 221923300 |
45088 rows × 8 columns
print(data.describe())
open high low close adj_close \ count 45088.000000 45088.000000 45088.000000 45088.000000 45088.000000 mean 89.266584 90.369825 88.111930 89.271306 85.209631 std 101.626955 103.001073 100.124399 101.592916 100.995967 min 1.076000 1.108667 0.998667 1.053333 1.053333 25% 25.670000 25.930135 25.360001 25.660000 22.076433 50% 47.930000 48.459999 47.465000 47.970001 45.377333 75% 128.662502 129.848900 127.253945 128.640609 113.672460 max 696.280029 700.989990 686.090027 691.690002 691.690002 volume count 4.508800e+04 mean 5.297813e+07 std 9.324730e+07 min 5.892000e+05 25% 9.629425e+06 50% 2.646315e+07 75% 5.839768e+07 max 1.880998e+09
data['date'] = pd.to_datetime(data['date'])
plt.figure(figsize=(10, 6))
for company in data['stock_symbol'].unique():
company_data = data[data['stock_symbol'] == company]
plt.plot(company_data['date'], company_data['close'], label=company)
plt.xlabel('Date')
plt.ylabel('Closing Price')
plt.title('Big Tech Giants Stock Prices Over Time')
plt.legend()
plt.show()
Koreliacija
Tarp akcijų uždarymo kainos ir prekybos apimties yra sąsajų, kurios gali būti skirtingos priklausomai nuo įmonės. Manoma, kad didesnė prekybos apimtis gali būti susijusi su didesniu kainų svyravimu, tačiau šis ryšys gali skirtis tarp skirtingų įmonių.
correlation = data.groupby('stock_symbol')[['close', 'volume']].corr()
print(correlation)
close volume stock_symbol AAPL close 1.000000 -0.499448 volume -0.499448 1.000000 ADBE close 1.000000 -0.235545 volume -0.235545 1.000000 AMZN close 1.000000 -0.117717 volume -0.117717 1.000000 CRM close 1.000000 -0.130655 volume -0.130655 1.000000 CSCO close 1.000000 -0.446773 volume -0.446773 1.000000 GOOGL close 1.000000 -0.473636 volume -0.473636 1.000000 IBM close 1.000000 -0.187114 volume -0.187114 1.000000 INTC close 1.000000 -0.419022 volume -0.419022 1.000000 META close 1.000000 -0.393080 volume -0.393080 1.000000 MSFT close 1.000000 -0.317646 volume -0.317646 1.000000 NFLX close 1.000000 -0.469467 volume -0.469467 1.000000 NVDA close 1.000000 -0.069553 volume -0.069553 1.000000 ORCL close 1.000000 -0.466982 volume -0.466982 1.000000 TSLA close 1.000000 0.059654 volume 0.059654 1.000000
plt.figure(figsize=(10, 8))
sns.heatmap(correlation, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('Koreliacijos matrica')
plt.show()
Išvados
Analizė atskleidė ryšį tarp akcijų uždarymo kainų ir prekybos apimčių.
1. Neigiama koreliacija
Daugelio įmonių (pvz., AAPL, GOOGL, MSFT) akcijų kainos ir prekybos apimtis turi neigiamą koreliaciją. Didėjant apimčiai, kainos linkusios mažėti.
2. Silpna koreliacija
Kai kurių įmonių (pvz., NVDA, TSLA) koreliacija tarp kainų ir apimčių yra labai silpna, rodant beveik nepriklausomą elgesį.
3. Teigiama koreliacija (TSLA)
Tik TSLA atveju pastebima silpna teigiama koreliacija (0.059654), rodanti, kad didėjant apimčiai, kainos šiek tiek kyla.
Apple vs Microsoft – Akcijų kainų palyginimas
Apple ir Microsoft akcijų kainos gali elgtis skirtingai dėl skirtingų rinkos sąlygų.
Palyginome vidutinį kainos pokytį ir volatilumą tarp Apple ir Microsoft. Nustatėme, kad Microsoft akcijos turi didesnį svyravimą, o Apple akcijos yra stabilesnės.
apple_data = data[data['stock_symbol'] == 'AAPL']
microsoft_data = data[data['stock_symbol'] == 'MSFT']
apple_avg = apple_data['close'].mean()
microsoft_avg = microsoft_data['close'].mean()
apple_max = apple_data['high'].max()
microsoft_max = microsoft_data['high'].max()
apple_min = apple_data['low'].min()
microsoft_min = microsoft_data['low'].min()
companies = ['Apple', 'Microsoft']
avg_prices = [apple_avg, microsoft_avg]
max_prices = [apple_max, microsoft_max]
min_prices = [apple_min, microsoft_min]
##
# X pozicijos grafikui
x = np.arange(len(companies))
# Braižyti grafiką
plt.figure(figsize=(10, 6))
plt.bar(x - 0.2, avg_prices, width=0.2, label='Vidutinė kaina', color='blue')
plt.bar(x, max_prices, width=0.2, label='Maksimali kaina', color='green')
plt.bar(x + 0.2, min_prices, width=0.2, label='Minimali kaina', color='red')
# Etiketės ir pavadinimai
plt.xticks(x, companies)
plt.xlabel('Kompanija')
plt.ylabel('Kaina')
plt.title('Apple ir Microsoft akcijų kainų palyginimas')
plt.legend()
# Rodyti grafiką
plt.show()
Išvados:
- Vidutinė kaina: Skirtumai tarp „Apple“ ir „Microsoft“ vidutinių kainų gali rodyti skirtingą rinkos stabilumą ir investuotojų pasitikėjimą.
- Maksimali kaina: Aukštos maksimalios kainos gali būti susijusios su geromis finansinėmis naujienomis arba dideliu paklausos padidėjimu.
- Minimali kaina: Žemos minimalios kainos gali rodyti periodus, kai įmonė patyrė didelį spaudimą dėl neigiamų veiksnių.
- Skirtumai tarp įmonių: Skirtingi rodikliai tarp „Apple“ ir „Microsoft“ gali būti susiję su skirtingomis rinkos tendencijomis ir įmonių specifika.
2. Akcijų kainų sezoniniai pokyčiai
Akcijų kainos gali turėti sezoninių svyravimų, kurie priklauso nuo metų laiko. Manoma, kad vidutinės akcijų kainos skiriasi priklausomai nuo mėnesio bei savaitės dienos, o tai gali būti susiję su įmonių veiklos ciklais, rinkos tendencijomis arba investuotojų elgesiu.
data['month'] = data['date'].dt.month
monthly_avg = data.groupby('month')['close'].mean()
# Mėnesinių vidurkių grafikas
plt.figure(figsize=(10, 6))
plt.plot(monthly_avg.index, monthly_avg.values, marker='o', linestyle='-', color='b')
plt.title('Akcijų kainų sezoniniai pokyčiai pagal mėnesį')
plt.xlabel('Mėnuo')
plt.ylabel('Vidutinė uždarymo kaina')
plt.xticks(range(1, 13), ['Sausis', 'Vasaris', 'Kovas', 'Balandis', 'Gegužė', 'Birželis',
'Liepa', 'Rugpjūtis', 'Rugsėjis', 'Spalis', 'Lapkritis', 'Gruodis'])
plt.grid(True)
plt.show()
data['weekday'] = data['date'].dt.day_name()
weekday_avg = data.groupby('weekday')['close'].mean()
weekday_order = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
weekday_avg = weekday_avg.reindex(weekday_order)
# Vidutinių kainų grafikas pagal savaitės dieną
plt.figure(figsize=(10, 6))
plt.plot(weekday_avg.index, weekday_avg.values, marker='o', linestyle='-', color='b')
plt.title('Vidutinės akcijų kainos pagal savaitės dieną')
plt.xlabel('Savaitės diena')
plt.ylabel('Vidutinė uždarymo kaina')
plt.grid(True)
plt.show()
Išvados:
- Sezoniniai svyravimai: Tam tikrais mėnesiais ir savaitės dienomis vidutinės kainos gali būti žymiai aukštesnės arba žemesnės.
- Stabilios kainos: Maži svyravimai rodo mažesnį jautrumą sezoniniams arba savaitiniams veiksniams.
- Skirtumai tarp įmonių: Skirtingos įmonės turi skirtingus sezoninius ir savaitinius modelius.