레이블이 pandas인 게시물을 표시합니다. 모든 게시물 표시
레이블이 pandas인 게시물을 표시합니다. 모든 게시물 표시

2018년 12월 30일 일요일

PyThon pandas dataframe 을 numpy 로 변환 / torch tensor로 변환


0. pandas dataframe 을 torch tensor로 변환하기

두가지 단계로 이루어집니다.
 dataframe->numpy 배열로 변환->torch tensor
0.1 dataframe->numpy 배열로 변환 : values 이용
0.2 numpy 배열로 변환->torch tensor : torch.from_numpy 이용
아래는 상세 예제입니다.

1. Convert pandas dataframe to numpy array (DataFrame을 numpy 배열로 변환)


as_matrix와 values 두개를 지원하고 있는데 as_matrix는 사라질 예정이라고 합니다. values 사용하면 됩니다.

  • mah_np_array = df.as_matrix(columns=None)
  • mah_np_array = df.values

train.tsv
0 1 지역 3 4
NaN 0.3160718715457761 광주 0.618074061962662 부산
0.4779143261004096 0.7640950473377978 인천 0.7554662967547567 인천
0.46356805076582885 0.5837447431729355 대전 0.793675978965779 광주
0.5695109222857196 0.05089301078346342 인천 0.9556152127770076 부산
0.04493729261707624 0.14316706161067427 경기 0.3853064558624778 울산
0.4211392967613088 0.4223696769241083 울산 0.5668579921124862 광주
0.6968309725237914 0.9771633054896907 서울 0.8357267917293922 경기
0.11353740126056755 0.7601654905557846 대전 0.743158407293178 부산
0.22370034270270966 0.3115915771469119 대전 0.11848968372403645 부산
0.137646137601257 0.600286886461799 광주 0.7007352606121582 강원
0.031428666050948184 0.39108944068098905 대전 0.8733145643417124 강원
0.9964849451141898 0.1515641318053479 인천 0.5335673749065628 인천
0.22542471556473298 0.8561772376533481 서울 0.9362096685200896 울산
0.4686621433360696 0.17537990374522128 대구 0.3499523151304561 울산
0.046060811241397714 0.8299155100569963 경기 0.21535901604117658 경기
0.1899909553960777 0.21936448957471155 인천 0.6575452140509177 NaN
0.41758513381425333 0.42277109702047366 서울 0.8529515809615816 부산
0.3197992908993763 NaN 강원 0.4037015504523124 대구
0.0562629654450455 0.551939153390536 인천 0.9260164254116474 세종
0.587953265713976 0.6413981811587487 대구 0.023584307830762707 대전

numpy 변경 소스
import pandas as pd
import torch

dataset = pd.read_csv("train.tsv", delimiter='\t', header=0)
dataset = pd.get_dummies(dataset)

selected = dataset[['1','3']]
print(selected.values)
소스 설명
selected = dataset[['1','3']] 컬럼이 '1','3' 인 항목만 선택해서 해당 항목만 numpy로 변경합니다.

결과
[[0.31607187 0.61807406]
 [0.76409505 0.7554663 ]
 [0.58374474 0.79367598]
 [0.05089301 0.95561521]
 [0.14316706 0.38530646]
 [0.42236968 0.56685799]
 [0.97716331 0.83572679]
 [0.76016549 0.74315841]
 [0.31159158 0.11848968]
 [0.60028689 0.70073526]
 [0.39108944 0.87331456]
 [0.15156413 0.53356737]
 [0.85617724 0.93620967]
 [0.1753799  0.34995232]
 [0.82991551 0.21535902]
 [0.21936449 0.65754521]
 [0.4227711  0.85295158]
 [0.13481439 0.40370155]
 [0.55193915 0.92601643]
 [0.64139818 0.02358431]]

2. numpy array to Torch tensor (numpy 를 Torch tensor로 변환)


소스
import pandas as pd
import torch

dataset = pd.read_csv("train.tsv", delimiter='\t', header=0)
dataset = pd.get_dummies(dataset)

selected = dataset[['1','3']]

