Translate

MATLABは意外と簡単。まずはCSVの読み込みから始めるのがいい感じ

最近転職などいろいろなことがあり、忙しい毎日を送っており、色々とと滞っていることが多い状態でした。

これまではpythonを使っていたのですが、新しい環境では、MATLABを使う人が多いため、これを期に私もpythonからMATLABに乗り換えてみようと思いました。

実際に使用してみると、pythonとMATLABは共通するところが多く、比較的すんなりとMATLABに移行することができた印象です。

pythonを使っていた時と同じく、主にCSVデータから計算をすることが多く、今回はCSVデータの取り込みという点からMATLABをみていきたいと思います。最初に言っておくこととして、私は理系でもなく、ましては工学でバリバリとコードを書いているわけではありません。そのため超絶初心者向けに、MATLABビギナーがこんなところで困ったとかそういったことをこれから紹介していければと思っています。

MATLABに触れて勉強するなら生データをいじるのが上達しやすい



個人的な印象ですが、MATLABでもpythonでもそうですが、書籍をみながらその通りにコードを書くのも一つの勉強の手段であるとは思いますが、どうしてもどうしてこのコードの勉強が重要なのかという点を自分で理解するのには時間がかかり、勉強も続かない印象があります(わたしもそうでした)。

そのため、自分でプログラミングで楽をしたいなーと思っているデータを実際に用意して、必要な処理をその都度勉強するのが効率が良いと思いました。私の場合には、生データをCSVで用意してそのデータから足し算や引き算、角度の計算などそういった処理を徐々に書いていくことで勉強してきました。そうすると勉強が実際の自分の作業効率の良さや上達の実感にもつながるような印象です。

MATLABのCSVの読み込みはcsvreadの関数で簡単にできる。

MATLABやpythonのいいところは、ネットで調べると公式や有志の人がコードや関数の特徴、書き方をまとめてくれている点にあると思います。MATLABでのCSVデータの読み取りは、csvread()関数で簡単に行うことができます。

手順としては、まずはCSVデータがすべて含まれたひと塊のデータを定義します。
例えばdata = csvread('csvread.csv');のように書いた場合には、「csvdata.csvというファイルをcsvreadという関数を使って読み込み、読み取ったデータはMATLAB上ではdataという名前で定義する」といった意味合いになります。

この読み込みの処理の後は、a = data(1,:);とコードを書くと「dataの一行目のデータはaという名前でMATLABのスクリプト上では今後扱う」といった意味になります。あとはdataのなかから必要な列や行を拾っていくと、計算処理などが非常に行いやすくなります。

csvデータの名前の入力がめんどくさい場合には、dir関数を使うのが便利

先程のコードだと、csvデータを読み込むのに'~.csv'といったファイル名をいちいち入力しなければなりません。それを避けるためには、dir関数を使うのが便利です。この関数は特定の文字配列を持つファイル名を同じディレクトリ(MATLABプログラムがあるフォルダ)から探してリストにしてくれるという便利な関数です。

私が良く使うのがこんな感じで
filelist = dir('*.csv');

翻訳すると、「同じディレクトリのなかから、末尾が.csvで終わるファイルを全部探して、filelistという名前の箱に順番に入れる」といった内容になります。これをしておくと、同じディレクトリに読み込みたいcsvファイルを入れておくだけで勝手に読み込んでくれます。複数のcsvファイル名を使いたい場合にはこんな感じ。

csvdata = filelist(1).name;
data = csvread(csvdata);

こうすると、filelistの一行目の名前を参照してdataという名前で読み込むといった感じで書けます。

csvデータの中に文字列があるとバグる

よくあるのが、csvの生データの中に文字列が含まれている場合で、この場合には読み込めないといったことが生じます。しかしながら、csvread関数には、行や列をスキップする入力変数(csvread()のカッコの中に入力する数字や文字)もあるのでそれを利用しましょう。例えばcsvread('data.csv',1,1)とあったら、一行目、一列目は読み込まないといった感じです。