Pandas
- 데이터 처리와 분석을 위한 라이브러리
- 행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있음
- 대용량의 데이터들을 처리하는데 매우 편리
pandas 자료구조
- Series : 1차원
- DataFrame: 2차원
- Panel: 3차원
# List -> Series
seires = pd.Series([1, 2, 3, 4])
# Series -> DataFrame
pd.DataFrame(seires)
데이터 import
import pandas as pd
# 데이터 로드
df = pd.read_csv(url)
# 구분자가 있는 데이터 로드
df = pd.read_csv(url, sep='\t')
# 한글 컬럼있는 데이터 로드
df = pd.read_csv(url, encoding='euc-kr')
데이터 살펴보기
# 각 컬럼의 데이터수, 데이터타입을 한번에 확인
df.info()
# 통계정보 확인 - 개수, 평균, 표준편차, 최소, 사분위값, 최대
df.describe()
# 오브젝트 포함시 - 개수, unique한 값 개수, 빈도수 높은것, 그 개수
df.describe(include=object)
# 상위 5개 행 출력
df.head(5)
# 하위 5개 행 출력
df.tail(5)
# 데이터의 행과 열의 갯수
df.shape() # (9621, 13)
# 데이터의 행 갯수
df.shape[0] # 9621
# 데이터의 열 갯수
df.shape[1] # 13
# 전체 컬럼 출력
df.columns
# 6번째 컬럼명 출럭
df.columns[5]
# 6번째 컬럼의 데이터 타입
df.iloc[:,5].dtype # dtype('float64')
# 데이터셋의 인덱스 구성
df.index
# 6번째 컬럼의 3번째 값
df.iloc[2,5]
# 수치형 변수를 가진 컬럼 출력
df.select_dtypes(exclude=object).columns
# 범주형 변수를 가진 컬럼 출력
df.select_dtypes(include=object).columns
# 각 컬럼의 결측치 숫자 파악
df.isnull().sum()
```
id 0
일자 0
시도명 0
읍면동명 0
거주인구 0
근무인구 0
방문인구 0
총 유동인구 0
평균 속도 0
평균 소요 시간 0
평균 기온 0
일강수량 0
평균 풍속 0
dtype: int64
```
! 메소드 기억 안 날 때
: dir() 로 메소드 찾아보기
! 파라미터 기억 안 날 때
: 주피터 노트북은 () 안에 커서 놓고 shift + tab
: 그 외 help()

df['거주인구']
# 객체의 행이나 열의 총 합계를 구하는 메서드
df['거주인구'].sum()
# 행 개수
df['거주인구'].count()
# 평균
df['거주인구'].mean()
# 최대
df['거주인구'].max()
# 최소
df['거주인구'].min()
# 분산
df['거주인구'].var()
# 표준편차
df['거주인구'].std()

4분위 수 구하는 방법 quantile()
quantile은 수치 데이터를 크기 순서로 정렬 했을 때, 0% ~ 100% (0 ~ 1) 위치에 해당하는 숫자를 리턴
Q1 = 25%
Q2 = 50%
Q3 = 75%
Q4 = 100%
를 파라미터로 주면 된다.
# 평균 속도 컬럼의 4분위 범위(IQR) 값
# 사분위수 범위 Q3 - Q1
# 최소값 | 1사분위수 | 2사분위수(중앙값) | 3사분위수 | 최대값
df['평균 속도'].quantile(0.75) - df['평균 속도'].quantile(0.25)

# 컬럼의 유일값 갯수 출력
df['읍면동명'].nunique()
# 컬럼의 유일값 모두 출력
df['읍면동명'].unique()
데이터 정렬
# 인덱스로 내림차순 정렬
df.sort_index(ascending=False)
# 특정 컬럼 오름차순 정렬
df.sort_values(by='컬럼명')
# 특정 컬럼 내림차순 정렬
df.sort_values(by='컬럼명',ascending=False)
# 특정 컬럼의 NaN을 가장 위에 정렬
df.sort_values(by='컬럼명', na_position='first')
# n개로 정렬
df.sort_values(by=['평균 속도', '평균 기온'], ascending=[False, True])

데이터 필터링
# 선택한 컬럼의 모든 행
df.loc[:,컬럼리스트]
# 선택한 컬럼의 3 ~ 8 행
df.loc[3:8:,['quantity','item_name']]
# 0 ~ 2 열의 3 ~ 8 행
df.iloc[3:8:, 0:2]