torch_tensor = torch.from_numpy(selected.values)
print(torch_tensor)

결과
tensor([[ 0.3161,  0.6181],
        [ 0.7641,  0.7555],
        [ 0.5837,  0.7937],
        [ 0.0509,  0.9556],
        [ 0.1432,  0.3853],
        [ 0.4224,  0.5669],
        [ 0.9772,  0.8357],
        [ 0.7602,  0.7432],
        [ 0.3116,  0.1185],
        [ 0.6003,  0.7007],
        [ 0.3911,  0.8733],
        [ 0.1516,  0.5336],
        [ 0.8562,  0.9362],
        [ 0.1754,  0.3500],
        [ 0.8299,  0.2154],
        [ 0.2194,  0.6575],
        [ 0.4228,  0.8530],
        [ 0.1348,  0.4037],
        [ 0.5519,  0.9260],
        [ 0.6414,  0.0236]], dtype=torch.float64)


dataframe에 유용한 함수

print(df.info(verbose=True))




2018년 12월 24일 월요일

구매 내역과 특징 feature 추출 with pandas

0. 서론

구매 내역에서 특징 feature를 추출하기 위한 작업에 대해 고민해보았습니다. 아래 표는 순수한(raw)상태의 data 입니다. date는 예를 들기위한 데이터로 현시점 기준 이전 개월수로 이해하면 좀 더 편합니다.
위 데이터를 이름별로 나타내보았습니다. 그 중에 Micle이라는 사람만 정리해 보면 아래와 같습니다. PA, PB라는 상품이 다르기 때문에 구별을 따로 해야하고 판매한 개월수도 다릅니다.
이것을 제대로 구현을 한다면 다음과 같이 구현이 됩니다.
PA라는 제품을 언제 구매했는지 컬럼으로 나타내는것입니다. 이렇게 표시하게되면 많은 차원이 소모됩니다.

그래서 가중치를 주는 방법인데요. 균등하게 하느냐 비균등하게 하느냐인데 여기에서는 개월수가 작을수록 좁은 가중치를 사용하는 방법을 사용하여 나타내어 보았습니다.
3/6/12/24 이런식으로 표현하였습니다. 3에는 0~3까지 표시, 6의 경우 4~6까지, 12은 7~12까지를 포함하는 수치로 표현하도록 하였습니다. 이렇게 되면 아래와 같은 형태로 많은 차원을 줄일 수 있습니다. 만약 숫자가 큰 부분이 중요하다고 판단되면 반대로 표현하여야 합니다.
이것을 Python 으로 구현하도록 하겠습니다.

1. Data 준비

data.csv
Name,Product,Date,Sell count
Micle,PA,5,1
Sally,PA,2,3
Pop,PC,6,4
Micle,PB,7,3
Pop,PA,6,2
Sally,PB,2,3
Micle,PA,9,4
Pop,PB,10,5
Sally,PA,13,6
Sally,PB,2,2
Pop,PC,7,3
Micle,PA,15,1

2. 구현 소스

구현방법은 원하는 부분만 select 하여 sum을 구해 새로운 dataframe을 만든는 방식입니다.
import pandas as pd

df = pd.read_csv("data.csv", delimiter=',', header=0)
print("## All")
print(df)
 
print("## Name")
df_name = df["Name"].drop_duplicates()
print(df_name)
print("## Product")
df_product = df["Product"].drop_duplicates()
print(df_product)

PRIOD_COND=[(0,3),(4,6),(7,12),(13,24),(25,48),(49,96),(97,999)]

df_o = pd.DataFrame({})

for name in list(df_name):
 tlist = [name]
 for product in list(df_product):
  for condl,condh in PRIOD_COND:
   df_c = df.copy()
   df_c = df_c.loc[(df_c['Name'] == name)&(df_c['Product'] == product)&(df_c['Date'] >= condl)&(df_c['Date'] <= condh)]
   print("## select ",name,product,condl,condh)
   if(len(df_c.index)>0):
    print(df_c)
    print("sum",df_c["Sell count"].sum())
   tlist.append(df_c["Sell count"].sum())
 print(tlist)
 df_o = df_o.append( pd.DataFrame(tlist).T )
