julia 对.csv文件的操作
首先,让我们从github下载一个我们可以使用的csv文件。
注意:download取决于外部工具,如curl,wget或fetch。 我使用的是wget
wget https://raw.githubusercontent.com/nassarhuda/easy_data/master/programming_languages.csv
我们可以在Julia中使用shell命令,在ls
前面加上分号即可。
;ls
还有我们下载的*.csv文件!
默认情况下,readcsv
将使用.csv
文件中的数据填充数组。如果我们将关键字参数header
为true
,得到第二个输出数组。
P,H = readcsv("programminglanguages.csv",header=true)
println(P)
这里我们编写一个小函数。
function language_created_year(P,language::String)
loc = findfirst(P[:,2].==language)
return P[loc,1]
end
language_created_year(P,"Julia")
language_created_year(P,"julia")
但这并不会返回你想要的东西,但幸运的是,Julia对字符串操作非常简单!
function language_created_year_v2(P,language::String)
loc = findfirst(lowercase.(P[:,2]).==lowercase.(language))
return P[loc,1]
end
language_created_year_v2(P,"julia")
在Julia中,读取和写入文件也非常简单。
要写入文件,我们可以使用writecsv
或writedlm
。
可以将相同的数据写入具有不同分隔符的文件中。
writedlm("programming_languages_data.txt", P, '-')
我们现在可以使用shell命令检查浏览文件这是否有效,
;head -10 programming_languages_data.txt
并检查是否可以使用readdlm
正确读取新文本文件。
P_new_delim = readdlm("programming_languages_data.txt", '-');
P == P_new_delim
使用字典
让我们尝试以字典格式存储上述数据!
首先,先初始化一个空字典
dict = Dict{Integer,Vector{String}}()
在这里,可以设置dict
接受整数作为键和字符串向量作为值。
但是,我们可以在不提供此信息的情况下初始化一个空字典(取决于我们的应用程序)。
dict2 = Dict()
dict2
允许输入任何类型的键和值!
现在,让我们将字典填充年份作为键和向量,将每年创建的所有编程语言作为其值。
for i = 1:size(P,1)
year,lang = P[i,:]
if year in keys(dict)
dict[year] = push!(dict[year],lang)
else
dict[year] = [lang]
end
end
现在,可以选择任何一年,并找到当年发明的编程语言
dict[2003]
Julia 操作DataFrames!
Shout out to R fans!
在Julia中使用数据的另一种方法是使用DataFrame。
这需要加载DataFrames包
using DataFrames
df = DataFrame(year = P[:,1], language = P[:,2])
可以按标题名称或列索引访问列。
在这种情况下,df[1]
相当于df[:year]
。
请注意,如果我们想按标题名称访问列,在标题名称前面加冒号!
,在Julia中,这意味着标题名称被视为符号。
地方[:year]
DataFrames
在处理数据时提供一些方便的功能
首先,它可以使用missing
类型。前面有专门讲解
a = missing
typeof(a)
数字与missing
相加时
a+1
describe(df)
DataFrames
中的describe
提供有关数据框中每列的快速统计信息
describe(df)
使用RDatasets
我们可以使用RDatasets
来处理预先存在的数据集
using RDatasets
iris = dataset("datasets", "iris")
请注意,加载的数据dataset
将存储为DataFrame
。
typeof(iris)
describe
显示df
中的一些详细信息!
describe(iris)
使用DataArrays
DataArray
按如下方式创建
using DataArrays
foods = @data(["apple", "cucumber", "tomato", "banana"])
calories = @data([missing,47,22,105])
typeof(calories)
mean(calories)
缺少价值观毁了一切!
幸运的是我们可以忽略它们的skipmissing
!
mean(skipmissing(calories))
Oh WAIT! Detour。
describe(calories)
请注意,typeof(calories)
等同于DataArrays.DataArray{String,1}
我们可以轻松地将其转换为常规的朱莉亚矢量,试试这个convert
:
newcalories = convert(Vector,calories)
这不起作用,因为我们没有说明如何处理NA
值!
newcalories = convert(Vector,calories,0) #用0替换每个缺失
prices = @data([0.85,1.6,0.8,0.6,])
dataframe_calories = DataFrame(item=foods,calories=calories)
dataframe_prices = DataFrame(item=foods,price=prices)
我们还可以将两个数据帧使用join
放在一起
DF = join(dataframe_calories,dataframe_prices,on=:item)
使用FileIO
using FileIO
julialogo = download("https://avatars0.githubusercontent.com/u/743164?s=200&v=4","julialogo.png")
再次,让我们检查一下这个下载是否有效!
;ls
接下来,重命名,存储为.png文件
X1 = load("julialogo.png")
@show typeof(X1);
@show size(X1);
Julia 支持的文件类型
在Julia中,支持许多文件类型,因此您无需在阅读之前将文件从其他语言传输到文本文件。
一些实现此目的的包: MAT CSV NPZ JLD FASTAIO
让我们尝试使用MAT来编写一个存储矩阵的文件。
using MAT
matfile = matopen("densematrix.mat", "w")
write(matfile, "A", A)
close(matfile)
现在尝试用MATLAB打开densematrix.mat
!
newfile = matopen("densematrix.mat")
read(newfile,"A")
names(newfile)
close(newfile)
先写到这里,明天继续