「美人」な日本酒

2 min read

日本酒データ分析1 美人

Pythonで「〜美人」を分析する

  • toc: true
  • badges: true
  • comments: true
  • categories: [分析]
  • image: images/logo.png
#hide
import warnings
warnings.simplefilter('ignore')
from IPython.display import set_matplotlib_formats
set_matplotlib_formats('png')

さけのわデータ (https://sakenowa.com) のデータを加工して利用しています。

概要

日本酒には「〜美人」とつく銘柄があります。今回はどんなお酒が「美人」なのかをフレーバーやタグから分析します。

使うデータ

さけのわデータをRDB形式で保存するで作成したデータベースからSQLを叩いて必要なデータをとります。

なお、2020年9月21日時点でのデータとなります。

import sqlite3
import pandas as pd
conn = sqlite3.connect('data/sakenowaRDB.db')

「美人」を見つける

「美人」を含んでいる銘柄を検索します。蔵元と都道府県のデータも結合しておきます。

query = (
    'SELECT brands.name as 銘柄名, breweries.name as 蔵元名, areas.name as 都道府県 '
    'FROM brands LEFT JOIN breweries ON brands.breweryId = breweries.id '
    'LEFT JOIN areas ON breweries.areaId = areas.id '
    'WHERE brands.name LIKE "%美人%"'
)
pd.read_sql_query(query, conn)
銘柄名 蔵元名 都道府県
0 南部美人 南部美人 岩手県
1 ゆきの美人 秋田醸造 秋田県
2 舞美人 美川酒造場 福井県
3 美人蔵部 北山酒造 兵庫県
4 都美人 都美人酒造 兵庫県
5 東洋美人 澄川酒造場 山口県
6 福久美人 広島県
7 福美人 福美人酒造 広島県
8 雪中美人 高砂酒造 北海道
9 雪美人 津南醸造 新潟県
10 島美人 北山酒造 兵庫県
11 おしまこ美人 関乃井酒造 青森県
12 下田美人 万大醸造 静岡県
13 越後美人 上越酒造 新潟県
14 紬美人 野村醸造 茨城県
15 菊美人 菊美人酒造 福岡県
16 加賀美人 吉田酒造店 石川県

蔵元名が空になっている「福久美人」はGoogleで検索してもヒットしないので「福美人」の間違いでしょう。

また「美人蔵部」も調べたところ北山酒造の女性向け販促会であるので「島美人」と同じと考えた方が良さそうです。

美人蔵部のページ

結局、全国に15の「美人」が見つかったことになります。

山口の東洋美人は一度いただいたことがあります。軽やかな飲み口で大変美味でございました。

岩手の南部美人は酒造りに機械学習を用いているそうで、一度飲んでみたいですね。

日本酒造りにディープラーニング 岩手の銘酒「南部美人」の挑戦

「美人」のランキングをみてみる

野暮なこととは知りつつも、順番が気になるのが人の性。ということで、15人の「美人」のランキングでの順位をみてみましょう。

まずは全国ランキングから。

query = (
    'SELECT brands.name as 銘柄名, breweries.name as 蔵元名, areas.name as 都道府県, ovr.rank, ovr.score '
    'FROM brands '
    'LEFT JOIN breweries ON brands.breweryId = breweries.id '
    'LEFT JOIN areas ON breweries.areaId = areas.id '
    'LEFT JOIN overall_ranking as ovr ON brands.id = ovr.brandId '
    'WHERE brands.name LIKE "%美人%" AND brands.name NOT LIKE "%福久%" AND brands.name NOT LIKE "%蔵部%" '
    'AND ovr.rank IS NOT NULL'
)
pd.read_sql_query(query, conn)
銘柄名 蔵元名 都道府県 rank score
0 東洋美人 澄川酒造場 山口県 23 4.01195

全国ランキングは50位まであるのですが、ランク入りした「美人」は23位の「東洋美人」だけでした。流石全国ランキングだけあって厳しいですね。

では都道府県でのランキング圏内に入っている「美人」をみてみましょう。

query = (
    'SELECT brands.name as 銘柄名, breweries.name as 蔵元名, areas.name as 都道府県, rank.rank, rank.score '
    'FROM brands '
    'LEFT JOIN breweries ON brands.breweryId = breweries.id '
    'LEFT JOIN areas ON breweries.areaId = areas.id '
    'LEFT JOIN rankings as rank ON brands.id = rank.brandId '
    'WHERE brands.name LIKE "%美人%" AND brands.name NOT LIKE "%福久%" AND brands.name NOT LIKE "%蔵部%" '
    'AND rank.rank IS NOT NULL'
)
pd.read_sql_query(query, conn)
銘柄名 蔵元名 都道府県 rank score
0 南部美人 南部美人 岩手県 2 4.018787
1 ゆきの美人 秋田醸造 秋田県 9 4.006656
2 舞美人 美川酒造場 福井県 5 4.006923
3 都美人 都美人酒造 兵庫県 9 4.021198
4 東洋美人 澄川酒造場 山口県 2 4.057106

都道府県でのランキング圏内に入ったのは5銘柄でした。

15銘柄中5銘柄がそれぞれの都道府県の10位以内に入るのですから、「美人」には美味しいお酒が多いと言えるのではないでしょうか。

「美人」のフレーバーチャートをみてみよう

「美人」と名付けられるお酒にはどんな共通点があるのか、「美人」の条件はあるのか。フレーバーチャートをみてみましょう。

matplotlibを使います。

# 日本語を使うための設定。各自の環境による。
import matplotlib as mpl
mpl.rcParams['font.family'] = 'IPAGothic'
import matplotlib.pyplot as plt
query = (
    'SELECT brands.name as 銘柄名, breweries.name as 蔵元名, areas.name as 都道府県, fc.flavor, fc.score '
    'FROM brands '
    'LEFT JOIN breweries ON brands.breweryId = breweries.id '
    'LEFT JOIN areas ON breweries.areaId = areas.id '
    'LEFT JOIN flavor_charts as fc ON brands.id = fc.brandId '
    'WHERE brands.name LIKE "%美人%" AND brands.name NOT LIKE "%福久%" AND brands.name NOT LIKE "%蔵部%" '
    'AND fc.flavor IS NOT NULL'
)
df_fc = pd.read_sql_query(query, conn)
print(df_fc.銘柄名.unique())
['南部美人' 'ゆきの美人' '舞美人' '都美人' '東洋美人' '福美人']

さけのわでフレーバーチャートが付くのはある程度情報が集まったお酒だけのようで、都道府県ランキングで圏内だった5銘柄に「福美人」を加えた6銘柄のみフレーバーチャートのデータがあります。

棒グラフにしてみましょう。

fig = plt.figure(figsize=(9,6))
for i, name in enumerate(df_fc.銘柄名.unique()):
    ax = fig.add_subplot(2,3,i+1)
    df_fc[df_fc.銘柄名 == name].plot.barh(x="flavor",y="score",title=name,ax=ax,legend=None,
                                      xlim=(0., 1.))
fig.subplots_adjust(wspace=0.5, hspace=0.5)
plt.show()

png

あんまり統一感がないですね。これなら美人と言える!!という特徴はないのでしょうか。

一応、6銘柄の平均を算出して「平均的美人」をみてみましょうか。

df_fc.groupby(['flavor']).mean().plot.barh(title='平均的美人', legend=None, xlim=(0., 1.))
<AxesSubplot:title={'center':'平均的美人'}, ylabel='flavor'>

png

「重厚よりは軽快で、華やかさと芳醇さを備える」といったところでしょうか。

参考に、「美人」以外のお酒の平均もみておきます。

query = (
    'SELECT brands.name as 銘柄名, breweries.name as 蔵元名, areas.name as 都道府県, fc.flavor, fc.score '
    'FROM brands '
    'LEFT JOIN breweries ON brands.breweryId = breweries.id '
    'LEFT JOIN areas ON breweries.areaId = areas.id '
    'LEFT JOIN flavor_charts as fc ON brands.id = fc.brandId '
    'WHERE brands.name  NOT LIKE "%美人%" AND brands.name NOT LIKE "%福久%" AND brands.name NOT LIKE "%蔵部%" '
    'AND fc.flavor IS NOT NULL'
)
df_fc = pd.read_sql_query(query, conn)
df_fc.groupby(['flavor']).mean().plot.barh(title='平均的不美人', legend=None, xlim=(0., 1.))
<AxesSubplot:title={'center':'平均的不美人'}, ylabel='flavor'>

png

「美人」を形容する言葉をみてみよう

最後に、「美人」に付与されることが多いタグから、美人を形容する言葉を抽出してみましょう。

query = (
    'SELECT brands.name as 銘柄名, ft.tag '
    'FROM brands '
    'LEFT JOIN brand_flavor_tags as bft ON brands.id = bft.brandId '
    'LEFT JOIN flavor_tags as ft ON bft.tagId = ft.id '
    'WHERE brands.name LIKE "%美人%" AND brands.name NOT LIKE "%福久%" AND brands.name NOT LIKE "%蔵部%" '
    'AND ft.tag IS NOT NULL'
)
df_tag = pd.read_sql_query(query, conn)
df_tag.銘柄名.unique()
array(['南部美人', 'ゆきの美人', '舞美人', '都美人', '東洋美人', '福美人', '雪中美人', '雪美人', '島美人',
       '下田美人', '菊美人', '加賀美人'], dtype=object)

12銘柄にタグが付いています。3つ以上の銘柄につけられたタグをみてみましょう。

df_tag.groupby(['tag']).count().sort_values(ascending=False, by='銘柄名').query('銘柄名>2')
銘柄名
tag
酸味 7
旨味 6
スッキリ 6
甘味 5
しっかり 5
辛口 5
フルーティ 4
熱燗 3
バランス 3
綺麗 3
常温 3
甘酸っぱい 3
さわやか 3
安定 3

「酸味」が7銘柄で1位という結果になりました。

結び

以上、「美人」と名のついた日本酒の分析でした。

ここまでお読みいただきありがとうございました。気になったお酒はありましたでしょうか。

私としては「東洋美人」をもう一回飲んでみたいのと、バランスのとれた「南部美人」、重厚な「舞美人」を味わってみたいと思いました。

今回は「美人」に注目した分析でしたが、「山」とか「川」とか銘柄名に注目した分析は他にもいっぱいできると思います。

今後の更新をお楽しみに!

Discussion

コメントにはログインが必要です。