概要 R で tidyverse (dplyr+tidyr) に使い慣れているが, Python に乗り換えると pandas がどうも使いにくい, と感じている人の視点で, Rの dplyr などとの比較を通して, pandas の効率的な使い方について書いています. そのため, 「R ユーザーへの」と書きましたが, R経験のない pandas ユーザーであってもなんらかの役に立つと思います. また, 自社インターン学生に対する教材も兼ねています. どちらかというと, 初歩を覚えたての初心者向けの記事となっています. データ分析は一発で終わることはまずなく, 集計・前処理を探索的に行う必要があります. よって, プログラムを頻繁に書き直す必要があり, 普段以上に保守性のある書き方, 例えば参照透過性を考慮した書き方をしたほうが便利です. R の tidyverse の強みとして, 再帰代
Pandas と dplyr のより網羅的な対比は、既に記事が出ています。 私が参考にしたものをこの記事の末尾で紹介していますので、詳しくはそちらをご覧ください 。 前置き|テーブルのキーの扱い方の違い Pandas を使い始める前に理解すべきこととして、dplyr と Pandas ではテーブルのキーの扱い方に大きな違いがあります。この違いを認識していなかった私はかなり苦戦しました…… 以下の2点を理解して (覚悟して?) おくと、学習コストが多少減るのではないでしょうか。 Pandas ではテーブルのキーが Index という別オブジェクトで管理されていること Pandas ではキーや列名に階層構造を持たせられること dplyr におけるキーの扱い R のデータフレームにはテーブルのキーを表す方法として row names という仕組みが用意されています。しかし、dplyr (が利用し
Python でデータ分析をするときに、ほぼ必ずといって良いほど使われるパッケージとして pandas がある。 そのままでも便利な pandas だけど、代表的なオブジェクトの DataFrame, Series, Index には実は独自の拡張を加えることもできる。 これがなかなか面白いので、今回はその機能について紹介してみる。 ただし、あらかじめ断っておくと注意点もある。 独自の拡張を加えると、本来は存在しないメソッドやプロパティがオブジェクトに生えることになる。 そのため、便利だからといってこの機能を使いすぎると、コードの可読性が低下する恐れもある。 使うなら、後から別の人がコードを読むときにも困らないようにしたい。 具体的には、使用するにしても最小限に留めたり、あるいはパッケージ化やドキュメント化をしておくことが挙げられる。 今回使った環境は次の通り。 $ sw_vers Pro
Pandas の 1.0.0から DataFrameを Markdown形式に出力 することができます。 データ処理ライブリのpandas 1.0.0がリリースされました! pandas.DataFrame.to_markdown 今回はこの Markdown出力機能を利用して AWSの SecurityGroup情報を Markdownテーブルに表示するスクリプトを書いてみました。 なお、 SecurityGroup情報の Markdown出力 自体は他のSDKで実装・ブログ化がされているので N番煎じです。 AWS SDKを使ってSecurity GroupをMarkdownのテーブルで出力するスクリプトを書いてみた 目次 環境 書いてみた スクリプト おわりに 参考 環境 Python: 3.7.3 Jupyter Notebook: 6.0.3 Boto3: 1.11.9 Pand
背景 2020/01/29にpandas 1.0.0がリリースされました!パチパチ 2020/02/14現在は、1.0.1です。 個人的には、下記の変更点が重要ポイントかなと思ってます。 pandas独自のNA String型の対応強化(Experimental) んで。 僕は分析時には、下記のライブラリとpandasを一緒に使うことが多いです。 dask intake 特にdaskのpandas1.0対応状況や、その他の細かな振る舞いについて整理しようかなと思っています。 daskのバージョンは2020/02/14現在2.10.1です。 intakeに関しては、daskが対応してくれれば問題ないっしょ、って思っています。 (daskの処理待ち時間が暇というのもある。) 気になっていること daskはpandas.NAをちゃんと使えんの?(ver 1.0関連) daskはdtype: st
Python (pandas)を使って指定時間間隔のログを集計する方法 やりたかったこと タイムスタンプ(datetime)列があるcsvデータで、ある時間範囲にある行数をカウントしたい。(5分おき、15分おき、30分おき、1時間おき、など) pandasのresampleを使うと簡単にできます♪ import pandas as pd import numpy as np csv_files = ['1_file.csv', '2_file.csv', '3_file.csv', '4_file.csv'] FILE_HEAD='file_' for csv_file in csv_files: df = pd.read_csv(csv_file, parse_dates=True, index_col='datetime') df.resample('5T').count().rena
書くこと gokartを使ってpandas関連の確認をする方法 1つ目はinputのpd.Dataframeがemptyだったときに正常終了をするかの確認 2つ目はdumpするときに各columnが想定通りの型になっているかの確認 gokartとは? エムスリーやfringe81などが開発しているOSS Spotifyが開発しているluigiをラップして使いやすくしている。特にコードを書く量が減る。 対象バージョン 0.3.11 inputのpd.Dataframeがemptyだったときに正常終了をするかの確認 下記のコードはpd.Dataframeがemptyのときにエラーが発生する。 単体テストを書くことは前提だが、拾いきれないことが多々あった。 class DataTask(gokart.TaskOnKart): task_namespace = 'sample' def run(s
この記事は、Brainpad Advent Calender 15日目の記事です。 本記事では、メモリに乗らないようなデータもPandasやNumPyライクに操作を行い、スケールアップ・スケールアウトにも対応できるライブラリ、Daskについて、簡単に紹介をします。 はじめに Pythonでデータ分析や機械学習をする際、PandasやNumPyを用いる場面が非常に多くなってきました。 しかし、PandasやNumPyではメモリに乗らないデータの扱いが難しかったり、基本的にシングルコアでの処理を行うため、速度が遅い、といった問題があります。例えば、サーバー上で実行する際、CPUの論理コアが32個あっても、1個のCPUしか使用していない、といった感じです。 近年、データ分析関連のライブラリは非常に多様化しており、派閥(?)が沢山あるようです。 個人的には、Pandas作者であるWes McKin
こんにちは、ほけきよです。 pythonでデータを取り扱っているとき「あれ、これどうやるんだっけ??」 ってなること、ありませんか?僕は10分に1回程度なります。 いや、覚えろと自分でも思うんですが、覚えられないんですよね。100回くらい同じコマンドを調べてたりする。 物覚えが良くないので、ココを見れば絶対大丈夫なようにしておこうと思い、まとめてみました。 jupyterで最初に開くときに読み込むモジュールたち datetime 日付⇔文字列の変換 datetimeの足し算引き算 json dict型⇔json jsonファイルの入出力 datetimeをjsonにする時、エラーが出る pandas ~以外を表すやつ andとor inf弾く リストをdfにサクッと変換 datetimeとして読み込み 読み込み時にcodecのエラーが出る DataFrameのfor文 numpy lins
www.e-stat.go.jp exploratory.io import pandas as pd df1 = pd.read_excel( "https://www.e-stat.go.jp/stat-search/file-download?statInfId=000031577984&fileKind=0", header=None, ) df1.to_csv("data.tsv", sep="\t") # 行カウント確認 df1.notnull().sum(axis=0) # 列カウント確認 df1.notnull().sum(axis=1) df1 # テキスト埋め df1.iat[7, 7] = "男女" df1.iat[7, 10] = "年齢" df1.iat[7, 12] = df1.iat[6, 12] df1.iat[7, 13] = df1.iat[6, 13]
github.com jakevdp.github.io import pandas as pd df1 = pd.read_excel("URL", sheet_name=0, header=None) # Excelないとき df1.to_csv("data.tsv", sep="\t") # 行カウント確認 df1.notnull().sum(axis=0) # 列カウント確認 df1.notnull().sum(axis=1) # テキスト埋め df1.iloc[行, 列] = "テキスト" # テキスト絞り込み df2 = df1.loc[df1.notnull().sum(axis=1) > 2, df1.notnull().sum() > 2].copy() # 下方向 df2.fillna(method="ffill", inplace=True) # 右方向 df2.fi
アクセス権をリクエスト まずはMIMICへのアクセス権をもらう必要があります。以下、その手続きを開設していきますが、こちらも合わせて参照してください。 CITIトレーニング MIMICへのアクセス権をリクエストする前に、CITI programの”Data or Specimens Only Research”というコースを、オンラインで修了しておく必要があります。 まず、こちらのサイトに行き、”affiliation”のところで”Massachusetts Institute of Technology Affiliates”を選びます(”independent learner”ではないのでご注意を)。 “Massachusetts Institute of Technology Affiliates course”→”Human Subjects training category”→
今回は featuretools というパッケージを用いた総当り特徴量エンジニアリング (brute force feature engineering) について書いてみる。 総当り特徴量エンジニアリングは、実際に効くか効かないかに関係なく、考えられるさまざまな処理を片っ端から説明変数に施して特徴量を作るというもの。 一般的にイメージする、探索的データ分析などにもとづいて特徴量を手動で作っていくやり方とはだいぶアプローチが異なる。 そして、featuretools は総当り特徴量エンジニアリングをするためのフレームワークとなるパッケージ。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.6 BuildVersion: 18G1012 $ python -V Python 3.7.5 もくじ もくじ 下準備
タイトルの通りです。PandasのDataframeをpyarrowでParquetに変換して、そのままGCSにアップロードしています。 スクリプト こんな形で実行可能です。ファイルを経由しないでBufferから、そのままアップロードしています。 import pandas as pd import pyarrow as pa import pyarrow.parquet as pq import numpy as np import datetime from google.cloud import storage as gcs # ダミーデータでDataframe作成 row_num = 100000 string_values = ['Python', 'Ruby', 'Java', 'JavaScript', 'PHP','Golang'] df = pd.DataFrame({
「JX通信社Advent Calendar 2019」11日目の記事です. 昨日は, @shinyoke さんの「PySparkはじめました - 分散処理デビューする前にやったこと」でした。 こんにちは. 同じくJX通信社でデータ基盤エンジニアをしています, @maplerと申します。 はじめに 今回はちょっと美味しい話をします。 昼時間になったらよくある話 「今日昼飯どこにいきますか?」 「わからない。。」 JX通信社オフィスがある飯田橋周辺美味しい店たくさんありまして、どこでランチを食べればいいのかわからない。 ちょうど2年前、Moves App というライフログアプリを一年半ほど利用してたので、そのデータを利用して自分の飯田橋ランチマップを作ってみようと思います。 やったこと GeoPandas と GeoPy で位置情報の解析 Mapbox + Plotly で位置情報の可視化 S
「JX通信社Advent Calendar 2019」10日目の記事です. 昨日は, @rychhrさんの「Pure WebSocketsをサポートしたAWS AppSyncでWebとiOS間のリアルタイムチャットを作ってみた(1)」でした. 改めまして, こんにちは. JX通信社でシニア・エンジニア&データ基盤エンジニアをしています, @shinyorke(しんよーく)と申します. JX通信社では, データ駆動での意思決定および施策実施をより円滑に進めるため, データ基盤の構築・運用を進めながらトライアル的に様々なFrameworkやツールの検証を行っています.*1 このエントリーでは, 私がシュッとPySparkで分散処理をする...前に, 手元で試したときの感想とその知見 のお話を残していきたいと思います. なお, 分散処理そのものの知見・ノウハウではなく, する前にPySparkに
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く