見出し画像

【データの集め方講座】Pythonでラーメン屋を検索[OWL de ラーメンオントロジー]

はじめに


ご高覧いただき有難うございます!
ソフトウェアエンジニアのKitaharaです.
本日はSPARQLの練習に使えるサイトを発見したので解説しながらデータを集めています.

SPARQLが初めてという方へ


SPARQLは便利ではあるのですが少しマイナーな言語です.
そこでSPARQLは何かや基礎文法をまとめた記事を作りました!
まずはこちらから見てみてください!

SPARQLとは何か

SPARQLの基礎文法

使用する言語・ライブラリ・エディタ等の説明


PythonライブラリのSPARQLWrapperをインストールするとSPARQLを簡単に実行することができますのでそれを使っていきます.

  • SPARQLWrapper

    • PythonでSPARQLを使うためのライブラリです.

    • pip install ですぐに使うことができます.

    • 公式ドキュメント

  • Python

    • プログラミング言語のひとつです.

    • 型宣言等が無く, 初心者にも扱いやすい言語だと言われています

    • 近年Deep Learningのライブラリが豊富であることから注目を集めている人気の言語です

    • 公式ドキュメント

  • Google Colab

    • Googleが提供するPythonの実行環境です

    • 主要なライブラリがインストールされている状態で使うことができます

    • Chromeでアクセスするだけで利用することができます

      • 環境構築が不要です

      • 無料で使うことができます

環境構築


SPARQLWrapper

下記のコードをGoogle Colubで実行してください

# Google Colubでコマンドを打つときは「!」を先頭に付ける
!pip install sparqlwrapper

これで今回使うライブラリはすべて揃いました!

プログラムの実行


ラーメンデータの探索

ラーメンの概念をLinked Open Dataとして公開されている方のSPARQLエンドポイントを使わさせてただきます.

INPUT

from SPARQLWrapper import SPARQLWrapper

sparql = SPARQLWrapper(endpoint='https://dydra.com/haychmash/owlramen/sparql', returnFormat='json')
sparql.setQuery("""
    PREFIX owl: <http://www.w3.org/2002/07/owl#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    SELECT ?class ?comment ?reference
    where {
    ?class  rdfs:comment  ?comment ;
            rdfs:seeAlso  ?reference .
    }
    LIMIT 100
""")
results = sparql.query().convert()
for i in range(len(results["results"]["bindings"])):
    print(
        results["results"]["bindings"][i]["class"]["value"],
        results["results"]["bindings"][i]["comment"]["value"],
        results["results"]["bindings"][i]["reference"]["value"],
    )

OUTPUT

