サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
qiita.com/simonritchie
強化学習の本を読んでいて、とても今更なのですがPythonで辞書のキーにtupleが指定できることを知りました。 普段はPandasでデータフレームで対応することが多いので、そこまで頻繁に使うというものではありませんが、稀に必要になった時のためにメモしておきます。(マイナーなトピックなので、需要は皆無な気がしないでもないですが・・) できること sample_dict = {} sample_dict[(100, 3, 1300)] = 500 print(sample_dict[(100, 3, 1300)])
普段Pythonなどをメインにお仕事をしていますが、Rustのごく基本的な文法や挙動などをPythonと比較しつつ学んでいってみます(前も入門書消化したタイミングで少し記事にしたりしていますが復習も兼ねて書いておきます)。 ※Rust初心者なため誤解している点などがあるかもしれません。その辺はご容赦ください。 ※長くなりそうなので記事を分割しています。本記事は2記事目となります(過去の記事で触れた点はスキップします)。 1記事目: ※今回はライフタイムなどのRust特有のトピックが多めでPython関係はあまり出てこず若干タイトル詐欺的な側面があるかもしれません・・・w Rustでのエラーハンドリング 詳細までは触れませんがRustのエラーハンドリングについて軽く触れておきます。 Pythonだとエラーになりうる箇所に関してはtry-exceptを使ったりしますが、Rustでは関数の返却値
最初のgitのコミットから約8年?経過し9年目に突入しているのでは・・・というレガシー感の溢れるプロジェクトを引き継いでから何年もかけて色々改善してきた内容だったり、逆に現在でも色々抱えていて今後改善していきたい課題などについて本記事で振り返り的に触れていきます。 ※執筆に関して上長から許可をいただいています。 プロジェクトの概略 弊社がゲーム会社なのですが、各ゲームタイトルで横断で使われているwebアプリです。 言語としては主にPython、フレームワークとしては主にDjangoが使われています。 テストやdocstringなどを含めた現在残存するPythonファイルの行数は約78万行くらいです。 サーバーはAWSのクラウドが使われています。 年数的に色々レガシー感のある点がたくさん残っていますが、一方でここまで長い間社内で使われ続けてきている・・・というのは中々無いケースでしっかり続い
最近以下の個人開発のPythonライブラリでフォーマッタをautopep8からblackに移行したので雑多に所感などをまとめておきます。 blackとは Python界隈でこの記事執筆時点で一番スターの付いているPythonのフォーマッタライブラリです(執筆時点でGitHubのスターが約3万)。 Pandasやscikit-learnなどのPython界隈の有名ライブラリ含め、非常に多くのリポジトリで使用されています(記事執筆時点でGitHub上のUsed byの表示が約17000リポジトリ)。 色を混ぜて別の色にできない黒色のごとく、基本的にスタイルの調整が効きにくくなっているのと調整せずに使うのが基本となっているようです。 融通が効かない代わりにプロジェクトごとにスタイルが異なっていたりといったことを避けられたり、最初のスタイルを決めたりする手間を省くことができます。つまり各プロジェク
最近お仕事とプライベートで使い始めたPythonビルトインのTypedDictを使い始めたので詳しく調べて記事にしておきます(PEP 589 -- TypedDict: Type Hints for Dictionaries with a Fixed Set of Keys)。 TypedDictって何? 通常の辞書よりもより型の定義が細かく、厳密で固定的な辞書です。 今までも例えば「キーに文字列、値に整数と文字列を含む辞書」の型アノテーションをしたい場合には以下のようにDict[str, Union[int, str]]といった型アノテーションで対応ができていました(もしくは3.10などの新しいPythonバージョンではdict[str, int|str]など)。 from typing import Dict, Union any_dict: Dict[str, Union[int,
個人的に趣味(技術的盆栽1)で作っていっているPythonライブラリで使っているLintやサービスであったり、工夫している点や今後検討している点などを色々まとめていこうと思います。 ※1人でプライベートにちまちまと進めているのでまだまだ理想的ではない部分も多く、その辺は今後検討している点として触れていきます。「この頃はこんな感じになっていた」と個人的に将来振り返る時のためにも使います。 ※本記事はQiitaのイベント開始前に少しずつ書き始めていたのですが、GitHub Actionsも絡んでいるのとGitHub Actionsのイベントテーマが設定されていたので折角なのでイベント用のタグを設定させていただいています。 どんなライブラリなのか 各種説明をスムーズにするために軽く対象ライブラリの内容に触れておきますが、Pythonである程度フロントエンドを書けるようにしたい・・・と思い作り始め
Pythonの関数(メソッド)の内容に合わせてdocstringのテンプレートを生成してくれるautoDocstringというVS Codeの拡張機能をお仕事とプライベートで使っていたら結構気に入ったのでその紹介です。 autoDocstringでできること Pythonの関数やメソッドの引数名や型アノテーションなどに応じたdocstringのテンプレートをVS Code上で生成してくれます。 ※JSDoc的なもの含め、他の言語だと割とその辺をしっかり生成してくれる一方でPythonだと(出力されるdocstringのスタイルがずれていたりなど)個人的にしっくりくるものが無く、今まではスニペット的にクリップボードへ定型文登録などして過ごしていました。 PEP257やGoogleスタイル、NumPyスタイルなどメジャー所のdocstringのスタイルはサポートされています。 ※そもそもdoc
本記事はQiitaの「データに関する記事を書こう!」イベント用の記事となります。 最近聞くことが多くなってきたJinjaの書き方について整理&まとめてみました。 Jinjaって何?(どんなところで使われているのか) Djangoとかを普段使っている方はお馴染みの{% for i in range(10) %}とか{{ any_variable }}みたいな書き方を任意のテキストファイルに対して反映できるテンプレートエンジンのライブラリです。初版リリースはこの記事を執筆している時点で3年弱くらい前なので比較的新しいライブラリになります。 以下に書かれているようにDjangoのテンプレートの機能がベースとなっており、Djangoに慣れている方であればほぼ学習コスト0で書けるような書き方になっています。 Djangoのテンプレートエンジンにインスパイアされているので、パッと見はDjangoのデフ
先日以下のような記事を拝見しました。 「うんうん、そうだねぇ・・・」と思いつつ読んでいたのですが、ここ数年ずっとPythonばかりを書いていた身からすると少し違和感を感じるところもあったので頭の整理的に言語化しておきます。 前置き 本記事は元の記事を否定するものではありません。元記事で以下のように書かれている通り、元記事はあくまで「そういう傾向がある」という話ですので本記事はそういった傾向に当てはまらないPythonでの例外的なところに触れる形となります。 これまで色々なプロジェクトを観察(風聞も含む)して来たところ、そういう傾向があるのではないかという仮説です。 本記事はなんとなくPythonだと長期プロジェクトとかコード量が多いと詰むのでは・・・?と感じられた方に対してそういったプロジェクトでも(条件次第で)快適に開発を続けられるよ、と宣伝するためのものです。 逆に本記事に対して強い違
最近自作Pythonライブラリでがっつりdoctestを使い始めたので記事にまとめておきます。 doctestってなに? dostring内に書くコードサンプルを実際にPythonで動かしてエラーにならないことや返却値が正しいかどうかをチェックすることができる機能です。 ※docstringについては必要に応じて以下の記事などをご確認ください。 ※Rustなどにも似たような機能がビルトインで入っています。 doctestを書くとなにが嬉しいの? docstringにコードサンプルが載っているとユーザーがエディタ上などでさくっと使い方を確認できてユーザーフレンドリーです。 一方で書いただけだとそのコードサンプルはテストやLintでチェックされるわけではありませんので正常に動作しないケースが発生し得ます。書いたときは動いていても日々のアップデートでいつの間にか動かなくなってしまうこともあるかも
TL;DR Pythonで2つのモジュール間でお互いにimportしており、且つその中でのクラスなどの型アノテーションをエラーにならずに対応できるケースがあるよ、という話です。 使う環境 OS: Debian GNU/Linux 10 Python 3.6 ※個人で趣味で作っているPythonライブラリの最低バージョンの3.6に合わせているので新しいPythonバージョンではもしかしたら話が変わってくるかもしれません(そろそろPython 3.6のサポートを切っても良いかもですしね・・・)。 悩ましいPythonの循環importのエラーの話 他の静的型付け言語だと特に気になったりしないのですが、Pythonだと2つのモジュールでお互いにimportしあう形になっているとImportErrorになったりすることがあります。例えば以下のようにsample_A.pyというモジュールとsampl
息抜きを兼ねてQiitaで開催されている以下のイベントに参加してみました。 ※個人の好みが強い点、将来気が変わって別のことを学んだりといったことも結構起こると思いますがその辺はご容赦ください。また、仕事のものは別途学んだりはしますがその辺はあまり含みません(プライベートで興味を惹かれているものを中心に触れていきます)。 ※執筆者はゲーム業界に在籍しており、現在データエンジニアをしているためその辺の色が強くなっています。 数学関係の強化 以前も何冊か数学関係の本を消化したり、コンピューターサイエンスの基礎本なども消化したりしてきましたが、機械学習含めたデータサイエンス周りを強化するにしろゲーム関係にしろ数学は強化して損はない・・・ですし学んだことは長持ちしそうなため復習や新しいことの勉強も含め数学方面を強化したい・・・という感じがあります。 最近は朝は仕事関係のクラウドやらの勉強・夜はOSS
Qiita公式が新人プログラマ応援のイベントをやっているようなので便乗して参加してみました。 ポエム成分などを多く含みますのでご注意ください。過去のQiita公式の発表や先日のガイドライン改定に目を通してみてとりあえずはこういった記事も大丈夫そうとは判断しておりますが、もし怒られたら削除するか別のところに記事を引っ越しいたします(はてブコメントなどで「こんな記事Qiitaに書くんじゃない」とご指摘いただきそうで戦々恐々としながら書いています)。 本記事で触れること 長く現役でいるために大切な睡眠・運動・食生活などのこと。 習慣化のこと。 勉強のこと。 今までどのくらいエンジニアをしてきたか 私自身はエンジニアのお仕事は10年くらいです。高校生のころ辺りから少しはHTMLやjsのコードを書いていたのでコードを書いてきた期間としてそこからカウントすると17年くらいでしょうか。デザインの学校を出
結構前にPandasやDaskなどよりも大分高速と話題になっていたPythonのVaexライブラリについて、仕事で利用していきそうな気配がしているので事前にしっかり把握しておくため、色々調べてみました。 どんなライブラリなのか Pandasと同じように行列のデータフレームなどを扱うことのできるPythonライブラリです。 Pandasと比較して膨大なデータの読み込みや計算などを高速に行えます(数十倍~数百倍といったレベルで)。 計算上のメモリ効率がとても良く、無駄の少ない実装になっています。 Daskのように計算が遅延評価されたりと、通常はメモリに乗りきらないデータでも扱うことができます。 Daskのように並列処理で計算を行ってくれます。 Pandasと比較的似たインターフェイスで扱うことができます。 この記事で触れること 主に以下のVaexのトピックに関して本記事で触れます。 インストー
VS Codeなどで使えるPylanceという拡張機能がリリースされていたので早速使ってみました。 参考 : 型ヒントでPython開発を加速 ~Microsoft、VS Code向けの拡張機能「Pylance」を発表 (大雑把に)どんな拡張機能? マイクロソフト製のPythonの拡張機能です。 Python拡張機能に入っているようなPythonの入力補完周りが有効になります。これはまあ大半のVS Code使ってPythonのコード書いている方はPythonの拡張機能入れていらっしゃるでしょうからそこまでは大きく変わりません。 以前書いたPythonの型チェック用のPyrightと同じように、コードを書きつつ型のミスや補完が効きづらい箇所で型アノテーションをすることで補完が効くようになってくれます(内部でPyrightが使われています)。 Pyrightの記事: 入力補完を充実させ、より堅
Pythonの文字列関係の制御を調べていて、f-strings(f文字列)が結構奥が深く知らないことも多かったので、別途Qiita記事にまとめておきます。 そもそもf-stringsってなに? Pythonで文字列の前にfという文字を付与し、且つ{}の括弧を使うことで文字列中に変数を展開したりコードを実行したりできる機能です。 以下のようなコードになります。 主な参考サイト f-stringsについて詳しく説明がされているPEP 498 -- Literal String Interpolationを主に参考にします。 記事上で使う環境 Windows10 Python 3.8.0 Jupyter(実行にはVS CodeのPython拡張機能を利用) f-stringsを使うと何が嬉しいのか? f-stringsを使ってできることの大半(変数の挿入処理など)は文字列のformatメソッドで
よりVS CodeのPythonの入力補完を精度良くしたり、入力補完が効かない部分をちゃんと補完してもらったり、もしくは静的型付き言語でコンパイルして型のエラーが無いか調べるがごとく、CIなどでチェックして安全にプロジェクトを扱うためのPythonの型アノテーションやPyrightなどについて学んでいきます。 記事執筆する際に使っている環境 Python 3.7.3(Anaconda。本記事の内容は古いPythonバージョンでは使えないものが含まれます) Windows10 VS Code 1.45.1 Kite VS Code上の以下の拡張機能 Python Kite Autocomplete for Python and JavaScript Pyright ※Kiteの有無などで若干補完結果が皆さんの環境と本記事でずれたりするかもしれませんがご了承ください。 そもそも型アノテーション
普段正規表現が必要になるケースがそれなりに発生しているものの、体系立てて勉強したことがなかったので整理・まとめておきます。言語はPythonを使います。 結構長めです。これを読んだ皆さんはきっと「Pythonの正規表現完全に理解した」とつぶやいても怒られないはず。 そもそも正規表現って? 英語だとRegular Expression。文字列関係の特殊な操作をやる際に、特定のパターンを指定して色々な処理を行う表現(処理)のことを言います。 普通の文字列関係のビルトイン関数やモジュールなどでは対応が面倒(もしくは対応が難しい)な文字列操作などが正規表現を使うことでシンプルに扱えるケースがあります。 主に以下のような用途で使われます。 文字列の特殊な検索(例 : 曖昧検索や表記ぶれなどを含める等) 入力値のバリデーション(例 : 入力されたメールアドレスが有効な値になっているか等のチェック) 固
社内で専門のインフラ関係の担当の方がいらっしゃって、環境などはよしなにしてくださっていたのですが、流石にそろそろDocker周りを自分でも勉強しておかないとまずいだろう・・ということで、最近Dockerにやっと入門したので、色々と学んだことを備忘録も兼ねてまとめたり試したりしていこうと思います。 経歴的にインフラ周りなど馴染みの薄いお仕事を長くしてきていたので、知識的に荒い(浅い)ところなどは色々ご容赦ください。 私も初心者ですし、あまりインフラとかに馴染みのない方向けの記事となります。 Windows環境(Docker for Windows)でLinuxやPython関係を動かしたりを中心に進めていきます。 この記事で触れること コンテナなどの概要やメリット Docker for Windowsのインストール・設定 コンテナとイメージ関係の基礎 Docker Hubやタグについて Do
ついにPandasの1.0.0rc版が公開されたようなので、早速アップデート内容の確認や挙動を試していきたいと思います。 元のツイート : Pandas 1.0.0rc0 is now available for testing! Please try it out and report any issues.https://t.co/iTjBtzy3WA — pandas (@pandas_dev) January 10, 2020 TLDR 極端にがらっと変わったという感じでもありませんが、細かいところが色々とたくさんブラッシュアップされたような印象を受けました。 整数の列に欠損値が含まれていた際に、カラムの型を整数のまま保持するためのpd.NAのシングルトンが追加された。 文字列のカラムがobjectではなく文字列専用の型を指定できるようになった。 真偽値のカラムでも、カラムの型を維
PandasやNumPyの並列処理だったり、メモリに乗り切らないデータを扱う際などによく見かけるDaskライブラリ。 ただ、細かいところまで触れている日本語の資料があまり無かったので、公式ドキュメントなどをしっかり読んでみてまとめてみました。 ※Daskのドキュメント既に読まれている方はご存知かと思いますが、ドキュメントがかなりのボリュームなのと、細かい所まで把握するのを目的とするため、本記事も長めです。仕事などの都合でさくっと使われたい方には向いておりませんので、そういった場合は別の記事をご参照ください。 どんなライブラリなのか Pythonで並列処理・分散処理などを簡単に扱ってくれる。 Pythonでよく使われるライブラリとかなり近いインターフェイスを提供している(NumPy、Pandas、Scikit-Learnを中心に、他にもTensorFlow・XGBoostなども)。 必要な場
前々からVS CodeでJupyterが使えるのは知っていましたが、つい先日(2019-10-08)Pythonの拡張機能がJupyterをネイティブサポートしたそうなので、どんな感じなのか試しみます。 TL;DR ほぼJupyterに近い感覚でVS Codeで使える。マジックコマンドとかも要らなくなった。すごい。 補完とか置換やJupyter起動の手間を省いたりと、使えそう。 完全なJupyter再現ではないので、細かい、足りてないところは今後のアップデートに期待。 公式のマイクロソフトの発表 Announcing Support for Native Editing of Jupyter Notebooks in VS Code 前情報 主にTwitterのタイムライン上で色々流れていて知りました(貴重な情報感謝です)。 VSCodeのPythonプラグインが、10月の更新からデフォル
世の中的には分析などをする際にはBigQueryのケースが多いと思いますが、仕事でAmazon Athenaを触るケースが出てきたので、入門としてまとめておきます。 Amazon Athenaとは BigQueryみたく、SQLで大きなデータを集計などできるAWSのサービスです。 分析の他にも他のAWSサービスのログ確認などでも使われたりしますが、今回は分析寄りの記事として進めます。 BigQueryと比べて大きく異なる点として、「データをS3に配置する」という点があります(それによるメリットなどは後述)。 コストはどうなの? 基本的にスキャンサイズのみに課金されます。 Amazon Athena では、実行したクエリに対してのみ料金が発生します。クエリごとにスキャンされたデータの分量に基づいて料金が請求され、1 テラバイトごとに 5 USD が請求されます。 Amazon Athena
ついにJupyterLabの入力補完??Tab押さずに補完してくれるjupyterlab-lspを試してみたPythonPython3JupyterJupyterLabjupyterlab-lsp Jupyter notebookからさらに色々便利になっているJupyterLab。 便利な一方で、notebook側の入力補完の拡張機能のhinterlandなどが対応していません。 Tabを押せば補完は表示してくれる(且つ、補完がnotebookよりも賢い)ものの、できればVS Codeなどと同じ感覚でTabを押さなくても補完して欲しいところです。 Labのβが出てから長いこと「誰か作ってくれないかなー」と他力本願なことを考えていましたが、ついにそれらしきライブラリが公開されたようです。 Language Server Protocol integration for JupyterLab
TL;DR セルラーオートマトンの計算モデルの説明について触れます。 1次元のセルラーオートマトンの実装をPythonで進めて動かしてみます。 過程で必要になる知識なども、忘れているものなどがあるので調べつつまとめます。 主な参考文献 作って動かすALife ―実装を通した人工生命モデル理論入門 また、上記書籍のgithubのリポジトリのコードもMITライセンスなので参照・利用させていただきますmm ※本記事では割愛した説明なども山ほどあるので、ALife関係の詳細は書籍をお買い求めください。 セルラー・オートマトンとは 格子状のセルと単純な規則による、離散的計算モデルである。計算可能性理論、数学、物理学、複雑適応系、数理生物学、微小構造モデリングなどの研究で利用される。非常に単純化されたモデルであるが、生命現象、結晶の成長、乱流といった複雑な自然現象を模した、驚くほどに豊かな結果を与えて
※数値はWhat is the fastest way to upload a big csv file in notebook to work with python pandas?より引用 pickleがPythonオブジェクトをダイレクトに扱う(そのための制約やセキュリティ関係での配慮の必要性などが少しある)のを考えれば、CSVなどと比べればHDF5でも必要十分と言えそうです。 他の言語でも使える pickleだと基本的に他の言語で扱えません。私の今いる会社だとPython以外にもRだったりを使っている方がいらっしゃいますし、他の会社ではJavaなりGoなりで扱う必要が出てくるケースもあるかもしれません。 また、pickleではPythonバージョンによるプロトコル番号的なところも絡んできます。 (とはいえ、もうPython2系を新しく使い始めるケースはほぼ無いと思いますし、万一必要
UE4でちょっとした機械学習関係の実験環境を作る際に、ブループリント以外にもPythonを使いたくなり色々調べていたのでそのメモです。 使うもの UE4の4.21.2のバージョンを使っています。 UnrealEnginePythonというプラグインを使っていきます。 Pythonは3.6を使っていきます。 OSはWindows10環境です。(UbuntuでもUE4動くらしいけど試していない・・) リポジトリに書かれている特徴の抜粋 他のUE4のプラグインを使うのにも使えるらしい タスクの自動化やテストスクリプトなどにも便利らしい 最新の対応しているUE4バージョンは4.21(2019-04-24時点) Anacondaなども加味されているらしい Anaconda関係が使えるということはNumPyが使えたりとか、もしくは機械学習関係のライブラリ使って制御したりとかさくっと色々ごにょごにょとで
色々Pythonを速くするための世の中に方法はありますが、本記事ではCythonやPyPyなどの高速化のTIPSに触れていきます。 この記事で触れること プロファイラーなどの計測関係 ビルドインモジュールなどの機能 Pythonのキャッシュ関係 Cython Numba PyPy(紹介だけ) その他一部のサードパーティーのライブラリ関係 この記事で触れないけどそのうち書くかもしれない内容 並列処理(multiprocessing)、並行処理(threading)、非同期処理(asyncio)、それらの組み合わせ(concurrent.futures)など Dask関係 PyPyの踏み込んだ検証内容など 話題のVaex 記事で使う環境 Windows10(ローカルのJupyter)とUbuntu(クラウド上のカーネル)で進めていきます。 言語はPython3.7.1(win)とPython3
「ビルトインモジュールが色々あってぜんぜん分からない。俺達は雰囲気で並列処理を使っている」という状態だったので、良くないと思ってPythonの並列処理と並行処理をしっかり調べてみました。 少し長めです。細かいところまで把握するためのもので、仕事などの都合でさくっと調べて使いたい方は別の記事をご確認ください。 使った環境 Python 3.6.1 :: Anaconda 4.4.0 (64-bit) Ubuntu Jupyter notebook(一部マジックコマンドなども利用しています) ※Windowsの場合、マルチプロセスなどで直接Jupyter上で動いてくれない(.pyファイルを経由すると動く)などのケースがあります。 参考 : Jupyter notebook never finishes processing using multiprocessing (Python 3) 並行
次のページ
このページを最初にブックマークしてみませんか?
『@simonritchieのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く