
お仕事や, (個人的には)趣味のデータ分析・開発などでpandasをよく使う人です.
pandasはPythonでデータサイエンスやデータ分析(解析)をやってると必ずと言っていいほどよく使うライブラリだと思います.
お仕事で同僚やインターンが書いたnotebookをよく読む(レビューする)のですが,
...といったコメントを返す機会が増えてきました.
これらは当人たちにフィードバックしているのですが, このフィードバックの内容が案外重要な気がしてきたのでブログに書いてみることにしました.
読んだ方の理解・生産性の向上および, 「つまらない仕事が334倍楽になる」ような感じにつながると嬉しいです🙏
pandasのread関数にはとりあえずURLを渡しておけ
&使うカラムは事前に指定すると仕事は楽になるでしょう
対象読者は,
何かしらでpandasを使ってデータ分析やデータ加工の業務・趣味をしている方
となります.
pandasもPython周りの事も初心者レベルの内容にしています.
また, 今回のコードはGoogle Colabratoryにサンプルを用意しています.
pandasでDataFrameを作るときの方法として,
df = pd.DataFrame() でDataFrameオブジェクトを作るpd.read_hoge() 的なメソッドからDataFrameオブジェクトを作るこの2つの方法がありますが,
pd.read_hoge() からやる場合, ほぼほぼURLを渡せばいい感じにしてくれます.
使う機会が多そうな,
を例に紹介します.
名前の通り, csvを読み込んでDataFrameを作る関数です.
「ネット上で公開されているCSVデータをDataFrameにする」ようなコードを書く場合, ひとまず手元にダウンロードして...と考える機会が多いかと思います.
こんな感じです.
# メジャーリーグのオープンデータCSV(GitHubで公開されている)をDataFrameにするimport urllib.requesturl ='https://github.com/chadwickbureau/baseballdatabank/raw/master/core/Batting.csv'filename ='Batting.csv'urllib.request.urlretrieve(url, filename)df = pd.read_csv(filename)
これはこれで正解ですが, ネット上のCSVであればこれでいけます.
# read_csvはURLを直接渡してもいい感じにしてくれますdf = pd.read_csv('https://github.com/chadwickbureau/baseballdatabank/raw/master/core/Batting.csv')
自分でわざわざダウンロードしてからやる必要はありません.
どちらも結果は同じです.
read_jsonも同様の方法でいけます.
connpassのAPIからデータを取ってきてDataFrameにするサンプルです.
(注:ひとまずDataFrameにしてるだけです)
# requestsを予めinstallしてるとしてimport requestsurl ='https://connpass.com/api/v1/event/?keyword=pandas'response = requests.get(url)df = pd.DataFrame(response.json())
これも一行で終わります.
df = pd.read_json('https://connpass.com/api/v1/event/?keyword=pandas')一度DataFrameにしたあとに, 好きな形式のデータに加工してあげればOKです.
同じ様にread_excelもいけます.
$ pip install openpyxl xlrd
これでread_excelを使う準備を整えた後,
# 国勢調査のオープンデータ(Excel)をダウンロードしてDataFrameにdf = pd.read_excel('https://www.e-stat.go.jp/stat-search/file-download?statInfId=000032087414&fileKind=0')
これでおしまいです.
なお, 正直にダウンロードしてからやるコードはこんな感じです.
import urllib.request# 国勢調査の人口推計dataurl ='https://www.e-stat.go.jp/stat-search/file-download?statInfId=000032087414&fileKind=0'filename ='population.xlsx'urllib.request.urlretrieve(url, filename)df = pd.read_excel(filename)
どっちが良さそうかは明確だと思います.
楽な方を選びましょう.
Webページ(HTML)をスクレイピングしてDataFrameにして何かをやる...ということはよくあると思います.
これをやる際は,
となるかもですが,<table>タグで記載されてる内容であればpandasだけで終わります.
事前準備としてライブラリを入れます.
$ pip install bs4 html5lib lxml
これでpandasから(tableタグだけなら)スクレイピングできます.
# 日本プロ野球機構のHPから菊池涼介(広島)の成績を取得するtables = pd.read_html('https://npb.jp/bis/players/61565135.html')# 成績はここで出てくるtable[1]

ここまでいけたら後は好きに加工したらやりたいことは出来ると思います.
これは知ってると後々楽かも, 的な話です.
データ項目(カラム)や中身がわかっている場合,
すると, 後々の仕事が減ってオススメです.
# 先ほどの野球データdf = pd.read_csv('https://github.com/chadwickbureau/baseballdatabank/raw/master/core/Batting.csv')# 打率・打点・ホームランを出すのに必要なカラムだけ残す感じでread_csvするCOLUMNS = {'playerID':str,'yearID':int,'AB':int,'H':int,'HR':int,'RBI':int}df = pd.read_csv('https://github.com/chadwickbureau/baseballdatabank/raw/master/core/Batting.csv', usecols=COLUMNS.keys() )# 欠損値を埋めてデータ型を付けて計算して完成df.fillna(0, inplace=True)df.astype(COLUMNS)df['AVG'] =round(df['H'] / df['AB'],3)df.fillna(0, inplace=True)
この例のメジャーリーグデータは大したサイズのデータではないのでカラム指定しなくてもいいですが, GB以上のデータを扱う際は明確な差が出てくるので覚えておいて損はありません.
詳しくは上記エントリーの「そもそものデータを減らす」の章をご覧いただけると幸いです.
「仕事する前に知っておくと幸せかもしれないpandasのきほん」というテーマで,
という話をさせていただきました.
この2つを知ってるだけで, 泥臭い前処理や集計処理がシンプルになることも結構あるのでオススメです.
今回紹介した内容は「ひとまず覚えておいてパターン化する(真似する)」だけでも有効だと思うので生かしてもらえると嬉しいです.
また, pandasの使い方全般および, ちょっと応用的な使い方はこの辺でも書いてるので合わせて参考にしてもらえると幸いです.
ちなみに, 最近の仕事ではAIワクチン接種予測のプロトタイプを開発する際に今回紹介したtipsを活かしました.
pandasの話は出ませんが, 興味を持っていただいたら聞いてもらえると嬉しいです🙏
最後までお付き合いいただきありがとうございました!
pandasの使い方初歩はこちらをお読みいただけるといいかもです.
応用的な使い方, 特にメモリやパフォーマンスを気を使う時はこちらがすごく参考になると思います.
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。