2018年11月30日金曜日

VagrantでRAWGraphsがインストールされた仮想マシン(Debian Stretch/9.5)を構築する

RAWGraphsでCSVなどのデータを簡単に可視化する事ができます。

○RAWGraphsの画面


○構築方法
以下のVagrantfileを使用して、RAWGraphsがインストールされた仮想マシン(Debian Stretch/9.5)を構築できます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95rawgraphs"
config.vm.network "public_network", ip:"192.168.1.103", :netmask => "255.255.255.0"
config.vm.network "private_network", ip: "192.168.55.103", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db95rawgraphs"
     vbox.gui = true
     vbox.cpus = 4
     vbox.memory = 4096
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get -y install task-japanese gawk
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
apt-get -y install curl git

mkdir -p /opt/rawgraph
cd /opt/rawgraph

# install nodejs11
curl -sL https://deb.nodesource.com/setup_11.x | bash -
apt-get install -y nodejs
node -v

# install nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
export NVM_DIR="/root/.nvm"
source /root/.bashrc
nvm --version

# install bower
npm install -g bower
bower -v

# install rawgraphs
git clone https://github.com/densitydesign/raw.git
cd raw
bower install --allow-root
cp js/analytics.sample.js js/analytics.js


# register as a service
cat << EOF > /etc/systemd/system/rawgraph.service
[Unit]
Description=rawgraph
[Service]
Type=simple
ExecStart=/usr/bin/python -m SimpleHTTPServer 4000
WorkingDirectory=/opt/rawgraph/raw
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable rawgraph
sudo systemctl start rawgraph


SHELL
end


○関連情報
・csvkitを使用して、CSVファイルの操作をコマンドで行うことができます。csvkitに関する記事はこちらを参照してください。

・RAWGraphsに関する他の記事はこちらを参照してください。

Jupyterとpandas、foliumで栃木県の電気自動車用普通充電器_設置個所一覧を地図に描画する

Jupyterとpandas、foliumを使用して、以下のコードで栃木県の電気自動車用普通充電器_設置個所一覧を地図に描画する事ができます。

〇出力画面


〇サンプルコード
import folium
import pandas as pd
import math

df = pd.read_csv("http://tochigiken.jp/index.php?action=multidatabase_action_main_filedownload&download_flag=1&upload_id=918&metadata_id=3", encoding="cp932")
#display(df)
fm = folium.Map(location=[36.565725, 139.883565], zoom_start=10)

for i, dt in df.iterrows():
  if not math.isnan(dt['緯度']):
    #folium.Marker(location=[dt['緯度'], dt['経度']], popup=dt['名称']).add_to(fm)
    #なぜか緯度・経度が逆なので注意
    folium.Marker(location=[dt['経度'], dt['緯度']], popup=dt['名称']).add_to(fm)
fm

〇元データ
栃木県-環境森林部環境森林政策課/情報システム課
http://tochigiken.jp/index.php?key=mux9adygc-20#_20

Jupyterとpandasdmxを使用して、OECDの工業生産前年同月比データを取得する

Jupyterとpandasdmxを使用して、OECDの工業生産前年同月比データを取得してグラフ表示するには、以下のコードを実行します。

〇出力グラフ


〇コード
from pandasdmx import Request
import matplotlib.pyplot as plt

oecd = Request('OECD')
countries="JPN+USA+FRA"
data_response = oecd.data(resource_id='KEI', key="PRINTO01." + countries + ".GY.M/all?startTime=2017&endTime=2018")
oecd_data = data_response.data

df = data_response.write(oecd_data.series, parse_time=True)
df = df.unstack(level=0).to_frame()
df.columns=['Percentage']
df = df.reset_index()
df = df[["LOCATION", "TIME_PERIOD", "Percentage"]]
df.set_index(["LOCATION", "TIME_PERIOD"], inplace=True)
ax = df.unstack(level=0).plot()
plt.xticks(rotation=90)
plt.legend(loc='best')
plt.show()

〇元データ
Key Short-Term Economic Indicators
https://stats.oecd.org/Index.aspx?DataSetCode=KEI


○関連情報
・Pandasdmxに関する他の記事はこちらを参照してください。

Jupyterとwbdataで世界銀行の男性喫煙率データを取得する

Jupyterとwbdataで、国別年別の男性喫煙率データを取得して、グラフ描画します。

〇出力画面


使用指標

SH.PRV.SMOK.MA
男性喫煙率 - Smoking prevalence, males (% of adults)

サンプルコード

以下のコードをJupyterから実行してください。
%matplotlib inline
import matplotlib.pyplot as plt
import wbdata

df = wbdata.api.get_dataframe({"SH.PRV.SMOK.MA":"Smoking prevalence"}, country=["JP", "MY", "VN"], convert_date=True)
df.unstack(level=0).plot()
plt.legend(loc='best')
plt.show()

関連情報

・世界銀行のデータを取得・可視化する記事のまとめは以下のページを参照してください。
世界銀行のデータを取得できるwbdataパッケージのまとめ

・wbdataパッケージをインストールしたコンテナを作成するには、以下のページを参照してください。
DockerでJupyter Notebookと世界銀行の情報が取得できるwbdataパッケージがインストールされたコンテナのイメージを作成する

・コンテナではなく、仮想マシンを構築する場合は、以下を参照します。
VagrantでJupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築する

・世界銀行のデータを取得することができるwbdataパッケージに関する他の記事はこちらを参照してください。

2018年11月29日木曜日

VagrantでTagSpaces、Xfce Desktop環境、XRDPがインストールされた仮想マシン(Debian Stretch/9.5)を構築する

TagSpacesを使用して、タグを活用した文書管理を行うことができます。

〇TagSpacesの画面


仮想マシンの構築方法

以下のVagrantfileを使用して、TagSpaces、Xfce Desktop環境、XRDPをインストールした仮想マシン(Debian Stretch/9.5)を構築できます。
XRDPがインストールされているので、Windowsのリモートデスクトップで接続することができます。ユーザ名はvagrant、パスワードもvagrantでログオンできます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95xfcetagspaces"
config.vm.network "public_network", ip:"192.168.1.103", :netmask => "255.255.255.0"
config.vm.network "private_network", ip: "192.168.55.103", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db95xfcetagspaces"
     vbox.gui = true
     vbox.cpus = 4
     vbox.memory = 4096
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get -y install task-japanese gawk
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
cat << EOF > /etc/default/keyboard
XKBMODEL="pc106"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"
EOF

cat << EOF > /home/vagrant/.xsessionrc
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
sed -i -e "s/^EnabledIMList.*$/EnabledIMList=fcitx-keyboard-jp:True,mozc:True,fcitx-keyboard-us:False/" /home/vagrant/.config/fcitx/profile
fcitx-remote -r
fcitx -r -d
#startxfce4 &
EOF
chown vagrant:vagrant .xsessionrc

apt-get -y install  xrdp fcitx-mozc task-xfce-desktop tigervnc-standalone-server
im-config -n fcitx
sudo -u vagrant bash -i -c "export DISPLAY=:0.0 && fcitx -r"

cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.org
cat /etc/xrdp/xrdp.ini.org | gawk '/\\[Globals\\]/,/\\[Xorg\\]/' | sed -e 's/\\[Xorg\\]//' > /etc/xrdp/xrdp.ini
cat << EOF >> /etc/xrdp/xrdp.ini
[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
EOF
systemctl restart xrdp
systemctl enable xrdp


# install TagSpaces
apt-get -y install libappindicator1
wget https://www.tagspaces.org/downloads/tagspaces-amd64.deb
dpkg -i tagspaces-amd64.deb


init 5
SHELL
end

関連情報

・TagSpacesに関する他の記事はこちらを参照してください。

・TagSpacesのgithubリポジトリ
https://github.com/tagspaces/tagspaces

VagrantでKiCAD、LXDE Desktop環境、XRDPがインストールされた仮想マシン(Debian Stretch/9.5)を構築する

KiCADで回路図やプリント基盤をデザインする事ができます。
この仮想マシンにXRDPもインストールされているので、Windowsのリモートデスクトップで接続することができます。ユーザ名はvagrant、パスワードもvagrantでログオンできます。

〇KiCADの画面


〇構築方法
以下のVagrantfileを使用して、KiCAD、LXDE Desktop環境、XRDPをインストールした仮想マシンを構築できます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95lxdekicad"
config.vm.network "public_network", ip:"192.168.1.103", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db95lxdekicad"
     vbox.gui = true
     vbox.cpus = 4
     vbox.memory = 4096
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade

apt-get -y install task-japanese
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
cat << EOF > /etc/default/keyboard
XKBMODEL="pc106"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"
EOF


cat << EOF > /home/vagrant/.xsession
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
sed -i -e "s/^EnabledIMList.*$/EnabledIMList=fcitx-keyboard-jp:True,mozc:True,fcitx-keyboard-us:False/" /home/vagrant/.config/fcitx/profile
fcitx-remote -r
fcitx -r -d
lxsession -s LXDE -e LXDE
EOF
chown vagrant:vagrant .xsession


apt-get -y install  xrdp fcitx-mozc task-lxde-desktop tigervnc-standalone-server fcitx-tools


apt-get -y install build-essential module-assistant dkms
wget http://download.virtualbox.org/virtualbox/5.2.6/VBoxGuestAdditions_5.2.6.iso
mount -o loop -t iso9660 VBoxGuestAdditions_5.2.6.iso /media/
/media/VBoxLinuxAdditions.run


export DISPLAY=:0.0
im-config -n fcitx
sudo -u vagrant bash -i -c "export DISPLAY=:0.0 && fcitx -r"


cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.org
cat /etc/xrdp/xrdp.ini.org | awk '/\\[Globals\\]/,/\\[Xorg\\]/' | sed -e 's/\\[Xorg\\]//' > /etc/xrdp/xrdp.ini
cat << EOF >> /etc/xrdp/xrdp.ini
[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
EOF
systemctl restart xrdp
systemctl enable xrdp


# install KiCAD
apt-get -y install kicad

init 5
SHELL
end


〇関連情報
・KiCADに関する他の情報はこちらを参照してください。

・KiCADのwebサイト
https://kicad-pcb.org/

Jupyterとpandasdmxを使用して、OECDの農業からの温室ガス排出量(CO2換算キロトン)データを取得する

Jupyterとpandasdmxを使用して、OECDの農業からの温室ガス排出量(CO2換算キロトン)データを取得してグラフ表示するには、以下のコードを実行します。

〇出力グラフ


〇コード
from pandasdmx import Request
import matplotlib.pyplot as plt

oecd = Request('OECD')
countries="JPN+USA+AUS"
data_response = oecd.data(resource_id='AEI_OTHER', key=countries + ".TOTGHGAG/all?startTime=1985&endTime=2017")
oecd_data = data_response.data

df = data_response.write(oecd_data.series, parse_time=True)
df = df.unstack(level=0).to_frame()
df.columns=['CO2 Kt']
df = df.reset_index()
df = df[["COUNTRY", "TIME_PERIOD", "CO2 Kt"]]
df.set_index(["COUNTRY", "TIME_PERIOD"], inplace=True)
ax = df.unstack(level=0).plot()
plt.xticks(rotation=90)
plt.legend(loc='best')
plt.show()

〇元データ
Agri-Environmental other indicators
https://stats.oecd.org/Index.aspx?DataSetCode=AEI_OTHER


○関連情報
・Pandasdmxに関する他の記事はこちらを参照してください。

Jupyterとwbdataで世界銀行の結核の罹病データを取得する

Jupyterとwbdataで、国別年別の結核の罹病データを取得して、グラフ描画します。

〇出力画面


使用指標

SH.TBS.INCD
結核の罹病(10万人あたり) - Incidence of tuberculosis (per 100,000 people)

サンプルコード

以下のコードをJupyterから実行してください。
%matplotlib inline
import matplotlib.pyplot as plt
import wbdata

df = wbdata.api.get_dataframe({"SH.TBS.INCD":"Incidence of tuberculosis"}, country=["JP", "MY", "VN"], convert_date=True)
df.unstack(level=0).plot()
plt.legend(loc='best')
plt.show()

関連情報

・世界銀行のデータを取得・可視化する記事のまとめは以下のページを参照してください。
世界銀行のデータを取得できるwbdataパッケージのまとめ

・wbdataパッケージをインストールしたコンテナを作成するには、以下のページを参照してください。
DockerでJupyter Notebookと世界銀行の情報が取得できるwbdataパッケージがインストールされたコンテナのイメージを作成する

・コンテナではなく、仮想マシンを構築する場合は、以下を参照します。
VagrantでJupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築する

・世界銀行のデータを取得することができるwbdataパッケージに関する他の記事はこちらを参照してください。

2018年11月28日水曜日

Jupyterとpandas、foliumで埼玉県ふじみ野市の避難所を地図に描画する

Jupyterとpandas、foliumを使用して、以下のコードで埼玉県ふじみ野市の避難所を地図に描画する事ができます。

〇出力画面


〇サンプルコード
import folium
import pandas as pd
import math

df = pd.read_csv("http://www.city.fujimino.saitama.jp/doc/2016070800165/file_contents/hinan.csv", encoding="cp932")
#display(df)
fm = folium.Map(location=[35.879538, 139.519764], zoom_start=14)

for i, dt in df.iterrows():
  if not math.isnan(dt['緯度']):
    folium.Marker(location=[dt['緯度'], dt['経度']], popup=dt['施設等の名称']).add_to(fm)
fm

〇元データ
【ふじみ野市】避難所一覧
https://opendata.pref.saitama.lg.jp/data/dataset/http-www-city-fujimino-saitama-jp-doc-2016070800165

Jupyterとpandasdmxを使用して、OECDの家禽指数(Farm Birds Index)データを取得する

Jupyterとpandasdmxを使用して、OECDの家禽指数(Farm Birds Index)データを取得してグラフ表示するには、以下のコードを実行します。

〇出力グラフ


〇コード
from pandasdmx import Request
import matplotlib.pyplot as plt

oecd = Request('OECD')
countries="CAN+USA+FRA"
data_response = oecd.data(resource_id='AEI_OTHER', key=countries + ".BIRDS/all?startTime=1985&endTime=2017")
oecd_data = data_response.data

df = data_response.write(oecd_data.series, parse_time=True)
df = df.unstack(level=0).to_frame()
df.columns=['Farm Birds Index']
df = df.reset_index()
df = df[["COUNTRY", "TIME_PERIOD", "Farm Birds Index"]]
df.set_index(["COUNTRY", "TIME_PERIOD"], inplace=True)
ax = df.unstack(level=0).plot()
plt.xticks(rotation=90)
plt.legend(loc='best')
plt.show()

〇元データ
Agri-Environmental other indicators
https://stats.oecd.org/Index.aspx?DataSetCode=AEI_OTHER


○関連情報
・Pandasdmxに関する他の記事はこちらを参照してください。

Jupyterとwbdataで世界銀行の農村面積(平方km)を取得する

Jupyterとwbdataで、国別年別の農村面積(平方km)を取得して、グラフ描画します。

〇出力画面


使用指標

AG.LND.AGRI.K2
農村面積(平方km) - Agricultural land (sq. km)

サンプルコード

以下のコードをJupyterから実行してください。
%matplotlib inline
import matplotlib.pyplot as plt
import wbdata

df = wbdata.api.get_dataframe({"AG.LND.AGRI.K2":"Agricultural land (sq. km)"}, country=["JP","IN", "MY"], convert_date=True)
df.unstack(level=0).plot()
plt.legend(loc='best')
plt.show()

関連情報

・世界銀行のデータを取得・可視化する記事のまとめは以下のページを参照してください。
世界銀行のデータを取得できるwbdataパッケージのまとめ

・wbdataパッケージをインストールしたコンテナを作成するには、以下のページを参照してください。
DockerでJupyter Notebookと世界銀行の情報が取得できるwbdataパッケージがインストールされたコンテナのイメージを作成する

・コンテナではなく、仮想マシンを構築する場合は、以下を参照します。
VagrantでJupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築する

・世界銀行のデータを取得することができるwbdataパッケージに関する他の記事はこちらを参照してください。

2018年11月27日火曜日

VagrantでDBeaver、JDK11、MariaDB、Xfce Desktop環境、XRDPがインストールされた仮想マシン(Debian Stretch/9.5)を構築する

DBeaverは様々なデータベースに対応したデータベースクライアントです。

〇DBeaverの画面


〇構築方法
以下のVagrantfileを使用して、DBeaver、JDK11、MariaDB、Xfce Desktop環境、XRDPをインストールした仮想マシン(Debian Stretch/9.5)を構築できます。
XRDPがインストールされているので、Windowsのリモートデスクトップで接続することができます。ユーザ名はvagrant、パスワードもvagrantでログオンできます。
データベース接続作成時にデータベース名:test、ユーザ名:test、パスワード:testを指定します。ドライバはデータベース接続作成時にダウンロードできます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95xfcedbeavermariadb"
config.vm.network "public_network", ip:"192.168.1.101", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db95xfcedbeavermariadb"
     vbox.gui = true
     vbox.cpus = 4
     vbox.memory = 4096
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get -y install task-japanese gawk
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
cat << EOF > /etc/default/keyboard
XKBMODEL="pc106"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"
EOF

cat << EOF > /home/vagrant/.xsessionrc
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
sed -i -e "s/^EnabledIMList.*$/EnabledIMList=fcitx-keyboard-jp:True,mozc:True,fcitx-keyboard-us:False/" /home/vagrant/.config/fcitx/profile
fcitx-remote -r
fcitx -r -d
#startxfce4 &
EOF
chown vagrant:vagrant .xsessionrc

apt-get -y install  xrdp fcitx-mozc task-xfce-desktop tigervnc-standalone-server
im-config -n fcitx
sudo -u vagrant bash -i -c "export DISPLAY=:0.0 && fcitx -r"

cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.org
cat /etc/xrdp/xrdp.ini.org | gawk '/\\[Globals\\]/,/\\[Xorg\\]/' | sed -e 's/\\[Xorg\\]//' > /etc/xrdp/xrdp.ini
cat << EOF >> /etc/xrdp/xrdp.ini
[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
EOF
systemctl restart xrdp
systemctl enable xrdp


# install mariadb
echo "mariadb-server-10.0 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mariadb-server-10.0 mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get -y install mariadb-server
mysql -uroot -proot -e "CREATE DATABASE test DEFAULT CHARACTER SET utf8;"
mysql -uroot -proot -e "CREATE USER test@localhost IDENTIFIED BY 'test';"
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost';"
mysql -uroot -proot -e "FLUSH PRIVILEGES;"
mysql -utest -ptest test -e "create table messages (message_id integer not null, message varchar(100));"
mysql -utest -ptest test -e "insert into messages value (1, 'hello world.');"
mysql -utest -ptest test -e "insert into messages value (2, 'test message.');"


# install OpenJDK11
cat <<EOF | sudo tee /etc/apt/sources.list.d/stretch-backports.list
deb http://http.debian.net/debian stretch-backports main contrib non-free
EOF
apt-get update
apt-get -y install openjdk-11-jdk

# install dbeaver
wget https://dbeaver.jkiss.org/files/dbeaver-ce_latest_amd64.deb
dpkg -i dbeaver-ce_latest_amd64.deb


init 5
SHELL
end


○関連情報
・DBeaverに関する他の記事はこちらを参照してください。

Raspberry Pi上のDockerでMantis Bug Tracker2.18.0、MariaDBがインストールされたコンテナ(Alpine 3.8)を構築する

Mantis Bug Trackerは、PHP製のバグ追跡・課題管理サーバです。

○Mantis Bug Trackerの画面

デフォルトユーザ/パスワードはadministrator/rootです。

○構築方法
以下の手順で、Mantis Bug TrackerとMariaDBのコンテナを構築・実行します。

1. Mantis Bug Trackerイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t mantisbt .

Dockerfile
FROM alpine:3.8
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php7-apache2 php7-mysqli php7-pdo php7-pdo_mysql php7-intl php7-mcrypt php7-mbstring php7-session php7-curl php7-json php7-xml php7-zip php7-tokenizer php7-ctype php7-gd php7-xmlwriter php7-xmlreader php7-dom php7-zlib php7-iconv php7-simplexml php7-fileinfo openssl openrc unzip \
  && rm -rf /var/cache/apk/* \
  && wget https://sourceforge.net/projects/mantisbt/files/mantis-stable/2.18.0/mantisbt-2.18.0.tar.gz \
  && tar xvfz mantisbt-2.18.0.tar.gz \
  && rm -f mantisbt-2.18.0.tar.gz \
  && mkdir -p /opt \
  && mv mantisbt-2.18.0 /opt/mantisbt \
  && chown -R apache:apache /opt/mantisbt \
  && ln -s  /opt/mantisbt /var/www/localhost/htdocs \
  && mkdir -p /run/apache2 \
  && mkdir -p /var/mantisbt \
  && chown -R apache:apache /var/mantisbt
EXPOSE 80
VOLUME ["/var/mantisbt","/opt/mantisbt"]
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

2. Mantis Bug Tracker用のMariaDBイメージの作成(Dockerfile-mariadbとsetupdb.shのあるディレクトリで実行)
docker build -f Dockerfile-mariadb -t mariadb-mantisbt .

Dockerfile-mariadb
FROM alpine:3.8
COPY ./setupdb.sh /
RUN apk --no-cache add mariadb mariadb-client \
  && addgroup mysql mysql \
  && chmod +x /setupdb.sh
VOLUME /var/lib/mysql
EXPOSE 3306
ENTRYPOINT ["/setupdb.sh"]

setupdb.sh
#!/bin/sh
if [ ! -d "/run/mysqld" ]; then
  mkdir -p /run/mysqld
  chown -R mysql:mysql /run/mysqld
fi
if [ ! -e /usr/my.cnf ]; then
  cat << EOF > /usr/my.cnf
[mysqld]
datadir=/var/lib/mysql
log-bin = /var/lib/mysql/mysql-bin
port = 3306
user = mysql
symbolic-links=0
character-set-server = utf8
pid-file=/run/mysqld/mysqld.pid
EOF
  chown -R mysql:mysql /var/lib/mysql
  mysql_install_db --user=mysql
  nohup /bin/sh /usr/bin/mysqld_safe \
    --datadir=/var/lib/mysql \
    --socket=/run/mysqld/mysqld.sock \
    --pid-file=/run/mysqld/mysqld.pid \
    --basedir=/usr \
    --user=mysql \
    --skip-grant-tables \
    --skip-networking &
  while :
  do
    [ -r /run/mysqld/mysqld.pid ] || continue
    if ps -ef | grep -q $(cat /run/mysqld/mysqld.pid) ; then
        break
    fi
    sleep 10
  done
  cat << EOF > /tmp/setupdb.sql
USE mysql;
UPDATE mysql.user SET Password=PASSWORD('mantisbt') WHERE User='root';
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mantisbt';
FLUSH PRIVILEGES;
EOF
  /usr/bin/mysql < /tmp/setupdb.sql
  cat << EOF > /tmp/createdb.sql
CREATE DATABASE mantisbt DEFAULT CHARACTER SET utf8mb4;
EOF
  /usr/bin/mysql -uroot -pmantisbt < /tmp/createdb.sql
  kill `cat /run/mysqld/mysqld.pid`
  sleep 10
fi
exec /usr/bin/mysqld --defaults-file=/usr/my.cnf --console --user=mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

3. Mantis Bug TrackerとMariaDBコンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d

docker-compose.yml
version: "2"
services:
  mantisbt:
    image: mantisbt
    container_name: "mantisbt"
    volumes:
      - "mantisbt-data:/var/mantisbt"
      - "mantisbt-opt:/opt/mantisbt"
    ports:
      - "80:80"
    depends_on:
      - db
  db:
    image: mariadb-mantisbt
    container_name: "mantisbt-db"
    volumes:
      - "db-data:/var/lib/mysql"
volumes:
  db-data:
    driver: local
  mantisbt-data:
    driver: local
  mantisbt-opt:
    driver: local

4. ブラウザからhttp://<Dockerホスト名またはIP>/mantisbt/にアクセス
Installer Optionsで以下の項目を入力する
Type of Database: MySQL Improved
Hostname (for Database Server): db
Username (for Database): root
Password (for Database): mantisbt
Database name (for Database): mantisbt


〇動作環境
動作環境:arm32(Raspberry Pi 3 Model B+)
Raspberry Piでdocker-composeを使用するには、「Raspberry Pi Raspbian GNU/Linux 9 (stretch)にdocker-composeをインストールする」を参照してください。


○関連情報
・Mantis Bug Trackerに関する他の記事はこちらを参照してください。

・Raspberry Pi上のDockerに関する他の記事はこちらを参照してください。

Jupyterとpandasdmxを使用して、OECDのアンモニア排出量データを取得する

Jupyterとpandasdmxを使用して、OECDのアンモニア排出量(トン)データを取得してグラフ表示するには、以下のコードを実行します。

〇出力グラフ


〇コード
from pandasdmx import Request
import matplotlib.pyplot as plt

oecd = Request('OECD')
countries="CAN+USA+FRA"
data_response = oecd.data(resource_id='AEI_OTHER', key=countries + ".NH3TOT/all?startTime=1985&endTime=2017")
oecd_data = data_response.data

df = data_response.write(oecd_data.series, parse_time=True)
df = df.unstack(level=0).to_frame()
df.columns=['Tonnes']
df = df.reset_index()
df = df[["COUNTRY", "TIME_PERIOD", "Tonnes"]]
df.set_index(["COUNTRY", "TIME_PERIOD"], inplace=True)
ax = df.unstack(level=0).plot()
plt.xticks(rotation=90)
plt.legend(loc='best')
plt.show()

〇元データ
Agri-Environmental other indicators
https://stats.oecd.org/Index.aspx?DataSetCode=AEI_OTHER


○関連情報
・Pandasdmxに関する他の記事はこちらを参照してください。

Jupyterとwbdataで世界銀行の農村の電化率データを取得する

Jupyterとwbdataで、国別年別の農村の電化率を取得して、グラフ描画します。

〇出力画面


使用指標

EG.ELC.ACCS.RU.ZS
農村の電化率(農村人口の%) - Access to electricity, rural (% of rural population)

サンプルコード

以下のコードをJupyterから実行してください。
%matplotlib inline
import matplotlib.pyplot as plt
import wbdata

df = wbdata.api.get_dataframe({"EG.ELC.ACCS.RU.ZS":"Access to electricity, rual"}, country=["JP","IN", "MY"], convert_date=True)
df.unstack(level=0).plot()
plt.legend(loc='best')
plt.show()

関連情報

・世界銀行のデータを取得・可視化する記事のまとめは以下のページを参照してください。
世界銀行のデータを取得できるwbdataパッケージのまとめ

・wbdataパッケージをインストールしたコンテナを作成するには、以下のページを参照してください。
DockerでJupyter Notebookと世界銀行の情報が取得できるwbdataパッケージがインストールされたコンテナのイメージを作成する

・コンテナではなく、仮想マシンを構築する場合は、以下を参照します。
VagrantでJupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築する

・世界銀行のデータを取得することができるwbdataパッケージに関する他の記事はこちらを参照してください。

2018年11月26日月曜日

VagrantでFritzing0.9.3b、Cinnamon Desktop環境、XRDPがインストールされた仮想マシン(Debian Stretch/9.5)を構築する

Fritzingで回路図やブレッドボード上の電子部品の接続図などを描画する事ができます。
XRDPもインストールされているので、Windowsのリモートデスクトップで接続することができます。ユーザ名はvagrant、パスワードもvagrantでログオンできます。

〇Fritzingの画面


〇構築方法
以下のVagrantfileを使用して、Fritzing0.9.3b、Cinnamon Desktop環境、XRDPをインストールした仮想マシンを構築できます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95cinnamonfritzing093b"
config.vm.network "public_network", ip:"192.168.1.104", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db95cinnamonfritzing093b"
     vbox.gui = true
     vbox.cpus = 4
     vbox.memory = 4096
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
#DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get -y install task-japanese
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
cat << EOF > /etc/default/keyboard
XKBMODEL="pc106"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"
EOF
cat << EOF > /home/vagrant/.xsessionrc
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
sed -i -e "s/^EnabledIMList.*$/EnabledIMList=fcitx-keyboard-jp:True,mozc:True,fcitx-keyboard-us:False/" /home/vagrant/.config/fcitx/profile
fcitx-remote -r
fcitx -r -d
EOF
chown vagrant:vagrant .xsessionrc
apt-get -y install  xrdp fcitx-mozc task-cinnamon-desktop tigervnc-standalone-server
im-config -n fcitx
sudo -u vagrant bash -i -c "export DISPLAY=:0.0 && fcitx -r"
cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.org
cat /etc/xrdp/xrdp.ini.org | gawk '/\\[Globals\\]/,/\\[Xorg\\]/' | sed -e 's/\\[Xorg\\]//' > /etc/xrdp/xrdp.ini
cat << EOF >> /etc/xrdp/xrdp.ini
[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
EOF
systemctl restart xrdp
systemctl enable xrdp


# install fritzing
wget "http://ftp.jp.debian.org/debian/pool/main/o/openssl/libssl1.0.0_1.0.2l-1~bpo8+1_amd64.deb"
sudo dpkg -i libssl1.0.0_1.0.2l-1~bpo8+1_amd64.deb
wget http://fritzing.org/download/0.9.3b/linux-64bit/fritzing-0.9.3b.linux.AMD64.tar.bz2
tar jxf fritzing-0.9.3b.linux.AMD64.tar.bz2
mv fritzing-0.9.3b.linux.AMD64 /opt/fritzing
cat << EOF >> /usr/share/applications/fritzing.desktop
[Desktop Entry]
Version=0.9.3b
Name=Fritzing
Exec=/opt/fritzing/Fritzing
Icon=/opt/fritzing/icons/fritzing_icon.png
Terminal=false
Type=Application
Categories=Development;IDE;
StartupNotify=true
EOF


init 5
SHELL
end


○関連情報
・Fritzingに関する他の記事はこちらを参照してください。

Jupyterとpandasdmxを使用して、OECDの農耕地面積データを取得する

Jupyterとpandasdmxを使用して、OECDの農耕地面積(千ヘクタール)データを取得してグラフ表示するには、以下のコードを実行します。

〇出力グラフ


〇コード
from pandasdmx import Request
import matplotlib.pyplot as plt

oecd = Request('OECD')
countries="JPN+USA+AUS"
data_response = oecd.data(resource_id='AEI_OTHER', key=countries + ".TOTAGR_LAND/all?startTime=1985&endTime=2017")
oecd_data = data_response.data

df = data_response.write(oecd_data.series, parse_time=True)
df = df.unstack(level=0).to_frame()
df.columns=['Hectares(K)']
df = df.reset_index()
df = df[["COUNTRY", "TIME_PERIOD", "Hectares(K)"]]
df.set_index(["COUNTRY", "TIME_PERIOD"], inplace=True)
ax = df.unstack(level=0).plot()
plt.xticks(rotation=90)
plt.legend(loc='best')
plt.show()

〇元データ
Agri-Environmental other indicators
https://stats.oecd.org/Index.aspx?DataSetCode=AEI_OTHER


○関連情報
・Pandasdmxに関する他の記事はこちらを参照してください。

Jupyterとwbdataで世界銀行の商用サービス輸入データを取得する

Jupyterとwbdataで、国別年別の商用サービス輸入データを取得して、グラフ描画します。

〇出力画面


使用指標

TM.VAL.SERV.CD.WT
商用サービス輸入(USD) - Commercial service imports (current US$)

サンプルコード

以下のコードをJupyterから実行してください。
%matplotlib inline
import matplotlib.pyplot as plt
import wbdata

df = wbdata.api.get_dataframe({"TM.VAL.SERV.CD.WT":"Commercial service imports"}, country=["JP","US","AU"], convert_date=True)
df.unstack(level=0).plot()
plt.legend(loc='best')
plt.show()

関連情報

・世界銀行のデータを取得・可視化する記事のまとめは以下のページを参照してください。
世界銀行のデータを取得できるwbdataパッケージのまとめ

・wbdataパッケージをインストールしたコンテナを作成するには、以下のページを参照してください。
DockerでJupyter Notebookと世界銀行の情報が取得できるwbdataパッケージがインストールされたコンテナのイメージを作成する

・コンテナではなく、仮想マシンを構築する場合は、以下を参照します。
VagrantでJupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築する

・世界銀行のデータを取得することができるwbdataパッケージに関する他の記事はこちらを参照してください。

2018年11月25日日曜日

Jupyterとpandas、foliumで栃木県の電気自動車用急速充電器_設置個所一覧を地図に描画する

Jupyterとpandas、foliumを使用して、以下のコードで栃木県の電気自動車用急速充電器_設置個所一覧を地図に描画する事ができます。

〇出力画面


〇サンプルコード
import folium
import pandas as pd
import math

df = pd.read_csv("http://tochigiken.jp/index.php?action=multidatabase_action_main_filedownload&download_flag=1&upload_id=920&metadata_id=3", encoding="cp932")
#display(df)
fm = folium.Map(location=[36.565725, 139.883565], zoom_start=10)

for i, dt in df.iterrows():
  if not math.isnan(dt['緯度']):
    folium.Marker(location=[dt['緯度'], dt['経度']], popup=dt['名称']).add_to(fm)
fm

〇元データ
栃木県-環境森林部環境森林政策課/情報システム課
http://tochigiken.jp/index.php?key=mu4e8qd81-20#_20

Jupyterとpandasdmxを使用して、OECDの家畜別肥料生産(manure)のデータを取得する

Jupyterとpandasdmxを使用して、OECDの家畜別肥料生産(manure)のデータを取得してグラフ表示するには、以下のコードを実行します。

〇出力グラフ


〇コード
from pandasdmx import Request
import matplotlib.pyplot as plt

oecd = Request('OECD')
countries="JPN"
data_response = oecd.data(resource_id='AEI_NUTRIENTS', key=countries + ".A11+A12+A13+A14+A19.NITROGEN/all?startTime=1990&endTime=2017")
oecd_data = data_response.data

df = data_response.write(oecd_data.series, parse_time=True)
df = df.unstack(level=0).to_frame()
df.columns=['Tonnes']
df = df.reset_index()
df = df[["INDICATOR", "TIME_PERIOD", "Tonnes"]]
df.set_index(["INDICATOR", "TIME_PERIOD"], inplace=True)
df = df.rename(index={'A11':'Total Cattle', 'A12':'Total Pigs', 'A13':'Total Sheep and Goats', 'A14':'Total Poultry', 'A19':'Total Other Livestock'})
ax = df.unstack(level=0).plot()
plt.xticks(rotation=90)
plt.legend(loc='best')
plt.show()

〇元データ
Agri-Environmental indicators: Nutrients
https://stats.oecd.org/Index.aspx?DataSetCode=AEI_NUTRIENTS


○関連情報
・Pandasdmxに関する他の記事はこちらを参照してください。

Jupyterとwbdataで世界銀行の運送サービスデータを取得する

Jupyterとwbdataで、国別年別の運送サービス(サービス輸出比, 国際収支)データを取得して、グラフ描画します。

〇出力画面


使用指標

BX.GSR.TRAN.ZS
運送サービス(サービス輸出比, 国際収支) - Transport services (% of service exports, BoP)

サンプルコード

以下のコードをJupyterから実行してください。
%matplotlib inline
import matplotlib.pyplot as plt
import wbdata

df = wbdata.api.get_dataframe({"BX.GSR.TRAN.ZS":"Transport services"}, country=["JP","US","FR"], convert_date=True)
df.unstack(level=0).plot()
plt.legend(loc='best')
plt.show()

関連情報

・世界銀行のデータを取得・可視化する記事のまとめは以下のページを参照してください。
世界銀行のデータを取得できるwbdataパッケージのまとめ

・wbdataパッケージをインストールしたコンテナを作成するには、以下のページを参照してください。
DockerでJupyter Notebookと世界銀行の情報が取得できるwbdataパッケージがインストールされたコンテナのイメージを作成する

・コンテナではなく、仮想マシンを構築する場合は、以下を参照します。
VagrantでJupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築する

・世界銀行のデータを取得することができるwbdataパッケージに関する他の記事はこちらを参照してください。

2018年11月24日土曜日

Raspberry Pi上のDockerでVanilla Forums 2.6.3とMariaDBがインストールされたコンテナ(Alpine 3.8)を構築する

Vanilla ForumsはPHP製の掲示板アプリケーションです。

○Vanilla Forumsの画面


○構築方法
以下の手順で、Vanilla Forums2.6.3とMariaDBのコンテナを構築・実行します。

1. Vanilla Forumsイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t vanillaforums .

Dockerfile
FROM alpine:3.8
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php7-apache2 php7-pdo php7-mysqli php7-pdo_mysql php7-intl php7-mcrypt php7-mbstring php7-session php7-curl php7-json php7-xml php7-zip php7-tokenizer php7-ctype openssl openrc unzip \
  && rm -rf /var/cache/apk/* \
  && mkdir -p /opt/vanillaforums \
  && wget https://open.vanillaforums.com/get/vanilla-core-2.6.3.zip -P /opt/vanillaforums \
  && unzip /opt/vanillaforums/vanilla-core-2.6.3.zip \
  && rm -f /opt/vanillaforums/vanilla-core-2.6.3.zip \
  && chown -R apache:apache /opt/vanillaforums \
  && ln -s  /opt/vanillaforums /var/www/localhost/htdocs \
  && mkdir -p /run/apache2 \
EXPOSE 80
VOLUME /opt/vanillaforums
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

2. Vanilla Forums用のMariaDBイメージの作成(Dockerfile-mariadbとsetupdb.shのあるディレクトリで実行)
docker build -f Dockerfile-mariadb -t mariadb-vanillaforums .

Dockerfile-mariadb
FROM alpine:3.8
COPY ./setupdb.sh /
RUN apk --no-cache add mariadb mariadb-client \
  && addgroup mysql mysql \
  && chmod +x /setupdb.sh
VOLUME /var/lib/mysql
EXPOSE 3306
ENTRYPOINT ["/setupdb.sh"]

setupdb.sh
#!/bin/sh
if [ ! -d "/run/mysqld" ]; then
  mkdir -p /run/mysqld
  chown -R mysql:mysql /run/mysqld
fi
if [ ! -e /usr/my.cnf ]; then
  cat << EOF > /usr/my.cnf
[mysqld]
datadir=/var/lib/mysql
log-bin = /var/lib/mysql/mysql-bin
port = 3306
user = mysql
symbolic-links=0
character-set-server = utf8mb4
pid-file=/run/mysqld/mysqld.pid
EOF
  chown -R mysql:mysql /var/lib/mysql
  mysql_install_db --user=mysql
  nohup /bin/sh /usr/bin/mysqld_safe \
    --datadir=/var/lib/mysql \
    --socket=/run/mysqld/mysqld.sock \
    --pid-file=/run/mysqld/mysqld.pid \
    --basedir=/usr \
    --user=mysql \
    --skip-grant-tables \
    --skip-networking &
  while :
  do
    [ -r /run/mysqld/mysqld.pid ] || continue
    if ps -ef | grep -q $(cat /run/mysqld/mysqld.pid) ; then
        break
    fi
    sleep 10
  done
  cat << EOF > /tmp/setupdb.sql
USE mysql;
UPDATE mysql.user SET Password=PASSWORD('vanillaforums') WHERE User='root';
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'vanillaforums';
FLUSH PRIVILEGES;
EOF
  /usr/bin/mysql < /tmp/setupdb.sql
  cat << EOF > /tmp/createdb.sql
CREATE DATABASE vanillaforums DEFAULT CHARACTER SET utf8mb4;
EOF
  /usr/bin/mysql -uroot -pvanillaforums < /tmp/createdb.sql
  kill `cat /run/mysqld/mysqld.pid`
  sleep 10
fi
exec /usr/bin/mysqld --defaults-file=/usr/my.cnf --console --user=mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

3. Vanilla ForumsとMariaDBLコンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d

docker-compose.yml
version: "2"
services:
  vanillaforums:
    image: vanillaforums
    container_name: "vanillaforums"
    volumes:
      - "vanillaforums-data:/opt/vanillaforums"
    ports:
      - "80:80"
    depends_on:
      - db
  db:
    image: mariadb-vanillaforums
    container_name: "vanillaforums-db"
    volumes:
      - "db-data:/var/lib/mysql"
volumes:
  db-data:
    driver: local
  vanillaforums-data:
    driver: local

3. ブラウザからhttp://<Dockerホスト名またはIP>/vanillaforums/にアクセス
Installer画面で以下の項目を入力し、「Continue」をクリックする
Database Host: db
Database Name: vanillaforums
Database User: root
Database Password: vanillaforums
他の項目は好みに合わせて入力


〇動作環境
動作環境:arm32(Raspberry Pi 3 Model B+)
Raspberry Piでdocker-composeを使用するには、「Raspberry Pi Raspbian GNU/Linux 9 (stretch)にdocker-composeをインストールする」を参照してください。

○関連情報
・Vanilla Forumsに関する他の情報はこちらを参照してください。

・Raspberry Pi上のDockerに関する他の記事はこちらを参照してください。

Jupyterとpandasdmxを使用して、OECDの肥料(fertilizers)投入データを取得する

Jupyterとpandasdmxを使用して、OECDの肥料(fertilizers)投入データ(窒素・リン)を取得してグラフ表示するには、以下のコードを実行します。

〇出力グラフ


〇コード
from pandasdmx import Request
import matplotlib.pyplot as plt

oecd = Request('OECD')
countries="JPN"
data_response = oecd.data(resource_id='AEI_NUTRIENTS', key=countries + ".F1.NITROGEN+PHOSPHORUS/all?startTime=1990&endTime=2017")
oecd_data = data_response.data

df = data_response.write(oecd_data.series, parse_time=True)
df = df.unstack(level=0).to_frame()
df.columns=['Tonnes']
df = df.reset_index()
df = df[["NUTRIENTS", "TIME_PERIOD", "Tonnes"]]
df.set_index(["NUTRIENTS", "TIME_PERIOD"], inplace=True)
ax = df.unstack(level=0).plot()
plt.xticks(rotation=90)
plt.legend(loc='best')
plt.show()

〇元データ
Agri-Environmental indicators: Nutrients
https://stats.oecd.org/Index.aspx?DataSetCode=AEI_NUTRIENTS


○関連情報
・Pandasdmxに関する他の記事はこちらを参照してください。

Jupyterとwbdataで世界銀行の都市人口増加(年率)データを取得する

Jupyterとwbdataで、国別年別の都市人口増加データを取得して、グラフ描画します。

〇出力画面


使用指標

SP.URB.GROW
都市人口増加(年率) - Urban population growth (annual %)

サンプルコード

以下のコードをJupyterから実行してください。
%matplotlib inline
import matplotlib.pyplot as plt
import wbdata

df = wbdata.api.get_dataframe({"SP.URB.GROW":"Urban population growth"}, country=["JP","US","FR"], convert_date=True)
df.unstack(level=0).plot()
plt.legend(loc='best')
plt.show()

関連情報

・世界銀行のデータを取得・可視化する記事のまとめは以下のページを参照してください。
世界銀行のデータを取得できるwbdataパッケージのまとめ

・wbdataパッケージをインストールしたコンテナを作成するには、以下のページを参照してください。
DockerでJupyter Notebookと世界銀行の情報が取得できるwbdataパッケージがインストールされたコンテナのイメージを作成する

・コンテナではなく、仮想マシンを構築する場合は、以下を参照します。
VagrantでJupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築する

・世界銀行のデータを取得することができるwbdataパッケージに関する他の記事はこちらを参照してください。

2018年11月23日金曜日

VagrantでProcessing3.4、Xfce Desktop環境、XRDPがインストールされた仮想マシン(CentOS7.5)を構築する

Processingでビジュアルな表現のプログラミングを学ぶことができます。
XRDPもインストールされているので、Windowsのリモートデスクトップで接続することができます。ユーザ名はvagrant、パスワードもvagrantでログオンできます。

〇Processingの画面


〇構築方法
以下のVagrantfileを使用して、Processing3.4、Xfce Desktop環境、XRDPをインストールした仮想マシンを構築できます。
日本語を表示させるためには、ファイルメニュー->設定を選択して、エディタとコンソールのフォントでIPAゴシックを選択します。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/centos-7.5"
  config.vm.hostname = "co75xfceprocessing34"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "co75xfceprocessing34"
     vbox.gui = true
     vbox.cpus = 4
     vbox.memory = 4096
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "public_network", ip: "192.168.1.103", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
localectl set-locale LANG=ja_JP.UTF-8
yum install -y epel-release
yum check-update
yum -y update

yum -y groupinstall yum groupinstall "X Window System"  Xfce "Input Methods"
yum -y install vlgothic-*  ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts xrdp unzip

cat << EOF >> /home/vagrant/.Xclients
export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus
ibus-daemon -drx
exec /usr/bin/xfce4-session
EOF
chmod +x /home/vagrant/.Xclients
chown vagrant:vagrant /home/vagrant/.Xclients

# hide dialogs
sudo sh -c "echo 'X-GNOME-Autostart-enabled=false' >> /etc/xdg/autostart/gnome-welcome-tour.desktop"
sudo sh -c "echo 'X-GNOME-Autostart-enabled=false' >> /etc/xdg/autostart/gnome-software-service.desktop"
sudo sh -c "echo 'X-GNOME-Autostart-enabled=false' >> /etc/xdg/autostart/gnome-settings-daemon.desktop"
sudo systemctl disable initial-setup-graphical.service
sudo systemctl disable initial-setup-text.service

systemctl set-default graphical.target

systemctl enable xrdp.service
systemctl start xrdp.service

# install java
yum -y install java-1.8.0-openjdk


# install processing
wget http://download.processing.org/processing-3.4-linux64.tgz
tar xvfz processing-3.4-linux64.tgz
mv processing-3.4 /opt
sudo -u vagrant /bin/bash << VG_EOF
/opt/processing-3.4/install.sh
VG_EOF

telinit 5
SHELL
end

Jupyterとpandasdmxを使用して、OECDの生産者支援推定(PSE)データを取得する

Jupyterとpandasdmxを使用して、OECDの生産者支援推定(PSE)データを取得してグラフ表示するには、以下のコードを実行します。

〇出力グラフ


〇コード
from pandasdmx import Request
import matplotlib.pyplot as plt

oecd = Request('OECD')
countries="JPN+USA+AUS"
data_response = oecd.data(resource_id='MON2018_REFERENCE_TABLE', key=countries + ".TO-PSE.USD/all?startTime=1986&endTime=2017")
oecd_data = data_response.data

df = data_response.write(oecd_data.series, parse_time=True)
df = df.unstack(level=0).to_frame()
df.columns=['PSE(millions USD)']
df = df.reset_index()
df = df[["LOCATION", "TIME_PERIOD", "PSE(millions USD)"]]
df.set_index(["LOCATION", "TIME_PERIOD"], inplace=True)
ax = df.unstack(level=0).plot()
plt.xticks(rotation=90)
plt.legend(loc='best')
plt.show()

〇元データ
2018 - Monitoring and evaluation : Reference Tables
https://stats.oecd.org/Index.aspx?DataSetCode=MON2018_REFERENCE_TABLE


○関連情報
・Pandasdmxに関する他の記事はこちらを参照してください。

Jupyterとwbdataで世界銀行の森林面積データ(平方km)を取得する

Jupyterとwbdataで、国別年別の森林面積データを取得して、グラフ描画します。

〇出力画面


使用指標

AG.LND.FRST.K2
森林面積(平方km) - Forest area (sq. km)

サンプルコード

以下のコードをJupyterから実行してください。
%matplotlib inline
import matplotlib.pyplot as plt
import wbdata

df = wbdata.api.get_dataframe({"AG.LND.FRST.K2":"Forest area (sq. km)d"}, country=["JP","US","CA"], convert_date=True)
df.unstack(level=0).plot()
plt.legend(loc='best')
plt.show()

関連情報

・世界銀行のデータを取得・可視化する記事のまとめは以下のページを参照してください。
世界銀行のデータを取得できるwbdataパッケージのまとめ

・wbdataパッケージをインストールしたコンテナを作成するには、以下のページを参照してください。
DockerでJupyter Notebookと世界銀行の情報が取得できるwbdataパッケージがインストールされたコンテナのイメージを作成する

・コンテナではなく、仮想マシンを構築する場合は、以下を参照します。
VagrantでJupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築する

・世界銀行のデータを取得することができるwbdataパッケージに関する他の記事はこちらを参照してください。

2018年11月22日木曜日

VagrantでNodeBox 3、KDE Desktop環境、XRDPがインストールされた仮想マシン(Debian Stretch/9.5)を構築する

NodeBox 3で効率的にデータの可視化を行うことができます。
XRDPもインストールされているので、Windowsのリモートデスクトップで接続することができます。ユーザ名はvagrant、パスワードもvagrantでログオンできます。

〇NodeBox3の画面

※初回実行は時間がかかります。

〇構築方法
以下のVagrantfileを使用して、NodeBox 3、KDE Desktop環境、XRDPをインストールした仮想マシンを構築できます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95kdenodebox"
config.vm.network "public_network", ip:"192.168.1.104", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db95kdenodebox"
     vbox.gui = true
     vbox.cpus = 4
     vbox.memory = 4096
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
#DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade

apt-get -y install task-japanese gawk
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
cat << EOF > /etc/default/keyboard
XKBMODEL="pc106"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"
EOF


cat << EOF > /home/vagrant/.xsessionrc
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
sed -i -e "s/^EnabledIMList.*$/EnabledIMList=mozc:True,fcitx-keyboard-jp:False,fcitx-keyboard-us:False/" /home/vagrant/.config/fcitx/profile
fcitx-remote -r
fcitx -r -d
EOF
chown vagrant:vagrant .xsessionrc


apt-get -y install  xrdp fcitx-mozc task-kde-desktop tigervnc-standalone-server fcitx-tools

apt-get -y install build-essential module-assistant dkms
wget http://download.virtualbox.org/virtualbox/5.2.6/VBoxGuestAdditions_5.2.6.iso
mount -o loop -t iso9660 VBoxGuestAdditions_5.2.6.iso /media/
/media/VBoxLinuxAdditions.run


export DISPLAY=:0.0
im-config -n fcitx
#sudo -u vagrant bash -i -c "export DISPLAY=:0.0 && fcitx -r"


cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.org
cat /etc/xrdp/xrdp.ini.org | awk '/\\[Globals\\]/,/\\[Xorg\\]/' | sed -e 's/\\[Xorg\\]//' > /etc/xrdp/xrdp.ini
cat << EOF >> /etc/xrdp/xrdp.ini
[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
EOF
systemctl restart xrdp
systemctl enable xrdp


# install NodeBox
apt-get -y install git-core openjdk-8-jdk ant
cd /opt
git clone git://github.com/nodebox/nodebox.git
cd /opt/nodebox
ant compile
ant bindir

cat << EOF > /usr/share/applications/nodebox.desktop
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=/usr/bin/ant -f /opt/nodebox/build.xml run
Icon=/opt/nodebox/artwork/nodebox-icon.svg
Name=nodebox
Categories=Development;
EOF


init 5
SHELL
end

Raspberry Pi上のDockerでselfoss2.1.8、MariaDBがインストールされたコンテナのイメージを作成する

selfossはPHP製のフィードリーダーです。

〇selfossの画面

※サンプルのRSS
http://serverarekore.blogspot.com/feeds/posts/default

○構築方法
以下の手順で、selfoss、MariaDBのコンテナを構築・実行します。

1. selfossイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t myselfoss .

Dockerfile
FROM alpine:3.8
ENV TZ=Asia/Tokyo
RUN  apk update \
  && apk add --no-cache apache2 php7-apache2 php7 php7-mysqli php7-pdo php7-pdo_mysql php7-mbstring php7-session php7-curl php7-json php7-xml php7-zip php7-ctype php7-dom php7-simplexml php7-iconv php7-zlib php7-gd openssl openrc \
  && rm -rf /var/cache/apk/* \
  && mkdir -p /opt/selfoss
WORKDIR /opt/selfoss
RUN wget https://github.com/SSilence/selfoss/releases/download/2.18/selfoss-2.18.zip \
  && unzip selfoss-2.18.zip \
  && rm -f selfoss-2.18.zip \
  && cp defaults.ini config.ini \
  && sed -i -e 's/db_type=sqlite/db_type=mysql/' config.ini \
  && sed -i -e 's/db_host=localhost/db_host=db/' config.ini \
  && sed -i -e 's/db_password=/db_password=selfoss/' config.ini \
  && sed -i -e 's/db_port=/db_port=3306/' config.ini \
  && chown -R apache:apache /opt/selfoss \
  && mkdir -p /run/apache2 \
  && echo $'\n\
Options Indexes FollowSymLinks \n\
AllowOverride All\n\
Require all granted\n\
' >> /etc/apache2/httpd.conf \
  && ln -s /opt/selfoss /var/www/localhost/htdocs \
  && sed -i -e 's|#LoadModule rewrite_module modules/mod_rewrite.so|LoadModule rewrite_module modules/mod_rewrite.so|' /etc/apache2/httpd.conf \
  && echo '0,10,20,30,40,50 * * * * /usr/bin/php /opt/selfoss/cliupdate.php' >> /var/spool/cron/crontabs/root
EXPOSE 80
VOLUME /opt/selfoss
CMD ["sh", "-c", "crond -d 8 && /usr/sbin/httpd -D FOREGROUND"]

2. selfoss用のMariaDBイメージの作成(Dockerfile-mariadbとsetupdb.shのあるディレクトリで実行)
docker build -f Dockerfile-mariadb -t mariadb-selfoss .

Dockerfile-mariadb
FROM alpine:3.8
COPY ./setupdb.sh /
RUN apk --no-cache add mariadb mariadb-client \
  && addgroup mysql mysql \
  && chmod +x /setupdb.sh
VOLUME /var/lib/mysql
EXPOSE 3306
ENTRYPOINT ["/setupdb.sh"]

setupdb.sh
#!/bin/sh
if [ ! -d "/run/mysqld" ]; then
  mkdir -p /run/mysqld
  chown -R mysql:mysql /run/mysqld
fi
if [ ! -e /usr/my.cnf ]; then
  cat << EOF > /usr/my.cnf
[mysqld]
datadir=/var/lib/mysql
log-bin = /var/lib/mysql/mysql-bin
port = 3306
user = mysql
symbolic-links=0
character-set-server = utf8mb4
pid-file=/run/mysqld/mysqld.pid
EOF
  chown -R mysql:mysql /var/lib/mysql
  mysql_install_db --user=mysql
  nohup /bin/sh /usr/bin/mysqld_safe \
    --datadir=/var/lib/mysql \
    --socket=/run/mysqld/mysqld.sock \
    --pid-file=/run/mysqld/mysqld.pid \
    --basedir=/usr \
    --user=mysql \
    --skip-grant-tables \
    --skip-networking &
  while :
  do
    [ -r /run/mysqld/mysqld.pid ] || continue
    if ps -ef | grep -q $(cat /run/mysqld/mysqld.pid) ; then
        break
    fi
    sleep 10
  done
  cat << EOF > /tmp/setupdb.sql
USE mysql;
UPDATE mysql.user SET Password=PASSWORD('selfoss') WHERE User='root';
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'selfoss';
FLUSH PRIVILEGES;
EOF
  /usr/bin/mysql < /tmp/setupdb.sql
  cat << EOF > /tmp/createdb.sql
CREATE DATABASE selfoss DEFAULT CHARACTER SET utf8mb4;
EOF
  /usr/bin/mysql -uroot -pselfoss < /tmp/createdb.sql
  kill `cat /run/mysqld/mysqld.pid`
  sleep 10
fi
exec /usr/bin/mysqld --defaults-file=/usr/my.cnf --console --user=mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

3. selfossとMySQLコンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d

docker-compose.yml
version: "2"
services:
  selfoss:
    image: myselfoss
    container_name: "selfoss"
    volumes:
      - "selfoss-data:/opt/selfoss"
    ports:
      - "80:80"
    depends_on:
      - db
  db:
    image: mariadb-selfoss
    container_name: "selfoss-db"
    volumes:
      - "db-data:/var/lib/mysql"
    ports:
      - "3306:3306"
volumes:
  db-data:
    driver: local
  selfoss-data:
    driver: local

4. ブラウザからhttp://<Dockerホスト名またはIP>/selfoss/にアクセス

〇動作環境
動作環境:arm32(Raspberry Pi 3 Model B+)
Raspberry Piでdocker-composeを使用するには、「Raspberry Pi Raspbian GNU/Linux 9 (stretch)にdocker-composeをインストールする」を参照してください。


○関連情報
・selfossに関する他の記事はこちらを参照してください。

・Raspberry Pi上のDockerに関する他の記事はこちらを参照してください。

Jupyterとpandasdmxを使用して、OECDの農業観測の米生産・輸入・輸出データを取得する

Jupyterとpandasdmxを使用して、OECDの農業観測の米生産・輸入・輸出データを取得してグラフ表示するには、以下のコードを実行します。

〇出力グラフ


〇コード
from pandasdmx import Request
import matplotlib.pyplot as plt

oecd = Request('OECD')
countries="JPN"
data_response = oecd.data(resource_id='HIGH_AGLINK_2018', key=countries + ".RI.QP+IM+EX/all?startTime=2017&endTime=2027")
oecd_data = data_response.data

df = data_response.write(oecd_data.series, parse_time=True)
df = df.unstack(level=0).to_frame()
df.columns=['Rice(Kt)']
df = df.reset_index()
df = df[["VARIABLE", "TIME_PERIOD", "Rice(Kt)"]]
df.set_index(["VARIABLE", "TIME_PERIOD"], inplace=True)
df = df.rename(index={'EX':'Export', 'IM':'Import', 'QP':'Production'})
ax = df.unstack(level=0).plot()
plt.xticks(rotation=90)
plt.legend(loc='best')
plt.show()

〇元データ
OECD-FAO Agricultural Outlook 2018-2027
https://stats.oecd.org/Index.aspx?DataSetCode=HIGH_AGLINK_2018


○関連情報
・Pandasdmxに関する他の記事はこちらを参照してください。

Jupyterとwbdataで世界銀行の耕地データを取得する

Jupyterとwbdataで、国別年別の耕地データを取得して、グラフ描画します。

〇出力画面


使用指標

AG.LND.ARBL.ZS
耕地(国土面積比) - Arable land (% of land area)

サンプルコード

以下のコードをJupyterから実行してください。
%matplotlib inline
import matplotlib.pyplot as plt
import wbdata

df = wbdata.api.get_dataframe({"AG.LND.ARBL.ZS":"Percent of arable land"}, country=["JP","US","DE"], convert_date=True)
df.unstack(level=0).plot()
plt.legend(loc='best')
plt.show()

関連情報

・世界銀行のデータを取得・可視化する記事のまとめは以下のページを参照してください。
世界銀行のデータを取得できるwbdataパッケージのまとめ

・wbdataパッケージをインストールしたコンテナを作成するには、以下のページを参照してください。
DockerでJupyter Notebookと世界銀行の情報が取得できるwbdataパッケージがインストールされたコンテナのイメージを作成する

・コンテナではなく、仮想マシンを構築する場合は、以下を参照します。
VagrantでJupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築する

・世界銀行のデータを取得することができるwbdataパッケージに関する他の記事はこちらを参照してください。

2018年11月21日水曜日

Jupyterとpandas、foliumで埼玉県ふじみ野市の公共施設を地図に描画する

Jupyterとpandas、foliumを使用して、以下のコードで埼玉県ふじみ野市の公共施設を地図に描画する事ができます。

〇出力画面


〇サンプルコード
import folium
import pandas as pd
import math

df = pd.read_csv("http://www.city.fujimino.saitama.jp/doc/2016060100237/file_contents/koukyou.csv", encoding="cp932")
#display(df)
fm = folium.Map(location=[35.879538, 139.519764], zoom_start=14)

for i, dt in df.iterrows():
  if not math.isnan(dt['施設_緯度']):
    folium.Marker(location=[dt['施設_緯度'], dt['施設_経度']], popup=dt['名称']).add_to(fm)
fm

〇元データ
【ふじみ野市】公共施設一覧
https://opendata.pref.saitama.lg.jp/data/dataset/http-www-city-fujimino-saitama-jp-doc-2016060100237

Jupyterとdatapackageで米国の消費者物価指数データを取得する

Jupyterとdatapackageで、米国の消費者物価指数データを取得してグラフ描画するには、以下のコードを実行します。

〇グラフ出力


サンプルコード

以下のサンプルコードで米国の消費者物価指数を取得してグラフ表示します。
%matplotlib inline
import matplotlib.pyplot as plt
from datapackage import Package
import pandas as pd

package = Package('https://datahub.io/core/cpi-us/datapackage.json')

for resource in package.resources:
  if resource.name == "cpiai_csv":
    df = pd.read_csv(resource.descriptor['path'], index_col=['Date'], parse_dates=True)
    df = df[["Index"]]
    df = df.query("Date >= '2000-01-01'")
    ax = df.plot()
    plt.xticks(rotation=90)
    plt.legend(loc='best')
    plt.show()

動作確認バージョン

datapackage=1.14.1 (2020/07/15確認)

関連情報

様々なデータを取得できるdatapackageのまとめ

・datapackageに関する他の記事はこちらを参照してください。

Jupyterとwbdataで世界銀行の技術協力補助金データを取得する

Jupyterとwbdataで、国別年別の技術協力補助金データを取得して、グラフ描画します。

〇出力画面


使用指標

BX.GRT.TECH.CD.WD
技術協力補助金 - Technical cooperation grants (BoP, current US$)

サンプルコード

以下のコードをJupyterから実行してください。
%matplotlib inline
import matplotlib.pyplot as plt
import wbdata

df = wbdata.api.get_dataframe({"BX.GRT.TECH.CD.WD":"Technical cooperation grants"}, country=["JP","US","GB"], convert_date=True)
df.unstack(level=0).plot()
plt.legend(loc='best')
plt.show()

関連情報

・世界銀行のデータを取得・可視化する記事のまとめは以下のページを参照してください。
世界銀行のデータを取得できるwbdataパッケージのまとめ

・wbdataパッケージをインストールしたコンテナを作成するには、以下のページを参照してください。
DockerでJupyter Notebookと世界銀行の情報が取得できるwbdataパッケージがインストールされたコンテナのイメージを作成する

・コンテナではなく、仮想マシンを構築する場合は、以下を参照します。
VagrantでJupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築する

・世界銀行のデータを取得することができるwbdataパッケージに関する他の記事はこちらを参照してください。

2018年11月20日火曜日

Jupyterとpandas、foliumで栃木県のおもいやり駐車スペースつぎつぎ事業 協力施設一覧を地図に描画する

Jupyterとpandas、foliumを使用して、以下のコードで栃木県のおもいやり駐車スペースつぎつぎ事業 協力施設一覧を地図に描画する事ができます。

〇出力画面


〇サンプルコード
import folium
import pandas as pd
import math

df = pd.read_csv("http://tochigiken.jp/index.php?action=multidatabase_action_main_filedownload&download_flag=1&upload_id=922&metadata_id=3", encoding="cp932")
#display(df)
fm = folium.Map(location=[36.565725, 139.883565], zoom_start=10)

for i, dt in df.iterrows():
  if not math.isnan(dt['緯度']):
    folium.Marker(location=[dt['緯度'], dt['経度']], popup=dt['協力施設名']+dt['所在地']).add_to(fm)
fm

〇元データ
栃木県-保健福祉部保健福祉課
http://tochigiken.jp/index.php?key=mubnfgzhj-20#_20

Jupyterとwbdataで世界銀行の農村人口データを取得する

Jupyterとwbdataで、国別年別の農村人口データを取得して、グラフ描画します。

〇出力画面


使用指標

SP.RUR.TOTL
農村人口 - Rural population

サンプルコード

以下のコードをJupyterから実行してください。
%matplotlib inline
import matplotlib.pyplot as plt
import wbdata

df = wbdata.api.get_dataframe({"SP.RUR.TOTL":"Rural population"}, country=["JP","US", "CN"], convert_date=True)
df.unstack(level=0).plot()
plt.legend(loc='best')
plt.show()

関連情報

・世界銀行のデータを取得・可視化する記事のまとめは以下のページを参照してください。
世界銀行のデータを取得できるwbdataパッケージのまとめ

・wbdataパッケージをインストールしたコンテナを作成するには、以下のページを参照してください。
DockerでJupyter Notebookと世界銀行の情報が取得できるwbdataパッケージがインストールされたコンテナのイメージを作成する

・コンテナではなく、仮想マシンを構築する場合は、以下を参照します。
VagrantでJupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築する

・世界銀行のデータを取得することができるwbdataパッケージに関する他の記事はこちらを参照してください。

VagrantでZotero、Xfce Desktop環境、XRDPがインストールされた仮想マシン(Debian Stretch/9.5)を構築する

Zoteroで研究資料の収集・管理・引用・共有をする事ができます。

〇Zoteroの画面


○構築方法
以下のVagrantfileを使用して、Zotero、Xfce Desktop環境、XRDPをインストールした仮想マシン(Debian Stretch/9.5)を構築できます。
XRDPがインストールされているので、Windowsのリモートデスクトップで接続することができます。ユーザ名はvagrant、パスワードもvagrantでログオンできます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95xfcezotero"
config.vm.network "public_network", ip:"192.168.1.101", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db95xfcezotero"
     vbox.gui = true
     vbox.cpus = 4
     vbox.memory = 4096
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get -y install task-japanese gawk
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
cat << EOF > /etc/default/keyboard
XKBMODEL="pc106"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"
EOF

cat << EOF > /home/vagrant/.xsessionrc
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
sed -i -e "s/^EnabledIMList.*$/EnabledIMList=fcitx-keyboard-jp:True,mozc:True,fcitx-keyboard-us:False/" /home/vagrant/.config/fcitx/profile
fcitx-remote -r
fcitx -r -d
#startxfce4 &
EOF
chown vagrant:vagrant .xsessionrc

apt-get -y install  xrdp fcitx-mozc task-xfce-desktop tigervnc-standalone-server
im-config -n fcitx
sudo -u vagrant bash -i -c "export DISPLAY=:0.0 && fcitx -r"

cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.org
cat /etc/xrdp/xrdp.ini.org | gawk '/\\[Globals\\]/,/\\[Xorg\\]/' | sed -e 's/\\[Xorg\\]//' > /etc/xrdp/xrdp.ini
cat << EOF >> /etc/xrdp/xrdp.ini
[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
EOF
systemctl restart xrdp
systemctl enable xrdp


wget 'https://www.zotero.org/download/client/dl?channel=release&platform=linux-x86_64&version=5.0.58' -O Zotero-5.0.58_linux-x86_64.tar.bz2
tar jxvf Zotero-5.0.58_linux-x86_64.tar.bz2
mv Zotero_linux-x86_64 /opt

cat << EOF >> /usr/share/applications/zotero.desktop
[Desktop Entry]
Name=Zotero
Exec=/opt/Zotero_linux-x86_64/zotero
Icon=/opt/Zotero_linux-x86_64/zotero.ico
Type=Application
Terminal=false
Categories=Office;
MimeType=text/plain
EOF

init 5
SHELL
end


○関連情報
・Zoteroに関する他の記事はこちらを参照してください。

2018年11月19日月曜日

Raspberry Pi上のDockerでTextpattern4.7.1とMariaDBがインストールされたコンテナ(Alpine 3.8)を構築する

TextpatternはPHP製のCMSです。
以下の手順で、TextpatternとMariaDBのコンテナを構築・実行します。

○Textpatternの画面


○構築方法
1. Textpatternイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t textpattern .

Dockerfile
FROM alpine:3.8
WORKDIR /
RUN  apk update \
  && apk add --nocache apache2 php7-apache2 php7-mysqli php7-pdo php7-mbstring php7-session php7-curl php7-json php7-xml php7-simplexml php7-zip openssl openrc \
  && rm -rf /var/cache/apk/* \
  && wget https://textpattern.com/File+download/86/textpattern-4.7.1.tar.gz \
  && tar xvfz textpattern-4.7.1.tar.gz \
  && rm -f textpattern-4.7.1.tar.gz \
  && mkdir /opt \
  && mv textpattern-4.7.1 /opt/textpattern \
  && chown -R apache:apache /opt/textpattern \
  && mkdir -p /run/apache2 \
  && echo $'\n\
Options Indexes FollowSymLinks \n\
AllowOverride All\n\
Require all granted\n\
' >> /etc/apache2/httpd.conf \
  && ln -s /opt/textpattern /var/www/localhost/htdocs \
  && sed -i -e 's|#LoadModule rewrite_module modules/mod_rewrite.so|LoadModule rewrite_module modules/mod_rewrite.so|' /etc/apache2/httpd.conf
EXPOSE 80
VOLUME /opt/textpattern
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

2. Textpattern用のMariaDBイメージの作成(Dockerfile-mariadbとsetupdb.shのあるディレクトリで実行)
docker build -f Dockerfile-mariadb -t mariadb-textpattern .

Dockerfile-mariadb
FROM alpine:3.8
COPY ./setupdb.sh /
RUN apk --no-cache add mariadb mariadb-client \
  && addgroup mysql mysql \
  && chmod +x /setupdb.sh
VOLUME /var/lib/mysql
EXPOSE 3306
ENTRYPOINT ["/setupdb.sh"]
setupdb.sh
#!/bin/sh
if [ ! -d "/run/mysqld" ]; then
  mkdir -p /run/mysqld
  chown -R mysql:mysql /run/mysqld
fi
if [ ! -e /usr/my.cnf ]; then
  cat << EOF > /usr/my.cnf
[mysqld]
datadir=/var/lib/mysql
log-bin = /var/lib/mysql/mysql-bin
port = 3306
user = mysql
symbolic-links=0
character-set-server = utf8
pid-file=/run/mysqld/mysqld.pid
EOF
  chown -R mysql:mysql /var/lib/mysql
  mysql_install_db --user=mysql
  nohup /bin/sh /usr/bin/mysqld_safe \
    --datadir=/var/lib/mysql \
    --socket=/run/mysqld/mysqld.sock \
    --pid-file=/run/mysqld/mysqld.pid \
    --basedir=/usr \
    --user=mysql \
    --skip-grant-tables \
    --skip-networking &
  while :
  do
    [ -r /run/mysqld/mysqld.pid ] || continue
    if ps -ef | grep -q $(cat /run/mysqld/mysqld.pid) ; then
        break
    fi
    sleep 10
  done
  cat << EOF > /tmp/setupdb.sql
USE mysql;
UPDATE mysql.user SET Password=PASSWORD('textpattern') WHERE User='root';
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'textpattern';
FLUSH PRIVILEGES;
EOF
  /usr/bin/mysql < /tmp/setupdb.sql
  cat << EOF > /tmp/createdb.sql
CREATE DATABASE textpattern DEFAULT CHARACTER SET utf8mb4;
EOF
  /usr/bin/mysql -uroot -ptextpattern < /tmp/createdb.sql
  kill `cat /run/mysqld/mysqld.pid`
  sleep 10
fi
exec /usr/bin/mysqld --defaults-file=/usr/my.cnf --console --user=mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

3. TextpatternとMariaDBコンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d

docker-compose.yml
version: "2"
services:
  textpattern:
    image: textpattern
    container_name: "textpattern"
    volumes:
      - "textpattern-data:/opt/textpattern"
    ports:
      - "80:80"
    depends_on:
      - db
  db:
    image: mariadb-textpattern
    container_name: "textpattern-db"
    volumes:
      - "db-data:/var/lib/mysql"
volumes:
  db-data:
    driver: local
  textpattern-data:
    driver: local

4. ブラウザからhttp://<Dockerホスト名またはIP>/textpattern/textpattern/setup/index.phpにアクセス
インストール言語として日本語を選択して、submitボタンをクリックする


5. 以下の項目を入力し、「次へ」ボタンをクリックする
MySQLログイン: root
MySQLパスワード:textpattern
MySQLサーバ:db
MySQLデータベース:textpattern
テーブルプリフィックス:(空のまま)


6. 画面に表示されたconfig.phpの内容をコピーして、config.phpとして保存して、以下のコマンドを実行する
docker cp config.php textpattern:/opt/textpattern/textpattern
実行後、「行いました!」ボタンをクリックする


7. 管理者ユーザの情報を入力、管理ページのテーマを選択して「次へ」ボタンをクリックする


8. 完了画面から「今すぐログイン」ボタンをクリックする


〇動作環境
・arm32(Raspberry Pi 3 Model B+)

○関連情報
・Textpatternに関する他の記事はこちらを参照してください。

・Raspberry Piでdocker-composeを使用するには、「Raspberry Pi Raspbian GNU/Linux 9 (stretch)にdocker-composeをインストールする」を参照してください。

・Raspberry Pi上のDockerに関する他の記事はこちらを参照してください。