0%

科创板上市企业不同阶段市盈率、市值变化 - 获取数据

前言

最近跟朋友聊天的时候谈起了科创板估值的问题,朋友问到现在能在科创板上市的都不见得是好事,好像有倒挂的股票。 我也发现确实有部分股票有倒挂的情况,上市后的股价比上市前的还要低。 后来我就突发奇想,想同一个关于科创板的数据统计,目的是想看看在科创板上市的企业在上市后的第一天、一个星期、一个月、三个月、六个月、一年后的市盈率和市值变化情况, 我自己也想通过数据的分析了解一下是不是大部分上科创板的企业都是“鱼跃龙门”。

人狠话不多。

注册账号

首先,我们需要从tushare.pro注册一个账号并调用其API获取股票日线数据。可能大多数的童稚是第一次接触tushare.pro, 那我就直接贴上官方介绍:

Tushare是一个免费提供各类金融数据和区块链数据 , 助力智能投资与创新型投资的python财经数据接口包。拥有丰富的数据内容,如股票、基金、期货、数字货币等行情数据,公司财务、基金经理等基本面数据。

过程

这里将使用到tushare提供的数据接口,数据本身是免费的,但有一定的分值要求。

requirements.txt

1
2
3
4
5
6
pandas
tushare
pangres
sqlalchemy
pymysql
tabulate

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import pymysql
pymysql.install_as_MySQLdb()
from sqlalchemy import create_engine, VARCHAR
from pangres import upsert
import hashlib
import tushare as ts
import pandas as pd
from datetime import datetime
import time
from crawlab import save_item

pro = ts.pro_api('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')

#填写mysql的相关信息,地址、table、密码
engine_ts = create_engine('mysql://数据库:密码@地址:3306/table')

today = datetime.now().strftime('%Y%m%d')

def hash(sourcedf,destinationdf,*column):
columnName = ''
destinationdf['hash_'+columnName.join(column)] = pd.DataFrame(sourcedf[list(column)].values.sum(axis=1))[0].str.encode('utf-8').apply(lambda x: (hashlib.sha512(x).hexdigest().upper()))


def daily_basic(ts_code, start_date, end_date, name, industry, list_date):
df = pro.daily_basic(ts_code=ts_code, start_date=start_date, end_date=end_date)
df['ts_type'] = 'daily_basic'
df['name'] = name
df['industry'] = industry
df['list_date'] = list_date
df['id'] = df['ts_code'] + '-' + df['trade_date'] + '-' + df['close'].astype(str) + '-' + df['ts_type']
hash(df, df, 'id', 'id')
df = df.drop_duplicates(subset=['hash_idid'], keep='last')
df = df.set_index('hash_idid')
#print(df.to_markdown())
return df

dtype = {'hash_idid':VARCHAR(128)}

#主要用于获取代码对应的中文名称
stock_basic = pro.stock_basic(exchange='', list_status='L')
stock_basic.set_index('symbol', inplace=True)
stock_basic = stock_basic[stock_basic["ts_code"].str.startswith('688')]


for ts_code, name, industry, list_date in zip(stock_basic['ts_code'], stock_basic['name'], stock_basic['industry'], stock_basic['list_date']):
print(ts_code)

try:
basics = daily_basic(ts_code, list_date, today, name, industry, list_date)

upsert(engine=engine_ts,
df=basics,
table_name='kcb_data',
if_row_exists='update',
dtype=dtype)
except Exception as e:
print(e)

time.sleep(6)

结果