注:
tushare接口已進(jìn)行更新虎谢,之前的舊接口不可用盟榴,(新接口:https://tushare.pro/)。因此婴噩,課本中的部分操作已不可用擎场。
股票基本面分析實(shí)際操作:
1讳推、數(shù)據(jù)準(zhǔn)備
利用tushare獲取股票的相關(guān)數(shù)據(jù),但因所需的數(shù)據(jù)不在同一個(gè)接口就能讀取到银觅,因此分兩次獲取。(ps:excel的合并沒用Python)
import tushare as ts #引入tushare
ts.set_token('8fd9fa6fe51e5f0a0cbd5b18b6e8ffaea51002f32a1770acb69d9466') #執(zhí)行一次在本機(jī)保存token究驴,以后無需執(zhí)行
pro= ts.pro_api() #初始化接口
data= pro.stock_basic() #讀取相關(guān)股票數(shù)據(jù)
data.to_excel("上市公司基本面1.xlsx") #把數(shù)據(jù)讀入到excel里
df = pro.daily_basic(ts_code='', trade_date='20201210', fields='ts_code,trade_date,total_mv,pe') 讀取total_mv,pe數(shù)據(jù)
df.to_excel("上市公司基本面2.xlsx") #把數(shù)據(jù)讀入到另一個(gè)excel里
2、數(shù)據(jù)類型轉(zhuǎn)換
從excel中讀取數(shù)據(jù)時(shí)洒忧,pandas會將數(shù)據(jù)自動轉(zhuǎn)換為數(shù)值類型。因此熙侍,當(dāng)股票代碼前兩位為00時(shí)履磨,這兩個(gè)數(shù)值就會丟失。故我們應(yīng)將code字段設(shè)置為字符串庆尘。(此處提及的code是股票基本數(shù)據(jù)的一個(gè)字段剃诅,相關(guān)字段見補(bǔ)充)
df = pd.read_excel('上市公司基本面.xlsx',dtype={'code':'str'}) #讀取excel表格,并把code設(shè)置字符串類型
print(df)
df.set_index('ts_code',inplace=True) #將code設(shè)為索引列
結(jié)果:
3驶忌、相關(guān)數(shù)據(jù)
查看股票的基本信息
print(df.shape) #4083只股票
print(df.columns) #顯示數(shù)據(jù)的相關(guān)字段
a = len(df.industry.unique()) #顯示行業(yè)數(shù)
b = len(df.area.unique()) #顯示股票歸屬的省份
c = df.groupby('area').area.count().sort_values(ascending=False) #按地區(qū)統(tǒng)計(jì)上市公司數(shù)量矛辕,體現(xiàn)地區(qū)經(jīng)濟(jì)實(shí)力
print(a)
print(b)
print(c)
結(jié)果:
4、統(tǒng)計(jì)每年股票發(fā)行量并繪制折線圖
year = df.list_date.astype('str').str[:4] #轉(zhuǎn)換為字符串付魔,提取年份
yearnum = df.groupby(year).name.count() #按年份統(tǒng)計(jì)聊品,每年股票發(fā)行量
import matplotlib.pyplot as plt #引入繪圖庫
plt.rcParams['font.sans-serif']=['SimHei'] #設(shè)置中文
yearnum.plot(title='年IPO數(shù)量',marker='o',fontsize=16) #繪制圖像
plt.show()
按年份統(tǒng)計(jì)股票的發(fā)行量,判斷當(dāng)年是牛市還是熊市
結(jié)果:
5几苍、計(jì)算市場的平均市盈率
可以發(fā)現(xiàn)在這個(gè)excel表格中翻屈,有一些股票的pe(市盈率)是顯示為0的,這是因?yàn)檫@些股票是虧損的擦剑,因此在計(jì)算市場平均市盈率時(shí)要剔除這一部分的數(shù)據(jù)妖胀。
pe_mean = df[df.pe > 0].pe.mean() #剔除虧損的股票后計(jì)算均值
print(pe_mean)
pe_mean2 = np.sum(df.pe * df.total_mv)/df.total_mv.sum() #以總市值為權(quán)重求加權(quán)的pe
print(pe_mean2)
6、對每個(gè)版塊進(jìn)行統(tǒng)計(jì)
df['board'] = df.index.str[:2]
d = df.groupby('board').pe.agg([('pe均值','mean'),('股票數(shù)','count')])
print(d)
結(jié)果:
附:
名稱 類型 描述
ts_code str TS代碼
symbol str 股票代碼
name str 股票名稱
area str 所在地域
industry str 所屬行業(yè)
list_date str 上市日期
price float Y 發(fā)行價(jià)格
pe float 市盈率(總市值/凈利潤惠勒, 虧損的PE為空)
total_mv float 總市值 (萬元)
更多的字段可前往Tushare官網(wǎng)查詢:https://waditu.com/