極私的視点(再)

思いついた時に、思いつきの文章とそれっぽい写真を大公開です。

もうすぐ2021年シーズン開幕です(Pythonでプレーを記録する仕組みを作ってみた)

今年のシーズンは

ことしは無観客とはいえ例年通りの開催になりそうな日本のアメフト界隈です。

で、アメフトっていうのは様々な情報を収集・分析して戦略を立てる「準備が非常に重要」だと言われてはいるものの、現在そのデータは各チームの担当者がそれぞれ集計しているだけで、リーグからプレー単位の詳細なデータは(少なくとも一般には)提供されていないのが現状ですね。試合後にはスタッツが発表され、各シーズンのチーム成績、選手成績などが発表されるってことは、試合ごとに細かいデータを収集されていることは確かなことでしょう。そいつ(生データ)を公開してくれれば、ちょっと前にチャレンジしてみたPDFからデータを抽出してCSVを作成するなどという苦労をしなくて済むわけで、リーグ関係者各位にはそのデータを公開していただきたく、伏してお願いいたします。

 

tonytani37.hatenablog.com

 文句ばかり言ってても埒が明かない

ということで、 コロナ禍で外出自粛だし、他県との往来も自粛だし、せっかくの夏休みでもやることないから、自分で自分に「スタッツを登録して、集計する仕組みを作ってみる」を夏休みの自由研究としてみました。(実際には夏休み前から、大枠の仕組みはポチポチつくってましたが)

大雑把な仕組みはPython+djangoです。こいつで簡単なWEBシステムを作ってみましたが、とりあえず思いつくことから作っていたから、つぎはぎだらけになってしまいましたがなんとか動きました。ただしキックオフとかパントとかファンブルとかインターセプトとかのゲインヤードや、各チームのプレー時間などの計算はまだまだ勉強が必要な状況です。でもとりあえずそれっぽい数字をまとめて表示することはできるようになりました。

f:id:tonytani37:20210807182051p:plain

python+djangoの環境をVSCを使って開発です。テスト用DBはとりあえずSQlite3

テスト用でつかったのはYoutubeにアップされてた神戸大レイブンズとアズワンブラックイーグルスの試合(7/3開催)の様子です。

 

youtu.be

とりあえず思いついて作ってみたこと

キックオフでリターンTDだったけど反則があって蹴り直しで云々というような、いろいろな要素が絡んだ状況を記録するのは大変だしパターンを洗い出しきれてないので、基本は攻撃チームとクォーターとダウンとゲインヤード、プレイ内容と得点を記録することです。今のままでもレシーバーやボールキャリア、タックルした選手なども登録はできるけど、それをうまく利用できてないので、それはこれからの課題ですね。

それから色々とググってみたけれど、野球のスコアブックみたいに業界標準的なデータ・フォーマットがなさっぽく、それが原因で各チームバラバラになることで広くデータを共用できないことは問題です。もしそれがあるならば一般に公開していただければありがたいと思いますね。

ということで、とりあえず登録画面です。現場で簡単に使えることを前提に、画面はスマホで使うことを想定してます。

これが登録画面です

f:id:tonytani37:20210807175940p:plain

登録画面 とりあえず項目を並べただけのデザインは今後の課題

太文字は入力必須で、未入力のまま登録しようとすると怒られます

  • 対戦情報などは事前に登録しとくと自動的に表示します。
  • クォーターとQBは前のやつをそのままセットします(手で変更は可)
  • 残りヤード数はなんとなく自動計算します。
  • ゲインヤード数もロングゲインのときにいちいち暗算するのもイヤなので、プレピアススポットとボールデッドになった位置を入力すると、自動的に計算します(なんとなく)
  • ヤード数を登録する場所がないので、反則とかが発生したときのゲインヤード数が正確ではなかったりする気がしますが、今のところは気にしないことにしました。
  • そのほかダウン数は順番に進みますが、反則時の対応は今のところできてません。攻撃チームも4thダウンには自動的に設定します。ただし4thギャンブル成功やターンオーバーなどの攻撃権が移動する場合の対応はできてません。

まあそんなふうに作ってみたんですが、実際にYoutube見ながら登録してみたら、色々と不具合もみつかって、その都度直したりしてたのでソースの中身がぐちゃぐちゃになってしまいました。

これが集計画面です

f:id:tonytani37:20210807204402p:plain

集計画面 こちらはどちらかといえばPC画面用

これを見ると神戸大はターンオーバー1回分多くて負けたカンジですね

ある程度必要な情報は集計され表示していると思いますが、プレー時間等の集計は現在のデータベース構造ではその集計が難しいところもあります。

そんなわけで、データ登録を間違っているとか、自動計算が違うとか色々とバグが存在しているはずな(放置しているのもある)ので、上記の画像で表示されている内容は、試合の公式記録と異なることがあります(たぶん違います)