print ("## Result1")
print (df_o)

tlist = ["Name"]
for product in list(df_product):
 for condl,condh in PRIOD_COND:
  tlist.append(product+"_"+str(condh))
  
df_o.columns=(tlist)
print ("## Result2")
print (df_o)

3. 결과

## All
     Name Product  Date  Sell count
0   Micle      PA     5           1
1   Sally      PA     2           3
2     Pop      PC     6           4
3   Micle      PB     7           3
4     Pop      PA     6           2
5   Sally      PB     2           3
6   Micle      PA     9           4
7     Pop      PB    10           5
8   Sally      PA    13           6
9   Sally      PB     2           2
10    Pop      PC     7           3
11  Micle      PA    15           1
## Name
0    Micle
1    Sally
2      Pop
Name: Name, dtype: object
## Product
0    PA
2    PC
3    PB
Name: Product, dtype: object
## select  Micle PA 0 3
## select  Micle PA 4 6
    Name Product  Date  Sell count
0  Micle      PA     5           1
sum 1
## select  Micle PA 7 12
    Name Product  Date  Sell count
6  Micle      PA     9           4
sum 4
## select  Micle PA 13 24
     Name Product  Date  Sell count
11  Micle      PA    15           1
sum 1
## select  Micle PA 25 48
## select  Micle PA 49 96
## select  Micle PA 97 999
## select  Micle PC 0 3
## select  Micle PC 4 6
## select  Micle PC 7 12
## select  Micle PC 13 24
## select  Micle PC 25 48
## select  Micle PC 49 96
## select  Micle PC 97 999
## select  Micle PB 0 3
## select  Micle PB 4 6
## select  Micle PB 7 12
    Name Product  Date  Sell count
3  Micle      PB     7           3
sum 3
## select  Micle PB 13 24
## select  Micle PB 25 48
## select  Micle PB 49 96
## select  Micle PB 97 999
['Micle', 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0]
## select  Sally PA 0 3
    Name Product  Date  Sell count
1  Sally      PA     2           3
sum 3
## select  Sally PA 4 6
## select  Sally PA 7 12
## select  Sally PA 13 24
    Name Product  Date  Sell count
8  Sally      PA    13           6
sum 6
## select  Sally PA 25 48
## select  Sally PA 49 96
## select  Sally PA 97 999
## select  Sally PC 0 3
## select  Sally PC 4 6
## select  Sally PC 7 12
## select  Sally PC 13 24
## select  Sally PC 25 48
## select  Sally PC 49 96
## select  Sally PC 97 999
## select  Sally PB 0 3
    Name Product  Date  Sell count
5  Sally      PB     2           3
9  Sally      PB     2           2
sum 5
## select  Sally PB 4 6
## select  Sally PB 7 12
## select  Sally PB 13 24
## select  Sally PB 25 48
## select  Sally PB 49 96
## select  Sally PB 97 999
['Sally', 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0]
## select  Pop PA 0 3
## select  Pop PA 4 6
  Name Product  Date  Sell count
4  Pop      PA     6           2
sum 2
## select  Pop PA 7 12
## select  Pop PA 13 24
## select  Pop PA 25 48
## select  Pop PA 49 96
## select  Pop PA 97 999
## select  Pop PC 0 3
## select  Pop PC 4 6
  Name Product  Date  Sell count
2  Pop      PC     6           4
sum 4
## select  Pop PC 7 12
   Name Product  Date  Sell count
10  Pop      PC     7           3
sum 3
## select  Pop PC 13 24
## select  Pop PC 25 48
## select  Pop PC 49 96
## select  Pop PC 97 999
## select  Pop PB 0 3
## select  Pop PB 4 6
## select  Pop PB 7 12
  Name Product  Date  Sell count
7  Pop      PB    10           5
sum 5
## select  Pop PB 13 24
## select  Pop PB 25 48
## select  Pop PB 49 96
## select  Pop PB 97 999
['Pop', 0, 2, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0]
## Result1
      0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21
