R、python的文件夹操作

Python017

R、python的文件夹操作,第1张

Python OS模块

1.重命名:os.rename(old, new)

2.删除:os.remove(file)

3.列出目录下的 文件 :os.listdir(path)

4.获取当前工作目录:os.getcwd()

5.改变工作目录:os.chdir(newdir)

6.创建多级目录:os.makedirs(r"c:/python /test")

7.创建单个目录:os.mkdir("test")

8.删除多个目录:os.removedirs(r"c:/python") #删除所给路径最后一个目录下所有空目录。

9.删除单个目录:os.rmdir("test")

10.获取文件属性:os.stat(file)

11.修改文件权限与时间戳:os.chmod(file)

12.执行操作系统 命令:os.system("dir")

13.启动新进程:os.exec(), os.execvp()

14.在后台执行程序:osspawnv()

15.终止当前进程:os.exit(), os._exit()

16.分离文件名:os.path.split(r"c:/python/ hello.py ") –>("c://python", " hello.py ")

17.分离扩展名:os.path.splitext(r"c:/python/ hello.py ") –>("c://python//hello", ".py")

18.获取路径名:os.path.dirname(r"c:/python/ hello.py ") –>"c://python"

19.获取文件名:os.path.basename(r"r:/python/hello.py") –>"hello.py"

20.判断文件是否存在:os.path.exists(r"c:/python/hello.py") –>True

21.判断是否是绝对路径:os.path.isabs(r"./python/") –>False

22.判断是否是目录:os.path.isdir(r"c:/python") –>True

23.判断是否是文件:os.path.isfile(r"c:/python/hello.py") –>True

24.判断是否是链接文件:os.path.islink(r"c:/python/hello.py") –>False

25.获取文件大小:os.path.getsize(filename)

26.*******:os.ismount("c://") –>True

27.搜索目录下的所有文件:os.path.walk()

[2.shutil]

1.复制单个文件:shultil.copy(oldfile, newfle)

2.复制整个目录树:shultil.copytree(r"./setup", r"./backup")

3.删除整个目录树:shultil.rmtree(r"./backup")

[3.tempfile]

1.创建一个唯一的临时文件:tempfile.mktemp() –>filename

2.打开临时文件:tempfile.TemporaryFile()

[4.StringIO] #cStringIO是StringIO模块的快速实现模块

1.创建内存 文件并写入初始数据 :f = StringIO.StringIO("Hello world!")

2.读入内存文件数据:print f.read() #或print f.getvalue() –>Hello world!

3.想内存文件写入数据:f.write("Good day!")

4.关闭内存文件:f.close()

rm(list=ls())

path = 'J:/lab/EX29 --在R语言中进行文件(夹)操作'

setwd(path)

cat("file A\n", file="A") #创建一个文件A,文件内容是'file A','\n'表示换行,这是一个很好的习惯

cat("file B\n", file="B") #创建一个文件B

file.append("A", "B") #将文件B的内容附到A内容的后面,注意没有空行

file.create("A") #创建一个文件A, 注意会覆盖原来的文件

file.append("A", rep("B", 10)) #将文件B的内容复制10便,并先后附到文件A内容后

file.show("A") #新开工作窗口显示文件A的内容

file.copy("A", "C") #复制文件A保存为C文件,同一个文件夹

dir.create("tmp") #创建名为tmp的文件夹

file.copy(c("A", "B"), "tmp") #将文件夹拷贝到tmp文件夹中

list.files("tmp") #查看文件夹tmp中的文件名

unlink("tmp", recursive=F) #如果文件夹tmp为空,删除文件夹tmp

unlink("tmp", recursive=TRUE) #删除文件夹tmp,如果其中有文件一并删除

file.remove("A", "B", "C") #移除三个文件

“随机游走”(random walk)是指基于过去的表现,无法预测将来的发展步骤和方向。应用到股市上,则意味着股票价格的短期走势不可预知,意味着投资咨询服务、收益预测和复杂的图表模型全无用处。在华尔街上,“随机游走”这个名词是个讳语,是学术界杜撰的一个粗词,是对专业预言者的一种侮辱攻击。若将这一术语的逻辑内涵推向极致,便意味着一只戴上眼罩的猴子,随意向报纸的金融版面掷一些飞镖,选出的投资组合就可与投资专家精心挑选出的一样出色。

1. Average Methond 平均法:预测未来值等于历史值的平均值

2. Naive Method 傻瓜法:预测未来值等于最后一个样本【对经济、金融时间序列适用】,也称作 random walk forecasts

【补充小知识:ARIMA模型】

3. Seasonal naive method 季节性傻瓜法:适用于强季节性数据,取同上一年同季节的最后一个观测值。

4. Drift method 趋势|漂流法:在傻瓜法的基础上增加一个变量使预测值随着时间变化增加或减少,变量值为历史变量的平均值。

例子:

a. 应用前三种方法看季节性啤酒产量的预测数据

b. 非季节性方式预测谷歌每日收盘股价

这些简单的办法通常是被作为benchmarks而非实际选择的方式。

通过调整历史数据可以简化预测工作。以下有四种数据调整方式:

