Notebook
In [20]:
import numpy as np

from quantopian.pipeline import Pipeline
from quantopian.pipeline import CustomFactor
from quantopian.pipeline.classifiers.morningstar import Sector
from quantopian.pipeline.data import factset
from quantopian.pipeline.data.builtin import USEquityPricing
from quantopian.pipeline.filters import QTradableStocksUS
from quantopian.research import run_pipeline

period_start = '2018-01-01'
period_end = '2018-01-01'

market_cap = factset.Fundamentals.mkt_val.latest

# Add the surprise factor to the pipeline.  
pipe = Pipeline(  
    columns={  
        'sector': Sector(),
        'market_cap': market_cap,
    },  
    #domain=US_EQUITIES,
    screen=QTradableStocksUS(),  
)

# Run the pipeline over a year and print the result.  
data_output = run_pipeline(pipe, period_start, period_end)  

Pipeline Execution Time: 0.25 Seconds
In [21]:
data_output.head()
Out[21]:
market_cap sector
2018-01-02 00:00:00+00:00 Equity(2 [ARNC]) 1.197530e+10 310
Equity(24 [AAPL]) 7.900500e+11 311
Equity(31 [ABAX]) 1.013150e+09 206
Equity(41 [ARCB]) 8.572090e+08 310
Equity(52 [ABM]) 2.749140e+09 310
In [25]:
data_mkt_cap_by_sector = data_output.groupby('sector').sum().dropna()/data_output['market_cap'].sum()
data_mkt_cap_by_sector.sort(columns=['market_cap'], ascending=False, inplace=True)
data_mkt_cap_by_sector
/usr/local/lib/python2.7/dist-packages/ipykernel_launcher.py:2: FutureWarning: sort(columns=....) is deprecated, use sort_values(by=.....)
  
Out[25]:
market_cap
sector
311 0.202036
103 0.178771
206 0.125206
102 0.110135
310 0.110008
205 0.079613
309 0.062756
308 0.038574
104 0.035422
101 0.029876
207 0.027604
In [38]:
import matplotlib.pyplot as plt

y = data_mkt_cap_by_sector['market_cap']
x = range(1, len(data_mkt_cap_by_sector.index)+1)

LABELS = data_mkt_cap_by_sector.index

plt.bar(x, y, width=0.5, align='center', color='navy')
plt.xticks(x, LABELS)
plt.legend(['Market Cap. by sector'], loc='upper left')
Out[38]:
<matplotlib.legend.Legend at 0x7ff43d942510>
In [ ]:
 
In [41]:
import numpy as np
import pandas as pd

from quantopian.pipeline import Pipeline
from quantopian.pipeline import CustomFactor
from quantopian.pipeline.classifiers.morningstar import Sector
from quantopian.pipeline.data import factset
from quantopian.pipeline.data.builtin import USEquityPricing
from quantopian.pipeline.filters import QTradableStocksUS
from quantopian.research import run_pipeline

period_start = '2018-01-01'
period_end = '2018-01-01'

class IndustryAvg(CustomFactor):  
    def compute(self, today, assets, out, fdmtl, sector):  
        df = pd.DataFrame(index=assets, data={"fdmtl": fdmtl[-1],  
                                              "sector": sector[-1]})  
        out[:] = df.groupby("sector").transform(np.mean).values.flatten()

universe = QTradableStocksUS()
        
pe_ratio = factset.Fundamentals.pe_af.latest
pe_ratio_sector_avg = IndustryAvg(inputs=[factset.Fundamentals.pe_af, Sector()], window_length=1, mask=universe)

pipe = Pipeline(  
    columns={  
        'pe_ratio': pe_ratio,
        'pe_ratio_sector_avg': pe_ratio_sector_avg,
    },  
    screen=universe,  
)

data_output = run_pipeline(pipe, period_start, period_end)  

Pipeline Execution Time: 0.25 Seconds
In [43]:
data_output.head(10)
Out[43]:
pe_ratio pe_ratio_sector_avg
2018-01-02 00:00:00+00:00 Equity(2 [ARNC]) 75.1905 36.742390
Equity(24 [AAPL]) 16.7340 101.717171
Equity(31 [ABAX]) 33.7956 67.440669
Equity(41 [ARCB]) 38.9437 36.742390
Equity(52 [ABM]) 643.7120 36.742390
Equity(53 [ABMD]) 107.0090 67.440669
Equity(62 [ABT]) 41.3678 67.440669
Equity(64 [GOLD]) 28.6156 75.303361
Equity(67 [ADSK]) 154.3000 101.717171
Equity(76 [TAP]) 10.4186 56.272595
In [ ]: