Reference
- DataManim (https://www.datamanim.com/dataset/99_pandas/pandasMain.html#)
- <파이썬 한권으로 끝내기>, 데싸라면▪빨간색 물고기▪자투리코드, 시대고시기획 시대교육
Pandas 사용 준비
!pip install pandas
참고 : 2023.06.03 - [data/빅데이터분석기사] - 분석환경 설정 (파이썬 + 주피터노트북 + pandas)
DataSet
롤 랭킹 데이터 : https://www.kaggle.com/datasnaek/league-of-legends
DataUrl = ‘https://raw.githubusercontent.com/Datamanim/pandas/main/lol.csv%E2%80%99
Question
✔ 데이터를 로드하라. 데이터는 \t을 기준으로 구분되어있다.
import pandas as pd
DataUrl = 'https://raw.githubusercontent.com/Datamanim/pandas/main/lol.csv'
df=pd.read_csv(DataUrl, sep='\t')
type(df)
pandas.core.frame.DataFrame
+ import pandas as pd : 약칭 설정
+ pd.read_csv(filepath, na_values='NA', encoding='euc-kr') : filepath의 csv 파일을 DataFrame 객체로 읽어오며, null 값이 빈칸이 아닌 어떠한 string 값으로 저장된 경우 이를 인식하기 위해 na_values를 사용. 데이터에 한국어가 포함된 경우 'euc-kr'로 인코딩.
✔ 데이터의 상위 5개 행을 출력하라
df.head(5)
5 rows × 61 columns
+ iris.head() : 컬럼명을 포함하여 처음 6줄을 출력. (데이터는 5줄)
+ iris.tail() : 컬럼명을 포함하여 마지막 6줄을 출력. (데이터는 5줄)
✔ 데이터의 행과 열의 갯수를 파악하라
print(df.shape)
print(df.shape[0])
print(df.shape[1])
(51490, 61)
51490
61
+ iris.shape : 데이터프레임의 크기를 반환하는 속성. (행의 개수, 열의 개수) 형태로 반환
✔ 전체 컬럼을 출력하라
Ans = df.columns
Ans
Index(['gameId', 'creationTime', 'gameDuration', 'seasonId', 'winner',
'firstBlood', 'firstTower', 'firstInhibitor', 'firstBaron',
'firstDragon', 'firstRiftHerald', 't1_champ1id', 't1_champ1_sum1',
't1_champ1_sum2', 't1_champ2id', 't1_champ2_sum1', 't1_champ2_sum2',
't1_champ3id', 't1_champ3_sum1', 't1_champ3_sum2', 't1_champ4id',
't1_champ4_sum1', 't1_champ4_sum2', 't1_champ5id', 't1_champ5_sum1',
't1_champ5_sum2', 't1_towerKills', 't1_inhibitorKills', 't1_baronKills',
't1_dragonKills', 't1_riftHeraldKills', 't1_ban1', 't1_ban2', 't1_ban3',
't1_ban4', 't1_ban5', 't2_champ1id', 't2_champ1_sum1', 't2_champ1_sum2',
't2_champ2id', 't2_champ2_sum1', 't2_champ2_sum2', 't2_champ3id',
't2_champ3_sum1', 't2_champ3_sum2', 't2_champ4id', 't2_champ4_sum1',
't2_champ4_sum2', 't2_champ5id', 't2_champ5_sum1', 't2_champ5_sum2',
't2_towerKills', 't2_inhibitorKills', 't2_baronKills', 't2_dragonKills',
't2_riftHeraldKills', 't2_ban1', 't2_ban2', 't2_ban3', 't2_ban4',
't2_ban5'],
dtype='object')
+ iris.columns : 컬럼명을 확인하거나 변경 가능
✔ 6번째 컬럼명을 출력하라
Ans = df.columns[5]
Ans
'firstBlood'
✔ 6번째 컬럼의 데이터 타입을 확인하라
Ans = df.iloc[:,5].dtype
Ans
dtype('int64')
+ iris.dtypes : 데이터프레임의 각 컬럼의 데이터 타입은 dtypes 속성을 통해 확인 가능
+ iloc : index번호로 특정 행, 열을 나눔 (index는 0부터 시작)
+ loc : 변수명으로 특정 행, 열을 나눔
✔ 데이터셋의 인덱스 구성은 어떤가
Ans = df.index
Ans
RangeIndex(start=0, stop=51490, step=1)
✔ 6번째 컬럼의 3번째 값은 무엇인가?
Ans = df.iloc[2,5]
Ans
2
DataSet
제주 날씨,인구에 따른 교통량데이터 : 출처 제주 데이터 허브
DataUrl = ‘https://raw.githubusercontent.com/Datamanim/pandas/main/Jeju.csv%E2%80%99
Question
✔ 데이터를 로드하라.
In [ ]:
import pandas as pd
DataUrl = 'https://raw.githubusercontent.com/Datamanim/pandas/main/Jeju.csv'
df = pd.read_csv(DataUrl, encoding='euc-kr')
type(df)
pandas.core.frame.DataFrame
✔ 데이터 마지막 3개행을 출력하라
Ans = df.tail(3)
Ans
id | 일자 | 시도명 | 읍면동명 | 거주인구 | 근무인구 | 방문인구 | 총 유동인구 | 평균 속도 | 평균 소요 시간 | 평균 기온 | 일강수량 | 평균 풍속 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
9618 | 32066 | 2020-04-30 | 제주시 | 도두동 | 28397.481 | 3144.895 | 84052.697 | 115595.073 | 41.053 | 29.421 | 20.3 | 0.0 | 3.0 |
9619 | 32067 | 2020-04-30 | 서귀포시 | 안덕면 | 348037.846 | 29106.286 | 251129.660 | 628273.792 | 46.595 | 49.189 | 17.6 | 0.0 | 3.5 |
9620 | 32068 | 2020-04-30 | 제주시 | 연동 | 1010643.372 | 65673.477 | 447622.068 | 1523938.917 | 40.863 | 27.765 | 14.1 | 0.0 | 4.8 |
✔ 수치형 변수를 가진 컬럼을 출력하라
Ans = df.select_dtypes(exclude=object).columns
# OR
import numpy as np
Ans = df.select_dtypes(include=[np.number]).columns
Index(['id', '거주인구', '근무인구', '방문인구', '총 유동인구', '평균 속도', '평균 소요 시간', '평균 기온',
'일강수량', '평균 풍속'],
dtype='object')
+ iris.select_dtypes() : 특정 데이터 타입을 선택할 수 있는 기능. object는 문자열 타입을 나타냄. np.number는 숫자형 데이터 타입을 나타내는 NumPy의 타입임
✔ 범주형 변수를 가진 컬럼을 출력하라
Ans = df.select_dtypes(include=object).columns
Ans
Index(['일자', '시도명', '읍면동명'], dtype='object')
✔ 각 컬럼의 결측치 숫자를 파악하라
Ans = df.isnull().sum()
Ans
id 0
일자 0
시도명 0
읍면동명 0
거주인구 0
근무인구 0
방문인구 0
총 유동인구 0
평균 속도 0
평균 소요 시간 0
평균 기온 0
일강수량 0
평균 풍속 0
dtype: int64
+ iris.isnull() : 각 요소가 결측치인지 여부를 나타내는 dataframe을 반환하며, sum() 메서드를 추가로 사용해 true값(결측치)의 개수를 컬럼별로 합산함
✔ 각 컬럼의 데이터수, 데이터타입을 한번에 확인하라
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9621 entries, 0 to 9620
Data columns (total 13 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 id 9621 non-null int64
1 일자 9621 non-null object
2 시도명 9621 non-null object
3 읍면동명 9621 non-null object
4 거주인구 9621 non-null float64
5 근무인구 9621 non-null float64
6 방문인구 9621 non-null float64
7 총 유동인구 9621 non-null float64
8 평균 속도 9621 non-null float64
9 평균 소요 시간 9621 non-null float64
10 평균 기온 9621 non-null float64
11 일강수량 9621 non-null float64
12 평균 풍속 9621 non-null float64
dtypes: float64(9), int64(1), object(3)
memory usage: 977.3+ KB
+ iris.info() : 데이터의 요약 정보를 출력하여 확인 가능. 각 컬럼의 이름, 데이터 타입, 결측치의 유무와 개수 등 확인 가능. dataframe의 전체적인 구조와 메모리 사용량 보여줌
✔ 각 수치형 변수의 분포(사분위, 평균, 표준편차, 최대 , 최소)를 확인하라
Ans = df.describe()
Ans
id | 거주인구 | 근무인구 | 방문인구 | 총 유동인구 | 평균 속도 | 평균 소요 시간 | 평균 기온 | 일강수량 | 평균 풍속 | |
---|---|---|---|---|---|---|---|---|---|---|
count | 9621.000000 | 9.621000e+03 | 9621.000000 | 9621.000000 | 9.621000e+03 | 9621.000000 | 9621.000000 | 9621.000000 | 9621.000000 | 9621.000000 |
mean | 27258.000000 | 3.174315e+05 | 35471.201510 | 195889.561802 | 5.487922e+05 | 41.109084 | 37.215873 | 13.550828 | 6.972426 | 2.753171 |
std | 2777.487804 | 2.982079e+05 | 40381.214775 | 140706.090325 | 4.608802e+05 | 8.758631 | 12.993786 | 7.745515 | 27.617260 | 1.498538 |
min | 22448.000000 | 9.305552e+03 | 1407.936000 | 11538.322000 | 2.225181e+04 | 24.333000 | 12.667000 | -9.600000 | 0.000000 | 0.000000 |
25% | 24853.000000 | 9.539939e+04 | 12074.498000 | 99632.153000 | 2.216910e+05 | 34.250000 | 27.889000 | 7.600000 | 0.000000 | 1.700000 |
50% | 27258.000000 | 2.221105e+05 | 21960.928000 | 152805.335000 | 3.866935e+05 | 39.640000 | 34.500000 | 13.400000 | 0.000000 | 2.400000 |
75% | 29663.000000 | 4.106671e+05 | 40192.032000 | 236325.109000 | 6.406918e+05 | 49.105000 | 46.176000 | 19.700000 | 1.500000 | 3.400000 |
max | 32068.000000 | 1.364504e+06 | 263476.965000 | 723459.209000 | 2.066484e+06 | 103.000000 | 172.200000 | 30.400000 | 587.500000 | 13.333000 |
+ iris.describe() : 기술 통계량 제공. 평균, 표준편차, 최솟값, 최댓값, 중앙값 등 확인 가능.
✔ 거주인구 컬럼의 값들을 출력하라
Ans = df['거주인구']
Ans
0 32249.987
1 213500.997
2 1212382.218
3 33991.653
4 155036.925
...
9616 228260.005
9617 459959.064
9618 28397.481
9619 348037.846
9620 1010643.372
Name: 거주인구, Length: 9621, dtype: float64
✔ 평균 속도 컬럼의 4분위 범위(IQR) 값을 구하여라
Ans = df['평균 속도'].quantile(0.75) - df['평균 속도'].quantile(0.25)
Ans
14.854999999999997
+ quantile(q) : 주어진 백분위수에 해당하는 값을 계산. q는 0에서 1사이의 값을 가짐. 즉 0.75는 75번째 백분위수.
+ IQR : 데이터의 중간 50% 범위를 나타내는 통계적 지표. IQR = Q3(0.75) - Q1(0.25)
✔ 읍면동명 컬럼의 유일값 갯수를 출력하라
Ans = df.읍면동명.nunique()
Ans
41
+ iris['컬럼명'].nunique() : 유일값의 개수를 반환
✔ 읍면동명 컬럼의 유일값을 모두 출력하라
Ans = df.읍면동명.unique()
Ans
array(['도두동', '외도동', '이도2동', '일도1동', '대천동', '서홍동', '한경면', '송산동', '조천읍',
'일도2동', '영천동', '예래동', '대륜동', '삼도1동', '이호동', '건입동', '중앙동', '삼양동',
'삼도2동', '이도1동', '남원읍', '대정읍', '정방동', '효돈동', '아라동', '한림읍', '구좌읍',
'용담1동', '오라동', '화북동', '연동', '표선면', '중문동', '성산읍', '안덕면', '천지동',
'노형동', '동홍동', '용담2동', '봉개동', '애월읍'], dtype=object)
+ iris['컬럼명'].unique() : 특정 컬럼에 있는 유일한 값들을 반환
'🥇 certification logbook' 카테고리의 다른 글
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 05_Time_Series (0) | 2023.06.13 |
---|---|
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 04_Apply , Map (0) | 2023.06.13 |
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 03_Grouping (0) | 2023.06.13 |
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 02 Filtering & Sorting (0) | 2023.06.09 |
[ADsP] 비지도학습 - 자기조직화지도(SOM) & 다차원척도법(MDS) (0) | 2023.06.08 |
앙상블 (Ensemble) - 랜덤 포레스트 분류 (Random Forest Classifier) (0) | 2023.06.07 |
다중 회귀 (Multiple Regression Model) (0) | 2023.06.07 |
다항 회귀 (Polynomial Regression Model) (0) | 2023.06.06 |