2018年10月31日水曜日

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

Stellariumはパソコン上で星座を表示できるプラネタリウムソフトです。
この仮想マシンにXRDPもインストールされているので、Windowsのリモートデスクトップで接続することができます。ユーザ名はvagrant、パスワードもvagrantでログオンできます。

〇Stellariumの画面


構築方法

以下のVagrantfileを使用して、Stellarium、Xfce Desktop環境をインストールした仮想マシンを構築できます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804xfcestellarium"
config.vm.network :public_network, ip:"192.168.1.103"
config.vm.network "private_network", ip: "192.168.55.103", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804xfcestellarium"
     vbox.gui = true
     vbox.cpus = 4
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get -y install language-pack-ja
sed -i.bak -e "s#http://archive.ubuntu.com/ubuntu/#http://ftp.jaist.ac.jp/pub/Linux/ubuntu/#g" /etc/apt/sources.list
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
apt-get -y install xrdp=0.9.5-2 fcitx-mozc xubuntu-desktop language-pack-ja language-pack-ja
im-config -n fcitx

apt-get -y install --install-recommends linux-generic-hwe-18.04 xserver-xorg-hwe-18.04
apt-get -y install virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11

sed -i -e "s/allowed_users=console/allowed_users=anybody/" /etc/X11/Xwrapper.config

echo "xfce4-session" > /home/vagrant/.xsession
apt-get -y purge light-locker


# install stellarium
add-apt-repository ppa:stellarium/stellarium-releases
sudo apt-get update
apt-get -y install stellarium


init 5
SHELL
end


関連情報

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

・Stellariumのプロジェクトwebサイト
https://stellarium.org/ja/

Jupyterとpandas、foliumで埼玉県越谷市の指定緊急避難場所を地図に描画する

Jupyterとpandas、foliumを使用して、以下のコードで埼玉県越谷市の指定緊急避難場所を地図に描画する事ができます。

〇出力画面


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

df = pd.read_csv("https://opendata.pref.saitama.lg.jp/data/dataset/be5070cf-c7bc-4c14-bb3d-beb078d08fb3/resource/51dc5206-3431-4650-a918-3be9e610fa6d/download/112224evacuationspace.csv", encoding="cp932")
#display(df)
fm = folium.Map(location=[35.891084, 139.790938], zoom_start=12)

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/hinanbasyo

Jupyterとdatapackageで月別のWTI原油価格データを取得する

Jupyterとdatapackageで、月別のWTI原油価格を取得してグラフ描画するには、以下のコードを実行します。

〇グラフ出力


サンプルコード

以下のコードで、月別のWTI原油価格を取得してグラフを描画します。
%matplotlib inline
import matplotlib.pyplot as plt
from datapackage import Package
import pandas as pd

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

for resource in package.resources:
  if resource.name == "wti-month_csv":
    df = pd.read_csv(resource.descriptor['path'],index_col='Date', parse_dates=True) 
    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で、国別年別の出生率データを取得して、グラフ描画します。

〇出力画面


使用指標

SP.DYN.TFRT.IN
出生率 - Fertility rate, total (births per women)

サンプルコード

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

