はじめに
前回、区域データと福岡県の農業データから日本地図上に農業産出額を可視化できるコードを展開しました。
前回の記事はコチラ👇
今回は九州6県上にデータ可視化できるコードをご紹介します。
(沖縄は表示の関係で対象外としました)
使った環境
-
国土数値情報(国土交通省)
https://nlftp.mlit.go.jp/ksj/
このサイトでは市町村のプロットのためにgeojsonファイルを使用しています -
農林水産省-統計情報
https://www.maff.go.jp/j/tokei/index.html
このサイトでは農業の各種データのあるCSVファイルを使用しています
環境
Python 3.11.5
pandas 2.1.0
numpy 1.26.0
folium 0.14.0
geopandas 0.14.0⭐️
今回はgeopandasを使用しています。
環境構築
pip install pandas numpy folium geopandas
コード
import folium
import numpy as np
import pandas as pd
import geopandas as gpd
pd.options.display.max_rows = 100
pd.options.display.max_columns = 100
# データの読み込み
def load_data():
# 各都道府県のgeojsonファイルのリスト
geojson_list = [
'./data/N03-23_40_230101.geojson',
'./data/N03-23_41_230101.geojson',
'./data/N03-23_42_230101.geojson',
'./data/N03-23_43_230101.geojson',
'./data/N03-23_44_230101.geojson',
'./data/N03-23_45_230101.geojson',
'./data/N03-23_46_230101.geojson',
]
# 区域データの読み込み
gdf_list = [gpd.read_file(path) for path in geojson_list]
gdf_kyushu = gpd.GeoDataFrame(pd.concat(gdf_list, ignore_index=True))
# 農業算出額のファイルを読み込み
df = pd.read_csv('./data/e033-03-k000.csv', skiprows=10)
return gdf_kyushu, df
# データの前処理
def preprocess_data(df):
# カラム名の変更
df.columns = [
'都道府県', '市町村', '都道府県コード', '市町村コード', '単位', '農業産出額', '耕種', '米', '麦類',
'雑穀', '豆類', 'いも類', '野菜', '果実', '花き', '工芸農作物', '茶', 'その他作物', '畜産',
'肉用牛', '乳用牛', '生乳', '豚', '鶏', '鶏卵', 'ブロイラー', 'その他畜産物', '加工農産物'
]
# 不要な列の削除
df = df.drop(columns=['単位'])
# 対象の都道府県のみをフィルタリング
df = df[df['都道府県'].isin(['福岡', '佐賀', '長崎', '熊本', '大分', '宮崎', '鹿児島'])]
# 市町村コードの修正
df['市町村コード'] = df['市町村コード'].replace({100: 101, 130: 135})
# 欠損値とカンマの処理
df.iloc[:, 4:] = df.iloc[:, 4:].replace(['-', 'x'], np.nan).applymap(lambda x: float(str(x).replace(',', '')))
# 文字列カラムの前後の空白を削除
df['都道府県'] = df['都道府県'].str.strip()
df['市町村'] = df['市町村'].str.strip()
# 都道府県コードと市町村コードを連携したカラムを追加
df['code'] = df['都道府県コード'].astype(str) + df['市町村コード'].astype(str)
return df
# 地図を作成
def create_map(gdf_kyushu, df):
map_obj = folium.Map(location=[35, 135], zoom_start=5)
def style_function(feature):
prefecture_name = feature['properties']['N03_001']
city_name = feature['properties']['N03_003']
if prefecture_name == '福岡県':
if city_name in ['福岡市', '北九州市']:
value = df[df['市町村'] == city_name]['農業産出額'].values[0]
else:
code = feature['properties']['N03_007']
value = df[df['code'] == code]['農業産出額'].values[0] \
if code in df['code'].values else 0
else:
code = feature['properties']['N03_007']
value = df[df['code'] == code]['農業産出額'].values[0] \
if code in df['code'].values else 0
color_scale = folium.LinearColormap([
'white', 'red'],
vmin=df['農業産出額'].min(),
vmax=df['農業産出額'].max()
)
return {
'fillColor': color_scale(value),
'fillOpacity': 0.6,
'weight': 1,
'color': 'black',
}
# 各フィーチャをマップに追加
folium.GeoJson(
gdf_kyushu,
style_function=style_function
).add_to(map_obj)
folium.LayerControl().add_to(map_obj)
return map_obj
# データの読み込み
gdf_kyushu, df = load_data()
# データの前処理
df = preprocess_data(df)
# 地図を作成
map_obj = create_map(gdf_kyushu, df)
# 地図をHTMLファイルに保存
map_obj.save('map.html')
このコードを実行して作成した地図がコチラ
対馬や屋久島などは入りきっていないですが、東西南北に移動すると可視化されています
地図を見ると、宮崎県の都城市が一番の農業算出額が大きいです。
鹿児島県が全体的に農業が活発です。🐖黒豚や🍠サツマイモが有名ですね。
大分などの瀬戸内海側よりも太平洋側の方が農業の比重が高いのでしょうか。
おわりに
今回は、温暖で土壌が良く農業が活発な九州の農業をテーマにGISでデータ分析をしてみました。
Pythonを使用し、統計データを処理し、foliumという地図のライブラリで色の濃淡で可視化しました。
このような分析をすることで、官庁省や地方自治体が農業施策の検討や民間企業の農業経営、マーケティングに使用できるのではないかと思います。
また、ワーケーション(work + vakation)をしながら記事を書いていますが、
西日本の某所は肌が綺麗な女性が多いですね(福岡の博多ではないよ!)
ITエンジニアは「アレ」な人が多いので、移住した方がいいんじゃないかなと思う反面、カフェ店員や街中の人に「肌お綺麗ですよね!」と声かける不審者でした。
まとめると、ローカルスーパーの炊き込みご飯のおにぎりが一番美味しいです。
以上です。
最後に、先日書いた『データ分析の基礎』の記事を中心にいいねやストックがいただけて週間ランキング10位になっています🤩
励みになります!
閲覧、いいね、ストックありがとうございます!
データ分析の勉強にどうぞ