tushare 源碼分析 之 fundamental.py

原文鏈接:http://www.30daydo.com/article/74


python的tushare用來做數據分析是一個不錯的工具。

 
下面來具體看看裏面的一些具體的函數是怎麼實現的。
 
fundamental.py  這個文件是獲取企業的基本面信息的。 
 
比如 在主程序 main中,
import tushare as ts
df=ts.get_stock_basics()
那麼我們來看看get_stock_basics函數的實現。
def get_stock_basics():
    """
        獲取滬深上市公司基本情況
    Return
    --------
    DataFrame
               code,代碼
               name,名稱
               industry,細分行業
               area,地區
               pe,市盈率
               outstanding,流通股本
               totals,總股本(萬)
               totalAssets,總資產(萬)
               liquidAssets,流動資產
               fixedAssets,固定資產
               reserved,公積金
               reservedPerShare,每股公積金
               eps,每股收益
               bvps,每股淨資
               pb,市淨率
               timeToMarket,上市日期
    """
    request = Request(ct.ALL_STOCK_BASICS_FILE)
    text = urlopen(request, timeout=10).read()
    text = text.decode('GBK')
    text = text.replace('--', '')
    df = pd.read_csv(StringIO(text), dtype={'code':'object'})
    df = df.set_index('code')
    return df

上面通過urlib2的Request函數獲取url的信息,然後保存爲df格式然後返回。
url路徑在這個變量裏面: 
ct.ALL_STOCK_BASICS_FILE
 
跳轉到這個變量

goto.png

 
ALL_STOCK_BASICS_FILE = '%s%s/static/all.csv'%(P_TYPE['http'], DOMAINS['oss'])
 
P_TYPE 和DOMAINS 是字典變量, 在同一個文件內可以找到他們的值:
P_TYPE = {'http': 'http://', 'ftp': 'ftp://'}

DOMAINS = {'sina': 'sina.com.cn', 'sinahq': 'sinajs.cn',
           'ifeng': 'ifeng.com', 'sf': 'finance.sina.com.cn',
           'vsf': 'vip.stock.finance.sina.com.cn', 
           'idx': 'www.csindex.com.cn', '163': 'money.163.com',
           'em': 'eastmoney.com', 'sseq': 'query.sse.com.cn',
           'sse': 'www.sse.com.cn', 'szse': 'www.szse.cn',
           'oss': '218.244.146.57', 'idxip':'115.29.204.48',
           'shibor': 'www.shibor.org', 'mbox':'www.cbooo.cn'}

 
然後把上面的字典值抽取出來:
 
那麼url就是 http://218.244.146.57/static/all.csv , 你可以試試在瀏覽器裏直接輸入。 看到了嗎?
可以直接下載一個all.csv格式的文件,打開後可以看到裏面很多企業基本面的信息。
 

allcsv.PNG


 
 
獲取業績報表
def get_report_data(year, quarter):
    """
        獲取業績報表數據
    Parameters
    --------
    year:int 年度 e.g:2014
    quarter:int 季度 :1、2、3、4,只能輸入這4個季度
       說明:由於是從網站獲取的數據,需要一頁頁抓取,速度取決於您當前網絡速度
       
    Return
    --------
    DataFrame
        code,代碼
        name,名稱
        eps,每股收益
        eps_yoy,每股收益同比(%)
        bvps,每股淨資產
        roe,淨資產收益率(%)
        epcf,每股現金流量(元)
        net_profits,淨利潤(萬元)
        profits_yoy,淨利潤同比(%)
        distrib,分配方案
        report_date,發佈日期
    """
 
函數主要通過 request = Request(url) 在財經網站獲取信息。
request = Request(ct.REPORT_URL%(ct.P_TYPE['http'], ct.DOMAINS['vsf'], ct.PAGES['fd'],year, quarter, pageNo, ct.PAGE_NUM[1]))
text = urlopen(request, timeout=10).read()

Request裏面的參數是一個可變量,通過循環的列表來獲取所有的公司業績報表。
通過定位參數裏的變量,可以得到隨意一個url, 比如 REPORT_URL = '%s%s/q/go.php/vFinanceAnalyze/kind/mainindex/%s?s_i=&s_a=&s_c=&reportdate=%s&quarter=%s&p=%s&num=%s'
 
那麼url =http://vip.stock.finance.sina.com.cn/q/go.php/vFinanceAnalyze/kind/mainindex/index.phtml?s_i=&s_a=&s_c=&reportdate=2014&quarter=1&p=1&num=38
 
那麼直接在瀏覽器輸入看看 是什麼數據
 

財報.PNG

 
看到了2014年第一節度的每個公司的業績(因爲有些是新股,所以2014的數據顯示不全)
 
 
注意
        df=ts.get_report_data(2016,4)
        #第四季度就是年報

 根據作者的意思,這個參數寫4就是年報。 (可以自己根據網址內容去到新浪財經去驗證)

待續。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章