国勢調査のデータを使ってPythonを学べる書籍「Pythonデータ分析ハンズオンセミナー」の紹介

最近（といっても8月なのでもう3カ月くらいたちますが）、Pythonで位置情報付きの国勢調査をビジネスに役立つように分析してみる、ハンズオン本を日経BPさんから出させていただきました。この記事ではその本を紹介させていただきます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/8cf1944c-097d-5161-d54b-6af35dc71c61.png" width="70%">


書籍のページ
https://bookplus.nikkei.com/atcl/catalog/23/07/28/00926/


## 本書のターゲット読者
この本のメインのターゲット読者は「データ分析にPythonを使いたい、プログラミング入門書を一冊読んだ方」です。

でも、１冊目にも手に取っていただけるように、Pythonの基本的な文法も掲載しています。なので、データ分析初心者の方に良いのかなぁと思います。

執筆時に作ったターゲット読者層の画像は次のように、入門書と実践書をつなぐ本というイメージです。この本ではいろいろな要素の導入部分を紹介して、もう少し詳しく知りたいなと思われたら、次の本にチャレンジしていただけたらというポジションです。

![本書のイメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/5aa14224-720b-0960-bd0a-0d1e9f78ba40.png)

私がPythonを学習した際によくわからなかったのが、データを上手くまとめるためのリストや辞書などの活用方法でした。逆にその辺りを上手く使えると、データ分析を上手くできるように思います。そのため、その辺の処理を多めに入れました。

あと、初心者にはPythonの環境を自分のパソコンに作るのが大変（GeoPandasはWindowsだとCondaでないと難しく思う）なので、Google Colaboratoryを使って作業できるようにしました。

## 本書の紹介
### 国勢調査のデータをデータ取得から前処理、可視化、詳細分析を紹介

この本は実際に国勢調査のデータを使って何らかの分析を行うハンズオン的なことを主眼に作成しました。そのため、国勢調査の統計データと境界データ（書籍では大阪府を選びました）を前処理して使えるようにしてから、その後の処理を実際に行っていきます。

最終的には次の画像のような感じで、半径5kmの円を作成し、その円に重なる統計データを作成して自社が狙う地域を検討します（商圏ってやつですね）。

![スクリーンショット 2023-11-15 175215.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/ffce89a1-e6ff-729b-e742-72ce4f02baed.png)

Colabへのリンク: https://colab.research.google.com/drive/1tKpGSpx_d8auOZ951spLcpRd8aHX7h9H?usp=sharing

書籍に前処理を一通り乗せるのは、１か所でもミスがあるとその後の作業が進まない・・・ということで、ものすごく神経を使う作業となりました。しかも、校正期間は2週間弱・・・。あんまり寝ないで作業した思い出・・・。

### インタラクティブな可視化に panel を使う

分析に使うデータが多くなった現代、その中から特徴を捉えるためにどういう風にデータを見るかも、くふうすべき点で、多くのツールが提供されています。

Pythonでのデータ分析というと、Jupyter系のツールを使うことが多いと思います（Colabもしかり）。そうすると、Jupyter上でデータを見ながら作業をしたくなるのが人の常・・。その中で現状のベストツールは panel かなと、最近使っているので、書籍でも紹介してみました。

https://panel.holoviz.org/

panelを使うことで、次のようなツールが簡単に作れます。

![名称未設定のデザイン.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/0aa1b68c-2253-a6cf-85b3-ef496d5a6dde.gif)

しかもコードは次のような感じで簡単。データ分析のために使えるようになっておくべきツールです。

