弱々学生の日記

技術的なアウトプットや備忘録としてアップしていきますが技術以外の事もアップするかもです

pythonで正規分布(ヒストグラム)を書いて確率分布曲線を描くまで

環境

pythonを使うと言ってもそのままVScodeATOMを使ってやるのではなくjupyter notebookを使用する。まだインストールしてない方はインストールしておくと今後データ分析とかで重宝すると思う。
色々一括でダウンロードできるAnocondaとか入れるといいかも

  • macbook pro 2017
  • jupyter notebook
  • データは.txtファイルから読み込む

環境を入れたのが結構前なので覚えていないのが申し訳ない。 各自で調べ欲しい。
ただjupyter notebookさえ入っていればよかった気がするけど忘れた。

jupyter notebookでpython3ファイルを作る

右上のnewのタブからpython3を選択して新しくファイルを作ろう f:id:takaya468:20190731171448p:plain 作ったらこんな感じの画面が出てくるのでUntitledの部分をクリックして名前を変えよう f:id:takaya468:20190731171530p:plain 少しだけjupyterのことを書いたがここでは詳しくは説明しない

ソースコード

では早速コードを書いていく 最初に色々importする

import numpy as np  #テキストデータの読み込みで使う
import matplotlib.pyplot as plt  #ヒストグラムの描画で使う
from scipy.stats import norm  #標準偏差と平均値の導出で使う
from termcolor import cprint,colored  #文字に色を付けたりするときに使う

次にテキストデータを読み込む。

data0 = np.loadtxt("sample.txt", comments='!')
 #comments='!' ⬅️行ごとに読み込んでいる

distance0=data0



実際のテキストデータの中身は以下の通り。

[1.00294 1.00302 1.00306 1.00297 1.00294 1.00318 1.00306 1.00288 1.00317
 1.00299 1.00315 1.00292 1.00309 1.00296 1.00287 1.00294 1.00297 1.00286
 1.00286 1.00297 1.00302 1.00281 1.003   1.00277 1.00311 1.00289 1.00282
 1.00273 1.00296 1.00292 1.00286 1.00307 1.00296 1.00285 1.00297 1.00291
 1.00299 1.00289 1.00283 1.00275 1.00287 1.00298 1.00292 1.00291 1.00296
 1.00288 1.00292 1.00288 1.00296 1.00295 1.00296 1.00298 1.00297 1.00295
 1.00306 1.00301 1.00311 1.00288 1.003   1.00289 1.00302 1.00295 1.00314
 1.00306 1.00317 1.00306 1.00316 1.00315 1.00308 1.00304 1.00313 1.00309
 1.00307 1.00302 1.00304 1.00295 1.00315 1.00317 1.00305 1.00306 1.00326
 1.00299 1.00305 1.00305 1.0031  1.00298 1.00309 1.00303 1.00303 1.00297
 1.00297 1.00326 1.00299 1.00321 1.003   1.00302 1.00296 1.0031  1.00312
 1.00296 1.00297 1.0029  1.003   1.0031  1.003   1.00292 1.00305 1.0029
 1.00297 1.00312 1.00307 1.0032  1.00306 1.00312 1.00291 1.00301 1.00308
 1.00319 1.00292 1.00305 1.00282 1.00309 1.00302 1.00301 1.00308 1.00312
 1.00298 1.00314 1.003   1.00301 1.00298 1.0031  1.00314 1.003   1.00303
 1.00315 1.00305 1.00326 1.00308 1.00318 1.00304 1.00304 1.00315 1.00309
 1.00315 1.00316 1.00323 1.00304 1.00292 1.00314 1.00309 1.00317 1.00301
 1.00326 1.00311 1.00308 1.00316 1.0031  1.0032  1.00291 1.0028  1.00299
 1.00288 1.00291 1.00294 1.00299 1.00285 1.00286 1.00298 1.00293 1.00276
 1.00287 1.00288 1.0029  1.00292 1.00292 1.00307 1.00291 1.00308 1.00294
 1.00284 1.00304 1.00292 1.00291 1.00295 1.00292 1.00304 1.00288 1.0028
 1.00269 1.00291 1.00283 1.00287 1.00289 1.00303 1.00283 1.00308 1.00294
 1.00309 1.00318]

実際にテキストデータは1行ずつなのでこんな感じです。 f:id:takaya468:20190731170858p:plain




次に標準偏差と平均値を表示する。 確率分布曲線を描く際に必要なので定義しておく

param = norm.fit(distance0) #平均値/標準偏差で配列として定義
#loc, std = stats.norm.fit(distance0)

cprint('平均値/標準偏差',attrs=['bold']) 
#cprintを使って文字を強調させている

