ラズパイ触ってます

こんにちは!第1ユニットのべーです。

このご時世、ずっと部屋にいるので自室をできるだけ快適にしたい!
ということで最近はラズパイを使って我が家のスマートホーム化を目指しています。

ラズパイって?

小型のコンピュータです。
小さいのでセンサーをつけて温度を測ったり、モータをつけて自動で動くものを作ったりといったことがやりやすいです。

自分が買ったのはラズパイの中でも安い「Raspberry Pi Zero W」を買いました。

ラズパイ

実際に何をやった?

以下のことをやってみました。

  • 照明の点灯・消灯の自動化(朝の決まった時間に点灯、出かけたら自動で消灯)
  • エアコンの調整(温度センサーをつけて、エアコンの設定温度を自動調整)
  • 動体検知して自動で撮影する監視カメラ機能
  • 自宅のパソコン数台でファイルをやり取りするファイルサーバにする

特に照明の自動化は朝起きやすくなって、崩れていた生活リズムが立て直せたのでめちゃめちゃおすすめです👍

あとLinuxの設定を色々と触って、勉強にもなりました。

まだ怖くてやれていないオートロック化など、財布と相談しながらちょっとずつ進めていく予定です。

まとめ

ラズパイはLinuxの勉強もできるし、巣ごもり期間も快適になるのでおすすめです!

Pythonで感染者数をグラフ化

記事を書くのは久しぶりになります。最近自宅のキーボードを新調してウキウキしているベーです。

今回はPythonの勉強も兼ねて、日々ニュースで見かけるコロナ感染者数のデータからグラフを作ってみました。

感染者数のデータについて

今回は、NHKの新型コロナウィルス特設サイトからダウンロードしたデータを使用します。

https://www3.nhk.or.jp/news/special/coronavirus/data-widget

グラフの作成方法について

勉強ということで、今回は王道のライブラリ pandas + matplotlib で作成します。

実際にやってみた

サイトからダウンロードしたCSVを読み込んで、matplotlibでグラフとして書き出します。
せっかくなので全国と愛知県それぞれで作りました。

折線グラフ

# 全国
df_all = df.copy()
df_all = df_all.groupby('日付').sum()
df_all = df_all.loc[:,['各地の感染者数_1日ごとの発表数']]
df_all = df_all.rename(columns={'各地の感染者数_1日ごとの発表数':'全国の感染者数'})
df_all.tail(30).plot(figsize=(10, 5))
全国の感染者数の推移
# 愛知
df_aichi = df.copy()
df_aichi = df_aichi[df_aichi.都道府県名 == '愛知県']
df_aichi = df_aichi.set_index('日付')
df_aichi = df_aichi.loc[:,['各地の感染者数_1日ごとの発表数']]
df_aichi = df_aichi.rename(columns={'各地の感染者数_1日ごとの発表数': '愛知県の感染者数'})
df_aichi = df_aichi.sort_index()
df_aichi.tail(get_count).plot(figsize=(10, 5))
愛知県の感染者数の推移

地図に色付け

ただCSVから折線グラフを書くだけだと味気なかったので、加えて日本地図に色を塗ってみました。
2021/06/20の感染者数が多い県ほど色が濃くなっています。

# japanmapで画像生成
cmap = plt.get_cmap('Reds')
norm = plt.Normalize(vmin=df_yest.各地の感染者数_1日ごとの発表数.min(),
vmax=df_yest.各地の感染者数_1日ごとの発表数.max())
fcol = lambda x: '#' + bytes(cmap(norm(x), bytes=True)[:3]).hex()
plt.subplots(figsize=(8,8))
plt.colorbar(plt.cm.ScalarMappable(norm, cmap))
plt.imshow(picture(df_yest.各地の感染者数_1日ごとの発表数.apply(fcol)));
6/20の県別感染者数

終わりに

今回はpythonでグラフを書いてみました。
自宅のMacでまだ対応していないライブラリがあり、環境構築の面で一番苦戦しました…

地図を簡単に扱えるライブラリがあることなど、新しく覚えられたこともあるので、今後ももっと複雑なデータの処理など挑戦していきたいと思います。

記事内のソースは抜粋して記載してますので、興味がある方は↓JupyterLabのpdfファイルをご覧ください。

「正規表現」を覚えて業務効率化!

こんにちは、ダンデライオンズ 第一ユニット所属のベーです。

以前に書いたエクセルのショートカットについての記事の評判が良かったので、今回はまた仕事でパソコンを使い始めたばかりの方向けに「正規表現 (regular expression)」について書こうと思います。

正規表現とは

検索すれば詳しいことはたくさん出てきますが、まずは複雑なパターンの検索・置換を行うための表現方法だと思ってください。

例えばこんな時に使えます

・文章の中の似たような箇所を一括で検索・修正する

・プログラム内で日付や、メールアドレスなどのフォーマットをチェックする

・大量のログから特定のエラーを検索する(例:エラーコードの下2桁が「99」)

などなど

実際に使ってみよう

文章だけの説明ではつまりどういうこと?
となると思いますので具体例を挙げてみます。

今後の予定
2/15/2021まで仕事。翌日2/16/2021から2/18/2021まで休みををとって旅行を計画しています。 ただ、2/19/2021は朝早くから仕事があるので最終日は少し早めに帰るつもりです。 ………

上の文書について、「月/日/年」という日付の並びは日本人にとって馴染みがないので、「年/月/日」に直せ!と上司から指示がありました。

でも日付は少しずつ違うから検索するのは大変、こんな文が大量にあったら、直すには時間がかかってしまう・・・

こんな時、正規表現を使って置換すれば一発で修正することができます!

正規表現を使った検索・置換は大抵のテキストエディタで利用できます。
(テキストエディタ以外のEXCELなどではマクロなどカスタマイズする必要があります)

今回は、テキストエディタとしてサクラエディタを使います。

ではやってみましょう!

(↓スマホで見ている人は拡大してみてください)

正規表現を使った日付置換サンプル(gif)



はい、できました!
これで正規表現の説明は終了です。ありがとうございました!



・・・というのは冗談で、↑のgifではサクッとやっちゃっていますが、一つずつ解説します。

解説

まず「置換前」に入力した内容(修正前テキストの検索)

([0-9]+)/([0-9]+)/([0-9]+)

これで日付を検索しています。
これは内容を分解すると下のようになります。

[0-9]0から9までどれかの数字1文字
+直前にある文字の1文字以上の繰り返し
()括弧で囲った部分に当たる文字は置換後にそのまま使用できる
/元の文章の日付の区切り文字
(今回は日付がスラッシュ区切りなのでスラッシュを入力)
「置換前」に使った文字ごとの意味(表)

そして「置換後」に入力した内容(修正後テキストの指定)

$3/$1/$2
$n「置換前」にて括弧で囲った箇所を置換前のまま使用する
(数字nは何番目の括弧かを指定している)
/日付の区切りに使いたい文字(何でもOK)
「置換後」に使った文字ごとの意味(表)

つまり、今回の指定を言葉に表すと、
「数字の連続(1) / 数字の連続(2) / 数字の連続(3) 」
というパターンを、
「数字の連続(2) / 数字の連続(1) / 数字の連続(2)」
という順番に直してねという指定をしたのです。

上の例では数字と記号だけ扱っていますが、もちろんアルファベットやひらがなを含んでいても同じようなことができます。

また「置換後」の指定を「$3年$1月$2日」とすればスラッシュ区切りではなく「2022年2月13日」という形式に変えることもできます。

これは本当に初歩的な例で、正規表現ではもっともっと色々なことができます。
調べれば、いろいろ解説されているので、もし興味を持ったら調べてみることをおすすめします。