>monthdays() 可以计算每个月或季度的天数

对任何受人数影响的数据都可以调整为人均值(per-capita data)。例如考虑某地医疗资源的变化情况,可以看每千人床位数的变化,如此可以看是否是真的资源增长还是仅由于当地总人口增加。

受金钱影响的数据最好在建模前进行调整。例如平均新房费用会由于过去几十年的通货膨胀而增长。为了做此调整需用到price index(物价指数)————参考cpi

当数据呈现出序列级上升或下降的变化时,则需要进行数学转换。

1. 取对数

2. 幂变换(power transformation):平方根|立方根

3. Box-cox transformation 

选定转换方式后,完成对模型数据的预测,需要即将预测结果在反向转换为真实数据。反向box-cox转换公式:

幂变换的特点:

1. 原始变量需大于0,若小于0则应对所有变量加一个常数使得yt大于0。

2. 选择简单的λ值,便于理解

3. 预测结果与λ的值相关性较小

4. 通常不需要转换,转换后对预测结果影响不大,但对于预测区间有较大影响

通过数学转化预测后反转的预测值不是预测分布的均值,通常是中位数。(例如,当需要将不同地区的销售预测值加总预估整个国家的预估值时,只能用均值加总而不能用中位数加总)。对于box-cox转换,均值的反转公式为

中位数和均值间的差异即为bias(偏差值),当需要用均值而非中位数时,我们说某一时点的预估值已经进行过偏值调整。

对于大多数时间序列模型,残值是实际值与拟合值之间的差值,可用来检测模型是否足够抓住了数据的信息。好的预测模型的残值有以下两个特点:1. 残值不相关 【不相关证明残值中还有应该用于预估的信息,解决方式见chapter9】;2. 均值为0 【不为0证明预估值时有偏差的,如偏差值为m,则解决方案是对所有预估值加偏差值m】;3. 有连续变量;4. 符合正态分布。

1. Box-Pierce test

2. Ljung-Box test

checkresiduals()可用于检测残值情况

通常在选择模型时会预留出两组,分为实验组(test)和训练组(training),训练组(training)是用来预估预测方法的准确性。通常实验组的大小是总样本的20%。理想状态下,实验组应该至少覆盖所预估的最远时段,但仍需注意:1. 能很好的拟合训练集的模型并不一定能很好的做预测;2. 最佳组合的模型应该满足包含足够的变量;3. 过度拟合模型和未能判别系统性pattern一样失败。

1. window(),可以用于提取部分时间序列

2. subset(),可以通过索引去选择分组

3.head()| tail(),可以取前几个或后几个观测值

预估偏差指预估值与实际值之间的差值。 ,其中训练集(training data)数据为 ,测试集(test data)数据为 。

预估偏差和残值的差异:1.残值是基于训练集计算的,而预估偏差是基于测试集计算的;2. 残值是基于一步测算(one-step forecast)的,而预估偏差则是涉及到多步预估(multi-step forecasts)

最常用的两个规模性检验是基于绝对偏差或平方偏差:

1. MAE(Mean absolute error)平均绝对偏差=

,范围[0,+∞),当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。

2. RMSE(Root mean squared error)均方根偏差=

,范围[0,+∞),当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。

通常比较一个单一时间序列预估方式或同单位下的几个时间序列,会选择用MAE。降低MAE的方法可预估中位数,降低RMSE则可预估平均值。

,不需考虑单位,因而常被用于比较不同数据集中的预测表现。常用的方式是:

MAPE(Mean absolute percentage error)平均绝对百分比误差=

,范围[0,+∞),MAPE 为0%表示完美模型,MAPE 大于 100 %则表示劣质模型。

可以看到,MAPE跟MAE很像,就是多了个分母,注意点:当真实值有数据等于0时,存在分母0除问题,该公式不可用!

由于其对负偏差的惩罚更高,因而又引入了:

sMAPE(symmetric MAPE)对称平均绝对百分比误差=

注意点:当真实值有数据等于0,而预测值也等于0时,存在分母0除问题,该公式不可用!

用于比较不同单位的不同序列的预估效果。

·非季节性时间序列,一个通用的方式是运用naive forecast的方式定义一个比例偏差值: ,当qj小于1时,则该方法比基于训练集用naive forecast计算的值要更优,反之当qj大于1时则更差。

·季节性时间序列,是运用seasonal forecast的方式定义比例偏差:

MASE(Mean absolute scaled)=

【预估评价指标: 预测评价指标RMSE、MSE、MAE、MAPE、SMAPE_人工智能_藏知阁-CSDN博客 】

####example

accuracy() :Returns range of summary measures of the forecast accuracy. If x is provided, the function measures test set forecast accuracy based on x-f. If x is not provided, the function only produces training set accuracy measures of the forecasts based on f["x"]-fitted(f). All measures are defined and discussed in Hyndman and Koehler (2006).

tsCV()可以用来做时间序列交叉验证

【参考天元大神的小笔记: R语言时间序列分析(七):模型准确度估计 - 知乎 】

预测区间的通用公式:

是h-step预估值的正态分布的预计值,c的对应关系是:

###R中forecast包里常用函数: