Pythonでデータ読み込みのプログラムを実行します。
プログラムの実行はGoogle Colabで行います。下記のリンクからGoogle Colabを開きましょう。
新しくノートブック「ip0504」を作成してください。
情報活用編プラス
第6章「IT技術を使って問題解決をしよう」
IP05-04
問題解決をしよう② コンビニ出店はどこにする?
Pythonでデータ読み込みのプログラムを実行します。
プログラムの実行はGoogle Colabで行います。下記のリンクからGoogle Colabを開きましょう。
新しくノートブック「ip0504」を作成してください。
今回使用している人口データは、政府統計の総合窓口であるe-Statから取得できます。
e-Statでは、国勢調査をはじめとしたさまざまな統計データを検索し、ダウンロードできます。
今回は、スタ塾であらかじめ準備したデータを使用しますが、ここでは2020年の国勢調査データから、東京23区の人口に関するデータを取得する方法を確認しましょう。
・区名
・総人口
・65歳以上人口
・昼間人口
・昼夜間人口比率
e-Statでデータを取得する場合は、次のような流れで操作します。
1.e-Statを開く
2.「統計データを活用する」の、「地域」をクリック

3.「市町村データ」をクリックしたのち、「データ表示」をクリック

4.地域を「東京都」、絞り込みを「特別区部」のみに設定し、「全て選択」をクリックした後に、「確定」をクリック