「これ1回で検索したりできないかな・・・」と悩んだときは、正規表現という手段があることを思い出してみてください。

今回はここまでです。
長文お読みいただきありがとうございました。

※補足
今回の作業はサクラエディタで行いましたが、正規表現は使うツールによって書き方が変わったり、一部の書き方に対応していない場合があります。
実際に作業する際はお使いのツールでの書き方を調べてから使ってください。

Excelのショートカット使ってますか?

こんにちは、ダンデライオンズ第1ユニット所属のべーです

弊社も月日が立つに連れて新卒のメンバーも含めて、社員が増え、にぎやかになってきたと感じる今日この頃です。

そんな折、Excelに不慣れな知り合いにExcelの使い方をレクチャーする機会がありました。
その際、普段当たり前に使っているショートカットが一つ使うたびに感心されてしまい、これはまるで自分が「超できる人」になったようだ!とちょっと調子にのってしまいました。

そんなExcelのショートカット、特に今年新社会人になってExcelを触るようになった人(弊社メンバー含)に伝えれば、役に立つのではないか!

というわけで、今日は私が社会人になってから知って感動したExcelのショートカットを厳選して3つ紹介したいと思います。

前提として

「Ctrl+C」でコピー、「Ctrl+V」で貼り付けなど、Windowsで共通するショートカットは、当たり前に使っているよ!って人向けです。
(そもそもCtrlキーなんて使ってないよ!って人がもしもいたら、「Excel ショートカット」などで調べてみてください)

あと、PCの設定やOSの違いでショートカットが違う場合があると思いますが、ご自身の環境に合わせて読み替えてください。

1. 「Ctrl + Home」でA1セル(一番左上にあるセル)に移動する

お客様に提出するExcelファイルはA1セルにカーソルをあてて保存しておくのが当たり前!
そんな常識も社会人になるまで知りませんでした。

最初はいちいちA1セルまでスクロール・クリックしていましたが、何十もあるエクセルファイルにいちいちそんなことしていられません。

そんなときに便利なのが、「Ctrl + Home」です!

どこのセルを選択していてもA1セル(一番左上にあるセル)に移動します。

シートを切り替えるショートカット「Ctrl + PgDn」と組み合わせて「Ctrl + Home」「Ctrl + PgDn」「Ctrl + Home」「Ctrl + PgDn」…と連打すれば一気に全シートをA1に合わせることも。

2. 「Ctrl + d」で上のセルをコピー

今入力した内容を下のセルにもコピーしたい!って思ったことありませんか?

「Ctrl + d」を使えば、「セルをコピー」→「カーソルを下に移動」→「貼り付け」という3つの動作が「カーソルを下に移動」→「貼り付け」で済みます

いちいち元のセルを選択しなくてもいいのは使ってみると思っている以上に便利ですよ!

複数のセルを選択した場合は、選択した一番上の行が、残りのセルにコピーされます

同じようなショートカットで、左のセルを右にコピーする「Ctrl + r」というショートカットもあります。試してみてください。

3. 「Ctrl + Enter」で選択した複数のセルに一気に入力

「Ctrl + Enter」が活躍するのは離れたセルに同じ内容を入力するときです!

空白の欄すべてに自分の名前を入力したい…そんなことも一度にできちゃいます

…ちょっとびっくりしませんでした?
私は初めて見たとき思わず「おぉー」と声を出してしまいました(笑)

使う機会は他の2つと比べると少ないと思うかもしれませんが、工夫次第で案外使えるショートカットです。頭の片隅に入れておいて損はないと思います。

まとめ

いかがでしたか?

もしひとつでも「知らなかった!」というものがあれば幸いです。

Excelに限らず、アプリケーションのショートカットはたくさんあります。
全てを覚えることは難しいですが、自分の作業が少しでも楽になるように、1つずつ覚えていきましょう。

以上、お読みいただきありがとうございましたm(_ _)m