とはいうもの、夏休みの自由研究としてはこんなカンジの大雑把さでもよいのかな、と。

まだクラウド環境で動かしてないので、実際のスマホでどんな使い勝手かが不明ですが、PCよりは多少使いやすいのではないかと。

それからもしこいつを使う場合は、プレーを見て選手の番号やプレー種類、ボールデッドの位置などを確認する係の人と、データを登録する係の人の二人がかりでやるほうがスムースな気がしました。

こんな仕組みがあれば、紙から手入力その他で行うデータ化の手間が省けるし、データが蓄積されれば、そいつをCSVで抽出すればあとはエクセルでも何でも自由自在に集計・分類ができるので、どこかの誰かの何かの役に立つのではないかと思ったりします。

それから、今回夏休みの自由研究でとりあえずツギハギながらも作ってみましたが、これをどこかで知って一念発起してスラバシイ仕組みを作り上げる人が出てくれば、それが一番良いことではないかと考えたりします。それ以上にリーグから公式データとして生データが提供されることが一番だと思いますね。

まあそんなわけで、現場からは以上です。

 

連休だからといって外出したり 感染拡大中なのに

暑いのに外出してはいけません

四連休ということでちょっと外出しましたよ。感染拡大中なのに、どうもすみません。

f:id:tonytani37:20210725180249j:plain

前にも書いた「ディストラクション・ベイビーズ」の撮影場所にもなった三津の渡し。無料です。反対岸にいても姿が見えたら来てくれます。(一応、呼び出しボタンもあり)

f:id:tonytani37:20210725180413j:plain

f:id:tonytani37:20210725180432j:plain

映画冒頭で主人公が乱闘してたあたりを反対岸から望む

f:id:tonytani37:20210725180704j:plain

f:id:tonytani37:20210725180725j:plain

f:id:tonytani37:20210725180732j:plain

f:id:tonytani37:20210725180746j:plain

f:id:tonytani37:20210725180750j:plain

f:id:tonytani37:20210725180753j:plain

港町にはネコがいる

f:id:tonytani37:20210725180818j:plain

次の日は有名な駅

f:id:tonytani37:20210725181012j:plain

クソ田舎の駅で1時間に1,2本だけの運行だけど、沢山の人がうごめいてた

田舎の無人駅だけど沢山の人がいる。一両編成の同じ電車に乗ってた人のほぼすべてがこの駅で降りた。

f:id:tonytani37:20210725181311j:plain

みんなが写真撮ってる。夕日が有名らしいけど、昼間もこの混雑ぐあい。

f:id:tonytani37:20210725181511j:plain

f:id:tonytani37:20210725181515j:plain

f:id:tonytani37:20210725181519j:plain

f:id:tonytani37:20210725181522j:plain

みんな順番で記念写真を撮ってた。ここでも厳島神社の記念撮影ルールと同じく、後ろの人がカメラ撮影して、次はその人のカメラでその後ろの人が写真を撮る方式。

f:id:tonytani37:20210725181654j:plain

f:id:tonytani37:20210725181658j:plain

田舎の駅舎の前にはおしゃれ珈琲販売車。外国人のお客さんもいたけど、珈琲店のお姉さんが流暢な英語で対応してた。

f:id:tonytani37:20210725181916j:plain

人が多かったから、写ってた人を消した写真

おまけの屋島

那須与一が扇を射抜いた場所ってもっと長い砂浜かと思ってたら、入り江だった。今は埋め立てられたためか、普通の川でイメージが違ってちょっとがっかり。

f:id:tonytani37:20210725181955j:plain

現場からは以上です。

くま発見報告サービス的なものをつくってみた(Python+Django+Javascript+Bootstrap+Google Map API)

いくつになっても勉強じゃ

ちょっとまえに80歳過ぎと思われる女性が「私がこれから起業しようとしても別に普通でしょ?」とカメラに向かって語りかけるCMがあった。内容はうろ覚えだけどいくつになっても新しいことをやればいいんじゃんってことだなぁと思い、なかなかかっこいいよなと思った。

まあそれからめてワシもだいぶ年齢的にはくたびれてきているけれど、新しいことをやってみるのは面白いと思ってるので、ここ最近はPyhtonをつかってちょっとしたプログラムを書いたりしている。ただ具体的な目的がないとカルチャースクール的な域を脱するには難しいだろうと考え、かつて仕事でお客さんに紹介していた「鳥獣被害の情報を管理するシステム」みたいなやつを作ってみようとしてやってみた。

ちなみにサイトデザインは人気のBootstrapを使ってます。

とりあえずJavascriptをさわってみる

