Sua visita nos ajuda a continuar oferecendo o melhor para você! hv no np nq nr ns nt nu nv nw nx ny nz oa ob oc od gn bk">Imagine isso: você tem um monte de gráficos de risca e está esperançoso de que há pelo menos uma tendência escondida em qualquer lugar em todos esses dados. Quer você esteja rastreando vendas em milhares de produtos da sua empresa ou mergulhando em dados do mercado de ações, seu objetivo é deslindar essas subtendências e fazê-las se destacarem na sua visualização. Vamos explorar algumas técnicas para ajudar você a fazer exatamente isso.
Os gráficos de linhas de densidade são uma técnica de plotagem inteligente introduzida por Dominik Moritz e Danyel Fisher em seu cláusula, Visualizando uma série temporal de um milhão com o gráfico de risca de densidade. Nascente método transforma vários gráficos de linhas em mapas de calor, revelando áreas onde as linhas se Sua visita nos ajuda a continuar oferecendo o melhor para você! mais.
Quando aplicamos gráficos de linhas de densidade aos dados sintéticos que mostramos anteriormente, os resultados ficam assim:
Essa implementação nos permite ver onde nossas tendências estão aparecendo e identificar as subtendências que tornam esses dados interessantes.
Para leste exemplo usamos a livraria Python PyDLC por Charles L. Berube. A implementação é bastante simples, graças ao design amigável da livraria.
plt.figure(figsize=(14, 14))
im = dense_lines(synth_df.to_numpy().T,
x=synth_df.índice.astype('int64'),
cmap='viridis',
ny=100,
y_pad=0.01
)plt.ylim(-25, 25)
plt.axhline(y=0, color='white', linestyle=':')
plt.show()
Ao usar gráficos de linhas de densidade, tenha em mente que parâmetros uma vez que ny
e y_pad
pode exigir alguns ajustes para obter os melhores resultados.
Essa técnica não é tão amplamente discutida e não tem um nome universalmente reconhecido. No entanto, é essencialmente uma variação de “gráficos de densidade de risca” ou “visualizações de densidade de risca”, onde usamos linhas mais grossas com baixa opacidade para revelar áreas de sobreposição e densidade.
Podemos identificar claramente o que parecem ser duas tendências distintas e observar o cimo proporção de sobreposição durante os movimentos descendentes das ondas senoidais. No entanto, é um pouco mais complicado indicar onde o efeito é mais potente.
O código para essa abordagem também é bastante simples:
plt.figure(figsize=(14, 14))for column in synth_df.columns:
plt.plot(synth_df.índice,
synth_df[column],
alpha=0.1,
linewidth=2,
label=ticker,
color='black'
)
Cá, os dois parâmetros que podem exigir qualquer ajuste são alpha
e linewidth
.
Imagine que estamos buscando subtendências nos retornos diários de 50 ações. O primeiro passo é extrair os dados e calcular os retornos diários.
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as snsstock_tickers = [
'AAPL', 'MSFT', 'GOOGL', 'AMZN', 'TSLA', 'META', 'NVDA', 'BRK-B', 'UNH', 'V',
'HD', 'MA', 'KO', 'DIS', 'PFE', 'NKE', 'ADBE', 'CMCSA', 'NFLX', 'CSCO',
'INTC', 'AMGN', 'COST', 'PEP', 'TMO', 'AVGO', 'QCOM', 'TXN', 'ABT', 'ORCL',
'MCD', 'MDT', 'CRM', 'UPS', 'WMT', 'BMY', 'GILD', 'BA', 'SBUX', 'IBM',
'MRK', 'WBA', 'CAT', 'CVX', 'T', 'MS', 'LMT', 'GS', 'WFC', 'HON'
]
start_date = '2024-03-01'
end_date = '2024-09-01'
percent_returns_df = pd.DataFrame()
for ticker in stock_tickers:
stock_data = yf.download(ticker, start=start_date, end=end_date)
stock_data = stock_data.fillna(method='ffill').fillna(method='bfill')
if len(stock_data) >= 2:
stock_data['Percent Daily Return'] = stock_data['Close'].pct_change() * 100
stock_data['Ticker'] = ticker
percent_returns_df = pd.concat([percent_returns_df, stock_data[['Ticker', 'Percent Daily Return']]], axis=0)
percent_returns_df.reset_index(inplace=True)
display(percent_returns_df)
Podemos logo plotar os dados.
pivot_df = percent_returns_df.pivot(índice='Date', columns='Ticker', values='Percent Daily Return')pivot_df = pivot_df.fillna(method='ffill').fillna(method='bfill')
plt.figure(figsize=(14, 14))
sns.lineplot(data=pivot_df, dashes=False)
plt.title('Percent Daily Returns of Top 50 Stocks')
plt.xlabel('Date')
plt.ylabel('Percent Daily Return')
plt.legend(title='Stock Ticker', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.grid(True)
plt.tight_layout()
O Gráfico de Risco de Densidade enfrenta alguns desafios com esses dados devido à sua natureza esporádica. No entanto, ele ainda fornece insights valiosos sobre tendências gerais do mercado. Por exemplo, você pode identificar períodos em que as áreas mais densas correspondem a quedas significativas, destacando dias difíceis no mercado.
plt.figure(figsize=(14, 14))
im = dense_lines(pivot_df[stock_tickers].to_numpy().T,
x=pivot_df.índice.astype('int64'),
cmap='viridis',
ny=200,
y_pad=0.1
)plt.axhline(y=0, color='white', linestyle=':')
plt.ylim(-10, 10)
plt.show()
No entanto, descobrimos que a técnica de transparência tem um desempenho significativamente melhor para esse problema em pessoal. As quedas de mercado que mencionamos anteriormente se tornam muito mais claras e discerníveis.
plt.figure(figsize=(14, 14))for ticker in pivot_df.columns:
plt.plot(pivot_df.índice,
pivot_df[ticker],
alpha=0.1,
linewidth=4,
label=ticker,
color='black'
)
Ambas as estratégias têm seus próprios méritos e pontos fortes, e a melhor abordagem para seu trabalho pode não ser óbvia até que você tenha tentado ambas. Espero que uma dessas técnicas seja útil para seus projetos futuros. Se você tiver outras técnicas ou casos de uso para mourejar com gráficos de linhas massivas, adoraria saber mais sobre elas!
Obrigado pela leitura e tome desvelo.
Tags:
Crédito: Manancial Original