https://www.mirko.jp/ontology/ramen/owlramen?担担麺 担担麺は、中国四川省発祥の辛みを利かせた挽肉やザーサイの細切りなどをのせた麺料理である。香港または日本の麺料理の一種としても定着しているが、各地で大きくアレンジされ、風味などが異なっている。なお、担担麺は厳密にはラーメンと異なる麺料理だが、このオントロジーでは広義の意味でラーメンに含めることとしている。 https://ja.wikipedia.org/wiki/%E6%8B%85%E6%8B%85%E9%BA%BA
https://www.mirko.jp/ontology/ramen/owlramen?タンメン 茹でた中華麺、そしてモヤシ、ニラ、ニンジン、キャベツ、キクラゲ、タマネギ、豚肉等を炒めたものに、塩味に調製した鶏がらを主とするスープを加えたものである。。なお、タンメンは厳密にはラーメンと異なる麺料理だが、このオントロジーでは広義の意味でラーメンに含めることとしている。 https://ja.wikipedia.org/wiki/%E3%82%BF%E3%83%B3%E3%83%A1%E3%83%B3
https://www.mirko.jp/ontology/ramen/owlramen?二郎系 「ラーメン二郎」を典型とするラーメンの系統を指す言い方。二郎系ラーメン。面は極太のわしわし麺、その麺を覆い尽くすほどモヤシ等の野菜が山盛りに盛られ、ニンニクや背脂などのトッピングを任意に選べる、といった点をおおむね共通の特徴とする。ラーメン二郎は元祖に位置づけられ、二郎系は二郎の触発されたという意味で「二郎インスパイア系」と呼ばれることも多い。  https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3%E4%BA%8C%E9%83%8E
https://www.mirko.jp/ontology/ramen/owlramen?家系 家系ラーメン(いえけいラーメン)は、1974年以降に登場した横浜市発祥の豚骨醤油ベースで太いストレート麺を特徴とするラーメンの総称である。 https://ja.wikipedia.org/wiki/%E5%AE%B6%E7%B3%BB%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3
https://www.mirko.jp/ontology/ramen/owlramen?札幌ラーメン 札幌ラーメン(さっぽろラーメン)は、札幌市発祥のラーメン一般を指す通称である。ご当地ラーメンの一つ。 https://ja.wikipedia.org/wiki/%E6%9C%AD%E5%B9%8C%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3
https://www.mirko.jp/ontology/ramen/owlramen?喜多方ラーメン 福島県喜多方市発祥のご当地ラーメン。 https://ja.wikipedia.org/wiki/%E5%96%9C%E5%A4%9A%E6%96%B9%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3
https://www.mirko.jp/ontology/ramen/owlramen?富山ブラックラーメン パンチの効いた塩辛い味がクセになる、富山県富山市発祥のご当地ラーメン。 https://ja.wikipedia.org/wiki/%E5%AF%8C%E5%B1%B1%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF
https://www.mirko.jp/ontology/ramen/owlramen?和歌山ラーメン 主に和歌山県北部で、専門店や大衆食堂で出されるご当地ラーメン。豚骨醤油味が基本だが、細かく区分すると濃厚な豚骨ベースのものと、さっぱり醤油ベースのものと2つの系統に分かれている。 https://ja.wikipedia.org/wiki/%E5%92%8C%E6%AD%8C%E5%B1%B1%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3
https://www.mirko.jp/ontology/ramen/owlramen?尾道ラーメン 尾道市を中心とした広島県備後地方のご当地ラーメン。基本は、瀬戸内海の小魚のだしを使ったシンプルな醤油味の鶏ガラスープです。 https://ja.wikipedia.org/wiki/%E5%B0%BE%E9%81%93%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3
https://www.mirko.jp/ontology/ramen/owlramen?博多ラーメン 博多ラーメンとは、主に福岡市で作られる、豚骨スープとストレートの細麺をベースにしたラーメン。主に福岡地方のラーメン専門店、中華料理店、屋台で提供される。 https://ja.wikipedia.org/wiki/%E5%8D%9A%E5%A4%9A%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3
https://www.mirko.jp/ontology/ramen/owlramen?長崎ちゃんぽん ちゃんぽんとは、もやし、キャベツ、キクラゲなどの野菜とイカ、エビなどの魚介類、豚肉、かまぼこなどの具材をラードで炒めたものを、豚骨と鶏ガラのスープで中華麺とともに煮込んだ長崎県発祥の麺料理。タンメンに似るが、タンメンよりもバラエティに富む具材が利用される。一般的には、かまぼこ、エビ、イカのトッピングがマストと言われている。なお、ちゃんぽんは厳密にはラーメンと異なる麺料理であるともいえるが、このオントロジーでは広義の意味でラーメンに含めることとしている。 https://ja.wikipedia.org/wiki/%E3%81%A1%E3%82%83%E3%82%93%E3%81%BD%E3%82%93

おおー確かにいい感じに検索ができていますね.

ラーメン屋の探索

折角なのでラーメン屋の検索もしてみましょう.
同じ作者の方が京都のラーメン屋のLinked Open Dataを公開しています.

エンドポイントが変わることに気を付けてください
今回はラーメン屋の説明と画像を取得することにします.