PythonDjangoをつかって簡単なWEBシステムはいくつか作ってみたりしてたんだが、今回はGoogle Map APIをつかったシステムにしようと考えたから、それにはどうしてもJavascriptを扱うことが必要。でも全くやったことがないので、グーグル先生に教えてもらいながら先人が残してきたコードを参考に(単純にコピペもして)手探り状態。特に情報をDjangoで作ったテンプレートからJavascriptにどんなふうに渡すかがよくわからず、2、3日悩んだりしたけど、突然の天啓でなんとか解決(それが正しいやり方かどうかわからんけど)したりと、とりあえずカッコがつくようなもんができましたよ。

Google Map APIについて

Google Map APIをつかう場合には、費用が発生するので(ただし1ヶ月$200までは無料。ちなみに1000アクセスあたり$7)作ったアカウントにクレジットカード情報登録が必須です。

それからアカウントを登録するとアクセス時に必要なAPIキーが発行されますが、こいつの扱いをどうするか。Google Mapの利用説明をみると基本APIキーは公開しないように大事に管理せよと書かれているんだけど、Googleに地図要求コードを送信するためのソースコード(HTML文)にはもろに書かれているので丸見え。で、どうしようかといろいろと調べてみたんだけど、結局はGoogle Map APIの管理側でアクセスサイトを制限したり、利用するAPI毎にコードを発行したりすることで、悪用を防ぐってのが一番簡単な対策ではないかと思われます。ほんとうは電文送信直前にコードを書き換えるやり方が良いんだろうけど、WEBサーバー側の設定を調整したりすることが必要で、pythonanywhereやherokuでは対応ができなさっぽいので諦めました。

実際どんなかんじか?

サービスの概要は次の通り

  • スマホの位置情報と現在時刻を取得する
  • 位置情報と時刻にコメント(くまがいる、フンを見つけた)を追加して送信する
  • 位置情報と時刻は変更可能(後で報告する場合の対応)
  • アプリではなくWEBサービスとして提供

アプリとして提供しないのは、アプリをダウンロードしていないと使えないのであれば緊急時に役に立たないことと、アプリの公開ではカネと時間がかかってめんどくさいからです。もちろんスマホアプリの作り方がよくわからないのと、iOS,Android両方作るのはめんどくさいというのもありますわい。

「誰でもどこからでもすぐに情報提供ができる」ということは、誰でもいつでもいたずらができるってことになりますが、その点についての対策は行っておりません。利用を制限することで使いづらくするよりも、誰でもいつでも簡単に情報提供ができることが、よりおおくの情報を集めることができるんじゃないかって考え方ですね。

で、今回のサービスは基本スマホから使うことを前提としているけれど、PCから使うこともできるから、現在のクマや鳥獣被害の情報収集方法として多くの自治体で使われている電話による連絡にも、連絡を受けた担当部署がPCからその情報をもとにデータ登録が簡単にできるので、画面や機能を多少見直せばそちらでも使えるかなと。(そのための位置情報と時刻が簡単に変更することができるようにしとります)

簡単なご紹介

では画面を貼り付けてみましょう

修正)いらすとやのかわいいクマちゃんよりも、同じく利用フリーのクールなクマのほうが良いと思い画像を差し替えました。また名前がちゃんとした英語の「クマに気をつけろ」とはなってなかったのでこちらも修正しますた。以下、すべての画面のタイトルと絵が変わります。

トップ

f:id:tonytani37:20210718230026p:plain

タイトルが英語的にちょっとおかしかったので直したのと、可愛らしいくまの絵からクールなやつに差し替えますた

f:id:tonytani37:20210718234039p:plain

スマホのメニュー画面

 

トップ画面の「ほうこく」ボタンを押せば報告画面へ飛びます。そのタイミングでスマホの位置情報を取得してます。「位置情報以外は取得しませは」などの注意書きはもっと詳しく個人情報取り扱いについての説明が読めるようにするべき。

報告

f:id:tonytani37:20210718233336p:plain

報告画面です

スマホの位置情報と現在時刻が設定されるので、現場から報告するならばこのまま「ほうこく」ボタンを押せば報告はおしまい。場所を移動してしまったとか、後で報告する場合には場所と時刻の変更が可能。コメントがあればここで登録するとデータとして反映されます。急いでるときや焦っているときにはコメントを省略してもオーケー。

場所変更

f:id:tonytani37:20210718233432p:plain

報告場所を変更する画面

場所を変更したい場合、地図上をタップすれば位置指定ができるので、山の中でも海の上でも位置していはカンタンです。ここらへんの機能はさすがGoogle先生というべきで、これだけ便利な機能ならば有料も仕方ないかな。

 登録情報参照

f:id:tonytani37:20210718233517p:plain

登録済み一覧情報が目撃時刻が新しいものから表示されます

報告済みの情報を参照することもできますよ。

f:id:tonytani37:20210718234348p:plain