print(param)



最後に実際にヒストグラム と確率分布曲線を描きましょう。

plt.figure
plt.xlabel("distance(m)",fontsize=15) #x軸のラベルを変更
plt.ylabel("frequency",fontsize=15) #y軸のラベルを変更

weights0 = np.ones_like(distance0)/float(len(distance0))  
#重みつけをするので加重平均を出す

plt.hist(distance0,weights=weights0,bins=55,alpha=0.6,color="blue")    
#weight=重み  bins=ビンの数(縦棒の数), alpha=グラフの透明度, color=グラフの色,

pdf_fitted = norm.pdf(x,loc=param[0],scale=param[1])     
#確率分布曲線(フィッティング)を描く,loc=平均値,scale=正規分布

pdf = norm.pdf(x)
plt.figure

plt.plot(x,pdf_fitted/50000,'r-') 
#50000の部分はヒストグラムに合わせて調整する

plt.tight_layout()

plt.savefig("sample1.png",dpi=1000) 
#描いたグラフを保存する。dpiが大きいほど高画質になる。1000で十分に高画質

plt.show()

先ほどのテキストデータを使うと以下のようなグラフが書けるはず。

f:id:takaya468:20190731170903p:plain
出力結果
以上

あとがき

説明が曖昧な部分があったりとまだまだ勉強不足で申しわけけない

ubuntuMATEにmacbookでSSH接続する(raspberrypi)

前段階

raspberrypi3にubuntuMATEが入ってることを前提に書いてます
備忘録みたいな感じなのでより詳しく知りたい方は参考ページをみてください
user@hostnameで書いてます

raapberrypiに色々入れる

最初にssh-serverを入れます。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install openssh-server


次にavahi-daemonを入れます

sudo apt-get install avahi-daemon

これでmacbookssh接続する時に user@hostname で接続できる


※ またデフォルトのhostnameを変えたい場合は

sudo vi /etc/hostname

ここを編集すれば変えれます


なんかport22を解放しなくちゃいけないらしいので
以下のコマンドを実行する

sudo ufw allow 22
sudo /etc/init.d/ssh restart
sudo systemctl enable ssh  #raspberrypiの起動時にsshを起動

最後にavahi-daemon を再起動する

sudo /etc/init.d/avahi-daemon restart

これでsshできるはず

macbookssh接続

macbook側でssh接続する

ssh hostname.local -l user

これで繋がるはず╭(・ㅂ・)و



参考ページ

qiita.com

qiita.com

Rapberrypi3にUbuntuMATE+ROSを入れるまで

前回の記事でROSの勉強のためにUbnutuMATEのインストール方法を書いたのだが ROS kinetic kame を入れる予定だったのにUbuntu18.04を入れてしまったので入れなおすことにした。 



環境

以前の記事と同じですが一応書いておきます。
- Raspberrypi3 - MacBook Pro (13-inch, 2017, Four Thunderbolt 3 Ports) - macOS mojave



UbuntuMATE+ROSをダウンロード

www.german-robot.com




UbuntuMATEを入れてからROSを入れるやり方が一般的だと思うのだが めんどくさいので1つになってるパッケージを入れようと思う。
ただ容量が3GBもあるのでダウンロードに時間がかかる。
気長に待ちましょう╭(・ㅂ・)و


無線でやると4~5時間くらいで有線でやると20分くらい どのみちそこそこかかるので気長に待つ(鋼の意思)

何度かタイムアウトになりつつもダウンロードが終わりました。 最初にSDのdiskの番号を確認しましょう

$diskutil list 
diskutil list
/dev/disk0 (internal):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                         500.3 GB   disk0
   1:                        EFI EFI                     314.6 MB   disk0s1
   2:                 Apple_APFS Container disk1         500.0 GB   disk0s2

/dev/disk1 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +500.0 GB   disk1
                                 Physical Store disk0s2
   1:                APFS Volume Macintosh HD            464.3 GB   disk1s1
   2:                APFS Volume Preboot                 46.4 MB    disk1s2
   3:                APFS Volume Recovery                509.7 MB   disk1s3
   4:                APFS Volume VM                      1.1 GB     disk1s4

/dev/disk2 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     Apple_partition_scheme                        +11.0 MB    disk2
   1:        Apple_partition_map                         32.3 KB    disk2s1
   2:                  Apple_HFS ContentsBridgeInstaller 11.0 MB    disk2s2

