【Python】実践データ分析100本ノック『Python独習の学習記録』

スポンサーリンク

本記事では、秀和システムから発刊されている『Python実践データ分析100本ノック』の学習記録をまとめています。

ただし、すべてのノックに対して網羅的に学習内容を記載しているわけではないのでご了承ください。

※学習途中のため進捗あり次第、随時更新していきます

ちなみに、筆者は本書にチャレンジする前に、『Python2年生データ分析のしくみ』を勉強しました。

ピンポイントで知りたい内容を探したい場合は目次をご覧ください。

スポンサーリンク

ノック13:データに揺れがあるまま計算してみよう

「aggfunc=”size”」=NaNを含めて集計

まず、「aggfunc=”size”」の「aggfunc」は、集計する関数を指定するパラメータです。

デフォルトではmean(平均値)となっています。

指定の方法により、単独の関数を指定したり複数の関数を指定したりと、変数ごとに関数を指定できます。

関数はデータ以外の引数を取るものはそのまま使えませんが、自作の関数でラッピングすれば使うことが可能です。

そして、「aggfunc=”size”」の「size」は、NaNをカウントします。

しかし、この時「aggfunc=”count”」だった場合、Nanをカウントしない出力が得られます。

ノック14:商品の揺れを補正しよう

「unique」=重複しない値

「unique」とは、簡単に言うと「重複しない(一意の)値」です。

「データフレームの構成要素を重複なしでカウントしたい!」という時に使えます。

下記の例文はイメージです。

【例】スーパーである商品を「午前中にAさんとBさん、午後にAさんとCさん」が買い物をしていた場合

この時、買い物をしてくれた顧客数のユニーク値は「3」となります。

しかし、観測データとして見れば「4」となります。

両者の違いは、午前・午後の両方で買い物をしているAさんを重複してカウントしているからです。

以上のように、純粋な顧客数を知りたいような場合に「ユニーク値」が役に立ちます。

全角スペースが入力できない時は改行してコピペ

Jupiter Notebookでコードを書いている人限定になってしまうかもしれませんが、データの揺れを解消するための全角スペース「” ”」が打てませんでした。

そこで、コードを改行した時に勝手に入力される全角スペースをコピペしたら問題を解消できました。

「ascending=True」=値を小さい順に出力

データをソートして出力するコードは下記の通りです。

df.sort_values(by=["項目1"], ascending=True)

ただし、「ascending=True」を「ascending=False」に変えるとソートする順番が逆になり、降順(値が大きい順)に並びます。

また、元の順ではなく新たな項目2に依存させたい時のコードは下記のようになります。

df.sort_values(by=["項目1", "項目2"], ascending=True)

変則的ですが、項目1を昇順、項目2を降順にしてソートしたい時のコードは下記のようになります。

df.sort_values(by=["項目1", "項目2"], ascending=[True,False])

ノック15:金額欠損値の補完をしよう

「any(axis=0)」=列に沿った処理の範囲でTrueを抽出

まず、「any(axis=0)」のanyは名前の通り、対象となる範囲で1つでもTrueがあればTrueを返す関数です。

そして、「any(axis=0)」のaxisは、パラメータ名となります。

つまり、列に沿った処理は「axis=0」、行に沿った処理は「axis=1」ということになります。

「loc」=付与した条件に合致するデータを抽出

「loc」は、付与した条件に合致するデータを抽出する型です。

DataFrameやSeriesの要素にアクセスする機能を持ちます。

ちなみに、loc以外にも「at」「iloc」「at」があり、locとatは行や列の名前で要素へアクセスできます。

一方で、「i」がついているilocやiatは名前ではなく、index(NumPyの配列のように数字)で要素へアクセス可能です。

loc/ilocは複数要素をスライスすることができ、at/iatは一つの要素を取り出すことができます。

「max()」=最大値のインデックスを取得

「max()」は、最大値のインデックスを取得する組み込み関数です。

対して、「min()」は、最小値のインデックスを取得する組み関数を指します。

個人的な解釈を加えたコード

 flg_is_null = uriage_data["item_price"].isnull()
 # 金額が欠損した要素を抽出
 for trg in list(uriage_data.loc[flg_is_null,"item_name"].unique()):
     # for文=くり返し構文
     #金額が欠損した要素をアイテム名で重複なく抽出
     price = uriage_data.loc[(~flg_is_null)&(uriage_data["item_name"]==trg),"item_price"].max()
     # 金額がわかる要素をアイテム名で抽出してfor文に代入(最大値と最小値のインデックスを取得)
     uriage_data["item_price"].loc[(flg_is_null)&(uriage_data["item_name"]==trg)] = price
     # 金額が欠損した要素と金額がわかる要素をアイテム名で紐付けて欠損していた金額を補完
 uriage_data.head() 

「str()」=引数に渡したオブジェクトを文字列として返す

「str()」は、引数に渡したオブジェクトを文字列として返す組み込み関数です。

引数には数値やリスト、タプルなどのオブジェクトを指定できます。

str(10)
str([10, 20, 30])
str(True)

数値を文字列と連結したい場合などに数値から文字列を取得する場合などに使用します。

ノック17:日付の揺れを補正しよう

「astype()」=Numpyのデータ型変換

「astype()」は、Numpyのデータ型変換ができるメソッドです。

astypeメソッドのdtypeパラメータに「”str”」を指定すると、データフレームの列(シリーズ)は文字列型に変換されます。

実務では、数値やブール型の列に対して文字列メソッドを使用したいときなどに使用されます。

「isdigit()」=文字が数字かどうか判定

「isdigit()」は、すべての文字が数字かどうかを判定するメソッドです。

isdigitメソッドは、文字列中のすべての文字が数字で使われる文字で、かつ1文字以上ある場合に真を返します。

「float」=浮動小数点型

「float」は、プログラミングにおける「変数のデータ」型の一種であり、実数を扱うことができるデータ型(浮動小数点型)です。

ここで扱われる実数は整数型の値と比べて値の桁数が多く、小数も扱えるような数値を指します。

整数型同様、正負の値を示せます。

ノック20:データを集計しよう

「fill_value=0」=NaNの欠損値を0で埋めてくれる

pandasの「fill_value=0」は、文字が表す意味を知ることで理解できます。

「fill」=「埋める」
「value」=「値」

つまり、NaNの欠損値を「0」で埋めてくれることを意味しています。

まとめ

ご紹介した内容をもう一度まとめておきます。

ノック11〜20
  • 「aggfunc=”size”」=NaNを含めて集計
  • 「unique」=重複しない値
  • 全角スペースが入力できない時は改行してコピペ
  • 「ascending=True」=値を小さい順に出力
  • 「any(axis=0)」=列に沿った処理の範囲でTrueを抽出
  • 「loc」=付与した条件に合致するデータを抽出
  • 「max()」=最大値のインデックスを取得
  • 「str()」=引数に渡したオブジェクトを文字列として返す
  • 「astype()」=Numpyのデータ型変換
  • 「isdigit()」=文字が数字かどうか判定
  • 「float」=浮動小数点型
  • 「fill_value=0」=NaNの欠損値を0で埋めてくれる

▼学習記録の元となる書籍

▼『Python実践データ分析100本ノック』をチャレンジする前に勉強した書籍

コメント