>

다른 스케일은 다른 유형의 작업을 허용합니다. 데이터 프레임 df 에서 열의 배율을 지정하고 싶습니다 . 그런 다음 df.describe()  이것을 고려해야합니다.

  • 공칭 척도: 공칭 척도는 동등성 만 검사 할 수 있습니다. 이에 대한 예는 성별, 이름, 도시 이름입니다. 기본적으로 얼마나 자주 나타나는지 계산하고 가장 일반적인 것을 제공 할 수 있습니다 (모드).
  • 원래 스케일: 주문할 수는 있지만 어느 정도 멀리 떨어져 있는지는 말할 수 없습니다. 천 크기가 한 예입니다. 이 척도의 중앙값/최소/최대 값을 계산할 수 있습니다.
  • 정량 척도: 해당 척도의 평균, 표준 편차, Quantile을 계산할 수 있습니다.
코드 예
import pandas as pd
import pandas.rpy.common as rcom
df = rcom.load_data('mtcars')
print(df.describe())

주십시오

            mpg        cyl        disp          hp       drat         wt  \
count  32.000000  32.000000   32.000000   32.000000  32.000000  32.000000   
mean   20.090625   6.187500  230.721875  146.687500   3.596563   3.217250   
std     6.026948   1.785922  123.938694   68.562868   0.534679   0.978457   
min    10.400000   4.000000   71.100000   52.000000   2.760000   1.513000   
25%    15.425000   4.000000  120.825000   96.500000   3.080000   2.581250   
50%    19.200000   6.000000  196.300000  123.000000   3.695000   3.325000   
75%    22.800000   8.000000  326.000000  180.000000   3.920000   3.610000   
max    33.900000   8.000000  472.000000  335.000000   4.930000   5.424000   
            qsec         vs         am       gear     carb  
count  32.000000  32.000000  32.000000  32.000000  32.0000  
mean   17.848750   0.437500   0.406250   3.687500   2.8125  
std     1.786943   0.504016   0.498991   0.737804   1.6152  
min    14.500000   0.000000   0.000000   3.000000   1.0000  
25%    16.892500   0.000000   0.000000   3.000000   2.0000  
50%    17.710000   0.000000   0.000000   4.000000   2.0000  
75%    18.900000   1.000000   1.000000   4.000000   4.0000  
max    22.900000   1.000000   1.000000   5.000000   8.0000 

이것은 vs 만큼 좋지 않습니다  는 자동차에 v- 엔진 또는 스트레이트 엔진 ( 소스 )이 있는지 여부를 나타내는 이진 변수입니다. 따라서이 기능은 명목 규모입니다. 따라서 최소/최대/표준/평균은 적용되지 않습니다. 0과 1이 얼마나 자주 나타나는지 계산해야합니다.

R에서는 다음을 수행 할 수 있습니다.

mtcars$vs = factor(mtcars$vs, levels=c(0, 1), labels=c("straight engine", "V-Engine"))
mtcars$am = factor(mtcars$am, levels=c(0, 1), labels=c("Automatic", "Manual"))
mtcars$gear = factor(mtcars$gear)
mtcars$carb = factor(mtcars$carb)
summary(mtcars)

그리고 얻는

     mpg             cyl             disp             hp             drat      
 Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0   Min.   :2.760  
 1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5   1st Qu.:3.080  
 Median :19.20   Median :6.000   Median :196.3   Median :123.0   Median :3.695  
 Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7   Mean   :3.597  
 3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0   3rd Qu.:3.920  
 Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0   Max.   :4.930  
       wt             qsec                     vs             am     gear   carb  
 Min.   :1.513   Min.   :14.50   straight engine:18   Automatic:19   3:15   1: 7  
 1st Qu.:2.581   1st Qu.:16.89   V-Engine       :14   Manual   :13   4:12   2:10  
 Median :3.325   Median :17.71                                       5: 5   3: 3  
 Mean   :3.217   Mean   :17.85                                              4:10  
 3rd Qu.:3.610   3rd Qu.:18.90                                              6: 1  
 Max.   :5.424   Max.   :22.90                                              8: 1 

팬더와 비슷한 것도 가능합니까?

내가 시도했다

df["vs"] = df["vs"].astype('category')

