diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..4c6280e 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,5 +1,11 @@ + + + + + + diff --git a/财报筛选/loader.py b/财报筛选/loader.py new file mode 100644 index 0000000..59b78c1 --- /dev/null +++ b/财报筛选/loader.py @@ -0,0 +1,22 @@ +import pandas as pd + +finance_root = "C:\\Users\\lanyuanxiaoyao\\Documents\\Tushare" + + +def load_balance_sheet(): + return pd.read_csv(f"{finance_root}\\财务报表\\资产负债表1990-2024.csv") + + +def load_income(): + return pd.read_csv(f"{finance_root}\\财务报表\\利润表1990-2024.csv") + + +def load_cashflow(): + return pd.read_csv(f"{finance_root}\\财务报表\\现金流量表1990-2024.csv") + + +def load_finance(): + finance_df = load_balance_sheet() + finance_df = pd.merge(finance_df, load_income(), on=["ts_code", "end_date"]) + finance_df = pd.merge(finance_df, load_cashflow(), on=["ts_code", "end_date"]) + return finance_df diff --git a/财报筛选/金字塔选股.ipynb b/财报筛选/金字塔选股.ipynb index 627f5bc..68f1bd4 100644 --- a/财报筛选/金字塔选股.ipynb +++ b/财报筛选/金字塔选股.ipynb @@ -6,8 +6,8 @@ "metadata": { "collapsed": true, "ExecuteTime": { - "end_time": "2025-01-13T03:10:01.926908Z", - "start_time": "2025-01-13T03:10:01.923521Z" + "end_time": "2025-01-14T14:10:53.801418Z", + "start_time": "2025-01-14T14:10:53.532671Z" } }, "source": [ @@ -17,21 +17,23 @@ "ts_pro = ts.pro_api(token=\"64ebff4fa679167600b905ee45dd88e76f3963c0ff39157f3f085f0e\")" ], "outputs": [], - "execution_count": 182 + "execution_count": 2 }, { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:10:03.759538Z", - "start_time": "2025-01-13T03:10:02.003985Z" + "end_time": "2025-01-14T14:10:56.411909Z", + "start_time": "2025-01-14T14:10:55.020264Z" } }, "cell_type": "code", "source": [ + "import loader as loader\n", + "\n", "# 加载股票信息\n", "stock_df = pd.read_csv(\"../材料/股票基础信息.csv\")\n", "# 加载财报信息\n", - "source_finance_df = pd.read_csv(\"../temp/finance.csv\")\n", + "source_finance_df = loader.load_finance()\n", "finance_df = pd.DataFrame()\n", "finance_df[[\n", " \"code\",\n", @@ -74,13 +76,13 @@ ], "id": "68b2debc14502fd5", "outputs": [], - "execution_count": 183 + "execution_count": 3 }, { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:10:03.773392Z", - "start_time": "2025-01-13T03:10:03.761918Z" + "end_time": "2025-01-14T14:22:17.070395Z", + "start_time": "2025-01-14T14:22:17.053180Z" } }, "cell_type": "code", @@ -91,16 +93,25 @@ "data": { "text/plain": [ " year net_income\n", - "2979 2014 1.138340e+08\n", - "7615 2015 1.936414e+08\n", - "12121 2016 1.328421e+08\n", - "16405 2017 2.266875e+08\n", - "21964 2018 3.592014e+08\n", - "25657 2019 5.077704e+08\n", - "29113 2020 5.449616e+08\n", - "36313 2021 7.861501e+08\n", - "40855 2022 6.156781e+08\n", - "45977 2023 5.784234e+08" + "1808 2005 3.467468e+06\n", + "3228 2006 1.212677e+06\n", + "4784 2007 1.015147e+07\n", + "8425 2008 1.466373e+07\n", + "9811 2009 2.172666e+07\n", + "12426 2010 4.982651e+07\n", + "17669 2011 7.169039e+07\n", + "19876 2012 9.554584e+07\n", + "25082 2013 1.024329e+08\n", + "28480 2014 1.138340e+08\n", + "33116 2015 1.936414e+08\n", + "37622 2016 1.328421e+08\n", + "41906 2017 2.266875e+08\n", + "47465 2018 3.592014e+08\n", + "51158 2019 5.077704e+08\n", + "54614 2020 5.449616e+08\n", + "61814 2021 7.861501e+08\n", + "66356 2022 6.156781e+08\n", + "71478 2023 5.784234e+08" ], "text/html": [ "
\n", @@ -127,52 +138,97 @@ " \n", " \n", " \n", - " 2979\n", + " 1808\n", + " 2005\n", + " 3.467468e+06\n", + " \n", + " \n", + " 3228\n", + " 2006\n", + " 1.212677e+06\n", + " \n", + " \n", + " 4784\n", + " 2007\n", + " 1.015147e+07\n", + " \n", + " \n", + " 8425\n", + " 2008\n", + " 1.466373e+07\n", + " \n", + " \n", + " 9811\n", + " 2009\n", + " 2.172666e+07\n", + " \n", + " \n", + " 12426\n", + " 2010\n", + " 4.982651e+07\n", + " \n", + " \n", + " 17669\n", + " 2011\n", + " 7.169039e+07\n", + " \n", + " \n", + " 19876\n", + " 2012\n", + " 9.554584e+07\n", + " \n", + " \n", + " 25082\n", + " 2013\n", + " 1.024329e+08\n", + " \n", + " \n", + " 28480\n", " 2014\n", " 1.138340e+08\n", " \n", " \n", - " 7615\n", + " 33116\n", " 2015\n", " 1.936414e+08\n", " \n", " \n", - " 12121\n", + " 37622\n", " 2016\n", " 1.328421e+08\n", " \n", " \n", - " 16405\n", + " 41906\n", " 2017\n", " 2.266875e+08\n", " \n", " \n", - " 21964\n", + " 47465\n", " 2018\n", " 3.592014e+08\n", " \n", " \n", - " 25657\n", + " 51158\n", " 2019\n", " 5.077704e+08\n", " \n", " \n", - " 29113\n", + " 54614\n", " 2020\n", " 5.449616e+08\n", " \n", " \n", - " 36313\n", + " 61814\n", " 2021\n", " 7.861501e+08\n", " \n", " \n", - " 40855\n", + " 66356\n", " 2022\n", " 6.156781e+08\n", " \n", " \n", - " 45977\n", + " 71478\n", " 2023\n", " 5.784234e+08\n", " \n", @@ -181,12 +237,12 @@ "
" ] }, - "execution_count": 184, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 184 + "execution_count": 4 }, { "metadata": {}, @@ -197,8 +253,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:10:03.784454Z", - "start_time": "2025-01-13T03:10:03.774686Z" + "end_time": "2025-01-14T14:22:57.782337Z", + "start_time": "2025-01-14T14:22:57.774714Z" } }, "cell_type": "code", @@ -213,13 +269,13 @@ ], "id": "4293bd93ea8f9ed", "outputs": [], - "execution_count": 185 + "execution_count": 5 }, { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:10:03.789557Z", - "start_time": "2025-01-13T03:10:03.786826Z" + "end_time": "2025-01-14T14:22:59.917536Z", + "start_time": "2025-01-14T14:22:59.914056Z" } }, "cell_type": "code", @@ -231,7 +287,7 @@ ], "id": "fa22f7c620511f0a", "outputs": [], - "execution_count": 186 + "execution_count": 6 }, { "metadata": {}, @@ -253,8 +309,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:10:23.578470Z", - "start_time": "2025-01-13T03:10:03.791003Z" + "end_time": "2025-01-14T14:23:11.032339Z", + "start_time": "2025-01-14T14:23:02.481495Z" } }, "cell_type": "code", @@ -292,7 +348,7 @@ ], "id": "f050d33c4a0cd720", "outputs": [], - "execution_count": 187 + "execution_count": 7 }, { "metadata": {}, @@ -309,8 +365,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:10:42.654737Z", - "start_time": "2025-01-13T03:10:23.580200Z" + "end_time": "2025-01-14T14:23:20.494927Z", + "start_time": "2025-01-14T14:23:12.064079Z" } }, "cell_type": "code", @@ -341,7 +397,7 @@ ], "id": "25d1d5c0f7de460c", "outputs": [], - "execution_count": 188 + "execution_count": 8 }, { "metadata": {}, @@ -357,8 +413,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:10:58.085277Z", - "start_time": "2025-01-13T03:10:42.657424Z" + "end_time": "2025-01-14T14:23:29.214393Z", + "start_time": "2025-01-14T14:23:22.256675Z" } }, "cell_type": "code", @@ -379,7 +435,7 @@ ], "id": "2f19c7fbb0afaa49", "outputs": [], - "execution_count": 189 + "execution_count": 9 }, { "metadata": {}, @@ -395,8 +451,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:11:20.221255Z", - "start_time": "2025-01-13T03:10:58.087417Z" + "end_time": "2025-01-14T14:23:39.246944Z", + "start_time": "2025-01-14T14:23:30.739476Z" } }, "cell_type": "code", @@ -435,7 +491,7 @@ ], "id": "31be2cb671b7adde", "outputs": [], - "execution_count": 190 + "execution_count": 10 }, { "metadata": {}, @@ -459,8 +515,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:11:39.666059Z", - "start_time": "2025-01-13T03:11:20.222910Z" + "end_time": "2025-01-14T14:23:47.733800Z", + "start_time": "2025-01-14T14:23:40.102117Z" } }, "cell_type": "code", @@ -503,7 +559,7 @@ ], "id": "ab6ff79c2650db7c", "outputs": [], - "execution_count": 191 + "execution_count": 11 }, { "metadata": {}, @@ -518,8 +574,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:11:57.137395Z", - "start_time": "2025-01-13T03:11:39.669792Z" + "end_time": "2025-01-14T14:23:57.280972Z", + "start_time": "2025-01-14T14:23:49.457909Z" } }, "cell_type": "code", @@ -544,7 +600,7 @@ ], "id": "8e58e0114851ebcb", "outputs": [], - "execution_count": 192 + "execution_count": 12 }, { "metadata": {}, @@ -561,8 +617,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:12:16.127651Z", - "start_time": "2025-01-13T03:11:57.138994Z" + "end_time": "2025-01-14T14:24:05.675449Z", + "start_time": "2025-01-14T14:23:58.156821Z" } }, "cell_type": "code", @@ -595,7 +651,7 @@ ], "id": "d07048f574e163ab", "outputs": [], - "execution_count": 193 + "execution_count": 13 }, { "metadata": {}, @@ -613,8 +669,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:12:31.905761Z", - "start_time": "2025-01-13T03:12:16.129100Z" + "end_time": "2025-01-14T14:24:13.783225Z", + "start_time": "2025-01-14T14:24:06.605156Z" } }, "cell_type": "code", @@ -652,13 +708,13 @@ ], "id": "4ab6a7b485dc9349", "outputs": [], - "execution_count": 194 + "execution_count": 14 }, { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:12:46.733835Z", - "start_time": "2025-01-13T03:12:31.907382Z" + "end_time": "2025-01-14T14:24:21.962980Z", + "start_time": "2025-01-14T14:24:14.785970Z" } }, "cell_type": "code", @@ -696,13 +752,13 @@ ], "id": "d6644089e803a79d", "outputs": [], - "execution_count": 195 + "execution_count": 15 }, { "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T03:12:46.753922Z", - "start_time": "2025-01-13T03:12:46.734835Z" + "end_time": "2025-01-14T14:24:24.969522Z", + "start_time": "2025-01-14T14:24:24.957769Z" } }, "cell_type": "code", @@ -723,54 +779,54 @@ " code name score roe_score roa_score net_income \\\n", "2393 600519.SH 贵州茅台 950 500 100 100 \n", "323 000858.SZ 五粮液 910 450 100 100 \n", - "144 000568.SZ 泸州老窖 850 450 100 0 \n", "3238 603688.SH 石英股份 850 500 100 0 \n", + "144 000568.SZ 泸州老窖 850 450 100 0 \n", "2336 600438.SH 通威股份 840 450 80 100 \n", "... ... ... ... ... ... ... \n", - "827 002425.SZ ST凯文 -100 0 0 0 \n", - "1485 300200.SZ 高盟新材 -100 0 0 0 \n", - "1619 300345.SZ 华民股份 -130 0 0 0 \n", - "1488 300204.SZ 舒泰神 -130 0 0 0 \n", + "1703 300436.SZ 广生堂 -100 0 0 0 \n", + "2441 600579.SH 克劳斯 -100 0 0 0 \n", "1054 002672.SZ 东江环保 -130 0 0 0 \n", + "1488 300204.SZ 舒泰神 -130 0 0 0 \n", + "1619 300345.SZ 华民股份 -130 0 0 0 \n", "\n", " assets_turnover_and_cash collection_cash_period_and_sales_period \\\n", "2393 50 20 \n", "323 50 20 \n", - "144 50 20 \n", "3238 50 0 \n", + "144 50 20 \n", "2336 50 50 \n", "... ... ... \n", - "827 0 0 \n", - "1485 0 0 \n", - "1619 0 0 \n", - "1488 0 0 \n", + "1703 0 0 \n", + "2441 0 0 \n", "1054 0 0 \n", + "1488 0 0 \n", + "1619 0 0 \n", "\n", " gross_profit_ratio_volatility operating_safety_margin \\\n", "2393 50 0 \n", "323 50 0 \n", - "144 50 0 \n", "3238 50 0 \n", + "144 50 0 \n", "2336 50 0 \n", "... ... ... \n", - "827 50 0 \n", - "1485 50 0 \n", - "1619 50 0 \n", - "1488 50 0 \n", + "1703 50 0 \n", + "2441 50 0 \n", "1054 50 0 \n", + "1488 50 0 \n", + "1619 50 0 \n", "\n", " net_income_ascending operating_net_cash_flow_ascending \n", "2393 90 40 \n", "323 90 50 \n", - "144 90 90 \n", "3238 90 60 \n", + "144 90 90 \n", "2336 30 30 \n", "... ... ... \n", - "827 -90 -60 \n", - "1485 -60 -90 \n", - "1619 -90 -90 \n", - "1488 -90 -90 \n", + "1703 -60 -90 \n", + "2441 -90 -60 \n", "1054 -90 -90 \n", + "1488 -90 -90 \n", + "1619 -90 -90 \n", "\n", "[3384 rows x 12 columns]" ], @@ -839,21 +895,6 @@ " 50\n", " \n", " \n", - " 144\n", - " 000568.SZ\n", - " 泸州老窖\n", - " 850\n", - " 450\n", - " 100\n", - " 0\n", - " 50\n", - " 20\n", - " 50\n", - " 0\n", - " 90\n", - " 90\n", - " \n", - " \n", " 3238\n", " 603688.SH\n", " 石英股份\n", @@ -869,6 +910,21 @@ " 60\n", " \n", " \n", + " 144\n", + " 000568.SZ\n", + " 泸州老窖\n", + " 850\n", + " 450\n", + " 100\n", + " 0\n", + " 50\n", + " 20\n", + " 50\n", + " 0\n", + " 90\n", + " 90\n", + " \n", + " \n", " 2336\n", " 600438.SH\n", " 通威股份\n", @@ -899,24 +955,9 @@ " ...\n", " \n", " \n", - " 827\n", - " 002425.SZ\n", - " ST凯文\n", - " -100\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 50\n", - " 0\n", - " -90\n", - " -60\n", - " \n", - " \n", - " 1485\n", - " 300200.SZ\n", - " 高盟新材\n", + " 1703\n", + " 300436.SZ\n", + " 广生堂\n", " -100\n", " 0\n", " 0\n", @@ -929,9 +970,24 @@ " -90\n", " \n", " \n", - " 1619\n", - " 300345.SZ\n", - " 华民股份\n", + " 2441\n", + " 600579.SH\n", + " 克劳斯\n", + " -100\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 50\n", + " 0\n", + " -90\n", + " -60\n", + " \n", + " \n", + " 1054\n", + " 002672.SZ\n", + " 东江环保\n", " -130\n", " 0\n", " 0\n", @@ -959,9 +1015,9 @@ " -90\n", " \n", " \n", - " 1054\n", - " 002672.SZ\n", - " 东江环保\n", + " 1619\n", + " 300345.SZ\n", + " 华民股份\n", " -130\n", " 0\n", " 0\n", @@ -979,12 +1035,47 @@ "" ] }, - "execution_count": 196, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 196 + "execution_count": 16 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-14T14:25:22.482926Z", + "start_time": "2025-01-14T14:25:22.476830Z" + } + }, + "cell_type": "code", + "source": "df[:100][\"code\"]", + "id": "32b5b4778985afaa", + "outputs": [ + { + "data": { + "text/plain": [ + "2393 600519.SH\n", + "323 000858.SZ\n", + "3238 603688.SH\n", + "144 000568.SZ\n", + "2336 600438.SH\n", + " ... \n", + "3318 603871.SH\n", + "2542 600702.SH\n", + "1166 002801.SZ\n", + "1227 002867.SZ\n", + "1754 300487.SZ\n", + "Name: code, Length: 100, dtype: object" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 17 }, { "metadata": {