今回はバッテリーの解析データの話です.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のiOSバージョン : iOS17.4
スポンサーリンク
採用していないデータまだまだある
解析データからバッテリー寿命などに関わるデータを閲覧する方法についてこのブログで紹介してからそろそろ4年が経とうとしていますが.
その中にはもっと様々な種類のデータが記録されており、このレシピで取り扱っているのはその一部に過ぎず、まだまだ色んなデータが書き込まれています.
TotalOperatingTime
そのひとつにTotalOperatingTimeというキーがあります.
画像の場合その値は38905ですね.
直訳すると「総稼働時間」です.
端末(この解析データはiPhone8)とその値の大きさから、この値の単位は時間(hour)であろうと推測できます.
実際38905÷24の整数部がround(38905/24)=1621、24で割った余りがfmod(38905,24)=1.
この解析ログのタイムスタンプが2024/3/8 9:05なのでこれから1621日と1時間引いた結果をGoogleスプレッドシートで計算すると2019/9/29 9:05ということになります.
TotalOperatingTimeの方が1時間刻みなため1時間前後の誤差は無視できるとして、理屈で言えばこの結果は端末が稼働した日時と考えられます.
この値はなんぞや
じゃあこの2019/9/29はどんな日でしょうか.
まず考えられるのは調査対象であるiPhone8の発売日ですが、実際には2017/9/22なので違います.
しかし実際にはその端末を初めて使うタイミングは様々です.
なので考えうる指標は工場出荷、より具体的に言えば例えばOSの書き込みや組み立てのタイミングでしょう.
それが今回の場合9/22だった…とすれば一応の説明はつきます.
現にこのiPhone8を新品で購入したのは2020/1/19なのでiPhone8の発売日とも違います.
iPhone8の発売が2017/9/22、解析データから逆算した日時が2019/9/29、実際に新品で購入したのが2020/1/19、全部違います.
「新品で購入したユーザーが初めて電源を入れた日からの時間」だったらいいんですがそうではないようです.
ちなみにこちらで知らたところ、今回のiPhone8の製造日は2019/9/23でした.
製造日と稼働した日が同一なのか別なのかはわかりません.
何れにしろ色々と疑問を持ち始めたので、予め蓄えておいたこれまでの解析データから該当部分を取り出して調べてみました.
TotalOperatingTimerの記録を見る
というわけでこれが解析データがAnalytics-~になったiOS16以降の記録です.
想像以上にメチャクチャで驚きました(棒グラフだと丸められてしまうため折れ線グラフにしています).
同じ端末なのに記録された解析データによって最も早いもので9月5日、遅いもので10月2日という結果になりました.
ただこの解析データ、実は日によって前日と同じであることがしょっちゅうあります.
そのため前日と同じ結果となったものは正しいデータとみなすには無理がありそうです.
それを取り除いた上でグラフにし直してみます.
少しおとなしい結果になりましたがそれでも最速と最遅に変化はありません.
始まりがどこかはさておき、毎日24カウントすればこのような歪な結果になるはずはありません.
しかもこのグラフ、実は外れ値を取り除いています.
例えば2024/1/25のくだんの値は26296でした、これは計算すると2021/1/8になります.
前後のデータからの計算では2019/9/7~2019/9/9であるためあまりにもかけ離れています.
当初は1ヶ月程度の誤差はそういうものかと思っていたのですが1年を超える誤差はさすがに無視できません.
しかもそんなデータが465日のうち10日分あったのです.
(特に2023/7/18~7/24の7日間に集中していたのですが他のデータに異常は認められず理由は不明です)
外れ値を含めた結果が上の画像です.
こうして見ると1ヶ月以外の誤差が無視できるほど外れ値がかけ離れているのがわかります.
2024/1/8の記録は逆に計算上2019/4/3となっています.
〆
日付を計算する手間を抜きにしても、唐突に前後で値が大きく変わっている日があるので一体何をカウントしているのか判断がつきません.
単純にカウントしているのであれば毎日24増えるはずですが突然その数値がおかしくなるのです.
しかもその値は製造日と違う日ばかり…
これを利用するくらいならsndeep.infoのようなサイトで予め製造日などを調べ、それを使って日数を計算した方がまだ現実的です.
この辺がはっきりするまでBatteryCheckerでの採用は控えます.