Site cover image

Site icon imageExcelおさるくんのastro-notion-blog

VBA / Python / Notion / AIによる業務効率化とデータサイエンスに関する情報を発信しています!

Post title icon【002 特定の列を抽出する】 Python in Excelで始めるデータサイエンス100本ノック!

Featured image of the post

データサイエンス100本ノック関連記事リスト

1️⃣ はじめに

  • この連載企画では、データサイエンス100本ノックをDockerとPython in Excelで実行する方法を比較しながらご紹介しています。
    📖
    Python in Excelとは?
    Image in a image block
    Python in Excelは、Excel上で直接Pythonのコードを実行できる話題の新機能です。
    • 2023年8月に、パブリックプレビュー版が発表されました。
    • 現在は、Microsoftの一定のバージョン以降でMicrosoft 365 insidersプログラムに参加し「Beta Channel」を選択することで利用が可能です。
    • Python in Excelでは、ExcelにPython実行環境である「Anaconda」が組み込まれています。
    • 新しい関数である「PY」関数を使って、セルにPythonプログラムを書き込むと、クラウドでPythonプログラムを実行することができます。
    • Python向けの各種ライブラリとして、Pandas Matplotlibseaborn を使えば、データの整形やグラフ化ができたり、scikit-learn を使用すれば機械学習やデータからの予測などの機能を利用できます。

  • それでは早速、演習問題002 特定の列を抽出するにチャレンジしてみましょう!

2️⃣ データサイエンス100本ノックの紹介

3️⃣ Docker上で実行

  • まず、Dockerコンテナ上で立ち上げたJupyter環境で実行していきます。
    Image in a image block
Icon in a callout block
演習問題002
  • レシート明細データ(df_receipt)から売上年月日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、10件表示せよ。
    Image in a image block

  • 一番初めのセルでレシート明細データのCSVファイルをdf_receiptという変数に読み込む処理をしています。
    Image in a image block

  • 読み込んだdf_receiptから表示する列を指定して、headメソッドを使うことで、先頭のデータを表示できます。
  • pandasDataFrameで特定の列を選択する場合、角括弧[]を使用して列の名前を指定します。

  • まず、例として一つの列を指定してみます。

    df_receiptに続けて角括弧を入力し、sales_ymdという文字列をシングルクォーテーションまたはダブルクォーテーションで挟んで入力します。

    df_receipt['sales_ymd']

  • Ctrl + Enterで実行します
    Image in a image block

    sales_ymdの列が表示されました。

  • 続いて、複数の列を指定する場合は、列名のリストを角括弧[]内に入れます。

    角括弧[]の中に要素を格納することでリスト型のデータを作成できます。

  • columnsという変数にリストを代入し、df_receiptの角括弧[]の中に指定します。
    columns = ['sales_ymd', 'customer_id', 'product_cd', 'amount']
    df_receipt[columns]

  • Ctrl + Enterで実行します
    Image in a image block

    複数の列を指定してデータを出力できました。

  • 最後に取得したい行数をhead()メソッドで入力します。
    columns = ['sales_ymd', 'customer_id', 'product_cd', 'amount']
    df_receipt[columns].head(10)

  • Ctrl + Enterで実行します。
    Image in a image block

    データを10件表示することができました。

    Icon in a callout block
    SeriesオブジェクトとDataFrameオブジェクトの違いについて
    • DataFrameから列を選択するとき、単一の列を選択すると一次元のデータ構造であるSeriesオブジェクトが返され、複数の列をリストで選択すると二次元のデータ構造であるDataFrameオブジェクトが返されます。
    • 今後の演習課題にも出てくるメソッドや関数の中には、Seriesでのみ利用可能なmapDataFrameでのみ利用可能なgroupbymergejoinなどがあるため、SeriesDataFrameの違いを何となくでも理解しておくと、エラーに躓きにくくなると思います。

  1. DataFrameから単一の列を指定する際に文字列で渡すとSeriesオブジェクトになります。
    # 列名を文字列で渡す(Seriesオブジェクト)
    column = 'sales_ymd'
    df_receipt[column].head(10)
    Image in a image block
    Image in a image block

  2. 角括弧[]をつけてリストにして渡すとDataFrameオブジェクトになります。
    # 列名をリストで渡す(DataFrameオブジェクト)
    column = ['sales_ymd']
    df_receipt[column].head(10)
    Image in a image block
    Image in a image block

次はPython in Excelで確認します。

4️⃣ Python in Excelで実行

  • レシート明細のCSVデータをExcelで開いています。
    Image in a image block

  • データのダウンロードの方法はこちらの動画をご覧ください。

  • 数式バーからPythonの挿入を選択します。
    Image in a image block

  • Python in Excelを使ってDataFrameにデータを格納するにはセル範囲を選択します。

    列を指定するか、または表のセル範囲を指定します。

    Image in a image block

  • 指定した範囲をdf_receiptという変数に格納します。
    df_receipt = xl("A1:I104682", headers=True)
    Image in a image block

  • 先ほどと同様に列名のリストを作成します。
    df_receipt = xl("A1:I104682", headers=True)
    columns = ['sales_ymd', 'customer_id', 'product_cd', 'amount']
    Image in a image block

  • columnsという変数にリストを代入し、df_receiptの角括弧[]の中に指定します。
    df_receipt = xl("A1:I104682", headers=True)
    columns = ['sales_ymd', 'customer_id', 'product_cd', 'amount']
    df_receipt[columns]

  • Ctrl + Enterで実行。表示がDataFrameに変わりましたら、数式バー隣のプルダウンメニューをクリック、PythonオブジェクトからExcelの値に変更します。
    Image in a image block

  • 値が出力されました。
    Image in a image block

  • 続いてheadメソッドを使用し、引数に10と入力します。
    df_receipt = xl("A1:I104682", headers=True)
    columns = ['sales_ymd', 'customer_id', 'product_cd', 'amount']
    df_receipt[columns].head(10)
    Image in a image block

  • Ctrl + Enterで実行します。
    Image in a image block

    指定した列のデータを10行表示することが出来ました。

    以上で、データサイエンス100本ノック演習問題002 特定の列を抽出するをクリアしました。

5️⃣ おわりに

  • 最後までお読みいただきありがとうございます!
  • この記事へのご質問やアドバイスがありましたら、ぜひコメントもお待ちしております。
  • またXでもVBA、Pythonに関するアウトプットをしていますので、🔽フォローいただけますと幸いです😆