EurekaMoments

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

時系列データを前処理する際のPython逆引きメモ

目的

データ分析の仕事をする中で最も扱う機会が多いのが
時系列データだと思います。その中で欠損値を扱ったり、
統計を取ったり、特徴量を作り出したりするのですが、
毎回やり方を忘れてググっているので、上記の書籍を読んで
こういった前処理の方法をいつでも確認できるように
メモしておこうと思います。

目次

  • 目的
  • 目次
  • 日時のデータをdatetime型に変換する
  • 最初の日時からの経過時間を計算する
  • 各データの統計量を計算する
  • 欠損値の確認と補完
  • 経過時間の単位を変換する
  • データフレーム結合する
  • 基準日時からの経過時間を計算する
  • 重複した行を削除する
  • 特定のデータ列をインデックスにする
  • 部分的時系列を抽出して統計量を計算する
  • データフレームの各列をリストにして結合する
  • 不均衡データから教師データを作成する
    • データの読み込みと可視化
    • K近傍法で教師データを作成する
    • 異常検出モデルを作成する
  • オートエンコーダで教師データを作成する
    • オートエンコーダの仕組み
    • 異常検出モデルを学習する
    • 学習したモデルにテストデータを適用する
続きを読む

画像データを前処理する際のPython逆引きメモ

目的

データ分析の仕事をする際はPythonで専用スクリプトを書いて
大量のデータを一括処理するなんてことをよくやりますが、
今後は画像データに対する処理のスキルも習得する必要性が
出てきました。そこで、上記の書籍から画像データに対する
前処理のやり方をいろいろ学んだので、それらを忘れないように
まとめておくことにします。

目次

  • 目的
  • 目次
  • 画像ファイルを読み込む
  • 配列のサイズを確認する
  • ピクセル値を確認する
    • カラー画像
    • グレースケール画像
    • 2値化画像
  • 機械学習のためのデータセット作成
  • モルフォロジー変換
    • 収縮(Erosion)
    • 膨張(Dilation)
    • オープニング(Opening)
    • クロージング(Closing)
  • ピクセル値のヒストグラム化
  • t-SNEによる次元圧縮
  • 訓練データとテストデータへの分割
  • 画像データの水増し
    • 反転
    • 平滑化
    • 明るさの変更
続きを読む

Occupancy Grid MapでLiDARの点群から埃を除去するROSプログラム

目的

前回の記事で書いたように、数年ぶりにROSを使う機会がありました。

www.eureka-moments-blog.com

その機会の中で、屋外でLiDARが埃やその他ノイズを検知したときの
点群をフィルタリングするプログラムを作ったので、そのアルゴリズム
とその性能検証、ソースコードについて紹介しようと思います。

目次

  • 目的
  • 目次
  • 目標設定
    • 残すべき対象①: 大きな静止物体
    • 残すべき対象②: 移動物体
    • 残すべき対象③: 地面
    • 除去すべき対象: 上記以外の埃やその他ノイズ
  • Occupancy Grid Mapの利用
  • 地図を構築するためのパラメータ
  • 3次元点が所属するセルのインデックス計算
  • 各セルに属する物体の高さ推定
  • ベイズの定理による占有確率の更新
  • 対数の性質を利用した確率更新の計算
  • 占有確率に関するパラメータ
  • 占有確率に基づくフィルタリング性能の検証
    • Grid Mapの初期化
    • 占有確率の更新
    • 埃+ノイズとそれ以外の点群の区別
    • 埃とノイズの点群の除去
  • ROSプログラムの設計とソースコード
    • 点群を座標変換するPointCloudTransformer
    • 埃やノイズを除去するPointCloudDustFilter
  • まとめ
続きを読む

ROSでプログラミングをする際に最低限知っておくべきことのまとめ

目的

最近、約8年ぶりにROSを使ったプログラミングをすることに
なったのですが、あまりに久しぶりすぎて基本的なことを全て
忘れてしまっていました。
今回また一から調べなおして整理したので、またいつでも
おさらいできるようにまとめておくことにします。

