1
0

优化财报获取

This commit is contained in:
2025-01-14 22:48:14 +08:00
parent b78cc1dd23
commit a89c60227c
3 changed files with 246 additions and 127 deletions

6
.idea/vcs.xml generated
View File

@@ -1,5 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CommitMessageInspectionProfile">
<profile version="1.0">
<inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" />
</profile>
</component>
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>

22
财报筛选/loader.py Normal file
View File

@@ -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

View File

@@ -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": [
"<div>\n",
@@ -127,52 +138,97 @@
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2979</th>\n",
" <th>1808</th>\n",
" <td>2005</td>\n",
" <td>3.467468e+06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3228</th>\n",
" <td>2006</td>\n",
" <td>1.212677e+06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4784</th>\n",
" <td>2007</td>\n",
" <td>1.015147e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8425</th>\n",
" <td>2008</td>\n",
" <td>1.466373e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9811</th>\n",
" <td>2009</td>\n",
" <td>2.172666e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12426</th>\n",
" <td>2010</td>\n",
" <td>4.982651e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17669</th>\n",
" <td>2011</td>\n",
" <td>7.169039e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19876</th>\n",
" <td>2012</td>\n",
" <td>9.554584e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25082</th>\n",
" <td>2013</td>\n",
" <td>1.024329e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28480</th>\n",
" <td>2014</td>\n",
" <td>1.138340e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7615</th>\n",
" <th>33116</th>\n",
" <td>2015</td>\n",
" <td>1.936414e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12121</th>\n",
" <th>37622</th>\n",
" <td>2016</td>\n",
" <td>1.328421e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16405</th>\n",
" <th>41906</th>\n",
" <td>2017</td>\n",
" <td>2.266875e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21964</th>\n",
" <th>47465</th>\n",
" <td>2018</td>\n",
" <td>3.592014e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25657</th>\n",
" <th>51158</th>\n",
" <td>2019</td>\n",
" <td>5.077704e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29113</th>\n",
" <th>54614</th>\n",
" <td>2020</td>\n",
" <td>5.449616e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36313</th>\n",
" <th>61814</th>\n",
" <td>2021</td>\n",
" <td>7.861501e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40855</th>\n",
" <th>66356</th>\n",
" <td>2022</td>\n",
" <td>6.156781e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45977</th>\n",
" <th>71478</th>\n",
" <td>2023</td>\n",
" <td>5.784234e+08</td>\n",
" </tr>\n",
@@ -181,12 +237,12 @@
"</div>"
]
},
"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 @@
" <td>50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>144</th>\n",
" <td>000568.SZ</td>\n",
" <td>泸州老窖</td>\n",
" <td>850</td>\n",
" <td>450</td>\n",
" <td>100</td>\n",
" <td>0</td>\n",
" <td>50</td>\n",
" <td>20</td>\n",
" <td>50</td>\n",
" <td>0</td>\n",
" <td>90</td>\n",
" <td>90</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3238</th>\n",
" <td>603688.SH</td>\n",
" <td>石英股份</td>\n",
@@ -869,6 +910,21 @@
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>144</th>\n",
" <td>000568.SZ</td>\n",
" <td>泸州老窖</td>\n",
" <td>850</td>\n",
" <td>450</td>\n",
" <td>100</td>\n",
" <td>0</td>\n",
" <td>50</td>\n",
" <td>20</td>\n",
" <td>50</td>\n",
" <td>0</td>\n",
" <td>90</td>\n",
" <td>90</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2336</th>\n",
" <td>600438.SH</td>\n",
" <td>通威股份</td>\n",
@@ -899,24 +955,9 @@
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>827</th>\n",
" <td>002425.SZ</td>\n",
" <td>ST凯文</td>\n",
" <td>-100</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>50</td>\n",
" <td>0</td>\n",
" <td>-90</td>\n",
" <td>-60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1485</th>\n",
" <td>300200.SZ</td>\n",
" <td>高盟新材</td>\n",
" <th>1703</th>\n",
" <td>300436.SZ</td>\n",
" <td>广生堂</td>\n",
" <td>-100</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
@@ -929,9 +970,24 @@
" <td>-90</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1619</th>\n",
" <td>300345.SZ</td>\n",
" <td>华民股份</td>\n",
" <th>2441</th>\n",
" <td>600579.SH</td>\n",
" <td>克劳斯</td>\n",
" <td>-100</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>50</td>\n",
" <td>0</td>\n",
" <td>-90</td>\n",
" <td>-60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1054</th>\n",
" <td>002672.SZ</td>\n",
" <td>东江环保</td>\n",
" <td>-130</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
@@ -959,9 +1015,9 @@
" <td>-90</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1054</th>\n",
" <td>002672.SZ</td>\n",
" <td>东江环保</td>\n",
" <th>1619</th>\n",
" <td>300345.SZ</td>\n",
" <td>华民股份</td>\n",
" <td>-130</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
@@ -979,12 +1035,47 @@
"</div>"
]
},
"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": {