paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

初心者向けPython実行環境Jupyter Notebook入門

f:id:paiza:20171227154920p:plain
(English article is here)

f:id:paiza:20151217152725j:plainこんにちは、吉岡(@)です。

Pythonは、CSVなどのデータ処理、Webサービスの開発、スクレイピング、ボット作成など幅広い目的で使われているプログラミング言語です。特に最近は、機械学習・AIのなどの開発に適したライブラリが充実していることもあって注目が高まっていますよね。

ただ、Pythonを単体でインストールしても、表やグラフを作ったり、データなどを整理したりする機能はありません。

そこで、Jupyter Notebookというツールがあります。

Jupyter Notebookを使うと、ブラウザ上で簡単にプログラムを実行できるうえ、表やグラフなども表示できます。

また、Markdownなどで文章も書けるため、プログラムと文章をわかりやすくまとめることができます。このまとめたノートは簡単に他の人と共有もできます。

Jupyter Notebookさえあれば、ひとまず初心者がPythonプログラミングを始めるのに必要な環境は、ほぼ用意できると言っても過言ではありません。

ただ、Jupyter Notebookを使うには、Pythonやモジュールのインストールや設定なども必要になります。PCの環境は人によって違うため、この環境構築の段階で、OS・バージョン・他のソフトなどの影響を受けてエラーがでたり、今ある環境を壊してしまうこともあります。

また、家と学校・会社など、PCが複数ある場合はそれぞれで設定が必要ですし、そのままではデータを共有することもできません。

そこで、今回はPaizaCloudを利用します。

PaizaCloudは、クラウド上で動く開発環境です。面倒なインストールや環境設定をすることなく、Web開発やアプリケーション開発を簡単・手軽に始められます。

PaizaCloudでは、Python実行環境に加えてJupyter Notebookもあらかじめ用意されていますので、いつでもどこでも、すぐにPythonプログラミングができます。

また、機械学習でよく使われるNumpy, Scipy, Pandasといったライブラリもあらかじめインストールされており、Djangoを使ったWeb開発も行えます。

さらに、手軽にLinuxの操作ができるように、ブラウザ上で動作するファイル管理、テキストファイル編集、ターミナル、ブラウザ(ブラウザの中で動くブラウザ)なども用意されているので、Pythonを他のツールやファイルと組み合わせて自由自在に使うことができます。

PaizaCloudは、インストールなどが不要でクラウド上で動かせるので、端末が変わっても簡単に動かせます。WindowsやMacなどで作った内容を、iPadなどのタブレットで確認するといったこともできてしまいます。

Jupyter Notebookも、PaizaCloudも、ブラウザ上で手軽にプログラミングできるツールですので、組み合わせるとPython開発に最適な環境が簡単にできます。

今回は、実際にJupyter NotebookとPaizaCloudを使って、Pythonでプログラミングしてみましょう。

PaizaCloud Cloud IDEを使う

それでは、始めていきましょう。まずは、PaizaCloudにログインします。

PaizaCloud Cloud IDEのサイトはこちらです。

https://paiza.cloud/

メールアドレスなどを入力して登録すると、登録確認メールが送られてきます。GitHubやGoogle(Gmail)ログインを利用すると、ボタン一つで登録することもできます。

サーバを作る

ログインできたら、サーバを作ります。

「新規サーバ作成」ボタンを押して、サーバ作成画面を開きます。

f:id:paiza:20171213234155p:plain

「Jupyter Notebook」を選択して、「新規サーバ作成」ボタンを押します。

f:id:paiza:20171227135936p:plain

サーバが立ち上がり、Jupyter Notebookの環境も用意されています。

f:id:paiza:20171227140547p:plain

3秒程度で、Jupyter Notebookを使った開発環境がブラウザ上にできあがりました!

Jupyter Notebookの起動

サーバ作成時に"Jupyter Notebook"を指定しているので、すでにJupyter Notebookが立ち上がっています。

f:id:paiza:20171227140611p:plain

指定し忘れた場合や後から起動させたくなった場合も、簡単に起動できます。

まず、画面左側の「ターミナル」アイコンを選んでクリックします。

f:id:paiza:20171213234317p:plain

ターミナルが立ち上がります。Jupyter Notebookは"jupyter notebook"というコマンドで起動できますので、コマンドを入力します。

$ jupyter notebook

f:id:paiza:20171227140023p:plain

サーバが起動して、ブラウザが自動的に立ち上がりました。

画面の左側には、"8888"と書かれたボタンが追加され、Jupyter Notebookが8888番ポートで動いていることがわかります。

このボタンをクリックしてもブラウザ(PaizaCloudの中で動くブラウザ)を起動することができます。