Boolean indexing
# 결과가 True, False로 나옴
df['quantity']==3
# quantity가 3인 데이터, True인 애들만 나옴
df[df['quantity']==3].head(3)
# quantity가 3인 선택한 열(quantity, item_name)의 데이터
df[df['quantity']==3][['quantity', 'item_name']].head(3)
# quantity컬럼 값이 3인 데이터를 추출하여 index를 0부터 정렬
df[df.quantity==3].head(3).reset_index(drop=True)


Indexing options with DataFrame
Type | Notes |
df[val] | Select single column or sequence of columns from the DataFrame |
df.loc[val] | Selects single row or subset of rows from the DataFrame by label |
df.loc[:, val] | Selects single column or subset of columns by label |
df.loc[val1, val2] | Select both rows and columns by label |
df.iloc[where] | Selects single row or subset of rows from the DataFrame by integer position |
df.iloc[:, where] | Selects single column or subset of columns by integer position |
df.iloc[where_i, where_j] | Select both rows and columns by integer position |
df.at[label_i, label_j] | Select a single scalar value by row and column label |
df.iat[i, j] | Select a single scalar value by row and column position (integers) |
get_value(), set_value() | Select single value by row and column label |
5 장 Pandas | 파이썬 프로그래밍 기초
Pandas 데이터 처리와 분석을 위한 라이브러리 행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있음 대용량의 데이터들을 처리하는데 매우 편리 pandas 자료구조 Series: 1차원 DataFrame: 2차원 Panel:
bigdata.dongguk.ac.kr
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/Jeju.csv', encoding='euc-kr')
df
id | 일자 | 시도명 | 읍면동명 | 거주인구 | 근무인구 | 방문인구 | 총 유동인구 | 평균 속도 | 평균 소요 시간 | 평균 기온 | 일강수량 | 평균 풍속 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 22448 | 2018-01-01 | 제주시 | 도두동 | 32249.987 | 3418.266 | 102709.092 | 138377.345 | 39.556 | 29.167 | 5.0 | 0.0 | 2.50 |
1 | 22449 | 2018-01-01 | 제주시 | 외도동 | 213500.997 | 10341.172 | 112692.789 | 336534.958 | 32.900 | 30.900 | 5.0 | 0.0 | 2.50 |
2 | 22450 | 2018-01-01 | 제주시 | 이도2동 | 1212382.218 | 96920.834 | 541194.481 | 1850497.533 | 29.538 | 35.692 | 2.9 | 0.0 | 2.40 |
3 | 22451 | 2018-01-01 | 제주시 | 일도1동 | 33991.653 | 6034.253 | 72155.919 | 112181.825 | 30.000 | 23.500 | 2.9 | 0.0 | 2.40 |
4 | 22452 | 2018-01-01 | 서귀포시 | 대천동 | 155036.925 | 9403.969 | 150882.409 | 315323.303 | 41.583 | 14.375 | 5.1 | 0.0 | 2.30 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
9616 | 32064 | 2020-04-30 | 서귀포시 | 표선면 | 228260.005 | 16891.732 | 152832.449 | 397984.186 | 44.514 | 34.054 | 18.1 | 0.0 | 4.70 |
9617 | 32065 | 2020-04-30 | 제주시 | 한림읍 | 459959.064 | 26007.122 | 249700.419 | 735666.605 | 48.609 | 61.377 | 18.0 | 0.0 | 4.35 |
9618 | 32066 | 2020-04-30 | 제주시 | 도두동 | 28397.481 | 3144.895 | 84052.697 | 115595.073 | 41.053 | 29.421 | 20.3 | 0.0 | 3.00 |
9619 | 32067 | 2020-04-30 | 서귀포시 | 안덕면 | 348037.846 | 29106.286 | 251129.660 | 628273.792 | 46.595 | 49.189 | 17.6 | 0.0 | 3.50 |
9620 | 32068 | 2020-04-30 | 제주시 | 연동 | 1010643.372 | 65673.477 | 447622.068 | 1523938.917 | 40.863 | 27.765 | 14.1 | 0.0 | 4.80 |
9621 rows × 13 columns
df.columns
Index(['id', '일자', '시도명', '읍면동명', '거주인구', '근무인구', '방문인구', '총 유동인구', '평균 속도',
'평균 소요 시간', '평균 기온', '일강수량', '평균 풍속'],
dtype='object')
df['일자']
0 2018-01-01
1 2018-01-01
2 2018-01-01
3 2018-01-01
4 2018-01-01
...
9616 2020-04-30
9617 2020-04-30
9618 2020-04-30
9619 2020-04-30
9620 2020-04-30
Name: 일자, Length: 9621, dtype: object
df.loc[1]
id 22449
일자 2018-01-01
시도명 제주시
읍면동명 외도동
거주인구 213500.997
근무인구 10341.172
방문인구 112692.789
총 유동인구 336534.958
평균 속도 32.9
평균 소요 시간 30.9
평균 기온 5.0
일강수량 0.0
평균 풍속 2.5
Name: 1, dtype: object
df.loc[:, '일자']
0 2018-01-01
1 2018-01-01
2 2018-01-01
3 2018-01-01
4 2018-01-01
...
9616 2020-04-30
9617 2020-04-30
9618 2020-04-30
9619 2020-04-30
9620 2020-04-30
Name: 일자, Length: 9621, dtype: object
df.loc[9619, '일자']
'2020-04-30'
df.iloc[1]
id 22449
일자 2018-01-01
시도명 제주시
읍면동명 외도동
거주인구 213500.997
근무인구 10341.172
방문인구 112692.789
총 유동인구 336534.958
평균 속도 32.9
평균 소요 시간 30.9
평균 기온 5.0
일강수량 0.0
평균 풍속 2.5
Name: 1, dtype: object
df.iloc[0, 2]
'제주시'
df.at[10,'시도명']
'서귀포시'
df.iat[10, 2]
'서귀포시'
'자격증 > 빅데이터분석기사' 카테고리의 다른 글
[빅데이터분석기사] 작업형1 - 시계열 데이터 2 (0) | 2024.06.10 |
---|---|
[빅데이터분석기사] 작업형1 - 시계열 데이터 1 (0) | 2024.06.10 |
[빅데이터분석기사] 작업형1 - 판다스 기초 3 (0) | 2024.06.10 |
[빅데이터분석기사] 작업형1 - 판다스 기초 2 (0) | 2024.06.10 |
[빅데이터분석기사] 작업형 1 - 판다스 기초 1 (0) | 2024.06.10 |
Pandas
- 데이터 처리와 분석을 위한 라이브러리
- 행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있음
- 대용량의 데이터들을 처리하는데 매우 편리
pandas 자료구조
- Series : 1차원
- DataFrame: 2차원
- Panel: 3차원
# List -> Series
seires = pd.Series([1, 2, 3, 4])
# Series -> DataFrame
pd.DataFrame(seires)
데이터 import
import pandas as pd
# 데이터 로드
df = pd.read_csv(url)
# 구분자가 있는 데이터 로드
df = pd.read_csv(url, sep='\t')
# 한글 컬럼있는 데이터 로드
df = pd.read_csv(url, encoding='euc-kr')
데이터 살펴보기
# 각 컬럼의 데이터수, 데이터타입을 한번에 확인
df.info()
# 통계정보 확인 - 개수, 평균, 표준편차, 최소, 사분위값, 최대
df.describe()
# 오브젝트 포함시 - 개수, unique한 값 개수, 빈도수 높은것, 그 개수
df.describe(include=object)
# 상위 5개 행 출력
df.head(5)
# 하위 5개 행 출력
df.tail(5)
# 데이터의 행과 열의 갯수
df.shape() # (9621, 13)
# 데이터의 행 갯수
df.shape[0] # 9621
# 데이터의 열 갯수
df.shape[1] # 13
# 전체 컬럼 출력
df.columns
# 6번째 컬럼명 출럭
df.columns[5]
# 6번째 컬럼의 데이터 타입
df.iloc[:,5].dtype # dtype('float64')
# 데이터셋의 인덱스 구성
df.index
# 6번째 컬럼의 3번째 값
df.iloc[2,5]
# 수치형 변수를 가진 컬럼 출력
df.select_dtypes(exclude=object).columns
# 범주형 변수를 가진 컬럼 출력
df.select_dtypes(include=object).columns
# 각 컬럼의 결측치 숫자 파악
df.isnull().sum()
```
id 0
일자 0
시도명 0
읍면동명 0
거주인구 0
근무인구 0
방문인구 0
총 유동인구 0
평균 속도 0
평균 소요 시간 0
평균 기온 0
일강수량 0
평균 풍속 0
dtype: int64
```
! 메소드 기억 안 날 때
: dir() 로 메소드 찾아보기
! 파라미터 기억 안 날 때
: 주피터 노트북은 () 안에 커서 놓고 shift + tab
: 그 외 help()

