AI실무 기본과정 - 데이터 분석을 위한 라이브러리 step 2

2021. 12. 15. 10:45Programming/Python

 

 

[1] Series 데이터를 만드는 방법 2가지

ex)*CodeEditor

import numpy as np
import pandas as pd

# 예시) case1 시리즈 데이터를 만드는 방법.
series = pd.Series([1,2,3,4], index = ['a', 'b', 'c', 'd'], name="Title")
print(series, "\n")

# case2 국가별 인구 수 시리즈 데이터를 딕셔너리를 사용하여 만들어보세요.
dict = {
"korea" : 5180,
"japan" : 12718,
"china" : 141500,
"usa" : 32676
}
country = pd.Series(dict)
print(country)

 

*Console

a 1

b 2

c 3

d 4

Name: Title, dtype: int64

 

korea 5180

japan 12718

china 141500

usa 32676

dtype: int64

 

 

[2] Series 데이터로 DataFrame 만들기 예제

ex)*CodeEditor

import numpy as np
import pandas as pd

# 두 개의 시리즈 데이터가 있습니다.
print("Population series data:")
population_dict = {
    'korea': 5180,
    'japan': 12718,
    'china': 141500,
    'usa': 32676
}
population = pd.Series(population_dict)
print(population, "\n")

print("GDP series data:")
gdp_dict = {
    'korea': 169320000,
    'japan': 516700000,
    'china': 1409250000,
    'usa': 2041280000,
}
gdp = pd.Series(gdp_dict)
print(gdp, "\n")

# 이곳에서 2개의 시리즈 값이 들어간 데이터프레임을 생성합니다.
print("Country DataFrame")
country = pd.DataFrame({
"population": population,
"gdp" : gdp
})
print(country)

 

*Console

Population series data:
korea 5180
japan 12718
china 141500
usa 32676
dtype: int64

 

GDP series data:
korea 169320000
japan 516700000
china 1409250000
usa 2041280000
dtype: int64

 

 

Country DataFrame
       population gdp
korea 5180 169320000
japan 12718 516700000
china 141500 1409250000
usa 32676 2041280000
코드 실행이 완료되었습니다.
 
 

[3] DataFrame에서 조건을 충족하는 값 추출하기 예제

ex)*CodeEditor

import numpy as np
import pandas as pd

print("Masking & query")
df = pd.DataFrame(np.random.rand(5, 2), columns=["A", "B"])
print(df, "\n")

# 데이터 프레임에서 A컬럼값이 0.5보다 작고 B컬럼 값이 0.3보다 큰값들을 구해봅시다.
# 마스킹 연산을 활용하여 출력해보세요!
print(df[df['A']<0.5])
print(df[df['B']>0.3])
print(df[(df['A']<0.5) & (df['B']>0.3)])
# query 함수를 활용하여 출력해보세요!
print(df.query("A<0.5 and B>0.3"))

 

*Console

Masking & query
         A         B
0 0.409296 0.138406
1 0.212866 0.383901
2 0.544243 0.911833
3 0.724584 0.620088
4 0.705743 0.028434

 

        A           B
0 0.409296 0.138406
1 0.212866 0.383901
 
         A          B
1 0.212866 0.383901
2 0.544243 0.911833
3 0.724584 0.620088
 
          A          B
1 0.212866 0.383901

 

          A           B
1 0.212866 0.383901
코드 실행이 완료되었습니다.
 

 

 
[4]DataFrame에 새로운 컬럼값 추가하기 예제
ex)*CodeEditor
import numpy as np
import pandas as pd

# GDP와 인구수 시리즈 값이 들어간 데이터프레임을 생성합니다.
population = pd.Series({'korea': 5180,'japan': 12718,'china': 141500,'usa': 32676})
gdp = pd.Series({'korea': 169320000,'japan': 516700000,'china': 1409250000,'usa': 2041280000})
print("Country DataFrame")
country = pd.DataFrame({"population" : population,"gdp" : gdp})
print(country)

# 데이터프레임에 gdp per capita 칼럼을 추가하고 출력합니다.
gdp_per_capita = country['gdp']/country['population']
country['gdp per capita'] = gdp_per_capita
print(country)
*Console

 

Country DataFrame
        population   gdp
korea   5180     169320000
japan   12718    516700000
china   141500   1409250000
usa      32676    2041280000

 

 
      population     gdp       gdp per capita
korea 5180      169320000    32687.258687
japan 12718    516700000     40627.457147
china 141500   1409250000   9959.363958
usa   32676     2041280000   62470.314604

 

코드 실행이 완료되었습니다.
 

[1] Data in DataFrame Sort EX

ex)CodeEditor

import numpy as np
import pandas as pd

print("DataFrame: ")
df = pd.DataFrame({
    'col1' : [2, 1, 9, 8, 7, 4],
    'col2' : ['A', 'A', 'B', np.nan, 'D', 'C'],
    'col3': [0, 1, 9, 4, 2, 3],
})
print(df, "\n")


# 정렬 코드 입력해보기    
# 1. col1을 기준으로 오름차순으로 정렬하기.
sorted_df1 = df.sort_values('col1', ascending = True)
print(sorted_df1)