【技術者ブログ】機械学習のライブラリ、TensorFlow

技術者ブログと題して社員が日ごろ取り組んでいる学習内容を紹介します。
今回は、AIをテーマにしている第1ユニットです。

今回のテーマ
『TensorFlow』について(概要)

前回の第1ユニットの技術者ブログではOpenCVを使って顔を切り出すプログラムを作りました。

ここから顔を機械に判別させるためには、切り出した画像を誰の顔なのか、機械に学習させる必要があります。
ここからやるべきことはたくさんありますが、まずは大きな流れをつかんでいただくために、今回は機械学習ライブラリの1つであるTensorFlowについて簡単に説明します。

TensorFlowとは…

機械学習モデルの開発およびトレーニングに役立つオープンソースのコア ライブラリです。ブラウザで直接実行できる Colab ノートブックを使って、すぐに作業を開始できます。

https://www.tensorflow.org/?hl=ja


TensorFlowはGoogleが開発し、公開している機械学習ライブラリです。

ニューラルネットワーク(人間の脳のしくみを基にしたアルゴリズム)
を構築、訓練することができる

少し前に 人間の対局データを使っていないことで話題になった囲碁AIの「 AlphaGo Zero」の開発でも使われています。

※詳しくは公式サイトをご覧ください。

■TensorFlowなどの機械学習ライブラリを利用する流れ

① TensorFlowを動かす環境のセットアップ
② 画像データの用意
③ 学習アルゴリズムの作成
④ ③のアルゴリズムで①の画像データを学習させてモデルデータを生成

4つができれば、モデルデータ(学習させた結果 )を生成できます。

今回は概要ということで、それぞれについて詳しいお話はまたの機会にしますが、
①②はネットで調べればたくさんの情報が出てくるので、そこまで大変ではないと思います。

上の中で1番難しいのは③学習モデルの作成です。
機械学習にはたくさんの手法があり、それぞれについて学ぶ必要があります。
自分たちで新しいものを作り出すためにはたくさんの勉強が必要でしょう。

■機械学習ライブラリはTensorFlowしかないのか?

そんなことは全くありません。
・scikit-learn
・Chainer
・Theano
・Keras

調べればたくさんの単語が見つかると思います。興味があればご自身で調べてみてください。

■最後に

以上、ざっくりとした説明をしましたが、少しでも読んでくださった皆さんが機械学習に興味を持っていただけたら幸いです。

『Hello World 』大会!

 先日、このブログで予告しておりました、「Hello World」の大会を行いました。


『Hello World』はトランプやUNOのように複数人でテーブルを囲んで遊ぶカードゲームです。大会は社員全員参加となり、大いに盛り上がりました。

