我正在开发一个FastAPI应用程序,它使用sci-kit learn生成一些SVG文件,这些文件在上传到AWS-S3进行永久存储之前保存在本地。然而,一旦部署到Heroku上,我意识到它不允许写入本地存储。
如何生成这些文件的示例:
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt
fig = plt.figure()
decision_tree = plot_tree(
pruned_clf_dt, # a decision tree made by sklearn
filled=True,
rounded=True,
class_names= classNames,
feature_names=X.columns)
fig.savefig("example.svg", bbox_inches='tight')
是否有可能做fig.savefig
(到一个变量)保存SVG在内存中或以某种方式保存绘制的树作为SVG到AWS-S3?
答案是肯定的,可以通过使用StringIO,尽管S3要求对象是字符串(?)格式,例如:
import io
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt
fig = plt.figure()
decision_tree = plot_tree(
pruned_clf_dt,
filled=True,
rounded=True,
class_names= classNames,
feature_names=X.columns)
s = io.StringIO()
fig.savefig(s, format = 'svg', bbox_inches='tight')
svg = s.getvalue()
name = "filename.svg"
s3bucket.put_object(
Key=name,
Body=svg,
)