# 2. col2를 기준으로 내림차순으로 정렬하기.
sorted_df2 = df.sort_values('col2', ascending = False)
print(sorted_df2)

# 3. col2를 기준으로 오름차순으로, col1를 기준으로 내림차순으로 정렬하기.
sorted_df3 = df.sort_values(['col2','col1'], ascending = [True, False])
print(sorted_df3)

 

*Console

DataFrame:
col1 col2 col3
0 2 A 0
1 1 A 1
2 9 B 9
3 8 NaN 4
4 7 D 2
5 4 C 3
 

 

col1 col2 col3
1 1 A 1
0 2 A 0
5 4 C 3
4 7 D 2
3 8 NaN 4
2 9 B 9
 

 

col1 col2 col3
4 7 D 2
5 4 C 3
2 9 B 9
0 2 A 0
1 1 A 1
3 8 NaN 4
 

 

col1 col2 col3
0 2 A 0
1 1 A 1
2 9 B 9
5 4 C 3
4 7 D 2
3 8 NaN 4

 

코드 실행이 완료되었습니다.
 

[2] DataFrame 값 집계함수를 사용해서 도출하기

ex)CodeEditor

import numpy as np
import pandas as pd

data = {
    'korean' : [50, 60, 70],
    'math' : [10, np.nan, 40]
}
df = pd.DataFrame(data, index = ['a','b','c'])
print(df, "\n")

# 각 컬럼별 데이터 개수
col_num = df.count(axis = 0)
print(col_num, "\n")

# 각 행별 데이터 개수
row_num = df.count(axis = 1)
print(row_num, "\n")

# 각 컬럼별 최댓값
col_max = df.max()
print(col_max, "\n")

# 각 컬럼별 최솟값
col_min = df.min()
print(col_min, "\n")

# 각 컬럼별 합계
col_sum = df.sum()
print(col_sum, "\n")

# 컬럼의 최솟값으로 NaN값 대체
math_min = df['math'].min()
df['math'] = df['math'].fillna(math_min)
print(df, "\n")

# 각 컬럼별 평균
col_avg = df.mean()
print(col_avg, "\n")

 

*Console

korean math
a 50 10.0
b 60 NaN
c 70 40.0
 

 

korean 3
math 2
dtype: int64

 

 

a 2
b 1
c 2
dtype: int64

 

 

korean 70.0
math 40.0
dtype: float64

 

 
korean 50.0
math 10.0
dtype: float64

 

 

korean 180.0
math 50.0
dtype: float64

 

 

korean math
a 50 10.0
b 60 10.0
c 70 40.0

 

 

korean 60.0
math 20.0
dtype: float64
코드 실행이 완료되었습니다.

 

 

[3]DataFrame Groupping 해서 도출

ex)*CodeEditor

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'key': ['A', 'B', 'C', 'A', 'B', 'C'],
    'data1': [1, 2, 3, 1, 2, 3],
    'data2': [4, 4, 6, 0, 6, 1]
})
print("DataFrame:")
print(df, "\n")

# groupby 함수를 이용해봅시다.
# key를 기준으로 묶어 합계를 구해 출력해보세요.
print(df.groupby('key').sum())

# key와 data1을 기준으로 묶어 합계를 구해 출력해보세요.
print(df.groupby(['key', 'data1']).sum())

 

*Console

DataFrame:
    key data1 data2
0    A    1    4
1    B    2    4
2    C    3    6
3    A    1    0
4    B    2    6
5    C    3    1

 

 

  data1 data2
key
   A 2 4
   B 4 10
   C 6 7

 

 

          data2
key data1
  A    1   4
  B    2   10
  C    3   7
코드 실행이 완료되었습니다.

 

 

[4] GroupBy, aggregate 응용

ex)*CodeEditor

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'key': ['A', 'B', 'C', 'A', 'B', 'C'],
    'data1': [0, 1, 2, 3, 4, 5],
    'data2': [4, 4, 6, 0, 6, 1]
})
print("DataFrame:")
print(df, "\n")

# aggregate를 이용하여 요약 통계량을 산출해봅시다.
# 데이터 프레임을 'key' 칼럼으로 묶고, data1과 data2 각각의 최솟값, 중앙값, 최댓값을 출력하세요.
print(df.groupby('key').aggregate([min, np.median, max]))

# 데이터 프레임을 'key' 칼럼으로 묶고, data1의 최솟값, data2의 합계를 출력하세요.
print(df.groupby('key').aggregate({'data1':min, 'data2':sum}))

 

*Console

DataFrame:
 key data1 data2
0 A    0    4
1 B    1    4
2 C    2    6
3 A    3    0
4 B    4    6
5 C    5    1
 

 

             data1                   data2
     min  median  max  min  median  max
key
 A    0      1.5       3      0       2.0       4
 B    1      2.5       4      4       5.0       6
 C    2      3.5       5      1       3.5       6
 
        data1  data2
key
  A       0        4
  B       1        10
  C       2        7
코드 실행이 완료되었습니다.