일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 재귀
- 국민대학교
- C++
- programmers
- 프로그래머스
- LSTM
- GIT
- Heap
- 운영체제
- 머신 러닝
- db
- Python
- SQL
- Stack
- googleapiclient
- 회귀
- python3
- 국민대
- Seq2Seq
- instaloader
- gan
- OS
- 파이썬
- 스택
- machine learning
- kmu
- Regression
- 데이터베이스
- PANDAS
- 정렬
- Today
- Total
정리 노트
3일차(2022/07/06) 본문
오늘은 다른 모듈 pandas에 대해 배웠습니다. numpy 모듈은 학과 시간에 살짝 다뤘던 경험이 있었지만 pandas 모듈은 처음 사용해본 것이기 때문에 배웠던 내용들의 거의 모든 것이 신기했습니다.
pandas로 데이터 다루기
1차원 데이터 - Series
Series는 1차원의 labled array입니다. 처음 이 정의를 접했을 때 '이게 리스트와 dict를 합친 건가?' 생각이 들었습니다.
Series는 기존 파이썬의 리스트와 dict를 가지고 생성할 수 있습니다.
>>> import pandas as pd
>>> s = pd.Series([1, 4, 9, 16, 25, 36])
>>> s
0 1
1 4
2 9
3 16
4 25
5 36
dtype: int64
>>> t = pd.Series({'one':1, 'two':2, 'three':3, 'four':4, 'five':5})
>>> t
one 1
two 2
three 3
four 4
five 5
dtype: int64
이 Series는 실제로 numpy.ndarray랑 파이썬의 dict와 유사하게 사용할 수 있습니다.
2차원 데이터 - dataframe
DataFrame은 2차원의 labled table입니다. DataFrame을 리스트를 이용해 생성할 수도 있지만 dict을 이용하는 게 더 편합니다.
>>> import pandas as pd
>>> info = {'grade': ['A', 'B', 'C', 'D', 'F'], 'min_score': [90, 80, 70, 60, 0]}
>>> info
{'grade': ['A', 'B', 'C', 'D', 'F'], 'min_score': [90, 80, 70, 60, 0]}
>>> df = pd.DataFrame(info)
>>> df
grade min_score
0 A 90
1 B 80
2 C 70
3 D 60
4 F 0
CSV 파일을 DataFrame으로
실제로 많은 곳에서 CSV 형식을 사용하고 있습니다. pandas는 이 CSV 파일을 읽어올 수 있는 함수를 제공합니다. 밑의 예시에서 사용하는 CSV 파일은 아래의 사이트에서 다운로드를 하였습니다.
https://www.kaggle.com/datasets/neuromusic/avocado-prices
Avocado Prices
Historical data on avocado prices and sales volume in multiple US markets
www.kaggle.com
>>> avocado = pd.read_csv("/home/user/다운로드/archive/avocado.csv")
>>> avocado
Unnamed: 0 Date AveragePrice Total Volume 4046 4225 4770 Total Bags Small Bags Large Bags XLarge Bags type year region
0 0 2015-12-27 1.33 64236.62 1036.74 54454.85 48.16 8696.87 8603.62 93.25 0.0 conventional 2015 Albany
1 1 2015-12-20 1.35 54876.98 674.28 44638.81 58.33 9505.56 9408.07 97.49 0.0 conventional 2015 Albany
2 2 2015-12-13 0.93 118220.22 794.70 109149.67 130.50 8145.35 8042.21 103.14 0.0 conventional 2015 Albany
3 3 2015-12-06 1.08 78992.15 1132.00 71976.41 72.58 5811.16 5677.40 133.76 0.0 conventional 2015 Albany
4 4 2015-11-29 1.28 51039.60 941.48 43838.39 75.78 6183.95 5986.26 197.69 0.0 conventional 2015 Albany
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
18244 7 2018-02-04 1.63 17074.83 2046.96 1529.20 0.00 13498.67 13066.82 431.85 0.0 organic 2018 WestTexNewMexico
18245 8 2018-01-28 1.71 13888.04 1191.70 3431.50 0.00 9264.84 8940.04 324.80 0.0 organic 2018 WestTexNewMexico
18246 9 2018-01-21 1.87 13766.76 1191.92 2452.79 727.94 9394.11 9351.80 42.31 0.0 organic 2018 WestTexNewMexico
18247 10 2018-01-14 1.93 16205.22 1527.63 2981.04 727.01 10969.54 10919.54 50.00 0.0 organic 2018 WestTexNewMexico
18248 11 2018-01-07 1.62 17489.58 2894.77 2356.13 224.53 12014.15 11988.14 26.01 0.0 organic 2018 WestTexNewMexico
[18249 rows x 14 columns]
Pandas로 CSV 파일 갖고 놀기
pandas에서는 이 CSV 파일을 이리저리 다룰 수 있도록 여러 함수들을 제공합니다. 여기서 소개하는 함수는 일단 3개만 소개합니다.
함수 | 설명 |
head(n) | 처음 n개의 데이터를 참조 |
tail(n) | 마지막 n개의 데이터를 참조 |
groupby(by=dataframe['column_name']) | dataframe의 'column_name'을 기준으로 묶는 함수(SQL의 GROUP BY와 유사) |
사실 groupby 함수 같은 경우는 여러 단계를 거쳐야 합니다. groupby 함수를 통해 반환되는 것은 기준 컬럼을 기준으로 나눠지기만 한 객체이지 통계 함수까지 적용된 객체가 아니기 때문입니다. 따라서 눈에 보이는 출력물을 얻으려면 통계 함수를 사용해야 합니다.(sum(), mean(), median() 등...)
>>> avocado['Total Bags'].groupby(by=avocado['region'])
<pandas.core.groupby.generic.SeriesGroupBy object at 0x7fa5dce805b0>
>>> avocado['Total Bags'].groupby(by=avocado['region']).mean()
region
Albany 7.929747e+03
Atlanta 8.449856e+04
BaltimoreWashington 1.044561e+05
Boise 1.597459e+04
Boston 6.359609e+04
... ...
Syracuse 1.240363e+04
Tampa 5.768252e+04
TotalUS 4.847931e+06
West 1.086017e+06
WestTexNewMexico 1.053627e+05
Name: Total Bags, dtype: float64
내용이 너무 많아서 제가 임의로 중략했지, 실제로 실행하면 모든 결과가 다 출력됩니다.
특정 컬럼의 모든 정보를 조회하려면 dataframe['column_name'] 또는 dataframe.column_name 형식으로 접근할 수 있습니다.
특정 열의 모든 정보를 조회하려면 dataframe.loc[row, col] 형식으로 접근할 수 있습니다. 만약 row, col을 숫자 인덱스로 사용하고 싶은 경우, dataframe.iloc[row_idx, col_idx] 형식으로 사용하면 됩니다.
>>> avocado['year']
0 2015
1 2015
2 2015
3 2015
4 2015
...
18244 2018
18245 2018
18246 2018
18247 2018
18248 2018
Name: year, Length: 18249, dtype: int64
>>> avocado.loc[7]
Unnamed: 0 7
Date 2015-11-08
AveragePrice 0.98
Total Volume 109428.33
4046 703.75
4225 101815.36
4770 80.0
Total Bags 6829.22
Small Bags 6266.85
Large Bags 562.37
XLarge Bags 0.0
type conventional
year 2015
region Albany
Name: 7, dtype: object
>>> avocado.loc[7, 'AveragePrice']
0.98
>>> avocado.iloc[7, 2]
0.98
물론 데이터에 접근할 때 인덱스만이 아닌 조건을 이용해서 접근할 수도 있습니다.
>>> avocado['AveragePrice'] > 1.3
0 True
1 True
2 False
3 False
4 False
...
18244 True
18245 True
18246 True
18247 True
18248 True
Name: AveragePrice, Length: 18249, dtype: bool
>>> avocado[avocado['AveragePrice'] > 1.3]
Unnamed: 0 Date AveragePrice Total Volume 4046 4225 4770 Total Bags Small Bags Large Bags XLarge Bags type year region
0 0 2015-12-27 1.33 64236.62 1036.74 54454.85 48.16 8696.87 8603.62 93.25 0.0 conventional 2015 Albany
1 1 2015-12-20 1.35 54876.98 674.28 44638.81 58.33 9505.56 9408.07 97.49 0.0 conventional 2015 Albany
12 12 2015-10-04 1.31 61007.10 2268.32 49880.67 101.36 8756.75 8379.98 376.77 0.0 conventional 2015 Albany
14 14 2015-09-20 1.33 69759.01 1028.03 59313.12 150.50 9267.36 8489.10 778.26 0.0 conventional 2015 Albany
18 18 2015-08-23 1.34 79992.09 733.16 67933.79 444.78 10880.36 10745.79 134.57 0.0 conventional 2015 Albany
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
18244 7 2018-02-04 1.63 17074.83 2046.96 1529.20 0.00 13498.67 13066.82 431.85 0.0 organic 2018 WestTexNewMexico
18245 8 2018-01-28 1.71 13888.04 1191.70 3431.50 0.00 9264.84 8940.04 324.80 0.0 organic 2018 WestTexNewMexico
18246 9 2018-01-21 1.87 13766.76 1191.92 2452.79 727.94 9394.11 9351.80 42.31 0.0 organic 2018 WestTexNewMexico
18247 10 2018-01-14 1.93 16205.22 1527.63 2981.04 727.01 10969.54 10919.54 50.00 0.0 organic 2018 WestTexNewMexico
18248 11 2018-01-07 1.62 17489.58 2894.77 2356.13 224.53 12014.15 11988.14 26.01 0.0 organic 2018 WestTexNewMexico
[10173 rows x 14 columns]
'[TIL]국민대X프로그래머스 여름방학 인공지능 과정' 카테고리의 다른 글
6일 차(2022/07/11) (0) | 2022.07.12 |
---|---|
5일 차(2022/07/08) (0) | 2022.07.08 |
4일 차(2022/07/07) (0) | 2022.07.07 |
2일차(2022/07/05) (0) | 2022.07.05 |
1일차(2022/07/04) (0) | 2022.07.05 |