Ethan's Values
Pandas study - pandas 튜토리얼(4) 본문
앞으로는 모르고 있었던 내용들로 구성하여 작성하겠습니다.
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로 각 범주별로 레코드를 계산 가능
'Python' 카테고리의 다른 글
Pandas study - pandas 튜토리얼(6) (2) | 2023.10.19 |
---|---|
Pandas study - pandas 튜토리얼(5) (0) | 2023.10.19 |
Pandas study - pandas 튜토리얼(3) (2) | 2023.10.19 |
Pandas study - pandas 튜토리얼(2) (0) | 2023.10.19 |
Pandas study - pandas 튜토리얼(1) (0) | 2023.10.18 |