2019/10/01

【Python】EPUBからデータを抽出する

漫画などの固定レイアウトEpubを目次付きPDFに変換するプログラムを作りたい、ということで
手始めに、ePubからメタデータや目次データ、画像データのパスなどを表示するプログラムをサンプルコードなどを参考に書いてみました。
EbookLibというPythonのライブラリを使っています。https://github.com/aerkalov/ebooklib
EbookLibの使い方の参考になれば幸いです。


出力例:

2019/03/10

ディスプレイなしでのRaspberry Pi 3 Model B+初期セットアップ

Raspberry Pi 3 Model B+を、Raspberry Pi用のディスプレイやキーボード、マウスなしでssh接続でセットアップする方法です。手元にMacBookしか無い状態でセットアップを行いました。
同様の記事はたくさんありますが、コマンド操作を多用していて手順を覚えにくいものもあったので自分用の備忘録として残しておきます。当方も素人ですので、ある程度の知識があれば出来る程度の内容かと思います。

注意事項

・記事作成時点での情報に基づきますので、古い情報を含むかも知れません。ご留意ください。
・コメント等でご指摘頂ければ修正したいと考えております。
本記事に書かれていることを行ったことによる如何なる事象についても責任を負いかねます。自己責任で行ってください。


使用した環境
  • Raspberry Pi 3 Model B+
  • MacBook Pro(macOS Mojave)
今回、購入したもの
  • 本体:Raspberry Pi 3 Model B+
  • microSDカード(32GB)
  • スイッチ付きmicroUSBケーブル
そのほかに使ったもの
  • USB充電器
  • microSDカードリーダー
  • Ethernetアダプタ
  • LANケーブル

microSDカードリーダーやEthernetアダプタ付きのUSB Cハブがあると便利です。
Mac用の設定手順としてまとめていますが、SSH接続する手順までは、基本的にWindowsも同様に行える筈です。

以下、設定手順。

1. Raspberry Pi用のOS(Raspbian)イメージをダウンロードする



Raspberry Pi公式サイトから、ダウンロード出来ます。今回は、「Raspbian Stretch with desktop」のZipファイルをダウンロードしました。

2. microSDカードをフォーマットする


microSDカードにデータを書き込む前にフォーマットします。
SD Memory Card Formatterをダウンロード&インストールします。Windows版はこちらです。
microSDをリーダーにさして、Macに繋いでmicroSDを認識したら、SD Memory Card Formatterを起動します。


「カードの選択」が間違っていないことを確認して、「フォーマット」を実行します。

macOS搭載の「ディスクユーティリティ」でフォーマットしても良いかと思います。

3. microSDカードにOSイメージを書き込む



公式サイトのインストール手順によると、Etcherというソフトをインストールして使うことが推奨されています。マルチOS対応のソフトなので、Macの場合だけでなく、Windowsの場合でも使えます。

Etcherをダウンロード&インストールします。
引き続きmicroSDがマウントされた状態で、Etcherを起動します。


「Select image」を選択し、ダウンロードしたRaspbianのZipファイルを選択します。Zipファイルを解凍していた場合はimgファイルを選択します。


「Select drive」を選択し、先ほどフォーマットしたmicroSDを選択します。


「Flash!」を選択すると、書き込みが始まります。


自動で、「Validating」に移行します。


書き込みが完了するとmicroSDカードが自動的にアンマウントされます。
(※「Flash!」する前に、歯車ボタンを押してオプションから「Auto-unmount on success」のチェックを外しておくと、アンマウントされません。)


4. SSHを有効化する


上記のオプションをいじっていない場合は、もう一度microSDカードを抜き差しして、マウントします。
microSDカードのルートにsshという空ファイルを作成する為に下記のコマンドをターミナルから実行します。
$ touch /Volumes/boot/ssh
microSDカードをアンマウントします。

5. Raspberry Piを起動する


microSDカードをリーダーから取り外して、Raspberry Piに挿します。
Raspberry PiをLANケーブルでMacのEthernetアダプタかMacが接続しているルーターに接続して、Raspberry Piの電源を入れます。Raspberry Piの電源ケーブルにOn/Offスイッチの無いのUSBケーブルを使っている場合は、繋ぐと起動します。
OSが起動するのを1-2分ほど待ちます。

6. Raspberry PiにSSH接続する


Rapsbianのデフォルトでは、IDが 「pi」、ホスト名が「raspberrypi」、パスワードが「raspberry」となっているようです。
Macのターミナルを開いて、下記のコマンドを実行します。
$ ssh pi@raspberrypi.local
次に
Are you sure you want to continue connecting (yes/no)?
と表示された場合は、ターミナル上で「yes」と入力します。
pi@raspberrypi.local's password:
とパスワードを聞いてくるので、ターミナル上で「raspberry」と入力します。

