隗より始めよ

今後はいろいろ考え始めます。

京都の旅館業法に基づく許可施設一覧をPythonで可視化する

f:id:mazarimono:20181205220306j:plain

はい。ちょっとだけ変更を加えたので、メモしておきます。ちなみに明日の大阪Pythonの会でjupyter notebookを晒し、ミスったところを含めすべて発表します。みんなが迷惑そうであれば、巻いて発表します。流れ的には下の記事の続きです。

www.mazarimono.net

変更点

経度緯度を探すところで、住所を弄くらいないといけませんでしたが、前回は再帰関数の書き方がわかなかったので、とんでもない書き方をしていました。あの頃はこれがPTSDとなり、PCを触るのも嫌でしたが、本を読んだらわかった。ありがとうねずみ本!!!

なっとく!アルゴリズム

なっとく!アルゴリズム

ネット上にはフィボナッチ数列を計算する再帰関数の解説などがありましたが、私には全く理解不能でした。しかしこの本を読んだらすぐ理解できたしPTSDを克服し再びPCに向かうことが出来ました。ちなみにもともと持っていた本で、こういうのをやるのは再帰関数で、どうやるんやったっけなぁって感じで電子本コレクションを調べてたらあった。フィジカル本では見つけられなかったでしょう。

というわけで、PTSDに陥ったコードから見せましょう。いや、長すぎるから最後に貼りましょう。ちなみに再帰関数を使って住所を一文字ずつ削除しながら、経度緯度を探すのはこんな感じになりました。

def change_address(address):   
    base_url= "https://map.yahooapis.jp/geocode/V1/geoCoder"
    app_id = 'your_id'
    params = {
        'appid' : app_id,
        'output': 'json',
        'ei': 'utf-8',
        'al': 4,
        'ar': 'ge',
        'recursive': True,
        'query': address
    }
    res = requests.get(base_url, params=params)
    try:
        keidoido = res.json()['Feature'][0]['Geometry']['Coordinates'].split(',')
        keido = float(keidoido[0])
        ido = float(keidoido[1])
        k_list = [keido, ido]
        return k_list
    except:
        return change_address(address[:-1])

はい。これでプログラミングPTSDは脱却できましたが、ツイッターを見ていたらこんな日にもというか、連日でYHやー辛いみたいな人がいて、またPTSD症状がぶり返してきました。

dash / plotly

さて前回の可視化でサイズ大きく出来ないよーといっておりましたが、ねりんぷろさんがおっしゃっていたとおり、heightとwidthをlayoutの最後のところで加えたら出来ました。教えてもらったリンクのところを読んだら、すぐ出来ました。ありがとうございました。

ちょっと民泊の威力がどんなもんだったかを10年おきにマーカーの色を変えて、クリックしたら消えるというダッシュの機能を使ってみてみました。

f:id:mazarimono:20181205215309g:plain

この10年で激増しているのがこれだけでもよくわかります。

あと、棒グラフや線グラフで見せるより、こっちのほうがインパクトがすごい。数字的に見ると、ここ3年で登録宿泊所は955から3276になっていますから、まぁそりゃこんな感じになりますわなーって感じです。

あとは、へロクのアドベントカレンダーの記事を書くために、これをヘロクに乗せます!

PTSDが発症したコード・・・

PTSDが発症したコードはしたです。うひょーひどい。問題解決できたとはいえ、これは褒められませんねぇw。コードも恥ずかしいのか途中から隠れていますw

def get_longti(address):
    base_url= "https://map.yahooapis.jp/geocode/V1/geoCoder"
    wannaknow = {
    'appid': 'app-id',
    'output': 'json',
    'ei': 'UTF-8',
    'al': 4,
    'recursive': True,
    'query': address
    }
    try:
        return get_longla(wannaknow)
    except KeyError:
        address1, params = reduce1(address)
        try:
            sleep(1)
            return get_longla(params)
        except KeyError:
            address2,params = reduce1(address1)
            try:
                sleep(1)
                return get_longla(params)
            except KeyError:
                address3, params = reduce1(address2)
                try:
                    sleep(1)
                    return get_longla(params)
                except:
                    address4, params = reduce1(address3)
                    try:
                        sleep(1)
                        return get_laongla(params)
                    except:
                        address5, params = reduce1(address4)
                        try:
                            sleep(1)
                            return get_longla(params)
                        except:
                            address6, params = reduce1(address5)
                            try:
                                sleep(1)
                                return get_longla(params)
                            except:
                                address7, params = reduce1(address6)
                                try:
                                    sleep(1)
                                    return get_longla(params)
                                except:
                                    address8, params = reduce1(address7)
                                    try:
                                        sleep(1)
                                        return get_longla(params)
                                    except:
                                        address9, params = reduce1(address8)
                                        try:
                                            sleep(1)
                                            return get_longla(params)
                                        except:
                                            address10, params = reduce1(address9)
                                            try:
                                                sleep(1)
                                                return get_longla(params)
                                            except:
                                                address11, params = reduce1(address10)
                                                try:
                                                    sleep(1)
                                                    return get_longla(params)
                                                except:
                                                    address12, params = reduce1(address11)
                                                    try:
                                                        sleep(1)
                                                        return get_longla(params)
                                                    except:
                                                        address13, params = reduce1(address12)
                                                        try:
                                                            sleep(1)
                                                            return get_longla(params)
                                                        except:
                                                            address14, params = reduce1(address13)
                                                            try:
                                                                sleep(1)
                                                                return get_longla(params)
                                                            except:
                                                                address15, params = reduce1(address14)
                                                                try:
                                                                    sleep(1)
                                                                    return get_longla(params)
                                                                except:
                                                                    address16, params = reduce1(address15)
                                                                    try:
                                                                        sleep(1)
                                                                        return get_longla(params)
                                                                    except:
                                                                        address17, params = reduce1(address16)
                                                                        try:
                                                                            sleep(1)
                                                                            return get_longla(params)
                                                                        except:
                                                                            address18, params = reduce1(address17)
                                                                            try:
                                                                                sleep(1)
                                                                                return get_longla(params)
                                                                            except:
                                                                                print('Error: {}'.format(address))