kabukit 0.4.0__py3-none-any.whl → 0.5.1__py3-none-any.whl

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/core/prices.py CHANGED
@@ -41,10 +41,10 @@ class Prices(Base):
41
41
  (`AdjustmentFactor`) を用いて補正し、日次ベースの時系列データとして
42
42
  提供します。これにより、日々の時価総額計算などが正確に行えるようになります。
43
43
 
44
- 具体的には、`statements`から`TotalShares`(発行済株式総数)と
44
+ 具体的には、`statements`から`IssuedShares`(発行済株式総数)と
45
45
  `TreasuryShares`(自己株式数)を取得し、それぞれを調整します。
46
46
  計算結果は、元の列名との混同を避けるため、接頭辞`Adjusted`を付与した
47
- 新しい列(`AdjustedTotalShares`, `AdjustedTreasuryShares`)として
47
+ 新しい列(`AdjustedIssuedShares`, `AdjustedTreasuryShares`)として
48
48
  追加されます。
49
49
 
50
50
  .. note::
@@ -54,11 +54,10 @@ class Prices(Base):
54
54
  反映されないイベントによる株式数の変動は考慮されません。
55
55
 
56
56
  Args:
57
- statements (Statements): `number_of_shares()`メソッドを通じて
58
- 株式数データを提供できる`Statements`オブジェクト。
57
+ statements (Statements): 財務データを提供する`Statements`オブジェクト。
59
58
 
60
59
  Returns:
61
- Self: `AdjustedTotalShares`および`AdjustedTreasuryShares`列が
60
+ Self: `AdjustedIssuedShares`および`AdjustedTreasuryShares`列が
62
61
  追加された、新しいPricesオブジェクト。
63
62
  """
64
63
  shares = statements.number_of_shares().rename({"Date": "ReportDate"})
@@ -77,16 +76,32 @@ class Prices(Base):
77
76
  .over("Code", "ReportDate")
78
77
  .alias("CumulativeRatio"),
79
78
  )
80
- .select(
81
- "Date",
82
- "Code",
83
- (pl.col("TotalShares", "TreasuryShares") * pl.col("CumulativeRatio"))
79
+ .with_columns(
80
+ (pl.col("IssuedShares", "TreasuryShares") * pl.col("CumulativeRatio"))
84
81
  .round(0)
85
82
  .cast(pl.Int64)
86
83
  .name.prefix("Adjusted"),
87
84
  )
85
+ .select("Date", "Code", "AdjustedIssuedShares", "AdjustedTreasuryShares")
88
86
  )
89
87
 
90
88
  data = self.data.join(adjusted, on=["Date", "Code"], how="left")
91
89
 
92
90
  return self.__class__(data)
91
+
92
+ def with_forecast_profit(self, statements: Statements) -> Self:
93
+ """時系列の予想純利益を列として追加する。
94
+
95
+ Args:
96
+ statements (Statements): 財務データを提供する`Statements`オブジェクト。
97
+
98
+ Returns:
99
+ Self: `ForecastProfit` 列が追加された、新しいPricesオブジェクト。
100
+ """
101
+ data = self.data.join_asof(
102
+ statements.forecast_profit(),
103
+ on="Date",
104
+ by="Code",
105
+ check_sortedness=False,
106
+ )
107
+ return self.__class__(data)
@@ -14,11 +14,28 @@ class Statements(Base):
14
14
  def number_of_shares(self) -> DataFrame:
15
15
  """発行済株式数を取得する。"""
16
16
  return self.data.filter(
17
- pl.col("TotalShares").is_not_null(),
17
+ pl.col("IssuedShares").is_not_null(),
18
18
  ).select(
19
19
  "Date",
20
20
  "Code",
21
- "TotalShares",
21
+ "IssuedShares",
22
22
  "TreasuryShares",
23
23
  "AverageOutstandingShares",
24
24
  )
25
+
26
+ def forecast_profit(self) -> DataFrame:
27
+ """予想純利益を抽出する。
28
+
29
+ Returns:
30
+ DataFrame: Date, Code, ForecastProfit を含むDataFrame
31
+ """
32
+ return (
33
+ self.data.with_columns(
34
+ pl.when(pl.col("TypeOfDocument").str.starts_with("FY"))
35
+ .then(pl.col("NextYearForecastProfit"))
36
+ .otherwise(pl.col("ForecastProfit"))
37
+ .alias("ForecastProfit"),
38
+ )
39
+ .filter(pl.col("ForecastProfit").is_not_null())
40
+ .select("Date", "Code", "ForecastProfit")
41
+ )
@@ -41,7 +41,7 @@ async def fetch(
41
41
  DataFrame:
42
42
  すべての銘柄の財務情報を含む単一のDataFrame。
43
43
  """
