《python을 이용하여 데이터 분석》 독서노트의 데이터 변환(二)
25573 단어 데이터 분석
데이터 변환
이산화 및 분리
연속치는 자주 이산화되거나'상자'로 분리되어 분석해야 한다.현재 우리는 한 그룹의 연령 데이터를 가지고 있는데, 우리는 그들을 18-25, 26-35, 35-60, 그리고 60 이상 네 그룹으로 나누고 싶다.그룹 구성을 위해 pandas의 cut을 사용할 수 있습니다.import pandas as pd
ages = [20,22,25,27,21,23,37,31,61,45,41,32]
bins = [18,25,35,60,100]
cats = pd.cut(ages,bins)
print(cats)
# [(18, 25], (18, 25], (18, 25], (25, 35], (18, 25], ..., (25, 35], (60, 100], (35, 60], (35, 60], (25, 35]]
# Length: 12
# Categories (4, interval[int64]): [(18, 25] < (25, 35] < (35, 60] < (60, 100]]
cut는 Catagorical 대상을 되돌려줍니다.cats.codes
#
# [0 0 0 1 0 0 2 1 3 2 2 1]
print(cats.categories)
#
# IntervalIndex([(18, 25], (25, 35], (35, 60], (60, 100]],
# closed='right',
# dtype='interval[int64]')
pd.value_counts(cats)
# (18, 25] 5
# (35, 60] 3
# (25, 35] 3
# (60, 100] 1
# dtype: int64
우리는 그룹을 구성할 때 labels 옵션을 통해 그룹의 이름을 정의할 수 있습니다.cats = pd.cut(ages,bins,labels=['youth','youngAdult','MiddleAge','Senior'])
print(cats)
# [youth, youth, youth, youngAdult, youth, ..., youngAdult, Senior, MiddleAge, MiddleAge, youngAdult]
# Length: 12
# Categories (4, object): [youth < youngAdult < MiddleAge < Senior]
print(cats.value_counts())
# youth 5
# youngAdult 3
# MiddleAge 3
# Senior 1
# dtype: int64
컨테이너(그룹)를 진행할 때 컨테이너의 개수가 아닌 컨테이너로 전송될 수 있습니다.pandas는 자동으로 데이터의 최대치와 최소치를 근거로 긴 컨테이너를 계산합니다.import pandas as pd
import numpy as np
data = np.random.rand(20)
print(pd.cut(data,4,precision = 2))
#precision = 2
# [(0.29, 0.52], (0.057, 0.29], (0.057, 0.29], (0.52, 0.74], (0.52, 0.74], ..., (0.29, 0.52], (0.057, 0.29], (0.29, 0.52], (0.74, 0.97], (0.74, 0.97]]
# Length: 20
# Categories (4, interval[float64]): [(0.057, 0.29] < (0.29, 0.52] < (0.52, 0.74] < (0.74, 0.97]]
pands의 qcut는 견본의 분위수를 통해 상자를 나누기 때문에 이 함수를 통해 긴 상자를 나눌 수 있습니다.data = np.random.randn(1000)
cats = pd.qcut(data,4) #
print(cats)
# [(0.0416, 0.712], (-2.864, -0.607], (0.712, 3.555], (-2.864, -0.607], (-2.864, -0.607], ..., (-2.864, -0.607], (0.712, 3.555], (-0.607, 0.0416], (0.0416, 0.712], (0.0416, 0.712]]
# Length: 1000
# Categories (4, interval[float64]): [(-2.864, -0.607] < (-0.607, 0.0416] < (0.0416, 0.712] <
# (0.712, 3.555]]
print(cats.value_counts())
# (-2.864, -0.607] 250
# (-0.607, 0.0416] 250
# (0.0416, 0.712] 250
# (0.712, 3.555] 250
# dtype: int64
또한 표시할 수 있는 지정된 상자 모서리는 분위수이므로 0-1 사이의 수여야 합니다.data = np.random.randn(1000)
cats = pd.qcut(data,[0,0.1,0.9,1.])
print(cats)
# [(-1.335, 1.269], (-1.335, 1.269], (-1.335, 1.269], (-1.335, 1.269], (1.269, 3.305], ..., (-1.335, 1.269], (-1.335, 1.269], (-1.335, 1.269], (1.269, 3.305], (-1.335, 1.269]]
# Length: 1000
# Categories (3, interval[float64]): [(-3.5829999999999997, -1.335] < (-1.335, 1.269] < (1.269, 3.305]] (0.712, 3.555]]
print(cats.value_counts())
# (-3.5829999999999997, -1.335] 100
# (-1.335, 1.269] 800
# (1.269, 3.305] 100
# dtype: int64
예외 값 탐지 및 필터링
이제 1000행 4열의 DataFrame이 있습니다. 열에서 절대값이 3보다 큰 값을 찾으려면 다음과 같이 하십시오.import pandas as pd
import numpy as np
data = pd.DataFrame(np.random.randn(1000,4))
col = data[2]
print(col[np.abs(col) > 3])
# 350 -4.575044
# 770 -3.001040
# Name: 2, dtype: float64
또한 다음과 같은 방법으로 요소의 절대값이 3보다 큰 줄을 얻을 수 있습니다.data = pd.DataFrame(np.random.randn(1000,4))
print(data[(np.abs(data)>3).any(1)])
#any True
# 0 1 2 3
# 16 0.007730 1.592332 -0.516403 -3.182190
# 78 -0.574520 3.326386 1.297592 0.918248
# 148 -3.253763 -0.879153 -0.341380 -0.421963
# 195 -0.595610 0.122527 -2.147196 3.699034
# 344 -4.702560 -0.519187 -0.696294 0.027065
# 425 -0.745760 -0.530089 -1.714175 -3.268162
# 632 -1.320824 -0.182225 -0.007968 3.311693
# 650 -3.168038 1.513647 -0.604709 -0.353666
# 740 -0.225773 -3.128919 -1.628717 0.951415
# 788 -0.212660 2.015071 0.231082 4.244741
# 846 0.907867 1.527613 -3.339816 0.001608
# 852 -0.585060 0.137457 3.379468 -0.924044
# 942 3.438187 0.061082 -0.202052 -1.716093
# 943 -0.106008 -0.256375 -3.786214 -0.589181
다음과 같은 방법으로 값을 모두 -3에서 3 사이로 제한할 수 있습니다(3보다 큰 것은 3으로, -3보다 작은 것은 -3으로 변경).data = pd.DataFrame(np.random.randn(1000,4))
data[np.abs(data) > 3] = np.sign(data) * 3
#sign 1 -1
print(data.describe())
# 0 1 2 3
# count 1000.000000 1000.000000 1000.000000 1000.000000
# mean -0.018379 -0.033751 0.003946 -0.013483
# std 1.010813 1.008051 0.979408 0.957267
# min -3.000000 -3.000000 -3.000000 -3.000000
# 25% -0.689586 -0.699035 -0.672904 -0.661879
# 50% -0.017652 -0.009849 0.015468 -0.005632
# 75% 0.633984 0.621483 0.685101 0.626534
# max 3.000000 3.000000 3.000000 2.711717
교환 및 무작위 표본 추출
numpy를 사용합니다.random.permutation (n) 은 무작위 수열 (0~n-1로 구성) 을 얻을 수 있습니다.DataFrame 또는 Series의 take 방법을 사용하여 행 스왑을 수행할 수 있습니다.import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(20).reshape((5,4)))
# 0 1 2 3
# 0 0 1 2 3
# 1 4 5 6 7
# 2 8 9 10 11
# 3 12 13 14 15
# 4 16 17 18 19
sampler = np.random.permutation(5)
sampler
# [1 2 4 3 0]
data.take(sampler)
# 0 1 2 3
# 1 4 5 6 7
# 2 8 9 10 11
# 4 16 17 18 19
# 3 12 13 14 15
# 0 0 1 2 3
DataFrame과 Series의 Sample 방법을 사용하여 샘플을 추출할 수 있습니다. 인자 n은 추출된 샘플의 수이고, Replace는 한 줄이 뽑힌 후에 다시 뽑힐 수 있는지 여부를 나타냅니다. (기본값은 False입니다.)data.sample(n = 3,replace = True)
# 0 1 2 3
# 3 12 13 14 15
# 1 4 5 6 7
# 1 4 5 6 7
계산 지표/가상 변수
컴포넌트를 "가상"또는 "지표"매트릭스로 변환하는 것은 통계 모델링이나 머신 러닝을 위한 변환 작업입니다.만약 DataFrame의 열에 k개의 다른 값이 있다면, k열의 값이 0 또는 1인 DataFrame 또는 행렬을 파생시킬 수 있다.pandas의 get 사용 가능dummies 함수는 다음과 같은 기능을 수행합니다.import pandas as pd
df = pd.DataFrame({'key':list('bbacab'),
'data1':range(6)})
# key data1
# 0 b 0
# 1 b 1
# 2 a 2
# 3 c 3
# 4 a 4
# 5 b 5
pd.get_dummies(df['key'])
# a b c
# 0 0 1 0
# 1 0 1 0
# 2 1 0 0
# 3 0 0 1
# 4 1 0 0
# 5 0 1 0
우리는 각 열의 이름에 접두사를 붙이고 다른 데이터와 통합할 수 있다.dummies = pd.get_dummies(df['key'],prefix = "key")
df_with_dummy = df[['data1']].join(dummies)
print(df_with_dummy)
# data1 key_a key_b key_c
# 0 0 0 1 0
# 1 1 0 1 0
# 2 2 1 0 0
# 3 3 0 0 1
# 4 4 1 0 0
# 5 5 0 1 0
우리는 getdummies와 cut를 결합하여 사용:values = np.random.rand(10)
# [0.40001288 0.34297895 0.28679133 0.74631303 0.42940742 0.48480155
# 0.0805901 0.38736358 0.76718969 0.38822771]
bins = [0,0.2,0.4,0.6,0.8,1]
# (0.0, 0.2] (0.2, 0.4] (0.4, 0.6] (0.6, 0.8] (0.8, 1.0]
# 0 0 0 1 0 0
# 1 0 1 0 0 0
# 2 0 1 0 0 0
# 3 0 0 0 1 0
# 4 0 0 1 0 0
# 5 0 0 1 0 0
# 6 1 0 0 0 0
# 7 0 1 0 0 0
# 8 0 0 0 1 0
# 9 0 1 0 0 0
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
형태소 분석은 데스크톱을 구성하는 데 도움이?
문자×기계 학습에 흥미를 가져와 개인 범위의 용도를 생각해, 폴더 정리에 사용할 수 있을까 생각해 검토를 시작했습니다.
이번 검토에서는 폴더 구성 & text의 읽기 → mecab × wordcloud를 실시하고 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
import pandas as pd
ages = [20,22,25,27,21,23,37,31,61,45,41,32]
bins = [18,25,35,60,100]
cats = pd.cut(ages,bins)
print(cats)
# [(18, 25], (18, 25], (18, 25], (25, 35], (18, 25], ..., (25, 35], (60, 100], (35, 60], (35, 60], (25, 35]]
# Length: 12
# Categories (4, interval[int64]): [(18, 25] < (25, 35] < (35, 60] < (60, 100]]
cats.codes
#
# [0 0 0 1 0 0 2 1 3 2 2 1]
print(cats.categories)
#
# IntervalIndex([(18, 25], (25, 35], (35, 60], (60, 100]],
# closed='right',
# dtype='interval[int64]')
pd.value_counts(cats)
# (18, 25] 5
# (35, 60] 3
# (25, 35] 3
# (60, 100] 1
# dtype: int64
cats = pd.cut(ages,bins,labels=['youth','youngAdult','MiddleAge','Senior'])
print(cats)
# [youth, youth, youth, youngAdult, youth, ..., youngAdult, Senior, MiddleAge, MiddleAge, youngAdult]
# Length: 12
# Categories (4, object): [youth < youngAdult < MiddleAge < Senior]
print(cats.value_counts())
# youth 5
# youngAdult 3
# MiddleAge 3
# Senior 1
# dtype: int64
import pandas as pd
import numpy as np
data = np.random.rand(20)
print(pd.cut(data,4,precision = 2))
#precision = 2
# [(0.29, 0.52], (0.057, 0.29], (0.057, 0.29], (0.52, 0.74], (0.52, 0.74], ..., (0.29, 0.52], (0.057, 0.29], (0.29, 0.52], (0.74, 0.97], (0.74, 0.97]]
# Length: 20
# Categories (4, interval[float64]): [(0.057, 0.29] < (0.29, 0.52] < (0.52, 0.74] < (0.74, 0.97]]
data = np.random.randn(1000)
cats = pd.qcut(data,4) #
print(cats)
# [(0.0416, 0.712], (-2.864, -0.607], (0.712, 3.555], (-2.864, -0.607], (-2.864, -0.607], ..., (-2.864, -0.607], (0.712, 3.555], (-0.607, 0.0416], (0.0416, 0.712], (0.0416, 0.712]]
# Length: 1000
# Categories (4, interval[float64]): [(-2.864, -0.607] < (-0.607, 0.0416] < (0.0416, 0.712] <
# (0.712, 3.555]]
print(cats.value_counts())
# (-2.864, -0.607] 250
# (-0.607, 0.0416] 250
# (0.0416, 0.712] 250
# (0.712, 3.555] 250
# dtype: int64
data = np.random.randn(1000)
cats = pd.qcut(data,[0,0.1,0.9,1.])
print(cats)
# [(-1.335, 1.269], (-1.335, 1.269], (-1.335, 1.269], (-1.335, 1.269], (1.269, 3.305], ..., (-1.335, 1.269], (-1.335, 1.269], (-1.335, 1.269], (1.269, 3.305], (-1.335, 1.269]]
# Length: 1000
# Categories (3, interval[float64]): [(-3.5829999999999997, -1.335] < (-1.335, 1.269] < (1.269, 3.305]] (0.712, 3.555]]
print(cats.value_counts())
# (-3.5829999999999997, -1.335] 100
# (-1.335, 1.269] 800
# (1.269, 3.305] 100
# dtype: int64
이제 1000행 4열의 DataFrame이 있습니다. 열에서 절대값이 3보다 큰 값을 찾으려면 다음과 같이 하십시오.
import pandas as pd
import numpy as np
data = pd.DataFrame(np.random.randn(1000,4))
col = data[2]
print(col[np.abs(col) > 3])
# 350 -4.575044
# 770 -3.001040
# Name: 2, dtype: float64
또한 다음과 같은 방법으로 요소의 절대값이 3보다 큰 줄을 얻을 수 있습니다.
data = pd.DataFrame(np.random.randn(1000,4))
print(data[(np.abs(data)>3).any(1)])
#any True
# 0 1 2 3
# 16 0.007730 1.592332 -0.516403 -3.182190
# 78 -0.574520 3.326386 1.297592 0.918248
# 148 -3.253763 -0.879153 -0.341380 -0.421963
# 195 -0.595610 0.122527 -2.147196 3.699034
# 344 -4.702560 -0.519187 -0.696294 0.027065
# 425 -0.745760 -0.530089 -1.714175 -3.268162
# 632 -1.320824 -0.182225 -0.007968 3.311693
# 650 -3.168038 1.513647 -0.604709 -0.353666
# 740 -0.225773 -3.128919 -1.628717 0.951415
# 788 -0.212660 2.015071 0.231082 4.244741
# 846 0.907867 1.527613 -3.339816 0.001608
# 852 -0.585060 0.137457 3.379468 -0.924044
# 942 3.438187 0.061082 -0.202052 -1.716093
# 943 -0.106008 -0.256375 -3.786214 -0.589181
다음과 같은 방법으로 값을 모두 -3에서 3 사이로 제한할 수 있습니다(3보다 큰 것은 3으로, -3보다 작은 것은 -3으로 변경).
data = pd.DataFrame(np.random.randn(1000,4))
data[np.abs(data) > 3] = np.sign(data) * 3
#sign 1 -1
print(data.describe())
# 0 1 2 3
# count 1000.000000 1000.000000 1000.000000 1000.000000
# mean -0.018379 -0.033751 0.003946 -0.013483
# std 1.010813 1.008051 0.979408 0.957267
# min -3.000000 -3.000000 -3.000000 -3.000000
# 25% -0.689586 -0.699035 -0.672904 -0.661879
# 50% -0.017652 -0.009849 0.015468 -0.005632
# 75% 0.633984 0.621483 0.685101 0.626534
# max 3.000000 3.000000 3.000000 2.711717
교환 및 무작위 표본 추출
numpy를 사용합니다.random.permutation (n) 은 무작위 수열 (0~n-1로 구성) 을 얻을 수 있습니다.DataFrame 또는 Series의 take 방법을 사용하여 행 스왑을 수행할 수 있습니다.import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(20).reshape((5,4)))
# 0 1 2 3
# 0 0 1 2 3
# 1 4 5 6 7
# 2 8 9 10 11
# 3 12 13 14 15
# 4 16 17 18 19
sampler = np.random.permutation(5)
sampler
# [1 2 4 3 0]
data.take(sampler)
# 0 1 2 3
# 1 4 5 6 7
# 2 8 9 10 11
# 4 16 17 18 19
# 3 12 13 14 15
# 0 0 1 2 3
DataFrame과 Series의 Sample 방법을 사용하여 샘플을 추출할 수 있습니다. 인자 n은 추출된 샘플의 수이고, Replace는 한 줄이 뽑힌 후에 다시 뽑힐 수 있는지 여부를 나타냅니다. (기본값은 False입니다.)data.sample(n = 3,replace = True)
# 0 1 2 3
# 3 12 13 14 15
# 1 4 5 6 7
# 1 4 5 6 7
계산 지표/가상 변수
컴포넌트를 "가상"또는 "지표"매트릭스로 변환하는 것은 통계 모델링이나 머신 러닝을 위한 변환 작업입니다.만약 DataFrame의 열에 k개의 다른 값이 있다면, k열의 값이 0 또는 1인 DataFrame 또는 행렬을 파생시킬 수 있다.pandas의 get 사용 가능dummies 함수는 다음과 같은 기능을 수행합니다.import pandas as pd
df = pd.DataFrame({'key':list('bbacab'),
'data1':range(6)})
# key data1
# 0 b 0
# 1 b 1
# 2 a 2
# 3 c 3
# 4 a 4
# 5 b 5
pd.get_dummies(df['key'])
# a b c
# 0 0 1 0
# 1 0 1 0
# 2 1 0 0
# 3 0 0 1
# 4 1 0 0
# 5 0 1 0
우리는 각 열의 이름에 접두사를 붙이고 다른 데이터와 통합할 수 있다.dummies = pd.get_dummies(df['key'],prefix = "key")
df_with_dummy = df[['data1']].join(dummies)
print(df_with_dummy)
# data1 key_a key_b key_c
# 0 0 0 1 0
# 1 1 0 1 0
# 2 2 1 0 0
# 3 3 0 0 1
# 4 4 1 0 0
# 5 5 0 1 0
우리는 getdummies와 cut를 결합하여 사용:values = np.random.rand(10)
# [0.40001288 0.34297895 0.28679133 0.74631303 0.42940742 0.48480155
# 0.0805901 0.38736358 0.76718969 0.38822771]
bins = [0,0.2,0.4,0.6,0.8,1]
# (0.0, 0.2] (0.2, 0.4] (0.4, 0.6] (0.6, 0.8] (0.8, 1.0]
# 0 0 0 1 0 0
# 1 0 1 0 0 0
# 2 0 1 0 0 0
# 3 0 0 0 1 0
# 4 0 0 1 0 0
# 5 0 0 1 0 0
# 6 1 0 0 0 0
# 7 0 1 0 0 0
# 8 0 0 0 1 0
# 9 0 1 0 0 0
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
형태소 분석은 데스크톱을 구성하는 데 도움이?
문자×기계 학습에 흥미를 가져와 개인 범위의 용도를 생각해, 폴더 정리에 사용할 수 있을까 생각해 검토를 시작했습니다.
이번 검토에서는 폴더 구성 & text의 읽기 → mecab × wordcloud를 실시하고 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(20).reshape((5,4)))
# 0 1 2 3
# 0 0 1 2 3
# 1 4 5 6 7
# 2 8 9 10 11
# 3 12 13 14 15
# 4 16 17 18 19
sampler = np.random.permutation(5)
sampler
# [1 2 4 3 0]
data.take(sampler)
# 0 1 2 3
# 1 4 5 6 7
# 2 8 9 10 11
# 4 16 17 18 19
# 3 12 13 14 15
# 0 0 1 2 3
data.sample(n = 3,replace = True)
# 0 1 2 3
# 3 12 13 14 15
# 1 4 5 6 7
# 1 4 5 6 7
컴포넌트를 "가상"또는 "지표"매트릭스로 변환하는 것은 통계 모델링이나 머신 러닝을 위한 변환 작업입니다.만약 DataFrame의 열에 k개의 다른 값이 있다면, k열의 값이 0 또는 1인 DataFrame 또는 행렬을 파생시킬 수 있다.pandas의 get 사용 가능dummies 함수는 다음과 같은 기능을 수행합니다.
import pandas as pd
df = pd.DataFrame({'key':list('bbacab'),
'data1':range(6)})
# key data1
# 0 b 0
# 1 b 1
# 2 a 2
# 3 c 3
# 4 a 4
# 5 b 5
pd.get_dummies(df['key'])
# a b c
# 0 0 1 0
# 1 0 1 0
# 2 1 0 0
# 3 0 0 1
# 4 1 0 0
# 5 0 1 0
우리는 각 열의 이름에 접두사를 붙이고 다른 데이터와 통합할 수 있다.
dummies = pd.get_dummies(df['key'],prefix = "key")
df_with_dummy = df[['data1']].join(dummies)
print(df_with_dummy)
# data1 key_a key_b key_c
# 0 0 0 1 0
# 1 1 0 1 0
# 2 2 1 0 0
# 3 3 0 0 1
# 4 4 1 0 0
# 5 5 0 1 0
우리는 getdummies와 cut를 결합하여 사용:
values = np.random.rand(10)
# [0.40001288 0.34297895 0.28679133 0.74631303 0.42940742 0.48480155
# 0.0805901 0.38736358 0.76718969 0.38822771]
bins = [0,0.2,0.4,0.6,0.8,1]
# (0.0, 0.2] (0.2, 0.4] (0.4, 0.6] (0.6, 0.8] (0.8, 1.0]
# 0 0 0 1 0 0
# 1 0 1 0 0 0
# 2 0 1 0 0 0
# 3 0 0 0 1 0
# 4 0 0 1 0 0
# 5 0 0 1 0 0
# 6 1 0 0 0 0
# 7 0 1 0 0 0
# 8 0 0 0 1 0
# 9 0 1 0 0 0
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
형태소 분석은 데스크톱을 구성하는 데 도움이?문자×기계 학습에 흥미를 가져와 개인 범위의 용도를 생각해, 폴더 정리에 사용할 수 있을까 생각해 검토를 시작했습니다. 이번 검토에서는 폴더 구성 & text의 읽기 → mecab × wordcloud를 실시하고 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.