DTeam 技术日志

Doer、Delivery、Dream

Julia 时序分析初体验

胡键 Posted at — Aug 7, 2019 阅读

最近因为准备数据分析方面的工作,特意对时下数据分析领域当红的语言 Julia 做了一番调查。为了让这个调查不止于表面,找点东西对比和练手也是必要。于是,基于这篇 Python 的时序分析教程做了一个简单的练习,主要工作就是将其中的 Python 代码转换成 Julia 。

转换

先来看看转换过程吧,这里只列出关键步骤,文字描述部分请各位自行查看原文。关于其中用到的 Julia 的包如下:

步骤如下:

df = CSV.read("/Users/foxgem/study/datasets/multiTimeline.csv", skipto=2)
head(df)
describe(df, :all)
names!(df, [:month, :diet, :gym, :finance])
set_default_plot_size(40cm, 20cm)
datas = stack(df, [:diet, :gym, :finance])
plot(datas, x=:month, y=:value, color=:variable, Geom.line)

# 如果只是画一条线,可以采用下面的方式
plot(df, x=:month, y=:diet, Geom.line)
time_data = TimeArray(df, timestamp=:month)
# diet
plot(DataFrame(moving(mean, time_data[:diet], 12)), x=:timestamp, y=:diet, Geom.line)
# gym
plot(DataFrame(moving(mean, time_data[:gym], 12)), x=:timestamp, y=:gym, Geom.line)

# 同一图上画两条线
time_datas = stack(DataFrame(merge(moving(mean, time_data[:diet], 12), moving(mean, time_data[:gym], 12))), [:diet, :gym])
plot(time_datas, x=:timestamp, y=:value, color=:variable, Geom.line)
# 一阶差分
plot(DataFrame(diff(time_data[:diet])), x=:timestamp, y=:diet, Geom.line)
matrix = Matrix(df[!,[:diet, :gym, :finance]])
cor(matrix, matrix)
diff_matrix = Matrix(DataFrame(diff(time_data[:diet, :gym, :finance]))[!, [:diet, :gym, :finance]])
cor(diff_matrix, diff_matrix)

至此,以上步骤实现都很顺利,现在到了要计算 autocorrelation 的时候了。很遗憾,即使凭借我引以为豪的搜索能力,依旧没能找到很好的包来完成这一任务。虽然找到一些相关的包,但查过之后觉得并不是太适合。

从对比的角度来讲,到这里,练手项目可以截止了。

特别说明一下,文中 Python 实现用到的包,都是一些熟面孔:numpy、pandas、matplotlib 和 seaborn 。

对比

关于 Julia 语言本身的特点和优势,外面已经有不少文章说明,也不需要我再来强调。这里只从实用性的方面说说我的体验:

那么,这是否意味着应该放弃学习呢?我不这么看,理由如下:

总的说来,Julia 值得一看,尤其是在你复习早已忘光的那些数学知识时。但就目前来讲,应用到产品环境下,还需谨慎对待。


相关文章