【Python初心者でも分かる】データサイエンティスト協会の100本ノックを解説|ソート(順序で整列)

スポンサーリンク
Python
ゼロ知識の初心者がデータサイエンスを完全無料で学習する方法5選
データサイエンスの知識や技術、またはPythonについて学びたい。でも「大学に行くほど本気度がない」、「スクールに行くほどお金がない」、なんせ「時間がない」という方も多いはずです。というよりほとんどの方がそうだと思います(当然わたし...
初心者に人気のプログラミング言語Pythonは独学可能か?
Pythonは非常に人気のあるプログラミング言語で、まったくの初心者でも独学が可能と言われています。 Pythonはさまざまな目的に使える、汎用性のあるプログラミング言語です。 プログラミングは「独学が難しい」と言われていま...

データサイエンティスト協会の100本ノックがGitHubに公開しているデータとPythonコードを初心者にでも分かるように解説していきます。

今回は17~20本です。内容は主に、「ソート(順序で整列)の方法」について解説していきます。

Pythonの環境設定は以下の記事を参考にして下さい。

【2021年最新】M1 mac でanacondaをインストールする方法

【2021年最新】WindowsでAnacondaをインストールする方法

ソート(順序で整列)

まずは、以下からダウンロードして下さい。

GitHubからデータをダウンロードする方法

P-17: 顧客データフレーム(df_customer)を生年月日(birth_day)で高齢順にソートし、先頭10件を全項目表示せよ。

import pandas as pd   # データを操作するために必要なもの
df_customer = pd.read_csv("customer.csv")  # データを読み込み、「df_customer」とする

df_customer.sort_values("birth_day",ascending=True).head(10)

読み込んだデータである「df_customer」のデータフレームを指定。そのデータフレームを使って、順番な並び変える(sort_values)。その後の()内で、どの変数を使うかを指定する(”birth_day”: 誕生日)。ascending=True で小さい数値から大きい数値になるように指定する。そして、head(10) で、先頭から10件のみを表示するように指定する。

P-18: 顧客データフレーム(df_customer)を生年月日(birth_day)で若い順にソートし、先頭10件を全項目表示せよ。

df_customer.sort_values("birth_day",ascending=False).head(10)

P-17と同じようなコードだが、ascending= が違う。

Trueは、数値が小さい順

Falseは、数値が大きい順

P-19: レシート明細データフレーム(df_receipt)に対し、1件あたりの売上金額(amount)が高い順にランクを付与し、先頭10件を抽出せよ。項目は顧客ID(customer_id)、売上金額(amount)、付与したランクを表示させること。なお、売上金額(amount)が等しい場合は同一順位を付与するものとする。

df_receipt = pd.read_csv("receipt.csv")  # データを読み込み、「df_receipt」とする

df_19 = pd.concat([df_receipt[["customer_id","amount"]], # データの抽出
                   df_receipt["amount"].rank(method="min",ascending=False)],axis=1)
df_19.columns = ["customer_id", "amount","ranking"]      # カラムの名前を指定
df_19.sort_values("ranking",ascending=True).head(10)

concat は、データを単純に結合させるもの。

【Python初心者】 直感的に理解できるデータの結合 concat・merge

rank で、順位をつけてくれる。

その後、sort_values で順番に並べ替える。

P-020: レシート明細データフレーム(df_receipt)に対し、1件あたりの売上金額(amount)が高い順にランクを付与し、先頭10件を抽出せよ。項目は顧客ID(customer_id)、売上金額(amount)、付与したランクを表示させること。なお、売上金額(amount)が等しい場合でも別順位を付与すること。

df_20 = pd.concat([df_receipt[["customer_id","amount"]], # データの抽出
                   df_receipt["amount"].rank(method="first",ascending=False)],axis=1)
df_20.columns = ["customer_id","amount","ranking"]       # カラム名を指定
df_20.sort_values("ranking",ascending=True).head(10)

P-19とほとんど同じですね。違いは、

rank の()内の、method= ですね。

rank の()内の、method= の特徴を見てみましょう。

“first” “min” “max” などがあります。df_receipt の 「amount」をつかって、それぞれを確認してみます。

amount=df_receipt["amount"]
method_first = amount.rank(method="first",ascending=False) # first:上から順番
method_min = amount.rank(method="min",ascending=False)     # min:小さい数値で揃える
method_max = amount.rank(method="max",ascending=False)     # max:大きい数値で揃える
method_non = amount.rank(ascending=False)                  # 指定しない:平均値で揃える
method = pd.concat([amount,method_first,method_min,method_max,method_non],axis=1)
method.columns = ["amount","first","min","max","non"]
method.sort_values("first",ascending=True).head(10)

amount の数値がおなじであれば、

first:amount の一番最初の数値の順位が若くなり、おなじ順位はついていない

min:amount の一番最初の数値の順位が若くなり、同じ数値であれば、同じ順位となっている

max:amount の一番最初の数値の順位が大きくなり、同じ順位であれば、大きい順位に統一される。

指定なし:これは、順位の平均値をとっています。例では、4,5,6位なので、平均の5で統一されています。オレンジ枠の下の 7.5 と 7.5 が分かりやすいです。順位で小数点はおかしいですが、平均値をとっていることが分かれば納得ですね。

【Python初心者でも分かる】データサイエンティスト協会の100本ノックを解説|データの抽出
データサイエンティスト協会の100本ノックがGitHubに公開しているデータとPythonコードを初心者にでも分かるように解説していきます。 今回は1~9本です。内容は主に、「データの抽出方法」について解説していきます...
【Python初心者でも分かる】データサイエンティスト協会の100本ノックを解説|変数の一部を使ってデータを抽出する
データサイエンティスト協会の100本ノックがGitHubに公開しているデータとPythonコードを初心者にでも分かるように解説していきます。 今回は10~16本です。内容は主に、「変数の一部を使ってデータを抽出する方法...



コメント

タイトルとURLをコピーしました