# gereksiz uyarıları gizlemek için
import warnings
"ignore")
warnings.filterwarnings(
# yfinance çerçevesinin çalışma ortamına alınması
import yfinance as yf
Zaman Serileri Analizi 1-Ek: Finansal ve İktisadi Zaman Serilerine Erişim
Ek 1: Finansal ve İktisadi Zaman Serilerine Erişim
Zaman serileri ile çalışırken, eğer elinizde uygun bir veri kümesi yok ise, gerçek hayat verilerine ulaşmak için oldukça fazla yol ve yöntem var. Bunun en basit yolu, kullandığınız programlama dili üzerinden, hiç dışarıya çıkmadan çalışma ortamınıza veri aktarmaktır.
Burada Python ile finansal, iktisadi ve diğer açık verilere erişim için birkaç çerçeve paylaşacağız.
E.1.1. Finansal Verilere Erişim-1: yfinance
yfinance, Yahoo Finance’ın tarihsel verilerine erişmek için oluşturulmuş bir çerçevedir. yfinance
ile yalnızca hisse senedi fiyat verilerini indirmekle kalmaz, aynı zamanda bir şirketin borsada listelenmesinden bu yana tüm finansal verilerini indirmenize de izin verir. Kullanımı kolaydır ve inanılmaz derecede hızlıdır. Bu çerçeve finansal veri analizi için oldukça popülerdir.
Burada örnek bir hisse senedi olarak Google fiyatlarını ve Google finansal verilerinin nasıl çalışma ortamına aktarılacağına odaklanacağız.
İlk olarak yfinance
çerçevesinin yüklü olması gerekiyor. Bunu şu işlemle kolaylıkla yapabilirsiniz:
pip install yfinance
Şimdi yüklü olan çerçeveyi, çalışma ortmanına alalım:
İlgili hisse senedi verisinin bilgilerine ulaşmak için Ticker
metodunu, hisse senedinin sembolünü argüman olarak alacak şekilde kullanıyoruz. Google için sembol GOOGL
olarak belirlenmiş:
= yf.Ticker("GOOGL") google
Şimdi, info
metoduyla hisse senedini çıkaran şirket hakkında paylaşılan bilgilere bakalım:
google.info
{'zip': '94043',
'sector': 'Communication Services',
'fullTimeEmployees': 150028,
'longBusinessSummary': 'Alphabet Inc. provides online advertising services in the United States, Europe, the Middle East, Africa, the Asia-Pacific, Canada, and Latin America. The company offers performance and brand advertising services. It operates through Google Services, Google Cloud, and Other Bets segments. The Google Services segment provides products and services, such as ads, Android, Chrome, hardware, Google Maps, Google Play, Search, and YouTube, as well as technical infrastructure; and digital content. The Google Cloud segment offers infrastructure and data analytics platforms, collaboration tools, and other services for enterprise customers. The Other Bets segment sells internet and TV services, as well as licensing and research and development services. The company was founded in 1998 and is headquartered in Mountain View, California.',
'city': 'Mountain View',
'phone': '650-253-0000',
'state': 'CA',
'country': 'United States',
'companyOfficers': [],
'website': 'https://www.abc.xyz',
'maxAge': 1,
'address1': '1600 Amphitheatre Parkway',
'industry': 'Internet Content & Information',
'ebitdaMargins': 0.35616,
'profitMargins': 0.29521,
'grossMargins': 0.56511,
'operatingCashflow': 89395003392,
'revenueGrowth': 0.41,
'operatingMargins': 0.303,
'ebitda': 85196996608,
'targetLowPrice': 1850,
'recommendationKey': 'buy',
'grossProfits': 97795000000,
'freeCashflow': 52658749440,
'targetMedianPrice': 3350,
'currentPrice': 2840.03,
'earningsGrowth': 0.707,
'currentRatio': 2.98,
'returnOnAssets': 0.14011,
'numberOfAnalystOpinions': 44,
'targetMeanPrice': 3286.11,
'debtToEquity': 11.493,
'returnOnEquity': 0.30872,
'targetHighPrice': 3925,
'totalCash': 142002995200,
'totalDebt': 28109000704,
'totalRevenue': 239210004480,
'totalCashPerShare': 213.936,
'financialCurrency': 'USD',
'revenuePerShare': 356.562,
'quickRatio': 2.862,
'recommendationMean': 1.7,
'exchange': 'NMS',
'shortName': 'Alphabet Inc.',
'longName': 'Alphabet Inc.',
'exchangeTimezoneName': 'America/New_York',
'exchangeTimezoneShortName': 'EST',
'isEsgPopulated': False,
'gmtOffSetMilliseconds': '-18000000',
'quoteType': 'EQUITY',
'symbol': 'GOOGL',
'messageBoardId': 'finmb_29096',
'market': 'us_market',
'annualHoldingsTurnover': None,
'enterpriseToRevenue': 7.404,
'beta3Year': None,
'enterpriseToEbitda': 20.79,
'52WeekChange': 0.56300664,
'morningStarRiskRating': None,
'forwardEps': 112.07,
'revenueQuarterlyGrowth': None,
'sharesOutstanding': 300809984,
'fundInceptionDate': None,
'annualReportExpenseRatio': None,
'totalAssets': None,
'bookValue': 367.946,
'sharesShort': 2555428,
'sharesPercentSharesOut': 0.0039,
'fundFamily': None,
'lastFiscalYearEnd': 1609372800,
'heldPercentInstitutions': 0.79713,
'netIncomeToCommon': 70617997312,
'trailingEps': 103.805,
'lastDividendValue': None,
'SandP52WeekChange': 0.22927392,
'priceToBook': 7.718605,
'heldPercentInsiders': 0.00151,
'nextFiscalYearEnd': 1672444800,
'yield': None,
'mostRecentQuarter': 1632960000,
'shortRatio': 1.52,
'sharesShortPreviousMonthDate': 1634256000,
'floatShares': 578297742,
'beta': 1.043636,
'enterpriseValue': 1771215650816,
'priceHint': 2,
'threeYearAverageReturn': None,
'lastSplitDate': 1396483200,
'lastSplitFactor': '1998:1000',
'legalType': None,
'lastDividendDate': None,
'morningStarOverallRating': None,
'earningsQuarterlyGrowth': 0.684,
'priceToSalesTrailing12Months': 7.8943477,
'dateShortInterest': 1636934400,
'pegRatio': 1.25,
'ytdReturn': None,
'forwardPE': 25.341572,
'lastCapGain': None,
'shortPercentOfFloat': 0.0085,
'sharesShortPriorMonth': 2790225,
'impliedSharesOutstanding': 663763968,
'category': None,
'fiveYearAverageReturn': None,
'previousClose': 2859.32,
'regularMarketOpen': 2873.62,
'twoHundredDayAverage': 2538.3796,
'trailingAnnualDividendYield': None,
'payoutRatio': 0,
'volume24Hr': None,
'regularMarketDayHigh': 2888,
'navPrice': None,
'averageDailyVolume10Day': 1595490,
'regularMarketPreviousClose': 2859.32,
'fiftyDayAverage': 2854.9697,
'trailingAnnualDividendRate': None,
'open': 2873.62,
'toCurrency': None,
'averageVolume10days': 1595490,
'expireDate': None,
'algorithm': None,
'dividendRate': None,
'exDividendDate': None,
'circulatingSupply': None,
'startDate': None,
'regularMarketDayLow': 2806.02,
'currency': 'USD',
'trailingPE': 27.35928,
'regularMarketVolume': 2057050,
'lastMarket': None,
'maxSupply': None,
'openInterest': None,
'marketCap': 1888406994944,
'volumeAllCurrencies': None,
'strikePrice': None,
'averageVolume': 1547741,
'dayLow': 2806.02,
'ask': 2843.99,
'askSize': 800,
'volume': 2057050,
'fiftyTwoWeekHigh': 3019.33,
'fromCurrency': None,
'fiveYearAvgDividendYield': None,
'fiftyTwoWeekLow': 1694,
'bid': 2837.05,
'tradeable': False,
'dividendYield': None,
'bidSize': 1100,
'dayHigh': 2888,
'regularMarketPrice': 2840.03,
'preMarketPrice': None,
'logo_url': 'https://logo.clearbit.com/abc.xyz'}
Bu metodla şirketin sektörü, çalışan sayısı, iş özeti vb. dahil olmak üzere şirketle ilgili tüm bilgileri görülebilir.
Hisse senedi tarihsel fiyat verisi için history
metodunu kullanacağız. Başlangıç (start) ve bitiş (end) gibi argümanlar ile alınacak zaman dönemi belirlenebilir ya da zaman dönemi max
olarak ayarlanarak, hisse senedinin başlangıçtan günümüze tüm fiyat bilgilerine ulaşılabilir.
# tüm veri için
# google_fiyatlar = google.history(period="max")
= google.history(start="2005-01-01", end="2021-06-01") google_fiyatlar
google_fiyatlar.head()
Open | High | Low | Close | Volume | Dividends | Stock Splits | |
---|---|---|---|---|---|---|---|
Date | |||||||
2004-12-31 | 99.714714 | 100.040039 | 96.376373 | 96.491493 | 15321663 | 0 | 0.0 |
2005-01-03 | 98.798798 | 101.921921 | 97.827827 | 101.456459 | 31656712 | 0 | 0.0 |
2005-01-04 | 100.800804 | 101.566566 | 96.836838 | 97.347343 | 27484288 | 0 | 0.0 |
2005-01-05 | 96.821823 | 98.548546 | 96.211212 | 96.851852 | 16456727 | 0 | 0.0 |
2005-01-06 | 97.637634 | 98.048050 | 93.953957 | 94.369370 | 20753426 | 0 | 0.0 |
Tarihsel veri içerisinde günlük açılış(open), en yüksek(high), en düşük(low), kapanış(close), kar payı(dividend) ve hisse bölünmesi(stock split) değişkenleri tarihsel olarak çalışma ortamına aktarılmış oldu.
Finansal veri analistleri, şirketin hissedarlarına vermiş olduğu temettüler ve bölünmeler ile ilgili detayları talep edebilirler. Bunu actions
metoduyla elde edebiliriz:
google.actions
Dividends | Stock Splits | |
---|---|---|
Date | ||
2014-04-03 | 0.0 | 1.998 |
Hisse senedinin sürdürülebilirliği hakkında bilgi edinmek için sustainability
metodu kullanılır:
google.sustainability
Value | |
---|---|
2021-9 | |
palmOil | False |
controversialWeapons | False |
gambling | False |
socialScore | 10.79 |
nuclear | False |
furLeather | False |
alcoholic | False |
gmo | False |
catholic | False |
socialPercentile | None |
peerCount | 99 |
governanceScore | 11.62 |
environmentPercentile | None |
animalTesting | False |
tobacco | False |
totalEsg | 22.89 |
highestControversy | 4 |
esgPerformance | AVG_PERF |
coal | False |
pesticides | False |
adult | False |
percentile | 32.95 |
peerGroup | Software & Services |
smallArms | False |
environmentScore | 0.48 |
governancePercentile | None |
militaryContract | False |
Bir şirketin hisse senedini almak veya satmak için öneriler, farklı Finans Firmaları tarafından sağlanır. Hisse senedi fiyatını analiz edebilmek için bu firmaların ne önerdiğini bilmeliyiz. Önerileri analiz etmek için recommendations
metodunu kullanabiliriz.
google.recommendations
Firm | To Grade | From Grade | Action | |
---|---|---|---|---|
Date | ||||
2014-12-17 00:00:00 | Pivotal Research | Buy | up | |
2015-01-08 06:03:07 | Stifel | Hold | Buy | down |
2015-01-14 09:00:00 | Credit Suisse | Outperform | main | |
2015-01-30 09:00:00 | Citigroup | Buy | main | |
2015-03-02 14:04:06 | Bank of America | Buy | Neutral | up |
... | ... | ... | ... | ... |
2021-10-27 14:48:23 | Wells Fargo | Overweight | main | |
2021-10-27 14:50:22 | Monness, Crespi, Hardt | Buy | main | |
2021-10-27 15:32:10 | Truist Securities | Buy | main | |
2021-10-28 14:49:56 | Citigroup | Neutral | main | |
2021-11-02 13:05:22 | Morgan Stanley | Overweight | main |
262 rows × 4 columns
calendar
metodu, şirketin kazanç ve gelirlerini bilmek için kullanılabilir.
google.calendar
0 | 1 | |
---|---|---|
Earnings Date | 2022-01-31 21:00:00 | 2022-02-04 21:00:00 |
Earnings Average | 27.16 | 27.16 |
Earnings Low | 22.98 | 22.98 |
Earnings High | 31 | 31 |
Revenue Average | 72024500000 | 72024500000 |
Revenue Low | 68682000000 | 68682000000 |
Revenue High | 75049000000 | 75049000000 |
Borsada işlem gören her şirket için benzersiz bir ISIN (Uluslararası Menkul Kıymet Kimlik Numarası) bulunur. Bu numarayı isin
metoduyla alabiliriz.
google.isin
'US02079K3059'
Opsiyon alım-satımı sırasında opsiyonun bitiş tarihini bilmeliyiz. options
metodunu kullanarak o hisse senedinin Opsiyon Bitiş Tarihini alabiliriz.
google.options
('2021-12-10',
'2021-12-17',
'2021-12-23',
'2021-12-31',
'2022-01-07',
'2022-01-21',
'2022-02-18',
'2022-03-18',
'2022-04-14',
'2022-06-17',
'2022-09-16',
'2023-01-20',
'2023-03-17',
'2023-06-16',
'2024-01-19')
E.1.2. Makro İktisadi Verilere Erişim: evds
Türkiye’de makro ekonomik veriler TÜİK, Merkez Bankası gibi kurumlar tarafından tarihsel olarak yayınlanmakta. Merkez Bankası, verileri Elektronik Veri Dağıtım Sistemi (evds) isminde bir ortamdan dağıtıyor. Gidip siteden veriler çekilebileceği gibi, artık Python ve R için yazılmış çerçevelerle, ücretsiz API anahtarı alarak da buradaki verilere siteye gitmeden erişebilirsiniz.
evds
çerçevesini de yüklemek oldukça kolay:
pip install evds
# evdsAPI modülünün içeri aktarılması
from evds import evdsAPI
# Merkez Bankasından alınan ücretsiz API anahtarının tanımlanması
= evdsAPI('<API anahtarı>') evds
Eğer, aranacak özel bir makro iktisadi değişken yok ise, üst kategorilerden alt kategorilere kadar giderek ilgili değişkenler çalışma ortamına aktarılabilir.
Üst kategorilere main_categories
metodula erişilebilir:
evds.main_categories
CATEGORY_ID | TOPIC_TITLE_TR | |
---|---|---|
0 | 1 | PİYASA VERİLERİ |
1 | 2 | KURLAR |
2 | 3 | FAİZ İSTATİSTİKLERİ |
3 | 4 | PARA VE BANKA İSTATİSTİKLERİ |
4 | 5 | MENKUL KIYMET İSTATİSTİKLERİ |
5 | 12 | FİNANSAL İSTATİSTİKLER |
6 | 13 | TCMB BİLANÇO VERİLERİ |
7 | 14 | FİYAT ENDEKSLERİ |
8 | 15 | ANKETLER |
10 | 18 | ÖDEMELER DENGESİ, ULUSLARARASI YATIRIM POZİSYONU |
11 | 19 | DIŞ TİCARET İSTATİSTİKLERİ |
12 | 20 | KAMU MALİYESİ |
13 | 21 | ÜRETİM |
14 | 22 | ÖDEME SİSTEMLERİ VE EMİSYON |
15 | 23 | İSTİHDAM |
16 | 6 | DIŞ BORÇLAR |
17 | 7 | ZORUNLU KARŞILIĞA TABİ MEVDUAT VE KATILIM FONLARI |
18 | 24 | BIS KARŞILAŞTIRMALI ÜLKE İSTATİSTİKLERİ |
19 | 25 | ALTIN VERİLERİ |
20 | 26 | KONUT VE İNŞAAT İSTATİSTİKLERİ |
21 | 27 | FİNANSAL HESAPLAR |
22 | 28 | TURİZM İSTATİSTİKLERİ |
23 | 95 | EVDS KULLANIM İSTATİSTİKLERİ |
Bir alt kategoriye, CATEGORY_ID
argğmanıyla get_sub_categories
metoduyla erişilebilir:
2) evds.get_sub_categories(
CATEGORY_ID | DATAGROUP_CODE | DATAGROUP_NAME | |
---|---|---|---|
0 | 2 | bie_dkdovytl | Kurlar-Döviz Kurları |
1 | 2 | bie_dkefkytl | Kurlar-Efektif Kurlar |
2 | 2 | bie_dkkurbil | Kurlar-TCMB Tarafından Alım Satıma Konu Olmaya... |
3 | 2 | bie_rktufey | Kurlar-Reel Efektif Döviz Kuru-TÜFE Bazlı (200... |
4 | 2 | bie_rkufey | Kurlar-Reel Efektif Döviz Kuru-Yİ-ÜFE Bazlı (2... |
5 | 2 | bie_redkurigm | Kurlar-Reel Efektif Döviz Kuru-Birim İş Gücü M... |
Alt kategorilerdeki veri gruplarına DATAGROUP_CODE
argümanıyla get_series
metordu ile erişilebilir:
'bie_dkdovytl') evds.get_series(
SERIE_CODE | SERIE_NAME | START_DATE | |
---|---|---|---|
0 | TP.DK.USD.A.YTL | (USD) ABD Doları (Döviz Alış) | 02-01-1950 |
1 | TP.DK.USD.S.YTL | (USD) ABD Doları (Döviz Satış) | 02-01-1950 |
2 | TP.DK.EUR.A.YTL | (EUR) Euro (Döviz Alış) | 04-01-1999 |
3 | TP.DK.EUR.S.YTL | (EUR) Euro (Döviz Satış) | 04-01-1999 |
4 | TP.DK.ATS.A.YTL | (ATS) Avusturya Şilini (Döviz Alış) | 03-07-1961 |
... | ... | ... | ... |
84 | TP.DK.SEK.C.YTL | (SEK) İsveç Kronu (Çapraz) | 02-01-2002 |
85 | TP.DK.XDR.C.YTL | (XDR) Özel Çekme Hakkı (SDR) (Çapraz) | 18-04-1988 |
86 | TP.DK.KRW.A.YTL | (KRW) Güney Kore Wonu (Döviz Alış) | 23-08-2021 |
87 | TP.DK.KRW.C.YTL | (KRW) Güney Kore Wonu (Çapraz) | 23-08-2021 |
88 | TP.DK.KRW.S.YTL | (KRW) Güney Kore Wonu (Döviz Satış) | 23-08-2021 |
89 rows × 3 columns
İlgilenilen değişkene SERIE_CODE
argümanıyla get_data
metoduyla erişilebilir. Burada da startdate
ve enddate
argümanları ile ilgilenilen periyot belirlenebilir.
= evds.get_data(['TP.DK.USD.A.YTL'], startdate='01-01-2000', enddate='01-12-2021') dolar_kuru
dolar_kuru.head()
Tarih | TP_DK_USD_A_YTL | |
---|---|---|
0 | 01-01-2000 | NaN |
1 | 02-01-2000 | NaN |
2 | 03-01-2000 | 0.540098 |
3 | 04-01-2000 | 0.540793 |
4 | 05-01-2000 | 0.535815 |
E.1.3. Makro İktisadi Verilere Erişim: pandas_datareader
Makro iktisadi ve finansal verilere çalışma ortamından erişmenin bir diğer yolu, pandas_datareader çerçevesidir. pandas_datareader
, Econdb, Quandl, FRED, Dünya Bankası, OECD ve Eurostat gibi birçok kaynaktan veri aktarmak için oldukça güzel bir çerçeve.
pandas_datareader
çerçevesini de yüklemek oldukça kolay:
pip install pandas_datareader
Dünya Bankası’ndan Türkiye için sabit dolar bazında kişi başına Gayri Safi Yurtiçi Hasıla (Gross Domestic Product per capita in constant dollars), verisini çalışma ortmanına almak için search
metodunu kullanabiliriz:
# wb modülünün içeri aktarılması
from pandas_datareader import wb
# eşleşen veri isimleri
= wb.search('gdp.*capita.*const')
eşleşmeler eşleşmeler
id | name | unit | source | sourceNote | sourceOrganization | topics | |
---|---|---|---|---|---|---|---|
716 | 6.0.GDPpc_constant | GDP per capita, PPP (constant 2011 internation... | LAC Equity Lab | GDP per capita based on purchasing power parit... | b'World Development Indicators (World Bank)' | Economy & Growth | |
10384 | NY.GDP.PCAP.KD | GDP per capita (constant 2015 US$) | World Development Indicators | GDP per capita is gross domestic product divid... | b'World Bank national accounts data, and OECD ... | Economy & Growth | |
10386 | NY.GDP.PCAP.KN | GDP per capita (constant LCU) | World Development Indicators | GDP per capita is gross domestic product divid... | b'World Bank national accounts data, and OECD ... | Economy & Growth | |
10388 | NY.GDP.PCAP.PP.KD | GDP per capita, PPP (constant 2017 internation... | World Development Indicators | GDP per capita based on purchasing power parit... | b'International Comparison Program, World Bank... | Economy & Growth | |
10389 | NY.GDP.PCAP.PP.KD.87 | GDP per capita, PPP (constant 1987 internation... | WDI Database Archives | b'' |
İlgileneceğimiz veri kimliği NY.GDP.PCAP.KD
olarak belirlenmiş. download
metoduyla country
, start
ve end
argümanlarıyla ilgili veriler çalışma ortamına aktarılabilir:
= wb.download(indicator='NY.GDP.PCAP.KD', country=['TR'], start=2000, end=2020) gsyh
gsyh.head()
NY.GDP.PCAP.KD | ||
---|---|---|
country | year | |
Turkey | 2020 | 12035.033448 |
2019 | 11956.197821 | |
2018 | 12004.376912 | |
2017 | 11835.261106 | |
2016 | 11187.053638 |
E.1.4. İBB Trafik İndeksi Verileri
Finans ve makro iktisat verileri dışında zaman bazlı hava durumu, trafik, cihaz verileri gibi veri kümeleri de zaman serisi olarak çalışılabilir.
Burada bir örnek olarak İstanbul Trafik İndeksi verisini çalışma ortamına aktarmak için yazmış olduğumuz fonksiyon ile trafik indeksi verilerini alacağız.
import requests
import pandas as pd
def trafik_indeksini_al(periyot=1, frekans='D'):
"""
Trafik indeksi veri çerçevesini döndürür.
Args:
peryot (int): periyot sayısı.
frekans (str): zaman frekansı. Y:year, M:month, D:day, H:hour, 5M:5 minutes. default:D
Returns:
veri (pandas.DataFrame): trafik indeksi veri çerçevesi
"""
# url
= "https://api.ibb.gov.tr/tkmservices/api/TrafficData/v1/TrafficIndexHistory/" + str(periyot) + "/" + frekans
url
# api adresinden verinin alınması
= requests.get(url)
istenen_veri
# verinin json biçimine dönüştürülmesi
= istenen_veri.json()
istenen_veri_json
# istenen verinin pandas.DataFrame biçimine dönüştürülmesi
= pd.DataFrame.from_dict(istenen_veri_json)
veri
return veri
720 günlük, 1 saatlik trafik indeks verisinin çalışma ortmanına alınması:
= trafik_indeksini_al(periyot=720, frekans='H') trafik_indeksi_verisi
trafik_indeksi_verisi.head()
TrafficIndex | TrafficIndexDate | |
---|---|---|
0 | 43 | 2021-12-06T10:00:00 |
1 | 53 | 2021-12-06T09:00:00 |
2 | 62 | 2021-12-06T08:00:00 |
3 | 49 | 2021-12-06T07:00:00 |
4 | 18 | 2021-12-06T06:00:00 |