ラベル python3 の投稿を表示しています。 すべての投稿を表示
ラベル python3 の投稿を表示しています。 すべての投稿を表示

2019/04/16

pythonでのFTPでのアップロード、ダウンロード


pythonでFTPを使うには、ftplibをimportすればよい。標準で入っているのでpipなどはする必要がない。

下記の関数では、対象ファイルをバイナリ転送モードにアップロード、ダウンロードとも合わせることで、あげたファイルをそのまま落とすことができるようにしている。'rb'とかstorlinesretrbinaryあたりを合わせるのがポイント。

サンプルとして関数を作ってみた。ローカルにあるテキストファイル"tmp.csv"をアップロードして、サーバーに"test.csv"という名前のファイルで保存される。

(アップロード)
file_name = "test.csv" # サーバーアップロード先でのファイル名
local_file_name = "tmp.csv" # アップロー元のローカルのファイル名

ftp_upload(hostname, username, password, source_path,file_name, server_path,local_file_name)

これをサイドダウンロードすると元どおりになる。

(ダウンロード)
ftp_download(hostname, username, password, source_path,file_name, server_path,local_file_name)

こちらがアップロードとダウンロードの関数。
import ftplib

#---------
hostname = "xxxx" # 接続先サーバーのホスト名
source_path = "xxxx" # アップロード元のパス
server_path = "./xxxx/" # アップロード先のパス
username = "xxxx" # サーバーのユーザー名
password = "xxxx" # サーバーのログインパスワード
#---------


def ftp_upload(hostname, username, password, source_path,file_name, server_path,local_file_name):
    with ftplib.FTP() as ftp:
        try:
            ftp.connect(hostname)   # 接続
            ftp.login(username, password) # ログイン
            ftp.cwd(server_path)        # 指定パスに移動
            with open(source_path + local_file_name, 'rb') as fp:
                ftp.storlines('STOR ' + file_name, fp) 
        except ftplib.all_errors as e:
            print('FTP error = %s' % e)
        #else:
            #print('FTP success.')
            

#ダウンロード
def ftp_download(hostname, username, password, source_path,file_name, server_path,local_file_name):
    with ftplib.FTP() as ftp:
        try:
            ftp.connect(hostname)   # 接続
            ftp.login(username, password) # ログイン
            ftp.cwd(server_path)        # 指定パスに移動
            with open(source_path + local_file_name, 'wb') as fp:
                ftp.retrbinary('RETR ' + file_name, fp.write) 
        except ftplib.all_errors as e:
            print('FTP error = %s' % e)
        #else:
            #print('FTP success.')

(関連コンテンツ)

2019/04/09

python入門。Courseraディープラーニングコースの解説。

Courseraのディープラーニングコースとは。

動画の視聴とテストからなるDeep Learningの5講座。入門的内容なので数学的な背景があまりなくても動画を見れば、ある程度理解ができる。テストでは内容の理解を助ける選択問題の他、pyhtonを使った演習がある。コースの修了には課金が必要だが、修了証がでる。


役立つpythonのトピック

まずは、最入門ということで、 Neural Networks and Deep Learning から。
便利なことにjupyter notebookというWeb上で動くpythonがあるので、インストールなど当面考えなくても使える。書籍などを読むとMACやWindowsにインストールして使う方法が解説しているが、環境の立ち上げで迷わなくて済むのは初心者にとってpyhtonのいいところ。

その1 axisの指定

例えば、行列の縦方向に割合を求めたい場合などに使える。 axis=0の指定は行列の縦(列)方向に足す。
なお、axis=1は横(行)方向に足すことになる。
import numpy as np A = np.array([[56.0,0.0,4.4,68.0], [1.2,104.0,52.0,8.0], [1.8,135.0,99.0,0.9] ]) cal=A.sum(axis=0) #axis=0 は縦を足す #axis=1 は横に足す percentage = 100 * A / cal.reshape(1,4) print('行列') print(A) print('カロリー',cal) print('パーセント',percentage)

