GIS奮闘記

元GISエンジニアの技術紹介ブログ。主にPythonを使用。

スポンサーリンク

Python でリストを CSV 出力する方法

さて、今回は Python でリストを CSV 出力する方法を紹介しようと思います。単純に一次元のリストだけではなく、多次元のリストにも対応したソースを紹介しますので、興味のある方はぜひ読んでみてください。

環境

Windows 10
Python 3.6.5

出力するデータ

すごく単純なデータですが、[1,2,3]と [[1,2,3],[4,5,6],[7,8,9]]というデータを CSV 出力してみようと思います。

使用するライブラリ

csv というPython の標準ライブラリを使用します。

サンプル

一次元と多次元のリストを CSV 出力するサンプルです。

# -*- coding: utf-8 -*-
import csv

def export_list_csv(export_list, csv_dir):

    with open(csv_dir, "w") as f:
        writer = csv.writer(f, lineterminator='\n')

        if isinstance(export_list[0], list): #多次元の場合
            writer.writerows(export_list)

        else:
            writer.writerow(export_list)

def make_list():
    one_dimensional_list = [1,2,3]
    two_dimensional_list = [[1,2,3],[4,5,6],[7,8,9]]

    export_list_csv(one_dimensional_list, r"D:\data\one_dimensional_list.csv")
    export_list_csv(two_dimensional_list, r"D:\data\one_dimensional_list.csv")

if __name__ == '__main__':
    make_list()
  • ポイント
    if isinstance(export_list[0], list): で多次元かどうかを判別しています。意外と便利な isinstance() ですね。

結果

EXCEL で出力した CSV を開いてみました。想定通りの結果が得られました。

f:id:sanvarie:20190928121345p:plain

f:id:sanvarie:20190928121401p:plain

今後は こういった Python の小ネタ集も作っていきたいと思いますので、ぜひ読んでみてください。

ArcGIS Pro で ポイントをアノテーションに変換する方法

さて、本日は ArcGIS Pro で ポイントをアノテーションに変換する方法について紹介したいと思います。

使用するデータ

位置参照情報のデータを使用したいと思います。位置参照情報については以下エントリーでも紹介していますので、興味のある方はぜひ読んでみてください。

www.gis-py.com

www.gis-py.com

データの詳細

今回は大字・町丁目レベルの横須賀市のデータを使用したいと思います。形式は CSV になっています。

f:id:sanvarie:20190927201811p:plain

アノテーション化する属性

「大字町丁目名」という属性をアノテーション化します。

手順

1.「XYテーブル→ポイント」ジオプロセシングツールで CSV をポイントにします。

「XYテーブル→ポイント」で以下のようにパラメーターを設定して「実行」ボタンをクリックしてください。
f:id:sanvarie:20190927202325p:plain

CSV のデータがポイントとして登録されました。 f:id:sanvarie:20190927202354p:plain

2.「大字町丁目名」をラベルとして設定します。

コンテンツウインドウで登録されたポイントレイヤーを右クリックし、「ラベル プロパティ」をクリックしてください。
f:id:sanvarie:20190927202608p:plain

ラベルクラス ウインドウが表示されるので、条件式に「$feature.大字町丁目名」と入力して「適用」ボタンをクリックしてください。
f:id:sanvarie:20190927202702p:plain

再度、コンテンツウインドウで登録されたポイントレイヤーを右クリックし、「ラベル」 をクリックしてください。
f:id:sanvarie:20190927202504p:plain

「大字町丁目名」がラベルとして表示されました。
f:id:sanvarie:20190927203055p:plain

3.「ラベルをアノテーションに変換」ジオプロセシングツールでラベルをアノテーションに変換します。

出力先を入力し、必要であればその他の設定を行い、「実行」ボタンをクリックしてください。
f:id:sanvarie:20190927203831p:plain

「大字町丁目名」ラベルがアノテーションに変換されました。
f:id:sanvarie:20190927203951p:plain

すごく簡単にポイントをアノテーションに変換することができました。文字表記はラベルで十分という方もいらっしゃるかと思いますが、GIS を使う場合、アノテーションを使用するケースは少なくないかと思います。緯度経度と属性さえあれば、このように簡単に CSV などのデータをアノテーション化できますので、ぜひ試してみてください。本日は以上です。

ArcGIS Pro で解析ツールギャラリーにお気に入りのジオプロセシングツールを登録しよう

さて、本日も ArcGIS Pro について書いてみようと思います。皆さんは ArcGIS Pro を使っていますか?ArcMap やほかのGIS デスクトップアプリで十分という場合もあるかもしれませんが、ArcGIS Pro を使えば、作業をより効率的に行うことができます。また、ArcGIS Pro はかゆい所に手が届く機能を数多く搭載しているので、まだ使ったことがないという方はぜひ使ってみてください。

ArcGIS Pro について、本ブログで色々紹介していますので、興味がある方はぜひ以下のエントリーも読んでみてください。
www.gis-py.com

www.gis-py.com

www.gis-py.com

ジオプロセシングツールとは

ArcGIS ユーザーの方はご存知かと思いますが、ESRIジャパンさんのサイトに詳しく載っていますので、そちらをご参照ください。

www.esrij.com

ジオプロセシングツールをもっと効率的に使うには

特定のジオプロセシングツールを毎日のように使用する場合、毎回、対象のジオプロセシングツールを検索して実行するのは少し面倒だと思います。そこで解析ツールギャラリーですね。解析ツールギャラリーにお気に入りのジオプロセシングツールを登録することができますので、ジオプロセシングツールを毎回検索するという面倒な作業を省くことができます。

解析ツールギャラリーとは

「解析タブ」にあります。以下赤枠の部分のことです。

f:id:sanvarie:20190927193625p:plain

解析ツールギャラリーにジオプロセシングツールを登録する方法

赤枠のところをクリックすると
f:id:sanvarie:20190927193709p:plain

このように展開するので、「カスタマイズ」をクリックします。
f:id:sanvarie:20190927193819p:plain

以下画面が起動します。「+」ボタンをクリックします。
f:id:sanvarie:20190927193945p:plain

グループ名を入力し、「+」ボタンをクリックします。
f:id:sanvarie:20190927194136p:plain

登録したいジオプロセシングツールを検索し、クリックします。
f:id:sanvarie:20190927194230p:plain

登録し終えたら最後にOKをクリックします。
f:id:sanvarie:20190927194344p:plain

解析ツールギャラリーに登録したジオプロセシングツールが表示されました。
f:id:sanvarie:20190927194506p:plain

あっさりできましたね。このように ArcGIS Pro には作業を効率化するための便利な機能がたくさん搭載されています。今後も少しずつになってしまうと思いますが、便利機能を紹介していきますので、ぜひ次回も読んでいただければと思います。

ArcGIS Pro で編集の自動保存をする方法

さて、本日は ArcGIS Pro で編集の自動保存をする方法を紹介します。以下のエントリーで ArcMap と ArcGIS Pro の違いを紹介したのですが、大きな違いのみを紹介しました。今回を含めてこれからはもう少し具体的に ArcGIS Pro になって追加された機能、進化した機能などを紹介しようと思います。

www.gis-py.com

編集の自動保存

ArcMap では「編集の開始」→「編集の保存」というようなステップを踏む必要がありましたが、ArcGIS Pro では「編集の開始」をする必要がなくなりました。その上、「自動保存」の設定をオンにすれば、「編集の保存」をしなくても、編集した内容が保存されます。編集中に ArcMap が落ちて涙をのんだという方もいるかと思いますが、そういった心配をする必要もなくなりました。

手順

1. ArcGIS Pro 起動後 > 「設定」を押下

f:id:sanvarie:20190907111423p:plain

2. 「オプション」を押下

f:id:sanvarie:20190907111607p:plain

3. 「編集」 > 「編集の保存」をチェックして、「OK」を押下

f:id:sanvarie:20190907111747p:plain