/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *32.0 GB    disk3
   1:                        EFI EFI                     209.7 MB   disk3s1
   2:       Microsoft Basic Data RPI                     31.7 `GB    disk3s2



自分の場合は/dev/disk3でした。
次はSDカードをフォーマットとアンマウントをしましょう

$ diskutil eraseDisk FAT32 RPI /dev/disk3
$ diskutil unmountDisk /dev/disk3

ここまで終わったらついにイメージに書き込みましょう
最初にダウンロードしたイメージを解凍しましょう
解凍方法はなんでも大丈夫です

そして解凍した.imgディレクトリに移動します 自分はDownloads/にあったのでそこに移動します

$ cd
$ cd Downloads/



いよいよ書き込みです!disk番号を間違えないようにしましょう

$sudo dd bs=10m if='German-Robot.Com-Image-Pi3-ROS-Kinetic-Ubuntu-Mate.img' of=/dev/disk3

Ctrl+tで現在の状況がわかるので動いてるか不安だったら確認してみましょう。
bs=10mの部分を大きくすれば速くなるらしいが失敗する可能性が上がるらしい
ちなみにbs=1mだと1時間くらいらしい

書き込みが終わったらSDカードを入れて起動してみる


なんかエラーとか出てるっぽいけど普通に起動した。


ちなみに最初のユーザーネームはpiでパスワードはraspberryです。



起動したら最初にキーボードレイアウトを変える。そのままだとドイツ語キーボードになっているっぽくてちゃんと入力できない。

ついでにraspi-configSSH(Interfacing)も有効にしておくと後々便利。

ここでパスワードも変えれるので替えたかったら変えるのもあり。
キーボードレイアウトを変えたらwifiも設定してとりあえずは準備完了。
以下のコマンドを入力する。そこそこ時間がかかるので気長に待つ


$ sudo apt-get update
$ sudo apt-get upgrade


2時間くらいかかった

$roscore

これで起動すればOK

Raspberrypi3にUbuntu MATEをインストールして有線でsshするまで

 

micriSDの32GBをゲットしたのでROSの勉強をしたいと思いUbuntuMATEをインストールした。

 

環境

・Raspberrypi 3B

Macbook Pro  macOS Mojave

 

UbuntuMATEのダウンロード

ubuntu-mate.org
ここでraspberrypi用のubuntuをダウンロードする 

SDカードのフォーマットとイメージの書き込み

「SD Card Formatter」などを使う手もあったがコマンドラインで行なった

 

 

$diskutil list

 

これでSDカードのディスク番号を確認、自分の場合は/dev/disk3 だった

$diskutil unmountDisk /dev/disk3   #ディスクフォーマット

$ sudo dd bs=1m if=ubuntu-mate-18.04.2-beta1-desktop-armhf+raspi-ext4.img of=/dev/rdisk3  #先にダウンロードしたubuntuを解凍しておく

 

これで10分くらい待てばSDに書き込まれる。

また,ctrl+tで途中経過がみれる。

書き込みが終わったらraspberrypiをHDMIケーブルでディスプレイで表示してみる。

f:id:takaya468:20190724195457j:plain

うまくいけばこんな感じの画像が表示されるので画面に沿って設定すればとりあえずはUbuntuMATEが入ってる。

次はmacbookとraspberrypiをSSHでつなぐ

macbookとraspberrypiを有線を使いSSH接続する

最初に更新とアップデートしておく

$sudo apt update
$sudo apt upgrade

sshで接続するためにパッケージを入れる

$sudo apt install openssh-server

sshを再起動して起動時に自動で起動するようにする

$sudo /etc/init.d/ssh restart
$ sudo systemctl enable ssh

次にこのままだとmacbook側からアプローチできないのでその辺りを設定する。

$sudo ufw status 
$sudo ufw allow proto tcp from 192.168.100.0/24 to any port 22
$sudo ufw enable
$sudo ufw status  #多分inactiveのままに

次にホストキー周りについて設定する

$service ssh status  #ホストキーが生成されずにエラーメッセージが何個かあることを確認する
$sudo ssh-keygen -A   #これでホストキーが生成されるはず
$sudo /etc/init.d/ssh restart #ssh再起動 

これで繋がるはずだけどavahi-daemonを入れると幸せになれるっぽいので入れて設定しておく

$sudo apt-get install avahi-daemon
$sudo vim /etc/avahi/services/ssh.service
$sudo service avahi-daemon restart
$sudo service avahi-daemon status

そしてraspberrypiとmacbookをLANケーブルでつなぎ

ssh -o 'StrictHostKeyChecking no' username@hostname.local

これで繋がるはずです。

初めてのmarkdownと技術記事?だったので色々不手際がありましたがご容赦ください

以下が参考にさせていただいた記事、ページです

cutxout.hatenadiary.jp

qiita.com