df['거주인구']
# 객체의 행이나 열의 총 합계를 구하는 메서드
df['거주인구'].sum()
# 행 개수
df['거주인구'].count()
# 평균
df['거주인구'].mean()
# 최대
df['거주인구'].max()
# 최소
df['거주인구'].min()
# 분산
df['거주인구'].var()
# 표준편차
df['거주인구'].std()

4분위 수 구하는 방법 quantile()
quantile은 수치 데이터를 크기 순서로 정렬 했을 때, 0% ~ 100% (0 ~ 1) 위치에 해당하는 숫자를 리턴
Q1 = 25%
Q2 = 50%
Q3 = 75%
Q4 = 100%
를 파라미터로 주면 된다.
# 평균 속도 컬럼의 4분위 범위(IQR) 값
# 사분위수 범위 Q3 - Q1
# 최소값 | 1사분위수 | 2사분위수(중앙값) | 3사분위수 | 최대값
df['평균 속도'].quantile(0.75) - df['평균 속도'].quantile(0.25)

# 컬럼의 유일값 갯수 출력
df['읍면동명'].nunique()
# 컬럼의 유일값 모두 출력
df['읍면동명'].unique()
데이터 정렬
# 인덱스로 내림차순 정렬
df.sort_index(ascending=False)
# 특정 컬럼 오름차순 정렬
df.sort_values(by='컬럼명')
# 특정 컬럼 내림차순 정렬
df.sort_values(by='컬럼명',ascending=False)
# 특정 컬럼의 NaN을 가장 위에 정렬
df.sort_values(by='컬럼명', na_position='first')
# n개로 정렬
df.sort_values(by=['평균 속도', '평균 기온'], ascending=[False, True])

