Matplotlib продолжает писать одну и ту же цифру. Мне нужны результаты регрессии в виде отдельных файлов png. Как мне изменить код?

Вот код. В реальном коде есть две другие регрессии, и их результаты также заканчиваются записью на той же фигуре, как показано на изображении ниже.

import pandas as pd
import os
import statsmodels.api as sm
import matplotlib.pyplot as plt

IN_PATH = os.path.join("data", "clean", "imdb_clean.csv")
OUTPUT_DIR = "quantitative analysis"
REVENUE_IMDB_OLS_PATH = os.path.join(OUTPUT_DIR, "revenue_imdb_ols_regression.png")
IMDB_OLS_PATH = os.path.join(OUTPUT_DIR, "imdb_ols_regression.png")

df = pd.read_csv(IN_PATH)
dummy_cols = df.columns[10:-1]


def revenue_imdb_ols_regression(out_path):
    '''Perform OLS regression of movie Revenue on IMBD Rating, Release Year, and genre dummies and create csv'''
    
    x_cols = ["IMDBRating", "ReleaseYear"]
    for col in dummy_cols:
        x_cols.append(col)

    x = df[x_cols]
    y = df["GrossRevenue"]
    
    model = sm.OLS(y, sm.add_constant(x)).fit()
    model_summary = model.summary()
    
    
    plt.rc("figure", figsize=(12, 7))
    plt.text(0.01, 0.05, str(model_summary), {"fontsize": 10}, fontproperties = "monospace")
    plt.axis("off")
    plt.tight_layout()
    plt.savefig(out_path)

def imdb_ols_regression(out_path):
    '''Perform OLS regression of IMBD Rating on genre dummies and create csv'''
    
    x = df[dummy_cols]
    y = df["IMDBRating"]

    model = sm.OLS(y, sm.add_constant(x)).fit()
    model_summary = model.summary()
    
    
    plt.rc("figure", figsize=(12, 7))
    plt.text(0.01, 0.05, str(model_summary), {"fontsize": 10}, fontproperties = "monospace")
    plt.axis("off")
    plt.tight_layout()
    plt.savefig(out_path)

if __name__ == "__main__":
    os.makedirs(OUTPUT_DIR, exist_ok=True)
    revenue_imdb_ols_regression(REVENUE_IMDB_OLS_PATH)
    imdb_ols_regression(IMDB_OLS_PATH)

Matplotlib продолжает писать одну и ту же цифру. Мне нужны результаты регрессии в виде отдельных файлов png. Как мне изменить код?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
def revenue_imdb_ols_regression(out_path):
    '''Perform OLS regression of movie Revenue on IMBD Rating, Release Year, and genre dummies and create csv'''
    
    x_cols = ["IMDBRating", "ReleaseYear"]
    for col in dummy_cols:
        x_cols.append(col)

    x = df[x_cols]
    y = df["GrossRevenue"]
    
    model = sm.OLS(y, sm.add_constant(x)).fit()
    model_summary = model.summary()
    
    
    fig, ax = plt.subplots(figsize=(12, 7))
    
    ax.text(0.01, 0.05, str(model_summary), {"fontsize": 10}, fontproperties = "monospace")
    ax.axis("off")
    plt.tight_layout()
    fig.savefig(out_path)

fig.set_tight_layout(True) вместо plt.tight_layout() может работать лучше - попробуйте

Другие вопросы по теме