f:id:paiza:20171227140319p:plain

Jupyter Notebookを使ってみる。

Jupyter Notebookでは、「ノートブック」という単位でプログラムを管理しています。(実際にはipynbという拡張子のファイルになります)

ノートブックを作ってみましょう。Newボタンをクリックして、表示されるメニューから"Python"を選びます。

f:id:paiza:20171227140418p:plain

ノートブックが作成され、新しいブラウザが開きました!

f:id:paiza:20171227140737p:plain

"In [ ]: "というラベルの右側にテキスト入力欄がありますね。ここにプログラムを入力していきます。

まずは、文字を表示してみましょう。"Hello " + "Paiza"と入れてみます。入力できたら、「Run」ボタンを押すか、シフトキーを押しながらエンターキーを押してコードを実行します。

'Hello ' + 'Paiza'

"Hello Paiza"と、文字列を結合した結果が表示されました!

f:id:paiza:20171227140822p:plain

計算もしてみましょう。

2**10
2**100

ちゃんと計算できましたね!

f:id:paiza:20171227140920p:plain

グラフを表示

今度はグラフを表示してみましょう。PaizaCloudではグラフ表示に必要なmatplotlibや、データ処理に必要なNumpyもインストールされていますので、すぐに利用できます。

まずはsin関数を表示してみましょう。

Jupyter Notebook上でグラフや図を表示するには、最初に「%matplotlib inline」と入れて、matplotlibでの図のインライン表示を有効にします。

NumPyを利用して、sin関数のデータを作成し、"plot"関数で表示してみます。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y  = np.sin(x)
plt.plot(x, y)

sin関数のグラフが表示されました!

f:id:paiza:20171227141055p:plain

棒グラフも表示してみましょう。乱数で正規分布を作ってみます。randnで10000個の乱数を生成し、histで棒グラフを表示します。bins=100では棒の数を指定します。

%matplotlib inline
from numpy.random import *
import matplotlib.pyplot as plt

R = randn(10000)
plt.hist(R, bins=100)
plt.show()

f:id:paiza:20171227141410p:plain

正規表現っぽいグラフが表示されましたね。

乱数の数や、棒の数を変えて見てもいい感じですね。

画像を表示

画像を作成して表示することもできます。

画像の表示には、"imgshow"関数を使いますので、試してみましょう。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np


Z=np.array(((1,2,3,4,5),(4,5,6,7,8),(7,8,9,10,11)))
im = plt.imshow(Z, cmap='hot')
plt.colorbar(im, orientation='horizontal')
plt.show()

(Ref :python - How can I display a np.array with pylab.imshow() - Stack Overflow)

ちゃんと表示されましたね。

f:id:paiza:20171227141540p:plain

円周率の計算を図で表示

今度は、PaizaCloud上のJupyter Notebookで、モンテカルロ法を使って、円周率を求めます。