すごく簡単に設定できました。一日中編集をするような方にとっては痒いところに手が届く機能ではないでしょうか。興味のある方はぜひ使ってみてください。また、ちょくちょく ArcGIS Pro の小ネタについて紹介できればと思います。本日は以上です。

Node.js で WEB サーバーを簡単に構築する方法

さて、本日は Node.js で WEB サーバーを構築してみようと思います。あまりブログの趣旨とは関係ないところだとは思うのですが、実は今年のどこかで ArcGIS API for JavaScript の紹介と実際に当該 API を使用した WEBサイトの構築を考えているので、その前準備と勉強のためというのが本エントリーの主な理由です。

Node.js とは

もう皆さんご存知かと思いますが、Node.js はサーバーサイド Javascript の実行環境ですね。以下サイトに詳細が書いてあるので、興味がある方は是非読んでみてください。

qiita.com

実行環境

Windows 10

Node.js のインストール

以下サイトでインストーラーをダウンロードして、インストールをしてください。 nodejs.org

インストールが完了したら以下のコマンドで Node.js がインストールされていることとバージョンが確認できます。

node --version

f:id:sanvarie:20190728133640p:plain

以下のコマンドで npm (node package manager) がインストールされていることとバージョンが確認できます。

npm --version

f:id:sanvarie:20190728133446p:plain

WEB サーバーを構築

Express を使って WEB サーバーを構築してみようと思います。

Express とは

Express は Node.js での開発をスピードアップするためのフレームワークです。

Express をインストール

  • 新規プロジェクト用に空のディレクトリ作成
  • そのディレクトリで以下コマンドを実行してプロジェクトを初期化。プロンプトでいくつかの質問に回答し package.json ファイルを生成。
npm init
  • 以下コマンドで Express をインストール
npm install express --save

サンプルコード

アクセスするとHello World!とブラウザに表示する簡単なサーバーサイド処理のサンプルです。

var express = require('express');
var app = express();
app.get('/', function (req, res) {
  res.send('Hello World!');!');
});
app.listen(3000, function () {
});

Express の実行

以下コマンドで Express を実行することができます(index.js は今回使用するファイル名なので、異なる名前のファイルを使用する場合はそれに合わせてコマンドを変えてください)。

node index.js

f:id:sanvarie:20190728140448p:plain

準備はすべて整いました。後はhttp://localhost:3000/にアクセスするだけですね。

f:id:sanvarie:20190728140732p:plain

ばっちりですね!

簡単に WEB サーバーの構築ができました。実際に WEB サイトを構築するにはこれでは不十分かと思いますが、このように簡単に始められるのはとても助かりますね。

Python で MeCab を使ってテキストの内容を形態素解析してみる ~小説内の頻出単語の抽出~

本日は MeCab を使ってみようと思います。MeCab については最近、以下エントリーでインストール方法と簡単な使い方を紹介しましたが、本エントリーではより実践的な使い方を紹介したいと思います。

www.gis-py.com

やってみること

  1. 「坊ちゃん」(夏目漱石)のテキストデータをダウンロード
  2. 正規表現で不要な文字を除去する(ここはなくても形態素解析が可能ですが、より正確に解析したかったので、この手順を入れました)
  3. MeCab を使用して頻出単語(名詞)TOP10を抽出する

データ入手先

青空文庫さんで色々な小説のテキストデータをダウンロードすることができます。

青空文庫 Aozora Bunko

坊ちゃんのデータはここですね。

図書カード:坊っちゃん

中身はこんな感じです。《にさんち》のようにフリガナが入っていたり、ヘッダーやフッターも除去する必要がありますね

f:id:sanvarie:20190727081956p:plain

実行環境

Windows10
Python3.6.5
Jupyter Notebook

正規表現のサンプル

こういう場合は正規表現を使います。そして、Python で正規表現と言ったら re ですね。

import re

# ファイル読み込み
file = r'bocchan.txt'
with open(file) as f:
    text = f.read()

# ヘッダの除去
text = re.split('\-{5,}',text)[2]

# フッタの除去
text = re.split('底本:',text)[0]

# 最初の一の除去
text = re.sub('一', '', text,1)

