いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【Python】boolean型でifしたい

・お題:boolean型の変数を使って、ifの条件分岐をしたい。

 

・boolean型は、True/Falseを示す型のことらしい。

・a=Trueとすれば、aにTrueというboolean変数が入った状態になる。また、Trueはintの1、Floatの1.0、strの"True"に対応しており、Falseはintの0、Floatの0.0、strの"False"に対応しているらしく、boolean型を渡すべきところにこれらを渡しても勝手に判別してくれるっぽい

・boolean型を使うタイミングで最も分かりやすいのは、if構文なのではないかと思う。

if 条件:
    条件がTrueの場合の処理
else:
    条件がTrueでなかった場合の処理

といった形で記載する。

・条件にはbool型の変数を放り込めば良いことになる。

例えば、

a=True
b=0
c="True"
d=0.0

とすれば、

if a:
    print("トゥルー")
else:
    print("フォールス")

で「トゥルー」が返ってくる。ちなみに、ifの後にcを持ってくれば「トゥルー」、bやdを持ってくれば「フォールス」が返ってくる。ifの後に条件ではなく変数がポツンとあるのに違和感を覚えたが、aそのものがbooleanとして解釈可能なら、こういう挙動になるらしい。

・andやorで条件をつなぐこともできる。

if a and b:
    print("トゥルー")
else:
    print("フォールス")

で「フォールス」が返ってくるし、b or cなら「トゥルー」が返ってくる。

・数値をそのままTrue/Falseで解釈してくれるので、以下のように倍数か否かを判別することもできる。

n=120
m=25

if n%m:
    print(f"{n}は{m}の倍数ではありません")
else:
    print(f"{n}は{m}の倍数です")

とすれば、「120は25の倍数ではありません」が返ってくる。

 

・ふと疑問に思ったのだけれど、0と1以外の数字を無理やりboolean型にするとどうなるのか?やってみた。

a=np.array([0,1,1,0,1,1])
a.astype(bool)

とすれば当然、

array([False,  True,  True, False,  True,  True])

が返ってくる。

b=np.array([0,1,2,0,-1,0.4637])
b.astype(bool)

を実行すると、

array([False,  True,  True, False,  True,  True])

が返ってきた。どうも、ゼロはFalseでその他はTrueらしい。

 

・いろいろ使えそう。

 

おわり。

【EXCEL】文字列として認識されている数字を数値で認識させたい

EXCELで数字を弄っていると、たまに数字が文字列として認識されてしまい、その後の処理ができなくなる場合がある。セルを一つずつアクティブにして数値とにして認識させることもできるが、面倒くさい(例は下図)。

 

・一気に数値に変換する方法をメモしておく。

①列単位で変換したい場合、「データ」タブの「区切り位置」機能を使う。

・数値に変換したい列(今回はA列)を選択し、データタブをクリック。さらに、「区切り位置」をクリック。

・「コンマやタブなどの~~データ(D)」をラジオボタンで選択して「次へ」をクリック。

チェックボックスをすべて外し、「完了(F)」をクリック。

・すると、選択した列だけ数値に変換された。

・私の使っているEXCELだと、、複数列に対して区切り位置の機能を使うことができないので、一列ずつ処理することになる。

 

②シートの文字列として認識されている数字を丸ごと数値で認識させたい場合は、一度csvファイルに変換してからEXCELで開く。

・ファイル⇒名前を付けて保存、から、ファイル形式にcsvを指定する。

・.csvとして保存されたファイルをEXCELで開くと、数字は数値として認識される。

csvファイルは、複数のシートや書式などのexcelファイルの機能を保持できない。このままcsvファイルをexcelファイルと勘違いしてexcel上で書式や新規シートなどの変更を加えると、変更が保存されないので、注意が必要。csvで開いた後にコピーして元のexcelファイルに貼り付けるのが良い。

 

・個人的には、列数がそれほど多くない場合には①のやり方で、多くてやってられない場合には②の後にもとのexcelにコピペするやり方で処理するのが良いかなぁと思っている。

 

 

おわり。

【KNIME】相対パスでデータを読み込みたい

・KNIMEでいろいろワークフローを作成していると、データの保存場所に対してアクセス権のないPCではワークフローが使えないなどのトラブルが起こる。

・対処方法の一案として、相対パスでアクセスするという手がある。

・以降、参照ファイルの場所などは、あくまで一例。

①ワークフローの階層にフォルダを作成する。ここでいうと、testというワークフローが参照するデータを保存するために、Dataというフォルダを作成した。

②Dataの中に、データファイル(今回はsample1.csv)をドラッグ&ドロップで放り込む。

③readerのノードを設定する。今回は、csvファイルなので、csv readerを使った。

デフォルトの設定では以下のようになっている。

これを少し弄って、Read fromをRelative toとCurrent workflowに設定して、Browseをクリックすると、先ほどのデータのフォルダが出てくる(下図)。

Dataフォルダ内のsample1.csvを選択してやれば、相対パスで読み込むことができる(下図)。

・なんだかいろいろ使い道がありそう。

 

 

おわり