接続できると以下のような表示となります。
pi@raspberrypi:~ $ 

エラーが出て繋がらない場合


以前に、同様の設定を行ったことがある場合などに以下のようなエラーがでる場合があります。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
過去に接続した際の設定が残っている為です。
ターミナルで下記のコマンドを実行します。
$ ssh-keygen -R raspberrypi.local

参考:SSH接続エラー回避方法:.ssh/known_hostsから特定のホストを削除する/削除しないで対処する3つの方法

7. Raspbianの環境設定を行う


Raspberry PiにSSH接続した状態で、下記のコマンドを実行すると以下のような設定画面が開きます。
$ sudo raspi-config


パスワードの変更やタイムゾーンの変更、地域設定などを行う。

8. 電源を切る


Raspberry PiにSSH接続した状態で、下記のコマンドを実行します。
$ sudo shutdown -h now

以上です。

2018/07/25

【Windows10】SSD(120GB)からSSD(500GB)にクローンして換装した

今年のPrime DayでCrucialのMX500を購入しました。

現在使用しているデスクトップPC(7年選手)のSSDの容量が120GBと少なく、容量がほぼ限界まできていたので、SSDを比較的大容量のものに入れ替えることにしました。
これまで、グラフィックボードや電源の交換の経験はありますが、ストレージの入れ替えはノートパソコンのHDDぶりです。
ド素人なりに、忘備録を残しておきます。

新しいSSD

元のSSD

データ移行のため、SSD接続用にAUKEYの2.5インチSSD ケースを使いました。


SSDのクローン作業はすぐ終わると思っていましたが、予想外に手間取り結局何度か試すことになりました。
元よりも容量が大きいSSDへの移行だったため、パーティションサイズを変更してクローンしたかったのですが、うまく扱えませんでした。最終的に、おすすめ記事が多いEaseUS Todo Backup Freeではなく、AOMEI Backupper Standardを使いました。

クローン後は、元のSSDが繋がっていたSATAに差し替えて換装完了です。
問題なくWindowsも起動しました。

換装前後のCrystalDiskMarkのベンチマークスコアは以下の通りです。

A-DATA S511(120GB)
Crucial MX500(500GB)

容量にかなり余裕ができ、書き込み速度も向上し、大変満足のいく結果となりました。

2018/06/10

【R】ネットワーク分析(igraph)でハブ空港を見つける

igraphは、グラフの可視化や中心性解析などが出来るRのパッケージです。
OpenFlights.orgのデータを使って、世界の空港のネットワークグラフを作成し、igraphを用いて、ハブになる空港を表示してみました。

【実行環境】
macOS 10.13.5
R version 3.4.4

まず、はじめにOpenFlights.orgのデータのairports.datとroutes.datをExcelなどで編集し、Pajek形式にまとめました。このネットワークは、各空港(ノード)とそれぞれを結ぶ直行便(エッジ)で構成されています。


直行便がより多い空港がより重要なハブ空港であると仮定して、page.rank関数を用いてページランクを計算しました。

library(igraph)
g <- read.graph("airports_link.net", format="pajek")
score <- page.rank(g, weights = NA)$vector
sort(score, decreasing=T)[1:10]


上位10位の計算結果は、以下のようになりました。(空港名でなく、空港がある都市名になっています。)
1. Atlanta
2. Chicago
3. Los Angeles
4. Dallas-Fort Worth
5. Paris
6. London
7. Singapore
8. Beijing
9. Denver
10. Frankfurt

雑ですが、可視化も行ってみました。

xy <- cbind(V(g)$y, V(g)$x)
V(g)$size <- 1
V(g)$frame.width <- 0.1
E(g)$width <- 0.02
E(g)$color <- "green"
E(g)$arrow.size <- 0.02
plot(g, layout=xy)

全体的に雑な分析になってしましましたが、Rはパッケージも充実しており可視化も容易なので、今後も使って行こうと思います。

2018/01/08

【Python】バリオグラムを計算する

地球統計学での内挿法の一つであるクリギング法では、データが距離と方向にどのような関係を持つかを表すバリオグラムを元に重み付けを行います。バリオグラムやクリギング法については下記の書籍を参考に、バリオグラムを計算するプログラムをPythonで書きました。



x,y,valueという並び順のcsvで与えたデータに対して、バリオグラム(等方性)を計算します。
バリオグラムを計算したのち、指定した理論バリオグラムの形にフィットする値を計算します。

実行環境

Python 3.6.1



デモファイルに対する実行結果

【関連記事】