Lightroomのカタログファイルをデータベースとして読む(3)
Lightroomのカタログファイルの中身を可視化します。
せっかくなのでexif情報でなくLightroomで付与される情報、レーティング・都道府県情報を見ていきます。可視化にはplotlyというライブラリを使用しました。
クエリを読み込み・実行
lrcatのデータを読み込むためのクエリはここに置いてあります。
注意事項は前回の記事を参照してください。
import pandas as pd
import sqlite3
import plotly.express as px # 可視化ライブラリ
db_path = 'path/to/lrcat/hoge.lrcat'
con = sqlite3.connect(db_path)
# クエリを読み込む
with open("get_photo_info.sql") as f:
query = f.read()
# クエリ実行
df_lr = pd.read_sql(query, con=con)
# 撮影日
df_lr["date"] = pd.to_datetime(df_lr["captureTime"]).dt.date
レーティング(星)可視化
試しに、星1~5をそれぞれどの程度の枚数付与しているか見てみます
px.bar(df_lr["rating"].value_counts())
明らかな失敗写真は1、ちょっと失敗したけど残しておきたい写真が2、普通に撮れてるのが3、かなりのお気に入りが4以上みたいな感覚で星をつけていたので、これくらいの分布になるのは感覚的にも納得でした。
次に、各月にどれくらい星を付けていたか確認します。
tmp = df_lr.copy()
tmp["rating"]=tmp["rating"].fillna(0).astype(int)
tmp["month"] = tmp["date"].astype(str).str[:7]
tmp =tmp.pivot_table(index="month",columns="rating",aggfunc='size',fill_value=0) # レーティングごとの枚数
px.bar(tmp)
さきほどの図では省きましたが、レーティングをまだつけていない写真がかなり多く、全くつけていない月もあります。Lightroomで写真を管理し始めたのが最近なので、お気に入りの写真でもまだレーティングを付けていないものが結構あり、あとで付与しようと思いました。
ちなみに、星4以上は2019年6月が最も多く、このときは奈良公園に行っていました。
都道府県ヒートマップ(コロプレスマップ)
私はいつか47都道府県制覇したいなと思っていて、訪問済みの都道府県を確認できるようにしたかったのと、どの都道府県で写真を撮ることが多かったのか確認したいなと思っていました。
exifから得られる緯度経度情報だけでも位置のヒートマップは作れますが、都道府県ごとに区切られていたが方が見栄えが良いと思い、都道府県ごとのヒートマップで可視化しました。
都道府県の情報は、スマートニュース社が国土交通省の市区町村データを加工して作成したものを利用しました。
# 都道府県ごとの、訪問日数、訪問都市数、写真数を算出
df_state = (df_lr
.query("country=='日本'")
.groupby("state")[["date","city","id_local"]]
.nunique().reset_index())
# 地形ファイルの読み込み
# https://github.com/smartnews-smri/japan-topography
url = "https://raw.githubusercontent.com/smartnews-smri/japan-topography/main/data/municipality/geojson/s0010/prefectures.json"
with urlopen(url) as response:
counties = json.load(response)
# 可視化
fig = px.choropleth_mapbox(df_state,
geojson=counties,
featureidkey='properties.N03_001',
locations='state', color='date',
mapbox_style="carto-positron",
zoom=4, center = {"lat": 37.5, "lon": 139},
opacity=0.5,
)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()
まだ、Lightroomにimportできていない写真もあるのですが、思っていたよりと結構な数の都道府県を踏破できていることを確認できました。関東だと東京・神奈川、関西だと兵庫の撮影枚数が特に多かったです。