- 持田
- Craftsman Software という受託(?)の会社で YAML 書いてる
- 関でも、ジャバでもない
- 関東在住
- Java はほとんど最近書いてない
- 関ジャバに一度は参加しておくかと思って参加してみた
- なお、今回は今年参加する
2度目3度目の勉強会
- 自分を特徴づける何らかの継続的な活動
- 客観的なデータをもって分析する
- 次への指針を導く指標とする
- 多くの人の場合、仕事が当てはまる
- まあ、それは各自の仕事でやればいいか
- 仕事外で何やっていたか?
- ほぼすべての漫画は Kindle で読んでる
- Kindle での読書記録は Amazon から csv 形式でダウンロードできる
- データをダウンロードして、 duckdb で遊んでみよう
- このページを参考にすればデータのリクエストはすぐできます
- データリクエストからおおよそ 2 日程度でデータをダウンロードできるようになります
読書履歴として使うのが以下の 2 つの CSV
- Kindle.Devices.ReadingSession.csv
- ASIN ごとの読書の履歴
- Digital.SeriesContent.Relation.2/BookRelation.csv
- 書籍のタイトル、購入日など
- 漫画の巻数や出版社の情報はすべてタイトルに入っているので、それらは強引に分離してやる必要がある
1日外出録ハンチョウ(21) (ヤングマガジンコミックス) (Japanese Edition)
サンキューピッチ 3 (ジャンプコミックスDIGITAL) (Japanese Edition)
Kotlin で書いた
- 半角・全角数字の混在
- 括弧の半角・全角
- 巻数記載の表記ゆれ
- タイトルから巻数を分離
- タイトルから出版社分離
- タイトルのわからないデータの除去
fun String.normalize(): String = Normalizer.normalize(this, Normalizer.Form.NFKC)
val numberRegex = Regex("""(\d+)""")
val publisherParenthesisRegex = Regex("""\((\S+\s+)?\S+\)""")
val appendixRegex = Regex("""【.+】""")
val titleDescriptionRegex = Regex("""(通(常|巻)|モノクロ|カラー)版""")
val spaceRegex = Regex("""\s+""")
val onceLastNumberWithSpacesRegex = Regex("""\s*\(?\s*\d+\s*\)?巻?\s*$""")
val rawTitle = getTitle() as String
if (rawTitle.normalize() == "Not Available") return@mapNotNull null
val title = numberRegex.replace(rawTitle.normalize()) { match -> " %d ".format(match.groupValues[1].toInt()) }
.replace("(Japanese Edition)", "")
.replace(appendixRegex, "")
.replace(titleDescriptionRegex, "")
.replace(spaceRegex, " ")
val volume = numberRegex.findAll(title).lastOrNull()?.value?.toIntOrNull()
val publisher = publisherParenthesisRegex.find(title)?.value?.replace("(", "")?.replace(")", "") ?: ""
return@mapNotNull Book(
it.asin,
title.replace(publisherParenthesisRegex, "").replace(onceLastNumberWithSpacesRegex, ""),
volume,
publisher,
it.creationDate,
)
- Kindle のデータを分析すると、どのようなことに関心を持っていたかわかる(?)
- duckdb すごい
- 技術書で読み終わった書籍あったんだけど、出てこなかった...
- Amazon Music の分析もできるので、そちらもやってみると楽しい