PythonでGUIを試してみる。

====== PythonでGUIを試してみる。 ======
今回は、[[http://www.wxpython.org/|wxPython]]を使って、PythonでGUIを作成してみました。
[[http://www.wxpython.org/|wxPython]]を使うことで、簡単にGUI画面を作成できます。
ネタ本は、[[http://www.cutt.co.jp/book/978-4-87783-289-6.html|wxPython GUIプログラミング]]です。
Windowsだけでなく、OSに依存しないGUIを作るのにPythonを使うのはいいんじゃないでしょうか?
最終的には、水文水理解析のPython programをGUI環境で使うことを想定しています。

とりあえず、[[http://www.wxpython.org/|wxPython]]をinstallして動かしてみましょう。

===== wxPythonのinstall =====
Pythonは2.7.5を使います。
Pythonのinstallと設定は、[[http://blog.godo-tys.jp/2013/06/19/2465/|PythonでGeoSpatialをやってみる。[Chapter 1] ]]を参考にしてください。

次に、[[http://www.wxpython.org/|wxPython]]をinstallします。
[[http://www.wxpython.org/download.php|wsPython dpwnload]]から、今回は、**wxPython2.8-win32-unicode-py27.exe**をdawonloadして、installします。
これで、とりあえずはOKです。

===== 初めてのGUI =====
おきまりのhello worldをやってみます。
PyScripterを立ち上げて、以下のcodeを入力します。

#! C:¥Python27¥python.exe
# -*- coding: utf-8 -*-

import wx

def main():
    app = wx.App()
    frame = wx.Frame(None, -1, u'日本語でこんにちわ')
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()


**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

そして、編集->ファイルフォーマット->UTF-8に変更して、f:¥wxpython¥Hello_world_module1.pyで保存します。

code自身はいたって簡単ですね。

import wx

でmodule importします。

次に、

app = wx.App()

でobjectをinstanceします。
後は、frame objectをinstanceして、windowを表示させます。

最後に、

app.MainLoop()

でMainLoopの呼び出しを行い、eventのキャッチを行います。今回は、無限loopになっています。

保存後、実行すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_gui_01/image01.jpg}}
のようにwindowが表示されます。

簡単にGUIを作成することができました。
visual studioの環境のようなGUIもあるので、使い方次第ではOSに依存しないGUI環境を作れますね。

===== Python GUI 開発環境 =====
GUIの開発は、以下のアプリケーションがあります。好みものを使えば良いかと。
– [[http://boa-constructor.sourceforge.net/|boa constructor]] -> codeの補完機能をついたGUI Editor(2007年から更新stop)
– [[http://wxglade.sourceforge.net/|wxGlade]]
– [[http://sourceforge.net/projects/wxformbuilder/|wxFormBuilder]] -> これを使う予定。
– [[http://python.keicode.com/devenv/install-pydev.php|PyDev]] -> Eclipseのplugin GUI機能はない。
などあります。

===== 最後に =====
日本語での参考になる資料は、
– [[http://www.python-izm.com/contents/gui/wxpython.shtml|Python-izm]] -> お勧めです。
– [[http://labs.beatcraft.com/ja/index.php?Python%2FwxPython%A4%CB%A4%E8%A4%EBWindowsGUI%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0|Python/wxPythonによるWindowsGUIプログラミング]]
– [[http://python.keicode.com/advanced/wxpython-helloworld.php|Python入門]]
– [[http://www.atsuhiro-me.net/python/dev/py2exe|py2exeでwxpythonのGUIアプリケーションを作成]]
などなど、たくさんあります。

しかし、[[http://www.riverbankcomputing.co.uk/software/pyqt/intro|PyQt]]も捨てがたしですね。

このwxPythonですが、[[http://www.wxwidgets.org/|wxWidgets]]のラッパーで、PHPなどの別言語でも使えるという点が非常に興味があります。例えば、同じGUIで言語を変えることができるということですね。
参考として、
– [[http://wiki.wxphp.org/Introduction_to_using_wxPHP_Example|Introduction to using wxPHP Example]]
– [[http://www.wxwidgets.org/|wxWidgets]]
– [[http://up-cat.net/wxWidgets%A4%CE%A5%B9%A5%B9%A5%E1.html|wxWidgetsのススメ]]
などもあります。

PythonでDatabaseを使ってみる準備編[Chapter 19]

====== PythonでDatabaseを使ってみる準備編[Chapter 19] ======
[[http://blog.godo-tys.jp/2013/08/05/3566/|Pythonでgeometryと距離の変換と標準化_3[Chapter 18] ]]に引き続き、PythonでDatabaseを使用する基本を学んでおきます。

本tutorialは、[[http://www.packtpub.com/python-geospatial-development/book|Python Geospatial Development]]を参考にして、実践的に使えるPythonでGeoSpatialの使い方を学んでいくものです。

===== 準備 =====
Python環境については、[[http://blog.godo-tys.jp/2013/06/19/2465/|PythonでGeoSpatialをやってみる。[Chapter 1] ]]と[[http://blog.godo-tys.jp/2013/07/11/2937/|PythonでGeoSpatial Dataの読み書きについて_1[Chapter 8] ]]でPythonとGeoSpatialに関するlibraryが設定できているもとして進めていきます。

===== Spatially-enabled databases =====
GISでDatabseを扱う場合、地理空間情報を扱うことができなければなりません。

ある意味では、ほとんどどんなDatabseも地理空間データ単に格納するために使用することができます、geometryをWKTフォーマットに変換し、テキスト・カラムに結果を格納すればですが。
しかし、これでは地理空間データを格納することはできても、有用な方法ではありません。

空間的処理が可能なDatabase(Spatially-enabled databases)は、空間についての概念をもっており、空間のオブジェクトおよび概念を用いて直接的にDatabaseをそうさすることができます。
特に、空間的処理が可能なDatabaseは、次のような機能を持つことになります。

– **直接Datbaseにspatial data typesとして保存することができる。**(geometry column形式として)
– **空間検索(spatial queries)が実行できる。**例えば、select all landmarks within 10 km of the city named “San Francisco” のようなSQLが実行できる。
– **空間結合(spatial joins)が実行できる。**例えば、select all cities and their associated countries by joining cities and countries on (city inside country) のようなSQLが実行できる。
– **空間関数(spatial functions)を使って新しいobjectを作成できる。**例えば、set “danger_zone” to the intersection of the “flooded_area” and “urban_area” polygons  のようなfunctionLが実行できる。

空間的処理が可能なDatabaseは、地理空間データを用いて作業するための非常に強力なツールです。そして、空間index(spatial indexes)および他の最適化の使用によって、空間的処理が可能なDatabaseは速くこれらのタイプのオペレーションを行なうことができ、莫大な量のデータを簡単に処理することができます。

===== Spatial indexes =====
空間のデータベースの定義する特性のうちの1つはgeometryに基づいた探索を促進する特別の空間indexを作成する能力です。
これらのindexは与えられたbounding box内に位置するfeatureをすべて識別するか、与えられたpointのある距離内のfeatureをすべて識別するか、与えられたpolygonと交差するfeatureをすべて識別するような空間の操作を行なうために使用されます。

空間indexのキーワードSPATIALを加えること以外は、通常のDatabase indexを定義するのと同じ方法で定義されています。
例えば、

CREATE TABLE cities (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
name CHAR(255),
geom POLYGON NOT NULL,
INDEX (name),
SPATIAL INDEX (geom)
)

このDatabaseの章で使う3つのOpen Source Spatial Databaseは、R木(R-Tree)データ構造を使用する空間indexを持っています。

R木(R-tree) indexは空間のデータベースの中で最も強力な特徴のうちの1つです。
R木は、各々geometryがdatabaseでの位置を使用して、gfeometryを速く捜すことを可能にするために最小の長方形となるようにします:
{{http://blog.godo-tys.jp/wp-content/gallery/python_19/image01.jpg}}

これらのbounding boxは、ともに、それらがどれくらい接近してあるかに基づいた入れ子の階層へグループ化されます:
{{http://blog.godo-tys.jp/wp-content/gallery/python_19/image02.jpg}}

その後、入れ子のbounding boxの階層は木のようなデータ構造を使用して表わされます:
{{http://blog.godo-tys.jp/wp-content/gallery/python_19/image03.jpg}}

特別のgeometryを見つけるかあるいは様々なgeometryの位置あるいはサイズを比較するために、コンピューターは、この木によって速く走査することができます。
例えば、Xによって最後のものに先行する図に表わされるポイントを含んでいるgeometryは、木を横断し各レベルにbounding boxを比較することにより速く見つけることができます。
R木(R-tree)は次の方法で探索されるでしょう:
{{http://blog.godo-tys.jp/wp-content/gallery/python_19/image04.jpg}}

R木(R-tree) indexを使用して、polygonを見つけることはわずか3つの比較しか必要としませんでした。

Tree構造の階層的性質のために、R木(R-tree) indexは、またわずかなbounding boxの比較を使用して、多数のfeatureを隅々まで捜すことができます。
また、まさにgeometryが単純な bounding boxになるので、R木(R-tree)はpolygonだけでなく任意のタイプのgeometryをサポートすることができます。

R木(R-tree) indexは囲まれた座標を単に探索することだけではありません。それらは、空間の比較のすべての種類および空間の接合個所に使用することができます。

===== 今回のまとめ =====

今回は、GISでDatabaseを使うときの基本事項について学びました。
次回はいよいよOpen Source Databaseを使ったGeoSpatialなDatabaseを使ってみます。

また、本tutorialは、Python Scriptの基本的なことはある程度理解している前提で今後も話を進めていきます。また、誤字、脱字、spell間違いや勘違いや翻訳間違いなど多々出てくると考えられます。
それは違うじゃん!!とかいろんな意見をいただければと思います。
そこんところ ヨロシク~~!!

**[[http://blog.godo-tys.jp/python-geospatial-tutorial/|Python GeoSpatial Tutorialの目次に戻る。]]**

水理解析ソフトウェア販売 25%OFF 第2弾

弊社では水文水理解析ソフトウェアの販売を行っております。

今回決算処分第2弾としまして、下記のソフトウェアについて2013年9月25日まで、Excel VBAソース公開版として約25%OFFでご購入いただけます。

  1. 土石流シミュレーションVBA版¥260,000円 ->   ¥190,000円

ご注文は、お問い合わせあるいはお電話にて、ソフトウェアの購入希望でご連絡をお願いします。

また弊社ソフトウェアのカスタマイズ、その他のソフトウェアの価格などにつきましても、お問い合わせあるいはお電話にてお気軽にご相談ください。また、砂防関連のシミュレーション・ソフトウェアも多数ございます。

合同会社TYS

技術開発部

水理解析ソフトウェア販売 25%OFF 第1弾

弊社では水文水理解析ソフトウェアの販売を行っております。

今回決算処分第一弾としまして、下記の3つのソフトウェアについて2013年9月25日まで、Excel VBAソース公開版として約25%OFFでご購入いただけます。

  1. キネマティック法による流域流出解析¥150,000円 ->   ¥110,000円
  2. 逐次計算法による1次元河床変動プログラム(tys-rba版)¥300,000円 ->   ¥220,000円
  3. TVD-MacCormack法による1次元河床変動計算¥200,000円 ->   ¥150,000円

別途Fortran版のソースファイルもございます。

ご注文は、お問い合わせあるいはお電話にて、ソフトウェアの購入希望でご連絡をお願いします。

また弊社ソフトウェアのカスタマイズ、その他のソフトウェアの価格などにつきましても、お問い合わせあるいはお電話にてお気軽にご相談ください。

合同会社TYS

技術開発部

ExcelでPythonを使ってみる。

====== ExcelでPythonを使ってみる。 ======
前回の[[http://blog.godo-tys.jp/2013/09/06/4206/|ExcelでPythonを動かす。]]に引き続き、もうちょっと踏み込んでDataNitoを使ってみました。

詳しくは、[[http://jp.techcrunch.com/2012/08/11/20120810python-for-microsoft-excel-company-ironspread-comes-out-of-beta-changes-name-to-data-nitro/|Microsoft ExcelでPythonのスクリプトを動かせるプラグインDataNitro]]を参考にしてください。

===== Pythonをimport =====
Python fileをimportして実行してみましょう。
DataNitroでは、Pythonを実行させる場合、Python fileをimportする必要があります。

Excel 2007を起動すると、さらにメニューにDataNitroが
{{http://blog.godo-tys.jp/wp-content/gallery/datanitro/image01.jpg}}
のように登録されるので、import iconをclickします。

import iconをclickすると、
{{http://blog.godo-tys.jp/wp-content/gallery/datanitro_01/image01.jpg}}
のファイル選択dialogが開くので、[[http://blog.godo-tys.jp/2013/09/02/4160/|水文解析の基本_1 [Chapter 2]]]のwater_vapor.pyを呼び出します。

そうすると、importされたPython fileが
{{http://blog.godo-tys.jp/wp-content/gallery/datanitro_01/image02.jpg}}
のようにExcelに登録されます。

この状態でrunさせると、通常のpythonの実行と同様にwater_vapor.pyが実行されます。

===== Python fileを修正して実行 =====
せっかくExcel上で作成しているので、計算結果をExcelに書き出してみましょう。
water_vapor.pyをeditorから修正して、
{{http://blog.godo-tys.jp/wp-content/gallery/datanitro_01/image03.jpg}}
のwater_vapor2.pyで名前を付けて保存します。

修正したcodeは、

clear_sheet()
col = 1
for val in es:
Cell(col, 1).value = col
Cell(col, 2).value = val
col += 1

sheet上のデータをすべてclearな状態にします。
次に、計算したesの個数分だけ、cellに書き出していきます。Cellのcolumnとrowの取り扱いは、VBAと同じです。Cellのpropertyいついては、helpを参考にしてください。

グラフ化は、pylabのwrapperでnitroplotが用意されていますので、

plt.plot(T,es)
plt.xlabel('T (degree Celcius)')
plt.ylabel('es (Pa)')
#plt.show()
plt.graph()

のように変更します。 import nitroplot as pltで名前を変更しているので、大きな変更は、グラフの表示をshow()からgraph()に変更したくらいです。
graph()とすることで、sheet上にExcelグラフとして出力されます。

実際に実行させてみると、
{{http://blog.godo-tys.jp/wp-content/gallery/datanitro_01/image04.jpg}}
のようにSheet上に計算結果とグラフが作成されます。

使い方については、[[https://datanitro.com/docs/|documentation]]などを参考にすれば良いかと思います。あまり詳しく書かれていませんが、何となくpropertyやmethodの設定などは察しがつきます。

このDataNitroを使えば、計算結果のcountor作成や、複雑なグラフなど、また計算も、VBAからPython fileを読み込んで実行などが簡単にできます。
何よりも、Excel上で動くのはありがたいですね。

是非、非商用ライセンスを取得して、OSSでみなさんtryしてみてください。

ExcelでPythonを動かす。

====== ExcelでPythonを動かす。 ======
約1年前の記事ですが、[[http://jp.techcrunch.com/2012/08/11/20120810python-for-microsoft-excel-company-ironspread-comes-out-of-beta-changes-name-to-data-nitro/|Microsoft ExcelでPythonのスクリプトを動かせるプラグインDataNitro]]が一般公開されたそうです。

これは、全然知らなかったです。ExcelでPythonが動けば、ほかにプログラムはいらないくらいですよね。
また、個人利用及び非商用に限り、無償ライセンスが発行されます。
Open Sourceの開発には持ってこいです。

===== DataNitro setup =====
とりあえずは、ユーザー登録をして、個人利用及び非商用使用の理由を書いて申請します。
そうすると、30 days trialではなく、無制限のversionをdownloadすることができます。
詳しくは、[[https://datanitro.com/|Python in Excel — DataNitro]]をみてくださいね。

後は、downloadしたsetup.exeを実行すれば良いだけです。
ここで注意点、すでにPython 2.7.5はintasllしているので、checkを外します。
以上でsetup終了です。

===== DataNitroを使う =====
DataNitroは、Excel 2007を起動すると、さらにメニュー登録され、
{{http://blog.godo-tys.jp/wp-content/gallery/datanitro/image01.jpg}}
のようにDataNitroが追加されます。

Editorをclickすると、
{{http://blog.godo-tys.jp/wp-content/gallery/datanitro/image02.jpg}}
のようなIDLEなEditorが開きます。

Python Shellをclickすると、
{{http://blog.godo-tys.jp/wp-content/gallery/datanitro/image03.jpg}}
のIPythonのcmdターミナルが開くようです。
使い方については、[[https://datanitro.com/docs/|documentation]]などを参考にすれば良いかと思います。

これは、Pythonのmoduleもimportできるようなので、使い方次第で非常に強力なprogram環境になります。
ちょいと、本腰入れてやったみようかな?

是非、みなさんtryしてみてください。

水文解析の基本_2 [Chapter 3]

====== Pythonで水文水理解析をやってみる。[Chapter 3] ======
[[http://blog.godo-tys.jp/2013/09/02/4160/|水文解析の基本_1 [Chapter 2] ]]に引き続き、Precipitation(降雨)について学んでいきます。

このTutorialは、[[http://www.greenteapress.com/pythonhydro/pythonhydro.html|Python in Hydrology]]を使って、Pythonの基本的な勉強と**Pythonで水文水理解析**の勉強していきます。

ただし、本Blog中の専門用語の翻訳、source code等に関しては、あくまでも参考としてください。なにがあっても責任とれませんので。
そこんところ、ヨロシク~~!!

===== 水文解析の基本 =====
本章の中の問題は、chowによって「応用水文学」というタイトルの本からのものです。また、それらの詳細な記述については、「応用水文学」の本を参照してください。このtutorialは、水文学の中で一般的な方程式を含んでいます。
水文学の基本として、まずは、以下の7項目について、Pythonを使って学んでいきます。
– Water Vapor(水蒸気)
– Precipitation(降雨) ->**今回はここ**
– Rainfall(降水量)
– Evaporation(蒸発散)
– Infiltration(浸透)
– Surface water(表面流)
– River Routing–Muskingum method(マスキンガム法による河道流)

===== Precipitation(降雨) =====
Rainfall(降水量)については次章で説明します。
ここでは、Precipitation(降雨)の終末速度(terminal velocity)について計算してみます。終末速度とは、雨粒が地上に落下して地上に到達する際の速度のことで、

{V}_{t} =   big[  frac{4gD}{3C_{d} }   big( frac{  rho _{w} }{rho _{a} } - 1 big) big]  ^{ frac{1}{2} }

の式で表されます。
ここで、**g**は重力加速度, **D**は雨粒の直径, **ρw**は水の密度, **ρa**は大気の密度, そして**Cd**は抵抗係数(drag coefficient)です。ストークスの抵抗則(Stoke’s law)によれば、雨粒の直径が0.1mmよりも小さい場合は、抵抗係数(drag coefficient)は(**Cd = 24/Re**)として計算することができます。**Re**は、ρaVD/µaで計算されるレイノルズ数(Reynold number)です。

ここで、以下の仮定でVtを計算してみましょう。
Reのレイノルズ数(Reynold number)は5.0, 雨粒の直径は0.05 mm, そして(ρw = 998, ρa = 1.2)とします。

import numpy as np

Re = 5.0; rho_w = 998; rho_a = 1.2; g = 9.8; D = 0.05E-3
Cd = 24/Re
Vt = np.sqrt((4*g*D)/(3*Cd)*(rho_w/rho_a-1))
print (Vt)


終末速度は、**0.336248364997**となります。

c:¥python_hydrology¥chapter4¥にterminal_velocity.pyと保存後、実行すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_hydrology_03/image01.jpg}}
のように結果がインタープリタ画面に表示されます。

===== 今回のまとめ =====
**水文解析の基本_2 [Chapter 3]**のPrecipitation(降雨)の終末速度(terminal velocity)について勉強しました。
次回は、Rainfall(降水量)について勉強していきます。
**[[http://blog.godo-tys.jp/python-geospatial-tutorial/|Python GeoSpatial Tutorial]]**ではGISについてblogを書いていますので、GISに興味のある方はのぞいてみてください。

また、本Tutorialは、Python Scriptの基本的なことはある程度理解している前提で今後も話を進めていきます。また、誤字、脱字、spell間違いや翻訳の勘違いも多々出てくると考えられます。
特に英語から日本語への専門用語の翻訳については、プロではないので、「それは違うじゃん!!」とかいろんな意見をいただければと思います。

**[[http://blog.godo-tys.jp/python%E3%81%A7%E6%B0%B4%E6%96%87%E6%B0%B4%E7%90%86%E8%A7%A3%E6%9E%90/|Pythonで水文水理解析の目次に戻る。]]**

PythonでExcelを読み書きする。

====== PythonでExcelを読み書きする。 ======
PythonでExcelのファイルを読み書きしてみます。
有名どころでは、[[http://www.python-excel.org/|python-excel]]なるmoduleがあります。

「python-excel」ライブラリは「xlrd」「xlwt」「xlutils」という3つのパッケージが存在します。Installerもそれぞれ分かれており、ぞれぞれdownloadしてinstallできます。
詳しくは、[[http://www.python-izm.com/contents/external/excel.shtml|pythonでexcel]]で説明されていますので、参考にしてください。

ここでは、Excelのfile拡張子が**xlsx**の2007以降のExcel fileを読み書きしてみます。

今回使うmoduleは、[[http://openpyxl.readthedocs.org|openpyxl]]を使ってみます。
そのほか、
– PythonからExcelを利用する[[https://pypi.python.org/pypi/Pyvot|Pyvot 0.1.2]]
– [[https://pypi.python.org/pypi/XlsxWriter/0.4.2|XlsxWriter]]
– [[http://www.pyxll.com/PyXLL]]
など多数、それそれの機能に特化したmoduleがあります。
[[https://pypi.python.org/pypi?%3Aaction=search&term=xls&submit=search]]で検索するとmoduleがhitします。 いろいろと試してみるのも良いですね。

===== openpyxl install =====
pygeocoderを動かす環境ですが、
– Windows 7 64 bit (32bitでも可)
– Python 2.7.5 (2013年6月18日現在最新版)
で行います。

環境の構築に関しては、[[http://blog.godo-tys.jp/2013/06/19/2465/|PythonでGeoSpatialをやってみる。[Chapter 1]]]のinstallのsectionを参考にしてください。

まずは、[[https://pypi.python.org/pypi/openpyxl/1.6.2|openpyxl 1.6.2]]から[[https://pypi.python.org/packages/source/o/openpyxl/openpyxl-1.6.2.tar.gz#md5=9f24ed772c98f24ae693f8ab6c7b7016|openpyxl-1.6.2.tar.gz]]をdownloadして、解凍します。
その後、解凍したfolderにcdして、cmdターミナルから

python setup.py install

を実行します。

以上でinstallは終わりです。

===== how to openpyxl =====
使い方はいたって簡単です。
PyScripterやIDLEなどからcodeを実行します。

==== Excel Workbookに書き出す ====
まずは、ExcelのWorkbookに書き出してみます。
下記codeをPyScripterに入力します。

from openpyxl import Workbook

from openpyxl.cell import get_column_letter

wb = Workbook()

dest_filename = r'F:¥¥openpyxl-1.6.2¥¥test_books¥¥check_book.xlsx'

ws = wb.worksheets[0]

ws.title = "range names"

for col_idx in xrange(1, 40):
    col = get_column_letter(col_idx)
    for row in xrange(1, 600):
        ws.cell('%s%s'%(col, row)).value = '%s%s' % (col, row)

ws = wb.create_sheet()

ws.title = 'Pi'

ws.cell('F5').value = 3.14

wb.save(filename = dest_filename)


**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

code入力後は、F:¥openpyxl-1.6.2¥test_books¥xlsx_write_module_01.pyに保存し、実行すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_excel_01/image01.jpg}}
のようにエラーがなければ、インタープリタ画面には何も表示されません。

F:¥openpyxl-1.6.2¥test_booksのfolderを確認しみると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_excel_01/image02.jpg}}
のようにcheck_book.xlsxが作成されています。

とりあえずは、check_book.xlsxを開いて中身を確認すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_excel_01/image03.jpg}}
のようにcheck_book.xlsxのsheet内に値が入力されていることがわかります。

==== Excel Workbookを呼び出す ====
次に、ExcelのWorkbookを呼び出してみます。
下記codeをPyScripterに入力します。

from openpyxl import load_workbook

dest_filename = r'F:openpyxl-1.6.2test_bookscheck_book.xlsx'

wb = load_workbook(filename = dest_filename)

sheet_ranges = wb.get_sheet_by_name(name = 'range names')

print sheet_ranges.cell('D18').value


**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

code入力後は、F:¥openpyxl-1.6.2¥test_books¥xlsx_read_module_01.pyに保存し、実行すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_excel_01/image04.jpg}}
のようにエラーがなければ、cell(‘D18’)の値がインタープリタ画面に表示されます。

==== 日本語の読み書き ====
日本語の読み書きについては、py fileをUTF-8で保存して、
py modlueの1行目に

# -*- coding: utf-8 -*-

を付け加えればOKです。
例えば、Excel Workbookに書き出す場合は、

# -*- coding: utf-8 -*-

from openpyxl import Workbook

from openpyxl.cell import get_column_letter

wb = Workbook()

dest_filename = r'F:¥¥openpyxl-1.6.2¥¥test_books¥¥check_book2.xlsx'

ws = wb.worksheets[0]

ws.title = u"日本語"

ws.cell('A1').value = u'行1'
ws.cell('A2').value = u'行2'
ws.cell('A3').value = u'行3'
ws.cell('A4').value = u'行4'

wb.save(filename = dest_filename)


**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

code入力後は、F:¥openpyxl-1.6.2¥test_books¥xlsx_write_module_02.pyに保存し、実行すると、check_book2.xlsxが作成されます。

中身は日本語となっています。
読み込みについても同様ですので、exerciseとしてtryしてみてください。

===== 今回のまとめ =====
**openpyxl**を使って簡単にExcel Workbookの読み書きしてみました。moduleの使用については必要最低限の利用方法ですので、詳しくは[[http://pythonhosted.org/openpyxl/index.html#usage-examples|openpuxlの使い方]]をみて勉強してください。

PythonでGeocodingする。

====== Pythonでgeocodingする。 ======
PythonでGooglemaps APIを使ってgeocodingする場合、[[https://pypi.python.org/pypi/googlemaps/|googlemaps 1.0.2]]なるmoduleがあります。
これを使えば、簡単に geocoding や reverse geocodingができるようになるようですが、API V3では動きません。V2のKeyがないとだめなようです。 しかし、V2 API Keyはもはやsupportされていません。
そこで、色々と探してみて、Googlemaps API V3が使えるmoduleを見つけました。
それは、**[[https://pypi.python.org/pypi/pygeocoder|pygeocoder 1.2.1]]**です。本当に、先人に感謝します。
ちょっと、**pygeocoder 1.2.1**使ってみたので、書き留めておきます。

===== pygeocoder 1.2.1 install =====
pygeocoderを動かす環境ですが、
– Windows 7 64 bit (32bitでも可)
– Python 2.7.5 (2013年6月18日現在最新版)
で行います。

環境の構築に関しては、[[http://blog.godo-tys.jp/2013/06/19/2465/|PythonでGeoSpatialをやってみる。[Chapter 1] ]]のinstallのsectionを参考にしてください。

まずは、[[https://pypi.python.org/pypi/pygeocoder|pygeocoder 1.2.1]]から[[https://pypi.python.org/packages/source/p/pygeocoder/pygeocoder-1.2.1.tar.gz#md5=2428eda2b8f6dc10070cb93bd7e3fe35|pygeocoder-1.2.1.tar.gz]]をdownloadして、解凍します。
その後、解凍したfolderにcdして、cmdターミナルから

python setup.py install

を実行します。

以上でinstallは終わりです。

===== how to pygeocoder =====
使い方はいたって簡単です。
PyScripterやIDLEなどから下記のcodeを実行します。

from pygeocoder import Geocoder
results = Geocoder.geocode("Japan")
print(results[0].coordinates)

結果として、
**(36.204824, 138.252924)**
のように日本の中心緯度経度が表示されます。

これは非常に簡単に使えますね。

PyScripterのインタープリタ画面で実行すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_geocoding_01/image01.jpg}}
ように日本の中心緯度経度が表示されます。

そして、**pygeocoder**のhelpは、
{{http://blog.godo-tys.jp/wp-content/gallery/python_geocoding_01/image02.jpg}}
ようにmoduleの情報が表示されます。

試しに日本語でgeocodingしてみると

from pygeocoder import Geocoder

def main():
results = Geocoder.geocode(u"日本")
print(results[0].coordinates)

if __name__ == '__main__':
main()

のcodeで実行すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_geocoding_01/image03.jpg}}
ように日本の中心緯度経度が表示されます。

大丈夫のようですね。

===== 今回のまとめ =====
**pygeocoder**を使って簡単にgeocodingしてみました。
PythonでExcel(2003以前と2007以降)の読み書きについてもまとめておきましょう。

水文解析の基本_1 [Chapter 2]

====== Pythonで水文水理解析をやってみる。[Chapter 2] ======
まずは、水文解析の基本から始めましょう。

ここで、水文学とは?
「水文循環を中心的概念として自然界の水を研究する科学。狭義の水文学は地球科学の一部門とみなされ,陸地の水の存在状態,循環,分布,物理的・化学的特質などの基礎的事項を研究する。広義の水文学には,水文循環に関する基礎的研究に基づいて,水資源の開発,水の適正な利用,水と環境との関係,水文環境の保全など,人間と水との好ましい関係を追求する応用的分野も含まれ工学的色彩が強い。狭義の水文学は基礎水文学と呼ぶことができ,具体的な研究対象は降水,遮断,蒸発散,浸透,流出などの水文循環諸過程と,それらを地域的に総合した水収支であり,その成果は水資源開発や国土計画の基礎となる。 」 引用:kotobank[[http://kotobank.jp/word/水文学]]
と書かれているように、陸上の水の循環過程を工学的及び理学的に勉強するものといえます。
本blogでは、基礎水文学として、水文循環過程について学んでいきます。

このTutorialは、[[http://www.greenteapress.com/pythonhydro/pythonhydro.html|Python in Hydrology]]を使って、Pythonの基本的な勉強と**Pythonで水理水文解析**の勉強していきます。

ただし、本Blog中の用語の翻訳、source code等に関しては、あくまでも参考としてください。なにがあっても責任とれませんので。
そこんところ、ヨロシク~~!!

===== 水文解析の基本 =====
本章の中の問題は、chowによって「応用水文学」というタイトルの本からのものです。また、それらの詳細な記述については、「応用水文学」の本に参照してください。このtutorialは、水文学の中で一般的な方程式を含んでいます。
水文学の基本として、まずは、以下の7項目について、Pythonを使って学んでいきます。
– Water Vapor(水蒸気) ->**今回はここ**
– Precipitation(降雨)
– Rainfall(降水量)
– Evaporation(蒸発散)
– Infiltration(浸透)
– Surface water(表面流)
– River Routing–Muskingum method(マスキンガム法による河道流)

===== Water Vapor(水蒸気) =====
飽和水蒸気圧(saturation vapor pressure)は、気温との関係から、

{e}_{s} = 611 exp left( 12.27T over 237.7+T right)

の式で表されます。
ここで、**es**の単位はpscal、 **T**は温度(気温)で、単位は摂氏度となります。

ここでT=50度の時の飽和水蒸気圧を求めてみましょう。

import numpy as np

T=50
es = 611*np.exp(17.27*T/(237.3+T))
print (es)


計算結果は、**12340.799081**となります。

次に、Tを-100から100度で計算して、なおかつグラフ化してみましょう。
グラフの作成は、pylabを使います。
PyScripterを立ち上げて、以下のcodeを入力します。

import numpy as np
import pylab as plt

T = np.linspace(-100,100,50)
es = 611*np.exp(17.27*T/(237.3+T))
print (es)

plt.plot(T,es)
plt.xlabel('T (degree Celcius)')
plt.ylabel('es (Pa)')
plt.show()

c:¥python_hydrology¥chapter4¥にwater_vapor.pyと保存後、実行すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_hydrology_02/image02.jpg}}
のようにxyグラフが表示されます。

また、PyScripterのインタープリタ出力には、
{{http://blog.godo-tys.jp/wp-content/gallery/python_hydrology_02/image01.jpg}}
のようにesの値が表示されます。

pythonでは、For文やdo文を使うことなく、配列の処理ができるので、プログラムをすっきりとします。

===== 今回のまとめ =====
**水文解析の基本 [Chapter 1]**の水蒸気圧について勉強しました。
次回は、Precipitation(降雨)について勉強していきます。
**[[http://blog.godo-tys.jp/python-geospatial-tutorial/|Python GeoSpatial Tutorial]]**ではGISについてblogを書いていますので、GISに興味のある方はのぞいてみてください。

また、本Tutorialは、Python Scriptの基本的なことはある程度理解している前提で今後も話を進めていきます。また、誤字、脱字、spell間違いや翻訳の勘違いも多々出てくると考えられます。
特に英語から日本語への専門用語の翻訳については、プロではないので、「それは違うじゃん!!」とかいろんな意見をいただければと思います。

**[[http://blog.godo-tys.jp/python%E3%81%A7%E6%B0%B4%E6%96%87%E6%B0%B4%E7%90%86%E8%A7%A3%E6%9E%90/|Pythonで水文水理解析の目次に戻る。]]**