LogoMark.png

データサイエンス/2021/1210 の変更点


#author("2021-12-13T15:10:36+09:00;2021-12-10T10:26:50+09:00","default:inoue.ko","inoue.ko")
#author("2021-12-18T17:37:32+09:00;2021-12-10T10:26:50+09:00","default:inoue.ko","inoue.ko")
*第13回 データビジュアライゼーション3
[[データサイエンス/2021]]|''2021.12.10''
~

***AGENDA
-以下名簿が表示されます。出欠確認・座席記録をお願いします。
&fontawesome(far fa-hand-point-right); [[出欠確認・座席記録>https://docs.google.com/spreadsheets/d/1gBwHsVDOZEf6LrYj8o8tgIXqMTVqdiI5827jysirKmQ/edit?usp=sharing]] 
-講義はこのページの内容を解説するかたちで遠隔 LIVE 配信します。
-質問等は YouTubeLive のチャットまたは LINEの 20ASグループからどうぞ。
-学科サイトの各自のページを更新して下さい。
&fontawesome(far fa-hand-point-right); [[学科サイト|受講生一覧>https://design.kyusan-u.ac.jp/socialdesign/?%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9]]
~

#hr
'''''以下、LIVE動画をご覧下さい。記事に沿って解説します。'''''
記録動画は後日、[[学科サイトの特設ページ(要ログイン)>https://design.kyusan-u.ac.jp/socialdesign/?%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9/%E9%99%90%E5%AE%9A]]に移動します。
'''''%%以下、LIVE動画をご覧下さい。記事に沿って解説します。%%'''''
記録動画は、[[学科サイトの特設ページ(要ログイン)>https://design.kyusan-u.ac.jp/socialdesign/?%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9/%E9%99%90%E5%AE%9A]]に移動しました。

#hr
~

#youtube(bkb0I16wb7I)
https://youtu.be/bkb0I16wb7I
//#youtube(bkb0I16wb7I)
//https://youtu.be/bkb0I16wb7I
//埋め込み無効状態です。授業開始直前にページをリロードして下さい。
~
//~

-配信開始:2021.12.10 09:00 -
-動画は授業直前に有効になります(準備段階では黒い画面)。授業開始時にページを再読み込みしていただくと、視聴が有効になります。
~
//-配信開始:2021.12.10 09:00 -
//-動画は授業直前に有効になります(準備段階では黒い画面)。授業開始時にページを再読み込みしていただくと、視聴が有効になります。
//~

***CONTENTS
#contents2_1

~

**はじめに
***進捗確認
-第8回 %%データサイエンスとPython%% 演習1, 2
-第9回 %%Python によるデータ解析1(GitHub CSV)%% 演習3
-第10回 %%Python によるデータ解析2(GoogleDrive  Excel)%% 演習4
-第11回 %%Python によるデータビジュアライゼーション1%% 演習5
-第12回 %%Python によるデータビジュアライゼーション2%% 演習6
-第13回 ''Python によるデータビジュアライゼーション3'' 演習7
-第14回 機械学習・序説

https://design.kyusan-u.ac.jp/socialdesign/?JohnSmith/DataScience
~
***アンケート未回答の方 再度ご協力のお願いです。
%%https://forms.gle/or5cpmzE4Laghu3L6%%
> 12月13日、締め切りました。ご協力ありがとうございました。

アンケートの結果は、統計処理の練習用資料として、学籍番号・自由記述を除く部分を皆さんへフィードバックします。
~
~

**地理情報の可視化
統計データを、国や地域、道路など地図上に可視化する需要が高まっています。今回は、地図情報の活用と、地図上にデータをプロットする方法を体験します。
~


***地理情報の可視化ライブラリ Folium 
オープンソースのJavaScriptライブラリ__[[Leaflet]]__を用いて Pythonでインタラクティブな地図を生成するライブラリです。

緯度・経度の値を使ったマーカー表示や、ヒートマップの表示、また GeoJSON形式の地理情報と統計情報を合わせた各種の可視化が可能になります。

Foliumはデフォルトで [[OpenStreetMap>https://openstreetmap.jp/]] を使用しています。

-folium.Map( ):ベースとなる地図を生成します
-folium.Marker( ):地図上にマーカーを表示します
-folium.Circle( ):地図上に円を表示します
-folium.Choropleth( ):コロプレス図を生成します
-HeatMap( ):ヒートマップを生成します
~

***コロプレス図とは
コロプレス図とは、統計数値を地図上に表現したもので、区域単位(国別など)の情報を、統計値に応じた色彩や明暗によって表します。人口やGDP、生産高など、土地の上に分布するものを表現するのに適しています。
~


***GeoJSONデータとは
-GeoJSONは、地理情報を __[[JSON]]__ 形式で記述したものです。
> [[JSON#GeoJSON]]

-世界地図の GeoJSONデータ
https://raw.githubusercontent.com/johan/world.geo.json/master/countries.geo.json
~

***緯度・経度情報を取得するには
-''GoogleMap'' を使う
地図上で目的の場所をダブルクリックすると、マーカーが表示されるとともに住所と緯度・経度が表示されます。

-''GeoJSON.io'' を使う
https://geojson.io/
地図上でマーカーツールを選択して目的の場所をクリックすると右サイドに GeoJSON形式のデータが表示されます。"coordinates" として表示される最初の数字が経度、次の数字が緯度になっています。
~
~


**Pythonによるビジュアライゼーション体験3
地理情報のビジュアライゼーション
~

***ノートブックの新規作成
-__[[Google Colaboratory>https://colab.research.google.com]]__ でノートブックを新規作成
-Untitled0.ipynb というファイル名を変更 > GeographicVisualization.ipynb
~

***サンプルデータ
-全国の医療機関の医療提供状況(内閣官房 新型コロナ感染症対策)
--掲載サイト(永続的に利用可能かどうかは不透明)
---https://corona.go.jp/dashboard
---https://cio.go.jp/hosp_monitoring_c19
--Data:covid-19_daily_survey.csv
--DataURL:https://covid-19-surveillance.s3-ap-northeast-1.amazonaws.com/public_data/covid-19_daily_survey.csv
--URLから直接読み込んで利用します。

-Annotated geo-json geometry files for the world
--掲載サイト:https://github.com/johan/world.geo.json
--Data:countries.geo.json
--DataURL:https://raw.githubusercontent.com/johan/world.geo.json/master/countries.geo.json
--URLから直接読み込んで利用します。

-plotly に同梱されている「世界各国の一人当たりのGDP(2007年)」
--ライブラリから読み込むため、準備不要です。

~

***サンプルコード
JupyterNotebook形式(.ipynb)でプログラムを提供します。
https://github.com/koichi-inoue/DataScience/blob/main/GeographicVisualization.ipynb
~
~

**プログラムの解説

***基本的な地図の描画(Folium)
-基本的な地図は、以下の様に記述することで表示されます。
 map0 = folium.Map(
     location = [35,139] ,
     zoom_start = 5.0 ,
     tiles="OpenStreetMap" )
 map0

-パラメータ
--location:地図の中心とする位置(緯度・経度)
--zoom_start:初期表示倍率
--tiles:地図のスタイル
--width:地図の幅
--height:地図の高さ

-地図タイルには、以下のようなものが利用できます。
--OpenStreetMap:デフォルト
--Stamen Terrain, Stamen Watercolor, Stamen Toner
--Mapbox Bright:Limited levels of zoom for free tiles
--Mapbox Control Room:Limited levels of zoom for free tiles
~

***地図上にマーカーを表示(Folium)
-九州産業大学の座標を変数に定義
 ksu_lat = 33.66983627668292
 ksu_lng = 130.44487416744232

-folium.Map 関数でベースとなる地図を作成
 map1 = folium.Map(
     location = [ksu_lat, ksu_lng] ,
     zoom_start = 20 )

-folium.Marker 関数でマーカーを定義
 folium.Marker(
     location = [ksu_lat, ksu_lng] ,
     popup="九州産業大学"
     ).add_to( map1 )
~

***地図上にサークルを表示(Folium)
上と同様につき、省略します。
~


***ヒートマップの描画(Folium)
-オープンデータ covid-19_daily_survey.csv を df に読み込み
 df = pd.read_csv('https://covid-19-surveillance・・covid-19_daily_survey.csv')
本日最新のデータがこのURLから直接読まれます。

-ベースとなる地図を map3 として描画
 map3 = folium.Map(
     location = [TOKYO_lat, TOKYO_lng] ,
     zoom_start = 11 ,
     tiles="cartodbpositron" ) 

-入院・通常 に該当する病院の座標情報を df_hospital に回収
 df_hospital = df.query(
     "医療区分=='入院' & 医療区分回答=='通常'"
     ).loc[:,['緯度','経度']]

-ヒートマップ用の変数 df_hospital_geolist に df_hospital の値をリスト登録
 df_hospital_geolist = df_hospital.values.tolist()

-各医療機関の座標を半径7 ぼかし5 で map3 に追加
 HeatMap( df_hospital_geolist, radius=7, blur=5 ).add_to(map3)
~

***GeoJSON データを活用したコロプレス図(Folium)
-世界の区画データの読み込み(テキストを json 形式のデータとして読み込み)
 url = requests.get('https://raw.githubusercontent.com/johan/world.geo.json/master/countries.geo.json')
 text = url.text
 geo_json = json.loads( text)

-plotlyに同梱されている gapminder 2007年のデータを読み込み
 df_gm = px.data.gapminder().query("year == 2007")

-folium.Map 関数でベースとなる地図を作成
 map4 = folium.Map( location = [40,0] , zoom_start = 1.8 )

- folium.Choropleth 関数でコロプレス図を定義
 folium.Choropleth(
     geo_data = geo_json,
     data = df_gm,
     fill_opacity = 1,
     line_color = 'white' ,
     nan_fill_color = '#888888' , # 欠損値の色
     columns = ['iso_alpha' , 'gdpPercap'], # 色分けに使うキーとカラム名
     key_on = 'feature.id' , # データに対応した geo.json のキー
     fill_color = 'OrRd',
 ).add_to(map4)
~

***plotly.express による地球儀(plotly)
-地球儀に国名をドットで表示
 df_gm = px.data.gapminder().query("year == 2007")
 fig0 = px.scatter_geo( df_gm, locations="iso_alpha", color="continent",  projection="orthographic")
 fig0.show()

-地球儀に gapminder の各国の人口(2007年)を重ねて表示
 df_gm = px.data.gapminder().query("year == 2007")
 fig1 = px.scatter_geo( df_gm, locations='iso_alpha', color='continent', hover_name='country', size='pop', projection='orthographic' )
 fig1.show()

~
~

**学科サイトにリンク掲載(その7)
ノートを、学科サイトの個人ページからリンクして下さい。以下、手順です。

-1. 自分のノートを開いた状態で、右上の「共有」をクリック

-2. 共有設定を変更して、以下のように表示される状態にします。
 このリンクを知っているインターネット上の全員が閲覧できます。

-3. 「リンクをコピー」をクリックして、そのアドレスを、以下の形式で、学科サイトの「Jupyter Notebooks」の部分に掲載して下さい。
 -[[GeographicVisualization>https://colab.research.go・・=sharing]]

-4. 以下のようになればOKです。
https://design.kyusan-u.ac.jp/socialdesign/?JohnSmith/DataScience
~
~
~