0  Micle  0  1  4  1  0  0  0  0  0  0  0  0  0  0  0  0  3  0  0  0  0
0  Sally  3  0  0  6  0  0  0  0  0  0  0  0  0  0  5  0  0  0  0  0  0
0    Pop  0  2  0  0  0  0  0  0  4  3  0  0  0  0  0  0  5  0  0  0  0
## Result2
    Name PA_3 PA_6 PA_12 PA_24 PA_48 PA_96 PA_999 PC_3  ...   PC_96 PC_999 PB_3 PB_6 PB_12 PB_24 PB_48 PB_96 PB_999
0  Micle    0    1     4     1     0     0      0    0  ...       0      0    0    0     3     0     0     0      0
0  Sally    3    0     0     6     0     0      0    0  ...       0      0    5    0     0     0     0     0      0
0    Pop    0    2     0     0     0     0      0    0  ...       0      0    0    0     5     0     0     0      0

[3 rows x 22 columns]

4. 소스 분석

df = pd.read_csv("data.csv", delimiter=',', header=0)
CSV파일을 읽어서 dataFrame 형태를 만듭니다.

print("## Name")
df_name = df["Name"].drop_duplicates()
print(df_name)
print("## Product")
df_product = df["Product"].drop_duplicates()
print(df_product)
위 코드는 Name과 Product의 중복 되는 이름을 제거합니다.

PRIOD_COND=[(0,3),(4,6),(7,12),(13,24),(25,48),(49,96),(97,999)]
date를 범위를 위한 미리 범위 table을 준비합니다.

df_c = df.copy()
df_c = df_c.loc[(df_c['Name'] == name)&(df_c['Product'] == product)&(df_c['Date'] >= condl)&(df_c['Date'] <= condh)]
df_c에 df를 복사하여 처리를 합니다. colmum값 조건에 맞는 row 데이터를 선택하고자 할때 위와 같이 표현합니다. loc는 row를 선택할때 사용합니다. 그리고 각각의 조건은 & 로 연결됩니다.

   print("## select ",name,product,condl,condh)
   if(len(df_c.index)>0):
    print(df_c)
    print("sum",df_c["Sell count"].sum())
조건에 맞으면 위 코드에서 출력이 일어납니다. 그리고 얻은 dataframe에서 sum()을 구해서 출력하면 다음과 같은 결과가 나옵니다.
## select  Sally PB 0 3
    Name Product  Date  Sell count
5  Sally      PB     2           3
9  Sally      PB     2           2
sum 5

   tlist.append(df_c["Sell count"].sum())
 print(tlist)
 df_o = df_o.append( pd.DataFrame(tlist).T )
print ("## Result1")
print (df_o)
list인 tlist에 sum값을 추가하고 이것을 다시 DataFrame에 추가를 합니다. 이때 column, row를 교환하는것이 T 입니다. 해당결과가 Result1으로 나타납니다.
## Result1
      0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21
0  Micle  0  1  4  1  0  0  0  0  0  0  0  0  0  0  0  0  3  0  0  0  0
0  Sally  3  0  0  6  0  0  0  0  0  0  0  0  0  0  5  0  0  0  0  0  0
0    Pop  0  2  0  0  0  0  0  0  4  3  0  0  0  0  0  0  5  0  0  0  0

위 결과에 column label 만 넣으면 됩니다. 해당 과정을 하는 코드가 다음 코드입니다.
tlist = ["Name"]
for product in list(df_product):
 for condl,condh in PRIOD_COND:
  tlist.append(product+"_"+str(condh))
  
df_o.columns=(tlist)
이름의 리스트를 만들어서 columns 에 넣어주면 변경됩니다.




2018년 12월 23일 일요일

PyThon tsv 파일 읽어서 범주형 데이터 one hot encoding 하기

TSV file read and One hot encoding categorical data


