情報学部大学生のダラダラ日記

β日記

機械学習や日記っぽいものを書きます

釣りに行ったら超危険な殺人魚が釣れたので食べる

はじめに

 前回ボウズだったのでリベンジということで朝5時に出発して釣りに行ってきました。今回も赤イソメで餌釣りです。

 

f:id:Parco1021:20191028154200j:image

前回↓↓

parco1021.hatenablog.com

釣果

 今回はボウズにならずに済みました!!!!釣果です!

f:id:Parco1021:20191028154323j:image

  • ダツ1匹
  • カワハギ1匹
  • ベラ3匹
  • キス10匹
  • フグたくさん

 

 

…嘘です。実際は↓↓です。

f:id:Parco1021:20191028154310j:image

  • ダツ1匹
  • カワハギ1匹
  • ベラ3匹
  • キス10匹
  • フグたくさん

流れが速かったり釣り場所が他の方に取られていたりなど思っていたよりも釣れませんでした。サビキでやっていた方はサバを釣りまくっていたので作戦負けです。キスは近くの魚屋さんで10匹400円弱で買いました。また、ベラは小さくてリリースサイズですが、釣れた時に針を飲んでいてどうしようもなかったのでいただきます。

やはりこの中で目立つ魚は「ダツ」でしょう。これは実際に餌釣りで釣ったわけではなく友達のジグと僕の仕掛けが絡まってごちゃごちゃしている時に僕の仕掛けに引っかかっていました。その時の画像です。イソメが写っているので虫等苦手な方は注意してください。

f:id:Parco1021:20191028184633j:image

 

御覧の通り尖った顎が特徴です。この魚による事故で命を落としている方が多くいるほどの危険魚です。

ダツについて

https://www.zukan-bouz.com/public_image/Fish/359/Thumb630/datu.jpg

引用元:https://www.zukan-bouz.com/syu/%E3%83%80%E3%83%84

捕食の際は小魚の鱗で反射した光に敏感に反応し、突進する性質がある。暗夜にダツが生息する海域にライトを照らすとダツが激しく突進してきてヒトの体に突き刺さることがあるので夜間の潜水は特に注意が必要である。実際にダツが人体に刺さって死傷する事故も発生しており、沖縄県の漁師には鮫と同じくらいに危険視されている。

参照元:Wikipedia

 いや、怖すぎ…。例えば夜釣りをしている時にヘッドライトをつけたまま海面を覗くとダツが餌と勘違いして猛スピードで突っ込んでくるような事例もあったらしいです。僕の仕掛けに引っかかったのは友達のジグに反応し突っ込んできたからだと思われます。実際釣りの時もジグなどで釣れることが多いそうです。気をつけよ。

クッキング

 せっかくダツも釣れたので食べてみようと思います。味はそこまで美味ではないらしいですが、刺身や唐揚げ、塩焼きで食べられているそうです。今回はキスも釣った(?)ので友達と話し合い、例のごとく唐揚げと天ぷらと塩焼きにして食べようと思います。

塩焼き

  • キス3匹
  • ダツ1匹

唐揚げ

  • キス2匹
  • ベラ3匹
  • カワハギ1匹

天ぷら

  • キス7匹

 

f:id:Parco1021:20191028154340j:image

キスは安定に美味しく、カワハギ、ベラの唐揚げもとても美味しかったです。肝心のダツですが調べたままって感じでした。特別美味しいわけでもなく決して味が悪いわけでもなく…って感じです。魚をつまみに飲むビールは美味しさの極みでこれのために釣りに行ってると言っても過言ではありません。

缶の蓋を取るとウド〇木さんに見えるそうです。

f:id:Parco1021:20191028154349j:image

さいごに

 今回も釣りに行った記事を書きました。日頃PCでカタカタしているのでこういった自然に触れることは息抜きにいいですね。

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

夜釣りに行って晩御飯をゲットしてきた

釣りに行ってきた

 暇だったので友達と夜釣りに行ってきました。寒くなってきて夜釣りだったのでメバルカサゴなどの磯ものが釣れたらいいな~~~~~~と思っていきました。しかし、近くに磯ものが釣れるような場所がないので適当なところで釣りをしようという風になりました。そして晩御飯でそいつらを食ってやろうという予定です。

 とりあえず何か連れればいいのでボウズのがれのSサイズで青イソメで餌釣りしました。青イソメは噛んでくるので嫌いです。

ささめ針(SASAME) X-002 ボウズのがれ投釣リ S

ささめ針(SASAME) X-002 ボウズのがれ投釣リ S

 

  風が思っていたよりも強く、寒かったし久しぶりの夜釣りで視界不良にも慣れていなくて2時間ほどで撤収しました。でも夜釣りはお空お綺麗で良かったですわ。

 

f:id:Parco1021:20191026204822j:imagef:id:Parco1021:20191026204833j:image

インスタ映え

 

釣果

今日釣りに行った結果、晩御飯をゲットしました。

f:id:Parco1021:20191026204812j:image

ボウズのがれとは(哲学)

 

さいごに

 今回は"ブログらしい"ことを書こうと思って書きました。以上、「夜釣りに行ったら何も釣れず、マクドナルドで晩飯をゲットしたお話」でした。

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

【Python】Fortnite tracker APIを使って現在のストア情報を取得する

はじめに

 前回の記事ではアップデートが為されていないライブラリを使ったため本来望んだような動作がされなかった。なので今回は普通にAPIを使う。今回はコードと結果のみの記事になります。基本的なAPIのイントロダクションは前回の記事の通りなのでそちらをみてください。↓↓

parco1021.hatenablog.com

また、公式ドキュメントは以下です。

fortnitetracker.com

コードと結果

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を渡すことで認証を通します。

結果は長くなってしまうのでスクショで失礼します。

f:id:Parco1021:20191026144001p:plain

長ったらしくて中身が見えないので出力を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の扱いにも慣れていないので少し苦労しました。誰かのお役に立てれば幸いです。ストア以外にも個人の戦績なども見ることができるようなので公式ドキュメントを参照して頑張ってください。

 

参考

qiita.com

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

【Python】fortnite-pythonライブラリを使ってみた

はじめに

 再びなにかAPIを叩きたくなったので調べていたらFortnite APIなるものを見つけ、なんとライブラリがあるらしいのでそれを触ってみました。公式ドキュメントは以下なので観てください。このブログはドキュメント通りに触ります。

https://pypi.org/project/fortnite-python/

イントロ

 まず、 http://fortnitetracker.com/にアクセスし、アカウント登録をします。

f:id:Parco1021:20191024150829p:plain

  次にサポート>APIから、Manage or Create API Keysを選択します。

f:id:Parco1021:20191024151213p:plain

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クラスにおける変数宣言がされていないのでできそうにないです。次にチャレンジを出力させ、確認すると「フェイタルフィールドで~」みたいなチャレンジがあったので?????となりました。既にフェイタルはないのに…。再度公式ドキュメントを確認すると

f:id:Parco1021:20191024154632p:plain

いや2019年2月のバージョンかい!!!!!!!アプデとまっとるやないかい!!!!!!!!!

おわりに

 ということで今回はFortnite-pythonライブラリを触ってみました。色々便利ですけど普通にAPIを叩かないといけなさそうです。使い方も公式ページにのっているのでやります。というかやりました。後日載せます。

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

チームラボのサマーインターンシップに参加してきた

はじめに

 チームラボ株式会社さんで2019年サマーインターンシップにWebアプリエンジニアとして参加してきました。自分自身こういった体験談が見つからなくて緊張したので自分なりの体験談として残しておきます。

参加したきっかけ

 正直なところ、自分とは縁のない企業さんだと思っていたのでインターンへ応募すらしようと思っていませんでした。しかし、Wantedlyでスカウトをいただき、それならと応募しました。

選考のフロー

 ES→面接→Webテストという流れでした。面接ではガチガチの人間性を問うような質問はなく、雑談のような感じで「最近どう?」「いい感じっす」みたいな感じでやっていたら終わっていました。正直マナーは全くなっていなかったと思います。自分としても受かるとは思っていなかったので全く緊張せず話すことができました。面接が終わった後、あまりにも自分の面接マナーがなっていなかったので確実にダメだろうなとおもったのですが、後日合格通知と事前課題の案内が届きました。

