Make it possible with Python.

最近Pythonから離れ気味、その他物作りに寄り気味です。

heroku で プロンプトからSSH-key 生成ができないので、全部GUIから実施した。

herokuの使い方を学び中。

PaaSやサーバーの知識皆無のため、一番シンプルな以下のチュートリアルから実施した。 https://devcenter.heroku.com/articles/getting-started-with-python

もちろんこれでも問題多発。

heroku初回ログイン後のSSH Key生成でエラー発生。

Could not find an existing public key.
Would you like to generate one? [Yn] Y
Generating new SSH public key.
 !    Could not generate key: 'ssh-keygen' は、内部コマンドまたは外部コマン
 !    操作可能なプログラムまたはバッチ ファイルとして認識されていません。

以下サイトを参考に、環境変数を作成してもダメ。念のためコマンドプロンプトやPCを再起動してもダメ。

herokuの初回ログイン時にキーが作れなかった時のメモ - Qiita

SSH Key生成はインストールしたSourcetreeでできそうなので、それでキーを作成。

SourceTree 設定手順 覚書【Windows】 - Qiita

さらに、作成したPublic keyを herokuのwebサイトからコピペで登録した。

これで行けるはず・・・?

※その他参考サイト Heroku で Flask + SQLAlchemy を使う - Twisted Mind

pythonは確かに簡単な言語だけど、webアプリとか、言語以外のいろいろなものが絡み合う使い方を求めると、結局かなり複雑になるんですね。

Python仮想環境virtualenvをPyscripterに適用する方法

Webサービスを作るためには、依存関係によるトラブルを防ぐために各アプリを仮想環境で作る必要があるらしい。

ということで、virtualenvを pipからインストールして、仮想環境を作ってみました。

が、ここから先が地獄でした。

仮想環境をactivateしても、SpyderやpyscripterなどのIDEで、それが適用されない。。

そして、この件に関する情報が日本語サイトに殆どない・・・・・・。

Pythonに日本語情報が少ないというのはよくきいていましたが、こういう、ちょっと深いところをやろうとすると、とたんに情報が少なくなるということなんですね。

結局、Spyderに適用することはあきらめ、Pyscripterについては、 以下のバッチファイルによりvirtualenvのactivateとPyscripterを行うことで、なんとか実現できました。

CALL W:\bin\v_env\Scripts\activate.bat
SET PYTHONHOME=%VIRTUAL_ENV%
"W:\Application_settings\PyScripter\PyScripter.exe" --PYTHON27 --PYTHONDLLPATH "C:\Windows\SysWOW64" %1 %2 %3 %4 %5

仕組みはわかっていないので、どなたか教えていただけると嬉しいです。

参考URL: FAQ - pyscripter - An open-source Python Integrated Development Environment (IDE) - Google Project Hosting

念のためコメント欄より転載。

How do I use PyScripter with virtualenv? There's a problem if you use PyScripter with the remote python engine in a virutalenv environment. On Microsoft Windows, if ENV is your virtual python environment (created with 'python virtualenv.py ENV'), then after switching to this environment, the python.exe executable is located in C:\Python27\ENV\Scripts. (Or whatever your Python version and installation directory is) However, PyScripter expects it to be in C:\Python27\ENV. You can use this workaround: Create a symbolic link from C:\Python27\ENV\python.exe to C:\Python27\ENV\Scripts\python.exe . On Windows Vista or 7, you may use the mklink command to do this:

mklink C:\Python27\ENV\python.exe C:\Python27\ENV\Scripts\python.exe 