5.表示項目選択で、「総人口(人)」[65歳以上人口(人)」「昼間人口(人)」「昼間人口比率(%)」を選択し、「項目を選択」をクリック
※ctrlキーを押しながらクリックすることで、複数項目の選択ができます

6.表示内容を確認し、「ダウンロード」をクリック

7.プログラムで読み込んだ時に必要のない情報が入らないように設定をする

8.表ダウンロードのページで、ダウンロードをクリック

e-Statから取得できるデータは、非常に多くの項目や地域を含んでいます。
そのため、最初からすべてを自分で整理しようとすると、データ分析そのものよりも、データの準備に時間がかかってしまいます。
今回の学習では、Pythonでデータを読み込み、結合し、分析する流れを体験することを重視します。
そのため、授業ではあらかじめ整理したCSVファイルを使用します。
本当はe-Statから自分でデータを取ってくるところからできるんですね。
はい。ただし、今回は分析の流れを学ぶために、必要なデータを整理した状態から始めます。
慣れてきたら、自分で地域や項目を変えて分析できそうですね。
今回の分析では、東京23区を対象にしました。
しかし、e-Statでは他の地域のデータも取得できます。
例えば、地域を変えれば、次のような分析もできます。
・大阪市の区ごとのコンビニ出店を考える
・自分の住んでいる市区町村を分析する
・高齢化率が高い地域の買い物環境を考える
このように、データの地域や項目を変えることで、自分なりの分析テーマを作ることができます。
このページでは、Google Colabを使って、Web上に置かれた2つのCSVデータを読み込みます。
今回使用するデータは、次の2つです。
・2020年のe-Statの調査から取得した、東京23区の人口などのデータ
・東京23区のコンビニ出店数データ
| データ | 取得元 | URL |
|---|---|---|
| 東京23区の人口のデータ(2020年度) | e-Stat | https://www.e-stat.go.jp/ |
| 東京23区のコンビニ出店数データ | 各種情報をもとに、スタ塾で作成 |
コンビニの情報は日々変化します。現在の正確なデータではありません。
この2つのデータを、Python上で結合して、分析に使える1つの表にしていきます。
人口データとコンビニ数データは、最初から1つの表になっているわけではないんですね。
そうです。実際のデータ分析では、別々の場所から集めたデータを組み合わせて使うことがよくあります。
今回は、区名を手がかりにして結合していくんですね。
CSVファイルのような表形式のデータを扱うために、pandasというライブラリを使います。
import pandas as pd
import pandas as pdは、pandasというライブラリを使えるようにする命令です。
pandasは、CSVファイルのような表形式のデータを扱うときに便利です。
pdは、pandasを短く書くための名前です。
まず、e-Statから取得した東京23区の人口などのデータを読み込みます。
このデータは、2020年の調査データをもとにしています。
今回は、事前に取得したデータをスタ塾がファイル化したCSVファイルをURLで指定して読み込みます。
population_url = "https://starjuku-contents.s3.ap-northeast-1.amazonaws.com/ip/05-04/tokyo_population.csv"
population = pd.read_csv(population_url)
population
実行結果
population_urlには、人口データのCSVファイルが置かれているURLを入れています。
pd.read_csv(population_url)は、そのURLからCSVファイルを読み込む命令です。
読み込んだデータは、populationという名前の表として保存されます。
最後にpopulationと書くことで、読み込んだ表を画面に表示しています。
このプログラムでは、変数「population」に23区の人口データを格納しています。
実行すると、東京23区の人口などのデータが表として表示されます。
このデータには、次のような列が入っています。
| 列名 | 内容 |
|---|---|
| 区名 | 東京23区の区名 |
| 総人口(人) | その区に住んでいる人の数 |
| 65歳以上人口(人) | その区に住んでいる65歳以上の人の数 |
| 昼間人口(人) | 昼間の時間帯に、その区にいる人の数 |
| 昼夜間人口比率(%) | 総人口に対して、昼間人口がどのくらいの割合かを表した値 |
今回の分析では、元のデータに入っている列だけでなく、高齢化率も使います。
高齢化率は、次の式で求めることができます。
高齢化率 = 65歳以上人口 ÷ 総人口 × 100
Pythonでは、次のようにして新しい列を追加できます。
population["高齢化率(%)"] = population["65歳以上人口(人)"] / population["総人口(人)"] * 100
population
実行結果(一部抜粋)
population["高齢化率(%)"]は、新しく「高齢化率(%)」という列を作るという意味です。
population["65歳以上人口(人)"]は、65歳以上の人口の列を使うという意味です。
population["総人口(人)"]は、総人口の列を使うという意味です。
65歳以上人口 ÷ 総人口 × 100で、高齢化率を求めています。
これで、人口データに高齢化率(%)という新しい列が追加されます。
新しい列を作ることで、もとのデータだけでは見えにくかった特徴を分析しやすくなります。
もともと入っていないデータも、計算して新しく作れるんですね。
はい。データ分析では、必要に応じて新しい列を作ることも大切です。
特に、昼間人口と昼夜間人口比率は、今回の分析で重要なデータになります。
例えば、オフィス街では、住んでいる人は少なくても、昼間には多くの人が集まることがあります。
「人口」と「昼間人口」は違うんですね。
はい。コンビニは昼に利用されることも多いため、昼間人口は重要なデータになります。
実行すると、東京23区の人口などのデータが表として表示されます。
このデータでは、区名が次のような形で入っています。
・東京都千代田区
・東京都中央区
・東京都港区
次に、東京23区ごとのコンビニ出店数データを読み込みます。
スタ塾にて準備した、ファイル化したデータをスタ塾のサーバーから取得します。
こちらも、Web上に置いてあるCSVファイルをURLで指定して読み込みます。
convenience_url = "https://starjuku-contents.s3.ap-northeast-1.amazonaws.com/ip/05-04/convenience_store.csv"
convenience = pd.read_csv(convenience_url)
convenience
実行結果(一部抜粋)
このプログラムでは、変数「convenience」に23区の各区における、コンビニの出店数データを格納しています。
実行すると、東京23区ごとのコンビニ出店数データが表示されます。
このデータでは、区名が次のような形で入っています。
・東京都 千代田区
・東京都 中央区
・東京都 港区
e-Statの人口データとは異なり、「東京都」と区名の間に空白文字が入っていることに注意しましょう。
データを読み込んだら、populationとconvenienceそれぞれの列名や件数を確認します。
まずは、列名を確認します。
列名を確認するには、次のようにします。
print(population.columns)
print(convenience.columns)
実行結果
次に、それぞれのデータが何行あるか確認します。
print(len(population))
print(len(convenience))
実行結果
東京23区のデータなので、どちらも23行になっていることを確認しましょう。
まずは、ちゃんと23区分のデータがあるか確認するんですね。
はい。分析を始める前に、データの中身を確認することはとても大切です。
人口データとコンビニ出店数データには、どちらにも区名という列があります。
そこで、まずは区名を使って、そのまま2つのデータを結合してみます。
merged = pd.merge(population, convenience, on="区名")
merged
実行結果
pd.merge()は、2つの表を結合する命令です。
populationは人口データ、convenienceはコンビニ出店数データです。
on="区名"は、「区名」が同じ行どうしを結合するという意味です。
ただし、区名の表記が完全に一致していないと結合できません。
しかし、このままだとうまく結合できず、データが表示されません。
なぜなら、2つのデータで区名の表記が少し違っているからです。
人口データ:東京都千代田区
コンビニ出店数データ:東京都 千代田区
人間が見ると同じ千代田区のデータだとわかります。
しかし、Pythonでは、文字が完全に一致しているものだけが同じデータとして扱われます。
そのため、「東京都千代田区」と「東京都 千代田区」は別の文字列として扱われ、結合できません。
空白が1つ入っているだけでも、別のデータとして扱われるんですね。
その通りです。データ分析では、このような表記の違いをそろえる作業がとても重要です。
今回は、コンビニ出店数データの区名に入っている空白を取り除きます。
文字列の一部を置き換えるには、str.replace()を使います。
convenience["区名"] = convenience["区名"].str.replace("東京都 ", "東京都")
convenience
str.replace()は、文字列の一部を別の文字に置き換える命令です。
今回のコンビニ出店数データでは、区名が「東京都 千代田区」のように、東京都と区名の間に空白があります。
"東京都 "を"東京都"に置き換えることで、空白を取り除いています。
このコードでは、コンビニ出店数データの区名に含まれている東京都 を東京都に置き換えています。
つまり、次のように変換しています。
東京都 千代田区 → 東京都千代田区
東京都 中央区 → 東京都中央区
東京都 港区 → 東京都港区
これで、人口データと同じ表記になりましたね。
はい。データを結合する前には、このように表記をそろえることが大切です。
区名の表記をそろえたので、もう一度データを結合します。
merged = pd.merge(population, convenience, on="区名")
merged
実行結果
今度は、人口データとコンビニ出店数データが1つの表にまとまっているはずです。
最後に、行数も確認しましょう。
print(len(merged))
23行になっていれば、東京23区のデータが正しく結合できています。
このページでは、Web上のCSVファイルをPythonで読み込み、2つのデータを結合しました。
ただし、最初は区名の表記がそろっていなかったため、うまく結合できませんでした。
そこで、コンビニ出店数データの区名から空白を取り除き、人口データと同じ表記に直しました。
・pandasを読み込んだ
・2020年のe-Statの人口データを読み込んだ
・コンビニ出店数データを読み込んだ
・区名を使って結合しようとした
・空白の有無によって結合できないことを確認した
・区名の表記をそろえて、もう一度結合した
問題1
最初に人口データとコンビニ出店数データを結合したとき、うまく結合できなかったことを踏まえ、データの準備で注意すべき点を考え、答えてください。
2つのデータの「区名」の表記ルールに違いがありました。
あらかじめデータが揃っていたら、修正の手間は必要ありませんでした。
最大 200 文字
問題2
convenience["区名"].str.replace("東京都 ", "東京都")は、何をしているコードですか。
replaceは、指定した文字を別の文字に置き換える命令です。
最大 200 文字
問題3
データを結合する前に、結合に使う列の表記を確認することが大切な理由を説明してください。
Pythonは、人間のように「だいたい同じ意味」と判断してくれるわけではありません。
最大 200 文字
※この再現版では提出は行いません(送信先は未接続です)