目次

  • 目的
  • 目次
  • 参考書籍
  • 動作環境
  • ROS1のインストール
  • インクルードパスの設定
  • 作業用ワークスペースを作る
  • 環境変数を設定する
  • パッケージを作る
  • Publisherノードを作る
  • Subscriberノードを作る
  • プログラムを実行する
  • 独自のメッセージ型を作成する
  • 独自メッセージを使って通信するノードを作成する
  • tfで座標変換する
  • rqt_graphでノード間のつながりを確認する
  • rostopicでトピックの内容を確認する
  • rvizで可視化する
  • ユニットテストを実行する
続きを読む

構造化データを前処理する際のPython逆引きメモ

目的

データ分析の仕事をする際は、Pythonで専用のスクリプトを書いたりして
実施することがほとんどですが、自分がやりたい処理をするのに未だに
pandasやnumpy, matplotlibなどの使い方を調べたりすることがあります。
今回は、csvファイルを読み込んだときのような構造化データを処理する
際によく使うコードを、今後すぐ思い出せるようにメモに残しておこうと
思います。

目次

  • 目的
  • 目次
  • DataFrameの各項目型やメモリサイズを確認する
  • DataFrameに欠損値が含まれているか調べる
  • DataFrameに含まれる各データの統計量を計算する
  • データ間の相関係数を計算する
  • 各データの出現数をカウントする
  • 欠損値を除外する
  • 欠損値を補完する
  • 文字列を数値へ置き換える
  • 不均衡データを均衡化する
  • 文字列を集約する
  • データを正規化する
  • データをグループ化する
  • 主成分分析
続きを読む

JavaとSpring BootによるWebアプリ開発の基礎

目的

今後も長くソフトウェアエンジニアとしてのキャリアを築いていくことを
考えたときに、Webやネットワーク、データベースといった技術を利用した
システムを開発できる能力は必須だなと思うようになりました。

そこで、ちょうど今年から仕事でJavaを扱うようになったのと、つい最近
上記の書籍が発売になったのをきっかけに、Webアプリ開発を勉強し始めました。

今回は、その勉強の一環であるタスク管理アプリと、その開発を通じて学んだ
Webアプリ開発の基礎についてまとめたいと思います。

目次

  • 目的
  • 目次
  • Webアプリとは
  • Webアプリの仕組み
  • HTTP通信
  • HTTP通信とHTTPS通信
  • フレームワークを利用したアプリ開発
  • Spring BootによるWebアプリ開発
  • Spring Bootを用いたタスク管理アプリの開発
    • 要件定義
    • 開発用プロジェクトの作成
    • プロジェクトの中身の確認
    • プラグインの設定
    • IntelliJからアプリをビルド・実行するための設定
    • アプリのビルドと実行
    • アプリをコマンドラインから起動できるようにする方法
    • Maven Wrapperとは
    • MVCモデル
    • コントローラを実装するためのアノテーション
    • データベースの導入
    • SQLによるデータベースの操作
    • Javaプログラムからのデータベース接続
    • H2データベースの利用
    • データベーステーブルの初期化
    • データベース操作用クラスの作成
      • JdbcTemplateクラス
      • DI(Dependency Injection: 依存性の注入)
      • タスク情報を保持するモデルの作成
      • データベースにタスク情報を追加するメソッドの実装
      • タスク情報を全て取得するメソッドの実装
      • データベースからタスク情報を削除するメソッドの実装
      • データベースのタスク情報を更新するメソッドの実装
      • データベースから特定のタスクidを取得するメソッドの実装
    • コントローラクラスの作成
      • @Controllerアノテーションによるコントローラの作成
      • TaskListDaoクラスのフィールドへの追加
      • タスクを追加するエンドポイントの作成
      • HTTPリクエストにおけるGETとPOST
      • テンプレートエンジンによるビューの作成
      • Thymeleafの利用
      • HTMLテンプレートの作成
      • タスク一覧表示機能のエンドポイントの作成
      • CSSによるテンプレートの装飾
      • タスク情報を削除するエンドポイントの追加
      • タスク情報を更新するエンドポイントの追加
    • 動作確認
続きを読む

Kth Largest Element in a Stream問題とC++サンプルコード

背景

プログラミングテストの練習問題として、
優先度付きキューの一種であるヒープを利用した
Kth Largest Element in a Stream問題を解いたので、
その解法をメモしておく。

目次

  • 背景
  • 目次
  • 問題
  • 解法
続きを読む