はじめに
JuliaでCSVデータの処理を行ったため、いくつかまとめる。
処理内容
まずはCSVファイルをデータフレームとして読み込む。
using CSV, DataFrames, StringEncodings
df = open("your_file_path", "r") do file
decoded = read(file, enc"CP932")
CSV.read(decoded, DataFrame)
end
CSVファイルを読み込んで→エンコーディングして→データフレームとして読み込むという処理したい手順でコードを書くことができてとても便利!
では、いらない列を削除してみよう。
select!(df, Not([1,2,3,size(df,2)]))
select関数を用いることで、抽出したい列を指定できるが、引数にNot演算子で削除したい列を指定することで削除することができる。
このとき、Not演算子には数字で渡せば1番目、2番目となるが、:列名
で渡せば、任意の列を削除することができる。
また、今回の例ではsize(df,2)
を指定しているが、これは一番最後の列を意味している。一応覚えておこう。
次に、1行目をヘッダーに指定してみる。
header = [Symbol(df[1,col]) for col in names(df)]
rename!(df, header, makeunique=true)
deleteat!(df, 1)
names(df)
で全列名を取得し、それらをfor文でシンボル型に変換する。その後、rename関数を用いて列名を更新する。1行目は列名に指定したため不要だからdeleteat関数で1行目を削除する。
rename関数
は以下のような書き方でも列名を変更することができる。
rename!(df, :old_column => :new_column, :aaa => :bbb)
こちらもセットで覚えておこう。
最後にグルーピングして、それらの最大値を取得してみよう。
group = groupby(df, :column_name)
max_values = combine(group, names(df) .=> maximum)
groupby関数
でグルーピングしたい列名を指定してグルーピングする。
その後、combine関数
を用いて、全列名に対して最大値を取得する。
このとき.=>
と=>
の前に.
を入力したが、これはドット演算子といって、リストの全ての要素に対して同じ処理を行いたい場合に用いることがある。
これもよく使用するので覚えておこう。
まとめ
データ処理を行う際によくやってる処理をJuliaで行ってみた。
演算子や関数について、まだ理解が浅いため深めていこうと思う。