1.21 jigowatts

Great Scott!

Python FizzBuzz問題をちょっとかじる

概要

関数の書き方がわかったので、Jupyter NotebookでFizzBuzz問題をちょっと感じてみましょう。

環境

macOS High Sierra バージョン 10.13.6
Python 3.7.0

Fizz Buzz

まずは関数を使わずに単純に100回ループで都度printで出力してみます。

%%time
for i in range(1, 101):
    if (i%15 == 0):
        print('fizz buzz')
    elif (i%3 == 0):
        print('fizz')
    elif (i%5 == 0):
        print('buzz')
    else:
        print(i)

Jupyter Notebookでセルの実行時間を計測するには、%%timeを書いておけば大体の時間がわかるらしいです。より正確に計測したい場合は%%timeitの方がいいみたい。
実行結果はこんな感じ。実行時間は9.09 ms。

1
2
fizz

(中略...)

98
fizz
buzz
CPU times: user 7.01 ms, sys: 5.85 ms, total: 12.9 ms
Wall time: 9.09 ms

f:id:sh_yoshida:20180811173331p:plain

では、関数にしてみましょう。

def fizzBuzz(i):
    if (i <= 0):
        return 'out of range.'
    
    if (i%15 == 0):
        return 'fizz buzz'
    elif (i%3 == 0):
        return 'fizz'
    elif (i%5 == 0):
        return 'buzz'
    else:
        return str(i)
    
assert fizzBuzz(3) == 'fizz','fizzBuzzは3でfizzを返す'
assert fizzBuzz(5) == 'buzz','fizzBuzzは5でbuzzを返す'
assert fizzBuzz(15) == 'fizz buzz','fizzBuzzは15でfizz buzzを返す'
assert fizzBuzz(4) == '4','fizzBuzzは4で4を返す'
assert fizzBuzz(0) == 'out of range.', 'fizzBuzzは0でout of range.を返す'
assert fizzBuzz(-1) == 'out of range.', 'fizzBuzzは-1でout of range.を返す'

Jupyter Notebookのセルはなるべく関数にした方がいいらしいので、アサートも書いておきます。

f:id:sh_yoshida:20180811173915p:plain

関数を呼び出しましょう。結果はリストに詰めて、カンマで結合することでprintの実行は1回に抑えます。

%%time
result = []
for i in range(1, 101):
    result.append(fizzBuzz(i))

print(','.join(result))

実行時間は360 µs。単位がマイクロ秒になりましたね!printが遅いのは確定的に明らか。

1,2,fizz,(中略...),98,fizz,buzz
CPU times: user 328 µs, sys: 29 µs, total: 357 µs
Wall time: 360 µs

f:id:sh_yoshida:20180811174834p:plain

最初はインデントとコロンのスタイルが慣れなかったけど、最近気にならなくなってきた気がする。
人間すごい(語彙力)

Python フリーWiFiスポットを地図にプロットしてみる

概要

printとリストとfor文あたりを触ってみたので、それっぽいことをしてみたくなりまして。オープンデータで検索していたら、FREE Wi-Fi & TOKYO スポット情報というのがあったので、この情報を使わせてもらってJupyter Notebookで地図にプロットしてみます。

環境

macOS High Sierra バージョン 10.13.6
Python 3.7.0

準備

都が提供しているフリーWiFiなんすかね。

【東京都産業労働局】 外国人旅行者等が多く訪れる都立施設などにおいて無料で利用できる公衆無線LANWi-Fi)サービス「FREE Wi-Fi & TOKYO」のスポット一覧です。

opendata-catalogue.metro.tokyo.jp
緯度・経度と住所などの情報が欲しいのでCSVをダウンロードして、Jupyter Notebookのディレクトリに配置しておきます。

CSVと地図にプロットするために以下のライブラリをインストールしました。

$ pip install pandas
$ pip install folium

CSVファイルの読み込み

まずはデータを読み込んでみましょう。

import pandas as pd
wifi_spots = pd.read_csv("FREE_WiFi_and_TOKYO.csv", encoding="shift-jis")
wifi_spots.head()

f:id:sh_yoshida:20180809070645p:plain

え?これだけ?

地図にプロット

すべて上手く行っていますね。あとは地図にピンを刺すだけです。

import folium
import pandas as pd
wifi_spots = pd.read_csv("FREE_WiFi_and_TOKYO.csv", encoding="shift-jis")

map = folium.Map(location=[35.6811673,139.7648629], zoom_start=11)

for i, spot in wifi_spots.iterrows():
    latitude = spot['緯度']
    longitude = spot['経度']
    popup = spot['拠点名']+ '<br />' + spot['住所']
    folium.Marker(location=[latitude, longitude], popup=popup).add_to(map)

map

folium.Map(location=[35.6811673,139.7648629], zoom_start=11)で地図の中心地を指定できるっぽいので、東京駅の座標を設定。
拠点名と住所を改行したい場合、改行コードではダメだったのでタグで。

f:id:sh_yoshida:20180809070719p:plain
f:id:sh_yoshida:20180809070827p:plain

ちょっとやってる感が出てきましたね!

MacにPythonをインストールする

概要

夏だ!仕事だ!!Excelだ!!!
設計書作成のため日々Excelをこねくり回してます。コードは一行も書いていません。それが今年いっぱい続きます。ってことでPythonインストールします。

環境

macOS High Sierra バージョン 10.13.6
Python 3.7.0

インストール

すでにインストール済みでした。デフォルトのバージョンが2でHomebrewでPython3を別途インストールした記憶があります。

$ python -V
Python 2.7.10
$ python3 -V
Python 3.6.1

調べていたらHomebrewのPythonがデフォルトでバージョン3になったとありました。

$ brew upgrade

これで行けるかと思ったのですが、

$ python -V
Python 2.7.10
$ python3 -V
Python 3.7.0

pythonコマンドは以前のままですね。
インストールし直してもダメ。

$ brew uninstall --force python
$ brew install python

調べてみたら同じような人が!

$ brew info python
python: stable 3.7.0 (bottled), HEAD
...
==> Caveats
Python has been installed as
  /usr/local/bin/python3

Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, have been installed into
  /usr/local/opt/python/libexec/bin
...

これだ!
.bash_profileにexport PATH=/usr/local/opt/python/libexec/bin:$PATH追記した結果、デフォルトでPython3になりましたね。

$ python -V
Python 3.7.0
$ pip -V
pip 18.0 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

Jupyter Notebook

Jupyter Notebookがいいと勧められたのでインストールします。

$ pip install jupyter

起動してみましょう。

$ mkdir jupyter-notebook
$ cd jupyter-notebook/
$ jupyter notebook

f:id:sh_yoshida:20180805014512p:plain

これでPythonを始める準備が整ったはず。