Topic 10

目次

1) 実習課題について 2) *事前作業:フォルダーの作成、作業空間の変更 3) 事前準備:必要なパケージ 4) Delimiter-separated values 5) DataFramesとCSVパケージ 6) *実習1:CSV ファイルを読み取る 7) *実習2:列名 8) *実習3: 甲府の気温 9) *実習4: 甲府の気象データ 10) *実習5: 甲府の気象データ2

データサイエンス CDS009    (チェン leechuin@yamanashi.ac.jp) 更新日: 2024-02-02


表形式データの処理 II: Julia

1. 実習課題について

VSCode の Web版を使って実習課題のコードを書いてください。

 • VSCode のリンクはこちら:https://vscode.dev/

各課題につき、1つのプログラム(.jl)ファイルを使ってください。

 • jlファイルを全て提出してください。

Juliaのターミナで include の方法で、コードを実行してください。

 • 重要な出力画面 & グラフは,1つの Word ファイルにまとめて提出してください。

注意点:

 • グラフをplotする場合、コードの冒頭に、using Plots を挿入してください。

using Plots

2. *事前作業:フォルダーの作成、作業空間の変更

(1) 実習課題用のフォルダーの作成

各自の「ドキュメント」 のフォルダーに今回の授業のためのフォルダーを作成してください。

 • フォルダー名は任意です。(既存のものを使ってもOK)

今回の授業に使う、プログラムファイル( .jl)及びデータファイル (.txt)をこのフォルダーの中に保存してください

VSCode で作業フォルダを開く

 • VScode を立ち上げて、Open Folderで作業フォルダーを開く。

プラグラムのファイルを保存

 • New Fileで新しいファイルを作る。

 • Saveで 拡張子.jlをつけて、任意な名前でファイルを保存する。

データファイルの保存

マウスの右グリックして、名前をつけて保存を使って下記のデータファイルを今回の作業フォルダーに保存する

        ► csv_1.txt

        ► kofu2019.txt

(2) cd で作業空間の変更

 • Julia ターミナル(REPL)を開き、下記のとおりに、cd のコマンドを使って、Julia の作業フォルダーを自分が作ったフォルダーに指定する

julia> cd("U:\\Documents\\あなたのフォルダー名")

ターミナルの出力の例:

作業空間が確実に変更されたかどうか次のコマンドで確認できる。

julia> pwd()

表示されたフォルダー名が、あなたが作ったものと一致すれば大丈夫です。

例:

include 関数で .jl ファイルを実行する

 • Julia端末でinclude 関数を使って .jl ファイルを実行する。

julia> include("あなたのファイル名.jl")

実行例:


3. 事前準備:必要なパケージ

今回は、下記のパケージのツールを使います。

 • DataFrames

        ► 表データの処理

 • CSV

        ► CSVファイル関連

 • Plots

        ► グラフの作成

 • Statistics

        ► 平均値、標準偏差の計算

プログラムの冒頭に次のコードを挿入

using DataFrames
using CSV
using Plots
using Statistics

4. Delimiter-separated values

 • 区切り文字を用いたデータ形式。

 • Delimiter : 区切り文字 または デリミタ とも呼ばれる。

10, 20, "x文字", 3.4, その他

 • よく使われている区切り文字:

        ► Comma コンマ (",")

        ► Tab タブ ("\t")

        ► Space スペース (" ")

CSV: Comma-separated values カンマで区切ったデータ形式

 • 「カンマ区切り」「コンマ区切り」などとも呼ばれる。

 • テキストデータ形式。

 • デフォルト拡張子: .csv

 • 詳細は こちら(wikipedia)


5. DataFramesとCSVパケージ

 • 区切ったデータを「表データ」として読みとる。

 • 外部パケージなので、インストルする必要がある。

 • 特徴:

        ► 列の名前を使って、データの抽出ができる。

        ► 表示は通常の行列より、綺麗。

        ► 区切り文字の自動認識。

使い方:

プログラムの最初の行に下記のコードを置く。

using DataFrames
using CSV

ファイルの読み取る:

CSV.read("ファイル名", DataFrame, header = 列名の行, skipto = データの行,
	comment = "コメント文字",normalizenames=true)

6. *実習1:CSV ファイルを読み取る

 • 次のファイルを右クリックして「名前を付けて保存」で作業フォルダーに保存する。

        ► csv_1.txt

csv_1.txt ファイルの内容は下記の通りです。

# Example of CSV の例. 数値データは 3行からです。
x,  y,  z
1,  2,  3
4,  5,  6
7,  8,  9
# 終わり

 • 第1行目は説明文言です。読み込まない。

 • 第2行目は各列の名前です。

 • 最終行は データではない。

要点はこちら:

 • データは 3行目から。

 • Header ヘッダー は第2行目です。

 • コメント文字は # です。

下記のコードを新しい .jl ファイルに書き込む。

 • Alt-Enter で実行する。

using DataFrames
using CSV

A = CSV.read("csv_1.txt", DataFrame, header = 2, skipto = 3, comment = "#", normalizenames=true)
println("データの内容:")
println(A)

出力

データの内容:
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("第1列:")
println(A[:, 1])

println("第2行:")
println(A[2, :])

出力

データの抽出
第1列:
[1, 4, 7]
第2行:
DataFrameRow
 Row │ x      y      z     
     │ Int64  Int64  Int64 
─────┼─────────────────────
   2 │     4      5      6

sum 関数

sum 関数を用いて、各列と各行の合計値を求める。

println("第3列の合計値")
println(sum(A[:, 3]))

println("第3行の合計値")
println(sum(A[3, :]))

出力

第3列の合計値
18
第3行の合計値
24

7. *実習2:列名

先ほどの csv_1.txt ファイルをもう一度使用する。内容はこちら:

# Example of CSV の例. 数値データは 3行からです。
x,  y,  z
1,  2,  3
4,  5,  6
7,  8,  9
# 終わり

新し jl ファイルで下記のコードを実行する

using DataFrames
using CSV

B = CSV.read("csv_1.txt", DataFrame, header = 2, skipto = 3, comment = "#", normalizenames=true)
println("データの内容:")
println(B)

println("
データの抽出")   # 列の番号ではなくて、列名で呼び出す。
println("x= ", B[:, "x"]) # 方法1
println("y= ", B[:, :y])  # 方法2
println("z= ", B.z)       # 方法3
データの内容:
3×3 DataFrame
 Row │ x      y      z     
     │ Int64  Int64  Int64 
─────┼─────────────────────
   1 │     1      2      3
   2 │     4      5      6
   3 │     7      8      9

データの抽出
x= [1, 4, 7]
y= [2, 5, 8]
z= [3, 6, 9]

8. *実習3: 甲府の気温

下記、甲府2019年の気象データのァイルを「名前を付けて保存」で作業フォルダに保存

        ► kofu2019.txt

データの元は 気象庁 です。

ファイルの内容の一部はこちら:

甲府 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
using Statistics

B = CSV.read("kofu2019.txt", DataFrame, header = 3, skipto = 4, comment = "#", normalizenames=true)
println("甲府の天気:")
println(B)

出力

下記のコードを追加して、未完成の部分を完成させる。

 • mean:平均値

 • std:標準偏差 (standard deviation)

 • maximum:最大値

 • maximum:最小値

# 統計パケージを使って平均値と標準偏差を算出する
println("-"^20)
println("気温の年間平均 = ", mean(B.気温))
println("気温の年間標準偏差 = ", std(B.気温))
println("降水量の最大値 = ", maximum(B.降水量))
println("気圧の最小値 = ", minimum(❓))

出力:

--------------------
気温の年間平均 = 15.85
気温の年間標準偏差 = 8.31466393570037
降水量の最大値 = 363.5
気圧の最小値 = 974.9

下記のコードを追加して、グラフを描く

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 の場合、この指令は不要です。

9. *実習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")

10. *実習5: 甲府の気象データ2

layoutsizeを変えて、実習4のグラフを違うスタイルで表示する

参考資料:共通資料の「plot も簡易マニュアル」