15 Tue
TIL
프로그래머스 AI 스쿨 1기
3주차 DAY 2
I. pandas 시작하기
Prerequisite : Table
행과 열을 이용해서 데이터를 저장하고 관리하는 자료구조(컨테이너)
주로 행은 개체, 열은 속성을 나타냄
Pandas 설치하기
pip install pandas
Pandas 시작하기
import pandas를 통해서 진행 pandas는 관습적으로 pd 축약해서 사용
import pandas as pdII. pandas로 1차원 데이터 다루기 - Series
Series?
1-D labeled array
인덱스를 지정해줄 수 있음
Series + Numpy
Series는 ndarray와 유사하다!
pandas와 numpy의 유사성을 볼 수 있음
Series + dict
series는 dict와 유사하다
Series에 이름 붙이기
name속성을 가지고 있다.
처음 Series를 만들 때 이름을 붙일 수 있다.
Numpy의 Random 함수 3가
dtype 뿐만 아니라 Name도 출력
III. Pandas로 2차원 데이터 다루기 - dataframe
dataframe?
2-D labeled table
인덱스를 지정할 수도 있음
표나 테이블등의 2차원 데이터를 표현하기에 리스트는 부적합
따라서, 딕셔너리 사용
height
weight
0
1
30
1
2
40
2
3
50
3
4
60
From CSV to DataFrame
CSV : Comma Separated Value
pandas는 csv 파일을 dataframe화 할 수있는 함수를 제공
.read_csv()를 이용실제로 csv는
,로 구분된 데이터들로 이루어져있음csv의 각 첫줄에는 각 컬럼에 해당하는 항목이름
Country/Region
Confirmed
Deaths
Recovered
Active
New cases
New deaths
New recovered
Deaths / 100 Cases
Recovered / 100 Cases
Deaths / 100 Recovered
Confirmed last week
1 week change
1 week % increase
WHO Region
0
Afghanistan
36263
1269
25198
9796
106
10
18
3.50
69.49
5.04
35526
737
2.07
Eastern Mediterranean
1
Albania
4880
144
2745
1991
117
6
63
2.95
56.25
5.25
4171
709
17.00
Europe
2
Algeria
27973
1163
18837
7973
616
8
749
4.16
67.34
6.17
23691
4282
18.07
Africa
3
Andorra
907
52
803
52
10
0
0
5.73
88.53
6.48
884
23
2.60
Europe
4
Angola
950
41
242
667
18
1
0
4.32
25.47
16.94
749
201
26.84
Africa
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
182
West Bank and Gaza
10621
78
3752
6791
152
2
0
0.73
35.33
2.08
8916
1705
19.12
Eastern Mediterranean
183
Western Sahara
10
1
8
1
0
0
0
10.00
80.00
12.50
10
0
0.00
Africa
184
Yemen
1691
483
833
375
10
4
36
28.56
49.26
57.98
1619
72
4.45
Eastern Mediterranean
185
Zambia
4552
140
2815
1597
71
1
465
3.08
61.84
4.97
3326
1226
36.86
Africa
186
Zimbabwe
2704
36
542
2126
192
2
24
1.33
20.04
6.64
1713
991
57.85
Africa
187 rows × 15 columns
Pandas 활용 1. 일부분만 관찰하기
head(n) : 처음 n개의 데이터 참조
Country/Region
Confirmed
Deaths
Recovered
Active
New cases
New deaths
New recovered
Deaths / 100 Cases
Recovered / 100 Cases
Deaths / 100 Recovered
Confirmed last week
1 week change
1 week % increase
WHO Region
0
Afghanistan
36263
1269
25198
9796
106
10
18
3.50
69.49
5.04
35526
737
2.07
Eastern Mediterranean
1
Albania
4880
144
2745
1991
117
6
63
2.95
56.25
5.25
4171
709
17.00
Europe
2
Algeria
27973
1163
18837
7973
616
8
749
4.16
67.34
6.17
23691
4282
18.07
Africa
3
Andorra
907
52
803
52
10
0
0
5.73
88.53
6.48
884
23
2.60
Europe
4
Angola
950
41
242
667
18
1
0
4.32
25.47
16.94
749
201
26.84
Africa
tail(n) : 마지막 n개의 데이터를 참조
Country/Region
Confirmed
Deaths
Recovered
Active
New cases
New deaths
New recovered
Deaths / 100 Cases
Recovered / 100 Cases
Deaths / 100 Recovered
Confirmed last week
1 week change
1 week % increase
WHO Region
182
West Bank and Gaza
10621
78
3752
6791
152
2
0
0.73
35.33
2.08
8916
1705
19.12
Eastern Mediterranean
183
Western Sahara
10
1
8
1
0
0
0
10.00
80.00
12.50
10
0
0.00
Africa
184
Yemen
1691
483
833
375
10
4
36
28.56
49.26
57.98
1619
72
4.45
Eastern Mediterranean
185
Zambia
4552
140
2815
1597
71
1
465
3.08
61.84
4.97
3326
1226
36.86
Africa
186
Zimbabwe
2704
36
542
2126
192
2
24
1.33
20.04
6.64
1713
991
57.85
Africa
Pandas 활용 2. 데이터 접근하기
df['column_name']ordf.column_name
column name을 attribute로 접근할 때에는 spacebar가 적용된 변수명은 적용하지 못하는 차이가 있다.
ex) covid.Who Region
O : covid["Who Region"]
X : covid.Who Region
Honey Tip! Dataframe의 각 column은 "Series"이다!
Pandas 활용 3. "조건"을 이용해서 데이터 접근하기
Country/Region
Confirmed
Deaths
Recovered
Active
New cases
New deaths
New recovered
Deaths / 100 Cases
Recovered / 100 Cases
Deaths / 100 Recovered
Confirmed last week
1 week change
1 week % increase
WHO Region
0
Afghanistan
36263
1269
25198
9796
106
10
18
3.50
69.49
5.04
35526
737
2.07
Eastern Mediterranean
1
Albania
4880
144
2745
1991
117
6
63
2.95
56.25
5.25
4171
709
17.00
Europe
2
Algeria
27973
1163
18837
7973
616
8
749
4.16
67.34
6.17
23691
4282
18.07
Africa
Country/Region
Confirmed
Deaths
Recovered
Active
New cases
New deaths
New recovered
Deaths / 100 Cases
Recovered / 100 Cases
Deaths / 100 Recovered
Confirmed last week
1 week change
1 week % increase
WHO Region
13
Bangladesh
226225
2965
125683
97577
2772
37
1801
1.31
55.56
2.36
207453
18772
9.05
South-East Asia
19
Bhutan
99
0
86
13
4
0
1
0.00
86.87
0.00
90
9
10.00
South-East Asia
27
Burma
350
6
292
52
0
0
2
1.71
83.43
2.05
341
9
2.64
South-East Asia
Pandas 활용 4. 행을 기준으로 데이터 접근하기
Available
Location
Genre
버그란 무엇인가
True
102
Programming
두근두근 물리학
False
215
Physics
미분해줘 홈즈
False
323
Math
인덱스를 이용해서 가져오기 : loc[row, col]
loc[row, col]숫자 인덱스를 이용해서 가져오기 : `.iloc[rowidx, colidx]
Pandas 활용 5. groupby
Split : 특정한 "기준"을 바탕으로 DataFrame을 분할
Apply : 통계함수 - sum(), mean(), median(), - 을 적용해서 각 데이터를 압축
Combine : Apply된 결과를 바탕으로 새로운 Series를 생성 (group_key : applied_value)
.groupby()
Country/Region
Confirmed
Deaths
Recovered
Active
New cases
New deaths
New recovered
Deaths / 100 Cases
Recovered / 100 Cases
Deaths / 100 Recovered
Confirmed last week
1 week change
1 week % increase
WHO Region
0
Afghanistan
36263
1269
25198
9796
106
10
18
3.50
69.49
5.04
35526
737
2.07
Eastern Mediterranean
1
Albania
4880
144
2745
1991
117
6
63
2.95
56.25
5.25
4171
709
17.00
Europe
2
Algeria
27973
1163
18837
7973
616
8
749
4.16
67.34
6.17
23691
4282
18.07
Africa
3
Andorra
907
52
803
52
10
0
0
5.73
88.53
6.48
884
23
2.60
Europe
4
Angola
950
41
242
667
18
1
0
4.32
25.47
16.94
749
201
26.84
Africa
Mission:
1. covid 데이터에서 100 case 대비 사망률(Deaths / 100 Cases)이 가장 높은 국가는?
Deaths / 100 Cases)이 가장 높은 국가는?2. covid 데이터에서 신규 확진자가 없는 나라 중 WHO Region이 'Europe'를 모두 출력하면?
Hint : 한 줄에 동시에 두가지 조건을 Apply하는 경우 Warning이 발생할 수 있습니다.
Country/Region
Confirmed
Deaths
Recovered
Active
New cases
New deaths
New recovered
Deaths / 100 Cases
Recovered / 100 Cases
Deaths / 100 Recovered
Confirmed last week
1 week change
1 week % increase
WHO Region
56
Estonia
2034
69
1923
42
0
0
1
3.39
94.54
3.59
2021
13
0.64
Europe
75
Holy See
12
0
12
0
0
0
0
0.00
100.00
0.00
12
0
0.00
Europe
95
Latvia
1219
31
1045
143
0
0
0
2.54
85.73
2.97
1192
27
2.27
Europe
100
Liechtenstein
86
1
81
4
0
0
0
1.16
94.19
1.23
86
0
0.00
Europe
113
Monaco
116
4
104
8
0
0
0
3.45
89.66
3.85
109
7
6.42
Europe
143
San Marino
699
42
657
0
0
0
0
6.01
93.99
6.39
699
0
0.00
Europe
157
Spain
272421
28432
150376
93613
0
0
0
10.44
55.20
18.91
264836
7585
2.86
Europe
3. 다음 데이터를 이용해 각 Region별로 아보카도가 가장 비싼 평균가격(AveragePrice)을 출력하면?
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 × 14 columns
오토마타와 컴파일러
CFG : removing ambiguous grammar
Context Free Grammar는 구문 분석을 하는데 있어서 효율을 상당히 떨어뜨리는 경우에 효율적인 구문분석이 이루어지도록 주어진 문법을 적당한 문법으로 바꾸는 문법 변환을 필요로 한다. 모호한 문법의 제거 방법은 다음과 같다.
불필요한 생성규칙의 제거
ε-생성규칙의 제거
단일 생성규칙의 제거
좌인수분해
좌재귀 제거
이를 구현하면 다음과 같다. (코드를 보기 전에 언을 하자면, 구현된 제거는 불필요한 생성규칙의 제거, ε-생성규칙의 제거, 단일 생성규칙의 제거 까지이며 이마저도 완벽하게 구현되지 않았다. 지금까지 찾은 반례로는 S -> ABC, A -> B | a, B -> C | b, C -> A | c 와 같은 순환 코드에 대해서 작동하지 않는다. 그 외에는 잘 작동한다고 생각이 들지만 오류를 발생시키는 반례가 충분히 있을 것이라 예상한다. 좌인수분해와 좌재귀제거는 코드가 너무 지저분해져 능력을 벗어나는 일이라고 생각해 포기했다.)
Last updated
Was this helpful?