参加者の中には初プレイの社員もいて少々不安もあったのですが、すぐにルールを覚えてスムーズにプレイできていたようで、一安心。ε-(´∀`*)ホッ 

大会ルール

大会は全5戦、1試合ごとに上位は加点、下位は減点の点数制で勝負し結果を競い合うルール。全5戦を行った結果の得点で順位を決定します。

5戦上位に残り続けた者もいれば、負け続けた者もおり、カードゲームの実力(?)が発揮されたのではないでしょうか。

結果は…

1位はなんと、毎試合平均2位と全試合高順位!
他を寄せ付けない安定したプレイで得点を積み上げての優勝でした。

私自身の順位は惜しくも2位で、1位には届きませんでした(T ^ T)
第2回大会があれば、次は優勝を狙いますよ!

『Hello World』(ハローワールド) とは…

弊社で現在開発中のカードゲームです。
プログラム要素をヒントに、プログラミング学習を始める前のお子様からでも学んで遊べるゲームとして開発しています。
※具体的なゲーム内容はまだナイショです。製品版をお待ちください!

ダンデライオンズでは今回のような社内でのイベントを定期的に開催予定です。
次回の内容はまだ未定ですが、開催する際はまたブログで取り上げる予定です。
ではでは!( ^_^)/

花見に行ってきました

記事を投稿するタイミングの問題で少し季節外れになってしまいましたが、弊社のメンバーの有志で4月に花見に行ってきました。

場所は鶴舞公園。
4月に入ってからということで桜が散ってしまっていないか心配していたのですが、今年は開花が遅かったのもあってちょうど満開!ライトアップされて一番いい時期でした!

屋台で飲み食いしながら写真を撮り、だれが一番いい写真を撮れるか競争!

結果、一番に選ばれたのはこの写真です!↓↓↓

…はい、花見前の待ち合わせ中の噴水の写真です。
「花見関係ないじゃん!」と思ったそこのあなた!私もそう思います。
(桜が写っている写真限定とか条件を設定すべきでした…ヤラレタ…)

弊社では、定期的に社内の有志でこんなレクリエーションを行っております。
また次のレクリエーションも記事にするつもりなので、お楽しみに!

技術者ブログ(1) – PythonとOpenCVで顔を認識する

技術者ブログと題して社員が日ごろ取り組んでいる学習内容を紹介します。
第1回は、AIをテーマにしている第1ユニットです。

今回のテーマ
『画像の中から顔を判別する』

使用する言語 – Python

機械学習向けのライブラリなど環境が充実しており情報も集めやすいです。

使ったもの – OpenCV

OpenCV(正式名称: Open Source Computer Vision Library)は、オープンソースのコンピューター・ビジョン・ライブラリです。コンピューターで画像や動画を処理するのに必要な、さまざま機能が実装されており、BSDライセンスで配布されていることから学術用途だけでなく商用目的でも利用できます。加えて、マルチプラットフォーム対応されているため、幅広い場面で利用されていることが特徴です。

引用
https://www.buildinsider.net/small/opencv/001


OpenCVには画像の特徴から判断するためのライブラリがあらかじめ用意されています。(カスケード型分類器とか言ったりするらしい)

今回はそれを利用し、用意した画像から顔を認識させ、顔の部分だけ切り出した画像を出力するプログラムを作成します。

ソースコード(抜粋)

トライ&エラーの過程は省略させていただき、実際に作った内容をざっくりと書きます。

openCVのインポート

カスケード型分類器に使用する分類器のデータ(xmlファイル)を読み込み

カスケード型分類器に使用する分類器のデータ(xmlファイル)を読み込みます。
今回は顔と目検出を行いたいため、上記2つのファイルを指定します。

カスケード型分類器を使用して画像ファイルから顔部分を検出する

顔検出を行います。検出に成功した場合は画像のサイズが出力されます。

検出部分を切り出して画像保存


実際にやってみた

  

この画像を指定してプログラムを実行すると…

   ↓

顔だけ認識された画像が生成されました!

  作ってみた感想

検索すると沢山の情報がでてきて、案外簡単につくることができました。
実際にソースを書く部分より、PythonやOpenCVのインストールなどの環境構築のほうが苦戦したかもしれません。
みなさんも興味があれば挑戦してみてください。

ここから切り出した画像を使い、誰の顔か判定する仕組みを作ってみたりしましたが、この先の話はまた次の機会に書きたいと思います。

5月社内コンテスト告知!

弊社で開発中のカードゲーム『Hello World』のテストプレイを兼ねて、5月某日に社内で大会を開催します。

大会は実力勝負の個人戦です。
参加者特典もあるので、社員は奮って参加してください。

社外の方には、大会終了後に、このブログにて大会の様子や結果をお届けする予定です。

Hello World ※画像は開発中のものです


『Hello World』(ハローワールド) とは…

弊社で現在開発中のカードゲームです。
プログラム要素をヒントに、プログラミング学習を始める前のお子様からでも学んで遊べるゲームとして開発しています。
※具体的なゲーム内容はまだナイショです。製品版をお待ちください!