Python

sympyを使って微分積分した結果をグラフにplotする

sympyを使って微分積分した結果をグラフにplotする 自分が引っかかったところは、numpyとmatplotlibを直接?使わないというところ sympyで計算して、sympyで描写する 準備 python3.5.0 on Mac環境で進める まず、必要モジュールをインストール sympyだけだと、実行時に「ValueError: The TextBackend supports only one graph per Plot.」というエラーが出る インストールされたモジュールは以下 このまま実行すると、以下のようなエラーが出てしまう 「matplotlibrc」ファイルの中身を修正することで対応する 参考:Pythonでmatplotlibをimportするとエラーが出る場合の対処策(Mac) 「python -c “import matplotlib;print(matplotlib.matplotlib_fname())”」で表示されたファイルの中身を修正する 「backend: macosx」部分を「backend: Tkagg」に書き換える   実行 「x **3 + 200」を微分するコードは以下 「diff」関数で微分ができる 「f_org」が微分前で、「f_diff」が微分後 微分後の線は赤に指定する ※「**3」は3乗という意味 いざ実行 「x**2 / 3」を積分するコードは以下 「integrate」関数で積分ができる 「f_org」が積分前で、「f_inte」が積分後 積分後の線は赤に指定する いざ実行 以上。 参考: 【Python入門】Sympy・matplotlibで微分積分を計算してみよう [SymPy] Plotting Module

pythonのlistは代入しただけでは変更の巻き添えを食らうからcopyで複製する

タイトルだけでは意味がわからないと思うので実際のコードを見てみる このコードの実行結果は以下 の時点でlist1とは独立したlist2と言うリストができていると思ったが、 list2を変更(remove)したらlist1も巻き添えを食らって変更されていた という問題 巻き添えを食らいたくないときはcopyを使えば良い list2を変更しても、list1は影響を受けない 実行結果

モンティホール問題実験してみた(python)

この前忘年会で話題となった話 テレビ番組で最近やってたとか いつかの就職試験で出た(もちろん外した)ので 私にとっても思い入れのある問題 ルールは以下 0:三つの扉がある。一つは正解(車の扉)。二つは不正解(山羊の扉)。 1:挑戦者は三つの中から一つ扉を選ぶ。 2:司会者(モンティ)は答えを知っており,残り二つの扉の中で不正解の扉を一つ選んで開ける。 3:挑戦者は残り二つの扉の中から好きな方を選べる。このとき扉を変えるべきか?変えないべきか? 参考リンク: モンティ・ホール問題とその解説 直感だと、扉を変えても変えなくても確率は同じだけど 実際は変えた方が確率は上がるよね と言う話 解説はこちらがわかりやすかった 【条件付き確率】全米が震えたモンティ・ホール問題を解説 一応、念の為、本当に確率が違うのかpythonで実験してみた コードは以下 いざ、実行 すごい、扉5枚の場合は4倍にちゃんとなる youtubeで紹介されていた3枚扉にすると ちゃんと2倍に落ち着く

PythonのClassとConstractorとMethodをざっくり理解する

PythonのClassとConstractorとMethodをざっくり理解する ※Python3.5.0前提で記載 用語整理 Class(クラス):設計書 Constractor(コンストラクター):Classが作られるときに最初に実行されるやつ Method(メソッド):Classの機能 白紙のClass(設計書)を用意する ここからは実際にClassとやらを用意する Classの枠はこれだけ 今回は「Human」というClassにした Class(設計書)の中身を書いていく 白紙設計書では意味がないので、この中に色々内容を書いていく Classの中には、いくつか機能(Method)が書かれている Methodは「def」という接頭語?で記載する 今回は「Human」クラスに、「laugh」と「walk」という機能を用意した 「init」という名前のMethodは、Classが作られた絶対実行されること。 これは、特別に「Constractor」と呼ばれる 変数の定義などがよく書かれる 何でinitなの?とかはよくわからん、そう決まってる(雑) その他の任意の名前で書かれているMethod(例えば上の例では「laugh」と「walk」) は、 呼び出されたら使われる機能 「def」から始まる塊について「class」の外で使われたいたら 「function(関数)」と呼ばれる。紛らわしい、、、 参考:pythonの中でよくみる「def」から始まる塊について、用語が紛らわしいので整理する 設計書の全容は以下 Class(設計書)からもの(Instance)を作って動かす 設計書が書けたので、設計書から「もの」を作って、機能を使ってみる できたものを「Instance(インスタンス)」と呼ぶ 何もなければ、Humanクラスはこれだけで作成できる ただ今回は、色々パラメータを使う前提で「Class」を書いているので、こんな感じで作成する パラメータを使う前提で、、というのはこの部分のこと 更に、「Human」Classから作成したオプジェクト(以下の例では「taro」 と定義)から各機能を使うには、 「taro.【機能名】」と記載する こんな感じ 実行結果 今回Classを作成して実行したコード全容は以下 実行結果はこうなる

pythonの中でよくみる「def」から始まる塊について、用語が紛らわしいので整理する

pythonの中でよくみる「def」から始まる塊について、用語が紛らわしいので整理する Classの中の「def init()」 から始まるのは「Constractor(コンストラクター)」 Classの中の「def」から始まるけど、Constractorではないのが「Method(メソッド)」 Classの外の「def」から始まるのは「Function(関数)」

Office365のOutlook APIをpythonで叩いてSlackに本日と翌営業日の予定をPostしようとしてみる(5)本日と翌営業日の予定をPostしようとしてみる

