Pythonデータサイエンスを学び、ゲームをプレイし、日本語を学び、プログラミングをすべて1つのパッケージで行います。
今回は、「三国時代」ゲームのデータがどのようにつなぎ合わされているかを学びましょう。
データサイエンスの分野では、Pythonを使用して大規模なデータセットを処理する場合、データセットを統合するためにマージとリンクの方法を使用する必要があることがよくあります。使用されるデータタイプにはSeriesとDataFrameがあり、多くの方法があります。この記事で紹介したような使用が可能です。.merge()、. join()、. concat()の3つのメソッドを使用すると、スプライシング処理後のデータセットを最大限に活用できます。
マージ操作
.merge()メソッドは、一般的な列またはインデックスのデータを結合するために使用されます。このメソッドは、MySQLの結合操作にいくぶん似ており、左スプライシング、右スプライシング、完全結合などの操作を実装できます。
キーワードのインデックスをつなぎ合わせて、多対1、1対多、および多対多(デカルト積)の接続を実現します。
マージのパラメーターの説明:
- 方法:マージ方法を定義します。選択パラメーターは、「inner」、「outer」、「left」、「right」です。
- on:結合(インデックスキー)のために両方のDataFrameに含める必要がある列を定義します。
- left_onおよびright_on:マージする左または右のオブジェクトに存在する列またはインデックスを指定します。
- left_indexおよびright_index:デフォルトはFalseで、インデックス列をマージベースとして使用するように設定されています。
- サフィックス:マージキーではない同じ列名に追加する文字列のタプル。
マージスプライシングメソッド
写真は、さまざまなキーワード引数がどのようにマージされるかを示しています。
マージ例
読み取ったデータ
パワーとキャラクターの直接関係のスプライシング操作を行う必要があります。読み取ったデータには以下の2つのリストが含まれ、キャラクター履歴ログインデータにパワーがないデータは削除されます。
import pandas as pd
country = pd.read_excel("Romance of the Three Kingdoms 13/势力列表.xlsx")
people = pd.read_excel("Romance of the Three Kingdoms 13/人物历史登入数据.xlsx")
# 剔除不包含的势力数据,即武将在野的状态
people = people[people["勢力"]!="-"]
country.head()
people.head()
内部結合
2つのDataFrameの共通部分の結果と一致するように、デフォルトのマージパラメータを使用して直接内部結合します。
キャラクターとそれらが属する力をつなぎ合わせて、ここではキャラクターが最終的に属する力、つまり、変更されたキャラクターのデータが集約された後の最後のデータ情報を取得します。
people_new = people.groupby('名前').nth(-1)
people_new["名前"] = people_new.index
people_new.reset_index(drop=True,inplace=True)
people_new
マージでのDataFrameの順序によって、連結された結果の順序が決まります。
inner_merged_total = pd.merge(country,people_new,on=["勢力"])
inner_merged_total.head()
inner_merged_total = pd.merge(people_new,country,on=["勢力"])
inner_merged_total.head()
アウタージョイン
外部結合(完全外部結合とも呼ばれます)では、両方のDataFrameのすべての行が新しいDataFrameに表示されます。
本質的に、外部スプライシングは、完全なデータdf_Aと含まれているdf_Bに対して実行されます。これは、pd.merge(df_A、df_B、on = ["key"])と同等です。
outer_merged = pd.merge(people_new,country,how="outer",on=["勢力"])
outer_merged.head()
野生の将軍のデータを削除しないと、フォーム全体がスプライスされていることがわかります。
country = pd.read_excel("Romance of the Three Kingdoms 13/势力列表.xlsx")
people = pd.read_excel("Romance of the Three Kingdoms 13/人物历史登入数据.xlsx")
outer_merged = pd.merge(people_new,country,how="outer",on=["勢力"])
outer_merged
左参加
新しくマージされたDataFrameは、左側のDataFrameのすべての行(つまり、マージの最初のデータフレーム)で保持されますが、左側のDataFrameのキー列に一致しない右側のDataFrameの行は破棄されます。
left_merged = pd.merge(people_new,country,how="left",on=["勢力"])
left_merged
右参加
新しくマージされたDataFrameは、右側のDataFrameのすべての行(つまり、マージの2番目のデータフレーム)で保持されますが、左側のDataFrameのキー列に一致しない右側のDataFrameの行は破棄されます。
right_merged = pd.merge(people_new,country,how="right",on=["勢力"])
right_merged
参加操作
結合操作は、列またはインデックスのデータを結合するマージと非常によく似ています。結合は、マージで最初のDataFremeを指定することと同じです。また、名前が競合する列は、接尾辞を定義することで名前を変更できます。
この結果は、前の左右のマージと非常によく似ています。
結合のパラメーターの説明:
- other:連結するDataFrameを定義します。
- on:左側のDataFrameのオプションの列またはインデックス名を指定します。Noneに設定すると、これがデフォルトのインデックス接続になります。
- 方法:マージの方法と同じです。列が指定されていない場合は、インデックススプライシングが使用されます。
- lsuffixおよびrsuffix:merge()のサフィックスに似ています。
- sort:生成されたDataFrameをソートします。
参加例
people_new.join(country, lsuffix="left", rsuffix="right")
インデックスの水平方向のステッチです。
concat操作
Concatは操作がより柔軟で、垂直スプライシング操作だけでなく水平スプライシング操作も実行できます。
垂直スプライシング操作
水平スプライシング操作
パラメーターの説明(連結):
- objs:連結するデータオブジェクト。List、Serices、DataFrame、Dictなどになります。
- axis:接続する軸。デフォルトは0(行軸)、1(垂直)接続です。
- join:マージのhowパラメーターと同様に、innerまたはouterの値のみを受け入れます。
- ignore_index:デフォルトはFalseです。Trueを指定して新しい結合データセットを設定すると、axisパラメータで指定された軸の元のインデックス値は保持されません。
- キー:異なる行が含まれる元のデータセットをクエリするための階層インデックスを作成します。
- copy:ソースデータをコピーするかどうか。デフォルト値はTrueです。
concatの例
三国志の宝物データを使って観察します。データは74行です。
import pandas as pd
items = pd.read_excel("Romance of the Three Kingdoms 13/道具列表.xlsx")
items.head()
水平スプライシング後、データの最大行数は74に保たれます。
pd.concat([items, items], axis=1)
垂直スプライシング後、最大線数は74の2倍になります。
pd.concat([items, items], axis=0)
例を追加
Appendは、DataFrameデータをスプライシングする効果的な方法でもあります。この方法は、concatの垂直スプライシングと同じです。返される結果を有効にするには、変数を再定義する必要があります。
次の2つの追加行の違いに注意してください
items.append(items)
items
items = items.append(items)
items