범주형 데이터는 숫자의 값으로 표현되지 않는 데이터를 의미합니다. 이러한 데이터는 대표적으로 남,여 성별이나 지역명이 있습니다. 머신 러닝에서 이러한 데이터를 다룰 때 일반적으로 one hot encoding 을 사용하게 됩니다.
one hot encoding 외에 어떤 방법이 있는지는 아래 링크를 참고하시기 바랍니다.
https://blog.myyellowroad.com/using-categorical-data-in-machine-learning-with-python-from-dummy-variables-to-deep-category-66041f734512
https://blog.myyellowroad.com/using-categorical-data-in-machine-learning-with-python-from-dummy-variables-to-deep-category-42fd0a43b009

github 자료를 통해서 예를 들어 보겠습니다. 아래와 같은 Account  Network      Device 컬럼을 가지는 데이터가 있다고 가정할때, 각 종류에 따라서 1차원의 데이터를 가지고 1로 encoding 하게됩니다.


    Account  Network      Device
0  Account1   Search  Smartphone
1  Account1  Display      Tablet
2  Account2   Search  Smartphone
3  Account3  Display  Smartphone
4  Account2   Search      Tablet
5  Account3   Search  Smartphone

정상적으로 encoding이 되었다면 아래와 같습니다.
Account 예를 들어보면 Account_Account1, Account_Account2, Account_Account3 3가지 데이터 종류가 있으며 해당값을 만족하면 1 데이터를 갖고 나머지는 0이 됩니다. 즉 3가지 데이터 종류가 있으므로 3차원(배열)이 추가 되었습니다. 따라서 종류가 증가함에 따라 차원이 증가하게 됩니다.
   Account_Account1  Account_Account2  Account_Account3  Network_Display  \
0                 1                 0                 0                0   
1                 1                 0                 0                1   
2                 0                 1                 0                0   
3                 0                 0                 1                1   
4                 0                 1                 0                0   
5                 0                 0                 1                0   

   Network_Search  Device_Smartphone  Device_Tablet  
0               1                  1              0  
1               0                  0              1  
2               1                  1              0  
3               0                  1              0  
4               1                  0              1  
5               1                  1              0 

출처
https://github.com/pandas-dev/pandas/issues/12042

구현하기

이러한 encoding을 쉽게 하기 위해서 python pandas 모듈에 쉽게 준비가 되어있습니다. 구현을 하기전에 데이터가 필요하므로 데이터를 생성하는 부분도 함께 준비하였습니다.

데이터 생성 소스
import numpy as np
import csv

MAX_COLMUM = 5
MAX_ITEM = 20
AREA_INDEX = 2
AREA_INDEX2 = 4

# 지역 범주를 만들기 위하여
area = '서울 부산 대구 인천 광주 대전 울산 세종 경기 강원'.split()

f = open('train.tsv', 'w', encoding='utf-8', newline='')
wr = csv.writer(f, delimiter='\t')

# 첫째줄은 컬럼의 제목을 위해서 write합니다.
# 그중에서 AREA_INDEX 여기 위치는 지역명이 들어갑니다.
title = np.arange(MAX_COLMUM).tolist()
title[AREA_INDEX] = "지역"
wr.writerow(title)

for index in range(0,MAX_ITEM):
 random_data = np.random.rand(MAX_COLMUM).tolist()
 random_data[AREA_INDEX] = area[int((random_data[AREA_INDEX]*100)%10)]
 random_data[AREA_INDEX2] = area[int((random_data[AREA_INDEX2]*100)%10)]
 wr.writerow(random_data)

f.close()