df = wbdata.api.get_dataframe({"SP.DYN.TFRT.IN":"Fertility rate"}, country=["JP","DE", "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パッケージに関する他の記事はこちらを参照してください。

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

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

〇TagSpacesの画面


構築方法

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

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804xfcetagspaces"
config.vm.network :public_network, ip:"192.168.1.103"
config.vm.network "private_network", ip: "192.168.55.103", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804xfcetagspaces"
     vbox.gui = true
     vbox.cpus = 4
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get -y install language-pack-ja
sed -i.bak -e "s#http://archive.ubuntu.com/ubuntu/#http://ftp.jaist.ac.jp/pub/Linux/ubuntu/#g" /etc/apt/sources.list
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
apt-get -y install xrdp=0.9.5-2 fcitx-mozc xubuntu-desktop language-pack-ja language-pack-ja
im-config -n fcitx

apt-get -y install --install-recommends linux-generic-hwe-18.04 xserver-xorg-hwe-18.04
apt-get -y install virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11

sed -i -e "s/allowed_users=console/allowed_users=anybody/" /etc/X11/Xwrapper.config

echo "xfce4-session" > /home/vagrant/.xsession
apt-get -y purge light-locker


# 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

2018年10月30日火曜日

DockerでRAWGraphsをインストールしたコンテナを構築・実行する

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

〇RAWGraphsの画面

ブラウザからhttp://<Dockerホスト名またはIP>:4000/にアクセスします。

〇構築方法
以下の手順で、RAWGraphsをインストールしたコンテナを構築します。

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

Dockerfile
FROM node:10-alpine
WORKDIR /
RUN  apk update \
  && apk add --no-cache git curl python \
  && rm -rf /var/cache/apk/* \
  && npm install -g bower \
  && git clone https://github.com/densitydesign/raw.git
WORKDIR /raw
RUN bower install --allow-root \
  && cp js/analytics.sample.js js/analytics.js
EXPOSE 4000
CMD ["/usr/bin/python","-m","SimpleHTTPServer","4000"]

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

docker-compose.yml
version: "2"
services:
  myrawgraphs:
    image: myrawgraphs
    container_name: "myrawgraphs"
    ports:
      - "4000:4000"


○関連情報
・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=945&metadata_id=3", encoding="cp932")
#display(df)
fm = folium.Map(location=[36.565725, 139.883565], zoom_start=9)

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=mu45edm60-20#_20

Jupyterとdatapackageで日別のWTI原油価格データを取得する

Jupyterとdatapackageで、日別のWTI原油価格を取得してグラフ描画するには、以下のコードを実行します。

〇グラフ出力


サンプルコード

以下のコードで、日別のWTI原油価格を取得してグラフを描画します。
%matplotlib inline
import matplotlib.pyplot as plt
from datapackage import Package
import pandas as pd

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

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

動作確認バージョン

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

関連情報

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

Jupyterとwbdataで世界銀行の預金金利データを取得する

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

〇出力画面


使用指標

FR.INR.DPST
預金金利 - Deposit interest rate (%)

サンプルコード

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

df = wbdata.api.get_dataframe({"FR.INR.DPST":"Deposit interest rate"}, country=["JP","DE", "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年10月29日月曜日

Pythonで不動産取引価格情報を取得する

国土交通省の不動産取引価格情報取得APIを使用して、指定した市区町村・四半期の不動産取引情報を取得する事ができます。
以下のサンプルコードを使用して、不動産取引のタイプ、市区町村名、地区名、面積(平方メートル)、取引金額、建築年(建物などの場合)を取得する事ができます。

〇サンプルコード
# coding: utf-8
import pprint
import json
import requests

city = '11214' # Kasukabe city
from_quarter = '20181' # 2018Q1 = 2018-01 to 2-18-03
to_quarter = '20182' # 2018Q2 = 2018-04 to 2-18-06
baseuri='http://www.land.mlit.go.jp/webland/api/TradeListSearch?'
uri = baseuri + 'city=' + city + "&from=" + from_quarter + "&to=" + to_quarter
headers = {'content-type': 'application/json'}
response = requests.get(
  uri,
  headers=headers)
for trans in response.json()['data']:
  print("type:" + trans['Type'])
  print("municipality:" + trans['Municipality'])
  print("district name:" + trans['DistrictName'])
  print("area(m2):" + trans['Area'])
  print("trade price:" + trans['TradePrice'])
  if "BuildingYear" in trans:
    print("building year:" + trans['BuildingYear'])
  print("-----------------------------------")
#pprint.pprint(response.json())

○関連情報
・国土交通省:土地総合情報
http://www.land.mlit.go.jp/webland/api.html

・requestsパッケージに関する他の記事はこちらを参照してください。

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/oil-prices/datapackage.json')

for resource in package.resources:
  if resource.name == "brent-month_csv":
    df = pd.read_csv(resource.descriptor['path'],index_col='Date', parse_dates=True) 
    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で、森林面積の国土面積比を取得して、グラフ描画します。

〇出力画面


使用指標

AG.LND.FRST.ZS
森林面積の国土面積比 - Forest area (% of land area)

サンプルコード

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

df = wbdata.api.get_dataframe({"AG.LND.FRST.ZS":"Forest area"}, 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年10月28日日曜日

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/oil-prices/datapackage.json')

for resource in package.resources:
  if resource.name == "brent-day_csv":
    df = pd.read_csv(resource.descriptor['path'],index_col='Date', parse_dates=True) 
    df = df.query("Date >= '2010-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で、エネルギー使用量(一人当たり、石油Kg換算)を取得して、グラフ描画します。

〇出力画面


使用指標

EG.USE.PCAP.KG.OE
エネルギー使用量(一人当たり、石油Kg換算) - Energy use (kg of oil equivalent per capita)

サンプルコード

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

df = wbdata.api.get_dataframe({"EG.USE.PCAP.KG.OE":"Energy use"}, country=["JP","US", "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年10月27日土曜日

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

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

〇Fritzingの画面


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

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95xfcefritzing093b"
config.vm.network "public_network", ip:"192.168.1.104", :netmask => "255.255.255.0"
config.vm.network "private_network", ip: "192.168.55.104", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db95xfcefritzing093b"
     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
#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 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とdatapackageでS&P500株価指数データを取得する

Jupyterとdatapackageで、S&P500株価指数を取得してグラフ描画するには、以下のコードを実行します。

〇グラフ出力


サンプルコード

以下のコードで、S&P500株価指数を取得してグラフを描画します。
%matplotlib inline
import matplotlib.pyplot as plt
from datapackage import Package
import pandas as pd

package = Package('https://datahub.io/core/s-and-p-500/datapackage.json')

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

動作確認バージョン

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

関連情報

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

jupyterとiexfinanceで米国株価データを取得して、ローソク足グラフを描画する

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

Jupyterとwbdataで世界銀行の成人男性識字率データを取得する

Jupyterとwbdataで、成人男性識字率を取得して、グラフ描画します。

〇出力画面


使用指標

SE.ADT.LITR.MA.ZS
成人男性識字率(15歳以上の男性比) - Literacy rate, adult male (% of males ages 15 and above)

サンプルコード

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

df = wbdata.api.get_dataframe({"SE.ADT.LITR.MA.ZS":"Literacy rate, adult male"}, country=["PE","EG", "UY"], 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年10月26日金曜日

AnsibleでArduino IDEをUbuntu18.04にインストールする

Arduino IDEでスケッチと呼ばれるプログラムを作成し、Arduinoに実行イメージを書き込んで実行する事ができます。

〇Arduino IDEの画面


〇インストール方法
1.下準備
~/.ansible.cfgに以下の内容を設定します
[ssh_connection]
pipelining=True
[defaults]
host_key_checking = False

2. Arduinoのバージャンやインストール対象のユーザを環境に合わせてinventoryファイルに記入します

inventory例
[arduino-ide]
192.168.1.159

[all:vars]
ansible_ssh_port=22
ansible_ssh_user=ubuntu
ansible_ssh_pass=ubuntu
ansible_sudo_pass=ubuntu

3.inventory、arduino-ide.ymlを準備し、以下のコマンドを実行します。
ansible-playbook -i inventory arduino-ide.yml
arduino-ide.yml
- hosts: arduino-ide
  vars:
    - arduinoversion: arduino-1.8.7
    - arch: linux64
    - username: ubuntu
  tasks:
    - name: check /opt/arduino-1.8.7 directory
      stat: path=/opt/{{ arduinoversion }}
      register: dirarduino
    - name: download Arduino IDE
      get_url:
        url: https://downloads.arduino.cc/{{ arduinoversion }}-{{ arch }}.tar.xz
        dest: /tmp
      become: true
      when: not dirarduino.stat.exists
    - name: extract Arduino IDE
      unarchive:
        remote_src: yes
        src: /tmp/{{ arduinoversion }}-{{ arch }}.tar.xz
        dest: /opt
      become: true
      when: not dirarduino.stat.exists
    - name: execute install.sh
      shell: ./install.sh
      args:
        chdir: /opt/{{ arduinoversion }}
      become: yes
    - name: add specified user to dialout.
      shell: "usermod -a -G dialout {{ username }}"
      become: yes


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

JupyterとdatapackageでIMFの一般政府歳入(GDP比)データを取得する

Jupyterとdatapackageで、IMFの一般政府歳入(GDP比)データを取得してグラフ描画するには、以下のコードを実行します。

〇出力グラフ


サンプルコード

以下のコードで、IMFの一般政府歳入(GDP比)データを取得してグラフを描画します。
%matplotlib inline
import matplotlib.pyplot as plt
from datapackage import Package
import pandas as pd

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

for resource in package.resources:
  if resource.name == "values_csv":
    df = pd.read_csv(resource.descriptor['path']) 
    df = df.query("Indicator=='GGR_NGDP' and Country in ('JPN', 'USA', 'GBR')")
    df = df[['Country','Year','Value']]
    df['Value'] = df['Value'].astype(float)
    df.set_index(["Country", "Year"], inplace=True)
    ax = df.unstack(level=0).plot()
    plt.xticks(rotation=90)
    plt.legend(loc='best')
    plt.show()

動作確認バージョン

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

関連情報

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

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

Jupyterとwbdataで世界銀行の財貨・サービスの輸入のGDP比データを取得する

Jupyterとwbdataで、財貨・サービスの輸入のGDP比を取得して、グラフ描画します。

〇出力画面


使用指標

NE.IMP.GNFS.ZS
財貨・サービスの輸入のGDP比 - Imports of goods and services (% of GDP)

サンプルコード

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

df = wbdata.api.get_dataframe({"NE.IMP.GNFS.ZS":"Imports of goods and services"}, 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年10月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=947&metadata_id=3", encoding="cp932")
#display(df)
fm = folium.Map(location=[36.565725, 139.883565], zoom_start=9)

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=mugqc9vuy-20#_20

JupyterとdatapackageでIMFの一般政府純負債(GDP比)データを取得する

Jupyterとdatapackageで、IMFの一般政府純負債(GDP比)データを取得してグラフ描画するには、以下のコードを実行します。

〇出力グラフ


サンプルコード

以下のコードで、IMFの一般政府純負債(GDP比)データを取得してグラフを描画します。
%matplotlib inline
import matplotlib.pyplot as plt
from datapackage import Package
import pandas as pd

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

for resource in package.resources:
  if resource.name == "values_csv":
    df = pd.read_csv(resource.descriptor['path']) 
    df = df.query("Indicator=='GGXWDN_NGDP' and Country in ('JPN', 'USA', 'GBR')")
    df = df[['Country','Year','Value']]
    df['Value'] = df['Value'].astype(float)
    df.set_index(["Country", "Year"], inplace=True)
    ax = df.unstack(level=0).plot()
    plt.xticks(rotation=90)
    plt.legend(loc='best')
    plt.show()

動作確認バージョン

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

関連情報

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

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

Jupyterとwbdataで世界銀行の穀物収穫データを取得する

Jupyterとwbdataで、世界銀行の穀物収穫(Kg/ヘクタール)データを取得して、グラフ描画します。

〇出力画面


使用指標

AG.YLD.CREL.KG
穀物収穫(Kg/ヘクタール) - Cereal yield (kg per hectare)

サンプルコード

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

df = wbdata.api.get_dataframe({"AG.YLD.CREL.KG":"Kg per hectare"}, country=["JP","US", "BE"], 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年10月24日水曜日

Jupyterとpandas、foliumで埼玉県川越市の公共施設を地図に描画する

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

〇出力画面


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

df = pd.read_csv("https://opendata.pref.saitama.lg.jp/data/dataset/4907fe39-d302-4aa9-b245-5b5f623b57cb/resource/382974e5-5244-46bc-8a3f-63be897172f5/download/cusersiz0105641desktopaed-kawagoeutf-8.csv")
#display(df)
fm = folium.Map(location=[35.925101, 139.485793], zoom_start=12)

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/shisetsu-kawagoe

VagrantでTalend Open Studio for Data Integration7.0.1、Xfce Desktop環境、XRDPがインストールされた仮想マシン(CentOS7.5)を構築する

TalendはオープンソースのJava製のETLアプリケーションです。
XRDPがインストールされているので、Windowsのリモートデスクトップで接続することができます。ユーザ名はvagrant、パスワードもvagrantでログオンできます。

〇Talendの画面


構築方法

以下のVagrantfileを使用して、Talend Open Studio for Data Integration7.0.1、Xfce Desktop環境、XRDPをインストールした仮想マシンを構築できます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/centos-7.5"
  config.vm.hostname = "co75xfcetosdi701"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "co75xfcetosdi701"
     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.116", :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 Talend Open Studio
wget 'https://sourceforge.net/projects/talend-studio/files/Talend%20Open%20Studio/7.0.1/TOS_DI-20180411_1414-V7.0.1.zip'
unzip TOS_DI-20180411_1414-V7.0.1.zip
mv TOS_DI-20180411_1414-V7.0.1 /opt/tosdi

# create a shortcut for Talend Open Studio for Data Integration
cat << EOF > /usr/share/applications/tosdi.desktop
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=/opt/tosdi/TOS_DI-linux-gtk-x86_64
Name=Talend Open Studio for Data Integration
Categories=Utility;Development;
EOF

telinit 5
SHELL
end

関連情報

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

AnsibleでsysbenchとMariaDBをインストールする(Ubuntu18.04用)

sysbenchでホストマシンやデータベースのベンチマークを行うことができます。

〇インストール方法
1.下準備
~/.ansible.cfgに以下の内容を設定します
[ssh_connection]
pipelining=True
[defaults]
host_key_checking = False

2. インストール対象ホストのユーザやパスワードを環境に合わせてinventoryファイルに記入します

inventory例
[sysbench]
192.168.1.61

[all:vars]
ansible_ssh_port=22
ansible_ssh_user=vagrant
ansible_ssh_pass=vagrant
ansible_sudo_pass=vagrant

3.inventory、sysbench-mariadb.ymlを準備し、以下のコマンドを実行します。
ansible-playbook -i inventory sysbench-mariadb.yml

sysbench-mariadb.yml
- hosts: sysbench
  vars:
    - dbname: sysbench
    - dbuser: sysbench
    - dbpassword: sysbench
    - dbhost: localhost
    - dbport: 3306
  tasks:
    - name: set password for root
      shell: echo "mariadb-server-10.1 mysql-server/root_password password root" | sudo debconf-set-selections
      become: yes
    - name: set password for root
      shell: echo "mariadb-server-10.1 mysql-server/root_password_again password root" | sudo debconf-set-selections
      become: yes
    - name: install mariadb
      apt:
        name: mariadb-server
        state: present
      become: yes
    - name: enable and start mariadb
      systemd:
        name: mysql
        enabled: yes
        state: started
      become: yes
    - name: Install required software
      apt: name={{ item }} state=present
      with_items:
        - libmysqlclient-dev
        - python-pip
      become: true
    - name: install MySQL-python using pip
      pip:
        name: "{{ item }}"
        state: forcereinstall
      with_items:
        - pip
        - MySQL-python
      become: true
    - name: create db
      mysql_db:
        name={{ dbname }}
        state=present
        encoding=utf8
        login_user=root
      become: true
    - name: create and grant a database user
      mysql_user:
        name={{ dbuser }}
        password={{ dbpassword }}
        priv="{{ dbuser }}.*:ALL"
        state=present
      become: true
    - name: install sysbench
      apt: name={{ item }} state=present
      with_items:
        - sysbench
      become: true
    - name: execute cpu benchmark
      shell: sysbench cpu run --threads=2 > /tmp/result
      become: true
    - name: execute memory benchmark
      shell: sysbench memory run --threads=2 >> /tmp/result
      become: true
    - name: execute fileio benchmark(seqwr)
      shell: sysbench fileio run --file-test-mode=seqwr --threads=2 >> /tmp/result
      become: true
    - name: execute fileio benchmark(rndwr)
      shell: sysbench fileio run --file-test-mode=rndwr --threads=2 >> /tmp/result
      become: true
    - name: prepare oltp_read_write benchmark
      shell: sysbench /usr/share/sysbench/oltp_read_write.lua prepare --db-driver=mysql --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=sysbench --mysql-db=sysbench >> /tmp/result
      become: true
    - name: execute oltp_read_write benchmark
      shell: sysbench /usr/share/sysbench/oltp_read_write.lua run --db-driver=mysql --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=sysbench --mysql-db=sysbench --threads=2 >> /tmp/result
      become: true
    - name: fetch result
      fetch:
        src: /tmp/result
        dest: ./result


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

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

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

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

〇LibrePCBの画面


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

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95xfcelibrepcb"
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 = "db95xfcelibrepcb"
     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 LibrePCB
mkdir -p /opt/librepcb
cd /opt/librepcb
wget https://download.librepcb.org/releases/0.1.0-rc1/librepcb-0.1.0-rc1-linux-x86_64.AppImage
chmod +x librepcb-0.1.0-rc1-linux-x86_64.AppImage

cat << EOF > /usr/share/applications/librepcb.desktop
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=/opt/librepcb/librepcb-0.1.0-rc1-linux-x86_64.AppImage
Name=LibrePCB
Categories=Development;
EOF

init 5
SHELL
end


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

2018年10月23日火曜日

Raspberry Pi上のDockerでJoomla3.8.13、MariaDB10.2がインストールされたコンテナを構築する

JoomlaはPHP製のCMSです。

〇Joomlaの管理者画面


○構築方法
以下の手順で、Joomla3.8.13とMariaDB10.3のコンテナを構築・実行します。

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

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('joomla') WHERE User='root';
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'joomla';
FLUSH PRIVILEGES;
EOF
  /usr/bin/mysql < /tmp/setupdb.sql
  cat << EOF > /tmp/createdb.sql
CREATE DATABASE joomla DEFAULT CHARACTER SET utf8mb4;
EOF
  /usr/bin/mysql -uroot -pjoomla < /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

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

docker-compose.yml
version: "2"
services:
  joomla:
    image: joomla:3.8.13
    container_name: "joomla"
    volumes:
      - "joomla-data:/var/www/html"
    ports:
      - "80:80"
    depends_on:
      - db
    environment:
      JOOMLA_DB_HOST: db
      MYSQL_PORT_3306_TCP: 3306
      JOOMLA_DB_NAME: joomla
      JOOMLA_DB_USER: root
      JOOMLA_DB_PASSWORD: joomla
  db:
    image: mariadb-joomla
    container_name: "joomla-db"
    volumes:
      - "db-data:/var/lib/mysql"
    ports:
      - "3306:3306"
volumes:
  db-data:
    driver: local
  joomla-data:
    driver: local

3.ブラウザでhttp://<Dockerホスト名またはIP>/にアクセスして、サイト設定画面のサイト名称や管理者情報を入力します。


4.データベース設定画面で接続情報を入力します。
データベース: MySQLi
ホスト名: db
ユーザ名: root
パスワード: joomla
データベース: joomla


5. 最終確認画面で設定内容を確認し、「インストール」ボタンをクリックする


6. インストール完了画面で「installationディレクトリを削除」ボタンをクリックします。


〇参考情報
・Raspberry PiにDockerとdocker-composeをインストールするには以下の記事を参照してください。
Raspberry Pi Raspbian GNU/Linux 9 (stretch)にdocker-composeをインストールする

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

VagrantでJupyter Lab、foliumとMariaDBをインストールした仮想マシン(Debian Stretch/9.5)を構築する

foliumでJupyter Lab上に地図を簡単に表示できます。

〇Jupyter Labとfoliumの画面


構築方法

以下のVagrantfileで、Jupyter LabとMariaDBをインストールした仮想マシンを構築する事ができます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95jupyterlabfoliummariadb"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db95jupyterlabfoliummariadb"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.107", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.107", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
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
#DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade

# 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 anaconda
wget https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh
chmod +x Anaconda3-5.1.0-Linux-x86_64.sh
./Anaconda3-5.1.0-Linux-x86_64.sh -b -p /opt/anaconda
source /opt/anaconda/bin/activate
pip install --upgrade pip
pip install jupyterlab
pip install folium

# install mysqlclient
apt-get -y install libmariadbclient-dev
pip install mysqlclient

useradd py
mkdir -p /home/py
chown -R py:py /home/py
sudo -u py bash -c "mkdir /home/py/.jupyter"
sudo -u py bash -c "cat << EOF > /home/py/.jupyter/jupyter_notebook_config.py
conf = get_config()
conf.NotebookApp.ip = '*'
conf.NotebookApp.open_browser = False
conf.NotebookApp.port = 8080
conf.NotebookApp.token = 'jupyter'
EOF"

cat << EOF > /etc/systemd/system/jupyter.service
[Unit]
Description=Jupyter notebook
[Service]
Type=simple
ExecStartPre=source /opt/anaconda/bin/activate
ExecStart=/opt/anaconda/bin/jupyter lab
User=py
Group=py
WorkingDirectory=/home/py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable jupyter
sudo systemctl start jupyter

echo 'access -> http://192.168.55.107:8080/?token=jupyter'
SHELL
end

○動作確認用コード(MariaDB接続確認)
import MySQLdb

con = MySQLdb.connect(
  user='test',
  passwd='test',
  host='localhost',
  db='test')

try:
  cur= con.cursor()
  sql = "select message_id, message from messages"
  cur.execute(sql)

  for row in cur.fetchall():
    print(row)

except MySQLdb.Error as er:
    print('MySQLdb.Error:', er)
cur.close
con.close

〇動作確認用コード(folium動作確認)
import folium

fm = folium.Map(location=[35.856999, 139.648849], zoom_start=10)

folium.Marker(location=[35.861729,139.645482], popup='さいたま市').add_to(fm)
folium.Marker(location=[35.975198, 139.752301], popup='春日部市').add_to(fm)
    
fm

関連情報

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

JupyterとdatapackageでIMFの雇用者数(百万人単位)データを取得する

Jupyterとdatapackageで、IMFの雇用者数(百万人単位)データを取得してグラフ描画するには、以下のコードを実行します。

〇出力グラフ


サンプルコード

以下のコードで、IMFの雇用者数(百万人単位)データを取得してグラフを描画します。
%matplotlib inline
import matplotlib.pyplot as plt
from datapackage import Package
import pandas as pd

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

for resource in package.resources:
  if resource.name == "values_csv":
    df = pd.read_csv(resource.descriptor['path']) 
    df = df.query("Indicator=='LE' and Country in ('JPN', 'USA', 'GBR')")
    df = df[['Country','Year','Value']]
    df['Value'] = df['Value'].astype(float)
    df.set_index(["Country", "Year"], inplace=True)
    ax = df.unstack(level=0).plot()
    plt.xticks(rotation=90)
    plt.legend(loc='best')
    plt.show()

動作確認バージョン

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

関連情報

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

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

Jupyterとwbdataで世界銀行のODA純額データを取得する

Jupyterとwbdataで、世界銀行のODA純額(USD)を取得して、グラフ描画します。

〇出力画面


使用指標

DT.ODA.ODAT.PC.ZS
ODA純額 - Net ODA received per capita (current US$)

サンプルコード

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

df = wbdata.api.get_dataframe({"DT.ODA.ODAT.PC.ZS":"Net ODA per capita"}, 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年10月22日月曜日

Jupyterとpandas、foliumで埼玉県深谷市の景観情報を地図に描画する

Jupyterとpandas、foliumを使用して、以下のコードで埼玉県深谷市の景観情報を地図に描画する事ができます。

〇出力画面


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

df = pd.read_csv("https://fukaya.geocloud.jp/webgis/OpenData/Download/Csv/25/1", encoding="cp932")
#display(df)
fm = folium.Map(location=[36.197444 , 139.281464], zoom_start=15)

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/fukaya9

Pythonで市区町村名称を取得する

都道府県内市区町村一覧取得APIを使用して、Pythonで指定した都道府県内の市区町村名称の日本語名称・英語名称を取得する事ができます。

〇指定都道府県内の市区町村名称を取得するサンプルコード
# coding: utf-8
import pprint
import json
import requests

pref='11' # 11:saitama
baseuri='http://www.land.mlit.go.jp/webland/api/CitySearch'
uri = baseuri + '?area=' + pref
headers = {'content-type': 'application/json'}
response = requests.get(
  uri,
  headers=headers)
for city in response.json()['data']:
    print("id:" + city['id'])
    print("name:" + city['name'])
    print("-----------------------------------")
#pprint.pprint(response.json())

〇指定都道府県内の市区町村英語名称を取得するサンプルコード
# coding: utf-8
import pprint
import json
import requests

pref='11' # 11:saitama
baseuri='http://www.land.mlit.go.jp/webland_english/api/CitySearch'
uri = baseuri + '?area=' + pref
headers = {'content-type': 'application/json'}
response = requests.get(
  uri,
  headers=headers)
for city in response.json()['data']:
    print("id:" + city['id'])
    print("name:" + city['name'])
    print("-----------------------------------")
#pprint.pprint(response.json())

○関連情報
・国土交通省:土地総合情報
http://www.land.mlit.go.jp/webland/api.html

・requestsパッケージに関する他の記事はこちらを参照してください。

JupyterとdatapackageでIMFの一般政府歳出(GDP比)データを取得する

Jupyterとdatapackageで、IMFの一般政府歳出(GDP比)データを取得してグラフ描画するには、以下のコードを実行します。

〇出力グラフ


サンプルコード

以下のコードで、IMFの一般政府歳出(GDP比)データを取得してグラフを描画します。
%matplotlib inline
import matplotlib.pyplot as plt
from datapackage import Package
import pandas as pd

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

for resource in package.resources:
  if resource.name == "values_csv":
    df = pd.read_csv(resource.descriptor['path']) 
    df = df.query("Indicator=='GGX_NGDP' and Country in ('JPN', 'USA', 'GBR')")
    df = df[['Country','Year','Value']]
    df['Value'] = df['Value'].astype(float)
    df.set_index(["Country", "Year"], inplace=True)
    ax = df.unstack(level=0).plot()
    plt.xticks(rotation=90)
    plt.legend(loc='best')
    plt.show()

動作確認バージョン

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

関連情報

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

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

Jupyterとwbdataで世界銀行の農用地国土面積比データを取得する

Jupyterとwbdataで、世界銀行の農用地国土面積比を取得して、グラフ描画します。

〇出力画面


使用指標

AG.LND.AGRI.ZS
農用地国土面積比 - Agricultural land (% of land area)

サンプルコード

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

df = wbdata.api.get_dataframe({"AG.LND.AGRI.ZS":"Percent of Agricultural 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パッケージに関する他の記事はこちらを参照してください。

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

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

〇NodeBox3の画面

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

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

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95xfcenodebox"
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 = "db95xfcenodebox"
     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 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

2018年10月21日日曜日

Raspberry Pi上のDockerでDrupal8.6.2とMariadb10.2のコンテナを構築する

DrupalはPHP製のCMSです。

〇Drupalの画面


〇構築手順
1. Drupalイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t mydrupal .

Dockerfile
FROM alpine:3.8
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php7-apache2 php7-mysqli php7-mbstring php7-session php7-curl php7-xml php7-dom php7-json php7-ctype php7-tokenizer php7-gd php7-pdo php7-pdo_mysql php7-simplexml php7-opcache openssl openrc \
  && rm -rf /var/cache/apk/* \
  && wget https://ftp.drupal.org/files/projects/drupal-8.6.2.tar.gz \
  && tar xvfz drupal-8.6.2.tar.gz \
  && rm -f drupal-8.6.2.tar.gz \
  && mkdir /opt \
  && mv drupal-8.6.2 /opt/drupal \
  && chown -R apache:apache /opt/drupal \
  && mkdir -p /run/apache2 \
  && echo $'\n\
  Options Indexes FollowSymLinks \n\
  AllowOverride All \n\
  Require all granted \n\
  RewriteEngine on \n\
  RewriteBase / \n\
  RewriteCond %{REQUEST_FILENAME} !-f \n\
  RewriteCond %{REQUEST_FILENAME} !-d \n\
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] \n\
' >> /etc/apache2/httpd.conf \
  && sed -i -e 's|#LoadModule rewrite_module modules/mod_rewrite.so|LoadModule rewrite_module modules/mod_rewrite.so|' /etc/apache2/httpd.conf \
  && sed -i -e 's|DocumentRoot "/var/www/localhost/htdocs"|DocumentRoot "/opt/drupal"|' /etc/apache2/httpd.conf
EXPOSE 80
VOLUME /opt/drupal
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

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

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('drupal') WHERE User='root';
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'drupal';
FLUSH PRIVILEGES;
EOF
  /usr/bin/mysql < /tmp/setupdb.sql
  cat << EOF > /tmp/createdb.sql
CREATE DATABASE drupal DEFAULT CHARACTER SET utf8mb4;
EOF
  /usr/bin/mysql -uroot -pdrupal < /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. DrupalとMairaDB10.2コンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d

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

3.ブラウザからhttp://<Dockerホスト>にアクセスします。「Save and continue」ボタンをクリックします。


4.「標準」を選択して「保存して次へ」をクリックします


5. 32bitなので警告が表示されますが、「とりあえず進む」をクリックします。


6.以下を入力して「保存して次へ」ボタンをクリックします
データベース名: drupal
ユーザ名: root
パスワード: drupal
ホスト: drupaldb


7.サイト名・管理者の情報を入力します


8.インストール完了画面


〇参考情報
Raspberry PiにDockerとdocker-composeをインストールするには以下の記事を参照してください。
Raspberry Pi Raspbian GNU/Linux 9 (stretch)にdocker-composeをインストールする


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

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