```python
cols_list = list(cityname.columns)


select_list = list()
# 新たな階級を加える
init_values = {
    1: 'ratio_total_15_age_less',
    2: 'ratio_total_15_29_age',
    3: 'ratio_total_30_49_age',
    4: 'ratio_total_50_64_age',
    5: 'ratio_total_65_age_over',
    6: 'ratio_area'
}


for k, v in init_values.items():
    row = pn.widgets.Select(name=f'selector-{k}', options=cols_list, value=v)
    select_list.append(row)


# 引数を*argsに変更
def update_para(*args):
    fig = px.parallel_coordinates(cityname, color=args[-1],
                              dimensions=args,
                              color_continuous_scale=px.colors.sequential.Bluered
                              )
    return fig


interactive_para = pn.bind(update_para, *select_list)


pn.Column(
    pn.Row(*select_list),
    interactive_para)
```

ちなみに、[Dashの本](https://www.asakura.co.jp/detail.php?book_code=12258)も書いた私。[テックプレイさんで開催させていただいたセミナー](https://techplay.jp/event/921607)でそこら辺の質問もいただきました。streamlitもあるよねー。その辺はまた別記事でも書きたいと思います。

ひとついえることは、今のところ **Jupyter上** で動かすファーストチョイスは **panel** ではないかなぁとおもってます。

Colabへのリンク: https://colab.research.google.com/drive/1JqiwCWpLwNJX61vNKCwNkEFFRFL1ct3j?usp=sharing

### 位置データを扱う

位置データ付きの国勢調査のデータ分析も、この本では扱います。

ライブラリの紹介では（Shapely）、京都の名所ポイントを作り、オブジェクトを変化させてfoliumで可視化します。

```python
point1 = Point(135.758, 34.985) # 経度、緯度の順で渡す
point2 = Point(135.729, 35.039)
point3 = Point(135.746, 35.066)
point4 = Point(135.798, 35.027)
geo_col = GeometryCollection([poly1, multil, multip])

center = poly1.centroid
m = folium.Map([center.y, center.x], zoom_start=13)
folium.GeoJson(geo_col).add_to(m)
m
```

![スクリーンショット 2023-11-15 192133.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/337c2adf-ed0e-679f-07b3-0225ad762ca5.png)


ハンズオン内では、飛び地のデータをマージしたり、CRSを変更して面積を求めたりもします。

```python
gis_data_dissolved.query(f'KEY_CODE == {zero_key_code}').explore()
```

![スクリーンショット 2023-11-15 192253.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/9472ee66-09fa-309e-c1a8-0bf6934a199d.png)

本書には、実際に分析したデータの図表やグラフが豊富に掲載されています。これらの視覚的な要素を通じて、読者はPythonとデータ分析を実例でステップ・バイ・ステップで学ぶことができます。特に、商圏分析の節では、地図上にビジュアル化されたデータがどのようにビジネス戦略に役立つかを直感的に理解できます。

## おわりに

この記事を通じて、「Pythonデータ分析ハンズオンセミナー」の魅力を少しでも感じていただけたなら幸いです。この書籍は、初心者から中級者までのPython学習者に向けて、国勢調査のデータを用いた実践的な分析技術を提供します。実世界のデータを扱うことで、具体的なデータ分析スキルを身に付けることができます。

また、インタラクティブなデータビジュアライゼーションの技術や、Google ColaboratoryやGeoPandasなどのツールの使用方法も学べます。これらは現代のデータ分析の現場で非常に重宝されます。ビジネスシナリオへの応用も盛り込んでおり、実際のビジネス意思決定や戦略立案に役立つ実践的なスキルが身につきます。

Pythonとデータ分析の旅を始めるための一冊として、またはすでに歩み始めている方のさらなるステップアップとして、ぜひ『Pythonデータ分析ハンズオンセミナー』を手に取ってみてください。この書籍があなたの知識と技術を新たな高みへと導くことを願っています。

皆様のフィードバックや感想をお待ちしております。そして、この書籍が皆様のデータ分析の旅において貴重なリソースとなることを心より願っています。

書籍のページ: 
https://bookplus.nikkei.com/atcl/catalog/23/07/28/00926/

github: 
https://github.com/mazarimono/python-data-seminar