랜덤 데이터이므로 실행할때마다 데이터가 다릅니다.
생성된 데이터
0 1 지역 3 4
0.30789676210454797 0.3160718715457761 광주 0.618074061962662 부산
0.4779143261004096 0.7640950473377978 인천 0.7554662967547567 인천
0.46356805076582885 0.5837447431729355 대전 0.793675978965779 광주
0.5695109222857196 0.05089301078346342 인천 0.9556152127770076 부산
0.04493729261707624 0.14316706161067427 경기 0.3853064558624778 울산
0.4211392967613088 0.4223696769241083 울산 0.5668579921124862 광주
0.6968309725237914 0.9771633054896907 서울 0.8357267917293922 경기
0.11353740126056755 0.7601654905557846 대전 0.743158407293178 부산
0.22370034270270966 0.3115915771469119 대전 0.11848968372403645 부산
0.137646137601257 0.600286886461799 광주 0.7007352606121582 강원
0.031428666050948184 0.39108944068098905 대전 0.8733145643417124 강원
0.9964849451141898 0.1515641318053479 인천 0.5335673749065628 인천
0.22542471556473298 0.8561772376533481 서울 0.9362096685200896 울산
0.4686621433360696 0.17537990374522128 대구 0.3499523151304561 울산
0.046060811241397714 0.8299155100569963 경기 0.21535901604117658 경기
0.1899909553960777 0.21936448957471155 인천 0.6575452140509177 경기
0.41758513381425333 0.42277109702047366 서울 0.8529515809615816 부산
0.3197992908993763 0.13481439248189842 강원 0.4037015504523124 대구
0.0562629654450455 0.551939153390536 인천 0.9260164254116474 세종
0.587953265713976 0.6413981811587487 대구 0.023584307830762707 대전


변환 소스
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import pandas as pd

dataset = pd.read_csv("train.tsv", delimiter='\t', header=0)
print("raw data")
print(dataset)

one_hot_encoded = pd.get_dummies(dataset['지역'])
print("[4] only")
print(one_hot_encoded)

one_hot_encoded = pd.get_dummies(dataset,columns=['지역'])
print("pd.get_dummies(dataset,columns=['지역'])")
print(one_hot_encoded)

one_hot_encoded = pd.get_dummies(dataset)
print("pd.get_dummies(dataset)")
print(one_hot_encoded)

결과
raw data
           0         1  지역         3   4
0   0.307897  0.316072  광주  0.618074  부산
1   0.477914  0.764095  인천  0.755466  인천
2   0.463568  0.583745  대전  0.793676  광주
3   0.569511  0.050893  인천  0.955615  부산
4   0.044937  0.143167  경기  0.385306  울산
5   0.421139  0.422370  울산  0.566858  광주
6   0.696831  0.977163  서울  0.835727  경기
7   0.113537  0.760165  대전  0.743158  부산
8   0.223700  0.311592  대전  0.118490  부산
9   0.137646  0.600287  광주  0.700735  강원
10  0.031429  0.391089  대전  0.873315  강원
11  0.996485  0.151564  인천  0.533567  인천
12  0.225425  0.856177  서울  0.936210  울산
13  0.468662  0.175380  대구  0.349952  울산
14  0.046061  0.829916  경기  0.215359  경기
15  0.189991  0.219364  인천  0.657545  경기
16  0.417585  0.422771  서울  0.852952  부산
17  0.319799  0.134814  강원  0.403702  대구
18  0.056263  0.551939  인천  0.926016  세종
19  0.587953  0.641398  대구  0.023584  대전
[4] only
    강원  경기  광주  대구  대전  서울  울산  인천
0    0   0   1   0   0   0   0   0
1    0   0   0   0   0   0   0   1
2    0   0   0   0   1   0   0   0
3    0   0   0   0   0   0   0   1
4    0   1   0   0   0   0   0   0
5    0   0   0   0   0   0   1   0
6    0   0   0   0   0   1   0   0
7    0   0   0   0   1   0   0   0
8    0   0   0   0   1   0   0   0
9    0   0   1   0   0   0   0   0
10   0   0   0   0   1   0   0   0
11   0   0   0   0   0   0   0   1
12   0   0   0   0   0   1   0   0
13   0   0   0   1   0   0   0   0
14   0   1   0   0   0   0   0   0
15   0   0   0   0   0   0   0   1
16   0   0   0   0   0   1   0   0
17   1   0   0   0   0   0   0   0
18   0   0   0   0   0   0   0   1
19   0   0   0   1   0   0   0   0
pd.get_dummies(dataset,columns=['지역'])
           0         1         3   4  지역_강원  지역_경기  지역_광주  지역_대구  지역_대전  지역_서울  지역_울산  지역_인천
