グループの理解
データを処理する場合、データリストでは、特定の列の要素が参照基点として使用され、その列の一意の各要素は、他の列の関連データに対応してカウントされます。複雑です。次の2つのデータテーブルを使用して、処理の前後の理解に役立てることができます。
ソースデータには、年齢、性別、職業、郵便番号の5つの列があります。
次に、職業(職業)列をグループ化して分析し、職業の種類ごとに性別と年齢の最大値、最小値、平均値をカウントする必要があります。処理結果は次のとおりです。
上記はクラスターグループ化の簡単な紹介です。Pandasパッケージは 日常の操作で機能を提供します。 ペーパーは groupbyのPandas に 基づい ており、簡単な理解を利用します。
1.ライブラリのインポート、データの読み取り
import pandas as pd
users = pd.read_table("https://raw.githubusercontent.com/justmarkham/DAT8/master/data/u.user",sep ="|",index_col = 'user_id')
users.head()
データは、年齢、性別、職業、およびzip_codeをサンプルとしてデータセットに格納され、次の処理では、分析オブジェクトとして年齢、性別、職業の3つの列が中心になります。
2.性別をエンコード形式に変換します
def gender_to_numric(x):
if x=='M':
return 1
if x =="F":
return 0
# 利用新的函数创建新的列;
users['gender_n'] = users['gender'].apply(gender_to_numric)
users
Fは0になり、Mは1に設定されます
3. 2の前提の下で、各職業における男性の割合を計算します
value_counts()列内のサンプルの総数をカウントします
a = users.groupby("occupation").gender_n.sum()/users.occupation.value_counts()*100
a.sort_values(ascending =False)
次に、最大から最小に並べ替えます
4.職業をグループ化の基点とし、各職業の最も古い、最も若い、平均年齢を数えます。
ここでは、agg()関数を使用して、データパイプラインのクラスタリング効果を実現しています。
users.groupby("occupation").age.agg(["min","max","mean"])
データの複数の列に対して同時に統計を実行する場合、agg()関数も使用されます。違いは、ここでは辞書形式(dict)が使用されることです。キー名は列名であり、キー値はリストの形式で記述された、最大、最小、平均、カウント、その他のキーワードなど、カウントする必要のあるデータカテゴリ。
users.agg({列名:["mean"、 "max"、 "min"]})
この記事のデータに基づいて、年齢と性別の統計を同時に表示する場合は、次のコマンドを使用できます。
users.groupby("occupation").agg({"age":['mean','max','min'],'gender_n':['sum','count']})
5.複数列のグループ化とクラスタリング
上記では、職業列のグループ化とクラスタリングの分析を実行しました。ここでは、職業のグループ化で、性別をグループ化してクラスター化し、各職業における各性別の合計比率を計算します。
groupby(['列名1'、 '列名2' ...])#列名のシーケンスは、クラスタリングのグループ化のシーケンスを表します。
# 求在每个职业中男女各占比例
gender_occp = users.groupby(["occupation","gender"]).agg({"gender":"count"})
gender_occp
6. 5に基づいて、各職業における性別の割合を計算します
各職業における性別の割合を計算する基本的な考え方は次のとおりです:
- 1.各職業の性別の数を数えます。
- 2.各職業のサンプルの総数を数えます。
- 1と2は、職業の列に基づいて分割されています。
コード部分
# 求在每个职业中男女各占比例
gender_occp = users.groupby(["occupation","gender"]).agg({"gender":"count"})
# 为每一个职业计算 count
occup_count = users.groupby(['occupation']).agg("count")
# gender_occp
# 进行除法运算
occup_gender = gender_occp.div(occup_count,level = "occupation")*100
# 只筛选出 gender列
occup_gender.loc[:,'gender']
ここでは、DataFram.div関数を使用して、参照列としての特定の列に基づいて2つのDataFrameを分割します。最終的なデータ型はfloatです。levelパラメーターは参照列を指定するために使用されます。divに加えて、Pandasはadd、 sub、mul、powなどの操作関数、使用法はdivメソッドと同様です
最終結果は次のとおりです。
以上がこの記事の基本的な内容です。最後にお読みいただきありがとうございます!