フルコードはこちら https://github.com/yoshi-island/o365_slack_work 前回の記事はこちら 本日と翌営業日の予定をPostしようとしてみる ごめんなさい、まだSlack Botレビュー中なので、Slackにポストはまだできていない でもこの通りにやればできるはず わかりやすいように、一旦ポストする内容をprintするようにしています python-slackclientを使うので、 python-slackclientをpipでインストール 同じ階層の先ほど作成したpassword_list.pyの内容に 先ほど控えたslackのtokenと、ポストしたいチャンネルのIDを記載 (チャンネルIDはブラウザでSlackチャンネルにアクセスした際のURLに記載されている) 同じ階層に以下のポストするこのようなファイルを作成する 汎用的でなくてすみませんが、以下の変数は自身の環境に合わせて書き換えとく これで実行すると、本日の予定と、次の出勤日(月〜金)の予定がPostされる いつの予定を出力したいかは「## get next business day events」を操作してくださいませ。 まだBotが動かないので、一旦print結果でご容赦、、 土曜日の場合は当日と翌月曜の予定が記載される 日〜木曜日の場合は当日と翌日の予定が記載される 金曜日の場合は当日と翌月曜の予定が記載される うん、とりあえず必要な情報取れてる。 Trouble Shooting Slack Botの投稿がうまくいかない場合は、Slack Distributionのチェックが全て付いていないかも ちょっと面倒くさいけど、全てがチェックつくように規約確認したり、Botの説明を記載したり頑張ってください。

Office365のOutlook APIをpythonで叩いてSlackに本日と翌営業日の予定をPostしようとしてみる(4)Slack Appの作成

Office365のOutlook APIをpythonで叩いてSlackに本日と翌営業日の予定をPostしようとしてみる しようとしてみるという理由は、slack botの申請がまだ降りていないので、実際にslackのポストまでは試せていないせいということ、、、 フルコードはこちら https://github.com/yoshi-island/o365_slack_work 前回の記事はこちら Slack Appの作成 以下ページからSlack Botを作っていく(Slackアカウントとワークスペースはある前提) https://api.slack.com/apps 以下の手順で作成していく。 基本的に、Botを作成した後、「Basic Information」と「Manage Distribution」のページで全て緑チェックがつくように操作していく (規約チェックとかBotの説明文追加とか結構大変) 最後にSubimitし、Slack社のレビュー?が通ったら晴れて使えるようになる OAuth Tokenは大事に控えておく すぐSlackのページにアプリ自体は追加されるが、レビュー状況はアプリのページから確認できる 続きはこちら

Office365のOutlook APIをpythonで叩いてSlackに本日と翌営業日の予定をPostしようとしてみる(3)Azure appからカレンダー一覧を取得する

Office365のOutlook APIをpythonで叩いてSlackに本日と翌営業日の予定をPostしようとしてみる しようとしてみるという理由は、slack botの申請がまだ降りていないので、実際にslackのポストまでは試せていないせいということ、、、 フルコードはこちら https://github.com/yoshi-island/o365_slack_work 前回の記事はこちら Python環境整備 Pythonは3.5.0でやる python-o365をインストール python必要モジュールをインストール python-o365にrequirements.txtが入っているのでそれらをダウンロードすれば良い これで無事にモジュールが入った Azureとの接続確認(Azure appからカレンダー一覧を取得する) 同じ階層にパスワードファイルを作成する 先ほど控えておいた、client idとclient secretを記載する 同じ階層に、このようなファイルを作成する 実行するとカレンダー一覧が取得できる 初回(o365_token.txtが無いと)は、Paste the authenticated url here: と聞かれるので Visit the following url to give consent: の後ろにあるURLにアクセスし、返ってきたURLを貼り付けると実行できる ここまでくればAzure(Office365)側はOK Trouble Shooting 以下のようなエラーが出たら、Azure Appを作る際に、Supported account typesに”Accounts in any organizational directory and personal Microsoft accounts (e.g. Skype, Xbox, Outlook.com)”を選択していない可能性があるので見直すべし 続きはこちら

Office365のOutlook APIをpythonで叩いてSlackに本日と翌営業日の予定をPostしようとしてみる(2)Azure App作成

Office365のOutlook APIをpythonで叩いてSlackに本日と翌営業日の予定をPostしようとしてみる しようとしてみるという理由は、slack botの申請がまだ降りていないので、実際にslackのポストまでは試せていないせいということ、、、 フルコードはこちら https://github.com/yoshi-island/o365_slack_work 前回の記事はこちら Azure App作成 次にAzure Appを作成する まずはAzure Portalにアクセス、先ほど作成したOffice 365のアカウントで入れる https://portal.azure.com/ 以下の手順で作成していく。 続きはこちら

Office365のOutlook APIをpythonで叩いてSlackに本日と翌営業日の予定をPostしようとしてみる(1)Office365トライアルアカウント作成

Office365のOutlook APIをpythonで叩いてSlackに本日と翌営業日の予定をPostしようとしてみる しようとしてみるという理由は、slack botの申請がまだ降りていないので、実際にslackのポストまでは試せていないせいということ、、、 フルコードはこちら https://github.com/yoshi-island/o365_slack_work Office365トライアルアカウント作成 まずはOutlookのアカウントをゲット 有料プランはお高いので、無料トライアルを登録 Office 365 を無料で試す 登録できたら以下からOutlookが確認できる https://outlook.live.com/calendar/ 一旦こんな感じでスケジュールが入っているとする CalenderとTaskという二種類のカレンダーを作っているので、今回は両方ともPostする 続きはこちら