0   0.307897  0.316072  0.618074  부산      0      0      1      0      0      0      0      0
1   0.477914  0.764095  0.755466  인천      0      0      0      0      0      0      0      1
2   0.463568  0.583745  0.793676  광주      0      0      0      0      1      0      0      0
3   0.569511  0.050893  0.955615  부산      0      0      0      0      0      0      0      1
4   0.044937  0.143167  0.385306  울산      0      1      0      0      0      0      0      0
5   0.421139  0.422370  0.566858  광주      0      0      0      0      0      0      1      0
6   0.696831  0.977163  0.835727  경기      0      0      0      0      0      1      0      0
7   0.113537  0.760165  0.743158  부산      0      0      0      0      1      0      0      0
8   0.223700  0.311592  0.118490  부산      0      0      0      0      1      0      0      0
9   0.137646  0.600287  0.700735  강원      0      0      1      0      0      0      0      0
10  0.031429  0.391089  0.873315  강원      0      0      0      0      1      0      0      0
11  0.996485  0.151564  0.533567  인천      0      0      0      0      0      0      0      1
12  0.225425  0.856177  0.936210  울산      0      0      0      0      0      1      0      0
13  0.468662  0.175380  0.349952  울산      0      0      0      1      0      0      0      0
14  0.046061  0.829916  0.215359  경기      0      1      0      0      0      0      0      0
15  0.189991  0.219364  0.657545  경기      0      0      0      0      0      0      0      1
16  0.417585  0.422771  0.852952  부산      0      0      0      0      0      1      0      0
17  0.319799  0.134814  0.403702  대구      1      0      0      0      0      0      0      0
18  0.056263  0.551939  0.926016  세종      0      0      0      0      0      0      0      1
19  0.587953  0.641398  0.023584  대전      0      0      0      1      0      0      0      0
pd.get_dummies(dataset)
           0         1         3  지역_강원  지역_경기  지역_광주  지역_대구  ...   4_광주  4_대구  4_대전  4_부산  4_세종  4_울산  4_인천
0   0.307897  0.316072  0.618074      0      0      1      0  ...      0     0     0     1     0     0     0
1   0.477914  0.764095  0.755466      0      0      0      0  ...      0     0     0     0     0     0     1
2   0.463568  0.583745  0.793676      0      0      0      0  ...      1     0     0     0     0     0     0
3   0.569511  0.050893  0.955615      0      0      0      0  ...      0     0     0     1     0     0     0
4   0.044937  0.143167  0.385306      0      1      0      0  ...      0     0     0     0     0     1     0
5   0.421139  0.422370  0.566858      0      0      0      0  ...      1     0     0     0     0     0     0
6   0.696831  0.977163  0.835727      0      0      0      0  ...      0     0     0     0     0     0     0
7   0.113537  0.760165  0.743158      0      0      0      0  ...      0     0     0     1     0     0     0
8   0.223700  0.311592  0.118490      0      0      0      0  ...      0     0     0     1     0     0     0
9   0.137646  0.600287  0.700735      0      0      1      0  ...      0     0     0     0     0     0     0
10  0.031429  0.391089  0.873315      0      0      0      0  ...      0     0     0     0     0     0     0
11  0.996485  0.151564  0.533567      0      0      0      0  ...      0     0     0     0     0     0     1
12  0.225425  0.856177  0.936210      0      0      0      0  ...      0     0     0     0     0     1     0
13  0.468662  0.175380  0.349952      0      0      0      1  ...      0     0     0     0     0     1     0
14  0.046061  0.829916  0.215359      0      1      0      0  ...      0     0     0     0     0     0     0
15  0.189991  0.219364  0.657545      0      0      0      0  ...      0     0     0     0     0     0     0
16  0.417585  0.422771  0.852952      0      0      0      0  ...      0     0     0     1     0     0     0
17  0.319799  0.134814  0.403702      1      0      0      0  ...      0     1     0     0     0     0     0
18  0.056263  0.551939  0.926016      0      0      0      0  ...      0     0     0     0     1     0     0
19  0.587953  0.641398  0.023584      0      0      0      1  ...      0     0     1     0     0     0     0

[20 rows x 20 columns]

결론

아래와 같이 사용하면 전체 데이터가 모두 one hot encoding 됩니다.
pd.get_dummies(dataset)