Julia语言数据预处理
本文简单介绍拿Julia语言进行数据预处理,数据R语言和python的都应该有感觉,就是R和python做数据预处理非常方便。R方面主要是有dplyr这个包,或者是datatable这个包。python对应的pandas这个库,因此这几个包极大地促进了数据预处理。juila语言其实在这个方面也是非常强的,因为julia本身就是吸收了python,R,matlab等一系列语言发展而来的,虽然目前还没有太流行,但是未来很有发展潜力。我自己感觉一个很重要的原因就是julia语言在优化领域存在一些非常强劲的包。大家看,python有了numpy,pandas,sciklearn等等,R也有大量的机器学习,以及统计学方面的包,但是呢,这两个软件优化方面的东西还是少了一些,当然也存在这方面的包,比如python有pymo。R也有对应的优化包,但是呢,不是太强劲,我们希望R,python在优化方面也有像机器学习那么强悍的几个包。julia语言弥补了这个不足,它在优化方面非常突出。比matlab要好用很多,当然我们今天不是讲julia在优化方面的应用,主要是做一些数据预处理的工作。
julia这个语言里边核心的数据结构主要是array和DataFrame,数据预处理主要是利用dataframe的一些函数进行
#调用DataFrames包
using Dataframs
#读取csv文件
#设置文件地址
file="D:/Rdata/exercise.csv"
#读取数据
data=readtable(file)
#查看数据的前五行,用head
6×8 DataFrames.DataFrame
│ Row │ weekend │ num_child │ distance │ rides │ games │ wait │ clean │
├─────┼─────────┼───────────┼──────────┼───────┼───────┼──────┼───────┤
│ 1 │ "yes" │ 0 │ 114.648 │ 87 │ 73 │ 60 │ 89 │
│ 2 │ "yes" │ 2 │ 27.0141 │ 87 │ 78 │ 76 │ 87 │
│ 3 │ "no" │ 1 │ 63.301 │ 85 │ 80 │ 70 │ 88 │
│ 4 │ "yes" │ 0 │ 25.9099 │ 88 │ 72 │ 66 │ 89 │
│ 5 │ "no" │ 4 │ 54.7183 │ 84 │ 87 │ 74 │ 87 │
│ 6 │ "no" │ 5 │ 22.6793 │ 81 │ 79 │ 48 │ 79 │
│ Row │ overall │
├─────┼─────────┤
│ 1 │ 47 │
│ 2 │ 65 │
│ 3 │ 61 │
│ 4 │ 37 │
│ 5 │ 68 │
│ 6 │ 27 │
#查看最后五行
tail(data)
6×8 DataFrames.DataFrame
│ Row │ weekend │ num_child │ distance │ rides │ games │ wait │ clean │
├─────┼─────────┼───────────┼──────────┼───────┼───────┼──────┼───────┤
│ 1 │ "no" │ 5 │ 41.4701 │ 83 │ 84 │ 77 │ 90 │
│ 2 │ "no" │ 0 │ 11.0526 │ 90 │ 72 │ 68 │ 90 │
│ 3 │ "yes" │ 0 │ 8.18774 │ 91 │ 83 │ 82 │ 91 │
│ 4 │ "no" │ 2 │ 45.1774 │ 95 │ 92 │ 85 │ 93 │
│ 5 │ "no" │ 3 │ 27.0884 │ 83 │ 83 │ 80 │ 88 │
│ 6 │ "no" │ 1 │ 38.4088 │ 86 │ 88 │ 77 │ 85 │
│ Row │ overall │
├─────┼─────────┤
│ 1 │ 55 │
│ 2 │ 46 │
│ 3 │ 47 │
│ 4 │ 71 │
│ 5 │ 54 │
│ 6 │ 62 │
#若想查看前n行,直接在head里边,加入数字即可,比如查看前十行,就是head(data,10)
#查看数据框中所有变量
names(data)
8-element Array{Symbol,1}:
:weekend
:num_child
:distance
:rides
:games
:wait
:clean
:overall
#查看数据框的维度
size(data)
(500, 8)
#查看每个变量的数据类型
showcols(data)
500×8 DataFrames.DataFrame
│ Col # │ Name │ Eltype │ Missing │
├───────┼───────────┼─────────┼─────────┤
│ 1 │ weekend │ String │ 0 │
│ 2 │ num_child │ Int64 │ 0 │
│ 3 │ distance │ Float64 │ 0 │
│ 4 │ rides │ Int64 │ 0 │
│ 5 │ games │ Int64 │ 0 │
│ 6 │ wait │ Int64 │ 0 │
│ 7 │ clean │ Int64 │ 0 │
│ 8 │ overall │ Int64 │ 0 │
#从前面来看,貌似julia和R,python很相似,但是在查看数据框中某个变量时,julia用的是:符号,比如要查看weekend变量,如下:
data[:weekend]
500-element DataArrays.DataArray{String,1}:
"yes"
"yes"
"no"
"yes"
"no"
"no"
"yes"
"no"
"no"
"yes"
⋮
"yes"
"yes"
"no"
"no"
"no"
"yes"
"no"
"no"
"no"
#当然也可以这样data[1],也就是提取第一列,python的话,就是提取第一行,但是julia是提取第一列。
data[1]
#如果要是查看多列的话,比如查看weekend和game这两列,就是data[:,[:weekend,:games]]
data[:,[:weekend,:games]]
500×2 DataFrames.DataFrame
│ Row │ weekend │ games │
├─────┼─────────┼───────┤
│ 1 │ "yes" │ 73 │
│ 2 │ "yes" │ 78 │
│ 3 │ "no" │ 80 │
│ 4 │ "yes" │ 72 │
│ 5 │ "no" │ 87 │
│ 6 │ "no" │ 79 │
│ 7 │ "yes" │ 73 │
│ 8 │ "no" │ 70 │
⋮
│ 492 │ "yes" │ 87 │
│ 493 │ "yes" │ 59 │
│ 494 │ "no" │ 75 │
│ 495 │ "no" │ 84 │
│ 496 │ "no" │ 72 │
│ 497 │ "yes" │ 83 │
│ 498 │ "no" │ 92 │
│ 499 │ "no" │ 83 │
│ 500 │ "no" │ 88 │
#或者是data[:,[1,5]]
上面是对数据进行按列进行的一些操作,如果是对行列同时进行,那就是数据切片了,下面进行介绍
data[1:3,[:weekend,:games]]
3×2 DataFrames.DataFrame
│ Row │ weekend │ games │
├─────┼─────────┼───────┤
│ 1 │ "yes" │ 73 │
│ 2 │ "yes" │ 78 │
│ 3 │ "no" │ 80 │
data[1:3,[1,5]]
3×2 DataFrames.DataFrame
│ Row │ weekend │ games │
├─────┼─────────┼───────┤
│ 1 │ "yes" │ 73 │
│ 2 │ "yes" │ 78 │
│ 3 │ "no" │ 80 │
大家这里要注意到,julia的索引是从1开始的,而不是从0开始的。
好了,继续,刚才是连续取行,比如1:3表示取1到3行,如果是想离散的进行切片,如下
data[[1,3],[1,2]]
2×2 DataFrames.DataFrame
│ Row │ weekend │ num_child │
├─────┼─────────┼───────────┤
│ 1 │ "yes" │ 0 │
│ 2 │ "no" │ 1 │
更加多样化的操作大家可以参考如下链接
介绍julia的DataFrame的教程