# ふりがなの削除
text = re.sub('《.+?》', '', text)

# 入力注の削除
text = re.sub('[#.+?]', '',text)

# 空行の削除
text = re.sub('\n\n', '\n', text)

print(text)

いい感じの結果になりましたね。
f:id:sanvarie:20190726230648p:plain

MeCab を使用して頻出単語(名詞)TOP10を抽出するサンプル

MeCab の処理でも少し re を使います。また、形態素解析した結果を collections.Counter を使用して頻出単語(名詞)TOP10を抽出してみたいと思います。そして、抽出対象は名詞-一般のみにしました。結果は「単語:n」のような形式で出力します。

import re
import MeCab
from collections import Counter

# ファイル読み込み
file = r'bocchan.txt'

with open(file) as f:
    text = f.read()

# ヘッダ部分の除去
text = re.split('\-{5,}',text)[2]
# フッタ部分の除去
text = re.split('底本:',text)[0]
# 最初の一の除去
text = re.sub('一', '', text,1)
# ルビの削除
text = re.sub('《.+?》', '', text)
# 入力注の削除
text = re.sub('[#.+?]', '',text)
# 空行の削除
text = re.sub('\n\n', '\n', text)

# Mecab で形態素解析
tagger = MeCab.Tagger("-Ochasen")
result = tagger.parse(text)
result_lines = result.split('\n')

result_words = []
words = []

for result_line in result_lines:
    result_words.append(re.split('[\t,]', result_line))

for result_word in result_words:

    if (    result_word[0] not in ('EOS', '')
        and result_word[3] == '名詞-一般'):

            words.append(result_word[0])

# 頻出単語TOP10を抽出
counter = Counter(words)
for word, count in counter.most_common(10):
    print('%s : %s' % (word, count))

結果はこのようになりました。
f:id:sanvarie:20190727003355p:plain

なるほどーといった感じですね。「赤」が最頻出の単語(名詞)ということがわかりました。タイトルである「坊ちゃん」という単語はTOP10からは漏れているようですね。気になるので調べてみたら70~80位くらいでしたね。
f:id:sanvarie:20190727003705p:plain

MeCab をもっと使いこなせば本当に色々なことができそうですね。もっと勉強して次回はもう少し複雑なものにもチャレンジしてみようと思います。

【ArcGIS Pro SDK】DAML ID を一括で出力する方法

さて、本日は DAML ID を一括で出力する方法について書いてみようと思います。

そもそも DAML とは?

簡単に言うと、「ArcGIS Pro のUI を定義するもの」でしょうか。XML 形式のファイルでArcGIS Pro SDK で開発を行う場合は必ず使用するものです。詳細は以下のサイトを参考にしてみてください。

community.esri.com

github.com

DAML ID を調べるには

以下のサイトでDAML ID の確認をすることができるのですが、英語、そして、どのコントロールがどのDAML ID なのかよくわからない・・・

github.com

DAML ID を一括で出力するには

以下のようなコマンドライン引数をつけて ArcGIS Pro を起動すると、DAML ID の一覧を取得することができます。

ArcGISPro.exe /dumpcombineddaml

f:id:sanvarie:20190726060326p:plain

そして、ArcGIS Pro が起動するとこのようなテキストが出力されます。これが DAML ID の一覧ですね。日本語のキャプションがついているので、特定のコントロールの DAML ID が知りたい場合は便利な機能だと思います。 f:id:sanvarie:20190726055106p:plain

ArcGIS Pro 上で DAML ID の確認を行う

オプション>ヒントにコマンド ID を表示にチェック>OK で DAML ID を ArcGIS Pro 上で確認することができるようになります。

f:id:sanvarie:20190726055325p:plain

このようにアイコンにカーソルをあてれば、それに割り当てられている DAML ID がわかります。 f:id:sanvarie:20190726055649p:plain

ArcGIS Pro SDK の開発で DAML ID をよくさわるけど、いつも使いたい DAML ID を探すのに苦労をするという方はぜひこの方法を試してみてください。