Files
pythonstock--stock/backend/jobs/quarter_job.py
T
2026-07-13 13:10:28 +08:00

90 lines
3.5 KiB
Python

#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
import libs.common as common
import sys
import time
import pandas as pd
import tushare as ts
from sqlalchemy.types import NVARCHAR
from sqlalchemy import inspect
import datetime
# 增加一个新quarter列,用来存储季度信息。
def concat_quarter(year, quarter, data_array):
print(len(data_array))
quarter_str = str(year) + str("%02d" % quarter) # 格式化季度数据。2位。
# 增加到列。
quarter_col = pd.DataFrame([quarter_str for _ in range(len(data_array))], columns=["quarter"])
return pd.concat([quarter_col, data_array], axis=1)
#############################基本面数据 http://tushare.org/fundamental.html
def stat_all(tmp_datetime):
# 返回 31 天前的数据,做上个季度数据统计。
tmp_datetime_1month = tmp_datetime + datetime.timedelta(days=-31)
year = int((tmp_datetime_1month).strftime("%Y"))
quarter = int(pd.Timestamp(tmp_datetime_1month).quarter) # 获得上个季度的数据。
print("############ year %d, quarter %d", year, quarter)
# 业绩报告(主表)
data = ts.get_report_data(year, quarter)
# 增加季度字段。
data = concat_quarter(year, quarter, data)
# 处理重复数据,保存最新一条数据。最后一步处理,否则concat有问题。
data = data.drop_duplicates(subset="code", keep="last")
# 插入数据库。
common.insert_db(data, "ts_report_data", False, "`quarter`,`code`")
# 盈利能力
data = ts.get_profit_data(year, quarter)
# 增加季度字段。
data = concat_quarter(year, quarter, data)
# 处理重复数据,保存最新一条数据。
data = data.drop_duplicates(subset="code", keep="last")
# 插入数据库。
common.insert_db(data, "ts_profit_data", False, "`quarter`,`code`")
# 营运能力
data = ts.get_operation_data(year, quarter)
# 增加季度字段。
data = concat_quarter(year, quarter, data)
# 处理重复数据,保存最新一条数据。最后一步处理,否则concat有问题。
data = data.drop_duplicates(subset="code", keep="last")
# 插入数据库。
common.insert_db(data, "ts_operation_data", False, "`quarter`,`code`")
# 成长能力
data = ts.get_growth_data(year, quarter)
# 增加季度字段。
data = concat_quarter(year, quarter, data)
# 处理重复数据,保存最新一条数据。最后一步处理,否则concat有问题。
data = data.drop_duplicates(subset="code", keep="last")
# 插入数据库。
common.insert_db(data, "ts_growth_data", False, "`quarter`,`code`")
# 偿债能力
data = ts.get_debtpaying_data(year, quarter)
# 增加季度字段。
data = concat_quarter(year, quarter, data)
# 处理重复数据,保存最新一条数据。最后一步处理,否则concat有问题。
data = data.drop_duplicates(subset="code", keep="last")
# 插入数据库。
common.insert_db(data, "ts_debtpaying_data", False, "`quarter`,`code`")
# 现金流量
data = ts.get_cashflow_data(year, quarter)
# 增加季度字段。
data = concat_quarter(year, quarter, data)
# 处理重复数据,保存最新一条数据。最后一步处理,否则concat有问题。
data = data.drop_duplicates(subset="code", keep="last")
# 插入数据库。
common.insert_db(data, "ts_cashflow_data", False, "`quarter`,`code`")
# main函数入口
if __name__ == '__main__':
# 使用方法传递。
tmp_datetime = common.run_with_args(stat_all)