「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

Juliaを使うときのTipsをまとめる(その06/X)

 \mathrm{Julia}を使うのに、今一度

で使い方を整理する。

前回

power-of-awareness.com

注意

 参照文献はかなり古い(2019年)ため、現在のバージョンでは動作しない関数などが多いとの評判がある。そこでそういった齟齬があった場合は随時コメントする。なお筆者の環境は、

アプリケーション バージョン
\mathrm{Julia} 1.8.0
\mathrm{Jupyter} \mathrm{Notebook} 6.5.2

である。

2. Juliaによるデータエンジニアリング

2.2 効率的なインメモリストリームをつくる

 

##############################
### IOBufferを使った実装例 ###
##############################

# 文字列を受け取り、2つの部分文字列に分ける
function splitstring(s::AbstractString)
    bufs = [IOBuffer() for i in 1:2]
    idx = 1
    for c in s
        write(bufs[idx], c)
        idx = 3- idx
    end
    @.String(take!(bufs))
end

s = join('1':'9', "-")
splitstring(s)
2.2.1 IOBuffer

 \mathrm{IOBuffer}インスタンスは読み書きと追記が簡単にできるストリームをメモリ上に構築する。通常のストリームのように扱えるのが最大のメリットである。
 \mathrm{take}!は\mathrm{IOBuffer}オブジェクトの中身を配列として取り出し、バッファをリセットする。

2.3 インターネットからデータを取得する

 \mathrm{Julia}からインターネットでデータを首都屈指、\mathrm{Web}ページの情報を抽出する。
 ここではサンプルとして\mathrm{GitHub}プロジェクトからスターの数を取得する(つもりだったが、恐らく\mathrm{HTML}が変わったのか、上手く取得できていないので、オリジナルからコードを少し変えています)。

####################################
### Internetからデータを取得する ###
####################################

using HTTP, Gumbo, Cascadia

r = HTTP.get("https://github.com/JuliaWeb");
h = Gumbo.parsehtml(String(r.body));

# qs = HTMLElement[]
# Cascadia.matchAllInto(sel"h3 .d-inline-block", h.root,qs);
qs = Cascadia.eachmatch(Selector("body"),h.root)

#names_links = Tuple{String,String}[]
for q in qs
    name = strip(nodeText(q))
    println(name)
    #link = q.attributes["ihref"]
    #push!(names_links, (name, link))
end
2.3.1 Pythonを呼び出して同じことをしてみる
##############################
### Pythonを呼び出して使う ###
##############################

using PyCall

using Conda
Conda.add("scrapy")

ssel = pyimport("scrapy.selector")
s = ssel.Selector(text = page_body)

elems = s.xpath("//a[@itemprop='name codeRepository']")

strip(elems[1].xpath("text()")[1].extract())
strip(elems[2].xpath("text()")[1].extract())
        
a = elems[2].xpath("@href")[1].extract()

println(a)
プライバシーポリシー お問い合わせ