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)
data_output.head()
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
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')
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)
data_output.head(10)