kabukit 0.5.3__tar.gz → 0.5.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {kabukit-0.5.3 → kabukit-0.5.4}/PKG-INFO +1 -1
- {kabukit-0.5.3 → kabukit-0.5.4}/pyproject.toml +1 -1
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/core/prices.py +103 -2
- {kabukit-0.5.3 → kabukit-0.5.4}/LICENSE +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/README.md +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/__init__.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/analysis/__init__.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/analysis/indicators.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/analysis/preprocess.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/analysis/screener.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/analysis/visualization.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/cli/__init__.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/cli/app.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/cli/auth.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/cli/get.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/core/__init__.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/core/base.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/core/client.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/core/info.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/core/list.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/core/reports.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/core/statements.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/edinet/__init__.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/edinet/client.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/edinet/concurrent.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/edinet/doc.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/jquants/__init__.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/jquants/client.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/jquants/concurrent.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/jquants/info.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/jquants/prices.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/jquants/schema.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/jquants/statements.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/py.typed +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/utils/__init__.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/utils/concurrent.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/utils/config.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/utils/date.py +0 -0
- {kabukit-0.5.3 → kabukit-0.5.4}/src/kabukit/utils/params.py +0 -0
@@ -10,7 +10,7 @@ if TYPE_CHECKING:
|
|
10
10
|
from datetime import timedelta
|
11
11
|
from typing import Self
|
12
12
|
|
13
|
-
from polars import Expr
|
13
|
+
from polars import DataFrame, Expr
|
14
14
|
|
15
15
|
from .statements import Statements
|
16
16
|
|
@@ -106,7 +106,13 @@ class Prices(Base):
|
|
106
106
|
.cast(pl.Int64)
|
107
107
|
.name.prefix("Adjusted"),
|
108
108
|
)
|
109
|
-
.select(
|
109
|
+
.select(
|
110
|
+
"Date",
|
111
|
+
"Code",
|
112
|
+
"ReportDate",
|
113
|
+
"AdjustedIssuedShares",
|
114
|
+
"AdjustedTreasuryShares",
|
115
|
+
)
|
110
116
|
)
|
111
117
|
|
112
118
|
data = self.data.join(adjusted, on=["Date", "Code"], how="left")
|
@@ -331,3 +337,98 @@ class Prices(Base):
|
|
331
337
|
.with_forecast_dividend(statements)
|
332
338
|
.with_dividend_yield()
|
333
339
|
)
|
340
|
+
|
341
|
+
def period_stats(self) -> DataFrame:
|
342
|
+
"""各期ごとの各種利回りおよび調整済み終値の統計量を計算し、DataFrameを返す。
|
343
|
+
|
344
|
+
このメソッドは、`Code`と`ReportDate`で定義される各期(決算期間)ごとに、
|
345
|
+
以下の指標の統計量(始値、高値、安値、終値、平均値)を計算し、新しいDataFrameを
|
346
|
+
返します。
|
347
|
+
|
348
|
+
対象指標:
|
349
|
+
* `BookValueYield` (純資産利回り)
|
350
|
+
* `EarningsYield` (収益利回り)
|
351
|
+
* `DividendYield` (配当利回り)
|
352
|
+
* `Close` (調整済み終値)
|
353
|
+
|
354
|
+
統計量の種類:
|
355
|
+
* `_PeriodOpen`: 各期の最初の値
|
356
|
+
* `_PeriodHigh`: 各期の最大値
|
357
|
+
* `_PeriodLow`: 各期の最小値
|
358
|
+
* `_PeriodClose`: 各期の最後の値
|
359
|
+
* `_PeriodMean`: 各期の平均値
|
360
|
+
|
361
|
+
Note:
|
362
|
+
このメソッドを呼び出す前に、対象となる利回りカラムと`Close`、
|
363
|
+
そして`ReportDate`が`self.data`に存在している必要があります。
|
364
|
+
通常、`with_yields()` メソッドを呼び出すことで、これらの前提条件が
|
365
|
+
満たされます。
|
366
|
+
|
367
|
+
Returns:
|
368
|
+
DataFrame: 統計量カラムが追加された、新しいDataFrameオブジェクト。
|
369
|
+
"""
|
370
|
+
# 必要なカラムが存在するかチェック
|
371
|
+
required_cols = {
|
372
|
+
"BookValueYield",
|
373
|
+
"EarningsYield",
|
374
|
+
"DividendYield",
|
375
|
+
"Close",
|
376
|
+
"ReportDate",
|
377
|
+
}
|
378
|
+
if not required_cols.issubset(self.data.columns):
|
379
|
+
missing = required_cols - set(self.data.columns)
|
380
|
+
msg = f"必要な列が存在しません: {missing}。"
|
381
|
+
msg += "事前に `with_yields()` メソッドなどを呼び出してください。"
|
382
|
+
raise KeyError(msg)
|
383
|
+
|
384
|
+
# 統計量を計算するカラムのリスト
|
385
|
+
target_cols = ["BookValueYield", "EarningsYield", "DividendYield", "Close"]
|
386
|
+
|
387
|
+
# 各カラムに対して統計量を計算する式を生成
|
388
|
+
aggs: list[pl.Expr] = []
|
389
|
+
for col in target_cols:
|
390
|
+
aggs.extend(
|
391
|
+
[
|
392
|
+
pl.col(col).drop_nulls().first().alias(f"{col}_PeriodOpen"),
|
393
|
+
pl.col(col).max().alias(f"{col}_PeriodHigh"),
|
394
|
+
pl.col(col).min().alias(f"{col}_PeriodLow"),
|
395
|
+
pl.col(col).drop_nulls().last().alias(f"{col}_PeriodClose"),
|
396
|
+
pl.col(col).mean().alias(f"{col}_PeriodMean"),
|
397
|
+
],
|
398
|
+
)
|
399
|
+
|
400
|
+
# CodeとReportDateでグループ化し、統計量を計算
|
401
|
+
return self.data.group_by("Code", "ReportDate", maintain_order=True).agg(aggs)
|
402
|
+
|
403
|
+
def with_period_stats(self) -> Self:
|
404
|
+
"""各期ごとの各種利回りおよび調整済み終値の統計量を計算し、列として追加する。
|
405
|
+
|
406
|
+
このメソッドは、`Code`と`ReportDate`で定義される各期(決算期間)ごとに、
|
407
|
+
以下の指標の統計量(始値、高値、安値、終値、平均値)を計算し、新しい列として追加します。
|
408
|
+
|
409
|
+
対象指標:
|
410
|
+
* `BookValueYield` (純資産利回り)
|
411
|
+
* `EarningsYield` (収益利回り)
|
412
|
+
* `DividendYield` (配当利回り)
|
413
|
+
* `Close` (調整済み終値)
|
414
|
+
|
415
|
+
統計量の種類:
|
416
|
+
* `_PeriodOpen`: 各期の最初の値
|
417
|
+
* `_PeriodHigh`: 各期の最大値
|
418
|
+
* `_PeriodLow`: 各期の最小値
|
419
|
+
* `_PeriodClose`: 各期の最後の値
|
420
|
+
* `_PeriodMean`: 各期の平均値
|
421
|
+
|
422
|
+
Note:
|
423
|
+
このメソッドを呼び出す前に、対象となる利回りカラムと`Close`、
|
424
|
+
そして`ReportDate`が`self.data`に存在している必要があります。
|
425
|
+
通常、`with_yields()` メソッドを呼び出すことで、これらの前提条件が
|
426
|
+
満たされます。
|
427
|
+
|
428
|
+
Returns:
|
429
|
+
Self: 統計量カラムが追加された、新しいPricesオブジェクト。
|
430
|
+
"""
|
431
|
+
stats = self.period_stats()
|
432
|
+
data = self.data.join(stats, on=["Code", "ReportDate"], how="left")
|
433
|
+
|
434
|
+
return self.__class__(data)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|