表形式データの処理 II: Julia
1. 実習課題の提出ファイル(2種類):
2. 事前準備:必要な外部パケージ
今回は、次の外部パケージが必要となる。またいれてない方は先にパケージのインストールをしてください。
► DataFrames
► CSV
装着済みのパケージのチェック
• Julia を起動する。
• ローマ字の「終わり角括弧」

•
(@v1.5) pkg> status
Status `~/.julia/environments/v1.5/Project.toml`
[336ed68f] CSV v0.7.7
[a93c6f00] DataFrames v0.21.8
[91a5bcdd] Plots v1.0.14
インストール済みのパケージが表示される。
パケージ管理モードから退出

新しいパケージのインストル
パケージ管理モードで指令
例:

3. 事前準備:VS Code の作業フォルダの管理
作業フォルダ
• 今回の課題のファイルを保管するフォルダを作ってください。
• VS の

プラグラムのファイルを保存
•
•
コードの実行
1)全部実行する:
Mac の場合:

2)一部だけ実行する:
► 「マウス」、または「Shift-矢印キー」で実行したい部分を選ぶ。
►
► またはパネルの項目
► 注意点:一度
3)一行だけ実行する:
► 「マウス」または「矢印キー」でカーソルを目的まで動かす。
►
その他のShort Cut Key
https://www.julia-vscode.org/docs/dev/userguide/keyboard/
4. Delimiter-separated values
• 区切り文字を用いたデータ形式。
• Delimiter : 区切り文字 または デリミタ とも呼ばれる。
例
10 , 20 , "x文字" , 3.4 , その他
• よく使われている区切り文字:
► Comma コンマ (
► Tab タブ (
► Space スペース (
CSV: Comma-separated values カンマで区切ったデータ形式
• 「カンマ区切り」「コンマ区切り」などとも呼ばれる。
• テキストデータ形式。
• デフォルト拡張子:
• 詳細は こちら(wikipedia)
5. DelimitedFiles 内部パケージ
• 区切ったデータを
• 内部パケージなので、インストルする必要がない。
使い方:
プログラムの最初の行に下記のコードを置く。
using DelimitedFiles
ファイルの読み取る:
readdlm("ファイル名" , "区切る文字" , skipstart = 読み込まない行数, comments = true)
*実習1:CSV ファイルを読み取る
• 次のファイルを右クリックして「名前を付けて保存」で作業フォルダーに保存する。
csv_1.txt ファイルの内容は下記の通りです。
# Example of CSV の例. 数値データは 3行からです。
x, y, z
1, 2, 3
4, 5, 6
7, 8, 9
# 終わり
• 第1行目は説明文言です。読み込まない。
• 第2行目は各列の名前です。読み込まない。
• 最終行は データではない。幸い
下記のコードを新しい .jl ファイルに書き込む(または貼りつける)。
• Alt-Enter で全部実行する、または
• Control-Enter または Shift-Enter で一行ずつ実行する。
using DelimitedFiles
A = readdlm("csv_1.txt" , ',', skipstart = 2 , comments = true)
display(A) #行列をきれいに表示する。
出力
3×3 Matrix{Float64}:
1.0 2.0 3.0
4.0 5.0 6.0
7.0 8.0 9.0
sum 関数
sum 関数を用いて、各列と各行の合計値を求める。
using DelimitedFiles
println("--- 始め ---" )
A = readdlm("csv_1.txt" , ',', skipstart = 2 , comments = true)
print("データ内容:\n" )
display(A) #行列をきれいに表示する。
print("\n2列目の合計値:\n" )
display( sum(A[:, 2 ]) )
println("\n各列の合計値:" )
display( sum(A, dims = 1 ) )
println("\n各行の合計値:" )
display( sum(A, dims = 2 ) )
--- 始め ---
データ内容:
3×3 Array{Float64,2}:
1.0 2.0 3.0
4.0 5.0 6.0
7.0 8.0 9.0
2列目の合計値:
15.0
各列の合計値:
1×3 Array{Float64,2}:
12.0 15.0 18.0
各行合計値:
3×1 Array{Float64,2}:
6.0
15.0
24.0
関数 mean, std
内部統計パケージ Statistics を用い、次のコードを参考にして各列、と各行の平均または標準偏差を求める。
using DelimitedFiles
using Statistics
println("--- 始め ---" )
A = readdlm("csv_1.txt" , ',', skipstart = 2 , comments = true)
print("データ内容:\n" )
display(A) #行列をきれいに表示する。
print("\n2列目の合計値:\n" )
display( sum(A[:, 2 ]) )
println("\n各列の合計値:" )
display( sum(A, dims = 1 ) )
println("\n各列の平均値:" )
display( mean(A, dims = 1 ) ) #平均
println("\n各行の合計値:" )
display( sum(A, dims = 2 ) )
println("\n各行の標準偏差:" )
display( std(A, dims = 2 ) ) #標準偏差
--- 始め ---
データ内容:
3×3 Array{Float64,2}:
1.0 2.0 3.0
4.0 5.0 6.0
7.0 8.0 9.0
2列目の合計値:
15.0
各列の合計値:
1×3 Array{Float64,2}:
12.0 15.0 18.0
各列の平均値:
1×3 Array{Float64,2}:
4.0 5.0 6.0
各行の合計値:
3×1 Array{Float64,2}:
6.0
15.0
24.0
各行の標準偏差:
3×1 Array{Float64,2}:
1.0
1.0
1.0
6. DataFrames と CSV 外部パケージ
• 区切ったデータを
• 外部パケージなので、インストルする必要がある。
• 特徴:
► 列の名前を使って、データの抽出ができる。
► 表示は通常の行列より、綺麗。
► 区切り文字の自動認識。
使い方:
プログラムの最初の行に下記のコードを置く。
using DataFrames
using CSV
ファイルの読み取る:
CSV.read("ファイル名" , DataFrame, header = 列名の行, skipto = データの行,
comment = "コメント文字" ,normalizenames=true)
使い方は DelimitedFiles と多少違う。
*実習2
先ほどの csv_1.txt ファイルをもう一度使用する。内容はこちら:
# Example of CSV の例. 数値データは 3行からです。
x, y, z
1, 2, 3
4, 5, 6
7, 8, 9
# 終わり
• データは 3行目から。
• Header ヘッダー は第2行目です。
• コメント文字は # です。
新し jl ファイルで下記のコードを実行する
using DataFrames
using CSV
println("--- start ---" )
B = CSV.read("csv_1.txt" , DataFrame, header = 2 , skipto = 3 , comment = "#" , normalizenames=true)
println("データの内容:" )
println(B)
--- start ---
データの内容:
3×3 DataFrame
│ Row │ x │ y │ z │
│ │ Int64 │ Int64 │ Int64 │
├─────┼───────┼───────┼───────┤
│ 1 │ 1 │ 2 │ 3 │
│ 2 │ 4 │ 5 │ 6 │
│ 3 │ 7 │ 8 │ 9 │
次のコードを追加する。
println("\nデータ分析報告" )
println( describe(B) ) #簡易統計報告書。
println("\nデータの抽出" )
println("x= " , B[:, "x" ]) #列の番号ではなくて、列名で呼び出す。
println("y= " , B[:, :y]) #B["y"]の形式は 無効になった。
println("z= " , B.z)
最終出力
--- start ---
データの内容:
3×3 DataFrame
│ Row │ x │ y │ z │
│ │ Int64 │ Int64 │ Int64 │
├─────┼───────┼───────┼───────┤
│ 1 │ 1 │ 2 │ 3 │
│ 2 │ 4 │ 5 │ 6 │
│ 3 │ 7 │ 8 │ 9 │
データ分析報告
3×8 DataFrame
│ Row │ variable │ mean │ min │ median │ max │ nunique │ nmissing │ eltype │
│ │ Symbol │ Float64 │ Int64 │ Float64 │ Int64 │ Nothing │ Nothing │ DataType │
├─────┼──────────┼─────────┼───────┼─────────┼───────┼─────────┼──────────┼──────────┤
│ 1 │ x │ 4.0 │ 1 │ 4.0 │ 7 │ │ │ Int64 │
│ 2 │ y │ 5.0 │ 2 │ 5.0 │ 8 │ │ │ Int64 │
│ 3 │ z │ 6.0 │ 3 │ 6.0 │ 9 │ │ │ Int64 │
データの抽出
x= [1, 4, 7]
y= [2, 5, 8]
z= [3, 6, 9]
7. *実習3: 甲府の気温
下記、甲府2019年の気象データのァイルを「名前を付けて保存」で作業フォルダに保存
データの元は 気象庁 です。

ファイルの内容の一部はこちら:
甲府 2019年(月ごとの値) 主な要素
単位 hPa mm 度 度 度 % m/s h
月 気圧 降水量 気温 最高気温 最低気温 湿度 風速 日照時間
1 982.6 6 3.6 10.1 -2.3 43 2.7 231.5
2 983.7 33 6.1 12.6 0.8 50 2.3 173.9
⋮
12 986 42.5 6.9 12.3 2.2 69 1.8 167.9
• 区切り文字は タブ です。
• ヘッダー行(列名)は 3行目
• 数値データは 4行目から
新しいファイルに下記コードを実行する。
using DataFrames
using CSV
using Plots
B = CSV.read("kofu2019.txt" , DataFrame, header = 3 , skipto = 4 , comment = "#" , normalizenames=true)
println("甲府の天気:" )
println(B)
出力

下記のコードを追加して実行。
println("\n年間平均など" )
println( describe(B) ) #簡易統計報告書。
追加された出力:

下記のコードを追加して、グラフを描く
plot(B.月, B.気温, marker = 5 , markershape = :square, label="Ave" )
plot!(B.月, B.最高気温, marker = 5 ,markershape = :circle, label = "Max" )
plot!(B.月, B.最低気温, marker = 5 , markershape = :utriangle, label = "Min" )
plot!(xlabel = "Month" , ylabel = "degree" , title = "Kofu's annual temperature (2019)" )
plot!(xticks = (1:1 :12 ))
出力:

下記のコードを追加して、x軸の表示を任意の文字にする。
Mon = ["Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Apr" , "Sep" , "Oct" , "Nov" , "Dec" ]
plot!(xticks = (1:1 :12 , Mon))
display(plot!())#plot! が最後の行じゃなかったら、displayの関数に入れて、強制的に表示をさせる。
savefig("mykofutemp.png" ) #保存。 plotly の場合、この指令は不要です。

8. *実習4: 甲府の気象データ
• 先ほどのファイルを Save で保存して、そしてもう一度 Save as で別ファイル名で保存してください。
• 下記のコードを参考にして、4つの気象データを plot する。
using DataFrames
using CSV
using Plots
B = CSV.read("kofu2019.txt" , DataFrame, header = 3 , skipto = 4 , comment = "#" , normalizenames=true)
#自由にスタイルを変えてみる。
Temperature = plot(B.月, B.気温, marker = 3 )
plot!(B.月, B.最高気温, marker = 3 )
plot!(B.月, B.最低気温, marker = 3 )
plot!(title = "Temperature (Celsius)" , legend = false, xticks = (2:2 :12 ))
#主な追加部分:
Rain = scatter(B.月, B.降水量, legend = false, title = "Rain fall (mm)" ,xticks = (2:2 :12 ))
Pressure = scatter(B.月, B.気圧, title = "Pressure (hPa)" ,xticks = (2:2 :12 ), legend = false)
Humidity = plot(B.月, B.湿度, title = "Humidity (%)" , xticks = (2:2 :12 ), legend = false)
#4つのグラフを一斉に描く
plot(Temperature, Rain, Pressure, Humidity, layout = (2,2 ))

最後は任意のファイ名で下記のコードを実行してグラフを保存する。
savefig("mykofu_meteorological_data.png" )