報告一覧や一覧地図から選択すると内容を見ることができます
報告済み一覧(地図)

f:id:tonytani37:20210718233847p:plain

登録された位置情報一覧が地図で見ることができます

f:id:tonytani37:20210718233947p:plain

PC画面

報告情報一覧を地図上にプロットした画面はPCのほうが(当然)見やすいね。自治体や組織側で登録管理する場合はこちらのイメージになりますな。

 

f:id:tonytani37:20210718121643j:plain

津和野城の登山道にあった看板にQRコードを追加しとります(合成写真)

実際に利用例としては上の写真のようにクマ出没注意の看板にQRコードなどを表示しとけば、すぐに使えるのではないかというひとつのアイディアです。

 

なお、画面の位置情報、報告情報はテストでテキトーに登録したもので根拠はゼロです。

 とりあえずこの頃は住宅街へクマが出没するニュースがいろいろと取り上げられているので、「クマ情報を報告する」的な内容にしてみたけど、サルでもイノシシでも害獣についても使える。写真を登録できるようにすれば利用方法がもっと広がるだろうから、次は写真登録機能の実装をしてみたいと思っとります。

そんなわけで現場からは以上です。

Pythonanywhereを使ってみた(今回はPythonネタです)

わからないならインターネッツを調べてみよう

Pythonの勉強でWEBで動くヤツを作ってみたんだが、ローカルで動かすのもつまらないので、なにかインターネット上で動かせないかと探してみたらまず見つかったのが「Heroku」でした。

クラウド・アプリケーション・プラットフォーム | Heroku

こちらは環境にちょっとクセがあったりするけどデプロイは簡単で、自分が勝手に作ったプログラムがインターネット上で動くのを確認してちょっとカンドーした。でもDjangoを使ったときの静的ファイルの扱いなどがよくわからんから現在はstreamlitというライブラリを利用した新型コロナ関連情報のポータルサイトを動かすして、日本政府の不甲斐なさを嘆いております。緊急事態宣言発令とか終了に合わせて時々メンテしたりしております。

st_covid19 · Streamlit (thawing-lowlands-93532.herokuapp.com)

 んで、ほかにも無料で利用できるサービスが無いかと探してみると見つかったのが「Pythonanywhere」というサービスだったので、こっちも使おうとしてみたんだけど使い方がよくわからない。なので早速ググってみたわけです。

Host, run, and code Python in the cloud: PythonAnywhere

今回いちばん言いたかったこと「オマエラ、実際に動かしてみたんか?」

で、日本語の紹介がたくさんヒットしたからそいつらを参考にしていじってみたんだがうまくいかん。なんでうまくいかんのじゃと人のせいにしながら軽く怒りつつ続けて色々と試してみた。すると見つかったそれらのサイトの記述には書いてることは同じで体裁だけが違うだけのものがたくさんあるのに気がついた。ってか、同じじゃん。その上「githubにある自分のソースをデプロイするやり方」の説明で「これでデプロイ完了です」と書いているのに、そこに掲載されているデプロイが完了した「あなたの画面」は、Djangoでプロジェクト作成後に立ち上げみるテストサーバーの画面だったりするわけで、それは自分のサービスじゃないだろ?それはDjangoが出してるテスト用初期画面だろ?そんな程度で「これであなたのサービスが公開できる」とドヤ顔のサイトがたくさんあったのでガッカリする。

オマエラ、実際に動かしてないだろ?他のサイトを見て、コピペしてエラそうにしてるだけだろ?!そんなの勉強しようとしているヒトタチのノイズになるだけだからやめろ。

f:id:tonytani37:20210620005318p:plain

これはDjangoの環境が正しく作られたかどうか確認するときの画面で、コードを一行も書かなくても出てくるヤツ。PythonanywhereでDjangoのサービスを作成しただけで出てくるヤツ。こいつは日本語設定もされてない手抜きなヤツ。

もちろん詳しく丁寧に書かれたサイトもあるんだが、詳しすぎて素人のワシにはよくわからんかったから、これからPythonanywhereを触ってみたいと思っている初心者のヒトタチのためにワシがやって実際に動くまでにやったことを書いてみる。これが正しいやり方かどうかはわからんが、取りあえず動いたのでやって見る価値がゼロではないよ。

Pythonanywhereの登録とかは他の詳しいサイトを参照すべし

Pythonanywhereサービスの細かい内容や登録方法などはググってみてください。

いろんなサイトに最初にTokenを取得しろと書いてありますが、これはサイトへの接続テストをするくらいで、実際のデプロイで使うことはありませんでした。でも取得せよと軒並み書いてあるのでとりあえずとっとく。

Djangoの環境設定(特にDEBUGモードの設定による振る舞いの違い)についても最低限の知識は事前にゲットしたうえでローカルで動くDjangoのソース群の準備は大前提です。

