EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

個人的なPython逆引きリファレンス

目次

  • 目次
  • はじめに
  • ディレクトリやファイルを開くダイアログを表示
  • .zipや.gzみたいな圧縮ファイルをバイナリモードで開く
  • ループで処理を回している時の進捗率を把握する
  • pandasで空のデータフレームを作成し、データを逐次追加していく
  • CSVファイルをpandasで読み込んだ時に列をindexに指定する
  • pandasデータフレームをCSVファイルに書き込む時に日本語の文字化けを防ぐ
  • 複数のデータフレームを一つに結合する
  • データフレームからある条件を満たすデータを抽出する
  • 3次元のデータパネルを作る
  • メッセージウィンドウを表示させる
  • 指定したディレクトリ内にあるファイル名をリストアップする
  • 日付と時刻を表す文字列をdatetime型として処理する
  • datetime型データをCSVファイルに書き込んだ際の注意点
  • ファイルやディレクトリの各種操作
  • Figureを表示中にマウスクリックにより別な処理を走らせる
  • データフレームからカラム名を指定してデータを抽出
  • データフレームの各データ同士の相関係数を計算してヒートマップ表示する

はじめに

Pythonでプログラミングをするようになって暫く経ちますが、
未だに基本的な文法やTipsについて同じことを何度も調べては
忘れ、調べては忘れを繰り返しています。
今回の記事では、そうやって今まで調べてきたことを一通り逆引き
リファレンスとして残して、もっと素早く調べ直せるようにします。

続きを読む

ソフトウェア開発におけるレビューについての勉強メモ

目次

  • 目次
  • はじめに
  • 参考文献
  • レビューの種類と目的
  • 改善点①: 新規開発機能の教育レビュー不足
  • 「最悪を最初に」を基本としたレビュー
  • 改善点②: 簡単なところからレビューを始めがち
  • 改善点③: コードレビューがメールベース
  • レビューとインスペクション中の指針となる原則
  • 改善点④: 公式のタイミングでしかレビューをしない
  • まとめ

はじめに

ソフトウェア開発においてバグを発見するために、そのソフトウェアのコードレビューやベンチテストは必要不可欠な作業です。僕の普段の開発業務でも、仕様や設計、コードレビューを行うステップがあるのですが、どうも最近、見つけられたはずのしょーもないバグが「今更?」って感じのタイミングで見つかることがあるなぁ、感じています。
バグを見つけられなかったことはしょうがいないのですが、今後また同じようなことで悩まないためにも、自分達のレビューのどこに問題があったのかを考えなければなりません。
今回の記事では、正しいソフトウェアレビューについて学び、それを参考に自分の開発業務におけるレビュー改善について考えてみようと思います。

続きを読む

海外留学に挑戦し夢破れて学んだこと

目次

  • 目次
  • はじめに
  • 概要
  • 留学に挑戦しようとしたきっかけ
  • 留学候補者選抜会への参戦
  • 留学テーマのプレゼン
  • 選抜からの落選
  • 落選したことで学んだこと
  • その後の取り組み
  • まとめ

はじめに

このブログを始めて約2ヶ月、またTwitterでいろんな人達と繋がりを持つようになって1ヶ月が経ちました。その間にブログを見に来てくれる人も、Twitterでフォローしてくれる人も増えて非常にありがたいのですが、僕はこれまでブログにもTwitterにも一切の興味がありませんでした。そんな僕がこれら2つを始めることになったきっかけは、自分が勤めている会社が持つ海外留学制度への挑戦でした。今回は、僕が留学に挑戦してから、ブログとTwitterを始めるまでの経緯と、それを通して僕が学んだことについて書き、それを今後も忘れないためにも記事として残しておこうと思います。

概要

今回の記事は以下のような内容になっています。

  • 留学に挑戦しようとしたきっかけ

  • 留学候補者選抜会への参戦

  • 留学テーマのプレゼン

  • 選抜からの落選

  • 落選したことで学んだこと

  • その後の取り組み

  • まとめ

続きを読む

機械学習の基本用語集

目次

  • 目次
  • はじめに
  • 特徴量(Feature Value)
  • 学習(Learning)
  • 教師あり / なし学習(Supervised / Unsupervised Learning)
  • 最適化問題(Optimization Problem)
  • 座標降下法(Coordinate Descent)
  • 最急降下法(Gradient Descent)
  • 確率勾配法(Stochastic Gradient Descent)
  • 汎化性能(Generalization Ability)
  • 新しい特徴量を作る(Creating New Feature Value)
  • 多層ニューラルネットワーク(Maltilayer Neural Network)
  • ランプ関数(Ramp Function)
  • 鞍点(Saddle Point)
  • ヘヴィサイド関数(Heaviside Function)
  • 分離超平面(Separating Hyperplane)
  • カーネル法(Kernel Method)
  • 入力データを行列で表現する(Representation of Input data as Matrix)
  • 原因を突き止める(Nailing down the Cause)
  • スパースモデリング(Sparse Modeling)
  • 非負値制約行列分解(Non-negative Matrix. Factorization)
  • ボルツマン機械学習(Boltzmann Machine Learning)
  • ボルツマン機械学習で利用される手法(Method of Boltzmann Machine Learning)
  • 制限付きボルツマン機械(Restricted Boltzmann Machines)
  • ディープボルツマン機械学習(Deep Boltzmann Machine Learning)
  • 事前学習(Pre-Training)

