Julia的入门非常简单,尤其是当您熟悉Python时。在本篇文章中,我们将使用约翰霍普金斯大学系统科学与工程中心在其GitHub存储库中提供的Covid-19数据(https://github.com/CSSEGISandData/)。
入门
对于我们的数据分析,我们将会使用一些软件包来简化操作:CSV,DataFrame,日期和可视化。只需输入软件包名称,即可开始使用。
usingCSVusingDataFramesusingDatesusingPlots
如果包还没有添加到您的项目环境中,您可以轻松地添加它们。
usingPkgPkg.add("CSV") Pkg.add("DataFrames") Pkg.add("Dates") Pkg.add("Plots")
读取数据
读取数据只需几个简单的步骤。首先,我们指定CSV文件的URL。其次,我们指定文件在本地机器上的路径。我们将加入目前的工作目录和文件名“confirmed.csv”路径。然后将文件从URL下载到指定的路径。第四个也是最后一个步骤是将CSV文件读入一个名为“df”的DataFrame中。
#Step1: SpecifythefilelocationURL="https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv"#Step2: Specifythepathpath=joinpath(pwd(), "confirmed.csv") #Step3: Downloadthefiledownload(URL, path) #Step4: ReadingtheCSVfileintoaDataFramedf=CSV.File(path) |>DataFrame
让我们看看数据的前10行。
first(df, 10)
整理数据
在本例中,我们不需要省份/州、Lat和Long列。所以我们先把它们放下。通过在select语句后加上感叹号,df会被修改。
select!(df, Not(["Province/State", "Lat", "Long"]))
澳大利亚和其他一些国家有多个行。当我们想要绘制每个国家的数据时,我们必须聚合数据。我们将通过执行split — apply — combine来做到这一点。首先,我们使用groupby函数按国家分割数据。然后我们对每组(即每个国家)的所有日期列应用一个求和函数,因此我们需要排除第一列“国家/地区”。最后,我们将结果合并到一个df中。
grp=groupby(df, "Country/Region") column_names=names(grp) date_columns=column_names[2:end] #selectallcolumnsexceptthefirstcolumn"Country/Region"df=combine(gdf, date_columns .=>sum .=>date_columns)
让我们看看到目前为止我们有什么。
first(df, 10)
我们的df现在(在写入时)有320列。但是,我们希望一列显示日期,另一列显示我们称之为“case”的值。换句话说,我们要把数据帧从宽格式转换成长格式,这里就需要使用堆栈函数。
df=DataFrames.stack( df, Not("Country/Region"), "Country/Region", variable_name="Date", value_name="Cases", )
下面是我们格式化完成的数据,显示最后10行。
last(df, 10)
还有一件事要做。我们需要将de列“Date”从分类字符串格式转换为绘制时间序列的日期格式。
df.Date=Dates.Date.(df.Date|>Array, Dates.DateFormat("m/d/Y")) .+Dates.Year(2000)
这是对最终整理后数据的描述如下。
describe(df)
在可视化数据之前,让我们先将整理后的数据写入磁盘。
CSV.write(joinpath(pwd(), "confirmed_tidy.csv"), df)
可视化数据
在我们的第一张图中,我们将可视化美国Covid-19累计确诊病例。
plot( df[df["Country/Region"] .=="US", :Date], df[df["Country/Region"] .=="US", :Cases], title="Confirmed cases US", xlabel="Date", ylabel="Number of cases", legend=false, )
在一个图中绘制多个国家的时间序列非常简单。首先创建基本块,并为每个国家添加一层。
p=plot( title="Confirmed Cases", xlabel="Date", ylabel="Number of cases", legend= :topleft, ) forcountry= ["US", "Russia", "India"] plot!( df[df["Country/Region"] .==country, :Date], df[df["Country/Region"] .==country, :Cases], label=country, ) endp
在我们的最后一个图中,我们将绘制美国每天的新病例。要做到这一点,我们必须计算连续天数之间的差值。因此,对于时间序列的第一天,这个值将不可用。
bar( df[df["Country/Region"] .=="US", :Date][2:end], diff(df[df["Country/Region"] .=="US", :Cases]), title="Daily Cases US", xlabel="Date", ylabel="Number of cases", color="red", linecolor="white", legend=false, size= (900, 400), )
最后,我们将把图保存到磁盘上。
savefig(joinpath(pwd(), "daily_cases_US.svg"))
总结
在本文中,我们介绍了使用Julia进行数据分析的基础知识。根据我的经验,Julia很像python。这两种语言都易于编写和学习。两者都是开源的。我喜欢Julia的原因是它的高性能以及它与其他编程语言(如Python)的互操作性。我喜欢Python的地方在于它庞大的包集合和庞大的在线社区。