My take on Target 🎯
Quick Overview of TGT
Key Insights
  • Current Total Assets of $53.34 which is steadily increasing year to year
  • The current working capital stands at a deficit of $1.65, indicating operational challenges that have been shared by several companies within the peer group.
  • The value of "Buildings and Improvements" currently stands at $34.75, reflecting their expansion of square footage in their stores, demonstrating notable growth.
  • The current Debt-to-Equity (D/E) ratio stands at approximately 1.67, suggesting a relatively modest level of leverage that aligns with industry peers and remains comfortably below the threshold of 2.
  • The Accounts Receivable Turnover for the specified period stands at an impressive 64.38, consistently surpassing the commendable benchmark of 60, demonstrating a strong financial performance.
Lets Plot the Stock 📈
Using Jupyter kernel and python's yfinance, pandas, and matplotlib.
                    import yfinance as yf
                    import pandas as pd
                    import datetime
                    import matplotlib.pyplot as plt
                
                    def get_daily_stock_info(symbol):
                        # Define the start and end dates for your desired one-year period
                        end_date = datetime.datetime.now().date()
                        start_date = end_date - datetime.timedelta(days=365)
        
                        # Fetch the historical data
                        target_data = yf.download(symbol, start=start_date, end=end_date)
                        return target_data
                
Collect the data 📊 ...
                    stock_df = get_daily_stock_info('TGT')
                    stock_df = stock_df.reset_index()
                    stock_df.columns.values[0] = 'Date'
                    stock_df.head()
                
                    colors = {
                        'red': '#ff207c',
                        'grey': '#d0d0d7',
                        'blue': '#207cff',
                        'orange': '#ffa320',
                        'green': '#00ec8b'
                    }
                    config_ticks = {
                        'size': 14,
                        'color': colors['grey'],
                        'labelcolor': colors['grey']
                    }
                    config_title = {
                        'size': 18,
                        'color': colors['grey'],
                        'ha': 'left',
                        'va': 'baseline'
                    }
                    dark_theme = {
                        'font.family': 'Consolas',
                        'axes.facecolor': 'black',
                        'axes.edgecolor': 'gray',
                        'axes.labelcolor': 'white',
                        'text.color': 'white',
                        'xtick.color': 'white',
                        'ytick.color': 'white',
                        'grid.color': 'gray',
                        'figure.facecolor': 'black',
                        'legend.edgecolor': 'gray',
                    }
                    plt.style.use(dark_theme)
                
Establish theming 🎨 ...
                    def format_borders(plot):
                        plot.spines['top'].set_visible(False)
                        plot.spines['left'].set_visible(False)
                        plot.spines['left'].set_color(colors['grey'])
                        plot.spines['bottom'].set_color(colors['grey'])
                
                    def format_legend(plot):
                        plot_legend = plot.legend(loc='upper left', 
                        bbox_to_anchor=(-0.005, 0.95), fontsize=16)    
                        for text in plot_legend.get_texts():
                            text.set_color(colors['grey'])
                
                    def plot_ma(plot, x, y):
                        mov_avg = {
                            'MA (50)': {'Range': 50, 'Color': colors['orange']}, 
                            'MA (100)': {'Range': 100, 'Color': colors['green']}, 
                            'MA (200)': {'Range': 200, 'Color': colors['red']}
                        }
                        
                        for ma, ma_info in mov_avg.items():
                            plot.plot(
                                x, y.rolling(ma_info['Range']).mean(), 
                                color=ma_info['Color'], label=ma, linewidth=2, ls='--'
                            )
                
                    def get_prev_day_info(plot):
                        previous_close = '$' + str("{:,}".format(stock_df['Close'][0])) 
                        previous_volume = str("{:,}".format(stock_df['Volume'][0]))
                        previous_date = str(stock_df['Date'][0].date())    
                        plot.set_title(
                            'Closing price on ' + previous_date + ': ' + 
                             previous_close  + '\nShares traded on ' + previous_date +
                             ': ' + previous_volume, fontdict=config_title, loc='left'
                        )
                
                    def get_charts(stock_data):
                        plt.rc('figure', figsize=(15, 10))
        
                        fig, axes = plt.subplots(2, 1,
                                     gridspec_kw={'height_ratios': [3, 1]})
                        fig.tight_layout(pad=3)
        
                        date = stock_data['Date']
                        close = stock_data['Close']
                        vol = stock_data['Volume']
        
                        plot_price = axes[0]
                        plot_price.plot(date, close, color=colors['blue'],
                                    linewidth=2, label='Price')
        
                        plot_vol = axes[1]
                        plot_vol.bar(date, vol, width=15, color='darkgrey')
        
                        plot_price.yaxis.tick_right()
                        plot_price.tick_params(axis='both', **config_ticks)
                        plot_price.set_ylabel('Price (in USD)', fontsize=14)
                        plot_price.yaxis.set_label_position("right")
                        plot_price.yaxis.label.set_color(colors['grey'])
                        plot_price.grid(axis='y', color='gainsboro',
                                    linestyle='-', linewidth=0.5)
                        plot_price.set_axisbelow(True)
        
                        format_borders(plot_price)
                        format_borders(plot_vol)
        
                        fig.suptitle('TGT Price and Volume', size=36, color=colors['grey'], x=0.24, y=1.10)
                        get_prev_day_info(plot_price)
                        plot_ma(plot_price, date, close)
                        format_legend(plot_price)
                
                    get_charts(stock_df)
                
It appears the stock is mean reverting towards a cheaper value 📉 ...
Observations
Based on the current moving average projections, buying this stock in the next year appears to be a favorable opportunity. The company currently boasts a price-to-earnings (P/E) ratio of approximately 22, making it an attractive value stock. Additionally, with no intangible assets in the picture, the Price to Tangible Book Value (P/TBV) stands at 6.86. A P/TBV ratio exceeding 1 indicates that the market highly values the company's tangible assets, reflecting investor confidence and a willingness to pay a premium for these assets.