Google Colabでグラフを作成すると、タイトルや軸ラベルの日本語が文字化けして表示されないことがあります。
これは、matplotlibが最初から日本語フォントに対応していない場合があるためです。
そこで、今回はjapanize-matplotlibというライブラリを使って、日本語を表示できるようにします。
情報活用編プラス
第6章「IT技術を使って問題解決をしよう」
IP05-04
問題解決をしよう② コンビニ出店はどこにする?
学習の目的
1.データを比較して区ごとの特徴を読み取る
2.グラフを使って関係性を確認する
3.データから「なぜそうなるか」を考察する
ここまでは、データを読み込んだり、結合したりしてきましたね。
でも、数字が並んでいるだけだと、まだ何がわかるのかは見えにくいです。
そうですね。ここからは、グラフや散布図を使いながら、データの特徴を読み取っていきます。
そして、「なぜそのような結果になるのか」を考察していきましょう。
いよいよ、本当にデータ分析っぽくなってきましたね。
はい。データ分析では、「グラフを作ること」が目的ではありません。
グラフを使って、「どんな特徴があるのか」「どんな関係がありそうか」を考えることが重要です。
Google Colabでグラフを作成すると、タイトルや軸ラベルの日本語が文字化けして表示されないことがあります。
これは、matplotlibが最初から日本語フォントに対応していない場合があるためです。
そこで、今回はjapanize-matplotlibというライブラリを使って、日本語を表示できるようにします。
!pip install japanize-matplotlib
import matplotlib.pyplot as plt
import japanize_matplotlib
実行結果
画像のように、「Successfully」が表示されていたら、インストール成功です。
前のページでは、人口データとコンビニ出店数データを結合しました。
しかし、数字が並んでいるだけでは、区ごとの特徴を見つけるのは大変です。
例えば、次のようなことを考えたいとしても、表だけではわかりにくいことがあります。
・人口が多い区では、本当にコンビニも多いのか?
・昼間人口とコンビニ出店数には関係があるのか?
・人口が少なくても、コンビニが多い区はあるのか?
そこで、グラフを使ってデータを見やすくし、特徴を読み取っていきます。
ただし、重要なのは「グラフを作ること」ではありません。
グラフを使って、データの特徴や関係を考えることが目的です。
グラフは、考えるための道具なんですね。
その通りです。データ分析では、「どんな特徴があるのか」を読み取ることが重要です。
まず考えたいのは、「人口が多い区ほど、コンビニ出店数も多いのか?」です。
皆さんは、どう予想しますか?
人口が多いなら、利用する人も多そうなので、コンビニも多そうです。
でも、人口だけで決まるわけではない気もします。
では、本当にそうなっているのか、実際に確認してみましょう。
まずは、人口が多い区を並べ替えて確認します。
merged.sort_values(
"総人口(人)",
ascending=False
)[["区名", "総人口(人)", "コンビニ出店数"]]
実行結果
ここで、並べ替えに使っているコードの意味を確認しておきましょう。
merged.sort_values(
"総人口(人)",
ascending=False
)[["区名", "総人口(人)", "コンビニ出店数"]]
① sort_values()
指定した列を基準にして、データを並べ替える命令です。
② "総人口(人)"
「総人口(人)」の列を基準にして並べ替える、という意味です。
③ ascending=False
大きい順(降順)に並べ替える、という意味です。
もし ascending=True にすると、小さい順になります。
④ [["区名", "総人口(人)", "コンビニ出店数"]]
表示する列を、「区名」「総人口(人)」「コンビニ出店数」だけに限定しています。
最後の [["区名", ... ]] の部分は、表示する列を選んでいたんですね。
その通りです。必要な列だけを表示すると、結果が見やすくなります。
また、列名は、表にある名前と完全に同じにする必要があります。
例えば、
・"総人口(人)"
・"総人口"
は、別の列名として扱われます。
入力ミスがあるとエラーになるので注意しましょう。
世田谷区や大田区など、人口が多い区では、コンビニ出店数も多いことがわかります。
しかし、ここで注目したい区があります。
千代田区、人口はかなり少ないのに、コンビニ出店数がすごく多いな。
中央区や港区、渋谷区も、人口のわりにコンビニがかなり多そうです。
良いところに気づきましたね。これらの区は、オフィス街が多く、昼間に多くの人が集まる地域です。
つまり、「住んでいる人」だけでは説明できない可能性があります。
次は、人口とコンビニ出店数の関係を、散布図で確認してみましょう。
散布図では、1つの区を1つの点で表します。
もし、人口が多い区ほどコンビニ出店数も多いなら、点は右上がりに並ぶはずです。
plt.figure(figsize=(8, 6))
plt.scatter(
merged["総人口(人)"],
merged["コンビニ出店数"]
)
plt.xlabel("総人口(人)")
plt.ylabel("コンビニ出店数")
plt.title("人口とコンビニ出店数の関係")
plt.show()
実行結果
plt.scatter()は、散布図を作る命令です。
1つ目の指定が横軸、2つ目の指定が縦軸になります。
例えば、横軸に総人口、縦軸にコンビニ出店数を指定すると、人口とコンビニ出店数の関係を確認できます。
1つの点が、1つの区を表しています。
実際に見ると、点はある程度右上がりに並んでいます。
つまり、人口が多い区ほど、コンビニ出店数も多い傾向がありそうです。
なんとなく、右上がりに点が並んでいますね。
はい。ただし、完全に一直線ではありません。
つまり、「人口だけ」でコンビニ出店数が決まっているわけではないと考えられます。
千代田区みたいな区は、人口だけでは説明できなさそうです。
ここで、「昼間人口」に注目してみます。
コンビニは、住んでいる人だけでなく、通勤・通学で来る人にも利用されます。
そのため、昼間人口との関係も確認してみましょう。
まずは、昼間人口順に並べ替えてみます。
merged.sort_values(
"昼間人口(人)",
ascending=False
)[["区名", "昼間人口(人)", "コンビニ出店数"]]
実行結果(一部抜粋)
港区や千代田区では、昼間人口が非常に多いことがわかります。
そして、コンビニ出店数も多くなっています。
港区や千代田区、昼間人口がものすごく多いですね。
しかも、コンビニ出店数もかなり多いです。
昼間人口とコンビニ出店数は、かなり関係が強そうですね。
では、散布図でも確認してみましょう。
plt.figure(figsize=(8, 6))
plt.scatter(
merged["昼間人口(人)"],
merged["コンビニ出店数"]
)
plt.xlabel("昼間人口(人)")
plt.ylabel("コンビニ出店数")
plt.title("昼間人口とコンビニ出店数の関係")
plt.show()
実行結果
人口との散布図よりも、点がまとまって見えます。
つまり、コンビニ出店数は、総人口よりも昼間人口との関係が強い可能性があります。
コンビニは、昼休みや通勤中に利用されることも多いため、「昼にどれだけ人が集まるか」が重要なのかもしれません。
次は、高齢化率とコンビニ出店数の関係を確認してみます。
もし高齢化率が関係しているなら、高齢化率が高い区ほど、コンビニ出店数も増えるかもしれません。
plt.figure(figsize=(8, 6))
plt.scatter(
merged["高齢化率(%)"],
merged["コンビニ出店数"]
)
plt.xlabel("高齢化率(%)")
plt.ylabel("コンビニ出店数")
plt.title("高齢化率とコンビニ出店数の関係")
plt.show()
実行結果
しかし、人口や昼間人口のときほど、はっきりした関係は見えません。
点がかなりバラバラに散らばっています。
人口や昼間人口の散布図と比べると、かなりバラバラだな。
そうですね。少なくとも、このデータでは、「高齢化率だけ」でコンビニ出店数が決まっているとは言えなさそうです。
でも、高齢者向けサービスを考えるヒントにはなりそうですね。
ここまでの分析から、いくつかの特徴が見えてきました。
・総人口が多い区ほど、コンビニ出店数も多い傾向がある
・昼間人口とコンビニ出店数には、さらに強い関係が見られた
・高齢化率とコンビニ出店数には、強い関係は見られにくかった
・千代田区や港区など、オフィス街では人口は少ないが、コンビニが多い
このことから、コンビニ出店数には、特に「昼にどれだけ人が集まるか」が関係している可能性があります。
つまり、「住んでいる人口」だけではなく、「昼に利用する人」を考えることが重要だと考えられます。
データを見るだけじゃなく、「なぜそうなるのか」を考えるのが分析なんですね。
その通りです。データ分析では、数字の背景を考えることがとても重要なんです。
問題1
人口とコンビニ出店数の散布図を見て、どのような関係がありそうか説明してください。
点の並び方に注目してみましょう。
最大 200 文字
問題2
昼間人口が重要な理由を説明してください。
コンビニを利用するのは、その区に住んでいる人だけではありません。
最大 200 文字
問題3
「人口が多い区」と「出店に向いている区」は、必ずしも同じではない理由を考えてください。
人口だけではなく、昼間人口や、すでにあるコンビニ数にも注目してみましょう。
また、「人が多い = 必ず成功する」とは限らないことも考えてみてください。
最大 200 文字
※この再現版では提出は行いません(送信先は未接続です)