Julia. Les premiers pas, troisième partie

using Dates

let # portée locale
    d = Dates.now()
    println("Daniel Hagnoul $d\n")
end
Daniel Hagnoul 2020-10-26T21:08:53.255

macro

macro do_more(n, exp)
    quote
        for i = 1:$(esc(n))
            $(esc(exp))
        end
    end
end

@do_more(2, println("Bonjour Daniel"))
Bonjour Daniel
Bonjour Daniel
macro do_while(exp)
    @assert exp.head == :while
    esc(quote
        $(exp.args[2])
        $exp
    end)
end

let
    z = 0

    @do_while while z < 10
        println(z)
        z += 1
    end
end
0
1
2
3
4
5
6
7
8
9

DataFrame

using DataFrames

df = DataFrame()

df.A = 1.0:5.0
df.B = ["A", "E", "I", "O", "U"]
df.C = ["A", "B", "C", "D", "E"]

let
    println("df, colonnes [A, B, C] = $df\n")

    df.D = ["A", "Z", "B", "K", "M"]

    println("df, colonnes [A, B, C, D] = $df")
end
df, colonnes [A, B, C] = 5×3 DataFrame
│ Row │ A       │ B      │ C      │
│     │ Float64 │ String │ String │
├─────┼─────────┼────────┼────────┤
│ 1   │ 1.0     │ A      │ A      │
│ 2   │ 2.0     │ E      │ B      │
│ 3   │ 3.0     │ I      │ C      │
│ 4   │ 4.0     │ O      │ D      │
│ 5   │ 5.0     │ U      │ E      │

df, colonnes [A, B, C, D] = 5×4 DataFrame
│ Row │ A       │ B      │ C      │ D      │
│     │ Float64 │ String │ String │ String │
├─────┼─────────┼────────┼────────┼────────┤
│ 1   │ 1.0     │ A      │ A      │ A      │
│ 2   │ 2.0     │ E      │ B      │ Z      │
│ 3   │ 3.0     │ I      │ C      │ B      │
│ 4   │ 4.0     │ O      │ D      │ K      │
│ 5   │ 5.0     │ U      │ E      │ M      │
let
    println("df, les deux premières lignes = $(first(df, 2))\n")
    println("df, les deux dernières lignes = $(last(df, 2))\n")
    println("df, la troisième ligne = $(df[:3, :])")
end
df, les deux premières lignes = 2×4 DataFrame
│ Row │ A       │ B      │ C      │ D      │
│     │ Float64 │ String │ String │ String │
├─────┼─────────┼────────┼────────┼────────┤
│ 1   │ 1.0     │ A      │ A      │ A      │
│ 2   │ 2.0     │ E      │ B      │ Z      │

df, les deux dernières lignes = 2×4 DataFrame
│ Row │ A       │ B      │ C      │ D      │
│     │ Float64 │ String │ String │ String │
├─────┼─────────┼────────┼────────┼────────┤
│ 1   │ 4.0     │ O      │ D      │ K      │
│ 2   │ 5.0     │ U      │ E      │ M      │

df, la troisième ligne = DataFrameRow
│ Row │ A       │ B      │ C      │ D      │
│     │ Float64 │ String │ String │ String │
├─────┼─────────┼────────┼────────┼────────┤
│ 3   │ 3.0     │ I      │ C      │ B      │
let
    println("La colonne B = $(df[:, :B])\n")
    println("df, la colonne B = $(df[:, [:B]])")
end
La colonne B = ["A", "E", "I", "O", "U"]

df, la colonne B = 5×1 DataFrame
│ Row │ B      │
│     │ String │
├─────┼────────┤
│ 1   │ A      │
│ 2   │ E      │
│ 3   │ I      │
│ 4   │ O      │
│ 5   │ U      │
let
    #=
        Création d'un sous-ensemble contenant la colonne 'B' 
        et les 3 premières lignes du bloc de données
    =#
    println("df, sous-ensemble = $(first(select(df, :B ), 3) )\n")

    #=
        Création d'un sous-ensemble contenat les trois premières 
        lignes sans la colonne 'B' 
    =#
    println("df, sous-ensemble = $(first(select(df, Not(:B) ), 3) )")