それからgithubから資源をアップロードするので、まずはそちらのアカウントを取得したのち資源をプッシュしておいてください。githubがよくわからん人はそっちも先に調べててくだされ。

ちらりとLinuxコマンドも使いますので、一番基本的なコマンドが書いてあるサイトを見つけておいてください。

サイトによっては「仮想環境を作って」などと書いてるけど、仮想環境を作らなくても動きます。設定項目が増えるので、めんどくさい人は仮想環境を作らなくても大丈夫(めんどくさいし、トラブった時の問題解決をシンプルにしたかったからワシは作らずにやりました)

f:id:tonytani37:20210620071053p:plain

Pythonanywhereのダッシュボード画面です。ここからいろんな機能に飛んだりできますね。

以下、「」で囲んでいるのはPythonanywhereが提供する機能名です。

で、まずやることは「Web」からメニューに沿ってdjangoで動く環境を作ること。そうすると上のロケットが出てくる画面が表示できるところまでできる。

次に「Console」でgithubリポジトリをクローンする。これについてはpythonanywhereというライブラリをインストールして、コマンドを叩けばいいと書いてあるサイトも多いんだが、ワシの場合はそれだとなんだかうまくいかなかったということもあって、素直にgithubからクローンしてやったぜ。

”git clone https://github.com/自分のユーザ名/リポジトリ名” と入力して実行するだけ

