有關Julia中數據分析入門的分步介紹。
Julia的入門非常簡單,尤其是當您熟悉Python時。 在本篇文章中,我們將使用約翰霍普金斯大學系統科學與工程中心在其GitHub存儲庫中提供的Covid-19數據(https://github.com/CSSEGISandData/)。
入門
對於我們的數據分析,我們將會使用一些軟體包來簡化操作:CSV,DataFrame,日期和可視化。 只需輸入軟體包名稱,即可開始使用。
using CSVusing DataFramesusing Datesusing Plots
如果包還沒有添加到您的項目環境中,您可以輕鬆地添加它們。
using PkgPkg.add("CSV")Pkg.add("DataFrames")Pkg.add("Dates")Pkg.add("Plots")
讀取數據
讀取數據只需幾個簡單的步驟。首先,我們指定CSV文件的URL。其次,我們指定文件在本地機器上的路徑。我們將加入目前的工作目錄和文件名「confirmed.csv」路徑。然後將文件從URL下載到指定的路徑。第四個也是最後一個步驟是將CSV文件讀入一個名為「df」的DataFrame中。
# Step 1: Specify the file locationURL = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv"# Step 2: Specify the pathpath = joinpath(pwd(), "confirmed.csv")# Step 3: Download the filedownload(URL, path)# Step 4: Reading the CSV file into a DataFramedf = 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] # select all columns except the first column "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,)for country = ["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的地方在於它龐大的包集合和龐大的在線社區。
作者:R e n é
deephub翻譯組