SPARQLの実践方法で説明していないGROUP BYが出てきます. これは普通のSQLと同じで変数 ?s が同じものを同じデータにまとめるものになります.

もしよくわからないという方は一度GROUP BYを外してみて実行するとよいと思います.

INPUT

from SPARQLWrapper import SPARQLWrapper

sparql = SPARQLWrapper(endpoint='https://dydra.com/haychmash/ramen/sparql', returnFormat='json')
sparql.setQuery("""
    PREFIX ic: <https://imi.go.jp/ns/core/rdf#>
    PREFIX ramen: <https://www.mirko.jp/ontology/ramen#>
    select DISTINCT ?s ?o ?img
    where {
    ?s ic:説明 ?o;
    ic:画像 ?img.
    }
    GROUP BY ?s
    LIMIT 100
""")
results = sparql.query().convert()
for i in range(len(results["results"]["bindings"])):
    print(
        results["results"]["bindings"][i]["s"]["value"],
        results["results"]["bindings"][i]["img"]["value"],
        results["results"]["bindings"][i]["o"]["value"]
    )

OUTPUT

https://www.mirko.jp/ramenLOD?001 https://www.mirko.jp/ramenLOD/pics/001/20171019_121104.jpg 私の職場から昼休みに徒歩で行けるつるかめは2店舗あり、こちらはその「本店」。カウンターのみ8席ほどのこじんまりとした店構え。通路が狭く通りにくいため、入口が2つある。また、椅子の低さの割にテーブルが高いため、背の低い人はやや食べにくいかも。
b8 https://www.mirko.jp/ramenLOD/pics/001/20171019_121834.jpg 写真は「魚介醤油つけめん」。スープには煮干しや鰹節の粉が大量に使用されており、濃厚な魚介のうまみにノックアウト寸前。ゆずの香りも食欲をそそる。つけめんの麺は冷たい「ひやもり」と温かい「あつもり」が選択できる。チャーシューは食べごたえのある赤身で、スープの底に沈んでいる。極太メンマも美味。食べ終わった後には、残ったつけ汁をスープで割って、飲みやすく提供してくれるサービスも嬉しい。
https://www.mirko.jp/ramenLOD?002 https://www.mirko.jp/ramenLOD/pics/002/20170831_120643.jpg 私の職場から昼休みに徒歩で行けるつるかめは2店舗あり、こちらは「のれん分け」のお店。決して広い店ではないが、「本店」よりは余裕のある店構えで、ゆったりと食べたい方はこちらのお店がお勧め。席の配置にも工夫が感じられる。
b17 https://www.mirko.jp/ramenLOD/pics/002/20170831_121853.jpg つけ麺メインのお店だが、ラーメンも旨い。ギリギリのラインまでパンチを効かせた濃厚魚介だしが、歯ごたえのある自家製ストレート麺と高相性。香ばしい炙りチャーシューに、極太メンマも絶品。半分まで食したら、酢ニンニクで味変もおすすめ。
https://www.mirko.jp/ramenLOD?003 https://www.mirko.jp/ramenLOD/pics/003/20170901_122323.jpg 最近京都で増えてきた「キラメキ」グループの新店舗。魁力屋と王将に挟まれた場所にオープンするのは味に絶対の自信の表れ。濃厚な鶏白湯を中心に、レベルの高いメニューが並ぶ。

リンクをタップしてみたところラーメンの画像が出てきました.
現在深夜なのですが, おなかがすいてきました(笑)

おいしそうなつけ麺の画像

おわりに


今回はSPARQLとPythonを使ったラーメン屋検索の解説をしました!
参考になったという方はぜひハートボタンを押していってください!

モチベーションが上がります!

記事内で不明な点等ございましたら気軽にご連絡ください.

Twitter: @kitahara_dev
email: kitahara.main1@gmail.com

参考文献


この記事が気に入ったらサポートをしてみませんか?