(https://以降は開いている自分のリポジトリのURLをコピペすればオーケー)

f:id:tonytani37:20210620071629p:plain

Consoleは普通のBashなので、怖がらずにコマンドを打っちゃってください。ディレクトリ間違えて実行しているのは見て見ぬ振り。

そうすると自分のPythonanywhereの環境にリポジトリ名が付いたフォルダが作成され、その下に資源がアップロードされます。

f:id:tonytani37:20210620010647p:plain

今回はdockerで動かしてみた時のリポジトリをそのまま使いました。nginxという名前は、Webサーバにnginxを使ってたからわかりやすいと思って付けただけです。mysite/というのは、WSGIファイルの設定を楽にするためにPythonanywhereで作ったダミーのDjangoプロジェクトです。こいつは自分のソースで動き始めたら消してもオーケー

f:id:tonytani37:20210620010824p:plain

nginx/配下はこんなかんじ。ここにもテスト用やdocker用に作ったときの名残がたくさん残ってます。

Pythonnaywhereにソースをアップロードできたら、次にやるのがソースの保存場所の指定。「Web」にあるメニューからなので簡単だけど、パスの参照ができないからすべて手で登録する必要あり。

f:id:tonytani37:20210620011121p:plain

パス指定はすべて手入力なので間違えないように

次に行うのが上の画面にある"WSGI.configuration file"という部分。リンクをクリックするとWSGIの設定ファイルが表示されるので修正しましょう。

WSGIについてはすでにダミーサービス用に作成されているので、そいつの中の二箇所を修正すればオーケー。

自分のプロジェクトが保存されているフォルダ名と、setting.pyがある場所を指定します。

WSGIとはなにか?と疑問に思った人は、自分でググってください。ワシも詳しいことは知らんから、ちょっとだけでもエラくなったらワシに教えて下さい。

f:id:tonytani37:20210620011917p:plain

修正は二箇所のみです。この時点でmysite/は不要なので削除しても問題ない(はず)

 あとはmediaフォルダとかstaticフォルダとかを「Web」から必要に応じて指定してください。mediaやstaticフォルダの指定に合わせてsetting.pyも直す必要があるかと思ったけど、関係ないみたい(不確かな情報)です。そんなカンジなので、view.pyでダイレクトにパス指定などしている場合にはバグ発生となるかもしれませんので、テストはきっちりやるように。

で、setting.pyといえば接続を許可するURLやアドレスの指定が必要ですが、それについては

 "ユーザ名.pythonanywhere.com"

と、サービスへアクセスするURLをそのまま指定すればオーケーです。

よくわからん人は、ダミーで作ったmysite/配下にあるsetting.pyのALLOWED_HOSTS行に書いてあるそのままをコピーすればオーケー。

f:id:tonytani37:20210620012506p:plain

DEBUG = False にしとく。

ここまで準備したら「Console」からDjangoを初めて動かすときのおまじないであるマイグレーションを実行するんですが、python3 manage.py migrateはローカルと比べて処理時間がかかるので我慢して待ちましょう。またローカルのデーターベースで動かした実績がある資源をそのままアップしてmigrateしたときにエラーが表示される場合、migrateディレクトリに保存されているmigrate履歴ファイルを削除すればいいですよ。

もういっこDjangoの本番デプロイ時にやれと書いてあるstaticファイルを本番用指定フォルダにまとめるPython3 manage.py collectstaticなんですが、「Web」から実行環境に合わせてstatic/のパスを指定しておけば、実行しなくても動きました。(setting.pyのstatic指定が開発環境のままでも動いた理由はここらへんにあるかもしんない)

 

f:id:tonytani37:20210620012634p:plain

なにか修正したら緑のリロードボタンを押すのは必須

ここまでできればあとはリロードボタンを押して変更を反映させた後に、自分のサイトにアクセスしてみましょう。「Web」のConfiguration forの右側のリンクをクリックすると自分のサイトへ飛べます。

f:id:tonytani37:20210620012842p:plain

これで完成。これこそあなたがアップロードした「あなたの画面」です それにしても練習用とはいえ色気がないデザインの画面だな。

事前にユーザ登録が必要な場合は、「Console」からpython3 manage.py createsuperuserでadminユーザを予め作っておく必要がありますね。

これでおしまい。うまくいくはず。エラー画面が出てきたら、それはなにかの設定がおかしいので、定番の手順どおりにsetting.pyのDEBUGをTrueにして、画面に表示されるエラーメッセージを見ながらぼちぼち直してゆきましょう。

特に書かなかったんですが、Djangoを始め必要なライブラリは個別に「Console」からインストールしなければならないっぽいです。(ワシの場合は色々やってたら勝手にインストールされたっぽいので、どこまでやるべきかがよくわからない)もし動かなかったらそっちも疑え。とりあえずインストールしてみろ。なおPythonanywhereではPython2も使えるっぽいので、PiPやPythonを使う場合にはバージョン3を明示して実行する必要があります(と思います)。例えばpip3 installとかpython3 manage.pyとか。

ちなみにDBは無料サービスとしてMySQLが使えますが(PostgreSQLは有料)、SQLite3でも問題なさげでした。Herokuの無料ユーザ環境では定期的にファイルが消されるらしいので、使うな(その代わり無料のPostgreSQLが使える)と言われてましたが、Pythonanywhereでは(3ヶ月程度過ぎると消されるみたいだけど)Herokuみたいにすぐに消えることはないみたいです(未確認事項)

 

それではみなさん、これからも楽しいPythonライフを!

ゴールデンウイークは外出自粛せよ(その2)

続きです

長崎はよいところです。

f:id:tonytani37:20210509163731j:plain

コロナ禍で出島は閉鎖中

f:id:tonytani37:20210509163736j:plain

夕日のなかの長崎港

f:id:tonytani37:20210509164011j:plain

長崎県には九十九島と呼ばれる風光明媚な場所がありました。

ちなみに当日は曇りだったので、Photshopで青空にしてついでにパノラマ合成してみました。

f:id:tonytani37:20210509164016j:plain

瀬戸内海を見慣れていると島が多い海は珍しくはないけれど、なかなか良い眺めで関心しました。天気が良ければもっときれいだったはず。

f:id:tonytani37:20210509164226j:plain

 

佐世保バーガーの本場で特に評判がいい店のやつを食べてみたら、コスパ最高で美味い。

f:id:tonytani37:20210509164600j:plain

佐世保 kayaバーガーショップ

予約していかないとかなり待たされるとのこと。店に食べる場所がないので基本テイクアウト。向かいにイオンがあるので、ほとんどの人がそこの駐車場に車を止めて食べてた。ワシもイオンでコーラ買って駐車場で食べた。

f:id:tonytani37:20210509164640j:plain

スペシャルバーガー

バンズが独特。サイズは直径20cm位ででかい。パテ、ベーコン、たまご、たまねぎ、レタス、トマトなど山盛りで一個食べればお腹いっぱい。

奥さん、これでなんと550円

バーガー食べて次に行ったのが西海国立公園へ。

f:id:tonytani37:20210509165243j:plain

日本三大渦潮が見られるとのことで、たしかに海が渦巻いてた。ところでもう一つは鳴門だけど、残りはどこ?

youtu.be

動画も撮ったよ。

f:id:tonytani37:20210509165746j:plain

渦潮はともかく、近くにそびえ立つ三本の塔なんだが、こいつは実物を見ると異様にデカくてちょっと怖い。煙突かと思ったら、旧軍の通信用アンテナらしい。それにしてもデカい。デカすぎ。昔の人はよくこんなもん造ったなと思う。

針尾送信所 - Wikipedia

ウィキペディアみると、このアンテナは「空の大怪獣ラドン」に出てくるらしい。で、劇中ラドンに壊される橋はさっきの渦潮画像に写ってた橋みたい。残念、知らんかった。知ってたらもっとテンションあがったのにな。

ラドンが壊す橋 - Google 検索

 

つづいてはこちら

こちらは長崎くんちが行われる、鎮西大社諏訪神社であります。

f:id:tonytani37:20210509170436j:plain

f:id:tonytani37:20210509170559j:plain

f:id:tonytani37:20210509170603j:plain

f:id:tonytani37:20210509170609j:plain

この諏訪神社は様々な狛犬があることで有名とのこと。隣にちびっこ向けの動物園もあります。いまはクモザルのばあちゃんが熱いらしい。

f:id:tonytani37:20210509170738j:plain

 足に紐を巻き付けられまくっている狛犬。紐を巻くと様々な事を「止める」ご利益があるらしい。なので悪事をやめたい(止めたい)ヒトや、受験のすべり「止め」などで参拝する人多数。なので紐がぐるぐる巻き状態。その他にも噛まれるとご利益があるなどいろいろな狛犬がいた。

f:id:tonytani37:20210509171143j:plain

河童みたいな狛犬 頭の皿に十円入れるのはやめろ

f:id:tonytani37:20210509171126j:plain

f:id:tonytani37:20210509171222j:plain

f:id:tonytani37:20210509171226j:plain

f:id:tonytani37:20210509171229j:plain

f:id:tonytani37:20210509171233j:plain

f:id:tonytani37:20210509171237j:plain

この日の晩飯は寿司。家族が「長崎は魚がうまい」と盛んに言うし、「ここは回転寿司だけど、レベルが違う」とも言うんで持ち帰りで食べてみたら、これが実に美味い。テイクアウト割引セール中でラッキー。寂れた商業ビルの中にあって、地元にヒトしか知らないレベルで穴場でござる。

f:id:tonytani37:20210509172832j:plain

全国チェーンの回転寿司と違ってウニの臭みがなく美味すぎ

一度は行ってみたかった稲佐山展望台へ登る。駐車場に入れない程じゃないけれど、思ったより人が多い。カップルで来ると分かれると言われているらしいけど、ラブラブカップルも多かった。

f:id:tonytani37:20210509204611j:plain

長崎の夜景(稲佐山展望上から)

(手ブレしたりするしノイズ乗りまくりで)ミラーレスで撮るよりも、iPhoneで撮ったほうがきれいに撮れた。

夜景はきれいだけど、駐車場から上までの階段がきつい。ジイさんにはタイヘン。

さあ帰りましょう

f:id:tonytani37:20210509171808j:plain

大村サービスエリアは恋人たちに聖地に認定されているが、恋人たちではないにーちゃんたちが記念撮影中。後ろは大村湾。夕日が綺麗らしい。

ということで、長崎からの帰りには吉野ケ里歴史公園に寄り道です。ゴールデンウィークなので、駐車場代も入場料も無料でラッキー。地元のちびっこが遊具をもってたくさん遊びに来てました。

f:id:tonytani37:20210509171912j:plain

f:id:tonytani37:20210509171916j:plain

f:id:tonytani37:20210509171920j:plain

f:id:tonytani37:20210509171925j:plain

f:id:tonytani37:20210509171929j:plain

f:id:tonytani37:20210509171934j:plain

f:id:tonytani37:20210509172107j:plain

f:id:tonytani37:20210509172112j:plain

f:id:tonytani37:20210509172117j:plain

発掘された墓がそのまま保存されている。

f:id:tonytani37:20210509172122j:plain

f:id:tonytani37:20210509172127j:plain

f:id:tonytani37:20210509172132j:plain

f:id:tonytani37:20210509172136j:plain

f:id:tonytani37:20210509172243j:plain

現場からは以上です。

f:id:tonytani37:20210509173243j:plain

ではさらば。

 

XリーグがPDFデータで公開しているスタッツを(ある程度までだけど)パソコンで利用できるようなデータにしてみよう

わからなくてもとりあえずやってみよう

Xリーグのスタッツをデータ化するという試みがとあるサイトに公開されてると聞いて読んでみたんだが、正直ちょっと分かりづらいしやって見るにはハードルが高い。


ということで、Pythonの知識がなくてもとりあえずデータ化が出来るようなものを作りますた。

 

きっかけになったサイトはこちら

【Python】Xリーグスタッツ自動抽出器を作ってみた(OCR、正規表現) - Qiita

ノジマ相模原ライズでアナライズを担当している冨上さんが公開されています。

 

冨上さんの記事はなかなか詳しく書かれているんですが、実際にやってみようとするとパソコンにPythonの環境を構築する必要があります。本気でやろうとする人たちはそうしたほうがよいと思いますが、どんなもんかちょっと試してみたいと思っている人たちにはかなりハードルが高い。

 

ということで、Googleアカウントさえ持ってれば誰でもPythonを動かすことが出来るサービスをGoogleセンセイが提供してくれてます。そんな便利なサービスがあるならば使うしかない。クリックするだけでとりあえず誰でもかんたんに使えるしね。

 

開いたサイトにごちゃごちゃと注意書きなどが書いてありますが、とりあえず使ってみて下さい。

 

かんたんな使い方ははこちら

注意)Googleアカウント必須です。

