機械学習を始めとしたコンピュータサイエンスを主に扱っています。この広告は、90日以上更新していないブログに表示しています。2018-09-19PandasのDataFrameから特定の値を持つ行を削除するpython言われてみたら簡単なんだけど、意外に思いつかなかった。DataFrameの特定の行に含まれている値を指定して、それ以外を抽出するイメージ。20:11PandasのDataFrameから特定の値を持つ行を削除するTweet広告を非表示にするもっと読むコメントを書く2018-07-30pythonで地図上の2時点間の位置関係を求める;python2時点間の緯度、経度、高度が与えられたときに簡易的に2時点間のローカルな位置関係を求めます。緯度・経度・高度といった情報ではローカルな2時点間の関係性が分かりづらく扱いづらいので、変換します。サイトと独立行政法人の電子航法研究所の資料を参考に作成しています。高校などで扱った平面世界での2時点間の距離は、簡単に求めることができたと思いますが、地球上の2時点間ではそれほど簡単には求めることができません。地球が球体であり、局面上にある2時点間の距離を求めることになるからです。ジオイドとは地球は、時点による遠心力の影響で、赤道方向が少し膨らんだ楕円体のような形をしています。測地学では、世界の界面の平均位置に最も近い「重力の等ポテンシャル面」を「ジオイド」と定めて、これを地球の形状ということにしています。標高はジオイドを基準として定められており、標高はジオイドから測った高さになります。いった幾何学的な位置を求めることができますが、重力を考慮した設計になっていないため標高を直接求めることができません。GPSを用いて標高を求めるためには、ジオイド高がj必要になります。ジオイド高ジオイド高は国土地理院が提供している計算サイトで計算することができます。WGS84WGS84とは、GPSの基準座標系で、直交座標系です。これはECEFと呼ばれ、地球の重心を原点として地球の自転軸の北極方向をZ軸、Z軸に垂直にグリニッジ子午線の方向をX軸として、これらの軸と直行するように右手系でY軸とした直交座標系です。北をY、上空をZとした地平直交座標(ENU)に変換します。ECEFからENUへの変換は、行列による回転と原点移動で実現できます。詳しくは上記で示した電子航法研究所の資料をご確認ください。githubにサンプルコードを提示してあります。10行目で取り扱いたい2時点の緯度・経度・ジオイド高のサンプルデータを与えています。結果表示では、2時点間の距離およびある時点(コードではRx)からみたもう1時点(コードではSat)の方位角、仰角を求めることができます。Terminalを起動して、paneとの間を移動する方法を説明します。atomのインストールatomは以下のサイトから自分の環境に合わせてインストールしてください。Terminalatomでターミナルを起動するプラグインです。Terminalにしました。platformio-ide-terminalでインストールできます。起動することができます。fで移動することができます。atom上でterminalもbashrcの内容が反映されるので使い心地は変わらないような気がします。参考にしたサイト全面的にこちらのサイトを参考にしました。色々なプラグインを比較されていてわかりやすかったです。jump-up.infoatom関連だとこの本がまとまっていた。前回の記事では、「時系列データの定常性を確認する」というタイトルで記事を書きました。与えられた時系列データが定常過程であれば、ARMAモデルなどの基礎的なモデルに落とし込むことができます。test)を取り上げます。使用言語はPythonです。今回も沖本本を参照しています。見る単位根過程とは前回の記事で、定常過程に関しては取り上げているのでそちらを参照してください。定常過程であるとき、過程は単位根過程であるといわれる。単位根過程は、別名がいくつかあり、差分系列が定常となるため差分定常過程と呼ばれることがあります。今回Pythonのコード中の検証データとして使用しているランダムウォークに関しても記述しておきます。今回ランダムウォークを検証データとして使用しているかと言うと、ランダムウォークが単位根過程の代表選手だからです。ランダムウォークと呼ばれる。ドリフト率と呼ばれる。上記の定義より、繰り返し代入すると、と表現できます。いう撹乱項の線形和で表現され、これは確率的トレンドと呼ばれます。線形トレンドの傾きを表しているので、単位根過程は線形トレンドと確率的トレンドを併せ持つ過程と言えます。ショックは恒久的な影響力を持つ表のトレンドに関して詳しく説明します。定常過程(弱定常性に従う過程)は前回の記事で説明したように、期待値と自己共分散が時間によらず一定であるという仮定を置いています。この仮定より、明らかに定常過程はトレンドを持ちません(時間によらず一定であるから)。定常過程は平均回帰性を持ち、過程が長期的には必ず平均の方向に戻っていくことを意味します。定常過程であっても線形トレンドを記述できるモデルとして、トレンド定常過程と言われるものが存在します。トレンド定常過程は、文字通り定常過程にトレンド項を加えることで線形トレンドを記述できるようにしたモデルを指します。それでは、トレンドを持つトレンド定常過程と単位根過程は線形トレンドを記述できるという点で同じなわけですが、前述したように単位根過程は確率的トレンドも持つ点で異なります。単位根過程は不確実性を線形的に増大させていると言えます。インパルス応答関数に関してですが、VARモデルに関して取り上げる際に書こうと思っているので一旦保留とします。して有名なADF検定について説明します。ADF検定は真の過程をAR(p)モデルと仮定し、仮定が単位根AR(p)過程であるという帰無仮説を、過程が定常AR(p)過程であるという対立仮説に対して検定するものです。ない(=定常である)」と言ってしまってもいいと思います。この検定を用いる場合、ある有意水準に対して帰無仮説を棄却できれば、対立仮説が支持されて与えられた時系列データが定常過程であると言って良さそうです。帰無仮説を棄却できなかった場合は、帰無仮説を積極的に支持したことにはならないことに注意してください。これは統計学的非対称性によるのですが長くなりそうなのでまた別の機会に取り上げます。したがって、与えられた時系列データが単位根過程であるかは、冒頭で取り上げた単位根過程の定義である過程の差分系列が定常課程であることを用います。したがって、手順としては以下のようになります。棄却できなければ、与えられたデータは単位根過程ではない非定常過程このようにしてデータを分類することになります。この手順をPythonで実装した例を示します。沖本本を基に、定常性について説明します。定常性は時系列モデルを考える際に最も重要な概念の1つです。定常性とは定常性は、大雑把に言うと時系列モデルの性質です。あるという性質を表現したものです。強力な仮定になると思いませんか。定常性という強い仮定の下で、時系列データを分析する際に有名なARMA過程などの基礎的なモデルに落とし込むことができます。現実のデータを用いた場合にその仮定が正しいのかを検証することが難しいからではないかと思います。今回は弱定常性に関して詳しく見てみようと思います。自己共分散について弱定常性を確認する前に、導入として自己共分散について説明しておきます。与えられたデータがどのようなデータなのかを調査します。標準偏差(ファイナンス分野ではボラティリティ)などがあります。時系列分析においては、更に自己共分散という統計量が追加されます。時系列分析において自己共分散を確認する必要があるのか。これは、時系列データが過去の自分自身のデータに影響される可能性があるためです。翌日は確実に下がるでしょう。このように時系列データにおいて、過去の時点のデータに影響された動向変化は容易に想像できます。自己共分散が負であれば、期待値を基準として異なる方向に動く傾向となります。一般的にk次の自己共分散は]で定義されます。弱定常性についてやっと弱定常性の定義の話ができますね。弱定常性の定義は]となります。弱定常性は時系列データの期待値と自己共分散が時間によらず一定であることを要求します。その要求を満たせば弱定常性の仮定の下で分析を進めていくことができます。時系列モデルを構築する場合、自分がどのような仮定の下で分析しているのかを意識することはとても大事だと思います。依存することには注意が必要です。Dickey-Fuller)検定により判別することができます。存在する」、対立仮説は「単位根がない(=定常である)」である検定です。この検定において帰無仮説が棄却された場合は、対立仮説である「単位根がない(=定常である)」が支持されたと結論づけます。まとめデータが定常であるかどうかによって分析するプロセスが変わるので最初に与えられたデータが定常過程かどうかの確認はするべきです。書いていて疑問に思ったのは実データに対して強定常性を仮定できるのはどういったデータかということでした。理論的なもので、応用例が存在するかどうかは気になりますね。沖本本のアウトプットを共有目的と自分用のメモ目的で書きます。分析者にとって重要な特徴のみを簡単に表現できるモデルを構築することです。このように作成したモデルを基に、目的に応じた分析を行います。自然現象を観測データにする際にもある程度の情報の取捨選択が行われていることは一応念頭に置いておくべきです。原系列に対して時系列分析をするよりも何らかの変換を施して分析を進めるほうがいいことが多いです。分析におけるざっくりとした方針は以下のようになります。対して対数の変換を施します。時系列分析において重要な性質である定常性の仮定を満たさない場合があります。対して1時点離れたデータの差を新たな系列に変換して分析することもあります。これを差分系列と呼びます。時系列データには、定常性を持つ定常過程に従う時系列データの他に、単位根過程に従う時系列データなどが存在します。なるということだけは抑えておいても良さそうです。対数系列の差分系列である対数差分系列に変換します。この変換を施す動機は変化率に興味がある場合です。データには季節性を含んだデータも多いです。株価などがわかりやすい例として考えられます。一般的に株価は年の前半は上昇トレンドですが、年の後半は減少トレンドであることが知られています。時系列分析において、季節変動では説明できない時系列データの動きに興味のあることが多いように思います。季節調整自体は難しい問題で、僕自身も勉強不足なので扱いきれていませんが、Pythonのstatsmodelsというライブラリの中で季節調整のできる関数が実装されています。freq)xにはarray-likeな時系列データを渡して、freqで季節性の周期を渡します。することで一週間の季節性を排除します。公式ドキュメントを確認してみてください。まとめ今回は時系列データの変換に関してまとめました。常に人に説明できるようにしておくことが重要だと日々感じています。勉強不足なのでアウトプットと並行しながらインプットも進めていきたいですね。スクレイピングSeleniumはWebブラウザの自動操作ライブラリです。Seleniumを用いることで人間がWebブラウザ上で行う作業を自動化することができます。Seleniumの一般的な用途としては、単純作業の自動化の他にWebアプリケーションの自動化などが挙げられます。今回はSeleniumでWebページにアクセスしてcsvファイルをダウンロードするという作業を自動化します。使用するものSelenium今回の主役です。様々な言語に対応して提供されていますが、今回はpythonを使用します。etc...)のdriverを指定することでSeleniumを各ブラウザで実行することができます。それぞれのブラウザではヘッドレスモード(ブラウザを実際にGUI上に立ち上げずに実行するモード)が可能です。今回はデータを取得するだけなのでヘッドレスモードで実行します(オプションで--headlessで指定するだけ)。2018年6月2日ヘッドレスブラウザの代名詞だったPhantomJSの開発が終了アーカイブ化されたので、上記のブラウザを使用することをおすすめします。今回高頻度で利用することはないのでCircleCIは使用しません。options=options)driver.get('操作したいブラウザのURL')この部分がSeleniumによるブラウザ自動操作の基本部分になります。オプションで--headlessを指定することでヘッドレスモードを選択できます。driverでChromeを指定したあとは、driver.get(URL)でブラウザを開くことができます。スクレイピングSeleniumを用いたスクレイピングも一般的なスクレイピング同様HTMLの要素にアクセスして実行していきます。toolsを使えばWebページを構成するHTMLがわかるので地道にみながら操作していく感じです。elementの部分をelementsにすると該当する要素が複数取得できます。elementでアクセスした際、要素が複数ある場合は一番はじめの要素にアクセスできます。今回は日本経済新聞の経済指標ダッシュボードのcsvデータを取得します。https://vdata.nikkei.com/economicdashboard/macro/経済指標ダッシュボードは日本経済の動向を把握するのに役に立つ経済指標が一覧できるサイトです。ブラウザ上で表示されているグラフをクリックするとcsvがダウンロードできるボタンが表示されます。基本方針としては、csvデータのURLが含まれる要素まで行ってgetAttribute()で名前付けされた属性の値を取得しにいくという方針です。'保存先のファイル名')でURLからデータをダウンロードします。githubにコードを上げてあります。github.comまとめSeleniumでブラウザ操作が自動化できるとかなり効率化につながりますね。勉強できていないので色々試しながらやっていきたいです。以下は今回勉強するに当たって参考にしたサイトです。tech.mercari.comHTML付近の勉強は下の本をチラ見しながら勉強しました。図が豊富でわかりやすいです。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。