その2 行列の指定方法

Pyhtonに限らず、ディープラーニングやAI、機械学習では物事を行列に置き換えてガシガシ計算を回して最適解に近づくようにしている。(これが夢のような世界の正体だ。)いわゆるFor文と違って、行列の計算は速く行うことができる。この行列計算を確かなものをするのがpythonの肝になる。
pythonでプログラムする上で、最初に知るべきなのは、配列が持つ次元数(ランク)の概念だ。 pythonで配列を作ると1行や1列の配列を作る時には注意が必要だ。
import numpy as np # a note on python/ numpy vectors a = np.random.randn(5) print(a) print(a.shape) #(5,) -> rank1 array と呼ばれる。 #行ベクトルでも列ベクトルでもない print(a.T) print(np.dot(a,a.T)) #外積ではなく、1つの値が返ってくる。
shapeを表示した時にでる、'(5,)'。これが曲者だ。 ランク1の配列と呼ばれるもので、行ベクトルでも列ベクトルでもない。なので、この指定をすると外積が計算出来ない。
ちなみに、ランク0は1つの数値で示される定数や変数で表されるスカラーを指す。
ではどうすればいいのかというと、配列を二次元(ランク2)できちんと指定してやる。
a = np.random.randn(5,1) #column vector a = np.random.randn(1,5) #row vector print(a) print(a.T)
この場合のaの出力にはブラケットが2つ(’[[’)ある。
[[0.18932994 0.4821708 0.77581062 0.23628661 0.15776551]]
後は、assert文を一々入れることも有効だそうだ。
a = np.random.randn(5) #a=a.reshape(5,1) assert(a.shape==(5,1)) print(a) #AssertionError:

2018/12/17

python jupyter notebookでコードが長くなった時に改行する方法(MAC)


Pythonの「jupyter notebook」でコード入力画面上で改行したい場合は下記のように、バックスラッシュ(\)を入れます。


option +(バックスラッシュ:¥の記号が出るキー)


1行が長くなるとコードの入力画面が横にスクロールするします。Pythonの「jupyter notebook」を使っていると、実行の結果がすぐに見えるので、どんどんコードを書き進めますが、内容を詰め込みすぎると1行が異常に長くなることがあります。

例えば、下記のような感じでコードを書くと「,」のところで改行したくなります。

history = model.fit(npdata_train_mor,npdata_train_t,epochs=1000,batch_size=10, validation_data=(npdata_test_mor,npdata_test_t),callbacks=[early_stopping])


そのような時には、下記のように書きます。

history = model.fit(npdata_train_mor,npdata_train_t,epochs=1000,batch_size=10\
                    , validation_data=(npdata_test_mor,npdata_test_t),\
                    callbacks=[early_stopping])


毎回迷うのでメモしておきます。MACです。Windowsで探している方は、バックスラッシュ(\)をコピーして貼り付けてください。英語キーボードだとoption + \(¥)になります。

いつも疑問に思うのはなぜスラッシュやエンマーク(¥)は素直に出るのに、バックスラッシュ(逆斜線)はoptionキーなのかということです。せめてshiftキーだと分かりやすい。なんかUNIXの伝統なども背景にあるのかもしれないですが、ちょっとこの文字だけ特殊な気がします。


option +  (バックスラッシュ:¥の記号が出るキー)


ちなみにコメントアウトする場合には、改行した各行の前にも「#」を挿入する必要があります。

2018/07/18

どれをインストールしたらいい?医療で使える統計解析ソフトウェア6選


SAS、JMP、SPSS、EZR(R)、Pythonなどの統計解析用のソフトウェアは有料から無料まで数多くあり、 どのソフトウェアが自分に一番合うか分かりません。EXCELから一歩進みたい方のために各ソフトの特徴をまとめました。

医療統計を学ぶための解析ソフトウェアの選択


統計の知識がついてくると、数式の結果をソフトウェアで確かめたくなります。 普段からEXCELでグラフ作成をしたり、平均や分散の他にも関数を使いこなしている方でも、本格的なデータ解析ができるソフトウェアに乗り換えるにはいくつかのハードルがあります。
  • そもそもどの統計解析ソフトウェアを使ったらいいかわからない
    統計ソフトには無料から有料のものまで数多くの種類があります。ソフトウェアにより、その使い方も異なります。例えば、データを選択するだけで済むものもあれば、プログラムを組む必要のあるものもあります。 
  • インストールが複雑かつ面倒
    手軽に統計ソフトウェアを試せない理由の1つとして、ソフトウェアのインストールがあります。EXCELではソフトを起動すれば合計や平均を関数で簡単に求めることができます。無料の統計解析ソフトウェアの中にはすぐに起動できずに、ソフトウェア本体をインストールするためにパッケージ管理ソフトやライブラリーを事前にインストールすることから始める必要がある場合があります。インストーラーをダウンロードして起動、次、次、OKというようにはならなくて、何をインストールするのかコマンドラインに打ち込む必要があるということです。統計ソフトを使って統計を学びたいのに、事前に何ができるのかを知っていないとインストールできないということが問題です。
    余談ですが、エクセルでも複雑なデータ処理を行うこともできますが、少し見えにくいところ(アドイン)から機能を追加するようになっています。 
  • もちろん使い方は統計解析ソフトウェアによりマチマチ
    元になる計算は一緒でも表記だけでなく文法を含めて書き方が違います。書店にいけば様々な統計ソフトに対応した書籍が並んでいますが、同じ内容の解説をしている部分を比較してみれば、使っているソフトによってプログラム例、結果の表示まで、実行例が違います。

どのような統計ソフトが有名か

統計のソフトには下記の5種類が知られています。どのソフトも様々なデータ形式に対応しているので、EXCELで学習したデータが無駄になることはないでしょう。特に、統計検定2級以上を受けようと思っている方などは実地にデータを入れて試してみたくなるのではないでしょうか。また、これらのソフトは決して高価なもしくは高機能な Excelではないです。統計処理するデータがAIや機械学習の分野にまで及んだ時点でEXCELで処理できるデータ数と操作が追いつかなくなります。

有料 
  • SAS
  • JMP
  • SPSS
    有料のものでも体験版やアカデミック版で試用感を確かめることができます。 
無料

SAS(Statistical Analysis System)


医療関係の第3相試験では申請時資料に使用するためにSASが用いられていることが多いように思います。 医師主導の臨床試験で行われた試験報告にはJMPやSPSS時にはExcelも出てくることがあります。高価である分だけ信頼性も高く解析の手法も多岐に渡ります。アカデミック版のSASがあるのでSASを使いこなせるのは理系で専門の教育を受けた人になるのではないかと思います。デザインの世界でAdobeのPhotoshopやillustratiorを使うような感覚だと思います。 

JMP

JMP (ジャンプ)はSASのJMPビジネスユニットにより開発されました。データの可視化とパワフルな統計機能をあわせ持ち、インメモリで処理を行うデスクトップ用ソフトウェアです。1989年当初にAppleのMacintosh用に作成されたものだけあって直感的な操作に適しています。2018年現在、30日間の無料トライアルと年間ライセンス版、パッケージ版が提供されています。 

SPSS


SPSSは2009年にIBMが買収以降、統計解析ソフトウェアの製品群として提供されています。 予測分析ソフトウェアとして商用のパッケージになります。 

R言語(EZR)


1984年にAT&Tベル研究所で研究・開発された統計処理言語であるS言語を元にしたオープンソース・フリーソフトウェアです。様々なパッケージをインストールすること統計に適した解析環境が出来上がります。 マウス操作だけで解析できるRコマンダーのカスタマイズ機能を組み込んだソフトウェアがEZR (Easy R)です。特に生存解析、ROC曲線解析、メタアナリシス、サンプルサイズの計算など、医療統計で役立つ解析が充実しています。 


Python


Pythonの発案者はグイド・ヴァンロッサムで1990年代初頭から開発が行われています。 万人のためのコンピュータプログラミングを目指しており、オープンソースで平易であり、開発時間を短くできるような工夫をしています。Python本体は最小限の機能を提供し、統計処理や機械学習、AI、Webのフレームワークなどは別途必要なものをインストールして使用します。 
私は統計だけでなく、Webサービスとの連携も考慮した環境を得たかったのでPythonを使用しています。 Pythonで面食らうのは、バージョンとインデントです。バージョンの2.0と3.0でプログラムの記載方法が若干異なり、Webに掲載されているサンプルプログラムがそのまま動かないことがあります。例えば、print文のバージョン3.0では「()」が必要になります。 他の言語ではインデントはプログラムの可読性をよくする意味で使いますが、pythonの場合はスペースの開け方を間違うとエラーが出ます。 
Pythonの生みの親として知られるグイド・ヴァンロッサムさんですがgoogleにいたこともあるようです。you tubeやらdropboxも実はpythonで書かれていたということがあります。 

SAS、JMP、SPSS、EZR、Python結局どれがいい?


SASやJMPなどの有料版が適しているのは、企業や大学などでライセンスがあり近くに聞ける人がいる状況がある場合です。お金に余裕がある個人とかもいいかもしれません。また、企業のトレーニングコースも参考になると思います。 統計検定や治験の統計解析に関わるのではなく、理解を深めるために統計解析の結果を試したいのであれば、R言語(EZR)やPythonが適しているように思います。EZRは論文での引用もされていますし、R言語はライブラリがかなり整備されています。Webとの相性はPythonの方がいいように思いますが、場合によってはライブラリーのバージョンを合わせる必要があったりと、細かな調整やある程度プログラムを組まないといけないことがあります。 ただ、いずれの言語にしても相互に乗り入れる仕組みがあるので1つのソフトをまずはじっくり使えるようになることがいいと思います。



2018/06/30

pythonプログラミング入門(2)グラフでサブプロットを描画


いくつかのグラフを1つにまとめるにはsubplotを使用します。subplotをどのように使用したらいいのか分かりにくかったのでまとめました。

subplotのカッコ内の数字によりグラフのまとめ方が決まります。subplotの後のカッコ内に数字が3つ並びますが、最初が縦のグラフの個数、2番目が横のグラフの個数、最後がどのグラフを指しているかになります。



実際のコード例を示します。 subplotでグラフを指定した後に、データの設定やy軸名などのラベルの指定をします。

subplotのコード例
import matplotlib.pyplot as plt plt.figure(1) plt.subplot(321) plt.plot([1,2,3,4]) plt.ylabel('321') plt.subplot(322) plt.plot([1,2,3,4], [1,4,9,16], 'ro') plt.ylabel('322') plt.subplot(323) plt.plot([1,2,3,4], [1,4,9,16], 'bo') plt.ylabel('323') plt.subplot(324) plt.plot([1,2,3,4], [1,4,9,16], 'yo') plt.ylabel('324') plt.subplot(325) plt.plot([1,2,3,4], [1,4,9,16], 'go') plt.ylabel('325') plt.subplot(326) plt.plot([1,2,3,4], [1,4,9,16], 'rx') plt.ylabel('326') #Matplotlib v1.1 introduces a newcommand tight_layout() that does this automatically for you. #グラフが重なった時にレイアウトを自動的に調整してくれる。(後述) plt.tight_layout() plt.show()

subplotを使用した表示例



グラフの自動レイアウトについて(tight_layout())

plt.tight_layout()はグラフのレイアウトを自動で調整するコマンドです。 コマンドを指定しないとy軸名がグラフと重なってしまいます。

plt.tight_layout()がない場合

(関連コンテンツ)

2018/06/27

pythonプログラミング入門(1)グラフ描画の初手



エクセルではシートから作図が 画面を選択することでできますが、pythonで同様のことをするにはプログラムで作成 します。pythonではエクセルよりも大きなデータや複雑なデータを扱うことが あるためです。

 pythonで見栄えの良いグラフを上手く 作成するには、配列とグラフの関係を把握することが近道です。

その他にも軸名やプロットのマーカー種類、色の操作、矢印による図内のコメントの作成方法も解説します。


matplotlibで最も簡単なグラフの作成(y値のみ指定)


matplotlibを用いた最も簡単なグラフで直線を作成します。
plotに配列で数値を入れます。xは値の指定がない場合、[0,1,2,3]となり、y軸は[1,2,3,4]となります。plt.show()で設定したグラフが表示されます。縦軸、横軸の名称を「y numbers」、「x numbers」と表示しています。


  • 直線のグラフ( コード例)
import matplotlib.pyplot as plt plt.plot([1,2,3,4]) #ラベルの表示 plt.ylabel('y numbers') plt.xlabel('x numbers') plt.show()

最も簡単なグラフの作成2(xとy値をそれぞれ指定)


散布図の作成です。
xとyの値を指定します。エクセルではxとyの組み合わせで点を表しますが、pythonの場合は、x、yとそれぞれに配列を入れることで指定します。(x,y)とならないことでプロットの座標が例では分かりにくくなります。

マーカーの形や色を指定することもできます。 例ではマーカーを'ro'としてred赤で「●」bで青の意味となっています。

plt.plot([1,2,3,4], [1,4,9,16], 'bo')

グラフの描画の範囲を指定することもできます。 下記のようにxの最大、最小、yの最大、最小の順で指定します。

plt.axis([xの最小値, xの最大値, yの最小値, yの最大値])

  • 散布図のグラフ(コード例)
import matplotlib.pyplot as plt #データの設定 plt.plot([1,2,3,4], [1,4,9,16], 'bo') #グラフ範囲の指定 plt.axis([0, 6, 0, 20]) #ラベルの書き方 plt.ylabel('y numbers') plt.xlabel('x numbers') plt.show()


マーカーの指定方法

マーカー種類の指定

マーカー'ro'は色(r:red)と種類('o':●)を表していました。色と種類をそれぞれ指定することができます。下記の書式はどちらでも同じ結果になります。

plt.plot([1,2,3,4], [1,4,9,16], color='blue', marker='o')
plt.plot([1,2,3,4], [1,4,9,16], 'bo')

matplotlibで使用できるマーカの種類一覧は、下記の表になります。
  • matplotlibで使用できるマーカの種類一覧
マーカー表示例マーカー表示例
’o’
'X'
'+'
'P'
'x'
'd'
'|'
'D'
's'
'H'
'<'
'*'
'>'
'p'
'v'

マーカー色の指定

マーカーに色を指定するにはmatplotlibで使用できる色の一覧を参照してください。


マーカーサイズの指定

マーカーのサイズを変更には、下記のようにmarkersizeで指定することができます。

plt.plot([1,2,3,4], [1,4,9,16], color='blue', marker='o' ,markersize=12


矢印で引き出し、コメントを追加したい場合


グラフの解説をするためのコメントを引出し線(矢印)で入れることもできます。

plt.annotate('text', xy=(1.25, 1), xytext=(1.5, 1.25),arrowprops=dict(arrowstyle="->"))

コメントの内容と矢印の起点、テキストの位置の座標を入れます。 arrowstyleでスタイルを変更すると矢印の種類を選択できます。

matplotlib.pyplot.annotateを参照ください。

import matplotlib.pyplot as plt plt.plot([1], [1], 'bo',markersize=12) #矢印付きのコメントを記載する #xy:矢じりの先頭 xytext:テキストの先頭 以降、矢印の形と色(角度や曲がり方も調整できる) plt.annotate('text', xy=(1.25, 1), xytext=(1.5, 1.25),arrowprops=dict(arrowstyle="->")) #描画の範囲を指定 x_mini x_max y_mini y_max plt.axis([0, 2, 0, 2]) #軸を非表示 #plt.axis("off") plt.show()



軸をoffにすることで図のように扱えます。
plt.axis("off")