破格の基本料金0円というプランを引っさげて鳴り物入りで携帯通信事業に参入した楽天。
どこからどう見ても集客目的の一過的プランであり、いつまでも無料とはいかないことを予想していた方も多いのではないでしょうか🤔
そして参入からおよそ1年が経ち、遂に基本料金0円というプランが消滅。新たに基本料金980円が最安のプランとなる事が発表されました。
理由は後で述べますが、 私はもう楽天モバイルを使い続けるつもりはなくなったので、遅かれ早かれ別事業者に乗り換えるか楽天の回線を閉じるかする と思います。
これを機にいろいろな料金プランを調査し、私なりに最適な携帯料金を調査することにしました。
参考までに自分の今の構成
スマートフォンは一台持ち、メインはUQモバイル(物理SIM)、サブ回線として楽天モバイル(eSIM)を使用しています。
UQ回線
- メイン回線
- 昨年スタートした「繰り越しプランS+5G(1628円)」を使用
- 3GBしか容量が無い割に値段が若干高め
- 通信速度がやたらと安定している
- UQの回線は+2GBが13ヶ月間無料で追加されるキャンペーンで実質5GB/月
正直、結構これで足りてます。でも3GBだとめいっぱい使っちゃうかな?という感じ。
楽天回線
- 通話無料機能
- 稀にauが入らない緊急時に使用するバックアップ回線
- eSimでの利用でした。
- 最近ではほぼ使用せず
楽天モバイルのよかったところを振り返る
一年使ったよしみで楽天モバイルのいいところを振り返っておきます。
📞専用アプリを使用する事で無料電話ができた
正直私は滅多に通話を使うことは無いのですが、ゼロではないです。在宅ワーク時、職場の上司への連絡手段として電話は欠かせません。 この点は料金体系が変わったとしても楽天モバイルの強みであり続けるでしょう。
ただし、このアプリで通話すると音質がクソすぎて必ずと言っていいほど別人と間違えられました。(親にはオレオレ詐欺だと思われた)
また、昨年ではそもそも一部のiphoneユーザーでは電話がかからない不具合が発生していました。結構問題になってましたが、結局どうなったんでしょうね?
🏅楽天ポイントの連携
楽天経済圏で生きる人達にとってはこれが最重要ポイントですよね🌅 楽天モバイルユーザーならばSPU🏅がプラス1倍されるので、楽天市場でのポイント還元が1%増加します。
しかし、 この2年ほどで楽天SPU🏅は度重なる改悪が導入され、私も今ではそこまで楽天ポイントを重要視していません 。
かつては一切amazonを使わず、キャンペーン開催時に楽天市場で計15倍ポイント還元をせしめる、なんて事をやっていましたが、もうそれも過去の話。今ではどんなに頑張っても10倍が関の山です。
🔭通信エリアのバックアップになる
楽天は言わずもがな、auでもdocomoでもsoftbankでもない、自分で基地局を持つ通信事業社です。
いざと言う時にauの電波は入らないが楽天が入る、みたいな事が稀ですが起きえます。私の職場はまさにこれでした。
メイン回線のUQ(au)が入らず、楽天だとめちゃくちゃ入るという状況でした。 しかし、その後auの基地局が会社に設置されたため、この問題は解決。楽天モバイルの優位性をひとつ失いました🍃
🚅5Gが使用可能
今回の調査条件にも挙げましたが、5Gは本当に速いです
私は主に神奈川と東京都郊外をうろうろしているのですが、かなり多くの場所で5Gが入るようになりました。今更これが使えなくなるなんて考えられません。
NTT docomoは「docomo以外の5Gはなんちゃって5Gであって、真の速度を発揮していない」と主張していました。この主張はある種正しいのですが、そのなんちゃって5Gも十分速いです。以降で言及する5Gでは5Gとなんちゃってを区別していませんのでご注意ください。
🙇♂️[おことわり]この記事に関する注意
- 携帯の料金体系は各社によって仕組みが異なるため、すべての情報を収集することは諦めました。
- 2022年5月時点の各社HPから手動で集めた情報です。間違っているかもしれません。
- 楽天モバイル然り、突然料金プランが変更されることがあります。私の興味が続く限りしか変更内容はフォローしません。
手動で調査した結果まとめ
調査の基準
日本で発表されているすべての料金プランを確認することなど不可能です。
そのため、今回はあくまで私的に検討の余地もないものはスルーさせていただきました。
容量は原則10GBまで
私は5GBまでのプランをメイン回線で使っていて、足りないと感じることはほぼありません。
そのため、10GB以上のプランは考慮すらしいません。
5G使用可能
5G出たての頃は「4G LTEでも十分速いし、別に5Gじゃなくても良い」 と思ってましたが、今は全くそう思いません。5Gは必須です。
以前だったら数百MBくらいあるyoutube動画を携帯でストリーミングするなんて考えられませんでしたが、4Gや5Gの速度なら待ち時間ゼロで動画視聴が可能です。
一般的に技術が進化する度、コンテンツは大容量化していきます。最早ネット上のコンテンツは5G前提です。1度上げてしまった生活水準を捨てることが難しいのと同様、1度味わってしまった高速通信を捨てることは厳しすぎます。
なんか信用できないと直感したら捨てる
わずかですが、料金表が税抜きなのか税込みなのか表記されていなかったり、細則が説明されていない事業者がありました。
こういう事業者は「通信事業者として信用できない気がする」ため、調査対象には含めていません。
データ収集して思ったこと
この記事のコンセプトは定量的に解析すること ですが、データに落とし込めなかった定性的な要素もあるので紹介したいと思います。データフリーは魅力的だが、プランは少ない
個人的に注目していたのは音楽系聴き放題のデータフリーです。
ざっと調べたところOCNモバイルやBIGLOBEなどが良さそうでしたが、BIGLOBEについてはよくよく規約を読むとポッドキャストは対象外らしい😥とのことで、希望はOCNのみ・・・!
私はBBCニュースや英語学習系のポッドキャストをめっちゃ聞いてます。無料でいくらでも勉強できるのでおすすめです!
しかし私のように通勤時、車の中で聴きまくっているとあっという間に5GB使っちゃうのは注意です。
その他では、LINEの通信が無料となるプランがLINEMOやNUROから出ています。私はLINEで大容量通信をするわけでもないので関係ないかな・・・😅
安い会社、docomo使いがち
ちょっとマイナーな会社で、ぱっと見めっちゃ安い会社ほどdocomoの回線を採用しがちな気がしました。
docomoは5Gの方針で経営判断ミスをしたせいで、auやsoftbankからはややビハインドした印象があります。しかし、最近の方針転換によりこの懸念は解消するでしょう。
現状、docomoの5Gエリアは狭すぎるのであまり使う気にはなりません🏝️
データ作成
やっとメインのコンテンツです。
データについて手動で調べてファイルに保存しました。 以下のようなyamlファイルに記述しました。
今回あえてリストとして扱いやすいyamlにしてみました💡
もう少しデータが多ければcsvなどの表形式にしたかもしれません。
yamlの読み込み
yamlはyamlパッケージを使用して扱うことができます。
pacman::p_load(tidyverse, yaml)
dat <- yaml::read_yaml("./data.yaml")
dat |>
head()
pacman::p_load(tidyverse, yaml)
dat <- yaml::read_yaml("./data.yaml")
dat %>%
head()
# Show in New Window
# $OCN
# $OCN$PLAN_500
# $OCN$PLAN_500$company
# [1] "OCN"
#
# $OCN$PLAN_500$plan
# [1] "PLAN_500"
#
# $OCN$PLAN_500$data
# [1] 0.5
#
# $OCN$PLAN_500$free_call
# [1] 10
#
# $OCN$PLAN_500$call_rate
# [1] 11
#
# 以下省略
ネストしたリストを平たくする
このままではリストのリスト(2段階の入れ子状、ネストしているともいう)で扱いにくいので、平たい表形式にします。
purrrのmap_dfr()
関数を使って結合していきます。 この関数はリストに対して同じ処理を実行することができる柔軟な関数で、戻り値のデータフレームを結合して返してくれます。
今回は2段階潜ればas_tibble
によるtibble変換が可能な形式にしておいたので、以下のように2回map_dfr
します。
as.data.frame()
でdataframeに変換するのも良いですが、as_tibble()
でtibbleにしましょう。 tibbleはdataframeの進化版みたいなもので、多くの場合tibbleの方が扱いやすいです。
map系の関数は使い方が難しいのでまた今度説明記事を書きたいと思います。
df_raw <-
dat |>
map_dfr(function(x) {
x |>
map_dfr(function(y) {
y |>
as_tibble()
})
})
df_raw <-
dat %>%
map_dfr(function(x) {
x %>%
map_dfr(function(y) {
y %>%
as_tibble()
})
})
df_raw
# # A tibble: 34 × 15
# company plan data free_call call_rate call_rate_unit
# <chr> <chr> <dbl> <int> <int> <int>
# 1 OCN PLAN_500 0.5 10 11 30
# 2 OCN PLAN_1000 1 0 11 30
# 3 OCN PLAN_3000 3 0 11 30
# 4 OCN PLAN_6000 6 0 11 30
# 5 OCN PLAN_10000 10 0 11 30
# 6 BIGLOBE PLAN_1000_wi… 1 0 9 30
# 7 BIGLOBE PLAN_3000_wi… 3 0 9 30
# 8 BIGLOBE PLAN_6000_wi… 6 0 9 30
# 9 BIGLOBE PLAN_3000 3 0 100000 0
# 10 BIGLOBE PLAN_6000 6 0 100000 0
# # … with 24 more rows, and 9 more variables: free_music <int>,
# # price <int>, speed <chr>, area <chr>, initial_cost <int>,
# # exit_cost <int>, free_youtube <int>, exit_period <int>,
# # free_line <int>
これで「tidyなデータ」になりました。
前処理
とにもかくにもデータが手に入ったら前処理です。
「前処理」とは、扱いやすい形式にデータを整えたり、欠損値や空白といった**"データの汚い部分"を綺麗にしてあげる**ことを指します。
R界隈では 「前処理」イコール「tidyデータの作成」 と解釈しても問題ありません💡
欠損値の補完
自分でデータを作っておいてなんですが、今回欠損値がたくさんあります😅
なぜかと言うと、**LINE通信量が無料になる特典(データフリー)**などの特殊なプランを全てのプランで記入するのが面倒だったからです。
こういう時はとりあえずNA
にしておいて、tidyverseで直すのが楽です👋
NAを埋めるにはreplace_na()
を使うのが正攻法です。
df_nafilled <-
df_raw |>
replace_na(list(
exit_cost = 0,
free_youtube = 0,
exit_period = 0,
free_line = 0,
free_music= 0,
initial_cost = 0
))
df_nafilled <-
df_raw %>%
replace_na(list(
exit_cost = 0,
free_youtube = 0,
exit_period = 0,
free_line = 0,
free_music= 0,
initial_cost = 0
))
df_nafilled
# # A tibble: 34 × 15
# company plan data free_call call_rate call_rate_unit
# <chr> <chr> <dbl> <int> <int> <int>
# 1 OCN PLAN_500 0.5 10 11 30
# 2 OCN PLAN_1000 1 0 11 30
# 3 OCN PLAN_3000 3 0 11 30
# 4 OCN PLAN_6000 6 0 11 30
# 5 OCN PLAN_10000 10 0 11 30
# 6 BIGLOBE PLAN_1000_wi… 1 0 9 30
# 7 BIGLOBE PLAN_3000_wi… 3 0 9 30
# 8 BIGLOBE PLAN_6000_wi… 6 0 9 30
# 9 BIGLOBE PLAN_3000 3 0 100000 0
# 10 BIGLOBE PLAN_6000 6 0 100000 0
# # … with 24 more rows, and 9 more variables: free_music <int>,
# # price <int>, speed <chr>, area <chr>, initial_cost <int>,
# # exit_cost <int>, free_youtube <int>, exit_period <int>,
# # free_line <int>
NA
(欠損値)は何かと解析の邪魔になる存在ですが、扱い方を知っていればデータ入力の手間を軽減することにもつながります。
方法は今回のreplace_na()
以外にもあるので、少しずつ覚えるとよいでしょう🌤️
通信エリアの整頓 ~結合された文字列を分解して新しい行をつくる~
調査して分かったのですが、事業者によっては通信回線(au, softbank, docomo)が選択可能なプランがありました。
今回はこれらをau|softbank|docomo
といった感じで表記したのですが、たとえば、
AUが使えるのは何社か?
とか、
3回線選べるのはどこか?
といった解析をするには不向きは表記方法です。そこで、separate_rows()
関数を使って複数行に分割します💡
df_nafilled |>
# ここでは対象列だけを示しています
dplyr::filter(str_detect(area, "\\|")) |>
# わかりやすくするためarea列を先頭に移動
relocate(area)
df_nafilled %>%
# ここでは対象列だけを示しています
dplyr::filter(str_detect(area, "\\|")) %>%
# わかりやすくするためarea列を先頭に移動
relocate(area)
# # A tibble: 15 × 15
# area company plan data free_call call_rate call_rate_unit
# <chr> <chr> <chr> <dbl> <int> <int> <int>
# 1 au|docomo BIGLOBE PLAN… 1 0 9 30
# 2 au|docomo BIGLOBE PLAN… 3 0 9 30
# 3 au|docomo BIGLOBE PLAN… 6 0 9 30
# 4 au|docomo BIGLOBE PLAN… 3 0 100000 0
# 5 au|docomo BIGLOBE PLAN… 6 0 100000 0
# 6 au|softbank|d… NURO PLAN… 3 0 22 30
# 7 au|softbank|d… NURO PLAN… 5 0 22 30
# 8 au|softbank|d… NURO PLAN… 10 0 22 30
# 9 docomo|au IIJmio PLAN… 3 0 11 30
# 10 docomo|au IIJmio PLAN… 5 0 11 30
# 11 docomo|au IIJmio PLAN… 9 0 11 30
# 12 docomo|softba… JCOM PLAN… 1 0 20 30
# 13 docomo|softba… JCOM PLAN… 5 0 20 30
# 14 docomo|softba… mineo PLAN… 1 0 22 30
# 15 docomo|softba… mineo PLAN… 5 0 22 30
# # … with 8 more variables: free_music <int>, price <int>, speed <chr>,
# # initial_cost <int>, exit_cost <int>, free_youtube <int>,
# # exit_period <int>, free_line <int>
df_nafilled |>
# ここでは対象列だけを示しています
dplyr::filter(str_detect(area, "|")) |>
separate_rows(area) |>
# わかりやすくするためarea列を先頭に移動
relocate(area)
df_nafilled %>%
# ここでは対象列だけを示しています
dplyr::filter(str_detect(area, "|")) %>%
separate_rows(area) %>%
# わかりやすくするためarea列を先頭に移動
relocate(area)
# # A tibble: 56 × 15
# area company plan data free_call call_rate call_rate_unit
# <chr> <chr> <chr> <dbl> <int> <int> <int>
# 1 docomo OCN PLAN_500 0.5 10 11 30
# 2 docomo OCN PLAN_1000 1 0 11 30
# 3 docomo OCN PLAN_3000 3 0 11 30
# 4 docomo OCN PLAN_6000 6 0 11 30
# 5 docomo OCN PLAN_10000 10 0 11 30
# 6 au BIGLOBE PLAN_1000_wi… 1 0 9 30
# 7 docomo BIGLOBE PLAN_1000_wi… 1 0 9 30
# 8 au BIGLOBE PLAN_3000_wi… 3 0 9 30
# 9 docomo BIGLOBE PLAN_3000_wi… 3 0 9 30
# 10 au BIGLOBE PLAN_6000_wi… 6 0 9 30
# # … with 46 more rows, and 8 more variables: free_music <int>,
# # price <int>, speed <chr>, initial_cost <int>, exit_cost <int>,
# # free_youtube <int>, exit_period <int>, free_line <int>
ちょっと解析してみる
すでに結構長くなってしまっているので、今回は今操作したエリアだけ軽い解析を一個だけしようと思います。
今回ご紹介する解析方法は <span class="marker-under"><strong>「集計」と「pieチャート」</strong></span> です! 解析のパターンとしてはよく使われる手法だと思います。
まずは複数の選択肢があるプランを分解せずに集計してみます。
df_nafilled |>
# 集計表を作る
distinct(area, company) |>
count(area) |>
# カウントの多い順にareaをソート
arrange(-n) |>
# ソートのためfactorを利用
# pieチャートはなぜか反時計回りになるのでrevで順番を逆転させる
mutate(area = factor(area, levels = rev(unique(area)))) |>
# ggplotでpieチャートを作る
ggplot(aes(x = "", y = n, fill = area)) +
geom_bar(stat = "identity", position = "stack") +
coord_polar(theta = "y") +
# legendを再び逆転させて整合性を合わせる
ggsci::scale_fill_aaas(guide = guide_legend(reverse = TRUE))
df_nafilled %>%
# 集計表を作る
distinct(area, company) %>%
count(area) %>%
# カウントの多い順にareaをソート
arrange(-n) %>%
# ソートのためfactorを利用
# pieチャートはなぜか反時計回りになるのでrevで順番を逆転させる
mutate(area = factor(area, levels = rev(unique(area)))) %>%
# ggplotでpieチャートを作る
ggplot(aes(x = "", y = n, fill = area)) +
geom_bar(stat = "identity", position = "stack") +
coord_polar(theta = "y") +
# legendを再び逆転させて整合性を合わせる
ggsci::scale_fill_aaas(guide = guide_legend(reverse = TRUE))
やはり直感通りdocomoの採用率がやたらと高いです。
次に複数の選択肢がある場合を分けてみます。
df_nafilled %>%
separate_rows(area) |>
# 集計表を作る
distinct(area, company) %>%
count(area) %>%
# カウントの多い順にareaをソート
arrange(-n) %>%
# ソートのためfactorを利用
# pieチャートはなぜか反時計回りになるのでrevで順番を逆転させる
mutate(area = factor(area, levels = rev(unique(area)))) %>%
# ggplotでpieチャートを作る
ggplot(aes(x = "", y = n, fill = area)) +
geom_bar(stat = "identity", position = "stack") +
coord_polar(theta = "y")+
# legendを再び逆転させて整合性を合わせる
ggsci::scale_fill_aaas(guide = guide_legend(reverse = TRUE))
df_nafilled %>%
separate_rows(area) %>%
# 集計表を作る
distinct(area, company) %>%
count(area) %>%
# カウントの多い順にareaをソート
arrange(-n) %>%
# ソートのためfactorを利用
# pieチャートはなぜか反時計回りになるのでrevで順番を逆転させる
mutate(area = factor(area, levels = rev(unique(area)))) %>%
# ggplotでpieチャートを作る
ggplot(aes(x = "", y = n, fill = area)) +
geom_bar(stat = "identity", position = "stack") +
coord_polar(theta = "y")+
# legendを再び逆転させて整合性を合わせる
ggsci::scale_fill_aaas(guide = guide_legend(reverse = TRUE))
楽天は楽天一社しかないですが、やっぱり採用率的にはdocomoが圧倒しています。
これは人気の問題ではなく、MVNOの回線使用料がdocomoの方が安いからなのかな?と思ったのですが、総務省の資料を見ると価格差は特にないみたいです。
資料の白抜き部分が多すぎて肝心の利益率などがわかりませんでしたが・・・ 各社の決算資料でも読めば情報は追跡可能でしょうが、面倒なのでしません。
さいごに
ということで、今回は楽天モバイルの代わりを探すためにデータを集めてみました。
仕事がなかなかに忙しくて、リアルタイムに情報提供ができなくて残念ですが・・・次回はいろいろな視点から作ったデータを眺めてみたいと思います♪
あ~この記事書くのに一週間もかかっちゃったー! では!
コメント