Translation not up to date
Zaman dizisi işlevleri, zaman içinde noktalarla ölçülen veri değerleri sıraları üzerinde çalışan toplama işlevleridir.
Aşağıdaki kısımlarda, farklı zaman serisi paketlerinde kullanılabilen bazı zaman serisi işlevleri açıklanmaktadır.
Dönüştürme işlemleri
Dönüşümler, başka bir zaman dizisiyle sonuçlanan bir zaman serisi üzerinde uygulanan işlevlerdir. Zaman dizisi kitaplığı, sağlanan dönüşümler ( from tspy.functions import transformers
kullanılarak) yanı sıra kullanıcı tanımlı dönüşümler de içinde olmak üzere çeşitli dönüştürme tiplerini destekler.
Aşağıdaki örnek, sağlanan bazı dönüştürmeleri gösterir:
#Interpolation
>>> ts = tspy.time_series([1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
>>> periodicity = 2
>>> interp = interpolators.nearest(0.0)
>>> interp_ts = ts.resample(periodicity, interp)
>>> interp_ts.print()
TimeStamp: 0 Value: 1.0
TimeStamp: 2 Value: 3.0
TimeStamp: 4 Value: 5.0
#Fillna
>>> shift_ts = ts.shift(2)
print("shifted ts to add nulls")
print(shift_ts)
print("\nfilled ts to make nulls 0s")
null_filled_ts = shift_ts.fillna(interpolators.fill(0.0))
print(null_filled_ts)
shifted ts to add nulls
TimeStamp: 0 Value: null
TimeStamp: 1 Value: null
TimeStamp: 2 Value: 1.0
TimeStamp: 3 Value: 2.0
TimeStamp: 4 Value: 3.0
TimeStamp: 5 Value: 4.0
filled ts to make nulls 0s
TimeStamp: 0 Value: 0.0
TimeStamp: 1 Value: 0.0
TimeStamp: 2 Value: 1.0
TimeStamp: 3 Value: 2.0
TimeStamp: 4 Value: 3.0
TimeStamp: 5 Value: 4.0
# Additive White Gaussian Noise (AWGN)
>>> noise_ts = ts.transform(transformers.awgn(mean=0.0,sd=.03))
>>> print(noise_ts)
TimeStamp: 0 Value: 0.9962378841388397
TimeStamp: 1 Value: 1.9681980879378596
TimeStamp: 2 Value: 3.0289374962174405
TimeStamp: 3 Value: 3.990728648807705
TimeStamp: 4 Value: 4.935338359740761
TimeStamp: 5 Value: 6.03395072999318
Bölümleme
Kesimlere ayırma ya da pencere, bir zaman serisinin birden çok kesime bölünmesi işlecisidir. Zaman dizisi kitaplığı çeşitli bölümleme biçimlerini destekler ve kullanıcı tanımlı bölümlerin oluşturulmasına da olanak sağlar.
Pencere tabanlı kesimlere ayırma
Bir zaman dizisine ilişkin bu bölümleme tipi, kullanıcı tarafından belirlenen bölüm büyüklüklerine dayalıdır. Bölümler, kayıt tabanlı ya da zamana dayalı olabilir. Kayan pencere tabanlı kesimler kadar tumbling yaratılmasına izin veren seçenekler vardır.
>>> import tspy >>> ts_orig = tspy.builder() .add(tspy.observation(1,1.0)) .add(tspy.observation(2,2.0)) .add(tspy.observation(6,6.0)) .result().to_time_series() >>> ts_orig timestamp: 1 Value: 1.0 timestamp: 2 Value: 2.0 timestamp: 6 Value: 6.0 >>> ts = ts_orig.segment_by_time(3,1) >>> ts timestamp: 1 Value: original bounds: (1,3) actual bounds: (1,2) observations: [(1,1.0),(2,2.0)] timestamp: 2 Value: original bounds: (2,4) actual bounds: (2,2) observations: [(2,2.0)] timestamp: 3 Value: this segment is empty timestamp: 4 Value: original bounds: (4,6) actual bounds: (6,6) observations: [(6,6.0)]
Tutturucu tabanlı bölümleme
Tutturucu tabanlı kesimlere ayırma, belirli bir lamda tutturularak bir kesim oluşturan çok önemli bir bölümleme türüdür ve bu da basit bir değer olabilir. Bir örnek, bir anomaliyi gözlemledikten sonra 500 hatadan önce gelen ya da değerleri inceleyen olaylara bakmaktadır. Tutturucu tabanlı kesimlere ayırma çeşitlemeleri, birden çok işaretçi içeren bir aralık sağlar.
>>> import tspy >>> ts_orig = tspy.time_series([1.0, 2.0, 3.0, 4.0, 5.0]) >>> ts_orig timestamp: 0 Value: 1.0 timestamp: 1 Value: 2.0 timestamp: 2 Value: 3.0 timestamp: 3 Value: 4.0 timestamp: 4 Value: 5.0 >>> ts = ts_orig.segment_by_anchor(lambda x: x % 2 == 0, 1, 2) >>> ts timestamp: 1 Value: original bounds: (0,3) actual bounds: (0,3) observations: [(0,1.0),(1,2.0),(2,3.0),(3,4.0)] timestamp: 3 Value: original bounds: (2,5) actual bounds: (2,4) observations: [(2,3.0),(3,4.0),(4,5.0)]
Segmenter
segmenters
paketini (from tspy.functions import segmenters
kullanarak) içe aktararak, kutudan dışarı çıkan bazı özel segmenter 'lar vardır. Örnek bir segmenter, bir zaman serisini bölümlere ayırtabilmek için regresyon kullanan bir örnektir:>>> ts = tspy.time_series([1.0,2.0,3.0,4.0,5.0,2.0,1.0,-1.0,50.0,53.0,56.0]) >>> max_error = .5 >>> skip = 1 >>> reg_sts = ts.to_segments(segmenters.regression(max_error,skip,use_relative=True)) >>> reg_sts timestamp: 0 Value: range: (0, 4) outliers: {} timestamp: 5 Value: range: (5, 7) outliers: {} timestamp: 8 Value: range: (8, 10) outliers: {}
Azaltıcılar
Indirgeme, tek bir değer üretmek üzere bir zaman serisi kümesindeki değerlere uygulanmış bir işlevdir. Zaman serisi reducer
işlevleri, Hadoop/Spark tarafından kullanılan indirgeme kavramına benzer. Bu tek değer bir toplama olabilir, ancak genel olarak tek bir nesne olabilir. Bir indirgeme işlevine ilişkin bir örnek, bir zaman dizisindeki değerleri ortalamalıdır.
Aşağıdakiler de içinde olmak üzere çeşitli reducer
işlevleri desteklenir:
Mesafe azaltıcıları
Mesafe azaltıcıları, iki zaman serisi arasındaki mesafeyi hesaplayan bir indirgeme sınıfıdır. Kitaplık, sıraların yanı sıra, sayısal uzaklık işlevlerini de destekler. Bunlar arasında, Itakura Parallelogram, Sakoe-Chiba Band, DTW non-constrated ve DTW dışı kontrat gibi mesafe ölçümlerinin yer alması dahildir. Macarca uzaklığı ve Dünya-Movers mesafesi gibi dağıtım mesafeleri de mevcuttur.
Kategorik zaman serisi uzaklık ölçümleri için, Damerau Levenshtein ve Jaro-Winkler mesafe ölçümlerini kullanabilirsiniz.
>>> from tspy.functions import * >>> ts = tspy.time_series([1.0, 2.0, 3.0, 4.0, 5.0, 6.0]) >>> ts2 = ts.transform(transformers.awgn(sd=.3)) >>> dtw_distance = ts.reduce(ts2,reducers.dtw(lambda obs1, obs2: abs(obs1.value - obs2.value))) >>> print(dtw_distance) 1.8557981638880405
Matematik azaltıcılar
Sayısal zaman serileri için çok sayıda kullanışlı matematik indirgenleri sağlanır. Bunlar, ortalama, toplam, standart sapma ve anlar gibi temel olanları içerir. Entropi, kurtosis, FFT ve bunun çeşitlemeleri, çeşitli korelaslar ve histogramı da kapsamakta. Uygun bir temel özetleme indirgeme, zaman dizisiyle ilgili temel bilgiler sağlayan
describe
işlevidir.>>> from tspy.functions import * >>> ts = tspy.time_series([1.0, 2.0, 3.0, 4.0, 5.0, 6.0]) >>> ts2 = ts.transform(transformers.awgn(sd=.3)) >>> corr = ts.reduce(ts2, reducers.correlation()) >>> print(corr) 0.9938941942380525 >>> adf = ts.reduce(reducers.adf()) >>> print(adf) pValue: -3.45 satisfies test: false >>> ts2 = ts.transform(transformers.awgn(sd=.3)) >>> granger = ts.reduce(ts2, reducers.granger(1)) >>> print(granger) #f_stat, p_value, R2 -1.7123613937876463,-3.874412217575385,1.0
Zaman serilerinin ilk sipariş anlayışısını elde etmek için çok yararlı olan bir diğer temel indirgeme ise tarif indirgemesidir. Aşağıda bu indirgeme gösterilmektedir:
>>> desc = ts.describe() >>> print(desc) min inter-arrival-time: 1 max inter-arrival-time: 1 mean inter-arrival-time: 1.0 top: null unique: 6 frequency: 1 first: TimeStamp: 0 Value: 1.0 last: TimeStamp: 5 Value: 6.0 count: 6 mean:3.5 std:1.707825127659933 min:1.0 max:6.0 25%:1.75 50%:3.5 75%:5.25
Geçici birleştirmeler
Kitaplık, zaman damgalarına göre zamansal birleştirmeler ya da birleştirme zamanı serilerine ilişkin işlevleri içerir. Birleştirme işlevleri, sol, sağ, dış, iç, sol dış, sağ dış birleşimler vb. gibi veritabanlarındaki işlevlere benzerdir. Aşağıdaki örnek kodlar, bu birleştirme işlevlerinin bazılarını göstermektedir:
# Create a collection of observations (materialized TimeSeries)
observations_left = tspy.observations(tspy.observation(1, 0.0), tspy.observation(3, 1.0), tspy.observation(8, 3.0), tspy.observation(9, 2.5))
observations_right = tspy.observations(tspy.observation(2, 2.0), tspy.observation(3, 1.5), tspy.observation(7, 4.0), tspy.observation(9, 5.5), tspy.observation(10, 4.5))
# Build TimeSeries from Observations
ts_left = observations_left.to_time_series()
ts_right = observations_right.to_time_series()
# Perform full join
ts_full = ts_left.full_join(ts_right)
print(ts_full)
TimeStamp: 1 Value: [0.0, null]
TimeStamp: 2 Value: [null, 2.0]
TimeStamp: 3 Value: [1.0, 1.5]
TimeStamp: 7 Value: [null, 4.0]
TimeStamp: 8 Value: [3.0, null]
TimeStamp: 9 Value: [2.5, 5.5]
TimeStamp: 10 Value: [null, 4.5]
# Perform left align with interpolation
ts_left_aligned, ts_right_aligned = ts_left.left_align(ts_right, interpolators.nearest(0.0))
print("left ts result")
print(ts_left_aligned)
print("right ts result")
print(ts_right_aligned)
left ts result
TimeStamp: 1 Value: 0.0
TimeStamp: 3 Value: 1.0
TimeStamp: 8 Value: 3.0
TimeStamp: 9 Value: 2.5
right ts result
TimeStamp: 1 Value: 0.0
TimeStamp: 3 Value: 1.5
TimeStamp: 8 Value: 4.0
TimeStamp: 9 Value: 5.5
Tahmin yürütme
Zaman dizisi kitaplığı tarafından sağlanan önemli bir işlevsellik tahmin edilir. Kitaplık, ARIMA, üstel, Holt-Winters ve BATS de içinde olmak üzere karmaşık tahmin modellerinin yanı sıra basit işlevler için de işlevler içerir. Aşağıdaki örnekte Holt-Winters (Holt-Winters) yaratılacak işlev gösterilmektedir:
import random
model = tspy.forecasters.hws(samples_per_season=samples_per_season, initial_training_seasons=initial_training_seasons)
for i in range(100):
timestamp = i
value = random.randint(1,10) * 1.0
model.update_model(timestamp, value)
print(model)
Forecasting Model
Algorithm: HWSAdditive=5 (aLevel=0.001, bSlope=0.001, gSeas=0.001) level=6.087789839896166, slope=0.018901997884893912, seasonal(amp,per,avg)=(1.411203455586738,5, 0,-0.0037471500727535465)
#Is model init-ed
if model.is_initialized():
print(model.forecast_at(120))
6.334135728495107
ts = tspy.time_series([float(i) for i in range(10)])
print(ts)
TimeStamp: 0 Value: 0.0
TimeStamp: 1 Value: 1.0
TimeStamp: 2 Value: 2.0
TimeStamp: 3 Value: 3.0
TimeStamp: 4 Value: 4.0
TimeStamp: 5 Value: 5.0
TimeStamp: 6 Value: 6.0
TimeStamp: 7 Value: 7.0
TimeStamp: 8 Value: 8.0
TimeStamp: 9 Value: 9.0
num_predictions = 5
model = tspy.forecasters.auto(8)
confidence = .99
predictions = ts.forecast(num_predictions, model, confidence=confidence)
print(predictions.to_time_series())
TimeStamp: 10 Value: {value=10.0, lower_bound=10.0, upper_bound=10.0, error=0.0}
TimeStamp: 11 Value: {value=10.997862810553725, lower_bound=9.934621260488143, upper_bound=12.061104360619307, error=0.41277640121597475}
TimeStamp: 12 Value: {value=11.996821082897318, lower_bound=10.704895525154571, upper_bound=13.288746640640065, error=0.5015571318964149}
TimeStamp: 13 Value: {value=12.995779355240911, lower_bound=11.50957896664928, upper_bound=14.481979743832543, error=0.5769793776877866}
TimeStamp: 14 Value: {value=13.994737627584504, lower_bound=12.33653268707341, upper_bound=15.652942568095598, error=0.6437557559526337}
print(predictions.to_time_series().to_df())
timestamp value lower_bound upper_bound error
0 10 10.000000 10.000000 10.000000 0.000000
1 11 10.997863 9.934621 12.061104 0.412776
2 12 11.996821 10.704896 13.288747 0.501557
3 13 12.995779 11.509579 14.481980 0.576979
4 14 13.994738 12.336533 15.652943 0.643756
Zaman serisi SQL
Zaman dizisi kitaplığı Apache Sparkile sıkıca tümleştirilmiştir. By using new data types in Spark Catalyst, you are able to perform time series SQL operations that scale out horizontally using Apache Spark. Bu, IBM Analytics Engine ' ta ya da Watson Studio Spark ortamları gibi IBM Analytics Engine işlevlerini içeren çözümlerde zaman serisi uzantılarını kolayca kullanmanıza olanak sağlar.
SQL uzantıları, segmentasyon, dönüşümler, indiriciler, tahmin ve G/Ç de dahil olmak üzere, zaman dizisi işlevlerinin çeşitli özelliklerini kapsar. Bkz. Zaman serisi verilerinin çözümlenmesi.
Daha fazla bilgi
tspy
Python SDK ' yı kullanmak için, tspy
Python SDK belgelerine bakın.
Üst konu: Zaman serisi analizi