事前課題

 事前課題は検索WebアプリケーションをRest APIで実装し、実際にHerokuなどを用いてデプロイまでするような課題でした。時期も時期で期末テストやレポートの締切直前でどう考えても間に合わなさそうなので期限の延期を申請したら快く受け入れてくださいました。期限を延ばしていただいたにも関わらず、フレームワークを使わずPHPのみでコーディングしたためセキュリティの懸念もありローカルで動くものしかできず、できたところまでを提出しました。その時に自分の無力さを改めて感じ萎えてしまい、人事の方に「自分のような全然技術がない人でもこのまま参加していいのでしょうか」などと聞いてしまったのですが、「現段階での技術はあまり求めていないのでこのインターンスキルアップしてくれればいいですよ」と返してくださり、とても気が楽になりました。なんであんなこと聞いたんだろ恥ずかしすぎる。

インターンシップの概要

 概要はこの通りです。自分が参加したのは第四タームです。

・9/17~9/27 8日間

・家からホテルまでの交通費支給

・ホテル手配

・時給1000円

・10時~19時(昼休憩1時間)

インターンシップ中やっていたこと

 僕はWebアプリエンジニア(PHP)に所属したのですが、チームが合わせて7人おり、日ごろからアルバイトなどでガンガン実装をしているような人は実際の業務に携わっており、そうでない人や業務をやらない選択をした人は与えられた課題をこなし、最終課題としてイン〇タのようなものを実装しました。僕は当然後者です。

 そしてインターンシップ中は毎日チームの人やメンターさんと一緒にランチに行っていました。他にもホテル暮らしだったので毎日毎食外食で太りました。東京はメシがうめえ!

f:id:Parco1021:20191015142150j:imagef:id:Parco1021:20191015142155j:imagef:id:Parco1021:20191015142503j:image

 

 一週目の金曜日にインターン参加者みんなとチームラボボーダレスへ行きました。初めて行ったのですが、平日であるにも関わらずとても混んでいました。作品は言葉にできないほど綺麗な物が多く、今でも鮮明に記憶に残っています。

f:id:Parco1021:20191015142227j:image

 そして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アプリは別にコード公開してもいいよ~とのことだったのでまた後々コード公開はしませんが、機能の実装方法などを書きたいと思います。周りの学生も皆レベルが高く、そして現場のプロに教えていただき、勉強させてもらう立場でありながらお給料も交通費も宿泊先も用意してくださったチームラボさんには感謝しかありません。

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

【Python】Pythonでセンター試験数学ⅡBを解こうとしたら2時間かけて5点しか取れなかった

はじめに

 あれ?Pythonでセンターの問題解けるんじゃねって思ったので挑戦しました。

問題は以下の大学入試センターさんが提示してくださっている問題のうち、僕が受験したH29年度のものを引用します。

https://www.dnc.ac.jp/center/kakomondai.html

解いてみる

f:id:Parco1021:20191019230656p:plain

 問題自体は簡単です。ア~エは倍角の公式使うだけでオは②を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

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

僕がタメ口を使われてムカつく人は僕がタメ口を使われてムカつく人

はじめに

 まずはタメ口とは何かわからない方に以下を示します。

 タメ口タメぐち)とは、相手を対等として扱った話し方である。 親しい人同士での話し方。 これを指す名称は学者間でも定まっておらず、ため口の用語がその隙を埋めてきた。 特に年長者に対して対等の話し方をすることだと、ある辞書には掲載されているが、実際のある調査では仲間同士の言葉だという認識が過半数を占めている。
引用元:Wikipedia

  実生活においての対等とは人間としてのという意味ではなく、単純に年齢であったり職場の先輩後輩であったりすることなどを指すと思います。いい意味でも悪い意味でも日本人っぽい概念です。

 また、Wikiにもあるように、タメ口の定義は人それぞれであり各々の価値観で変化します。ゆえにこの後に書かれることもあくまで筆者の価値観の上でのものなので噛みつかないでください。僕も"理解できない"とは思いますが、否定的な意味はありません。あくまで僕の中では敬語は年上の方に使うものとしてとらえています。職場の先輩とかはまだ働いたことないのでわかりません。周りに合わせます。僕は割と親にそういったところで厳しく教育されたので気にします。他の人の例を挙げるとたとえ年下であることが双方認知されていてもそこまで仲良くないとタメ口を使っていらっしゃる人がいたりします。こういったところは本当に人によってわかれます。