1.まずはリンクをクリックする (2021/5/31 リンク先変更)

https://colab.research.google.com/drive/1iNRPyJbjmhgoVUHYwo1y-i4vHUoEQuc6?usp=sharing

 

f:id:tonytani37:20210508183533j:plain

開いた直後
2.画面の説明

f:id:tonytani37:20210508183809j:plain

作られたファイルはこちらに表示されます
3.処理の実行のしかた

画面に書いてあるコメントを読んで上から順番に実行して下さい。

f:id:tonytani37:20210508183912j:plain

処理の実行は上から順番にクリックするだけ

 

本当はクリックするだけで全部自動的に動いて、出てきたデータがそのままエクセルその他で使えるようなものがベストなわけですが、そんなに世の中は甘くない。が、手で一個一個入力してデータを作るよりも少しは楽になるかも知れません。
つーことで興味がある人は動かしてみて、モット良くなるように機能改善してってもらえればと思っとりますよ。

 

いまXリーグのサイトから過去のスタッツデータへのリンクは切れているみたいです。

成績 | Xリーグ 公式サイト (xleague.jp)

なので、こっそり残っていたリンク先からファイルをダウンロード出来るようにしています。

直接ファイルを見たい人はこちら。

20190824_X1_FF_BB_921.pdf - Google ドライブ

試合日:2019/08/24(土) 富士通フロンティアーズ vs IBM BigBlue @富士通スタジアム川崎

今回作ってみた処理で作成されたファイルに手を加えて、エクセルで読めるようにしてますので、ご参考まで。(1Qのみでキックオフやパントなどは除いています)

stats_1Q.csv - Google ドライブ

ということで。 

 

ゴールデンウイークは外出自粛せよ

なるべく人が少ないところを狙ったけど

COVID-19感染防止で外出自粛とか言われてるのは知っています。でも長い休みがないと行けない場所もあるわけで、人が少ない場所という言い訳をしつつ遠出をしてみたり。

f:id:tonytani37:20210505234629j:plain

f:id:tonytani37:20210505234634j:plain

f:id:tonytani37:20210505234639j:plain

f:id:tonytani37:20210505234700j:plain

軍艦島です。その日の夜にテレビで軍艦島へ上陸した番組をやってて驚いた。チャンスが有れば上陸してみたい。

f:id:tonytani37:20210505234839j:plain

f:id:tonytani37:20210505234844j:plain

f:id:tonytani37:20210505234848j:plain

f:id:tonytani37:20210505234853j:plain

道中、九州国立博物館により、隣りにある太宰府天満宮へも参拝。それなりの人出。

f:id:tonytani37:20210505234959j:plain

太宰府天満宮の牛は防府天満宮に比べると小さかった。

f:id:tonytani37:20210505235111j:plain

f:id:tonytani37:20210505235117j:plain

f:id:tonytani37:20210505235121j:plain

長崎市内をぶらぶら歩く。オランダ坂界隈。オランダ坂は初めて登った。

f:id:tonytani37:20210505235254j:plain

f:id:tonytani37:20210505235300j:plain

f:id:tonytani37:20210505235321j:plain

観光名所のグラバー園大浦天主堂も閉館中。

f:id:tonytani37:20210505235415j:plain

ブラタモリ」で紹介されたドンドン坂。

f:id:tonytani37:20210506001016j:plain

石をくり抜いたU字溝。手彫りのノミのあとも確認出来た。

f:id:tonytani37:20210505235419j:plain

f:id:tonytani37:20210505235424j:plain

同じく「ブラタモリ」で紹介された道路の下に橋が隠れている「石橋」。たしかに交差点が山盛りになってた。

f:id:tonytani37:20210506000825j:plain

同じく「ブラタモリ」で紹介された「ゴミ収集用引きかご」を目撃。

f:id:tonytani37:20210506001155j:plain

映画「海猿」に出てきた呉の長い階段に負けない長さの階段。

f:id:tonytani37:20210505235934j:plain

f:id:tonytani37:20210505235938j:plain

f:id:tonytani37:20210505235942j:plain

f:id:tonytani37:20210505235946j:plain

むかし来たときには「ちいさい」と思った長崎新地中華街だけど、今回訪れるとそれなりの規模な印象だった。

f:id:tonytani37:20210506000234j:plain

f:id:tonytani37:20210506000237j:plain

f:id:tonytani37:20210506000243j:plain

崇福寺は寺だけど、かなり中国風味なのは近くに中華街があるからか?

f:id:tonytani37:20210506000718j:plain

コウモリかっこいい

f:id:tonytani37:20210506000722j:plain

というわけで、長いので今回はここまで。次回へ続く。