(you'll need administrator privilleges to do this). Start PyScripter via a batch file with the following commands:

CALL C:\Python27\ENV\Scripts\activate.bat SET PYTHONHOME=%VIRTUAL_ENV% START project.psproj

The first line activates the virtual environment ENV. The second line sets the PYTHONHOME environment variable to the one defined by virtualenv, i.e. 'C:\Python27\ENV'. This is that Python finds all libraries specific to that environment. The last line starts PyScripter via a project file. You might as well call PyScripter.exe directly. Versions tested: Python 2.7.3 PyScripter 2.5.3.0 x86 virtualenv 1.8.2 on Windows 7 (32 bit)

Python勉強記録 サーバー確保とgitについて

Webサービスをアップするためのサーバー選びなどについて調べてみたので、メモ。 知らないことだらけで混乱しつつ、進んではいるはず。

Webサービスを公開するサーバーは、PaaSのheroku

herokuとさくらVPSを候補に絞り、比較しました。 以下の理由から、まずは、herokuにしました。 herokuのさくらVPSに対する比較。

Pros

  • 覚える知識量が少なくて済む。
  • 罠にかからなければ無料

Cons

  • 機能に制約があるらしい。
  • 海外サーバーなので遅い。
  • Linux全般の知識が余り身につかない?

知っておきたい!Herokuを使う上では当たり前?の16の常識 | mah365

herokuに独自ドメイン当ててホスティングっぽく使ってみる│でろぐ

herokuでPythonに慣れたら、必要に応じてさくらVPSか、業界標準と噂のAWSに移動しようと思います。

herokuを利用するためにはgit使用が必要?

という話を読んだので、Windows用GUI gitクライアントのSourceTreeをインストールしました。

gitについても概念と、作業の一通りの流れを知りました。

簡単なコードを1人で作るだけなので、メリットはあまりない気もしますが、、早く実作業で使ってみたいです。

Gitを使ったバージョン管理【Gitの基本】 | サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ

サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ

SourceTree for WindowsからGitを利用する (1/3):CodeZine

gitホスティングサービスはBitBucket

gitはシステムの名称で、githubはそれを利用したホスティングサービスらしいですね。 ただ、githubは無料アカウントだとローカルレポジトリを作成できず、ソースコードを非公開にできないそうなので、githubなみに有名らしいBitBucketにしました。

Gitホスティングサービス5選【比較表付き】 | Find Job ! Startup

GitHubとBitbucketの比較:Webデザイナーの業務にはBitbucketが向いている | Internet | ウェビンブログ

しゅんたっくの開発日誌: 私がリモートリポジトリとしてgithubではなくbitbucketを使う6つの理由

Python勉強記録 進め方と Pandasによるデータ処理...

私ははPythonの勉強のため、簡単なプログラムを作ろうとしています。 今作ろうとしているのは、データを集めて、それを元に予測値を出すプログラムです。

こんな流れで一から勉強しながら作業中。

1.データ収集

2.データ整形(?)

3.手動(まずはExcel)でデータ分析・予測式作成

4.上記データ収集、整形、分析、予測のPythonによる自動化

5.Web上で誰でもアクセスできるように

現在は2の途中。

分析したいデータは集まって、整形も目処がついてきました。

ここから先、どこまでPythonでやって、どこからExcelでやればいいのか迷ったので、少し前に買ったこの本を読んでみました。

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

この本で扱うのは以下のライブラリということです。

  • NumPy ・・・ 高速な数値計算用?
  • pandas ・・・ データ構造と、それを扱うための関数?
  • matplotlib ・・・ データ可視化、グラフ描画用
  • IPython ・・・ よくわからない。「全てを結びつけるツール」とのこと
  • SciPy ・・・ NumPyより複雑な科学計算用?

今回知りたいのは、Excelにデータを渡すまでなので、Pandasについて読んでみました。

結果、Pandasでデータを整えてからExcelに渡すことに決めました。

理由は、例えばこんなことがそれぞれ1行のコードでできるらしいため。

  • データ欠けに文字列や平均値などを代入できる。(.fillna メソッド)
  • 空データなど、任意の値が入った点に別の値を代入できる(ブールインデックス参照)

他にもやりたい処理がいろいろ入ってそうな雰囲気があります。

いままで、上記のライブラリについて、「データ解析が早くて楽にできるらしい」という漠然としたイメージしかありませんでしたが、こんなことができるんですね。 

コードを書くこと自体に慣れないうちは便利な関数やメソッドに頼らず、一つ一つ手で書いた方がいいのか、悩みましたが、少しでもコードが短くなることを目指した方がいい気がするので、Pandasを使ってみます。

forループでリストの中身を書き換える方法 Python勉強記録

やりたいこと

リストに含まれる値のうち、条件に適合するものだけを書き換える。

間違った方法

以下のような単純なforループでは実現できない。

line = "sdf2as23d"

chars = list(line)

chars_time =

for char in chars:

    if char == str(2):
        char = 5

手元の本、"初めてのPython" によると、 forループの中で char の部分を書き換えても、それはcharsの要素を書き換えたわけではないと書かれている。 代わりに、以下の方法が望ましい方法として示されていた。

正しい方法

range(len(chars)) で、繰り返し回数を指定して、書き換えたい変数のインデックスを順に辿るforループを回すことで実現できる。

line = "sdf2as23d"

chars = list(line)

for i in range(len(chars)):

    if chars[i] == str(2):
        chars[i] = 5

いつもはwebで軽く検索する方が早く解決できるんだけど、はじめてこの本が役立った。

初めてのPython 第3版

初めてのPython 第3版

Python勉強記録 20140415

1つのスクリプトを書く中で、わからないことが毎回山ほど出てくる・・・。

でも、力業でバグ回避はできるようになった。時間さえあれば動くコードが作れる。

時間を書ければ作れるので、仕事効率化に使えるようになった。

ただしコード改善の時間がないので、わからないことは週末に調べられるようにメモ。

やったこと

サブフォルダ含めある命名規則を持つCSVファイル数百個を読み込んで、ファイル名ごとに、 中の特定列を別のシートにコピペするスクリプト。

学んだこと

  • glob.glob('/.csv') でサブフォルダ内全ファイル。[]などワイルドカードもいくつか使える。

  • str[10:15] で文字の一部を抜き出せる。

  • リストをCSVにしたければ、とりあえずこれを書けばいい。入れ子だったらこれをforで繰り返す。

        output_csv.write(",".join(list))
        
        output_csv.write("\n")

解決すべきこと

  • csvモジュールでネストされたリストの保存の仕方がわからない  csv.writeの意義がわからない。

  • 関数から、global変数を呼ばずに複数の変数を書き換える方法(複数のreturnを返す方法?)がわからない

  • Spyder内で日本語の文字化け。

  • 日本語を含むデータの文字コードの扱い。"rb"とかcodecsとか"cp932"とかどういうときに必要?

  • バグの確認の仕方。極値や境界の条件を確認するといい?

  • 開いたCSVオブジェクトについてforループを回す処理を、さらにforループすると2回目にオブジェクトが空になる?  ファイルオブジェクトから一度閉じて開き直したら回せたので、今は同じコートが2回書いてある・・・。

誰かヒントなどくれると嬉しいです。

Webで見つけたPython2の教科書的なもの

いろいろ調べる中で、読み物として初心者でもわかりやすく、役に立ちそうな資料は以下の2つ。

iPadに入れて、布団と電車の中で読んでます。

Pythonによるプログラム入門 (PDF):有澤健治教授(愛知大学)

M.Hiroi's Home Page / Lightweight Language

とてもありがたいです。