그러나 이것은 "vs" 를 만듭니다  설명에서 사라집니다.

  • 답변 # 1

    파티에 늦었지만 최근에 같은 문제로 어려움을 겪고 있었기 때문에이 과제에 대한 의견을 나누겠다고 생각했습니다.

    <시간> R은 범주 형 변수를 처리하는 데 여전히 더 나은 것 같습니다. 그러나 pd.Categorical() 와 함께 Python을 사용 하여이 기능 중 일부를 모방 할 수있는 몇 가지 방법이 있습니다 pd.GetDummies()  그리고 describe() .

    이 특정 데이터 세트의 문제점은 범주 형 변수의 특성이 매우 다르다는 것입니다. 예를 들어 am is 0 or 1  자동 또는 수동 기어 용. 그리고 gear is either 3, 4, or 5 하지만 여전히 숫자 값이 아닌 범주 형으로 간주됩니다. 그래서 am  0과 1을 '자동'과 '범주'로 바꾸고 기어에 대해서는 pd.GetDummies() 를 적용합니다  예를 들어 3 개의 기어가있는 모델 수를 쉽게 계산할 수 있도록 각 기어 범주에 대해 0 또는 1을 가져옵니다.

    어제 약간 개선 된 유틸리티 기능이 한동안 있었다. 반드시 가장 elegangt는 아니지만 R 스 니펫을 사용했을 때와 동일한 정보를 제공해야합니다. 최종 출력 테이블은 행 수가 다른 열로 구성됩니다. 데이터 프레임과 비슷한 테이블을 만들고 NaN으로 채우는 대신 정보를 두 가지로 나눕니다. 하나는 숫자 값 테이블과 범주 값은 테이블입니다.

                    count
    Straight Engine     18
    V engine            14
    automatic           13
    manual              19
    cyl_4               11
    cyl_6                7
    cyl_8               14
    gear_3              15
    gear_4              12
    gear_5               5
    carb_1               7
    carb_2              10
    carb_3               3
    carb_4              10
    carb_6               1
    carb_8               1
                 mpg        disp          hp       drat         wt       qsec
    count  32.000000   32.000000   32.000000  32.000000  32.000000  32.000000
    mean   20.090625  230.721875  146.687500   3.596563   3.217250  17.848750
    std     6.026948  123.938694   68.562868   0.534679   0.978457   1.786943
    min    10.400000   71.100000   52.000000   2.760000   1.513000  14.500000
    25%    15.425000  120.825000   96.500000   3.080000   2.581250  16.892500
    50%    19.200000  196.300000  123.000000   3.695000   3.325000  17.710000
    75%    22.800000  326.000000  180.000000   3.920000   3.610000  18.900000
    max    33.900000  472.000000  335.000000   4.930000   5.424000  22.900000
    
    

    간단한 복사 및 붙여 넣기를위한 전체 절차는 다음과 같습니다.

    # imports
    import pandas as pd
    # to easily access R datasets:
    # pip install pydataset
    from pydataset import data 
    # Load dataset
    df_mtcars = data('mtcars')
    
    # The following variables: cat, dum, num and recoding
    # are used in the function describeCat/df, dummies, recode, categorical) below
    # Specify which variables are dummy variables [0 or 1], 
    # ategorical [multiple categories] or numeric
    cat = ['cyl', 'gear', 'carb']
    dum = ['vs', 'am']
    num = [c for c in list(df_mtcars) if c not in cat+dum]
    # Also, define a dictionary that describes how some dummy variables should be recoded
    # For example, in the series am, 0 is recoded as automatic and 1 as manual gears
    recoding = {'am':['manual', 'automatic'], 'vs':['Straight Engine', 'V engine']}
    # The function:
    def describeCat(df, dummies, recode, categorical):
        """ Retrieves specified dummy and categorical variables
            from a pandas DataFrame and describes them (just count for now).
            Dummy variables [0 or 1] can be recoded to categorical variables
            by specifying a dictionary
        Keyword arguments:
        df -- pandas DataFrame
        dummies -- list of column names to specify dummy variables [0 or 1]
        recode -- dictionary to specify which and how dummyvariables should be recoded
        categorical -- list of columns names to specify catgorical variables
        """
    
        # Recode dummy variables
        recoded = []
        # DataFrame to store recoded variables
        df_recoded = pd.DataFrame()
        for dummy in dummies:
            if dummy in recode.keys():
                dummySeries = df[dummy].copy(deep = True).to_frame()
                dummySeries[dummy][dummySeries[dummy] == 0] = recode[dummy][0]
                dummySeries[dummy][dummySeries[dummy] == 1] = recode[dummy][1]
                recoded.append(pd.Categorical(dummySeries[dummy]).describe())  
                df_rec = pd.DataFrame(pd.Categorical(dummySeries[dummy]).describe())
                df_recoded = pd.concat([df_recoded.reset_index(),df_rec.reset_index()],
                                        ignore_index=True).set_index('categories')
        df_recoded = df_recoded['counts'].to_frame()
        # Rename columns and change datatype
        df_recoded['counts'] = df_recoded['counts'].astype(int)
        df_recoded.columns = ['count']
    
        # Since categorical variables will be transformed into dummy variables,
        # all remaining dummy variables (after recoding) can be treated the
        # same way as the categorical variables
        unrecoded = [var for var in dum if var not in recoding.keys()]
        categorical = categorical + unrecoded
        # Categorical split into dummy variables will have the same index
        # as the original dataframe
        allCats = pd.DataFrame(index = df.index)
        # apply pd.get_dummies on all categoirical variables
        for cat in categorical:
            newCats = pd.DataFrame(data = pd.get_dummies(pd.Categorical(df_mtcars[cat]), prefix = cat))
            newCats.index = df_mtcars.index
            allCats = pd.concat([allCats, newCats], axis = 1)
            df_cat = allCats.sum().to_frame()
        df_cat.columns = ['count']
        # gather output dataframes
        df_output = pd.concat([df_recoded, df_cat], axis = 0)
    
        return(df_output)
    # Test run: Build a dataframe that describes the dummy and categorical variables
    df_categorical = describeCat(df = df_mtcars, dummies = dum, recode = recoding, categorical = cat)
    # describe numerical variables
    df_numerical = df_mtcars[num].describe()
    print(df_categorical)
    print(df_numerical)
    
    
    <시간>

    범주 형 변수 및 describe ()에 대한 참고 사항 :

    pd.Categorical() 를 사용하는 이유  위 함수에서 describe() 의 출력은  다소 불안정한 것 같습니다. 때때로 df_mtcars['gear'].astype('category').describe()  반환 :

    count    32.000000
    mean      3.687500
    std       0.737804
    min       3.000000
    25%       3.000000
    50%       4.000000
    75%       4.000000
    max       5.000000
    Name: gear, dtype: float64
    
    

    범주 형 변수로 간주되는 경우 다음을 리턴하십시오.

    count     32
    unique     3
    top        3
    freq      15
    Name: gear, dtype: int64
    
    

    여기에 문제가있을 수 있으며이 문제를 재현하는 데 문제가 있지만 때때로이 문제가 발생한다고 맹세 할 수 있습니다.

    describe() 사용   pd.Categorical() 에서  자체 형식의 출력을 제공하지만 적어도 안정적으로 보입니다.

               counts    freqs
    categories                 
    3               15  0.46875
    4               12  0.37500
    5                5  0.15625
    
    
    <시간>

    마지막 단어pd.get_dummies ()

    df_mtcars['gear'] 에 해당 기능을 적용하면 어떻게됩니까? :

    # code
    pd.get_dummies(df_mtcars['gear'].astype('category'), prefix = 'gear')
    # output
                         gear_3  gear_4  gear_5
    Mazda RX4                 0       1       0
    Mazda RX4 Wag             0       1       0
    Datsun 710                0       1       0
    Hornet 4 Drive            1       0       0
    Hornet Sportabout         1       0       0
    Valiant                   1       0       0
    .
    .
    .
    Ferrari Dino              0       0       1
    Maserati Bora             0       0       1
    Volvo 142E                0       1       0
    
    
    그러나이 경우에는 간단히 value_counts() 를 사용합니다.  다음을 얻을 수 있습니다.

               counts    freqs
    categories                 
    3               15  0.46875
    4               12  0.37500
    5                5  0.15625
    
    

    describe() 를 사용한 결과와 비슷하다   pd.Categorical() 에서  변수

  • 답변 # 2

    같은 문제가 발생했습니다. 와이즈 비즈  숫자 값에 적합합니다.

    카테고리에서 값을 세려면 다음 코드를 작성했습니다.

    df.describe()
    
    

    도움이 되길 바랍니다 :)

    for category in df.columns: print('\n',category) for typ in df.groupby(category).groups: print(typ,'\t',len(df.groupby(category).groups[typ]))

관련 자료

  • 이전 node.js - supertest를 사용하여 응답 본문을 확인하려고합니다오류가 발생했습니다
  • 다음 python - 특정 시간에 Chained Celery 작업 실행