44
- return await concurrent.fetch(
44
+ data = await concurrent.fetch(
45
45
  JQuantsClient,
46
46
  resource,
47
47
  codes,
@@ -49,6 +49,7 @@ async def fetch(
49
49
  progress=progress,
50
50
  callback=callback,
51
51
  )
52
+ return data.sort("Code", "Date")
52
53
 
53
54
 
54
55
  async def fetch_all(
kabukit/jquants/schema.py CHANGED
@@ -130,7 +130,7 @@ class StatementColumns(BaseColumns):
130
130
  ChangesInAccountingEstimates = "会計上の見積りの変更"
131
131
  RetrospectiveRestatement = "修正再表示"
132
132
 
133
- TotalShares = "期末発行済株式数" # 自己株式を含む (NumberOfIssuedAndOutstandingSharesAtTheEndOfFiscalYearIncludingTreasuryStock)
133
+ IssuedShares = "期末発行済株式数" # 自己株式を含む (NumberOfIssuedAndOutstandingSharesAtTheEndOfFiscalYearIncludingTreasuryStock)
134
134
  TreasuryShares = "期末自己株式数" # (NumberOfTreasuryStockAtTheEndOfFiscalYear)
135
135
  AverageOutstandingShares = "期中平均株式数" # 自己株式を除く。EPSなどの計算に使用される (AverageNumberOfShares)
136
136
 
@@ -17,7 +17,7 @@ def clean(df: DataFrame) -> DataFrame:
17
17
  .rename(
18
18
  {
19
19
  "LocalCode": "Code",
20
- "NumberOfIssuedAndOutstandingSharesAtTheEndOfFiscalYearIncludingTreasuryStock": "TotalShares", # noqa: E501
20
+ "NumberOfIssuedAndOutstandingSharesAtTheEndOfFiscalYearIncludingTreasuryStock": "IssuedShares", # noqa: E501
21
21
  "NumberOfTreasuryStockAtTheEndOfFiscalYear": "TreasuryShares",
22
22
  "AverageNumberOfShares": "AverageOutstandingShares",
23
23
  },
@@ -49,7 +49,7 @@ def _cast_float(df: DataFrame) -> DataFrame:
49
49
  ]
50
50
  ).with_columns(
51
51
  pl.col(
52
- "TotalShares",
52
+ "IssuedShares",
53
53
  "TreasuryShares",
54
54
  ).cast(pl.Int64, strict=False),
55
55
  pl.col(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: kabukit
3
- Version: 0.4.0
3
+ Version: 0.5.1
4
4
  Summary: A Python toolkit for Japanese financial market data, supporting J-Quants and EDINET APIs.
5
5
  Author: daizutabi
6
6
  Author-email: daizutabi <daizutabi@gmail.com>
@@ -28,13 +28,13 @@ License: MIT License
28
28
  Classifier: Development Status :: 4 - Beta
29
29
  Classifier: Programming Language :: Python
30
30
  Classifier: Programming Language :: Python :: 3.13
31
- Requires-Dist: async-typer>=0.1
31
+ Requires-Dist: async-typer>=0.1.10
32
32
  Requires-Dist: holidays>=0.81
33
- Requires-Dist: httpx>=0.28
34
- Requires-Dist: platformdirs>=4
35
- Requires-Dist: polars>=1
36
- Requires-Dist: python-dotenv>=1
37
- Requires-Dist: typer>=0.19
33
+ Requires-Dist: httpx>=0.28.1
34
+ Requires-Dist: platformdirs>=4.4.0
35
+ Requires-Dist: polars>=1.34.0
36
+ Requires-Dist: python-dotenv>=1.1.1
37
+ Requires-Dist: typer>=0.19.2
38
38
  Requires-Python: >=3.13
39
39
  Project-URL: Documentation, https://daizutabi.github.io/kabukit/
40
40
  Project-URL: Issues, https://github.com/daizutabi/kabukit/issues
@@ -13,27 +13,27 @@ kabukit/core/base.py,sha256=YQfGw3P2QshRdut3KhtrAleVvnFsIPOw5oGA9azypAA,1695
13
13
  kabukit/core/client.py,sha256=tVq1r3zpOfjmOtnRI1KPZHgTgBZYIpJzfw15i2kAM48,676
14
14
  kabukit/core/info.py,sha256=5BX7mDavF6g-b0KzHgKIFHUS5701BoaHtw1JcHSsy94,174
15
15
  kabukit/core/list.py,sha256=AjnXzC9XIu21l6IBEHHAS5VAnfxTfkAA9m1WAOZJNa8,174
16
- kabukit/core/prices.py,sha256=9v_eu-ylYJmDNLgruUeH6clW-mtwO-VRxrlLkWXp8VE,3601
16
+ kabukit/core/prices.py,sha256=d-fV6VU1GrdSPeiJY8yijhGPil7BKAAAmCp6p5Zqzes,4168
17
17
  kabukit/core/reports.py,sha256=ch_xe84GbB17JTfmY3ArQqneQ2XOuvrAykBTAyNmWuM,177
18
- kabukit/core/statements.py,sha256=iHa3zHH4HNLbOJF-GgC4HbpyrfFi-KUmrY1M3wzECZc,535
18
+ kabukit/core/statements.py,sha256=HJ0m5JVSpR2LEKZKbkpNn9JTvr7sABN269qPPnfuvaQ,1140
19
19
  kabukit/edinet/__init__.py,sha256=PKa4D-jVpeoOkdVp9NwwpgAiGEBjqvmJLmpzF-9SlVk,101
20
20
  kabukit/edinet/client.py,sha256=BlM7pjXpKweOo-ses41JiKinqRn4qerMN5NF7hgYKgg,3275
21
21
  kabukit/edinet/concurrent.py,sha256=2YPzIFuuOB8-gL3CnHIlP486QH5d21qjKNKGCFK7Hzk,4707
22
22
  kabukit/edinet/doc.py,sha256=6ZDgmm8DHmEMOA4NjNz-dHLMc7IzzYn-nVyMQGLWb8I,1220
23
23
  kabukit/jquants/__init__.py,sha256=xY0H6x4_51ZBqbrT2TdmGGFbTD-hosZiDzVIz4UXPv0,112
24
24
  kabukit/jquants/client.py,sha256=shAyJoOHUa3h1fFfHdlm2ZYdQL3Oauy2S9VTJfNb_RI,11523
25
- kabukit/jquants/concurrent.py,sha256=VGpWRq2NoDJCpyLAXegsJYPXvkY1hdjuuxxAprQzwEc,3294
25
+ kabukit/jquants/concurrent.py,sha256=n_HMIQEkj1OqDo75iybzcpzVJkP-pNzjNnv3XTA5sxQ,3331
26
26
  kabukit/jquants/info.py,sha256=AUymo6EtLdJ_L-0yNG1gd7rJ8Jkjw7tvsDM5Vw4QNFA,843
27
27
  kabukit/jquants/prices.py,sha256=oApQpdgzHwPw11XHpdg8ccZS7kybGtV8APZlpD2L3Yw,882
28
- kabukit/jquants/schema.py,sha256=dFbjkTglVcwR0YjQskLrphHIkM85Tc03yFJKm9xBL7g,9767
29
- kabukit/jquants/statements.py,sha256=tdxGVIchJImAqTL-lNYLD0yPsSVm-mDzXA8jPMRRne4,3067
28
+ kabukit/jquants/schema.py,sha256=aILl9cp9JDOaT2o3UlfavPGQC5s7n0ZkVBGKiTzdogs,9768
29
+ kabukit/jquants/statements.py,sha256=b5eS1_XEc9LzVffzjvP9-sXD-11tkY3IDQNP82E64Ww,3069
30
30
  kabukit/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
31
  kabukit/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  kabukit/utils/concurrent.py,sha256=m2zVqJUz4xFVpNbEc9YEaj3Jmbl82njupdm4_rBOoYQ,4510
33
33
  kabukit/utils/config.py,sha256=Jp-2TCnIj_QqA71FzYCkHXbvXvhw_1JVl4PR0foA1vM,618
34
34
  kabukit/utils/date.py,sha256=DEC6Ac5LS8eiW6JtrmcD3U1pX4qzXtx4ale0swpO4Ag,937
35
35
  kabukit/utils/params.py,sha256=qcaJbf6CWPUoZAZsYDTaZSnBUWeAersbWnR_iiYW9GM,1108
36
- kabukit-0.4.0.dist-info/WHEEL,sha256=-neZj6nU9KAMg2CnCY6T3w8J53nx1kFGw_9HfoSzM60,79
37
- kabukit-0.4.0.dist-info/entry_points.txt,sha256=vvX771TemoM-35vVizW3JJ70HvRXnd2tX4P1Btzyoxs,46
38
- kabukit-0.4.0.dist-info/METADATA,sha256=Ku0jupeK7kRZUq_4OX-N5RXE-CJM02CzdnswxpOvd_g,3187
39
- kabukit-0.4.0.dist-info/RECORD,,
36
+ kabukit-0.5.1.dist-info/WHEEL,sha256=-neZj6nU9KAMg2CnCY6T3w8J53nx1kFGw_9HfoSzM60,79
37
+ kabukit-0.5.1.dist-info/entry_points.txt,sha256=vvX771TemoM-35vVizW3JJ70HvRXnd2tX4P1Btzyoxs,46
38
+ kabukit-0.5.1.dist-info/METADATA,sha256=0HQs_ZrD9Xp6ztWj-X9yIcjvYuC0S3bAfZ5XEfH4HyA,3207
39
+ kabukit-0.5.1.dist-info/RECORD,,