[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개
Julia 프로그래밍 - 언어 및 강의 소개
Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필요 사항을 만족시키면서 일반 목적 프로그래밍에도 효과적으로 사용될 수 있도록 설계된 고급 동적 프로그래밍 언어이
inner-game.tistory.com
[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 배열 및 선형 대수
Julia 프로그래밍 - 배열 및 선형 대수
[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개 Julia 프로그래밍 - 언어 및 강의 소개Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필요 사항
inner-game.tistory.com

플롯.jl
선형 플롯
기능
범위에 대한 함수
PlutoUI를 사용한 대화형 플롯
플롯 속성
순차적 플로팅
LaTeX 문자열
서브 플롯
플롯 저장
다른 플롯 유형
--2D 플롯
--3D 플롯
데이터프레임.jl
DataFrame에 데이터 로드
데이터 프레임 인덱싱
StatsPlots를 사용하여 데이터 프레임 플로팅
특징 엔지니어링
--날짜 구문 분석
--DataFrame 변환
최종 결과
추가 자료
이 강의에서는 Plots.jl의 사용법을 알아보겠습니다 . Plots.jl은 여러 플로팅 패키지에 공통된 인터페이스를 제공합니다.
- GR
- PythonPlot – matplotlib 호출
- PGFPlotsX – LaTeX에서 이 사실을 알고 계실 수도 있습니다.
- Plotly – JavaScript 플로팅 패키지
- UnicodePlots - 터미널의 ASCII 플롯
Plots.jl은 이러한 패키지를 백엔드라고 부릅니다 .
Pluto 노트북은 JavaScript와 잘 호환되므로 Plotly 백엔드로 Plots.jl을 로드합니다.
using Plots
PlotlyBackend()
plotly() # activate Plotly backend
begin
using Plots
import PlotlyBase, PlotlyKaleido
plotly() # activate Plotly backend
end
Plots.jl은 다중 디스패치를 효과적으로 활용합니다. 다양한 호출 방법을 살펴보겠습니다 plot.
plot(y) - 단위 범위의 x 값을 사용한 2D 플롯
plot(x, y) - 2D 플롯
plot(x, y, z) - 3D 플롯

plot(rand(10))
1

plot(1:10, rand(10))
열은 시리즈입니다
입력의 열은 y별도의 시리즈로 처리됩니다.

plot(rand(10, 2))

plot(1:10, rand(10, 2))
x두 개의 배열을 미리 계산 하고 플로팅하는 대신 y, 함수를 Plots.jl에 직접 전달할 수 있습니다.

plot(sin)

plot([sin, cos])
이는 익명 함수의 좋은 사용 사례이기도 합니다.

plot([sin, x -> sin(x)^2, x -> sin(x)^3])
플로팅 범위를 더욱 세부적으로 제어하기 위해 x함수를 계산할 지점을 지정할 수 있습니다. 이 목적으로 배열과 범위를 모두 사용할 수 있습니다.

plot(0:0.5:10, [sin, cos])
수동으로 입력을 정의하는 대신 x다음 구문을 사용할 수도 있습니다 plot(function, lower_bound, upper_bound).

plot([sin, cos], 0, 10)
Pluto의 반응성은 PlutoUI 의 슬라이더를 사용하여 대화형 플롯을 제공합니다 .
1
using PlutoUI
1
@bind a Slider(2:0.1:5)
1
@bind b Slider(-5:5, default=0) # set default value
-10
1
@bind c Slider(-10:10, show_value=true) # show current value

plot(x -> a * x^2 + b * x + c, -4, 4)
팁
여기에는 마법 같은 것이 없습니다. Pluto는 계수 a, 에 의존하는 모든 셀의 값이 변경될 때마다 해당 b셀 을 업데이트합니다.c
교육적 목적으로 플롯 속성을 사용하여 플롯에 화려한 스타일을 추가해 보겠습니다.

plot(
0:0.5:10,
sin;
# Text labels
title="Trigonometric functions",
xlabel="My x-axis label",
ylabel="My y-axis label",
label="sin",
legend=:bottomright,
# Line style
color=:black,
linestyle=:dash,
linewidth=4,
# Marker style
markershape=:diamond,
markersize=8,
# Axis settings
yscale=:identity,
xflip=false,
xlims=(0, 8),
# Other
background_color=:green,
fontfamily="Helvetica",
size=(600, 350),
dpi=300,
)
이 플롯에는 몇 가지 공통 설정이 사용되었습니다. 더 많은 설정은 Plots.jl 문서 에서 확인하거나 다음을 쿼리하여 확인할 수 있습니다 plotattr.
1
plotattr("shape")
:markershape
Choose from [:none, :auto, :circle, :rect, :star5, :diamond, :hexagon, :cross, :xcross, :utriangle, :dtriangle, :rtriangle, :ltriangle, :pentagon, :heptagon, :octagon, :star4, :star6, :star7, :star8, :vline, :hline, :+, :x].
Aliases: (:markershapes, :shape).
Type: Union{Symbol, Plots.Shape, AbstractVector}.
`Series` attribute, defaults to `none`.
1
plotattr(:Axis)
Defined Axis attributes are:
discrete_values, draw_arrow, flip, foreground_color_axis, foreground_color_border, foreground_color_grid, foreground_color_guide, foreground_color_minor_grid, foreground_color_text, formatter, grid, gridalpha, gridlinewidth, gridstyle, guide, guide_position, guidefontcolor, guidefontfamily, guidefonthalign, guidefontrotation, guidefontsize, guidefontvalign, lims, link, minorgrid, minorgridalpha, minorgridlinewidth, minorgridstyle, minorticks, mirror, rotation, scale, showaxis, tick_direction, tickfontcolor, tickfontfamily, tickfonthalign, tickfontrotation, tickfontsize, tickfontvalign, ticks, unitformat, widen
플롯은 다음을 사용하여 순차적으로 업데이트할 수도 있습니다 plot!.

begin
my_plot = plot(sin; label="sin")
plot!(my_plot, cos; label="cos")
plot!(my_plot, tanh; label="tanh")
title!(my_plot, "Trigonometric functions")
xaxis!(my_plot, "My x-axis label")
yaxis!(my_plot, "My y-axis label")
end
LaTeXStrings.jl 패키지 는 플롯 제목과 레이블에 방정식을 정의하는 데 사용할 수 있습니다.
using LaTeXStrings
이 LaTeX 문자열은 로 시작하며 L"..."Pluto 내부에서 잘 렌더링됩니다.

L"x = \frac{1}{\sqrt{2}}"
플로팅 백엔드에 따라 플롯 내부에서도 다음을 사용할 수 있습니다.
plot(sqrt; label=L"\sqrt{x}", title=L"A random equation: $\frac{1}{\sqrt{2}}$")
Plotly는 그러한 백엔드 중 하나가 아니므로 여기서는 이를 보여주지 않습니다.
a를 지정하면 layout이전에 도입된 구문을 사용하여 하위 플롯을 지정할 수 있습니다.

my_subplots = plot([sin, cos], 0, 10; layout=(2, 1))

plot(rand(20, 12); layout=(4, 3), legend=false)
플롯을 "결합"할 수도 있습니다.
1

plot(my_plot, my_subplots)

plot(my_plot, my_subplots; layout=(2, 1))
더 복잡한 레이아웃에 대한 정보는 Plots.jl 문서 에서 확인할 수 있습니다 .
플롯은 다음 함수를 사용하여 저장됩니다 savefig.
savefig("figure.png") # save most recent figure
savefig(my_plot, "figure.png") # save figure `my_plot`
모든 백엔드가 모든 파일 형식을 지원하는 것은 아니라는 점에 유의하세요 .

Plots.jl은 다양한 유형의 플롯을 제공합니다. 여기서는 몇 가지 플롯을 소개합니다.
--2D 플롯

scatter(rand(100)) # like plot, without "connecting the dots"

histogram(randn(10000))

histogram2d(randn(10000), randn(10000))
--3D 플롯
X = -10.0:0.2:10.0
X = range(-10, 10; length=101)
Y = -10.0:0.2:10.0
Y = range(-10, 10; length=101)

Z1 = X .* Y

plot(X, Y, Z1)

Z2 = [sin(sqrt(x^2 + y^2)) / sqrt(x^2 + y^2) for x in X, y in Y]

contour(X, Y, Z2; fill=true)

surface(X, Y, Z2)
DataFrames는 대규모 표 형식 데이터 세트(Excel 스프레드시트)를 처리하는 데 사용되는 데이터 구조입니다.
DataFrames.jl 사용법을 알아보기 위해 실제 사례를 살펴보겠습니다 . 저희는 기후 연구에 관심이 있어서 독일 기상청( Deutscher Wetterdienst , DWD) 에서 제공하는 공개 날씨 데이터를 다운로드했습니다 .

IOBuffer란 무엇인가요?
파일을 다운로드할 필요가 없도록 이 노트북에 데이터를 붙여 넣었습니다.
모든 것을 .로 묶으면 문자열이 아닌 실제 파일인 IOBuffer것처럼 가장할 수 있습니다 .csv_file
파일을 수동으로 구문 분석하는 대신 CSV.jl을 사용하여 모든 내용을 직접 읽습니다 DataFrame.
begin
using CSV
using DataFrames
end

raw_weather_data = CSV.read(
csv_file, # path to our file
DataFrame; # read to DataFrame
delim=';', # values are separated by ";"
)
DataFrame 인덱싱은 배열과 유사합니다.

raw_weather_data[1:3, :]

raw_weather_data[1:3, 2:4]
또한, 이름으로 인덱싱할 수 있습니다.
2021091900
2021091906
2021091912

raw_weather_data[1:3, :MESS_DATUM]

raw_weather_data[1:3, [:MESS_DATUM, :TT_TER]]
또는 이름으로 데이터에 직접 액세스:

raw_weather_data.MESS_DATUM
뷰는 예상대로 작동합니다.

@view raw_weather_data[1:3, [:MESS_DATUM, :TT_TER]]
더 많은 인덱싱 구문은 DataFrames.jl 문서 에서 확인할 수 있습니다 .
이 시점에서 데이터를 플로팅해 볼 수 있습니다. StatsPlots.jl 패키지는 DataFrames에 대한 여러 플로팅 레시피를 제공합니다. 매크로를 사용하면 열 이름을 기호로 지정하여 @df호출할 수 있습니다 (예: ).plot:column_name
MESS_DATUM측정 날짜와 시간에 해당하고 TT_TER측정된 기온은 다음과 같습니다.
using StatsPlots

@df raw_weather_data plot(:MESS_DATUM, :TT_TER)
안 돼!
6시간 간격으로 정기적으로 데이터를 샘플링했지만, 측정 시간의 정수 형식이 문제를 일으킨 것으로 보입니다 MESS_DATUM.
다음 슬라이드에서 이 문제를 해결하겠습니다!
종종 DataFrame의 데이터를 변환해야 합니다. 예를 들어, 누락된 값을 정리하거나 열을 더 의미 있는 기능으로 결합해야 합니다.
MESS_DATUM예를 들어, 열의 날짜를 더 적합한 데이터 유형으로 구문 분석해 보겠습니다 . 현재는 큰 정수를 사용하여 날짜를 나타냅니다.

raw_weather_data.MESS_DATUM
--날짜 구문 분석
표준 라이브러리 패키지 Dates.jl은 데이터 유형을 제공 Date하고 DateTime문자열에 대한 구문 분석 기능이 내장되어 있습니다.
using Dates
이를 위해 DateFormat데이터가 다음과 같이 작성되어야 합니다.
format = dateformat"yyyymmddHH"
format = DateFormat("yyyymmddHH")
parse_date (generic function with 1 method)
parse_date(d::Integer) = DateTime(string(d), format)
이 함수를 열에 수동으로 적용하여 MESS_DATUM제대로 작동하는지 확인해 보겠습니다.

parse_date.(raw_weather_data.MESS_DATUM)
--DataFrame 변환
DataFrames.jl은 DataFrames 변환을 지원하는 세 가지 함수, 즉 combine, , 를 제공합니다 . 이러한 변환에 대한 자세한 내용은 DataFrames.jl 설명서 에서 확인할 수 있습니다 .selecttransform
DataFrame의 두 열에만 관심이 있으므로 다음을 사용하여 선택 select하고 변환합니다 MESS_DATUM.TT_TER

weather_data = select(
raw_weather_data,
:MESS_DATUM => ByRow(parse_date) => :date_time,
:TT_TER => :air_temperature,
)
여기서는 DataFrames.jl에서 정의한 두 가지 패턴을 사용했습니다.
● source_column => transformation => target_column_name열을 변환하고 새 대상 이름으로 저장하려면
● source_column => target_column_name열 이름을 바꾸려면
기본적으로 이 transformation함수는 전체 열에 적용됩니다. DataFrames.jl은 각 데이터 포인트에 개별적으로 ByRow적용할 수 있는 유틸리티를 제공합니다.transformation
이제 데이터를 로드하고 정리했으므로 데이터를 플로팅하고 제목과 축 레이블을 추가할 수 있습니다.

@df weather_data plot(
:date_time,
:air_temperature,
title="Air temperature in Berlin",
xaxis="Time of measurement",
yaxis="Temperature [°C]",
marker=:rect,
legend=false,
)
살펴볼 만한 다른 Julia 플로팅 패키지는 다음과 같습니다.
● Makie.jl : 강력한 대안 플로팅 생태계
● UnicodePlots.jl : Julia REPL의 플롯

julia> using UnicodePlots
julia> lineplot([sin, cos], 0, 2π) # prints plot in color
┌────────────────────────────────────────┐
1 │⠉⠓⢆⠀⠀⠀⡰⠊⠉⠉⠓⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⠊⠉⠀⠀⠀⠀│ sin(x)
│⠀⠀⠈⠱⣀⠎⠀⠀⠀⠀⠀⠈⠱⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠎⠀⠀⠀⠀⠀⠀⠀│ cos(x)
│⠀⠀⠀⢀⠗⡄⠀⠀⠀⠀⠀⠀⠀⠑⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠇⠀⠀⠀⠀⠀⠀⠀⠀│
│⠀⠀⢀⠎⠀⢱⠀⠀⠀⠀⠀⠀⠀⠀⠱⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀│
│⠀⢀⡎⠀⠀⠀⢳⠀⠀⠀⠀⠀⠀⠀⠀⢳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡎⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│
│⠀⡜⠀⠀⠀⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡜⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│
│⡰⠁⠀⠀⠀⠀⠀⠈⢆⠀⠀⠀⠀⠀⠀⠀⠈⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│
f(x) │⠧⠤⠤⠤⠤⠤⠤⠤⠼⡤⠤⠤⠤⠤⠤⠤⠤⠼⡤⠤⠤⠤⠤⠤⠤⠤⢤⠧⠤⠤⠤⠤⠤⠤⠤⢤⠤⠤⠤⠤│
│⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⡀⠀⠀⠀⠀⠀⠀⠀⠱⡀⠀⠀⠀⠀⠀⢀⠎⠀⠀⠀⠀⠀⠀⠀⢀⠇⠀⠀⠀⠀│
│⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⡎⠀⠀⠀⠀⠀⠀⠀⠀⡎⠀⠀⠀⠀⠀│
│⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢇⠀⠀⠀⠀⠀⠀⠀⠈⢇⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀│
│⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣆⠀⠀⠀⠀⠀⠀⠀⠈⣆⠀⡰⠁⠀⠀⠀⠀⠀⠀⠀⡰⠁⠀⠀⠀⠀⠀⠀│
│⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⠀⠀⠀⠀⠀⠀⠀⠈⡶⠁⠀⠀⠀⠀⠀⠀⠀⡰⠁⠀⠀⠀⠀⠀⠀⠀│
│⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢆⠀⠀⠀⠀⠀⢀⡰⠉⢆⠀⠀⠀⠀⠀⢀⡰⠁⠀⠀⠀⠀⠀⠀⠀⠀│
-1 │⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⢄⣀⣀⡤⠎⠀⠀⠀⠱⢄⣀⣀⡤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│
└────────────────────────────────────────┘
⠀0⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀7⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀x⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
팁
강좌 웹사이트에서 이 노트북을 보고 계신다면 Ctrl + click링크가 필요할 수 있습니다. 또는 독립형 노트북을 사용하세요.
[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개
Julia 프로그래밍 - 언어 및 강의 소개
Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필요 사항을 만족시키면서 일반 목적 프로그래밍에도 효과적으로 사용될 수 있도록 설계된 고급 동적 프로그래밍 언어이
inner-game.tistory.com