はじめに

機械学習を学ぶにあたり、そもそも「機械学習?何それ?美味しいの?」みたいなレベルからのスタートだったので、まずは機械学習についてざっくり基礎的な事が学べる本を読んでみようと思い、下記の書籍を読んでみました。

これを読んだことで、まずは機械学習に関連する用語にいろいろ触れる事ができたので、今回はそれらを用語集として残しておこうと思います。また、各用語についての関連記事のリンクも付けてみました。

続きを読む

数式のプログラム実装をシンプルにするための事前手計算のススメ

目次

  • 目次
  • はじめに
  • 手計算
  • カルマンフィルタについて
  • 予測
  • 観測
  • 更新
  • まとめ

はじめに

あるロジックをプログラムに実装するとして、自分の場合だったらまずはMATLABやPythonでプロトタイプを作って有効性をシミュレーションします。そして最終的にはC言語に移植をする訳ですが、ここで悩ましいのがMATLABやPythonで書いたコードと同じような書き方をC言語では出来ない事です。そして、その違いを特に感じるのが行列演算になります。3次元だろうが4次元だろうが、MATLABやPythonでは簡単に実装できてしまうのに対して、C言語で実装しようとするのはかなり面倒だし、デバッグも大変です。正直言ってプロトタイピングした甲斐がありません。そこで、面倒な行列演算を何とかシンプルに実装できないかを考える事にしました。

手計算

コードをシンプルにしたかったり、プログラムの計算負荷を軽くしたい時に良く取られる手段の一つとして、事前に計算出来る部分は予めやっておくというのがあります。少々面倒ではありますが、上記で書いたような行列演算も2次元、3次元くらいなら手計算出来ますし、その結果得られた形というのはかなりシンプルになり、それくらいであればC言語で書くのもあまり苦ではならなくなります。また、事前に計算してみる事によって理論の理解がより深まるし、リファレンスとしていた理論式なんかに万が一誤植があったとしても気付く事ができるので、まずは頑張って手計算してみるという事には多くのメリットがあります。そこで今回の記事では、自動運転技術としては一般的なカルマンフィルタの理論を例として、事前に手計算する事の大切さを紹介してみようと思います。

続きを読む

matplotlibを使ったPython製のデータ再生GUIツールを作った

目次

  • 目次
  • はじめに
  • サンプルコード
  • 必要なモジュール
  • サンプルデータの読み込み
  • GUI全体のウィンドウと各種グラフスペースの配置
  • アニメーション操作用ラジオボタン
  • アニメーション操作用スライダー
  • アニメーションの更新処理
  • 全体ソースコード

はじめに

実験で取った時系列データを見返したり、プロトタイピングしたロジックをシミュレーションでデバッグしたい時は、それをアニメーション表示させるということをよくやります。しかしながら、普通にアニメーション表示させるだけだとただデータの頭からお尻までを再生するだけで終わってしまうので、一時停止や巻き戻し、時には早送りなどしながらじっくりデータを見たい時は少々不便です。
そこで今回は、Pythonの描画ライブラリmatplotlibのGUI作成機能を利用して、アニメーション再生や一時停止、巻き戻しなどができるGUIツールのサンプルを作成したので紹介したいと思います。

サンプルコード

今回作成したツールは以下のようになりました。
f:id:sy4310:20180909074138p:plain ソースコードやGIFアニメーション、お試し用のサンプルデータはGitHubで公開しています。
github.com

続きを読む

Pythonパッケージのpyprojを使ったGPSのNMEAデータ分析

目次

  • 目次
  • はじめに
  • 参考資料
  • サンプルデータ
  • $GPGGAフォーマット
  • NMEAテキストログからの$GPGGAデータ抽出
  • 緯度経度からX-Y平面への座標変換
  • X-Y平面座標の可視化

はじめに

障害物検知用センサの計測精度を評価したりする場合、その基準とする位置座標を得るためにGPS測量を行うことがあります。RTK-GPSであれば数センチ程度の精度でその位置座標が取得できるので、ミリ波レーダやスキャンレーザの計測テストを行う際は、まず先に基準とするポイントを決めて、その位置座標をGPSで測るという作業を全ポイントでやっておきます。(これが中々大変な作業。。)
この時に問題になるのが、取得された緯度、経度情報をX-Yの平面直交座標に座標変換する処理です。通常なら、その座標変換を行うための原点やスケールなどのパラメータを自分で設定しなければならないのですが、Pythonで使えるパッケージの一つであるpyprojを使えば、この座標変換処理を数行のコードを書くだけで簡単に実行してくれて非常に便利です。
今回の記事では、pyprojの使い方と、それによるGPSのNMEAフォーマットの一つである$GPGGAデータの解析を行ってみた際の結果を紹介します。

参考資料

pyprojの使い方については以下の記事を参考にしました。

pyproj [いかたこのたこつぼ]

また、解析対象であるGPSのNMEAデータのフォーマットについては以下の記事に細かくまとめられていました。

GPSのNMEAフォーマット

こんな書籍もあるようで、面白そうですね。

続きを読む