데이터 필터링
# 선택한 컬럼의 모든 행
df.loc[:,컬럼리스트]
# 선택한 컬럼의 3 ~ 8 행
df.loc[3:8:,['quantity','item_name']]
# 0 ~ 2 열의 3 ~ 8 행
df.iloc[3:8:, 0:2]

Boolean indexing
# 결과가 True, False로 나옴
df['quantity']==3
# quantity가 3인 데이터, True인 애들만 나옴
df[df['quantity']==3].head(3)
# quantity가 3인 선택한 열(quantity, item_name)의 데이터
df[df['quantity']==3][['quantity', 'item_name']].head(3)
# quantity컬럼 값이 3인 데이터를 추출하여 index를 0부터 정렬
df[df.quantity==3].head(3).reset_index(drop=True)


Indexing options with DataFrame
Type | Notes |
df[val] | Select single column or sequence of columns from the DataFrame |
df.loc[val] | Selects single row or subset of rows from the DataFrame by label |
df.loc[:, val] | Selects single column or subset of columns by label |
df.loc[val1, val2] | Select both rows and columns by label |
df.iloc[where] | Selects single row or subset of rows from the DataFrame by integer position |
df.iloc[:, where] | Selects single column or subset of columns by integer position |
df.iloc[where_i, where_j] | Select both rows and columns by integer position |
df.at[label_i, label_j] | Select a single scalar value by row and column label |
df.iat[i, j] | Select a single scalar value by row and column position (integers) |
get_value(), set_value() | Select single value by row and column label |
5 장 Pandas | 파이썬 프로그래밍 기초
Pandas 데이터 처리와 분석을 위한 라이브러리 행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있음 대용량의 데이터들을 처리하는데 매우 편리 pandas 자료구조 Series: 1차원 DataFrame: 2차원 Panel:
bigdata.dongguk.ac.kr
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/Jeju.csv', encoding='euc-kr')
df
id | 일자 | 시도명 | 읍면동명 | 거주인구 | 근무인구 | 방문인구 | 총 유동인구 | 평균 속도 | 평균 소요 시간 | 평균 기온 | 일강수량 | 평균 풍속 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 22448 | 2018-01-01 | 제주시 | 도두동 | 32249.987 | 3418.266 | 102709.092 | 138377.345 | 39.556 | 29.167 | 5.0 | 0.0 | 2.50 |
1 | 22449 | 2018-01-01 | 제주시 | 외도동 | 213500.997 | 10341.172 | 112692.789 | 336534.958 | 32.900 | 30.900 | 5.0 | 0.0 | 2.50 |
2 | 22450 | 2018-01-01 | 제주시 | 이도2동 | 1212382.218 | 96920.834 | 541194.481 | 1850497.533 | 29.538 | 35.692 | 2.9 | 0.0 | 2.40 |
3 | 22451 | 2018-01-01 | 제주시 | 일도1동 | 33991.653 | 6034.253 | 72155.919 | 112181.825 | 30.000 | 23.500 | 2.9 | 0.0 | 2.40 |
4 | 22452 | 2018-01-01 | 서귀포시 | 대천동 | 155036.925 | 9403.969 | 150882.409 | 315323.303 | 41.583 | 14.375 | 5.1 | 0.0 | 2.30 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
9616 | 32064 | 2020-04-30 | 서귀포시 | 표선면 | 228260.005 | 16891.732 | 152832.449 | 397984.186 | 44.514 | 34.054 | 18.1 | 0.0 | 4.70 |
9617 | 32065 | 2020-04-30 | 제주시 | 한림읍 | 459959.064 | 26007.122 | 249700.419 | 735666.605 | 48.609 | 61.377 | 18.0 | 0.0 | 4.35 |
9618 | 32066 | 2020-04-30 | 제주시 | 도두동 | 28397.481 | 3144.895 | 84052.697 | 115595.073 | 41.053 | 29.421 | 20.3 | 0.0 | 3.00 |
9619 | 32067 | 2020-04-30 | 서귀포시 | 안덕면 | 348037.846 | 29106.286 | 251129.660 | 628273.792 | 46.595 | 49.189 | 17.6 | 0.0 | 3.50 |
9620 | 32068 | 2020-04-30 | 제주시 | 연동 | 1010643.372 | 65673.477 | 447622.068 | 1523938.917 | 40.863 | 27.765 | 14.1 | 0.0 | 4.80 |
9621 rows × 13 columns
df.columns
Index(['id', '일자', '시도명', '읍면동명', '거주인구', '근무인구', '방문인구', '총 유동인구', '평균 속도',
'평균 소요 시간', '평균 기온', '일강수량', '평균 풍속'],
dtype='object')
df['일자']
0 2018-01-01
1 2018-01-01
2 2018-01-01
3 2018-01-01
4 2018-01-01
...
9616 2020-04-30
9617 2020-04-30
9618 2020-04-30
9619 2020-04-30
9620 2020-04-30
Name: 일자, Length: 9621, dtype: object
df.loc[1]
id 22449
일자 2018-01-01
시도명 제주시
읍면동명 외도동
거주인구 213500.997
근무인구 10341.172
방문인구 112692.789
총 유동인구 336534.958
평균 속도 32.9
평균 소요 시간 30.9
평균 기온 5.0
일강수량 0.0
평균 풍속 2.5
Name: 1, dtype: object
df.loc[:, '일자']
0 2018-01-01
1 2018-01-01
2 2018-01-01
3 2018-01-01
4 2018-01-01
...
9616 2020-04-30
9617 2020-04-30
9618 2020-04-30
9619 2020-04-30
9620 2020-04-30
Name: 일자, Length: 9621, dtype: object
df.loc[9619, '일자']
'2020-04-30'
df.iloc[1]
id 22449
일자 2018-01-01
시도명 제주시
읍면동명 외도동
거주인구 213500.997
근무인구 10341.172
방문인구 112692.789
총 유동인구 336534.958
평균 속도 32.9
평균 소요 시간 30.9
평균 기온 5.0
일강수량 0.0
평균 풍속 2.5
Name: 1, dtype: object
df.iloc[0, 2]
'제주시'
df.at[10,'시도명']
'서귀포시'
df.iat[10, 2]
'서귀포시'
'자격증 > 빅데이터분석기사' 카테고리의 다른 글
[빅데이터분석기사] 작업형1 - 시계열 데이터 2 (0) | 2024.06.10 |
---|---|
[빅데이터분석기사] 작업형1 - 시계열 데이터 1 (0) | 2024.06.10 |
[빅데이터분석기사] 작업형1 - 판다스 기초 3 (0) | 2024.06.10 |
[빅데이터분석기사] 작업형1 - 판다스 기초 2 (0) | 2024.06.10 |
[빅데이터분석기사] 작업형 1 - 판다스 기초 1 (0) | 2024.06.10 |