よしたく blog

ほぼ週刊で記事を書いています

2022-01-01から1年間の記事一覧

GROUP BYで範囲を集計する

SQL

SQL の GROUP BY を使うとカラムのデータごとに集計できる。 例えば次のようなデータがあり、GROUP BY を使って SQL を実行する。 実行環境はsqlfiddleで、MySQL5.6を使った。 sqlfiddle.com データはテストデータ生成サイトで作った。 https://tm-webtools.…

Pythonのtranslateを使った文字の置換

Python のtranslateメソッドを使うとmaketransメソッドから生成される変換表を元に文字を置換できる。 https://docs.python.org/ja/3/library/stdtypes.html?highlight=str%20replace#str.translate https://docs.python.org/ja/3/library/stdtypes.html?hig…

SQLをlintする SQLFluff に入門した

プロジェクトの中で SQL を使い ETL 処理を書いていたが、個人によって書き方にばらつきがあり、他人の SQL を確認したりメンテナンスするタイミングがとてもつらかった。 SQL もフォーマッタや linter を使って、少しでも作業しやすくしたいと思って探して…

Pandasでインデックス指向のJSONを読み込む

Pandas で JSON の key となる部分がインデックス指向*1となっているJSONを読み込ませたい場合、read_JSON()関数にorient='index'オプションを設定すればうまくいく。 pandas.pydata.org サンプルデータ { "0": { "name": "Nieves Finch", "gender": "male",…

chunksizeを指定して、pandasで巨大ファイルを扱う

pandas でサイズの大きなファイルを扱うにはどうすればいいか調べたところ、ファイルを読み込む際に chunksize 引数を指定して、分割して読み込む方法があることを知った。 Google clab にあるサンプルファイルを使って動きを確認する。 まずは何も指定せず…

pipenvでpipenv install throws --system is intended to be used for pre-existing Pipfile installationが発生したときの解決方法

pipenvを触り始めて試行錯誤していたら環境を壊してしまったようで、同名のフォルダを再作成してもうまくいかず、pipenv install throws --system is intended to be used for pre-existing Pipfile installationが発生した。 まずはpipenv --venvで仮想環境…

Pythonの%timeで出力される値の見方

Pythonの%timeで出力される値の見方を調べたので、メモしておく。 yoshitaku-jp.hatenablog.com CPU times: user 14 µs, sys: 0 ns, total: 14 µs Wall time: 19.1 µs と表示されているとき、 Wall time: 19.1 µsは全体の実行時間を表している。 CPU times: …

Jupyter Notebookでコードの速度を計測するtimeとtimeit

Jupyte Notebook でコードの速度を計測する方法にマジックコマンドとして用意されている、timeと timeitを使う方法がある。 この 2 つの存在は知っていたが、 time と timeit で何が違うのか %の数が 1 つのときと 2 つのときで何が違うのか がわからなかっ…

Pandasで欠損値を埋めるための方法

Pandasで欠損値を埋めるための方法をいくつか確認したのでまとめておく。fillna関数を使うと引数に渡した値で、NaNを埋められる。 まずは適当にNaNを含んだデータを生成する。 import numpy as np import pandas as pd df = pd.DataFrame(data=[1,2,4,np.nan…

PythonのCounterクラスを使って要素の出現回数を集計する

Pythonでは、よく使われる組み込みコンテナの dict、list、set、tuple に代わる特殊なコンテナがあり、collectionsモジュールにまとまっている。今回はその中にある辞書型のサブクラスであるCounterを使ってリストなどの要素の出現回数を数え、簡単に集計を…

7月よりブログ更新を再開します

7月より週1でのブログ更新を再開します。と言う宣言です。 集中して取り組みたいことがあり、こっそり5,6月と休んでおりました。 その中で改めてブログに助けられたことがあり、休みつつも「落ち着いたら再開しよう!」という気持ちが高まっておりました。 …

MinIOをboto3を使ってPythonから操作する

Python で S3 を操作するときに使う、AWS SDK for Python(boto3) を使って MinIO も操作できる。 以前作った環境を利用し、Python から操作できるか確認する。 yoshitaku-jp.hatenablog.com 準備 インストール pip で boto3 をインストールしておく。 pip …

【Rails】HerokuでPumaを使用する

Heroku の dyno リソースを理解できておらず、rails serverでアプリケーションを起動していた。 Heroku は Web サーバとして Puma を推奨しているので、Puma で明示的に起動できるように設定を変更してみる。 puma.io Procfile 設定をせずシンプルに起動させ…

Rails7でTailwind CSSを試す

Rails7 になって TailwindCSS が使えるようになったので、導入方法をメモしておく。 rails new rails new をするタイミングで tailwind を導入するには--css tailwindオプションを指定する。 rails new myapp --css tailwind cd myapp このあたりは定型文に…

Docker Compose環境のRailsをHerokuへデプロイする

Docker Compose 環境で作成した Rails アプリケーションを Heroku へアップロードするには Git を使用したデプロイとは別のコマンド実行が必要になる。 例えば Git を使用するときはgit push heroku mainなどでデプロイができたが、Docker Compose 環境は He…

Action CableをHerokuで動かす時のサブスクリプションアダプタ設定

Heroku で Action Cable を使うにはデフォルトの設定から変更する必要がある。 具体的に、初期設定ではconfig/cable.ymlファイルは下記のようになっており、redis を使う設定になっている。Heroku 環境を用意したときにデフォルトで Redis は使用できないの…

macOS Montereyから登場したショートカットを使う

iOSでは以前から使うことができたショートカットアプリが、Macでも使うことができるようになった。 現在自分が設定しているものをアイデアとして載せておく。 www.apple.com コミュニケーション系アプリを全部終わらせるショートカット 起動したコミュニケー…

Terminal is dumb but no VISUAL nor EDITOR defined.エラーを解決する

macOS Monterey にして VS Code から git commitとしたらTerminal is dumb but no VISUAL nor EDITOR defined.が発生した。 デフォルト設定が外れてしまった理由がよくわからないけど、再度設定しておく。 設定する際に検索したことと、検索しても欲しい情報…

S3互換のMinIOを触ってみた

MinIO とは MinIO は、高性能で S3 互換のオブジェクトストレージを提供します。 Kubernetes にネイティブな MinIO は、以下のような環境で利用できる唯一のオブジェクトストレージスイートです。 すべてのパブリッククラウド、すべての Kubernetes ディスト…

Streamlitに用意されている「line_chart」「area_chart」「bar_chart」を触ってみた

Streamlit について引き続き確認していく。 yoshitaku-jp.hatenablog.com 今回は Streamlit で標準に用意されている simple chart を試す。 紹介されているのは以下の 3 種類になる。 line_chart area_chart bar_chart line_chart 線グラフはst.line_chart関…

SQLAlchemyを使ってMysql 8.0にアクセスしたらAuthentication plugin 'caching_sha2_password' is not supported エラーが発生した

SQLAlchemyを使ったPython環境でDcoker上に立てたMysql 8.0にアクセスしたらAuthentication plugin 'caching_sha2_password' is not supported エラーが発生した。 これはMySQLのバージョン8.0以降、デフォルトの認証方式がcaching_sha2_passwordに変更され…

Python製のWebフレームワークStreamlitをさわってみた

datatech-jp Casual Talks #1に参加したときに知った、Python製のWebフレームワークStreamlitを触ってみた。 yoshitaku-jp.hatenablog.com streamlit.io github.com Streamlitのサイトを覗くとまずThe fastest way to build and share data appsと書いてあり…

datatech-jp Casual Talks #1 に参加した!

datatech-jpのCasual Talks #1 が開催されるとのことで覗いてみた! datatech-jp.connpass.com 発表内容 syou6162 データ管理に役立つメタデータ reizist 小さく始めるデータ基盤 ohsawa0515 BigQueryのネイティブJSON型がサポートされたので触ってみた udzu…

Azure Data FactoryのFailアクティビティについて調べた

2021年後半にAzure Data FactoryのFailアクティビティが追加されました。10月頃にプレビューで登場していたのは確認していたのですが、いつのまにかGAされていました。Failアクティビティは名前の通りパイプライン上で意図的にエラーを引き起こしたいときに…

Cloud Storageでオブジェクトのライフサイクルを設定する

GCP

多くの企業がデータ分析基盤を選択するときにGoogle Cloud Platformを選んでいる気がするので、気になって少し触ってみた。 わからないことが多すぎてオープンワールドのゲームに飛び込んだような感覚なので、まずは手軽にCloud Storageでライフサイクルの設…

PyArrowでCSVをParquetに変換する

今回は PyArrow を使って CSV を Parquet に変換してみた。 データレイクは生データを溜めることが主目的だが、レイクハウス型のアーキテクチャの流れもあり、データを利用したいサービス側が利用しやすいような整形化されたデータを用意する用途も増えてく…

Pythonでの再帰関数の上限を変更する

Python ではデフォルトで再帰関数の上限が 1000 に設定されている。知らなかった... sys.getrecursionlimit()で現在の上限を確認できる。 今回はサッと確認するのに便利なGoogle Colaboratoryを使う。 import sys print(sys.getrecursionlimit()) たしかに 1…

Azure Data Factoryを使って、新規・変更済みファイルのみをデータレイク間でコピーする

Azure Data Factoryを使って、新規・変更済みファイルのみをデータレイク間でコピーする。新規・変更済みファイルのみを移動対象とすることで、無駄なデータ移動が発生せず、料金も抑えることができるようになる。 準備 パイプライン パラメーターを2つ用意…

2021年のふりかえりと2022年の抱負

あけましておめでとうございます。今年もよろしくお願いいたします。 2021 年をふりかえり、2022 年の抱負にしたいと思います。 お仕事 2021 年のお仕事は 6 月までと 6 月以降で大きく変わりました。 2 年ほど前に部署を異動してから 2021 年 6 月まではハ…