end
df, sous-ensemble = 3×1 DataFrame
│ Row │ B      │
│     │ String │
├─────┼────────┤
│ 1   │ A      │
│ 2   │ E      │
│ 3   │ I      │

df, sous-ensemble = 3×3 DataFrame
│ Row │ A       │ C      │ D      │
│     │ Float64 │ String │ String │
├─────┼─────────┼────────┼────────┤
│ 1   │ 1.0     │ A      │ A      │
│ 2   │ 2.0     │ B      │ Z      │
│ 3   │ 3.0     │ C      │ B      │
let
    # Création d'un sous-ensemble contenant les lignes 2:4 et les colonnes [:A, :C] 

    println("df, sous-ensemble = $(df[2:4, [:A, :C]])\n")
end
df, sous-ensemble = 3×2 DataFrame
│ Row │ A       │ C      │
│     │ Float64 │ String │
├─────┼─────────┼────────┤
│ 1   │ 2.0     │ B      │
│ 2   │ 3.0     │ C      │
│ 3   │ 4.0     │ D      │
let
    # Remplace une valeur par une autre
    replace!(df.A, 4.0 => 7.0)

    # Ajouter une nouvelle ligne
    push!(df, [6.0 "Z" "F" "P"])

    # Ajouter une colonne en troisième position 
    insert!(df, 3, ["Q", "W", "E", "R", "T", "Y"], :E)

    println("df = $(df)\n")

    # Supprime la quatrième ligne
    deleterows!(df, 4)

    # Supprime la troisième colonne
    deletecols!(df, 3) 

    println("df = $(df)")
end
df = 6×5 DataFrame
│ Row │ A       │ B      │ E      │ C      │ D      │
│     │ Float64 │ String │ String │ String │ String │
├─────┼─────────┼────────┼────────┼────────┼────────┤
│ 1   │ 1.0     │ A      │ Q      │ A      │ A      │
│ 2   │ 2.0     │ E      │ W      │ B      │ Z      │
│ 3   │ 3.0     │ I      │ E      │ C      │ B      │
│ 4   │ 7.0     │ O      │ R      │ D      │ K      │
│ 5   │ 5.0     │ U      │ T      │ E      │ M      │
│ 6   │ 6.0     │ Z      │ Y      │ F      │ P      │

df = 5×4 DataFrame
│ Row │ A       │ B      │ C      │ D      │
│     │ Float64 │ String │ String │ String │
├─────┼─────────┼────────┼────────┼────────┤
│ 1   │ 1.0     │ A      │ A      │ A      │
│ 2   │ 2.0     │ E      │ B      │ Z      │
│ 3   │ 3.0     │ I      │ C      │ B      │
│ 4   │ 5.0     │ U      │ E      │ M      │
│ 5   │ 6.0     │ Z      │ F      │ P      │
let
    df1 = DataFrame(F = ["A", "E", "I", "O", "U"],  G = ["G", "E", "E", "K", "S"]) 
    df2 = DataFrame(H = ["G", "R", "E", "A", "T"])

    # Fusion horizontale des dataframes df1 et df2    
    df3 = hcat(df1, df2)
    println("df3 = $(df3)\n")

    df4 = DataFrame(A = 7, B ="O", C ="G", E = 17) 
    df5 = DataFrame(A = 8, B ="None", C ="H", E = 19)

    # Fusion verticale des dataframes df4 et df5
    df6 = vcat(df4, df5)
    println("df6 = $(df6)")
end
df3 = 5×3 DataFrame
│ Row │ F      │ G      │ H      │
│     │ String │ String │ String │
├─────┼────────┼────────┼────────┤
│ 1   │ A      │ G      │ G      │
│ 2   │ E      │ E      │ R      │
│ 3   │ I      │ E      │ E      │
│ 4   │ O      │ K      │ A      │
│ 5   │ U      │ S      │ T      │

df6 = 2×4 DataFrame
│ Row │ A     │ B      │ C      │ E     │
│     │ Int64 │ String │ String │ Int64 │
├─────┼───────┼────────┼────────┼───────┤
│ 1   │ 7     │ O      │ G      │ 17    │
│ 2   │ 8     │ None   │ H      │ 19    │

Licence Creative Commons Attribution 2.0 Belgique