2018年10月2日火曜日

DockerでJupyter Notebook、folium、requests、postgresqlがインストールされたコンテナのイメージを作成する

Jupyter Notebookと地図を描画できるパッケージfolium、HTTPリクエストを簡素化するrequests、postgresqlにアクセスするpsycopg2とPostgreSQLがインストールされたコンテナのイメージを作成するには、以下の手順を実行します。

〇foliumで描画した地図


○構築方法
以下の手順で、Jupyter Notebookとfolium, requests, psycopg2のコンテナを構築・実行します。
1. folium, requests, psycopg2を追加したJupyter Notebookイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t scipy-notebook-requests-folium-pg .

Dockerfile
FROM jupyter/scipy-notebook
ENV TZ=Asia/Tokyo
USER root
RUN apt-get update \
  && apt-get -y install libpq-dev python-dev \
  && pip install psycopg2-binary \
  && pip install requests \
  && pip install folium \
  && apt-get clean
USER $NB_UID

2. Jupyter Notebookの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d

docker-compose.yml
version: "2"
services:
  scipy-notebook:
    image: scipy-notebook-requests-folium-pg
    container_name: "scipy-notebook-requests-folium-pg"
    volumes:
      - "scipy-notebook-data:/home/jovyan/work"
    ports:
      - "8888:8888"
    environment:
      JUPYTER_TOKEN: jupyter
      JUPYTER_ENABLE_LAB: 1
    depends_on:
      - db
  db:
    image: postgres:10.5-alpine
    container_name: "test-db"
    ports:
      - "5432:5432"
    volumes:
      - "db-data:/var/lib/postgresql/data"
    environment:
        POSTGRES_DB: test
        POSTGRES_PASSWORD: test
volumes:
  db-data:
    driver: local
  scipy-notebook-data:
    driver: local

3.ブラウザから以下のURLにアクセス
http://<Dockerホスト名またはIP>:8888/?token=jupyter

〇動作確認用コード
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


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

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

Vagrantでpipenvをインストールした仮想マシン(Ubuntu18.04)を構築する

pipenvで、簡単にpython開発環境をセットアップする事ができます。

以下のVagrantfileを使用して、pipenvをインストールした仮想マシンを構築する事ができます。
Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804pipenv"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804pipenv"
     vbox.cpus = 4
     vbox.memory = 4096
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.75", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.75", :netmask => "255.255.255.0"
  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
locale-gen ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
timedatectl set-timezone Asia/Tokyo

# install pipenv
apt-get -y install python3.6 python3-distutils
apt-get -y install python-pip
pip install pip==9.0.1
pip install --upgrade setuptools
pip install pipenv

# create a test environment.
mkdir env1
cd env1
pipenv --python 3.6
pipenv install
pipenv run python -V

SHELL
end

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

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

〇出力画面


使用指標

SP.URB.TOTL.IN.ZS
都市人口率 - Urban population (% of total)

サンプルコード

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

df = wbdata.api.get_dataframe({"SP.URB.TOTL.IN.ZS":"Percent of urban population"}, country=["JP","US", "NZ"], 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月1日月曜日

PyPIのパッケージ情報を取得する

PyPIのJSON APIでパッケージ情報を取得する事ができます。
以下のサンプルコードでパッケージのホームページ、サマリ、説明、リリースバージョンの情報を取得することができます。

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

project_name = 'wbdata'
uri = 'https://pypi.org/pypi/' + project_name + '/json'
headers = {'content-type': 'application/json'}
response = requests.get(
  uri,
  headers=headers)
print("home page:" + response.json()['info']['home_page'])
print("summary:" + response.json()['info']['summary'])
print("description:" + response.json()['info']['description'])
for release in response.json()['releases']:
  print(release)
#pprint.pprint(response.json())


○関連情報
・PyPIのAPIリファレンスのJSON APIページ
https://warehouse.readthedocs.io/api-reference/json/

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

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


以下のコードでiexfinanceを使用して米国株価データを取得して、ローソク足グラフを描画する事ができます。

〇出力グラフ


〇コード
import matplotlib.pyplot as plt
from mpl_finance import candlestick_ohlc
import matplotlib.dates as mdates
import numpy as np
from iexfinance import get_historical_data
from datetime import datetime

start = datetime(2018, 6, 1)
end = datetime(2018, 8, 31)

df = get_historical_data("AAPL", start=start, end=end, output_format='pandas')
#print(df)
fig = plt.figure()
ax = plt.subplot()

numrows = len(df)
ohlc = np.vstack((range(numrows), df.values.T)).T
candlestick_ohlc(ax, ohlc, width=0.8, colorup='g', colordown='r')
offset_mon = (5-datetime.strptime(df.index[0], '%Y-%m-%d').weekday())%5

plt.xticks(range(offset_mon,numrows,5), [x for x in df.index][offset_mon::5])
ax.grid(True)
ax.set_xlim(-1, numrows)
fig.autofmt_xdate()

〇必要パッケージのインストール
pip install mpl_finance
pip install iexfinance

○関連情報
・JupyterとdatapackageでS&P500株価指数データを取得する

Jupyter Lab、wbdataとBokehで世界銀行の実質金利データを取得する

Jupyter Lab、wbdataとBokehで、実質金利データを取得して、グラフ描画します。

〇出力画面


〇使用指標
FR.INR.RINR
実質金利 - Real interest rate (%)

〇コード
import wbdata
from bokeh.plotting import figure, output_notebook, show
from bokeh.models import ColumnDataSource, LabelSet

df = wbdata.api.get_dataframe({"FR.INR.RINR":"Real interest rate"}, country=["JP", "US"], convert_date=True)
df2 = df.unstack(level=0)
output_notebook()
plt = figure(plot_width=800, plot_height=400, x_axis_type="datetime")
plt.line(df2.index, df2["Real interest rate"]["Japan"], line_width=3,legend="Japan", color="blue")
plt.line(df2.index, df2["Real interest rate"]["United States"], line_width=3,legend="United States", color="red")
show(plt)

〇参考情報
・環境構築については、以下を参照します。
VagrantでJupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築する

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

Jupyterとwbdataで世界銀行のハイテク製品輸出データを取得する

Jupyterとwbdataで、国別年別のハイテク製品輸出を取得して、グラフ描画します。

〇出力画面


使用指標

TX.VAL.TECH.CD
ハイテク製品輸出 - High-technology exports (current US$)

サンプルコード

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

df = wbdata.api.get_dataframe({"TX.VAL.TECH.CD":"High-tech exports"}, 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パッケージに関する他の記事はこちらを参照してください。