モンテカルロ法というのは、ランダムに点を書いて、円の中に何個点が入っているかを数える方法です。(モンテカルロ法 - Wikipedia

ここでは、1000個の点を作成して、円の中の点の数を数えます。点の様子は図で表示してみます。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

SAMPLES=1000

xs = np.random.rand(SAMPLES)
ys = np.random.rand(SAMPLES)

inner = 0
for i in range(SAMPLES):
    x = xs[i]
    y = ys[i]
    if x**2 + y**2 < 1:
        inner += 1
print(inner *4 / SAMPLES)   # 3.1x

c1 = plt.Circle((0, 0), radius=1, fc="None", ec="r", linewidth=3)
ax = plt.gca()
ax.add_patch(c1)

plt.axis("scaled")
plt.xlim(0, 1)
plt.ylim(0, 1)

plt.scatter(xs, ys, marker="x")
plt.show()

f:id:paiza:20171227141838p:plain

正確ではないですが、円周率と点の様子が図で表示されました!図で確認できるとわかりやすいですね。

ここではとりあえず1000点で計算してみましたが、"SAMPLES=1000"を書き換えて、点の数を変えて計算してみてもいいですね。

CSVファイルの取得・表示

今度は、世界の人口をグラフで表示してみます。

datahub.ioというサイトで人口推移データがCSVファイルとして公開されていますので、読み込んで表示させます。CSVファイルの読み込みにはPandasを利用します。PaizaCloudではPandasもインストール済みですので、すぐに試せます。

pandas.read_csvでCSVファイルを読み込み、Pandasで"Country Code"が"WLD"のデータを抽出して、plot関数で表示します。

%matplotlib inline
import requests
url = 'https://datahub.io/core/population/r/population.csv'
response = requests.get(url)

with open('population.csv', 'wb') as csv_file:
    csv_file.write(response.content)

import pandas
population = pandas.read_csv('population.csv', index_col=2)

plot = population[population['Country Code'] == 'WLD'].plot(title='World Population', lw=2, colormap='jet', marker='.', markersize=10)
plot.set_xlabel("Year")
plot.set_ylabel("Population")

保存したCSVファイルは、画面左側のファイルファインダーで確認したり、ダウンロードしたりできます。CSVファイルをダブルクリックして開いてみましょう。

f:id:paiza:20171227142622p:plain

ここではJupyter Notebook上のPythonコードでCSVファイルを取得していますが、wgetなどのツールで取得することもできます。また、作ったデータをファイルとして保存し、再利用やダウンロードをしたり、他のプログラムで処理することも簡単にできます。

PaizaCloudではこのように、Jupyter NotebookだけではなくLinuxサーバ環境もそのまま使えます

グラフでの日本語表示

先ほどは世界の人口を表示しましたが、今度は日本の人口推移を表示してみましょう。

"Country Code"を"WLD"(世界)から"JPN"(日本)に変えてみます。

ちなみにPaizaCloudは日本語フォントも設定済みなので、グラフでも日本語がすぐに利用できます。

グラフのタイトルやラベルを、日本語に設定してみます。

%matplotlib inline
import requests
url = 'https://datahub.io/core/population/r/population.csv'
response = requests.get(url)

with open('population.csv', 'wb') as csv_file:
    csv_file.write(response.content)

import pandas
population = pandas.read_csv('population.csv', index_col=2)

plot = population[population['Country Code'] == 'JPN'].plot(title='日本の人口', lw=2, colormap='jet', marker='.', markersize=10)
plot.set_xlabel("年")
plot.set_ylabel("人口")

f:id:paiza:20171227142457p:plain

他の国や地域を指定して、いろいろな地域の人口グラフを見てもいいですね。

スクレイピング

今度は、WebサイトからHTTPでファイルを取得して処理してみましょう。

request.getでHTMLファイルを取得し、lxmlでパースしたあと、matplotlibで表示してみます。

Jupyter Notebookで、直接画像が表示されるので便利ですね。

%matplotlib inline
import requests, lxml.html, io
from PIL import Image
import matplotlib.pyplot as plt

res = requests.get("http://paiza.hatenablog.com/entry/paizacloud_sinatra/2017/12/19")
root = lxml.html.fromstring(res.text).getroottree()

for imgElement in root.xpath('//img')[0:10]:
    url = imgElement.attrib['src']
    res = requests.get(imgElement.attrib['src'])
    image = Image.open(io.BytesIO(res.content))
    plt.figure(figsize = (2,2))
    plt.imshow(image)

f:id:paiza:20171227142821p:plain

ブログに埋め込まれた画像が表示されました。

URLをいろいろ変えて試してみてもいいですね。

スクレーピングについては、こちらの記事も参考にしてみてください。

paiza.hatenablog.com

まとめ

というわけで、Jupyter NotebookをPaizaCloudで動かして、Pythonプログラムを作ってみました。

図や表を使ってブラウザ上に結果を表示させながらプログラムを書くことができるので、簡単にいろいろ試してみることができましたね。

上記の内容は、面倒な環境構築やインストールをしなくてもクラウド上で動かせるので、他のPCやタブレットなどでも簡単に確認できます。

データ処理やスクレイピング、機械学習などに便利ですので、ぜひ使ってみてください。


PaizaCloud」では、環境構築に悩まされることなく、ブラウザだけで簡単にウェブサービスやサーバアプリケーションの開発や公開ができます。 https://paiza.cloud


paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

詳しくはこちら

paizaラーニング

そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

詳しくはこちら

paizaのスキルチェック





※このブログで紹介しているキャンペーンやイベント、およびサイト内の情報については、すべて記事公開時の情報となります。閲覧されたタイミングによっては状況が変わっている場合もございますのでご了承ください。

ITプログラマー・エンジニア転職・就活・学習のpaiza

プログラミング入門講座|paizaラーニング

PHP入門編Ruby入門編Python入門編Java入門編JavaScript入門編C言語入門編C#入門編アルゴリズム入門編

エンジニアのためのプログラミング転職サイト|paiza転職

プログラミング スキルチェックエンジニア求人一覧

未経験からエンジニアを目指す人の転職サイト|EN:TRY

プログラミング スキルチェックエンジニア未経験可求人一覧

エンジニアを目指す学生の就活サイト|paiza新卒

プログラミング スキルチェックエンジニア求人一覧

ブラウザを開くだけで エディタ、Webサーバ、DB等の開発環境が整う|PaizaCloud