Slide 1

Slide 1 text

ωοτϫʔΫάϥϑΛੜ ੒͢Δ(ClojureͰ) 2018/6/15 ITS-training-camp

Slide 2

Slide 2 text

ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ) ͜͏͍͏ਤΛੜ੒͠·͢

Slide 3

Slide 3 text

ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ) ͜͏͍͏ਤΛੜ੒͠·͢

Slide 4

Slide 4 text

DEMO ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 5

Slide 5 text

ίʔυશମ (ns gen-network.core) (import '(java.io BufferedReader FileReader)) (require '[clojure.string :as str]) (require '[loom.graph :as lg]) (require '[loom.io :as lio]) (def data-text “data.txt") (def keywords ["a" "b" "c" "d"]) (def data-list (->> (FileReader. data-text) (BufferedReader.) (line-seq) (map #(str/split % #", ")))) (defn word-relation [key list] (->> list (filter (fn [words] (some #(= % key) words))) (map (fn [words] (remove #(= key %) words))) (flatten) (group-by #(identity %)) ((fn [group] (map #(vector key (first %) (count (second %))) group))))) (defn main [] (->> keywords (reduce (fn [accum keyword] (concat accum (word-relation keyword data-list))) []) )) ; (remove (fn [x] (<= (nth x 2) 4))) (apply lg/weighted-graph) ((fn [graph] (lio/view graph :alg :fdp))))) (main) ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 6

Slide 6 text

ϑΝΠϧΛಡΈࠐΉ $ cat data.txt a, b c, d a, b a, b a, b a, e c, d a, e a, d c, b e, d ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 7

Slide 7 text

ϑΝΠϧΛಡΈࠐΉ (import '(java.io BufferedReader FileReader)) (require '[clojure.string :as str]) (def data-text "data.txt") (def data-list (->> (FileReader. data-text) (BufferedReader.) (line-seq) (map #(str/split % #", "))))
 
 ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 8

Slide 8 text

ϑΝΠϧΛಡΈࠐΉ (import '(java.io BufferedReader FileReader)) (require '[clojure.string :as str]) (def data-text "data.txt") (def data-list (->> (FileReader. data-text) (BufferedReader.) (line-seq) (map #(str/split % #", "))))
 => ([“a” “b”] [“c” “d”] [“a” “b”] [“a” “b”] [“a” “b”] [“a” “e”] [“c” “d”] [“a” “e”] [“a” “d”] [“c” “b”] [“e" “d"]) ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 9

Slide 9 text

ϑΝΠϧΛಡΈࠐΉ (import '(java.io BufferedReader FileReader)) (require '[clojure.string :as str]) (def data-text "data.txt") (def data-list (->> (FileReader. data-text) (BufferedReader.) (line-seq) (map #(str/split % #", "))))
 => ([“a” “b”] [“c” “d”] [“a” “b”] [“a” “b”] [“a” “b”] [“a” “e”] [“c” “d”] [“a” “e”] [“a” “d”] [“c” “b”] [“e" “d"]) ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ) JavaͷΫϥεΛΠϯϙʔτ

Slide 10

Slide 10 text

ϑΝΠϧΛಡΈࠐΉ (import '(java.io BufferedReader FileReader)) (require '[clojure.string :as str]) (def data-text "data.txt") (def data-list (->> (FileReader. data-text) (BufferedReader.) (line-seq) (map #(str/split % #", "))))
 => ([“a” “b”] [“c” “d”] [“a” “b”] [“a” “b”] [“a” “b”] [“a” “e”] [“c” “d”] [“a” “e”] [“a” “d”] [“c” “b”] [“e" “d"]) clojure.stringΛ࢖͑ΔΑ͏ʹ͢Δ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 11

Slide 11 text

ϑΝΠϧΛಡΈࠐΉ (import '(java.io BufferedReader FileReader)) (require '[clojure.string :as str]) (def data-text "data.txt") (def data-list (->> (FileReader. data-text) (BufferedReader.) (line-seq) (map #(str/split % #", "))))
 => ([“a” “b”] [“c” “d”] [“a” “b”] [“a” “b”] [“a” “b”] [“a” “e”] [“c” “d”] [“a” “e”] [“a” “d”] [“c” “b”] [“e" “d"]) FileReaderΛॳظԽ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 12

Slide 12 text

ϑΝΠϧΛಡΈࠐΉ (import '(java.io BufferedReader FileReader)) (require '[clojure.string :as str]) (def data-text "data.txt") (def data-list (->> (FileReader. data-text) (BufferedReader.) (line-seq) (map #(str/split % #", "))))
 => ([“a” “b”] [“c” “d”] [“a” “b”] [“a” “b”] [“a” “b”] [“a” “e”] [“c” “d”] [“a” “e”] [“a” “d”] [“c” “b”] [“e" “d"]) BuffReaderΛॳظԽ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 13

Slide 13 text

ϑΝΠϧΛಡΈࠐΉ (import '(java.io BufferedReader FileReader)) (require '[clojure.string :as str]) (def data-text "data.txt") (def data-list (->> (FileReader. data-text) (BufferedReader.) (line-seq) (map #(str/split % #", "))))
 => ([“a” “b”] [“c” “d”] [“a” “b”] [“a” “b”] [“a” “b”] [“a” “e”] [“c” “d”] [“a” “e”] [“a” “d”] [“c” “b”] [“e" “d"]) ߦ͝ͱʹ෼͚Δ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 14

Slide 14 text

ϑΝΠϧΛಡΈࠐΉ (import '(java.io BufferedReader FileReader)) (require '[clojure.string :as str]) (def data-text "data.txt") (def data-list (->> (FileReader. data-text) (BufferedReader.) (line-seq) (map #(str/split % #", "))))
 => ([“a” “b”] [“c” “d”] [“a” “b”] [“a” “b”] [“a” “b”] [“a” “e”] [“c” “d”] [“a” “e”] [“a” “d”] [“c” “b”] [“e" “d"]) ߦΛ``,``Ͱ෼͚ͯVectorʹ͢Δ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 15

Slide 15 text

ಡΈࠐΜͩ݁Ռ͔Β૊Έ߹Θͤճ਺Λ਺͑Δ (defn word-relation [key list] (->> list (filter (fn [words] (some #(= % key) words))) (map (fn [words] (remove #(= key %) words))) (flatten) (group-by #(identity %)) ((fn [group] (map #(vector key (first %) (count (second %))) group))))) ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 16

Slide 16 text

ಡΈࠐΜͩ݁Ռ͔Β૊Έ߹Θͤճ਺Λ਺͑Δ (defn word-relation [key list] (->> list (filter (fn [words] (some #(= % key) words))) (map (fn [words] (remove #(= key %) words))) (flatten) (group-by #(identity %)) ((fn [group] (map #(vector key (first %) (count (second %))) group))))) (word-relation "a" data-list) => (["a" "b" 4] ["a" "e" 2] ["a" "d" 1]) ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 17

Slide 17 text

ಡΈࠐΜͩ݁Ռ͔Β૊Έ߹Θͤճ਺Λ਺͑Δ (defn word-relation [key list] (->> list (filter (fn [words] (some #(= % key) words))) (map (fn [words] (remove #(= key %) words))) (flatten) (group-by #(identity %)) ((fn [group] (map #(vector key (first %) (count (second %))) group))))) => ([“a” “b”] [“c” “d”] [“a” “b”] [“a” “b”] [“a” “b”] [“a” “e”] [“c” “d”] [“a” “e”] [“a” “d”] [“c” “b”] [“e" “d"]) ͜͜·Ͱ࣮ߦ͢Δ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 18

Slide 18 text

ಡΈࠐΜͩ݁Ռ͔Β૊Έ߹Θͤճ਺Λ਺͑Δ (defn word-relation [key list] (->> list (filter (fn [words] (some #(= % key) words))) (map (fn [words] (remove #(= key %) words))) (flatten) (group-by #(identity %)) ((fn [group] (map #(vector key (first %) (count (second %))) group))))) => (["a" "b"] ["a" "b"] ["a" "b"] ["a" "b"] ["a" "e"] ["a" "e"] ["a" "d"]) ͜͜·Ͱ࣮ߦ͢Δ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 19

Slide 19 text

ಡΈࠐΜͩ݁Ռ͔Β૊Έ߹Θͤճ਺Λ਺͑Δ (defn word-relation [key list] (->> list (filter (fn [words] (some #(= % key) words))) (map (fn [words] (remove #(= key %) words))) (flatten) (group-by #(identity %)) ((fn [group] (map #(vector key (first %) (count (second %))) group))))) => (("b") ("b") ("b") ("b") ("e") ("e") ("d")) ͜͜·Ͱ࣮ߦ͢Δ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 20

Slide 20 text

ಡΈࠐΜͩ݁Ռ͔Β૊Έ߹Θͤճ਺Λ਺͑Δ (defn word-relation [key list] (->> list (filter (fn [words] (some #(= % key) words))) (map (fn [words] (remove #(= key %) words))) (flatten) (group-by #(identity %)) ((fn [group] (map #(vector key (first %) (count (second %))) group))))) => ("b" "b" "b" "b" "e" "e" "d") ͜͜·Ͱ࣮ߦ͢Δ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 21

Slide 21 text

ಡΈࠐΜͩ݁Ռ͔Β૊Έ߹Θͤճ਺Λ਺͑Δ (defn word-relation [key list] (->> list (filter (fn [words] (some #(= % key) words))) (map (fn [words] (remove #(= key %) words))) (flatten) (group-by #(identity %)) ((fn [group] (map #(vector key (first %) (count (second %))) group))))) => {"b" ["b" "b" "b" "b"], "e" ["e" "e"], "d" ["d"]} ͜͜·Ͱ࣮ߦ͢Δ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 22

Slide 22 text

ಡΈࠐΜͩ݁Ռ͔Β૊Έ߹Θͤճ਺Λ਺͑Δ (defn word-relation [key list] (->> list (filter (fn [words] (some #(= % key) words))) (map (fn [words] (remove #(= key %) words))) (flatten) (group-by #(identity %)) ((fn [group] (map #(vector key (first %) (count (second %))) group))))) => (["a" "b" 4] ["a" "e" 2] ["a" "d" 1]) ͜͜·Ͱ࣮ߦ͢Δ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 23

Slide 23 text

ޙ͸ϥΠϒϥϦͷྗͰ (defn main [] (->> keywords (reduce (fn [accum keyword] (concat accum (word-relation keyword data-list))) []) ; (remove (fn [x] (<= (nth x 2) 4))) (apply lg/weighted-graph) ((fn [graph] (lio/view graph :alg :fdp))))) ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 24

Slide 24 text

ޙ͸ϥΠϒϥϦͷྗͰ (defn main [] (->> keywords (reduce (fn [accum keyword] (concat accum (word-relation keyword data-list))) []) ; (remove (fn [x] (<= (nth x 2) 4))) (apply lg/weighted-graph) ((fn [graph] (lio/view graph :alg :fdp))))) => (["a" "b" 4] ["a" "e" 2] ["a" "d" 1] [“b" "a" 4] ["b" "c" 1] ["c" "d" 2] ["c" "b" 1] [“d" "c" 2] ["d" "a" 1] ["d" "e" 1]) ͜͜·Ͱ࣮ߦ͢Δ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 25

Slide 25 text

ޙ͸ϥΠϒϥϦͷྗͰ (defn main [] (->> keywords (reduce (fn [accum keyword] (concat accum (word-relation keyword data-list))) []) ; (remove (fn [x] (<= (nth x 2) 4))) (apply lg/weighted-graph) ((fn [graph] (lio/view graph :alg :fdp))))) άϥϑσʔλΛ࡞੒ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 26

Slide 26 text

ޙ͸ϥΠϒϥϦͷྗͰ (defn main [] (->> keywords (reduce (fn [accum keyword] (concat accum (word-relation keyword data-list))) []) ; (remove (fn [x] (<= (nth x 2) 4))) (apply lg/weighted-graph) ((fn [graph] (lio/view graph :alg :fdp))))) ഑ஔΛࢦఆͯ͠ඳը ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 27

Slide 27 text

ίʔυશମ (ns gen-network.core) (import '(java.io BufferedReader FileReader)) (require '[clojure.string :as str]) (require '[loom.graph :as lg]) (require '[loom.io :as lio]) (def data-text “data.txt") (def keywords ["a" "b" "c" "d"]) (def data-list (->> (FileReader. data-text) (BufferedReader.) (line-seq) (map #(str/split % #", ")))) (defn word-relation [key list] (->> list (filter (fn [words] (some #(= % key) words))) (map (fn [words] (remove #(= key %) words))) (flatten) (group-by #(identity %)) ((fn [group] (map #(vector key (first %) (count (second %))) group))))) (defn main [] (->> keywords (reduce (fn [accum keyword] (concat accum (word-relation keyword data-list))) []) )) ; (remove (fn [x] (<= (nth x 2) 4))) (apply lg/weighted-graph) ((fn [graph] (lio/view graph :alg :fdp))))) (main) ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 28

Slide 28 text

·ͱΊ ͪΐͬͱͨ͠πʔϧΛ࡞Δͱ͖ͳͲɺؔ਺ܕݴޠΛ࢖͏ͱ୹͘εο ΩϦ͔͚·͢ɻ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)

Slide 29

Slide 29 text

·ͱΊ ͪΐͬͱͨ͠πʔϧΛ࡞Δͱ͖ͳͲɺؔ਺ܕݴޠΛ࢖͏ͱ୹͘εο ΩϦ͔͚·͢ɻ Ruby΍PythonΛ࢖ͬͯ΋୹͘ॻ͚·͚͢ͲͶɻ ωοτϫʔΫάϥϑΛੜ੒͢Δ(ClojureͰ)