DBpediaを使って、過去の有馬記念勝ち馬の毛色を調べる

#はじめに
授業で、Linked Open Dataについての課題があり、DBpediaを使えばスクレイピングなどしなくてもそこそこのデータを持ってこれるのでは、とのことで、来たる有馬記念に向けて、過去の有馬記念の勝ち馬の毛色を調べて見ました。

#DBpediaとは
Wikipediaの情報をRDFという、コンピュータが識別しやすい形で抽出するプロジェクトのこと。

## 例
夏目漱石を例に、DBpediaをみてみると [夏目漱石 -dbpedia](http://ja.dbpedia.org/page/%E5%A4%8F%E7%9B%AE%E6%BC%B1%E7%9F%B3)
このように、

| Property      |       value |
|:-----------------|------------------:|
| prop-ja:birthDate | --02-09 |
| dbpedia-owl:birthPlace | dbpedia-ja:武蔵国|
出生地、誕生日などが扱いやすいように抽出されています。

さて、これを使って、過去の有馬記念の勝ち馬の毛色を調べて見ました。

#投げたクエリー
```
select distinct ?color_name (count(?color_name) AS ?color) where {
  {
    ?name prop-ja:wikiPageUsesTemplate template-ja:有馬記念勝ち馬.
  }

  ?name rdfs:label ?label ;
    prop-ja:色 ?color_name.
} ORDER BY DESC(?color)
```
##結果
<table class="sparql" border="1">
  <tbody><tr>
    <th>color_name</th>
    <th>color</th>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/鹿毛">http://ja.dbpedia.org/resource/鹿毛</a></td>
    <td>27</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/黒鹿毛">http://ja.dbpedia.org/resource/黒鹿毛</a></td>
    <td>11</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/栗毛">http://ja.dbpedia.org/resource/栗毛</a></td>
    <td>10</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/芦毛">http://ja.dbpedia.org/resource/芦毛</a></td>
    <td>2</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/青鹿毛">http://ja.dbpedia.org/resource/青鹿毛</a></td>
    <td>2</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/青毛">http://ja.dbpedia.org/resource/青毛</a></td>
    <td>1</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/栃栗毛">http://ja.dbpedia.org/resource/栃栗毛</a></td>
    <td>1</td>
  </tr>
</tbody></table>

なるほど、鹿毛が多い...っと、となるのですが、そもそも競走馬の毛色は何色が多いの？鹿毛が多いのでは？と思って調べて見ました。

```
select distinct ?color_name (count(?color_name) AS ?color) where {
  {
    ?name dbpedia-owl:wikiPageWikiLink category-ja:日本生産の競走馬.
  } union {
     ?name dbpedia-owl:wikiPageWikiLink category-ja:日本調教の競走馬.
  }

  ?name rdfs:label ?label ;
    prop-ja:色 ?color_name.
} ORDER BY DESC(?color)
```
<table class="sparql" border="1">
  <tbody><tr>
    <th>color_name</th>
    <th>color</th>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/鹿毛">http://ja.dbpedia.org/resource/鹿毛</a></td>
    <td>1575</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/栗毛">http://ja.dbpedia.org/resource/栗毛</a></td>
    <td>717</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/黒鹿毛">http://ja.dbpedia.org/resource/黒鹿毛</a></td>
    <td>631</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/芦毛">http://ja.dbpedia.org/resource/芦毛</a></td>
    <td>185</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/青鹿毛">http://ja.dbpedia.org/resource/青鹿毛</a></td>
    <td>132</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/青毛">http://ja.dbpedia.org/resource/青毛</a></td>
    <td>58</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/栃栗毛">http://ja.dbpedia.org/resource/栃栗毛</a></td>
    <td>37</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/白毛">http://ja.dbpedia.org/resource/白毛</a></td>
    <td>14</td>
  </tr>
  <tr>
    <td><a href="http://ja.dbpedia.org/resource/馬の毛色">http://ja.dbpedia.org/resource/馬の毛色</a></td>
    <td>6</td>
  </tr>
  <tr>
    <td>"鹿毛"@ja</td>
    <td>2</td>
  </tr>
  <tr>
    <td>"不明"@ja</td>
    <td>1</td>
  </tr>
  <tr>
    <td>"赤毛（鹿毛）"@ja</td>
    <td>1</td>
  </tr>
</tbody></table>

はい、推測の通り、そもそも鹿毛が多いようでした。

MySQLでこうやりたいけど、SPARQLだとどうやるの...となってちょっとイライラしてしまいますが、スクレイピングなどしなくても興味のあるデータがさらっととってこれるので割と面白いのでは、と思いました:slight_smile: