夜釣りに行って晩御飯をゲットしてきた
釣りに行ってきた
暇だったので友達と夜釣りに行ってきました。寒くなってきて夜釣りだったのでメバルやカサゴなどの磯ものが釣れたらいいな~~~~~~と思っていきました。しかし、近くに磯ものが釣れるような場所がないので適当なところで釣りをしようという風になりました。そして晩御飯でそいつらを食ってやろうという予定です。
とりあえず何か連れればいいのでボウズのがれのSサイズで青イソメで餌釣りしました。青イソメは噛んでくるので嫌いです。
風が思っていたよりも強く、寒かったし久しぶりの夜釣りで視界不良にも慣れていなくて2時間ほどで撤収しました。でも夜釣りはお空お綺麗で良かったですわ。
釣果
今日釣りに行った結果、晩御飯をゲットしました。
ボウズのがれとは(哲学)
さいごに
今回は"ブログらしい"ことを書こうと思って書きました。以上、「夜釣りに行ったら何も釣れず、マクドナルドで晩飯をゲットしたお話」でした。
おわり。
もしよければ↓ぽちっと↓お願いします。
【Python】Fortnite tracker APIを使って現在のストア情報を取得する
はじめに
前回の記事ではアップデートが為されていないライブラリを使ったため本来望んだような動作がされなかった。なので今回は普通にAPIを使う。今回はコードと結果のみの記事になります。基本的なAPIのイントロダクションは前回の記事の通りなのでそちらをみてください。↓↓
また、公式ドキュメントは以下です。
コードと結果
import requests
key = 'API KEY'
URL = 'https://api.fortnitetracker.com/v1/store'
headers = {'TRN-Api-Key' : key}
r = requests.get(URL, headers = headers)
list_result = eval(r.text)
print(list_result)
https://tracker.gg/developers/docs/authentication
↑にある通り、headersとしてTRN-Api-Key: API KEYを渡すことで認証を通します。
結果は長くなってしまうのでスクショで失礼します。
長ったらしくて中身が見えないので出力をlist_result[0]とします。
結果
{'imageUrl': 'https://cdn.thetrackernetwork.com/cdn/fortnite/45E212219_large.png', 'manifestId': 12219, 'name': 'Chaos Agent', 'rarity': 'Epic', 'storeCategory': 'BRWeeklyStorefront', 'vBucks': 1500}
- ImageUrl:商品の画像リンク
- manifestId:商品ID??
- name:商品名
- rarity:商品のレアリティ
- storeCategory:商品のカテゴリー(Emoteなど)だと思ったんですけど全部BRDailyStorefronとなっているのでわからないです。
- vBucks:値段
さいごに
今回はFortnite tracker APIを使って結果の表示だけさせてみました。日本語の文献が見当たらなく、APIの扱いにも慣れていないので少し苦労しました。誰かのお役に立てれば幸いです。ストア以外にも個人の戦績なども見ることができるようなので公式ドキュメントを参照して頑張ってください。
参考
おわり。
もしよければ↓ぽちっと↓お願いします。
【Python】fortnite-pythonライブラリを使ってみた
はじめに
再びなにかAPIを叩きたくなったので調べていたらFortnite APIなるものを見つけ、なんとライブラリがあるらしいのでそれを触ってみました。公式ドキュメントは以下なので観てください。このブログはドキュメント通りに触ります。
https://pypi.org/project/fortnite-python/
イントロ
まず、 http://fortnitetracker.com/にアクセスし、アカウント登録をします。
次にサポート>APIから、Manage or Create API Keysを選択します。
Create applicationからApp name(アプリの名前)、Description(アプリの説明)、Contact Email(Eメール)を適当に入力するとApp Keyが生成されるのでこれをメモしておきます。
実装
pip install fortnite-python
とし、ライブラリをインストールします。使用例を以下にしめします。
from fortnite_python import Fortnite
from fortnite_python.domain import Platform
from fortnite_python.domain import Mode
fortnite = Fortnite('API KEY')
player = fortnite.player('Player name',Platform.GAMEPAD)
stats = player.get_stats(Mode.SQUAD)
print(stats.kills)
print(stats.top1)
コード中のAPI KEYとPlayer nameは先ほどメモしたAPI KEYと自分のプレイヤー名を入力します。fortnite.player()の第二引数としてPlatformを指定してください。デフォルトではPCとなっています。僕はSwitchでやっているのでGAMEPADとします。そしてplayer.get_stats()の引数としてゲームモードを指定します。今回はSQUADとします。
そして出力としてキル数とビクロイの数を出力させます。
2476
210
正しく(?)出力されました。他にもストアの状況などが見られそうなので試してみようとしました。しかし、ソースを見るとstoreクラスにおける変数宣言がされていないのでできそうにないです。次にチャレンジを出力させ、確認すると「フェイタルフィールドで~」みたいなチャレンジがあったので?????となりました。既にフェイタルはないのに…。再度公式ドキュメントを確認すると
いや2019年2月のバージョンかい!!!!!!!アプデとまっとるやないかい!!!!!!!!!
おわりに
ということで今回はFortnite-pythonライブラリを触ってみました。色々便利ですけど普通にAPIを叩かないといけなさそうです。使い方も公式ページにのっているのでやります。というかやりました。後日載せます。
おわり。
もしよければ↓ぽちっと↓お願いします。
チームラボのサマーインターンシップに参加してきた
はじめに
チームラボ株式会社さんで2019年サマーインターンシップにWebアプリエンジニアとして参加してきました。自分自身こういった体験談が見つからなくて緊張したので自分なりの体験談として残しておきます。
参加したきっかけ
正直なところ、自分とは縁のない企業さんだと思っていたのでインターンへ応募すらしようと思っていませんでした。しかし、Wantedlyでスカウトをいただき、それならと応募しました。
選考のフロー
ES→面接→Webテストという流れでした。面接ではガチガチの人間性を問うような質問はなく、雑談のような感じで「最近どう?」「いい感じっす」みたいな感じでやっていたら終わっていました。正直マナーは全くなっていなかったと思います。自分としても受かるとは思っていなかったので全く緊張せず話すことができました。面接が終わった後、あまりにも自分の面接マナーがなっていなかったので確実にダメだろうなとおもったのですが、後日合格通知と事前課題の案内が届きました。
事前課題
事前課題は検索WebアプリケーションをRest APIで実装し、実際にHerokuなどを用いてデプロイまでするような課題でした。時期も時期で期末テストやレポートの締切直前でどう考えても間に合わなさそうなので期限の延期を申請したら快く受け入れてくださいました。期限を延ばしていただいたにも関わらず、フレームワークを使わずPHPのみでコーディングしたためセキュリティの懸念もありローカルで動くものしかできず、できたところまでを提出しました。その時に自分の無力さを改めて感じ萎えてしまい、人事の方に「自分のような全然技術がない人でもこのまま参加していいのでしょうか」などと聞いてしまったのですが、「現段階での技術はあまり求めていないのでこのインターンでスキルアップしてくれればいいですよ」と返してくださり、とても気が楽になりました。なんであんなこと聞いたんだろ恥ずかしすぎる。
インターンシップの概要
概要はこの通りです。自分が参加したのは第四タームです。
・9/17~9/27 8日間
・家からホテルまでの交通費支給
・ホテル手配
・時給1000円
・10時~19時(昼休憩1時間)
インターンシップ中やっていたこと
僕はWebアプリエンジニア(PHP)に所属したのですが、チームが合わせて7人おり、日ごろからアルバイトなどでガンガン実装をしているような人は実際の業務に携わっており、そうでない人や業務をやらない選択をした人は与えられた課題をこなし、最終課題としてイン〇タのようなものを実装しました。僕は当然後者です。
そしてインターンシップ中は毎日チームの人やメンターさんと一緒にランチに行っていました。他にもホテル暮らしだったので毎日毎食外食で太りました。東京はメシがうめえ!
一週目の金曜日にインターン参加者みんなとチームラボボーダレスへ行きました。初めて行ったのですが、平日であるにも関わらずとても混んでいました。作品は言葉にできないほど綺麗な物が多く、今でも鮮明に記憶に残っています。
そして2週目になり、いよいよ最終課題を間に合わせなければならなくなりました。僕自身、開発が初めてだったのでDB設計やルーティング、URL設計などが甘々なままAPIの実装にうつってしまい、それをメンターさんに言及していただいたのでまずはそこから始めました。やはり後から直すのがめんどくさくなったり、DBが冗長になってしまったりするからだろうと思いました。そして画面仕様書通りにAPIを作成しました。今回プログラミングではほぼ躓かなかったです。そしてフロントをcssで実装し、初めて使うHerokuに戸惑いつつもなんとかデプロイまでもっていくことができました。作品自体は公開してもいいそうなのでリンクを貼っておきます。
http://ingra.herokuapp.com/home
OSはWindowsを使ったのですが、インターン生でWindows使ってたのまじめに僕しかいなかったと思います。みんなMac…。開発環境はDockerで言語はPHP(Laravel)、DBはPostgresそしてHerokuを用いてデプロイしました。
インターンシップの参加者
東北から九州まで多くの地域から参加者がいました。日頃からアルバイトでコードを書いていたり、趣味で開発をしている人がいたりなどとても優秀な人が多くいました。大学で何を勉強しているのかや日頃どんなことをしているのかを聞くとみなさんとても詳細に教えてくださり、お話を聞くだけでも楽しかったです。
苦労したこと
何しろ初めてのことが多すぎてそこが大変でした。Dockerを使ったこともなかったですしHerokuも初めて使いました。特にWindowsでDockerの環境構築する時、セッション切れのファイルがあったりコンテナが謎に立ち上がらなかったりMacの人は資料通りにやれば3時間ほどで終わったものを僕は資料通りにやってもうまくいかず、1日半使ってやっと環境構築しました。メンターさんにはとても助けていただきました。
最後に
本当はもっと書きたいことがあった気がするんですけど思い出せないのでここで締めます。作ったWebアプリは別にコード公開してもいいよ~とのことだったのでまた後々コード公開はしませんが、機能の実装方法などを書きたいと思います。周りの学生も皆レベルが高く、そして現場のプロに教えていただき、勉強させてもらう立場でありながらお給料も交通費も宿泊先も用意してくださったチームラボさんには感謝しかありません。
おわり。
もしよければ↓ぽちっと↓お願いします。
【Python】Pythonでセンター試験数学ⅡBを解こうとしたら2時間かけて5点しか取れなかった
はじめに
あれ?Pythonでセンターの問題解けるんじゃねって思ったので挑戦しました。
問題は以下の大学入試センターさんが提示してくださっている問題のうち、僕が受験したH29年度のものを引用します。
https://www.dnc.ac.jp/center/kakomondai.html
解いてみる
問題自体は簡単です。ア~エは倍角の公式使うだけでオは②を2乗するだけです。しかし、タイトルの通り、この二問に二時間かけたうえにこれ以上は厳しいと断念しました。
初めに試みたことはsympyという記号計算に強いモジュールに頼ることです。数学の問題をPythonで解こうとしたことがないのでわからなかったのですが、sympyを使えば倍角の公式などを用いて手で解くようにできると思っていました。しかしそんなうまくいかず、手動で倍角の公式を定義しなければなりませんでした。以下にコードを示します。
import sympy as sy
import math as m
exp1 = 2*a**2 - 1 - x
exp2 = 2*b**2 - 1 - y
cosa = sy.solve(exp1,a**2)
cosb = sy.solve(exp2,b**2)
result = cosa[0] + cosb[0]
c = result.subs(x,(4-15*y)/15)
print(c) #あいうえ
d_shi = -2
d_bo = m.sqrt(15)
print(int(d_shi**2)) #お
print(int(d_bo**2))
・出力
17/15
4
15
…苦しかったです。
コードの説明をします。
x…cos2α
y…cos2β
a…cosα
b…cosβ
です。まず、別で倍角の公式を定義しなければならないのでします。そして変数cosaにsolve()を用いることでa^2=の式に直し、代入します。つまりcosaは(cosα)^2となります。そして両辺を足します。変数resultは求めたい(cosα)^2+(cosβ)^2であり、cos2α/2 + cos2β/2 + 1です。ここからcos2α + cos2β = 4/15を使いたいのでsubs()を用いてcos2α = - cos2β + 4/15を代入します。ここでプログラムにおいて4/15 - yとせず、(4-15y)/15とした理由はこうしないと出力が小数となってしまうからです。なんででしょうかね。とりあえずこれで強引ですがア~エまで出力できました。オはそのままやりました。
さいごに
今回はとても強引に数学の問題をPythonで解いてみました。苦労した点はまず倍角の公式を強引に定義してよいものか、何かないのか考えることです。結局強引に定義しましたが…。あとは上にも書いた通り素直に代入すると出力が小数となってしまったことです。無理矢理小数を分数に直すライブラリはあるのですが、当然思ったような分数にならなかったのでそれは諦めました。今回やるに至り以下のサイトを参照したのですが実際に自分でやるとどのように解けばよいのか全くわからなくなりました。悔しいので時間を見つけて関数以外のベクトルや数列にも挑戦したいと思いました。
https://qiita.com/massa142/items/b224a07c1b33e9a39cd8
おわり。
もしよければ↓ぽちっと↓お願いします。
僕がタメ口を使われてムカつく人は僕がタメ口を使われてムカつく人
はじめに
まずはタメ口とは何かわからない方に以下を示します。
タメ口(タメぐち)とは、相手を対等として扱った話し方である。 親しい人同士での話し方。 これを指す名称は学者間でも定まっておらず、ため口の用語がその隙を埋めてきた。 特に年長者に対して対等の話し方をすることだと、ある辞書には掲載されているが、実際のある調査では仲間同士の言葉だという認識が過半数を占めている。
引用元:Wikipedia
実生活においての対等とは人間としてのという意味ではなく、単純に年齢であったり職場の先輩後輩であったりすることなどを指すと思います。いい意味でも悪い意味でも日本人っぽい概念です。
また、Wikiにもあるように、タメ口の定義は人それぞれであり各々の価値観で変化します。ゆえにこの後に書かれることもあくまで筆者の価値観の上でのものなので噛みつかないでください。僕も"理解できない"とは思いますが、否定的な意味はありません。あくまで僕の中では敬語は年上の方に使うものとしてとらえています。職場の先輩とかはまだ働いたことないのでわかりません。周りに合わせます。僕は割と親にそういったところで厳しく教育されたので気にします。他の人の例を挙げるとたとえ年下であることが双方認知されていてもそこまで仲良くないとタメ口を使っていらっしゃる人がいたりします。こういったところは本当に人によってわかれます。
敬語が"使えない"人
高校までは周りにそういった人はいなかったので意識したことがなかったのですが、大学に入ったり、オンラインゲームでネットの人との交流が増えると敬語を使うことができない人が一定数いることに気が付きました。驚いたのと同じぐらいそういった人に興味が湧きました。大学に入学するまでで敬語を使う機会がなかったのでしょうか。部活の先輩には?先生には??考えれば考えるほどわからなくなりました。"使わない"人ならばこの人達は仲が良いんだなと捉えますが、そうでもなく無差別にタメ口をまき散らしている人、つまり敬語が"使えない"人を見ると心配になります。互いに年齢も知らないのに初手タメ口だと僕は第一印象悪いです。
僕がタメ口を使われてムカつく人
僕は自分が敬語を使われない分には構わないです。しかしその中でも違和感を覚える数少ない人は上に挙げたような敬語が"使えない"人であることに最近気が付きました。敬語が使える人がタメ口を使うことのギャップで距離感が近くなるなどのメリットもあったりします。当人が意識しているかはわかりませんが、言葉遣いの立ち回りがとても上手な人がいて尊敬しています。やはり、タメ口を使われてムカつく人は僕が苦手な敬語が"使えない"ような人なので僕がタメ口を使われてムカつく人は僕がタメ口を使われてムカつく人です。
さいごに
はじめにも言いましたが、タメ口は定義が価値観によるものが多く一概にどれが正しいくどれが間違っていると言うことができないと思います。しかし、簡単な敬語が使えないというのはさすがに今の日本ではまずいと思うので使えるようにしましょう。書いているうちに自分の考えがわからなくなったのでここで終わります。ありがとうございました。
おわり。
もしよければ↓ぽちっと↓お願いします。
【Python】OpenWeather APIを叩いてお天気データを取得する
はじめに
なにかAPIを叩きたい気分(?)だったので特にクセのないOpenWeatherが提供している無料APIを触ってみました。
API keysの取得
兎にも角にもAPI keyを取得しないと始まらないので取得します。OpenWeatherへアクセスし、Sign upからユーザ登録をします。そしてログイン状態のページからAPI keysを選択すると以下のようにAPI keyが取得できます。これをメモします。
これでOpenWeather APIを利用する準備ができました。
OpenWeather APIについて
以下の内容は全てOpenWeatherの公式ドキュメントに載っています。以下全て{apikey}は先ほど取得したキーに置換してください。
まずは、都市名を指定する方法です。
http://api.openweathermap.org/data/2.5/weather?q={city_name}&APPID={apikey}
{city_name}を表示させたい都市名にします(Londonなど)。そしてアクセスするだけで表示されると思います。
次は、都市idを指定する方法です。
http://api.openweathermap.org/data/2.5/weather?id={cid}&APPID={apikey}
都市id?となると思いますが、当然公式の方でサンプルが公開されています。
次は、緯度経度を指定する方法です。
http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&APPID={apikey}
latが緯度(latitude)でlonが経度(longitude)です。
最後は、郵便番号(zip code)を指定する方法です。
http://api.openweathermap.org/data/2.5/weather?zip={zip code}&APPID={apikey}
zip codeを指定した後に国を指定した方がいいかもです。(?zip=1111111,JP&APP~~~)
このAPIのレスポンスはデフォルトでJSON形式となっています。なのでそのまま使用します。
プログラム
今回は一例として都市名を指定します。
他の場合でも大きな差はないのでやってみてください。
import requests
import json
city = "Tokyo"
API_KEY = "{apikey}"
url = "http://api.openweathermap.org/data/2.5/weather?units=metric&q={q}&APPID={key}"
url1 = url.format(q = city, key = API_KEY)
response = requests.get(url1)
data = response.json()
jsontext = json.dumps(data,indent=4)
print(jsontext)
・出力
{
"coord": {
"lon": 139.76,
"lat": 35.68
},
"weather": [
{
"id": 521,
"main": "Rain",
"description": "shower rain",
"icon": "09n"
},
{
"id": 701,
"main": "Mist",
"description": "mist",
"icon": "50n"
}
],
"base": "stations",
"main": {
"temp": 23.31,
"pressure": 969,
"humidity": 100,
"temp_min": 21.67,
"temp_max": 25
},
"visibility": 2000,
"wind": {
"speed": 32.9,
"deg": 170,
"gust": 43.2
},
"clouds": {
"all": 75
},
"dt": 1570883396,
"sys": {
"type": 1,
"id": 8074,
"country": "JP",
"sunrise": 1570826639,
"sunset": 1570867858
},
"timezone": 32400,
"id": 1850147,
"name": "Tokyo",
"cod": 200
}
各パラメータの意味は以下の通りです。公式ドキュメントからの引用
そこまで難しい単語ないので大体わかると思います。ここから適宜必要なデータを出力すればいいです。urlを出力させて、別でアクセスしても当然結果は出力されます。FirefoxだとJSON見やすくなるの知らなかったです。
気圧めちゃくちゃ低い(pressure)し、風速めちゃくちゃ早く(wind.speed)てなんかすごいです。台風19号の影響ですね。
さいごに
今回は無料版(アクセス数の制限アリ)を使いましたが、無料でこのようなAPIが使えるのはすごいと思いました。特に天気などは複数回取得せず、数時間に一度取得してDBに保存しておけば再度APIを叩く必要もないので無料版のまま使用できます。
WebAPIは使っててそれっぽくなるし楽しいのでこれからも色々触れてぶっ叩きたいとおもいます。
参考文献
無料天気予報APIのOpenWeatherMapを使ってみる - Qiita
OpenWeatherMap API v2.5から天気を取得する - Qiita
おわり。
もしよければ↓ぽちっと↓お願いします。
ソフトマックス(SoftMax)関数についてまとめてPythonで実装してみる。
はじめに
筆者は機械学習についての知見が全くありません。なので特に機械学習の論理について誤った解釈をしていると思いますので、後々勉強して適宜訂正していこうと思います。
ソフトマックス関数とは
以下、wikipediaからの引用。
K 個のクラスに分類する。出力は K 個で、総和は 1 であり、そのクラスに所属する確率と解釈する。 は 0 または 1 もしくは確率で、n 番目の訓練データがクラス k に所属する時 1。 。交差エントロピーを使用している。この活性化関数はソフトマックス関数と呼ばれる。
活性化関数:
引用元:活性化関数
ありがとうwikiさん。ざっくり解釈だと幾つかの大小様々な実数を足して1.0になるような実数に変えてくれる関数だと思います。
式をもう少し簡単に書くと
x = [x0,x1,x2,...,xn]
u = exp(x0)+exp(x1)+exp(x2)+...+exp(en)
y0 = exp(x0)/u , y1 = exp(x1)/u , y2 = exp(x2)/u , .... ,yn = exp(xn)/u
y = [y0,y1,y2,...,yn]
n次元の実数ベクトルxを受け取り、n次元実数ベクトルyを返します。
確率なので当然
y_sum = y0 + y1 + y2 + ... = 1
0 < yi < 1
となります。
いつ使うのか
書いた文字が「め」か「ぬ」を判別するプログラムがあるとし、ある手書き文字が入力された時にソフトマックス関数が存在しない場合、「め:3.0、ぬ:3.5」などと出力されます(多分)。そこでこの入力文字がなんなのかと確率で表すためにソフトマックス関数を用いると「め:0.3775...、ぬ:0.6224..」と表示されます。つまり「め」が約38%、「ぬ」が約62%という風になります。This is ぬ.
↓↓ここからただの筆者の推測なので流し読みしてください↓↓
しかし、ただ確率を提示するだけならば3/(3+3.5) ≒ 0.46、3.5/6.5 ≒ 0.53となり、同様に確率を生成することができます。なぜソフトマックス関数が使われているのか考えました。それは数式を見ただけなのですが、expを使って確率を生成することでより明確に確率に差が生まれます。ソフトマックス関数を使った場合、4:6ほどの確率になったのに対しただの確率計算だとほぼ5:5となっています。他にも例えば「め:1.0、ぬ:9.0」であった場合、普通の確率計算の場合「め」である確率が10%だと出力されます。しかしソフトマックス関数を用いると「め」である確率は約3.35×10^-4となりほぼ0%です。このような理由でソフトマックス関数が用いられているのだなと勝手に解釈しました。あとは負の出力であっても確率に直すことができるところ、とか。
↑↑ここまで↑↑
実際にプログラムを書いて動かしてみる
まずは素直に定義通り
import numpy as np
def softmax(a):
x = np.exp(a)
u = np.sum(x)
return x/u
b = np.array([1,2,3])
y = softmax(b)
print(y)
出力
[0.09003057 0.24472847 0.66524096]
指数関数は怖いのでオーバーフロー対策をします。
import numpy as np
def softmax(a):
a_max = max(a)
x = np.exp(a-a_max)
u = np.sum(x)
return x/u
b = np.array([100000,100001,100002])
y = softmax(b)
print(y)
出力
[0.09003057 0.24472847 0.66524096]
配列の最大値を各要素から引くことですべて0または負となります。なぜこのプログラムで上記と同様の出力結果となるのかは紙に書き起こせばわかると思います。
まとめ
今回は、初めて聞いたソフトマックス関数についてまとめてみました。これから実際に開発していくにつれて当然のように扱う関数だと思うので早めに学んでおいてよかったです。しかしイマイチ理解が浮ついているのでそこは実際に使用しながら理解できたらなと思っています。
参考文献↓
おわり。
もしよければ↓ぽちっと↓お願いします。
【Python3】Numpy配列の要素の合計を求める時にベクトルの内積を使うと速くなるらしい
はじめに
Σ計算がfor文のようなものであることはご存じだと思いますが、ただでさえPythonは遅いので素直にfor文でまわしていたら大きなデータの時に多くの時間を要してしまいます。参考書によるとfor文よりも内積使った方が速いらしいです。要素の合計といえばNumpyのsum関数があるので、それも含めた3種類で比較してみました。具体的な内積の考え方は後述します。自分の予想としてはsum関数がなんだかんだ一番速いと思います。根拠はないです。
プログラム
#for文
import numpy as np
import time
for i in range(10):
a = 0
c = np.linspace(2,10000000,5000000)
t1 = time.time()
for j in c:
a = a + int(j)
print(a)
t2 = time.time()
t = t2 - t1
print(t)
#sum関数
import numpy as np
import time
for i in range(10):
c = np.linspace(2,10000000,5000000)
t1 = time.time()
print(sum(c))
t2 = time.time()
t = t2 - t1
print(t)
#内積
import numpy as np
import time
for i in range(10):
c = np.linspace(2,10000000,5000000)
t1 = time.time()
d = np.ones(5000000)
print(np.dot(c,d))
t2 = time.time()
t = t2 - t1
print(t)
今回扱った配列はlinspaceで用意しています。2から10000000を5000000等分した等差数列となっています。time関数がたまーに機能しなくなるので逐一出力させています。ついでに合計も。for文のプログラムは配列の要素を1つ1つ読み込んで足しています。sum関数は引数に配列ぶっこむだけです。そして問題の内積さん。Numpy配列はベクトルであるため要素が全て1のベクトルを用意し、合計を求めたい配列(ベクトル)との内積をとるだけです。ベクトルの内積は各要素の積を足したスカラー量であるのでこの場合のベクトルの内積は配列の合計と等しいことがわかります。np.dot(a,b)でaとbの内積を求めます。
実行結果(合計値は正しく出力されていたので省略)
#for文
1.229989767074585
1.1679975986480713
1.2129971981048584
1.244002342224121
1.2080466747283936
1.2040400505065918
1.171039342880249
1.190033197402954
1.4729993343353271
1.1989998817443848
#sum関数
0.663999080657959
0.5890030860900879
0.4519975185394287
0.44500064849853516
0.4510006904602051
0.43799757957458496
0.5030021667480469
0.464000940322876
0.45798826217651367
0.44900035858154297
#内積
0.03200030326843262
0.030002832412719727
0.029001474380493164
0.029003143310546875
0.029993057250976562
0.031000137329101562
0.030005216598510742
0.02900385856628418
0.03000187873840332
0.03100109100341797
最後に
まず、実行結果はAverageを取る必要がないほど明確に内積<sum<forとなりました。しかも割と大差がつきました。この結果だけ見て一概に内積の処理が高速かと言われればそうではなく、要素数が少ないとsumの方が速くなったりもしました。どのような時にsumの方が高速であるかなどは要素数を変えて実験する必要があります。僕はやりません。なぜ内積の方が速くなるのか考えたのですが、全くわからなかったので教えていただきたいです。
今回のような意外なアプローチができるから数学はおもしろいですね。大きなデータを扱うようなPythonプログラマならば知っておいて損はないと思います。参考書の何気ない一文にほんまか!?と疑って検証しようと思ったばかりに多くの時間を費やしましたが知見が広がったのでよしとします。
おわり。参考書↓↓
もしよければ↓ぽちっと↓お願いします。
LaravelのみでJavascriptを使わずにいいね機能を作ってみた
はじめに
いいね機能をJavascriptを使わずに実装したい(jsやったことないから逃げたい)ので自分で考えて実装してみました。絶対にもっと効率のいい方法あるので教えてほしい。
※Laravel 6.0
設計
・いいねしている時はいいね削除ボタン、いいねしていないときにはいいねボタンを表示する。
・ユーザがログインしている時のみいいねボタンを表示する。(今回は割愛)
・php(Laravel)のみを用いて実装
プログラム(コントローラ)
FavoriteController.php(一部)
public function favorite(Request $request){
$twe_id = $request->twe_id;
$name = DB::table('post')->where('twe_id', $twe_id)->first();
$names = $name->user_id;
$user = Auth::user();
$favname = $user['name'];
$judge = DB::select('select * from favorite where twe_id = ? and fav_name = ?', [$twe_id, $favname]);
if(!$judge){
DB::insert('insert into favorite (twe_id, fav_name, name) values (?,?,?)',[$twe_id,$favname,$names]);
}else{
DB::delete('delete from favorite where twe_id = ? and fav_name = ?',[$twe_id,$favname]);
}
return redirect()->back()->withInput();
}
プログラム(ビュー)
Home.blade.php(一部)
@php
$count = 0;
@endphp
@if(Auth::check())
<form action="{{ url('/fav/' . $d->twe_id) }}" method="POST">
{{ csrf_field() }}
@foreach($judge as $j)
@if($j->twe_id == $d->twe_id)
@php
$count = 1;
@endphp
@else
@php
$count = $count;
@endphp
@endif
@endforeach
@if($count == 1)
<button class="btn btn-warning" style="float: right;">unlike
@else
<button class="btn btn-success" style="float: right;">Like
@endif
解説
DBの設計などを省略しているため、概要のみの解説。
まず、ビュー側のいいねボタン(いいね取り消しボタン)をクリックした時、いいねしたい投稿のidをPOST送信する。そしてコントローラでリクエストを受け取り、$twe_idに格納する。次に、$userにAuth::user()でログイン中のユーザ情報つまりいいねするユーザ情報を格納する。そして$fav_nameにそのユーザのidのみ格納する。
次にそのユーザがその投稿に既にいいねしているか否かでいいねテーブルに格納するか削除するかを判断しなくてはならない。$judgeという変数にいいねテーブルからそのユーザかつその投稿idのデータをselect文で抽出し、存在しないならば新しくいいねテーブルに追加、存在するならばそのデータを削除する。そして元いたページにリダイレクトする。
つぎにフロント側の解説をする。いいね済か否かを判断する変数$countを用意する。$d->twe_idが現在表示している投稿のid、$j->twe_idには現在ログイン中のユーザがいいねしている投稿のidが格納されている。つまりこの2つが一致した時にいいねしているということなのでいいね取り消しボタン、そうでないときにいいねボタンを表示する。ここで直接ボタン表示をif文の中に入れると処理をfor文でまわしているため何個もボタンが表示されてしまう。ゆえに変数$countを用意した。
おわり。
もしよければ↓ぽちっと↓お願いします。
Laravelの導入したてで500エラーが出た
はじめに
Laravel勉強すっぞ!!composerからlaravel入れてフレームワークとはなんぞやっての勉強していざ実践!って時に
卍500エラー卍
これまで大学の実験とか日常生活で400何番とか300何番とかは見たことあったけど500エラーは初見です。お恥ずかしながら。
500エラーについて
ざっくりした解説だとWebサーバ側が"なんか"おかしいぞって伝えているエラー。具体的にこれという原因があるわけではなくたとえば.htaccessの記載が間違っていたりApacheの記載が間違っていたりと色々。
本題となるこの場合どうすればよいかを記載する。参考にしたというか解決策そのまま書いてくださったサイトを以下に示す。
殺意!Laravelを初期導入したら500エラーが出た件! │ Traveler
今回の場合の解決策
なぜエラーが起こったのかなどは上のサイトを観てください。Windowsで行っていたためまず作業ディレクトリを開き、ファイル→Windows PowerShellを開く。そして
上のようにコマンドを入力すると…
解決!!
最後に
参考にできたサイトがあったからよかったものの、なんでエラーが吐かれたのか、上のコマンドを入力するとなおったのかが未だにわからない。わかる人いたら教えていただきたいです。
実験の結果と考察~心理学実験をやった話③~
はじめに
今回は実験の結果と考察について書いていこうと思っています。流れはデータの説明→全データの考察です。前回↓↓
使用ツール
・Psychopy3
・Python3
データの説明
考察するためにグラフとして4つ用意した。〇-△となっているが、〇のBがボタン押し条件、Vが振動条件であり、△のAが音、Vが図、AVが両方である。
まず、左上のグラフについて説明する。横軸を実際の遅延、縦軸を実験参加者からの報告値とした。そして見やすさのためにy=xを用意した。つまりy=xより下ならば実際よりも早く知覚されている。例えば、実際は400msなのに300msだと知覚している。この実験参加者は振動条件の音と図両方提示はほぼ正確な値を報告しているが、全体としては早めに知覚しているということである。
次に、右上のグラフについて説明する。右上は実際の値-報告の値を縦軸にとっている。つまり負であるならば早めに知覚しているということである。左上のグラフをより実際の値と報告値の差を見やすくする目的がある。
次に、左下のグラフについて説明する。右上のグラフを各条件について平均をとったものを棒グラフにしたものである。つまりどの条件がどれだけ実際値と報告値に差があるかを見やすくすることが目的である。この実験参加者は特にボタン条件の時、差があることがわかる。
最後に、右下のグラフについて説明する。右下のグラフが今回の実験の主たる目的のIBの強さを表すグラフである。右上のグラフのV-XからB-X(X={A,V,AV})をひいたものである。Vは振動条件であるので意図無し、Bはボタン条件なので意図有りであるため、縦軸が正である時、意図が無い方が遅く知覚されているということであるためIBが生じているといえる。この実験参加者はV以外では概ね正となっているためIBが生じている。
以上がグラフの説明である。本質的な部分をみるためには左上と右下だけで良いのだが、右上や左下のグラフのように多面的にデータを観測することで外れ値や、より具体的に考察することができる。一つまた勉強になった。
全体データと考察
全体のデータが上の通り。思ったよりデータ綺麗になってうれしい(?)。まずは結果からわかることを挙げる。
・全体として早めに知覚されている。
・実際値と報告値の差は実際値が大きくなるにつれて大きくなっている。
・Bの方がVよりも差が大きい。
・音が最も差が大きく知覚されている。
・しかし、IBの大きさは第二条件による差はない。
・いずれの条件でもIBは生じている。
まず、いずれの場合もIBが生じていることについてさすがに仮説通りでよかった。これ間違ってたらIB…ってなっちゃう。次に、第二条件で差がないことについて、そもそもの仮説の前提条件である視覚よりも聴覚の方が反応時間は早いから注意力が云々が間違っていたことが考えられる。反応時間によるIBへの影響がないことがここから考えられる。
まとめと感想
実験を0から自分で企画、実践、解析までやったのは本当にいい経験だし今しかできないなって思った。担当教授曰く、B4の方達よりもよく取り組んでいるとの言葉をいただいたのでとても嬉しかった。この実験をやるまでPythonに触れたことすらなかったのでとても苦労した。一番苦労したのはArduinoとのシリアル通信。
実験の有用性を聞かれても直接的には考えられない。しかし、IB自体は多くのことに応用できると思った。意図の有無で体感時間が変わることをモデリングすることで何か役に立つことがあると思う。思い浮かばないけど!何かあったら教えてください。
これで実験の話は終わりです。もしここまで読んでくださった方いたらありがとうございました。一応時間に余裕できたら今回の実験のプログラムの説明もやりたいな。
Comunicaç o serial com Python e Arduino (Portuguese Edition)
- 作者: Vitor Amadeu Souza
- 発売日: 2018/03/10
- メディア: Kindle版
- この商品を含むブログを見る
もしよければ↓ぽちっと↓お願いします。
実験の仮説と実験方法~心理学実験をやった話②~
はじめに
本ブログは前回の続きである。実験に関わる用語は前回の記事を参照してください。
実験の仮説まで
IBについて実験しよう~ってなっても既知であるものを実験したとしても意味がない。既知であるものとして例としては意図の強さを比較してより意図の強い場合とそうでない場合を比較し、より意図が強く働く方がIBが強くなることがわかっている。ここで、IBの強さを以下のように定義する。
(IBの強さ) = (意図がない体感時間) - (意図がある体感時間)
つまり、意図がある方が短く感じられることがIBであるため正である時にIBが生じていると言うことができ、IBの強さは正に大きくなるほど強くなる。
私はこういった先行研究から異なる知覚間でIBの強さは異なるのかを実験しようと考えた。今回、視覚と聴覚を比較することにした。視覚と聴覚は視覚の方が反応時間は早い。そこから視覚の方がIBは強まるすなわち意図がある時に早く知覚されると仮説をたてた。
実験の方法
実際に私が行った実験の方法を説明する。実験参加者として大学生男女10名を対象とした。参加者を集めるのにめttttttっちゃ苦労した。そりゃつまらんし誰もやりたいなんて思わないよね。参加者のみなさん本当にありがとうございました。
上の振動条件が意図無し、ボタン押し条件が意図ありです。ボタンor振動の後に0~1000ms(1s)のランダムな時間があり、図が提示されるか音が出るかその両方が出るかが第二イベントとしてある。このランダムな時間を参加者に推定してもらう。そして両者に差があるのか、そして第二イベントによる差はあるのかを実験によって調査する。
さいごに
うーん…実験方法についてもっと書きたいんだけどあんま書いてもな…って感じでめっちゃ短くなっちゃった。まあこれでヨシ。次は実験結果と考察をまとめるよ。
次回↓↓
もしよければ↓ぽちっと↓お願いします。
インテンショナルバインディングとは~心理学実験をやった話①~
どんなことを実験したのか
一口に心理学実験と言っても多くの種類があります。僕自身最初は睡眠についての何かをしたいと思っていたのですが、手間がとてもかかり、学部生ではとても実験までたどり着く事ができないそうなので方針を変え、2つの知覚(視覚や聴覚、触覚など)の関連性について学ぼうと考え、教授からインテンショナルバインディング(IB)について調べるのはどうかとの提案をいただきました。
インテンショナルバインディング(IB)とは
英語で書くとIntentional Bindingとなり、意図による束縛のような感じの意味です。勉強するにあたって読んだ文献を下に幾つか貼っておきます。
オリジナル実験において、まずオペランド条件とベースライン条件を以下のように定義します。
・オペランド条件…手元にあるボタンを押すまたはボタンを押してから250ms後に音がなるのでその音が鳴った時の時計の針の位置を報告
・ベースライン条件…手元にあるボタンを押すまたは突然音が鳴るので音が鳴った時の時計の針の位置を報告
この2条件に分かれて時計の針の位置をそれぞれ報告させたところ、行為(ボタン押し)のタイミングはオペランド条件の方がベースライン条件よりも遅く知覚され、音刺激のタイミングはオペランド条件の方がベースライン条件よりも早く知覚された。図示すると以下のようになる。青が時間軸で赤がベースライン条件、黄がオペランド条件である。
この図からオペランド条件の方がベースライン条件よりも短く知覚されていることがわかる。また、オペランド条件とベースライン条件の違いとして、オペランド条件は音が鳴るタイミングがある程度わかる⇒自分の行為と音に因果関係があるように感じられるため自分が音を鳴らしているかのように感じられることである。その反面ベースライン条件にはそういった意図はなく、突然音が鳴る。つまり両条件の違いは意図の有無である。
ざっくり説明すると「意図がある時とない時で体感時間が変わるで」ってことです。何言ってるかわからんと思います。僕もわかりません。うそですわかります。
さいごに
みなさんの身近でもこれは感じられていることです。多くの現象が考えられますが、例えば楽しいことってつまらないことより短く感じられませんか?この現象についてはIBだけではなく多くの原因が考えられますがIBから考えると楽しいことをしている時、その人は必ず意図のある行動つまり自発的行動を行っているはずです。行動ではないにしろ自発的に物事を考えたりしていると思います。逆につまらない時間はその人は自発的にほぼ何もしていないと思います。あれしろこれしろなど受動的になっていませんか?IBはそのような大きな時間のことではありませんが、数msの差が幾つも重なれば大きな体感時間の差になると思います。もし退屈な時間を短く済ませたいならば無理矢理にでも自発的行動をとってみようと僕は思いました。
あまり続けても冗長な記事となってしまうためここで一回切ります。ここまで読んでいただいた方いらっしゃったらありがとうございました。
次回は具体的にIBを使ってどんなことを実験するのかと実験方法まで書ければいいな。
次回↓↓
参考図書
もしよければ↓ぽちっと↓お願いします。
映画ワンピース スタンピードを公開初日に見てきた感想※ネタバレややあり
はじめに
このブログの対象は
・既に映画を観てこんな細かいことに気付いたぞって人
・煩雑な文章でも気にならない人←これ大事
つまり未視聴者などあらすじを確認したい人にとってはあんま…って感じになっちゃう
まずは予告↓↓
ゲrrrrrrrrrッロおもしろかった!!!!!!!
今まで二回観たい映画とかなかったんだけどこの映画はまた観たいと思った。てか観る。なんなら買う。小説も買う。文章で色々補填してあるだろうし絶対買う。
今回の映画のみどころ(若干ネタバレ?)
今回の見どころはやっぱりキャラの多さ。最悪の世代は全員出た。当然我らがウルージ様も極上のスマイルを見せてくださり、15億のルフィにも臆さず交戦するなど元気であられた。パンダマンが僕の体感だと10回ぐらい出てた気がする(実際はもっと多いかも)。まあパンダマンはどうでもいいんだけど。ナチュラルにケイミ―とパッパグとはっちゃん出てたしコニスもオープニングで背中だけ出てた気もする。あとはグラント(アニオリのキャラ)も1フレームぐらい出ててビビった 。他は映画常連となったルッチ君とサボ君。七武海もウィーブルとクマとドフィとジンベエ以外新旧揃って出たかな。個人的にジンベエいつ出るかなってわくわくしてたんだけど出なかったのは残念。多分時系列的にWCL編の後だから仕方ないのかも。エンディングではっちゃんと革命軍が手振るシーンあったけどこれコアラと再会してないのかな…。クロコさんとロビンの再開させるのもびっくりしたしこういうたくさんキャラ出す映画だと関係性とか考えなきゃいけないから大変そうだよね。
今回のラスボス・バレットについて
バレットは元ロジャー海賊団(他にも過去にあるけど)で、「"鬼"の跡目」とも呼ばれており、作中ではバギーに「レイリーに匹敵する」と言われています。実際に最悪の世代全員を相手に圧倒するなど正直「これどう倒すんだ…」って思ってた。ていうかバレットすげええともなったけど「これと同等のレイリーさん何者だよ…」の気持ちの方が大きかった。いや本当にどういうこと…??
ウソップさん
今回、真っ先にバレットにボコされちゃうウソップさん。この時バレットに言われた(ウソップは気絶してたから気付いてないかも)言葉が「弱い、使えない部下なんか切り捨てろ」でもうこれね…。W7でルフィに言ったセリフと重なっちゃってなんかつらくなっちゃったよ…。
おわりに
こんなに見づらく、ただ興奮冷めやらぬ中書いた雑な文章を読んでくださってありがとうございました。何か間違いやこんな発見したぞ!ってのがあったらコメントで教えていただけると幸いです!
グッズたくさんあったけどおっさん達が群がってて買えなかった…。パズルとか欲しかった。
[rakuten:cinemacollection:10277483:detail]
もしよければ↓ぽちっと↓お願いします。