タグ

pythonに関するHHRのブックマーク (74)

  • Python で大量のファイルを並列で速く読み込む - Qiita

    from glob import glob files = glob('data/*.csv') len(files) # 10000 この 1万件の CSV ファイルを Pandas DataFrame として読み込みたい。 ちなみに検証用のデータは以下のようにして生成した。 (3列 x 10,000行 の CSV ファイル 10,000 個) import numpy as np import pandas as pd row_n = 10000 col_n = 3 columns = [f'col{i}' for i in range(col_n)] for i in range(10000): df = pd.DataFrame(np.random.randn(row_n, col_n), columns=columns) df.to_csv(f'data/{i:04}.csv',

    Python で大量のファイルを並列で速く読み込む - Qiita
    HHR
    HHR 2021/11/24
    GIL。コメントが本体感ある。pandasはcの実行なのでGILを開放する
  • Pythonで並列処理をするなら知っておくべきGILをできる限り詳しく調べてみた - Qiita

    最近Pythonでオーケストレーション層(BFF)のアプリケーションを書く機会がありました。 Python3.4からはasyncioが導入され、I/Oバウンドな処理はシングルスレッドでも効率的に捌けるようになったものの、依然としてCPUバウンドな処理はGILが存在することで、シングルプロセス下では並列処理が制限されます。 このことから言語特性として、CPUバウンドよりもI/Oバウンドな処理を複数捌くことに適していると見ることができます。言語選択の意思決定をする際に重要なファクターとなりますが、そのためにはGILの仕組みを改めて知る必要があると思い、調べてみました。 GIL(グローバルインタプリタロック)とは そもそもGILとは何のことでしょうか。 正式にはGlobal Interpreter Lock(グローバルインタプリタロック)といい、PythonRuby等の言語に見られる排他ロック

    Pythonで並列処理をするなら知っておくべきGILをできる限り詳しく調べてみた - Qiita
    HHR
    HHR 2021/11/09
    GILの歴史。マルチスレッド、マルチプロセス、asyncio
  • Python multiprocessing vs threading vs asyncio - JX通信社エンジニアブログ

    エンジニアの鈴木(泰)です。 今回は、multiprocessingとthreadingとasyncioの違いとはなんだろう?という問に挑戦してみたいと思います。 この問の答えをグーグル先生に聞いてみると、非常にたくさんの情報がヒットします。しかしながら、どの情報も断片的なものばかりで(記事もそうなのかもしれません)、色々とを読んだりネットを漁ったりして、情報を補完しなければなりませんでした。 記事は、僕が調べた限りの情報を集約し、この問に対する結論を1つの記事にまとめたものとなっています。 前提 マルチプロセスとは マルチスレッドとは Pythonにおけるマルチスレッド 題 マルチプロセス(multiprocessingライブラリ)を利用したほうが良い場合 cpu_sec.py cpu_multiprocessing.py cpu_threading.py cpu_asyncio

    Python multiprocessing vs threading vs asyncio - JX通信社エンジニアブログ
    HHR
    HHR 2021/11/09
    multiprocessing threading asyncio比較。条件毎の比較が参考になる。
  • Python: REPL に複数行をペーストしたときの挙動が変わって困った件について - CUBE SUGAR CONTAINER

    表題のとおりなんだけど、最近 Python の REPL に複数行のコードをペーストしたときの挙動が以前と変わってしまい困っていた。 その Python というのは、具体的には Homebrew でインストールしたものや、Pyenv を使ってソースコードからビルドしたもの。 使っている環境は次のとおり。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.15.7 BuildVersion: 19H114 $ brew info readline | head -n 1 readline: stable 8.1 (bottled) [keg-only] $ pyenv --version pyenv 1.2.22 もくじ もくじ TL;DR 問題についてもうちょっと詳しく TL;DR 結論から先に述べると、これは Python のビルドに使

    Python: REPL に複数行をペーストしたときの挙動が変わって困った件について - CUBE SUGAR CONTAINER
    HHR
    HHR 2021/09/02
    set enable-bracketed-paste off
  • Pythonのアンダースコア( _ )を使いこなそう!

    Pythonは一番書きやすいプログラミング言語と知られ、多くの人の第二外国語(英語に次ぎ)です。でもGithubGitlabで他人のコードを参照した時や自分でclassを書いてる時、こういう疑問はあったでしょうか: 「def __init__(self): の__init__のアンダースコアは何故二つなのか?」 「def _func(x): と def func(x): とdef func_(x): に違いはあるのか?」 「y, _ = func(x)のアンダースコアは何か?」 そんな色んな所で使われてるアンダースコアの使い方を、今回整理して説明してみました! アンダースコアの使い場所Return値を無視する。関数の名付けで使い方を区別する。数字を読みやすくする。インタプリタで最後に表示された値を代表する。以上4種類の状況でアンダースコアを使いこなす事により、読みやすいpythonicな

    Pythonのアンダースコア( _ )を使いこなそう!
    HHR
    HHR 2021/08/11
    “関数からのreturn値が複数あって使わない部分があったらアンダースコアを使ってreturn値のメモリの占用をしないまま廃棄ができます” まじか。知らなかった。
  • Apache Beam (Dataflow) 実践入門【Python】 - Qiita

    はじめに この記事は、Apache Beam Documentation の内容をベースとしています。 Apache Beam Python SDK でバッチ処理が可能なプログラムを実装し、Cloud Dataflow で実行する手順や方法をまとめています。また、Apache Beam の基概念、テストや設計などについても少し触れています。 Apache Beam SDK 入門 Apache Beam SDK は、Java, Python, Go の中から選択することができ、以下のような分散処理の仕組みを単純化する機能を提供しています。 Pipeline:処理タスク全体(パイプライン)をカプセル化します。処理タスクには、入力データの読み取り、変換処理、および出力データの書き込み等が含まれます。 PCollection:分散処理対象のデータセットを表すオブジェクトです。通常は、外部のデータ

    Apache Beam (Dataflow) 実践入門【Python】 - Qiita
  • Pythonは_(アンダースコア)の使い方を理解するだけでプロフェッショナルになれる - Qiita

    自己紹介 普段私は、 一番得意な機械学習(深層学習)をしたり、 Python/Django でWebアプリを開発したり、 TypeScript/Vue or Reactフロントエンドの開発をしたり、 PHP/Laravel でWebアプリを開発したり、 さまざまなことを行っています。 趣味で休みの日にGo言語で色々作成しているのですが、型のある世界は素敵だなと昨今感じています。 今最もやりたいことは、Goで大規模なWebアプリケーションを作成したい。 企業案件やご連絡等ございましたらお気軽に下記よりご連絡いただければと思います。 nagamatsu-k@dym.jp 第3次AIブームの到来 米Google DeepMindが開発した人工知能AI)の囲碁プログラム「AlphaGo」が世界トップレベルの実力を持つ韓国のプロ棋士、李世ドル(イ・セドル)九段に4勝1敗と大きく勝ち越したことが

    Pythonは_(アンダースコア)の使い方を理解するだけでプロフェッショナルになれる - Qiita
    HHR
    HHR 2021/07/21
  • python3のbytes型とstr型の比較と変換方法

    3では文字列はunicode文字列として扱われるようになったので、すべてpython2でいうところのu''になりました。u''表記してもエラーにはなりませんが(python3.3以上)同じ意味です。 バイナリデータを扱うときには、bytes型に変換します。bytes型は文字列っぽく扱えますが、strとbytesの連結などはできないので用途に合わせて適切な型で持つようにします。 例えば特定の文字コードの文字列を持ちたい場合はbytes型になります。str文字列として加工などをして最終的に出力する際に、任意の文字コードのバイト列としてエンコードして出力するという使い方になります。 strからbytes encodeでbytes型(utf-8)に変換します。 >>> 'あいう'.encode('utf-8') b'\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86' #ut

    python3のbytes型とstr型の比較と変換方法
  • Pythonで省メモリに大量の文字列を扱う工夫 - MNTSQ Techブログ

    たくさんの文字列(や離散的な符号列)をメモリに載せないといけないんだけど、いろんな制約があって通常のList[str]では載らない…ということありませんか?(まぁあんまりなさそうですね) たまたまそういうことがあったので、その際に検討した内容をまとめておきます TL;DR メモリをもっと増やしましょう 富豪的に解決できるならいつでもそれが最高です しかし、世の中それでなんとかならんこともたくさんあります 用途があうのであれば専用のデータ構造を採用する 例えばもし共通のprefixやsuffixが存在し、順序に興味がなければtrie treeなどが使えます 例えば、弊社であれば、法人名をメモリに持ちたいなんてときもあります。そういうときに法人名の辞書をtrieで持ったりすることがあります 「株式会社」「一般財団法人」や「銀行」といった共通語がたくさんでてくるのでtrie treeでごりごり削

    Pythonで省メモリに大量の文字列を扱う工夫 - MNTSQ Techブログ
  • 『Pythonデータサイエンスハンドブック』は良書(NumPy, pandasほか) | note.nkmk.me

    このは良い。原著のKindle版を持っているのに買ってしまった。 注意点と良い点を紹介する。 目次・内容 注意点 / こんな人にはオススメできない 英語版はオンラインで無料公開されている Pythonの基礎には触れられていない 良い点 / こんな人にオススメしたい NumPyの説明が(比較的)詳しい 新しいバージョンのpandasに対応 Matplotlibの説明が詳しく、サンプルが豊富 機械学習のアルゴリズムへの理解が深まる 類書との比較 『科学技術計算のためのPython入門』 『Pythonによるデータ分析入門』 まとめ 目次・内容 正式な書名は『Pythonデータサイエンスハンドブック ――Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析機械学習』。 サブタイトルにある、Jupyter(IPython)、NumPy、pa

    『Pythonデータサイエンスハンドブック』は良書(NumPy, pandasほか) | note.nkmk.me
  • 意外と奥が深い、HDFの世界(Python・h5py入門) - Qiita

    ※数値は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系を新しく使い始めるケースはほぼ無いと思いますし、万一必要

    意外と奥が深い、HDFの世界(Python・h5py入門) - Qiita
  • Python標準実装より速い!?Oracleが作ったGraalPythonをJython・CPythonとベンチマークしてみた!! - Qiita

    Python標準実装より速い!?Oracleが作ったGraalPythonをJython・CPythonとベンチマークしてみた!!Pythonoracleベンチマークgraalvmgraalpython GraalVM・GraalPythonとは GraalVMは2018年4月27日にOracleから公開された仮想マシンです. GraalVM is a universal virtual machine for running applications written in JavaScript, Python, Ruby, R, JVM-based languages like Java, Scala, Clojure, Kotlin, and LLVM-based languages such as C and C++. GraalVMJavaScript,Python,Ruby,R

    Python標準実装より速い!?Oracleが作ったGraalPythonをJython・CPythonとベンチマークしてみた!! - Qiita
  • Anaconda パッケージリポジトリが「大規模な」商用利用では有償になっていた - Qiita

    概要 Pythonを利用した機械学習の環境構築に有用なAnacondaというソフトがあります。このソフトはリポジトリに含まれるバイナリが高速(環境によっては2倍以上)、インタプリタの切り替え、パッケージ管理が楽などの利点を持っています。 このソフトについて2020年4月30日に発表があり、リポジトリ商用利用時の費用の条件が変更され、環境によっては有償となっていましたので内容をまとめます。 正確な情報は公式サイト(利用規約、2020年4月30日の発表)参照 Miniconda + conda forge の運用であれば公式リポジトリに関する商用利用規約変更の影響は受けないようです(公式記事ではなくRedditでのAnaconda CEO によるコメント)。 conda-forge が既定の miniforge というパッケージが作成中のようです(安定性等は不明)。 記載間違いなどご指摘いただ

    Anaconda パッケージリポジトリが「大規模な」商用利用では有償になっていた - Qiita
    HHR
    HHR 2021/02/09
    2021/02/09時点ではMiniconda + conda forgeで大丈夫だが、油断ならない。
  • Python: オブジェクトを漬物 (Pickle) にする - CUBE SUGAR CONTAINER

    Python の標準ライブラリにある pickle モジュールは Python のオブジェクトを直列化・非直列化するための機能を提供している。 直列化 (Serialize) というのはプログラミング言語においてオブジェクトをバイト列などの表現に変換することを指す。 非直列化 (Deserialize) はその逆で、バイト列を元にオブジェクトを復元することだ。 バイト列などに変換されたデータはファイルなどの形で永続化できる。 最近の典型的な用途でいえば、機械学習で学習済みのモデルを保存して取り回すためなんかに使われる。 ところで、モジュール名でもある pickle という単語は、複数形にすると pickles つまりハンバーガーなどにはさまっているピクルスになる。 きっとメモリ上にある揮発性で賞味期限の短いオブジェクトを、バイト列などの形でファイルなどに長期保存できる状態にすることをピクル

    Python: オブジェクトを漬物 (Pickle) にする - CUBE SUGAR CONTAINER
    HHR
    HHR 2021/01/18
    プロトコルには複数のバージョンが存在。Python 2.7で使用できるプロトコルバージョンは2まで。Python3.5と2.7の両方で扱うことのできるpickleを作るにはプロトコルのバージョンを 2 以下に指定しなければいけない
  • 【Python】site-packagesのパスを確認する方法【pip install・pyenv】 - Qiita

    pythonで何かしらのライブラリをpip installしたものはsite-packagesに入るわけですが、 そのsite-packagesへのパスが知りたいそんなときのTIPS 何も考えず、 これで、表示させることが可能です。 以上です pyenvを使ってたりするとちょっと混乱するかもしれないので、 覚えておくと便利かもしれないです。 pip installしたライブラリだとかを、いじりたいときや、仕組みがどうなっているのか気になったときとかにどうぞ。 いじったりする際は、直接編集せずに、自身のpythonプロジェクトのディレクトリにごそっとコピーしてきてその上でいじると吉です。(パスさえ通しておけばそっちが優先して読み込まれるはずです) Register as a new user and use Qiita more conveniently You get articles t

    【Python】site-packagesのパスを確認する方法【pip install・pyenv】 - Qiita
    HHR
    HHR 2021/01/14
    python -c "import site; print (site.getsitepackages())"
  • Python でパッケージを開発して配布する標準的な方法 - Qiita

    (この記事の情報は古いです。最近は pip が myproject.toml を理解できるようになりました。Python でパッケージを開発して配布する標準的な方法 2023 年編 に更新版を書きましたので参考にしてください。) 今更ながら Python でパッケージを開発したり配布する標準の方法を知らなかったので調べました。Poetry の方が簡単ですが、人の作ったプロジェクト仕事するのに覚えておくと便利です。 仮想環境の作成 Python 3.7.7 等の最新の Python が入っていて python コマンドで実行出来るようになっている状態から始めます。これからパッケージを開発するために、他の Python プログラムと利用ライブラリが混ざらないように最初に仮想環境を作ります。仮想環境を作る標準の方法は venv モジュール https://docs.python.org/ja/

    Python でパッケージを開発して配布する標準的な方法 - Qiita
    HHR
    HHR 2021/01/13
    venvで仮想環境の作成から。この記事ではsetup.cfgでなくsetup.pyに直書きしている点に注意。
  • Python Wheels

    Python Wheels What are wheels? Wheels are the new standard of Python distribution and are intended to replace eggs. Support is offered in pip >= 1.4 and setuptools >= 0.8. Advantages of wheels Faster installation for pure Python and native C extension packages. Avoids arbitrary code execution for installation. (Avoids setup.py) Installation of a C extension does not require a compiler on Linux, Wi

    HHR
    HHR 2021/01/13
    wheelのサポート状況。ブクマ時点でansible, thriftは駄目
  • 深入りしないCython入門 - Qiita

    Cythonとは? Pythonは処理速度は決して早くない、むしろ遅い部類である。 そこで、C/C++に変換することにより高速化しようというのがCythonである。 低級言語のC/C++(昔は高級言語だったが、現在は低級言語といって良いだろう)に変換してネイティブコンパイルするのだから、速いに決まっている。 この記事の目的 「Cythonは難しい」、「CythonはC/C++の知識が必要」という印象があるだろう。答えは「Yes」である。 しかし、その答えはCythonをフルに使いこなす事が前提である。 実はCythonは、C/C++をそんなに知らなくても、ちょっとした高速化には充分な恩恵を得られるように設計されているのだ。 しかし、無闇にCythonを使っても「あまり高速化されない」、「移行がすごく大変」と散々な結果になるだろう。そこら辺のポイントを踏まえ、C/C++をあまり知らない初心者

    深入りしないCython入門 - Qiita
    HHR
    HHR 2020/12/25
  • Pythonの並列処理・並行処理をしっかり調べてみた - Qiita

    「ビルトインモジュールが色々あってぜんぜん分からない。俺達は雰囲気で並列処理を使っている」という状態だったので、良くないと思って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) 並行

    Pythonの並列処理・並行処理をしっかり調べてみた - Qiita
    HHR
    HHR 2020/09/21
    concurrent.futureかな。共有メモリは諦め推奨かな。もしも必要になったらおとなしくJavaとかの他言語に移したほうが良さそう。
  • [ガウス過程と機械学習]ガウス過程回帰 - Qiita

    MLPシリーズで最近話題の『ガウス過程と機械学習』を読みました。ガウス過程について勉強するのは初めてだったのですが、とても丁寧で分かりやく、最後まで読み通すことができました。 3.4節の図3.16を再現すべく、pythonで1次元ガウス過程回帰を実装しました。全コードはgitにあげました。 記号の使い方 小文字の太字は縦ベクトル、大文字の太字は行列は表します。行列$\boldsymbol{A}$の$i,j$成分を$\boldsymbol{A}_{i,j}$と書きます。 多次元ガウス分布 $D$次元ガウス分布を、平均パラメータベクトル$\boldsymbol{\mu}\in \mathbb{R}^D$, 共分散行列${\bf \Sigma}\in \mathbb{R}^{D \times D}$を用いて $$ {\mathcal N}({\bf x}|\boldsymbol{\mu},{\b

    [ガウス過程と機械学習]ガウス過程回帰 - Qiita
    HHR
    HHR 2020/01/14