トラブルシューティング事例集
計算機利用 (おもに Python プログラム実行) の実習をしていて、
うまくいかない人の話をきいて対策を考えた事例を書きとめておきます。
特定の実行環境に依存する問題が多いです。
おもに、Linux 上で Python (version 3) のプログラムをうごかすばあい
(端末として Windows PC をつかうことを想定していることがある) と、
Windows 上の Anaconda 3 で Python プログラムをうごかしたばあいとが、まざっています。
スクリプトファイル (*.py) が見つからない
(Windows上のAnacondaでの実行, 2021-06-22)
- 症状
- MS Windows上で、 Python プログラムを「a.py」の形のファイル名で保存したのに、
Anaconda Powershell Promptから「python a.py」で実行しようとすると、
「a.py が存在しない」という趣旨のエラーになる。
- 原因
- プログラムを Windowsの「メモ帳」をつかって入力していた。
ファイル名は、実際は「a.py.txt」のようについていた。
しかし、エクスプローラーのデフォルト設定で、
拡張子「.txt」は表示されないようになっていた。
- (Rによる実習でも、同様に、ファイル名が「a.R.txt」のようになっていたことがあった。)
- 対策
-
- エクスプローラーの「表示」のうちの
「ファイル名拡張子」にチェックを入れる。
これで、「.txt」が表示されるようになる。[Windows 10 以後。この部分 2022-08-10 追加, 2023-04-30 改訂]
- エクスプローラーの「表示 - オプション - 表示 - 詳細設定」で、
「登録されている拡張子は表示しない」のチェックをはずす。そして「フォルダーに適用」。
これで、「.txt」が表示されるようになる。[Windows 7 ではこちら。Windows 10 以後でも可能だが、上にしめした方法がよい。]
- Python スクリプトの編集には「メモ帳」をつかわない。
Anaconda とともにインストールされる Spyder のエディタをつかうか、
「メモ帳」以外のエディタ (一例は「サクラエディタ」) を入れる。[この部分 2022-07-17 改訂]
プログラム実行開始してしばらくたっても状態が変わらない (2021-06-22)
- 調査手段
- ループの中にprint(...)の実行を追加してみた。
- 調査結果
- printは実行されており、プログラム本体も進行していた。
(時間のかかるプログラムだった。
)
- 判断
- print文を追加するまえのプログラムは、
結果をファイルに書き出していたが、コンソール画面には何も出さなかったので、
進行していることがわからなかった。
このようなときは、print を追加してみるとわかることがある。
ただし、あまりに多重のループの中に print を入れると、
出力が多すぎて見きれなくなる。
実行回数を見積もって、print の頻度が適度になるようにつかう。
図が画面に出ない (Windows 上の TeraTerm から Linux にログインしての実行, 2021-06-22)
- 症状
- Windows 上 のTeraTermからLinuxにログインして、Python プログラム (matplotlib をよびだしている)
を動かすことはできるのだが、図が画面に出ない。
- 実行条件の補足
- Windows上で Xming をうごかしている。
WindowsからLinuxへのアクセスには(TeraTermの中から) ssh をつかっている。
- 原因1とその対策
- TeraTermをさきに起動してからXmingを起動しても、TeraTermがXmingを認識しない。
Xmingをさきに起動する。
- 原因2とその対策
- TeraTermの「設定」のうち「SSH転送」の
「Xクライアントアプリケーションの転送」の
「リモートのXアプリケーションをローカルのサーバーに表示する」の
チェックがオフだと図が出ない。
これをオンにすれば、TeraTerm実行のその回は図の表示ができる。
- そのうえで、「設定」のうちの「設定の保存」を実行する。
これで、つぎにTeraTermを実行したときにも同様に設定される。
- 原因3とその対策
- Pythonスクリプトの中で (import matplotlib.pyplot as plt を前提として)
plt.show() がないと、画面に表示されない。
(plt.savefig(画像ファイル名) があれば、図は画像ファイルには出力されている。)
画面にも出したいならば、plt.show() を追加する。
- なお、plot.savefig でつくられる画像ファイルが pdf ファイルならば、
(実習用の Linux マシンには gv がはいっているので)
gv コマンドを起動してその pdfのファイル名を指定すれば、
(Xming の起動と TeraTerm の Xに関する設定がうまくいっていれば)
図を見ることができる。
- 同様に、plot.savefig でつくられる画像ファイルが png ファイルならば、
(実習用の Linux マシンには ImageMagick がはいっているので)
display コマンドを起動してその png ファイル名を指定すれば、
(Xming の起動と TeraTerm の Xに関する設定がうまくいっていれば)
図を見ることができる。[2021-08-01 に補足した]
- 原因4とその対策 [2021-07-13 に出あった事例、2021-07-15 追加]
- TeraTermの「設定の保存」をしたが、その結果が、つぎにTeraTermを起動したときに読みこまれず、
default 設定にもどってしまう。
「設定の保存」のとき、TERATERM.INI ファイルを置く場所を変更していると、
つぎに起動したときに、変更された置き場所を読みにいかないようだ。
TeraTermをインストールしたとき TERATERM.INI が置かれた場所を指定すればよい。
増田のWindows 10 パソコンのばあいは、
「c:\Program Files (x86)\teraterm\TERATERM.INI」である。
TTSSH のエラーメッセージ窓がでる (Windows 上の TeraTerm から Linux にログインしての実行, 2023-11-07)
症状
matplotlib をつかうプログラムを実行すると、つぎのような窓がでる。
TTSSH
サーバはこのマシンに転送を試みました.
localhost 上の Xサーバーへの接続を要求しました (ディスプレイ 0:0).
接続は拒否されました (おそらくサービス停止中です) (code 10061).
転送接続を終了します.
[OK]
対策 1
画面に図をだしたいばあいは、いったん TeraTerm を終了し、
Xming をさきに起動してから TeraTerm を起動する。
対策 2
matplotlib をつかっているが plt.show をつかっていないばあい
(結果は plt.savefig で画像ファイルにいれるばあい) は、
エラーメッセージ窓の「OK」ボタンをクリックすると、正常にさきにすすむ。
対策 3
matplotlib をつかっているが plt.show をつかっていないばあい、
プログラムの「import matplotlib.pyplot as plt」よりまえに、つぎの2行をいれると、
このエラーメッセージをださずにさきにすすむ。
import matplotlib
matplotlib.use("Agg")
この件はいくつかのウェブページを参照したが、つぎのページを例にあげておく。
雑多な記録 : python: matplotlib: cui環境 (杉本 高大 さん Last modified: 2021/06/27 22:04)
http://www2.yukawa.kyoto-u.ac.jp/~koudai.sugimoto/dokuwiki/doku.php?id=python:matplotlib:cui%E7%92%B0%E5%A2%83
matplotlib 入門 : とりあえず描く (柞刈 湯葉 さん)
https://yubais.net/doc/matplotlib/introduction.html
Linux で matplotlib で図をかくプログラムをバックグラウンドにまわすには (2023-11-07)
つぎの 1, 2, 3 をあわせて実行する。
1. プログラムでは plt.show をつかわないで、plt.savefig で図を画像ファイルに保存する。
2. 上の「TTSSH のエラーメッセージ窓がでる」の「対策 3」で書いたように、"Agg" を指定する。
3. プログラムをバックグラウンドにまわす。例として prog.py とする。
標準出力と標準エラー出力を (例として prog.log という名まえの) ファイルに出すようにする。
- csh の ばあい
- nohup python3 prog.py >& prog.log &
- bash の ばあい [2023-11-07 現在、未確認]
- nohup python3 prog.py >prog.log 2>&1 &
プログラム中のバックスラッシュ (右下がりの斜線) を入れるには (2021-06-29)
- 課題
- Pythonプログラム中で、ひとつの文を行にまたがって継続するときには、
行のおわりにバックスラッシュを置けばよい。
ところが、エディタでプログラムを作成するとき
どうすればバックスラッシュを入れられるかわからない。
- 答え
- バックスラッシュをあらわすASCIIコードは「\」という文字になるが、
日本語のソフトウェアでは、たいてい、日本の通貨の「円 (yen)」の記号にわりあてられている。
キーボードのキーにバックスラッシュが書いてあっても、
それを押して出る文字は yen マークであることがある。
この (1バイト文字の) yen マークは、Python 処理系ではバックスラッシュとみなされるので、
継続行のしるしにそのままつかってよい。
- 答えの補足
- 「\」を確実にバックスラッシュとして見たいときは、
画面表示フォントに関する言語設定を日本語ではなく英語にする。
TeraTermならば、「設定」の「フォント」の「フォント」のメニューの
「文字セット」のところを、「日本語」から「OEM/DOS」に変える。
(ただし、これをやると、日本語文字は化けるだろう。)
- 注意
- 日本語文字セットのうちには、バックスラッシュと同一視される「\」のほかに、
それとちがう「¥」(いわゆる「全角のyen記号」) もある。
これはバックスラッシュのかわりにならないので、注意する必要がある。
Python での 段さげ (indent)、空白 (space) と タブ (tab) に関するエラー (2021-07-20)
- 症状
- Pythonのスクリプトの実行のはじめまたは途中で、
「indent」とか「tab」とか「space」とかいう文字列をふくむエラーメッセージが出て、
実行がとまってしまう。
Pythonでは、条件つき処理をあらわす if 文や、ループをあらわす for 文の
対象となるところは、段下げする (行のはじめを右にずらす)。
段下げしていない行は、条件つき処理やループのおわったあととみなされる。
if や for が多重になると、段下げは深くなっていく。
Python では、段下げはプログラム言語の構文上の意味をもつ。
【ほかのほとんどのプログラム言語では、
段下げは、計算機に対する命令としての意味はなく、読み書きする人がわかりやすいようにつかう。
その結果、実情として、条件つき処理やループの内容を段下げするのがふつうになっているが。】
段下げには、空白文字(space)をつかう流儀と、タブ文字(tab)をつかう流儀がある。
わたしの教材では、段下げを、空白 (日本語圏でいう「半角空白」) 4個で表現している。
タブ文字が出現したり、行の左端に4個の倍数でない空白文字列が出現したりすると、
Python処理系が、構文エラーとみなして、実行まえに警告してくる。
エディタによっては、自動的にタブ文字を入れてくれるものもあるが、
エディタで「タブ」を「空白4個」で表現するように設定できれば、そうするのがよい。
それができなければ、手入力で空白4個を入れてほしい。
【段下げをタブで表現すると決めてすべてそれでとおせばそれでもよいらしい。】
なお、いわゆる「全角空白」 (ふつう漢字やひらがなと同じ幅の空白として
表示される文字コード) は、Python では空白としてあつかわれず、
段さげにもつかえない。プログラム中では (文字列の中にふくまれるばあいのほかは)
全角空白はなくしておくべきである。
アメダスの地点の緯度経度が意外なものになる (2021-07-20)
- 症状
- [気象観測データ (多地点) の空間分布と時系列の作図]や
[気象観測データによる風の空間分布の作図]にならったプログラムで、
アメダスの観測点をふやしたら、
対象地域内のはずのいくつかの観測点の位置 (緯度・経度) が、対象地域の地図の外になってしまった。
- 原因
- これはPythonの問題ではなく、気象庁の観測点名の問題だった。
増田のプログラム例では、
アメダスの地点一覧表のファイル (気象庁からダウンロードしたものを増田が編集したもの)を、
地点名 (漢字) で検索して、地点の緯度・経度をもとめていた。
ところが、アメダスの地点名は、かならずしも一意的ではない。
たとえば、「府中」は、東京都府中市にも、広島県府中市にもある。
わたしのプログラム例では、あとで見つかったほうが書きだされる。
- 対策 1
- 一意的につけられている地点番号をつかう。
(ただし、気象官署にはアメダス地点番号のほかに国際地点番号がつけられていて、
両者はちがうことに注意。)
- 対策 2
- 都道府県ごとには地点名は一意的らしいので、
都道府県を指定して限定する。
【[2023-11-10 補足]
ただし、同じ都道府県にちがう時期に存在した地点の名まえが同じことはある。
データのダウンロードの際に注意して、観測されていないほうの地点をはずしておくべきである。
これまでに気づいたかぎりで、新島 (東京都)、神津島 (東京都)、三倉 (静岡県)、高遠 (長野県)、
宇奈月 (富山県)。】
(なお、アメダス地点番号の5けたのうち上2けたはだいたい都道府県にあたる地域の番号なのだが、
JISの都道府県番号と同じではないことに注意。)
- 対策 3
- 全国の地点一覧表のファイルではなく、
そこから対象地域の地点だけをぬきだしたファイルを読むようにし、
その中には同名の地点がないことを確認しておく。
Windows 10 上 の Anaconda で Cartopy のインストールができない (2021-11-25)
- 症状
- Anaconda Navigator の Environment で、All にして Cartopy を検索すると出てくる。
それを選択して apply すると、それが前提とするパッケージ一覧が出るので、承認すると
インストール作業にかかる。しかし、「Multiple error occured」と出て、インストールは失敗する。
- Anaconda Power Shell Prompt から 「conda install cartopy」をやっても同様に失敗する。
- 背景1
- 複数ユーザーがつかうマシンで、
管理者権限で「すべてのユーザー」むけにインストールしたばあいにおきた。
- 対策1
- シェルプロンプトから実行したときのエラーメッセージに出たフォルダ名をヒントにして
つぎの試みをしたところ、成功した。
Anacondaをインストールした管理者ユーザーで、
エクスプローラーの「表示」で「隠しファイル」を表示させるようにしたうえで、
「c:\ProgramData\」を開く。
その「Anaconda3」というフォルダについて、
右クリックのメニューから「アクセスを許可する」、「特定のユーザー」を選択し、
インストール作業をしている管理者ユーザーの「読み取り/書き込み」を「共有」する。
これ以後、Cartopy のインストールができるようになった。
- 背景2 (2022-04-21)
- シングルユーザーのパソコンでおきた。
- 対策2 (2022-04-21)
- Anaconda Navigator が upgrade をうながしていたので、
upgrade を実行して 2.1.4 にして、あらためて Cartopy をインストールしたら成功した。
この特定のばあいについては、upgrade まえのバージョンの Anaconda のバグのようなものだったのだろう。
Windows 10 上 の Anaconda で 複数ユーザーむけインストールがうまくいかない (2021-12-05) (未解決)
- 症状
- 複数ユーザーがつかうマシンで、
管理者権限で「すべてのユーザー」むけにインストールしている。
管理者ユーザーでは、Python プログラムの実行も問題なくできる。
Cartopy も、上にのべた対策をすれば、インストールでき、利用もできる。
しかし、管理者権限のない一般ユーザーでは、Anaconda Power Shell も Spyder も動かない。
- これまでにわかったこと (2021-12-23)
- 複数のユーザーが同様につかえるようにするためには、
「環境の作成」をして、その情報を管理者ユーザーのホームディレクトリ下とはちがうところに置く必要がある。
たとえば 「conda create --prefix /c/ProgramData/Anaconda3/envs/{ENV-NAME}」を実行する。
それを置いたディレクトリを、Windowsの「設定」で共有可能にする。
Anaconda Navigatorで、「Envirnoment」から、つくった「環境」を選択したうえで、
「All」からCartopy をえらび、「apply」を押して、インストールする。
また、「Home」から、Anaconda Power Shell, Spyder などを「Install」する。
- 残る問題 (2021-12-23)
- 設定の手順が、再現性のある形で整理されていない。
- Cartopy で海岸線をひくところが、一般ユーザーでは線がひかれない。
Windows 10 上 の Anaconda で Cartopy をつかうとエラーで止まる (2021-11-25) (未解決)
- 症状
- [「四号機」で] Anaconda から Cartopy をよびだす Python プログラムを実行すると、
「ImportError: DLL load failed while importing _crs: 指定したプロシージャが見つかりません.」
で止まる。そのまえには
「C:\ProgramData\Anaconda3\lib\site-packages\cartopy\__init__.py」
と、同じところにある「crs.py」のファイル名が表示されている。
(Cartopy をつかわない Python プログラムは正常に実行できた。
Cartopy のインストールも正常に実行できたように見えた。)
- 状況
- 2021-11-25現在、未解決。
Cartopy が正常に実行できているところとのちがいで思いあたるのは、
このマシンは OS が 32ビットモードのもので、Anaconda も 32ビット版がインストールされていること。
しかし、それが原因であるという証拠もない。
ユーザーアカウント名のせいで Anaconda がインストールできない、あるいは動かない (2021-12-23)
- 症状
- Windows上で、Anaconda をインストールしようとすると、
ユーザーアカウント名 ディレクトリ名 が不適切だとされて
インストールできない。
あるいは、インストールはできるが Spyder などが動作しない。
- 原因
- インストールさきのディレクトリ名に、
ASCIIの1バイトコードで表現できる以外の文字 (日本語の漢字・かな など) がふくまれているばあいや、
(ASCII 1バイトコードであっても) 空白 (' ') がふくまれているばあいに、このエラーになる。
- ユーザーアカウントをつくるとき、Microsoftアカウントをつかったばあいは、
ログインのとき表示されるユーザー名に日本語文字がふくまれていても、
ホームディレクトリ名は (メールアドレスからとった) ASCIIコードの文字列になるので、
Anaconda のインストールさきをホームディレクトリにしても問題ないようだ。
- そのほかの方法でユーザー名をきめると、
ユーザーアカウント名がホームディレクトリ名になるので、
アカウント名に日本語文字や空白がふくまれていると、問題が生じる。
- 対策
- インストールさきを、ユーザーアカウントのホームディレクトリ
(たとえば「c:/Users/アカウント名」) にするのをさけて、
ディスクのトップからのfull path名が ASCII コードだけ、しかも空白をふくまないものにする。
- あるいは、ASCII コードだけの、しかも空白をふくまない、ユーザー名をつくって、
管理者権限をあたえ、
Anaconda のインストールも実行もそのユーザーでやるようにする。
Python プログラム実行時にデータが見つからないというエラーになる (2022-04-15)
- 症状
- Python プログラムを実行すると、つぎのようなエラーになる。
FileNotFoundError: [Error 2] No such file or directory
- 対策
- ファイル名がまちがっているばあいもある。
- 正しい名まえのファイルがあっても、それが置いてあるディスク上の場所の指定があっていないばあいが多い。
増田の例文では、たとえば「datapath = "c:/kaiseki_uryo"」のような文がある。
この「" "」の中を、自分の計算機上のディレクトリ名に書きなおす。
- ただし、Windows のばあい、
各人の「ドキュメント」「ダウンロード」フォルダは、それぞれ、
「c:/Users/xxxx/Documents」「c:/Users/xxxx/Downloads」のような形で指定する。
xxxx は、原則としてユーザーアカウント名だが、
Microsoftアカウントによってユーザー登録したばあいは、メールアドレスにもとづく文字列になっている。
エクスプローラーで「Windows (c:)」 の下の「ユーザー」の下を見て確認するとよい。
研究室のPCから学外のウェブサイトにはつながるのだが学内のポータルサイトにつながらない (2022-04-20)
- 症状
- 研究室そなえつけのWindowsパソコンのブラウザから、学外 (たとえば気象庁) のウェブページは読めるのだが、
ポータルサイトにつなごうとするとエラーになってつながらない。
- 原因
- インターネットでは、ホスト・ドメイン名をIPアドレスという数字列におきかえる DNS というしくみがつかわれている。
- うちの大学のネットワークの構成では、学内のサーバーを学外からもみられるように設定するときには、
学内からと学外からではちがった IP アドレスがつかわれる。
学内のマシンから学外向けの IP アドレスにアクセスしようとするとエラーになる。
- 研究室のPCは、ルーターという機械をとおして学内ネットワークにつながっているが、
ルーターの「DNSサーバー」の設定が古いままだった。
そのせいで、サーバーの学内むけのIPアドレスがわからなかったようである。
- 対策
- (パソコンからローカルネットで接続して)
ルーターの設定のうち「DNSサーバー」のIPアドレスを、
現在の学内ネットワークで適切なものにかえた。
Pandas の read_csv で Shift_JIS のファイルを読もうとしてエラーになる (2022-05-15, 2022-08-04 改訂)
- 症状
- 「pd.read_csv(filename, encoding='shift_jis', ...)」のような形でデータを
読もうとすると、つぎのようなエラーになる (数字は例)。
UnicodeDecodeError: 'shift_jis' codec can't decode byte 0x87 in position 216:
illegal multibyte sequence
- 原因
- 読もうとしているファイルに、
(Python 処理系にとっての標準の) Shift_JIS の文字コードとして無効なものがふくまれている。
- 基本的には Shift_JIS の CSV ファイルだが、標準からはずれた文字がふくまれている。
- 原因 1
- Microsoft社が拡張した Shift_JIS の文字コードがつかわれている。
- 原因 2
- 理由はともかく、Python にとって標準の Shift_JIS 以外のものがまじっている。
- 対策 1 (原因 1 むけ)
- Python では、Microsoft社が拡張した Shift_JIS は「cp932」という名まえで参照される。
read_csv の encoding の指定を encoding='cp932' にしておけば読める。
- 対策1の情報源
- recomemos (2017-01-20) pandasにexcel出力のcsvを読ませる時に注意する点
https://qiita.com/recomemos/items/1032199c5c47f1ce5417 [2022-08-04 閲覧]
- 対策1の情報源の情報源
- OSCA (日付なし) Shift_JIS と Windows-31J (MS932) の違いを整理してみよう
https://weblabo.oscasierra.net/shift_jis-windows31j/ [2022-08-04 閲覧]
- 対策 2 (原因 1, 2 むけ)
- codecs というライブラリをつかって、無効な文字を無視するようにする。
あらかじめ「import codecs」をしておいて、
「with codecs.open(filename, 'r', 'Shift-JIS', 'ignore') as file:」
を実行したあとに「pd.read_csv(file, encoding='shift_jis', ...)」のようにする。
(ここでの file は filename とは別の変数。)
- 対策2の情報源
- niwaringo (2015-09-03) pandasでread_csv時にUnicodeDecodeErrorが起きた時の対処 (pd.read_table())
https://qiita.com/niwaringo/items/d2a30e04e08da8eaa643 [2022-08-04 閲覧]
- 文字コードがちがう。あるいは、実は CSV でない。
- 原因 3
- 文字コードがちがう (たとえば UTF-8 の) CSV ファイルを Shift_JIS だと思って読もうとしている。
(Excel 2016 以後のバージョンでは、「名前をつけて保存」の選択肢に、
「CSV (カンマ区切り) (*.csv)」のほかに、
「CSV UTF-8(コンマ区切り)(.csv)」がある。
日本語文字は 前者だと Shift_JIS、後者だと UTF-8 になる。)
- 原因 4
- CSVファイルと思っていたもの (CSVらしい名まえがついていたファイル) が、
実はちがう形式のファイル (たとえば Excel の xlsx ファイル) だった。
- 対策 3 (原因 3 むけ)
- read_csv で指定する encoding を CSVファイルの実際にあわせる。
UTF-8 ならば 「encoding='utf-8'」 。
- 対策 4 (原因 3, 4 むけ)
- CSVファイル をつくりなおす。
Excel ならば「名前をつけて保存」で「CSV (カンマ区切り) (*.csv)」を選択して保存する。
- 対策の補足 (原因 4 むけ)
- Windows 標準の設定では、ファイル名拡張子
(ファイル名のおわりの、たとえば「.csv」のような部分) が表示されない。
表示されるように自分の Windows 設定を変えておいたほうがよい。
Windows 10 のばあいは、エクスプローラーの「表示」の「表示/非表示」の「ファイル名拡張子」に
チェック (「レ」のような記号) を入れておく。
【Windows 7 での指定方法は「拡張子を表示しない」のチェックをはずす形だった。】
Pandas で データフレームから条件を指定して抽出した部分集合のデータフレームをつかおうとするとエラーになる (2022-05-19)
- 症状
- データフレーム df から、たとえば「dfy = df[df.year == 2016]」のような抽出をして
データフレーム dfy をつくり、
その要素を、たとえば dfy.month[krec] のように参照しようとすると、エラーで止まる。
エラーメッセージは pandas ライブラリ内から出ているらしい。
- 原因
- データフレームには 各行の index 番号がある。
部分集合をつくるとき、各行の index番号はつけなおされない。
上記のような抽出をすると、dfy の各行の index番号は df のときのままになる。
dfy.month[krec] のような形で参照しようとしても、
index番号がkrecである行があるとはかぎらない。
- 対策
- reset_index() というメソッドをつぎのようにつかえば、
index番号が、0 から len(dfy)-1 までになるように つけなおされる。
「dfy = df[df.year == 2016].reset_index(drop=True)」
- 参照した情報源
- note.nkmk.me
pandas.DataFrame, Seriesのインデックスを振り直すreset_index
Posted: 2018-01-13
https://note.nkmk.me/python-pandas-reset-index/
Pandas のデータフレームを print すると途中が省略されてしまう (2022-11-22)
これは、print される文字数があまり多くならないようにわざとそうなっているのだが、
つぎのようにして、内容が表示される行の数や列の数をふやすことができる (数値は例。
なお、「import pandas as pd」をしてあることを前提としている)。
pd.set_option('display.max_rows', 100)
pd.set_option('display.max_columns', 20)
- 参照した情報源
- Python初心者の備忘録
【Python】Pandasのデータフレームを省略せずに表示する方法を紹介
2020年6月20日, 2021年7月13日
https://py-memo.com/python/pandas-display/
[2022-11-21 閲覧]
Cartopy で海岸線はひけるが県境がひけない (2022-07-16, 改訂 2022-08-03)
これは 増田が2021年7月から2022年7月までにつくったプログラム例 についての注意です。
- 症状
- 増田のプログラム例の海岸線と県境をふくむものを実行すると、
海岸線はひかれるが県境がひかれない。
- 原因について
- 増田の2022年7月までの例文では、
県境は、shapereader.natural.earth で、
(最初の実行時にネット接続して Natural Earth のサイトから、
次回からは保存ずみのところから)データを読みこみ、
ShapelyFeature で feature を定義して、
add_feature で作図していた。
増田の実行環境では (Windows でも Linux でも) 県境の線がひかれるのだが、
他の人の実行環境ではひかれないことがあった。
理由はよくわからないが、
実行時のネットワーク接続の状況か、
ディスクのディレクトリ (フォルダ) の書きこみ権限がどうなっているかによるのだと思う。
- 対策 (2022-08-03)
- 「Natural Earth」のデータ (shapefile) をあらかじめダウンロードして
日本の県境を抽出しておいて、それを読んで作図するプログラムにする。
[日本の都道府県境をかく (たぶん改良) / 中国の「省」の境をかく]
のページで説明した。
- 注 (2022-09-21)
- shapefile があって、読まれているようだが、そこでエラーでとまってしまうことがある。
そのうちには、shapefile の内容がこわれていてエラーになったもので、
shapefile を入れなおせば正常になるばあいもある。
Cartopy で 海岸線が出ない (2022-09-21, 2023-11-01)
- 症状
- Cartopy の coastlines による海岸線と、contourf で データの数値によるぬりわけをかさねて
かこうとしたら、ぬりわけだけができて、海岸線が見えない (黒い線がひかれるはずのところが白いまま)。
同様に、県境をひこうとしたが見えない。
- 推測された原因
- 海岸線をひいているが、そのあとそこを contourf で何かの色 (白のこともある) でぬりつぶされて
見えなくなっている。
- 対策 1
- プログラム中の実行順序をいれかえて、
さきにぬりわけをおこない、そのあとで海岸線 (や、県境) をかく。
【[2023-11-01] これではうまくいかないことがある。】
- 対策 2 [2023-11-01 追加]
- contourf の alpha というパラメータを指定する。たとえば contourf(lon, lat, level, alpha=0.5, ...) とする。
alpha の値が 0 だと透明、1 だと完全に不透明になる。
- 注
- まえにやったときは見えていたが、Anaconda のうちの何かのソフトウェアをアップデートしたら
見えなくなった、ということがあるようだ。
図形がかさなりあったときどちらが優先されるかは、ソフトウェア (おそらく matplotlib) の
こまかいバージョンのちがいによって動作がちがうのかもしれない。
contourf で levels の範囲の外の数値のために指定した色がつかわれない (2022-07-16)
- 症状
- contourf で、levels の範囲の外の数値のために、
cmap.set_under(), cmap.set_over() で色を指定しているのだが、
その色が地図ぬりわけにつかわれない。(カラーバーにはつかわれる。)
- 原因について
- 上記の症状がおきたのは、Cartopy 0.19, matplotlib 3.5.1 で実行したばあいで、
それよりも古いバージョン (番号未確認) で実行したときは、set_under, set_over で指定した色が
つかわれていた。
ウェブ上にある matplotlib 3.5.2 の contourf のドキュメントをみると、
colors と cmap の指定は共存できないと書いてあるので、
colors を指定すると cmap を見ないようになってしまったのだろう。
- 当面の対策、注意
- levels の範囲をひろげて、set_under, set_over で指定していた色も
colors にふくめるようにする。
[COBE SST] の例文プログラムはそのようにしているが、
増田がそれよりまえにつくった例文プログラム (解析雨量の地図表示など) は set_under, set_over が有効であることを
前提としているものが多いので、matplotlib の新しいバージョンをつかうばあいは
同様な変更が必要だろう。
Windows で Spyder がうごかない (起動しない) (2022-07-17)
いろいろな原因がありうるが、ある事例ではつぎのように解決した。
ユーザーのホームディレクトリ (Windows ではふつうそう言わないがそれにあたるところ) の下に、
Spyderが実行されると 「.spyder-py3」 (最初の字はピリオド) というディレクトリができている。
それを (前回までの設定をひきつぐ必要がないと判断して) からにしたら、Spyderが起動できるようになった。
(まえに異常終了したか強制終了させたときの状態の記憶がのこっていて、
起動の際にそれをひきつごうとしてうまくいかなかったのだろうと思う。)
Windows で Anaconda のアンインストール、再インストールがすすまない (2022-07-17)
試行錯誤で解決したので、明確なこたえはないが、つぎのような注意点がある。
- Anaconda は、展開すると 何ギガバイトもあるので、インストールにもアンインストールにも
かなりの時間がかかる。進行表示で とまっているように見えても、動作はつづいていることもある。
また、インストールやアンインストールのプログラムは Python のスクリプトをよびだすので、
コマンドプロンプトの黒い画面が見えることがたびたびある。
- 標準的なインストールさきは、ユーザーのホームディレクトリの下の「anaconda3」である。
このディレクトリが から であることが要求される。
再インストールのとき、もし から でなかったら、中のファイルを削除して、から にしておく。
- Anaconda のプログラム (インストールやアンインストールをふくむ) が異常終了したり
強制終了させたとき、そこから起動されたプロセスが動作をつづけていて、つぎにはじめた作業に干渉することがある。
(たとえば、anaconda3 のディレクトリを から にしようとしたら、インストールが とまっておらず、ファイルがふえつづけていた。)
それを とめるには、Windowsの「タスクマネジャー」 (Windows 10 の通常の画面ならば下側の黒いふちを右クリックすると選択できるはず) を
起動し、「プロセス」のうちに「conda」や「Python」があったら、それを選択して「タスクの終了」をする。
図に表示したはずの一部分の要素が出ない。または、複数の画面にわかれて出てしまう。 (2022-07-26)
(対処した個別事例にそって書いたので、一般的記述でないところがあります。)
matplotlib では、pyplot (ふつう plt. としてつかう) の関数をつかう方法と、
Figure と Axes をつかう (ふつう fig, ax とする) 方法がある。
両者をまぜてしまうと、うまくいかないことがある。
「ax.」をおもにつかっているばあい、
plt.show などは plt でよいが、plot などは plt.plot でなく ax.plot にしたほうがよいかもしれない。
plt.title は ax.set_title のようにおきかえる。xlabel, ylabel も同様。
Axes の変数名は ax とはかぎらない。例文によってはたとえば ax1 かもしれない。
ax と ax1 をまぜてつかうと、別々の図にわかれてしまうことがある。
変数名をどちらかに統一するべきである。
Cartopy で地図上の地点の位置に記号や文字を表示しようとしたのだが出ない。(2022-09-06)
- 症状
- Cartopy を「ax=plt.axes(projection=ccrs.PlateCarree())」
のような形で利用開始して、
地図上の位置を経度・緯度で指定して
「ax.plot(lon, lat, 'o')」によって〇印をかいたり、
「ax.text(lon, lat, 'xxxxxx')」 によって xxxxxx という文字列をかいたりしようとしたが、
表示されない。
- 対策
- plot や text の「 ( ) 」の中に「, transform=ccrs.PlateCarree()」を追加する。
- 注
- わたしのプログラム例には、transform を指定していないが、記号や文字が表示できているものも多い。
どのようなときに transform を指定する必要があるのか、まだ確認できていない。
図のなかの日本語文字 (漢字、かな) が文字化けする (2022-09-18)
matplotlib で 図 に 日本語文字をかくには、フォントを指定する必要がある。
MS Windows のばあいのやりかたは、別ページ
[日本語文字を表示する (メモ)] に書いた。
Linux そのほかの OS でのやりかたは、わたしにはまだわからない。
ブラウザで、プログラム例・データ例などの日本語が文字化けする (2022-08-18)
MS Windows 日本語版ではこれまで日本語文字コードとして Shift_JIS がつかわれてきた。
気象庁ウェブサイトからダウンロードした CSV ファイルも、日本語文字コードは Shift_JIS
(あるいはそれをマイクロソフト社が拡張した cp932) である。
しかし、Python (version 3) では 文字コード UTF-8 を標準としている。
そこでわたしの Python によるプログラム例に、文字の値やコメントとしてふくまれた
日本語の文字コードは UTF-8 にしている。
ちかごろのウェブブラウザは、HTMLページの文字コードはかなりよく自動判定するが、
テキストファイルの文字コードは判定をまちがえることが多い。
読む側での対策
- 対策 1
- ブラウザの表示のオプションに、
文字コード (charset と書かれていることもある) を選択するものがあれば、
それをつかって、Shift_JIS と UTF-8 をきりかえる。
- 対策 2
- ブラウザの表示のオプションで、
「テキストエンコーディングを修復」 (これは Firefox のばあい) のような機能が有効に
なっていれば、それをつかってみる。
- 対策 3
- ちかごろの Microsoft Edge では、インストールしたままの状態では
文字コードセットをきりかえる機能がない。
「拡張機能」として「Charset」を追加すればきりかえられるようになる。
つぎのページを参照。
neg (2021-08-20, 更新 2022-05-23):
「Google Chrome, Microsoft Edge で明示的にエンコーディングを指定して表示する (Windows Tips)」.
https://www.ipentec.com/document/windows-google-chrome-microsoft-edge-explicitly-specify-encoding
[2022-08-18 閲覧]
- 対策 4
- ブラウザの設定で、ファイルの拡張子とプログラムの関係づけをして、
たとえば、拡張子「.py」のファイルは、ブラウザではなく、
UTF-8 を確実に読めるプログラムで開くようにする。
たとえばわたしは、Firefox の「設定」の「ファイルとプログラム」のところで、
拡張子「.py」のファイルを「サクラエディタ」に関連づけている。
書く側での対策 (2023-01-24 追加)
Python プログラムのばあい
Pythonのプログラムのはじめのあたりにコメントとして、つぎのような行を入れると、
その約束を理解するソフトウェア (ブラウザ、エディタなど) では
そこに書かれた文字コードを想定して読みこむ。
# -*- coding: utf-8 -*-
つぎの形でよいばあいもある。
# coding: utf-8
HTML (ウェブページ記述言語) のばあい
<head> と </head> のあいだに、つぎのような記述を入れる。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
(増田がつくるウェブページはすでに原則としてこのようにしている。
ただし、文字コードがちがうもの (たとえば euc-jp) になっていることもある。)
Python で、読むべきファイルが存在するかしないかで処理をわけたい (2022-08-18)
- 対策
- os パッケージの os.path.exists() を利用する。
たとえば、変数 filename の値であたえられたファイル名のファイルがあればそれを読み、
なければ何もしないでよいならば、ファイルを読む部分を
「if os.path.exists(filename):」 の下に入れる。
- 対策の情報源
- TATSUO IKURA (2022-04-11)
「ファイルやディレクトリの存在を確認する」
https://www.javadrive.jp/python/file/index7.html [2022-08-18 閲覧]
Spyder がアップデートせよという (Windows上のAnaconda3) (2022-08-31)
- 症状
- Spyder を起動すると、アップデートせよというメッセージが出る。
(それを無視すれば Spyderの実行はできるが。)
- 症状 つづき
- アップデートせよというメッセージのさきをみると、つぎのコマンドを実行せよとある。
「conda update anaconda」「conda install spyder=5.2.2」
- 対策
- Anaconda Powershell Prompt から conda コマンドを実行することができるので、
そこで上記のとおり実行すればアップデートできるだろう。
- のこる問題点
- 実際にやってみると、インストールされているAnacondaのバージョンに対応する
指定されたバージョンのプログラムがネット上にみつからないので、
アップデートできない、という結果になることもある。
(Anacondaのバージョンが古くても、Spyderは最新版への更新をよびかけるらしい。)
Python の標準出力で書きだしたファイルを読むときにエラーになる (2022-09-03, 2022-11-23 改訂)
- 症状
- Python のプログラム (例、x.py) の標準出力を、
「python x.py > x_out.txt」のように リダイレクト (redirect) して
テキストファイル x_out.txt をつくる。
別のプログラムで x_out.txt を読もうとすると、書きだしたはずの項目が見あたらない。
あるいは、文字化けしている。
- 原因
- ファイルの文字コードをしらべたら、UTF-16 だった。
Python の標準出力でつくられるファイルの文字コードは、
データがすべて 1バイトの ASCII コードでかける
アルファベットや数字ならば、ASCII になるが、
そうでない日本語文字などをふくむばあい、
Anaconda Powershell Prompt での標準出力は、UTF-16 になるようだ。
これを UTF-8 あるいは Shift_JIS などで書きだすように変更する方法は、わたしは見つけていない。
なお、Windows コマンドプロンプトでの標準出力は、UTF-8 になるようだが、
まだよく確認していない。
- 対策 1
- うまく読めないファイルを、UTF-16を自動判定できるエディタ
(Windows 上ならば たとえば「サクラエディタ」) に
読みこみ、文字コード UTF-8 (あるいは Shift_JIS) を指定して書きだす。
もし内容が日本語文字をふくまず ASCII文字だけをふくむものならば、
Latin-1 (「ISO-8859-1」と書かれるばあいもある) を指定して書きだせば
ASCII テキストになるので、そのほうがよいだろう。
- 対策 2
- x_out.txt を読むプログラムが pandas の read_table や read_csv ならば、
その呼び出しに「encoding='utf-16'」のオプションをつければ読めるはず。
(わたしはまだためしていない。)
Anaconda Powershell Prompt で python コマンドが見つからない (2022-11-23)
Windows 上で Python プログラム (例、a.py) を実行する方法として、わたしは
Anaconda Powershell Prompt で、a.py のあるディレクトリに cd しておいて
「python a.py」で実行することをすすめている。
(注意: コマンド名は「python3」ではない。Python バージョン3 対応の Anaconda
ならば、python というコマンド名で Python バージョン 3 が動く。)
ところが、python というコマンドが見つからないというエラーになることがある。
Anaconda をインストールするときに、
Anaconda のコマンドを Windows の コマンドパスに追加するか、という意味の問いがあって、
「しない」を選択するとそうなってしまうようだ。
- 対策 1
- Anaconda Navigator を起動して、その中から「Powershell Prompt」の「Launch」を
実行すれば、Powershell Prompt の中で python コマンドをつかうことができる。
- 対策 2
- Windows のコマンドパスを修正する。
Anaconda の python.exe があるところは、ふつうにインストールすると、「c:\Users\ホームディレクトリ名\anaconda3」である。
これを Windows のコマンドパスに追加する。
- Windowsの「設定」から[システム]- (Windows 10ならば)[詳細情報]、 (Windows 11ならば) [バージョン情報] を開く。
- そのうちの「システムの詳細設定」を選択、「システムのプロパティ」を開く。
- その「詳細設定」のタブの右下にあるに「環境変数」を開く。
- 「環境変数」画面の上側に「ユーザの環境変数」、下に「システム環境変数」があり、両方に「Path」がある。
コンピュータ内で他のユーザーにも適用したかったら「システム」側、自分だけでよければ「ユーザ」側の
「Path」を選択して「編集」を開く
- 空行のところに 「c:\Users\ホームディレクトリ名\anaconda3」 を追加する (ホームディレクトリ名は自分のパソコンのものにする)。そして「OK」。
- 対策 2 の情報源
- @IT [Tech Tips] デジタルアドバンテージ 著
【Windows 11対応】Path環境変数を設定/編集して、独自のコマンドを実行可能にする
2021年12月15日 05時00分 公開
https://atmarkit.itmedia.co.jp/ait/articles/1805/11/news035.html [2022-11-24 閲覧]
Python でつくった図の画素があらすぎる (2023-02-15, 2023-04-30 追記)
- 症状
- Python の matplotlib をつかってつくった図を画像ファイル出力して、
拡大してつかおうとしたら、文字や線が正方形の画素に分解されて見えてしまう。
- 背景説明
- PNG などの画像ファイルは、縦横にそれぞれ一定数の画素が長方形型にならんだ形になっている。
matplotlib では figure() で、紙に出力することを想定して、紙面の大きさと紙の上の長さあたりの画素数を指定している。
アメリカ合衆国にいる人が国際単位系(SI)と関係なくきめたので、長さの単位はインチ (2.54 cm) である。
figure() の デフォルト値 (かっこ内に何も指定しないばあいに採用される値) は、
「figure(figsize=(6.4,4.8), dpi=100)」、つまり、横 6.4 インチ、縦 4.8インチ、画素の1辺は 100分の1インチである。
- 対策 1
- figure の dpi の値を変更する。
たとえば、figure(dpi=200) とすると、
紙面の大きさはかわらず、その中の図の要素の配置もかわらず、
画素数が、縦横それぞれ2倍になり、図形や文字が精密になる。
- 対策 2
- figure の figsize の値を変更する。
たとえば、figure(figsize=(12.8,9.6)) とすると、紙面の大きさが縦横それぞれ2倍になり、
それにともなって、画素数が縦横それぞれ2倍になる。
図が大きくなっても文字の大きさは変わらないので、図に相対的に文字が小さくなる。
図に相対的な文字の大きさを変えたくないときは、
文字をかくそれぞれの手つづきで、たとえばつぎのように、
文字の大きさを指定する必要がある (数値は単なる例)。
- ax.set_xticklabels(xticks, fontsize=14)
- ax.set_title('表題文字列', fontsize=24)
- cb.ax.tick_params(labelsize=16) 【cb = fig.colorbar(...) のあとで】
- 補足
- figsize を、長さの単位として cm あるいは画素(ピクセル)数をつかって指定したいときは、つぎのようにするとよい。
[2023-04-30 追記。 2023-04-26 の追記はまちがっていたので書きなおした。]
- 「cm = 1/2.54」として cm という変数とその値をきめたうえで
「figsize(16*cm, 12*cm)」のようにする。
- 「px = 1/plt.rcParams['figure.dpi']」として px という変数とその値をきめたうえで
「figsize(640*px, 480*px)」のようにする。
- 補足の情報源
- The Matplotlib development team, 2012-2023:
Figure size in different units
https://matplotlib.org/stable/gallery/subplots_axes_and_figures/figure_size_units.html [2023-04-30 閲覧]
気象庁からダウンロードしたCSVファイルを増田のプログラムで作図した結果が意外な値になる (2024-07-12)
- 症状
- 気象庁の「過去の地点気象データ ダウンロード」のサイトからダウンロードしたCSVファイルを、
増田がつくったプログラム例とほぼ同じプログラムで作図すると、
表示される数値が変である。(たとえば、0 か 1 か 8 ばかりがならんでいる。)
- 直接の原因
- CSVファイルの列が、想定された気象要素と対応していない。
(0 か 1 か 8 になるばあいは、品質情報の列を観測値としてあつかっている。)
- 2024年5~6月ごろ以後ありうる原因
- 気象庁ウェブサイトから、前回と同じ気象要素・地点の組でダウンロードしたばあいに
つくられるCSVファイルの気象要素の順序が、前回とちがうことが生じている。
たとえば、「気温、降水量、日照時間」をダウンロードすると、
2024年4月ごろ以前はこの順序だったが、2024年5~6月ごろのある時点から、
日照時間がさきになった。
増田のプログラム例は、2022年度以後、地点の順序がかわることに対応したが、
気象要素の順序がかわることにはまだ対応していない。
- 対策 1
- ダウンロードされたCSVファイルの最初の数行を見て、気象要素の順序を確認し、
それにあわせてプログラムを書きかえる。
気象庁サイトが順序をかえた前後の両方のデータがあるばあいは、
それぞれ用のプログラムを用意したほうがよいだろう。
増田のプログラム例のうち、2023年8月以後2024年6月までの mapamedas ではじまるものならば、
jcolstn と jcolame という 2つのリスト (tuple のこともある) の内容を書きかえればよい。
その他のものは、if の条件判断に jcol をふくむところ (複数回ある) を、内容を考えて書きなおす必要がある。
- 対策 2
- プログラムを、まず CSVファイルの最初の数行を読んで、
(列番号と地点の関係のリストをつくっているのと同様に)
列番号と気象要素の関係のリストをつくり、
それをつかうように書きかえる。
(プログラムがいくらか複雑になる。増田は作業する予定がない。)
- 対策 3
- ダウンロードしたCSVファイルをそのままつかって作図するのをあきらめ、
まず、ユーザー側できめた順序にならべかえたデータファイルをつくり、
それを読んで作図するようにする。
(増田の2024年7月以後のプログラム例はこの方針でいく予定。)
気象庁からダウンロードしたCSVファイルを増田のプログラムで作図したグラフが変なものになる (2024-07-12)
- 症状
- 増田のプログラム例で時系列グラフをつくると、
結果が変になる。たとえば、軸の上限下限を自動できめさせると、その気象要素としてありえない値になる。
- 原因
- 増田のグラフ作成プログラムは、観測データの品質情報を見ていないことがある。
とくに、プログラムのファイル名が「graph」ではじまり途中に「v1」という文字列があるものは、
品質情報をみていないことを自覚してつくったものであり、
データ欠損があってもたまたまその位置にはいっていた値をつかってしまう。
- 対策
- データ欠損の判断をふくむグラフ作成のプログラム例をつくることができたので、
2024年7月以後の例文はそのようにする。旧記事の例文もできるところは書きかえていく予定。
サーバーにログインできない。サーバーがとまっているようだ。(2024-07-12)
- 症状
- 2024年7月11日、TeraTermで niigata に接続しても、
応答がなく、ログインにすすめないことがあった。
-
- サーバーの動作状況
- 2024年7月11日夕方、niigata サーバーのコンソールが暗いままで何も表示されず、
キーボード入力しても応答がなかったので、増田が強制再起動した。
- 2024年7月11日夜から12日朝、
niigata サーバーは、人が何もしないあいだに再起動をたびたびくりかえした。
しかし、12日昼間に増田がログインして作業しているあいだは平常どおり動作している。
- 推測される原因
- OSアップデートに関連する再起動をしている。
(OSの自動アップデートはしない設定にしたはずだが。)
- 対策 1
- OSアップデートのすすめがきたときは、長い期間 保留にしておくことはさけて、
なるべく早く実行するか見送るかの判断をする。
- 対策 2
- 増田が可能なかぎりログインして動作をモニターする。
(ただし常時ログインは不可能。
自動モニターして異常を通報するようなしくみをつくる技術はもっていない。)
- 対策 3
- niigataサーバーの致命的故障にそなえて、
セミナーの実習などは他のマシン (hamana を予定) でもやれるようにしておく。
2021-06-22 .. 2024-07-12
増田 耕一 (MASUDA Kooiti)