敬語が"使えない"人

 高校までは周りにそういった人はいなかったので意識したことがなかったのですが、大学に入ったり、オンラインゲームでネットの人との交流が増えると敬語を使うことができない人が一定数いることに気が付きました。驚いたのと同じぐらいそういった人に興味が湧きました。大学に入学するまでで敬語を使う機会がなかったのでしょうか。部活の先輩には?先生には??考えれば考えるほどわからなくなりました。"使わない"人ならばこの人達は仲が良いんだなと捉えますが、そうでもなく無差別にタメ口をまき散らしている人、つまり敬語が"使えない"人を見ると心配になります。互いに年齢も知らないのに初手タメ口だと僕は第一印象悪いです。

僕がタメ口を使われてムカつく人

 僕は自分が敬語を使われない分には構わないです。しかしその中でも違和感を覚える数少ない人は上に挙げたような敬語が"使えない"人であることに最近気が付きました。敬語が使える人がタメ口を使うことのギャップで距離感が近くなるなどのメリットもあったりします。当人が意識しているかはわかりませんが、言葉遣いの立ち回りがとても上手な人がいて尊敬しています。やはり、タメ口を使われてムカつく人は僕が苦手な敬語が"使えない"ような人なので僕がタメ口を使われてムカつく人は僕がタメ口を使われてムカつく人です。

 さいごに

 はじめにも言いましたが、タメ口は定義が価値観によるものが多く一概にどれが正しいくどれが間違っていると言うことができないと思います。しかし、簡単な敬語が使えないというのはさすがに今の日本ではまずいと思うので使えるようにしましょう。書いているうちに自分の考えがわからなくなったのでここで終わります。ありがとうございました。

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

【Python】OpenWeather APIを叩いてお天気データを取得する

はじめに

 なにかAPIを叩きたい気分(?)だったので特にクセのないOpenWeatherが提供している無料APIを触ってみました。

API keysの取得

 兎にも角にもAPI keyを取得しないと始まらないので取得します。OpenWeatherへアクセスし、Sign upからユーザ登録をします。そしてログイン状態のページからAPI keysを選択すると以下のようにAPI keyが取得できます。これをメモします。

f:id:Parco1021:20191012183139p:plain

これで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

}

 各パラメータの意味は以下の通りです。公式ドキュメントからの引用

f:id:Parco1021:20191012214258p:plain

そこまで難しい単語ないので大体わかると思います。ここから適宜必要なデータを出力すればいいです。urlを出力させて、別でアクセスしても当然結果は出力されます。FirefoxだとJSON見やすくなるの知らなかったです。

f:id:Parco1021:20191012214520p:plain

 気圧めちゃくちゃ低い(pressure)し、風速めちゃくちゃ早く(wind.speed)てなんかすごいです。台風19号の影響ですね。

さいごに

 今回は無料版(アクセス数の制限アリ)を使いましたが、無料でこのようなAPIが使えるのはすごいと思いました。特に天気などは複数回取得せず、数時間に一度取得してDBに保存しておけば再度APIを叩く必要もないので無料版のまま使用できます。

 WebAPIは使っててそれっぽくなるし楽しいのでこれからも色々触れてぶっ叩きたいとおもいます。

参考文献

無料天気予報APIのOpenWeatherMapを使ってみる - Qiita

OpenWeatherMap API v2.5から天気を取得する - Qiita

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

