循环遍历文件夹以生成并保存每个文件的图形
Looping through folder to generate and save graph for each file
下面是我从 dataex
创建的 csv
文件之一,用于重现示例:
clear
input str32 eventname str10 scrapedate float(average thpercentile v5 v6)
"EventName" "2015-12-15" 136.9255 83.2 104.875 148.75
"EventName" "2015-12-16" 130.4555 78.55 99 138.22
"EventName" "2015-12-17" 123.66705 72.7 90.25 131.2
"EventName" "2015-12-18" 116.45757 64.855 78.55 119.5
"EventName" "2015-12-19" 108.63446 60.56333 72.7 119.07333
"EventName" "2015-12-20" 94.97125 55.15 69.77 112.48
end
感谢对我的 的回答,我能够调整我的代码以循环遍历目录 "I:\Games CSVs\"
并使用以下命令读取每个 csv
文件:
insheet using "`file'", comma clear
然后创建一个新变量,将数据格式更改为我想要的格式并生成折线图。
这是我的代码:
local foodir "I:\Games CSVs\"
local files : dir "`foodir'" files "*.csv"
cd "`foodir'"
local i = 0
foreach file of local files {
local ++i
insheet using "`file'", comma clear
generate ScrapeDate = daily(scrapedate, "YMD")
format ScrapeDate %tdYY-NN-DD
line average thpercentile v5 v6 ScrapeDate, name("graph`i'", replace) ///
scale(*.7) ///
local filename = substr("`file'", 1, strlen("`file'")-4) ///
title(filename) ///
ytitle("Price in US$") ///
legend(size(small))
}
有问题的行如下:
local filename = substr("`file'", 1, strlen("`file'")-4)`
title(filename)
我也试过:
generate filename = substr("`file'", 1, strlen("`file'")-4)`
title(filename)
我有以下问题:
- 文件的标题为
filename.csv
,我希望删除后缀。
- 我也不知道如何将图表保存在磁盘上。
所有的图(我有52张)都在一个接一个的闪烁。这对我来说是理想的,如果我可以将它们全部保存在一个文件夹中(I:\Graphs
),其中 filename
与 filename.csv
相同,而不是在这里保存为 filename.png
或 filename.jpeg
或任何我可以打开的格式。
我已阅读文档。我相信 graph save mygraph
会替换图表(如果它存在),并且由于我在目录中循环,所以每次都会替换图表,因为我没有更改图表的名称。
您需要正确定义局部宏filename
后才能使用。您还需要在 line
命令中使用 saving()
和 nodraw
选项:
local foodir "I:\Games CSVs\"
local foosavedir "I:\Graphs\"
local files : dir "`foodir'" files "*.csv"
cd "`foodir'"
local i = 0
foreach file of local files {
local ++i
insheet using "`file'", comma clear
generate ScrapeDate = daily(scrapedate, "YMD")
format ScrapeDate %tdYY-NN-DD
local filename = substr("`file'", 1, strrpos("`file'", ".")-1)
line average thpercentile v5 v6 ScrapeDate, name("graph`i'", replace) ///
saving("`foosavedir'`filename'.gph", replace) nodraw scale(*.7) title("`filename'") ///
ytitle("Price in US$") legend(size(small))
}
请注意,通过这种方式,文件将以 Stata 的 gph
本机格式保存,这始终是最好的做法,以便您可以在以后根据需要进行编辑。
如果您还希望它们采用不同的图形格式,例如 png
,那么您需要在 line
命令后导出它们中的每一个:
graph export "`foosavedir'`filename'.png", name("graph`i'")
在这种情况下,您必须没有在line
中指定nodraw
选项。
如果指定选项 replace
,并且 saved/exported 文件的名称与现有文件冲突,则图表将被替换。如果文件名是唯一的,你就不应该有这个问题。
下面是我从 dataex
创建的 csv
文件之一,用于重现示例:
clear
input str32 eventname str10 scrapedate float(average thpercentile v5 v6)
"EventName" "2015-12-15" 136.9255 83.2 104.875 148.75
"EventName" "2015-12-16" 130.4555 78.55 99 138.22
"EventName" "2015-12-17" 123.66705 72.7 90.25 131.2
"EventName" "2015-12-18" 116.45757 64.855 78.55 119.5
"EventName" "2015-12-19" 108.63446 60.56333 72.7 119.07333
"EventName" "2015-12-20" 94.97125 55.15 69.77 112.48
end
感谢对我的 "I:\Games CSVs\"
并使用以下命令读取每个 csv
文件:
insheet using "`file'", comma clear
然后创建一个新变量,将数据格式更改为我想要的格式并生成折线图。
这是我的代码:
local foodir "I:\Games CSVs\"
local files : dir "`foodir'" files "*.csv"
cd "`foodir'"
local i = 0
foreach file of local files {
local ++i
insheet using "`file'", comma clear
generate ScrapeDate = daily(scrapedate, "YMD")
format ScrapeDate %tdYY-NN-DD
line average thpercentile v5 v6 ScrapeDate, name("graph`i'", replace) ///
scale(*.7) ///
local filename = substr("`file'", 1, strlen("`file'")-4) ///
title(filename) ///
ytitle("Price in US$") ///
legend(size(small))
}
有问题的行如下:
local filename = substr("`file'", 1, strlen("`file'")-4)`
title(filename)
我也试过:
generate filename = substr("`file'", 1, strlen("`file'")-4)`
title(filename)
我有以下问题:
- 文件的标题为
filename.csv
,我希望删除后缀。 - 我也不知道如何将图表保存在磁盘上。
所有的图(我有52张)都在一个接一个的闪烁。这对我来说是理想的,如果我可以将它们全部保存在一个文件夹中(I:\Graphs
),其中 filename
与 filename.csv
相同,而不是在这里保存为 filename.png
或 filename.jpeg
或任何我可以打开的格式。
我已阅读文档。我相信 graph save mygraph
会替换图表(如果它存在),并且由于我在目录中循环,所以每次都会替换图表,因为我没有更改图表的名称。
您需要正确定义局部宏filename
后才能使用。您还需要在 line
命令中使用 saving()
和 nodraw
选项:
local foodir "I:\Games CSVs\" local foosavedir "I:\Graphs\" local files : dir "`foodir'" files "*.csv" cd "`foodir'" local i = 0 foreach file of local files { local ++i insheet using "`file'", comma clear generate ScrapeDate = daily(scrapedate, "YMD") format ScrapeDate %tdYY-NN-DD local filename = substr("`file'", 1, strrpos("`file'", ".")-1) line average thpercentile v5 v6 ScrapeDate, name("graph`i'", replace) /// saving("`foosavedir'`filename'.gph", replace) nodraw scale(*.7) title("`filename'") /// ytitle("Price in US$") legend(size(small)) }
请注意,通过这种方式,文件将以 Stata 的 gph
本机格式保存,这始终是最好的做法,以便您可以在以后根据需要进行编辑。
如果您还希望它们采用不同的图形格式,例如 png
,那么您需要在 line
命令后导出它们中的每一个:
graph export "`foosavedir'`filename'.png", name("graph`i'")
在这种情况下,您必须没有在line
中指定nodraw
选项。
如果指定选项 replace
,并且 saved/exported 文件的名称与现有文件冲突,则图表将被替换。如果文件名是唯一的,你就不应该有这个问题。