반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Ethan's Values

Pandas study - pandas 튜토리얼(4) 본문

Python

Pandas study - pandas 튜토리얼(4)

Ethan_hyk 2023. 10. 19. 14:48
반응형

앞으로는 모르고 있었던 내용들로 구성하여 작성하겠습니다.

Pandas에서 시각화

데이터를 불러올 때 index_col = 0을 해주는 이유는 인덱스컬럼을 데이터에서 몇번째 위치에 있는 열로 선정을 할것인지여서 csv를 불러올때는 대부분 첫 열(1)이 열의 이름인 경우가 많기 때문에 0부터 불러오는 것이 좋다.

Parse_dates = True를 해주는 이유는 데이터 중에 날짜, 시간 데이터가 존재할 경우 데이터 불러왔을 때 Data의 Type이 Object가 되기 때문에 다시 DateTime타입으로 변경해주는 처리를 거쳐야 하는데 이를 간단하게 데이터 불러올 때 바로 형변환이 되어 read되기 때문에 간편하게 사용할 수 있다.

In [3]: air_quality = pd.read_csv("data/air_quality_no2.csv", index_col=0, parse_dates=True)

In [4]: air_quality.head()
Out[4]: 
                     station_antwerp  station_paris  station_london
datetime                                                           
2019-05-07 02:00:00              NaN            NaN            23.0
2019-05-07 03:00:00             50.5           25.0            19.0
2019-05-07 04:00:00             45.0           27.7            19.0
2019-05-07 05:00:00              NaN           50.4            16.0
2019-05-07 06:00:00              NaN           61.9             NaN

각 컬럼을 subplot으로 비교하여 시각화 할 수 있다.

In [14]: axs = air_quality.plot.area(figsize=(12, 4), subplots=True)

In [15]: plt.show()

카테고리별  값의 통계 집계

describe() 함수를 사용해도 되고, .agg() 함수를 사용하여 안에 원하는 집계 통계를 확인할 수도 있다.

In [6]: titanic[["Age", "Fare"]].describe()
Out[6]: 
              Age        Fare
count  714.000000  891.000000
mean    29.699118   32.204208
std     14.526497   49.693429
min      0.420000    0.000000
25%     20.125000    7.910400
50%     28.000000   14.454200
75%     38.000000   31.000000
max     80.000000  512.329200
In [7]: titanic.agg(
   ...:     {
   ...:         "Age": ["min", "max", "median", "skew"],
   ...:         "Fare": ["min", "max", "median", "mean"],
   ...:     }
   ...: )
   ...: 
Out[7]: 
              Age        Fare
min      0.420000    0.000000
max     80.000000  512.329200
median  28.000000   14.454200
skew     0.389108         NaN
mean          NaN   32.204208

 

그룹별 통계량 확인 시 아래 코드와 같이 DataFrame[ [ 그룹핑대상 컬럼, 그룹별로 보고싶은 컬럼] ].groupby.기술통계량()

**아래 코드 처럼 하면 결과값이 데이터프레임으로 추출된다.

순서는 1. 데이터를 그룹으로 분할 -> 각 그룹에 독립적으로 통계량 기능 적용 -> 결과를 데이터 구조로 결합

In [8]: titanic[["Sex", "Age"]].groupby("Sex").mean()
Out[8]: 
              Age
Sex              
female  27.915709
male    30.726645

컬럼을 굳이 정하지 않더라도 아래코드와 같이 그룹핑 후 기술통계량 함수 내의 인자로 numeric_only = True 를 기입하면 숫자형 데이터들의 통계량을 추출할 수 있다.

In [9]: titanic.groupby("Sex").mean(numeric_only=True)
Out[9]: 
        PassengerId  Survived    Pclass  ...     SibSp     Parch       Fare
Sex                                      ...                               
female   431.028662  0.742038  2.159236  ...  0.694268  0.649682  44.479818
male     454.147314  0.188908  2.389948  ...  0.429809  0.235702  25.523893

[2 rows x 7 columns]

위의 코드와 다르게 통계 결과를 낼 수 있다.

In [10]: titanic.groupby("Sex")["Age"].mean()
Out[10]: 
Sex
female    27.915709
male      30.726645
Name: Age, dtype: float64

그룹을 여러개 하기 위해서는 아래 코드와 같이 groupby함수안에 [A,B,C] 여러 컬럼을 넣어준다.

In [11]: titanic.groupby(["Sex", "Pclass"])["Fare"].mean()
Out[11]: 
Sex     Pclass
female  1         106.125798
        2          21.970121
        3          16.118810
male    1          67.226127
        2          19.741782
        3          12.661633
Name: Fare, dtype: float64

카테고리별 레코드 수 계산

각 범주별 레코드 수를 계산할 수 있는 value_counts() 함수

In [12]: titanic["Pclass"].value_counts()
Out[12]: 
Pclass
3    491
1    216
2    184
Name: count, dtype: int64


위 아래 동일
titanic.groupby("Pclass")["Pclass"].count()

 

REMEMBER
1. 데이터 입력시 index_col=0, parse_dates=True는 DataTime 타입을 바로 처리하기 위해
2. 시각화시 plot 인자로 subplots=True 시 컬럼별로 plot
3. decribe()함수로 집계 통계, agg()함수를 사용하여 원하는 통계 추출 가능
4. groupby함수 + 통계함수로 그룹별 집계 가능 , 여러 그룹으로 그루핑도 가능 함수 안에 ,(쉼표)로 여러 항목 기입
5. value_counts로 각 범주별로 레코드를 계산 가능

 

Comments