ソフトマックス(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または負となります。なぜこのプログラムで上記と同様の出力結果となるのかは紙に書き起こせばわかると思います。

まとめ

 今回は、初めて聞いたソフトマックス関数についてまとめてみました。これから実際に開発していくにつれて当然のように扱う関数だと思うので早めに学んでおいてよかったです。しかしイマイチ理解が浮ついているのでそこは実際に使用しながら理解できたらなと思っています。

 

参考文献↓

qiita.com

 

 

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

【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プログラマならば知っておいて損はないと思います。参考書の何気ない一文にほんまか!?と疑って検証しようと思ったばかりに多くの時間を費やしましたが知見が広がったのでよしとします。

おわり。参考書↓↓

 

 

 

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

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を用意した。

 おわり。

 

 

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

 

Laravelの導入したてで500エラーが出た

はじめに

 Laravel勉強すっぞ!!composerからlaravel入れてフレームワークとはなんぞやっての勉強していざ実践!って時に

卍500エラー卍

 これまで大学の実験とか日常生活で400何番とか300何番とかは見たことあったけど500エラーは初見です。お恥ずかしながら。

500エラーについて

 ざっくりした解説だとWebサーバ側が"なんか"おかしいぞって伝えているエラー。具体的にこれという原因があるわけではなくたとえば.htaccessの記載が間違っていたりApacheの記載が間違っていたりと色々。

 本題となるこの場合どうすればよいかを記載する。参考にしたというか解決策そのまま書いてくださったサイトを以下に示す。

殺意!Laravelを初期導入したら500エラーが出た件! │ Traveler

今回の場合の解決策

 なぜエラーが起こったのかなどは上のサイトを観てください。Windowsで行っていたためまず作業ディレクトリを開き、ファイル→Windows PowerShellを開く。そして

f:id:Parco1021:20190911182445p:plain

上のようにコマンドを入力すると…

f:id:Parco1021:20190911183219p:plain

解決!!

最後に

 参考にできたサイトがあったからよかったものの、なんでエラーが吐かれたのか、上のコマンドを入力するとなおったのかが未だにわからない。わかる人いたら教えていただきたいです。

 

 

実験の結果と考察~心理学実験をやった話③~

はじめに

 今回は実験の結果と考察について書いていこうと思っています。流れはデータの説明→全データの考察です。前回↓↓

parco1021.hatenablog.com

 使用ツール

・Psychopy3

・Python3

Arduino

データの説明

f:id:Parco1021:20190904200653p:plain

 考察するためにグラフとして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が生じている。

 以上がグラフの説明である。本質的な部分をみるためには左上と右下だけで良いのだが、右上や左下のグラフのように多面的にデータを観測することで外れ値や、より具体的に考察することができる。一つまた勉強になった。

全体データと考察

f:id:Parco1021:20190904204524p:plain

 全体のデータが上の通り。思ったよりデータ綺麗になってうれしい(?)。まずは結果からわかることを挙げる。

・全体として早めに知覚されている。

・実際値と報告値の差は実際値が大きくなるにつれて大きくなっている。

・Bの方がVよりも差が大きい。

・音が最も差が大きく知覚されている。

・しかし、IBの大きさは第二条件による差はない

・いずれの条件でもIBは生じている。

  まず、いずれの場合もIBが生じていることについてさすがに仮説通りでよかった。これ間違ってたらIB…ってなっちゃう。次に、第二条件で差がないことについて、そもそもの仮説の前提条件である視覚よりも聴覚の方が反応時間は早いから注意力が云々が間違っていたことが考えられる。反応時間によるIBへの影響がないことがここから考えられる。

まとめと感想

 実験を0から自分で企画、実践、解析までやったのは本当にいい経験だし今しかできないなって思った。担当教授曰く、B4の方達よりもよく取り組んでいるとの言葉をいただいたのでとても嬉しかった。この実験をやるまでPythonに触れたことすらなかったのでとても苦労した。一番苦労したのはArduinoとのシリアル通信。

parco1021.hatenablog.com

 実験の有用性を聞かれても直接的には考えられない。しかし、IB自体は多くのことに応用できると思った。意図の有無で体感時間が変わることをモデリングすることで何か役に立つことがあると思う。思い浮かばないけど!何かあったら教えてください。

 これで実験の話は終わりです。もしここまで読んでくださった方いたらありがとうございました。一応時間に余裕できたら今回の実験のプログラムの説明もやりたいな。

 

 

 

Comunicaç o serial com  Python e Arduino (Portuguese Edition)
 

 

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

実験の仮説と実験方法~心理学実験をやった話②~

はじめに

 本ブログは前回の続きである。実験に関わる用語は前回の記事を参照してください。

 

 

parco1021.hatenablog.com

 

実験の仮説まで

 IBについて実験しよう~ってなっても既知であるものを実験したとしても意味がない。既知であるものとして例としては意図の強さを比較してより意図の強い場合とそうでない場合を比較し、より意図が強く働く方がIBが強くなることがわかっている。ここで、IBの強さを以下のように定義する。

(IBの強さ) = (意図がない体感時間) - (意図がある体感時間)

つまり、意図がある方が短く感じられることがIBであるため正である時にIBが生じていると言うことができ、IBの強さは正に大きくなるほど強くなる。

 私はこういった先行研究から異なる知覚間でIBの強さは異なるのかを実験しようと考えた。今回、視覚と聴覚を比較することにした。視覚と聴覚は視覚の方が反応時間は早い。そこから視覚の方がIBは強まるすなわち意図がある時に早く知覚されると仮説をたてた。

実験の方法

 実際に私が行った実験の方法を説明する。実験参加者として大学生男女10名を対象とした。参加者を集めるのにめttttttっちゃ苦労した。そりゃつまらんし誰もやりたいなんて思わないよね。参加者のみなさん本当にありがとうございました。

 

 

 

f:id:Parco1021:20190902212204p:plain

f:id:Parco1021:20190902212158p:plain

上の振動条件が意図無し、ボタン押し条件が意図ありです。ボタンor振動の後に0~1000ms(1s)のランダムな時間があり、図が提示されるか音が出るかその両方が出るかが第二イベントとしてある。このランダムな時間を参加者に推定してもらう。そして両者に差があるのか、そして第二イベントによる差はあるのかを実験によって調査する。

さいごに

うーん…実験方法についてもっと書きたいんだけどあんま書いてもな…って感じでめっちゃ短くなっちゃった。まあこれでヨシ。次は実験結果と考察をまとめるよ。

次回↓↓

 

 

 

 

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

インテンショナルバインディングとは~心理学実験をやった話①~

 

どんなことを実験したのか

 一口に心理学実験と言っても多くの種類があります。僕自身最初は睡眠についての何かをしたいと思っていたのですが、手間がとてもかかり、学部生ではとても実験までたどり着く事ができないそうなので方針を変え、2つの知覚(視覚や聴覚、触覚など)の関連性について学ぼうと考え、教授からインテンショナルバインディング(IB)について調べるのはどうかとの提案をいただきました。

 

インテンショナルバインディング(IB)とは

 英語で書くとIntentional Bindingとなり、意図による束縛のような感じの意味です。勉強するにあたって読んだ文献を下に幾つか貼っておきます。

 

www.jstage.jst.go.jp

charbonniers.org

 

 オリジナル実験において、まずオペランド条件とベースライン条件を以下のように定義します。

オペランド条件…手元にあるボタンを押すまたはボタンを押してから250ms後に音がなるのでその音が鳴った時の時計の針の位置を報告

・ベースライン条件…手元にあるボタンを押すまたは突然音が鳴るので音が鳴った時の時計の針の位置を報告

この2条件に分かれて時計の針の位置をそれぞれ報告させたところ、行為(ボタン押し)のタイミングはオペランド条件の方がベースライン条件よりも遅く知覚され、音刺激のタイミングはオペランド条件の方がベースライン条件よりも早く知覚された。図示すると以下のようになる。青が時間軸で赤がベースライン条件、黄がオペランド条件である。

f:id:Parco1021:20190831204313p:plain

 この図からオペランド条件の方がベースライン条件よりも短く知覚されていることがわかる。また、オペランド条件とベースライン条件の違いとして、オペランド条件は音が鳴るタイミングがある程度わかる⇒自分の行為と音に因果関係があるように感じられるため自分が音を鳴らしているかのように感じられることである。その反面ベースライン条件にはそういった意図はなく、突然音が鳴る。つまり両条件の違いは意図の有無である。

 ざっくり説明すると「意図がある時とない時で体感時間が変わるで」ってことです。何言ってるかわからんと思います。僕もわかりません。うそですわかります。

さいごに

 みなさんの身近でもこれは感じられていることです。多くの現象が考えられますが、例えば楽しいことってつまらないことより短く感じられませんか?この現象についてはIBだけではなく多くの原因が考えられますがIBから考えると楽しいことをしている時、その人は必ず意図のある行動つまり自発的行動を行っているはずです。行動ではないにしろ自発的に物事を考えたりしていると思います。逆につまらない時間はその人は自発的にほぼ何もしていないと思います。あれしろこれしろなど受動的になっていませんか?IBはそのような大きな時間のことではありませんが、数msの差が幾つも重なれば大きな体感時間の差になると思います。もし退屈な時間を短く済ませたいならば無理矢理にでも自発的行動をとってみようと僕は思いました。

 あまり続けても冗長な記事となってしまうためここで一回切ります。ここまで読んでいただいた方いらっしゃったらありがとうございました。

 次回は具体的にIBを使ってどんなことを実験するのかと実験方法まで書ければいいな。

 

次回↓↓

parco1021.hatenablog.com

 

 

参考図書 

 

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

スポンサーリンク