SIGNATE Quest ① 데이터에서 사전 처리로 읽기
비즈니스의 일환으로 BI 환경 구축(Talend, Snowflake, Quicksight)을 진행하는 과정에서 기계학습은 배우고 싶어하면서도 자주 착수하지 못하는 분야다.
SIGNATE에서'비긴너 한정전'을 개최한다는 것을 알게 된 만큼 이번 기회에 도전해보려고 한다.
어디서부터 착수하는 게 좋을지 몰라도'금융기관의 TV 마케팅의 효율화'일부는 무료로 개방되므로 여기서 배운 내용을 자신의 학습 노트로 기록하기 위해 이 기사를 제작했다.
토대
# pandasのインポート
import pandas as pd
# データの読み込み
df = pd.read_csv('data.csv', index_col='id')
#数値型データの基本統計量
print( df.describe() )
#文字列型データの基本統計量
print( df.describe(include=['O']) )
※ゼロではなく、大文字のオーです。
# 変数dfの型の表示
print( type(df) )
# カラムyの表示
print( df['y'] )
# カラムyのみを取り出したデータの型の表示
print( type(df['y']) )
# カラムage, job, yをこの順に取り出したデータの表示
print( df[['age', 'job', 'y']] )
# インデックス2,3 カラムage, job, yをこの順に取り出したデータの表示
print( df.loc[[2, 3], ['age', 'job', 'y']] )
# カラムyを取り除いたデータの表示
print( df.drop('y', axis=1) )
#単純集計
# カラムpoutcomeの要素の種類と出現数の表示
print( df['poutcome'].value_counts() )
# カラムyの要素の種類と出現数の表示
print( df['y'].value_counts() )
# value_counts関数を使うことで、そのカラムに存在する要素とその出現数を表示
print( df['poutcome'].value_counts() )
변수 관련1. 수치로 확인
- 상관 계수
2. 시각화 확인
산도
상자형 수염도
상관수
Pandas 라이브러리 함수 중 하나인 corr 함수입니다.수치 데이터의 교차 통계를 통해 관련성을 나타내다.
print(df.corr())
시각화
관련 방법을 표시하기 위해 산포도와 상자호도를 자주 사용한다.
산포도
양적 데이터 간의 상관성을 확인할 때 사용
상자형 수염도
양의 데이터와 질량의 데이터 간의 관계를 확인할 때 사용
상자수염도 만드는 방법
1. 질적 데이터와 양적 데이터 테이블 작성
2. 각 질량 데이터의 양에 따라 상자수도를 만든다
(이하 a시 최대치 4, 최소치 1의 상자수염도 제작)
분석 방법
정액예금을 신청하는지 여부에 어떤 변수가 영향을 미칠지 기본 통계량과 도표를 참고하여 가설을 세우십시오.검은 구름에서 데이터를 보는 것이 아니라 가설을 만들어 검증하면 효과적으로 분석할 수 있다.예를 들면 다음과 같은 것들을 생각할 수 있다.
가설지난번 행사에서 성적을 신청한 사람은 쉽게 반복되지 않습니까?
가설정기예금은 돈을 자유롭게 찾을 수 없는 상품이기 때문에 충분한 자금이 있는 사람은 신청하기 쉽죠.
가설영업에 오래 노출된 사람과는 신청할 때 마음이 흔들리기 쉽죠(영업사원의 손목에 따라).
교차 통계
가설 1을 확인하기 위해 (1) 지난번 Operation에서 작성한 교차 통계 결과를 대입한 변수 크로스를 이용하여 각 열poutcome의 요소의 신청률을 계산하고 변수 rate를 대입한다.
# クロス集計の実行
import pandas as pd
df = pd.read_csv('data.csv', index_col='id')
cross = pd.crosstab(df['poutcome'], df['y'], margins=True)
# 申込率の計算
rate = cross[1] / cross["All"]
# クロス集計結果に申込率cvrを追加
cross["cvr"] = rate
print( cross )
# クロス集計表からインデックス'success', 'failure'、カラム'cvr'のみを取り出して表示
print( cross.loc[["success", "failure"], "cvr"])
열 매핑 표시관련 관계를 행렬의 표로 만들어도 수치의 나열에서 어떤 관련성이 높은지 알기 어려우므로 가시적으로 확인해야 한다.
# ライブラリのインポート
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# データの読み込み
df = pd.read_csv('data.csv', index_col='id')
# 量的データの相関係数の計算
corr_matrix = df.corr()
# heatmapを作成
sns.heatmap(corr_matrix, cmap="Reds")
# グラフにタイトルを追加
plt.title('Correlation')
# グラフを表示
plt.show()
데이터 필터링
Pandas는 DataFrame을 Excel의 필터 기능과 동일한 처리를 수행하는 대입 변수 [조건식]로 기술합니다.DataFrame을 대입하는 변수 ['열 이름'= = 값으로 조건 표현식을 지정하면 해당 열에서 해당 값의 행만 추출할 수 있습니다.대표적인 조건식은 다음과 같다.
지정된 값과 동일한 데이터: DataFrame에 대입된 변수 ['열 이름'] = 값
지정된 값과 다른 데이터: DataFrame에 대입된 변수 ['열 이름'] 시도 33; =값
지정된 값보다 큰 데이터: DataFrame의 변수 ['열 이름'] 값 대입
값 이상의 데이터 지정: DataFrame에 대입된 변수 ['열 이름']>= 값
예를 들어, DataFrame을 대입하는 변수를 X로 설정하면 다음과 같이 열 A의 값이 0인 조건으로 데이터가 필터링됩니다.
X[X['열A'==0]
또한 데이터를 필터링하는 특정 열 B만 선택하려면 다음과 같이 하십시오.
X[X[열 A'==0][열 B']
이 기능을 사용하면 Y(정기예금 신청 유무(1:유, 0:무)가'1'일 때의 열duration(최종 접촉 시간)만 추출할 수 있습니다.
# pandasのインポート
import pandas as pd
# データの読み込み
df = pd.read_csv('data.csv', index_col='id')
# yの値が1のデータを表示
print( df[df['y']==1] )
# yの値が1のデータのdurationを表示
print( df[df['y']==1]['duration'] )
그림 그리기수치 데이터의 데이터 분포를 확인하는 가시화 방법에는 직사각형이 있다.직사각형을 사용하면 수치 데이터의 범위, 수치 데이터 중 주파수가 가장 높은 구역이 어디인지 확인할 수 있다.
그러면 열duration(최종 접촉 시간)에 대해 열 y(정기예금 신청 유무(1:유무, 0:무)와 열 y(1:유, 0:무)를 0과 1로 나눈 두 가지 직사각형을 한 도표에 그려 비교적 분포한다.직사각형은 seaburn의distplot 함수를 사용하여 다음과 같이 만듭니다.
seaborn.distplot(Series 대입 변수)
또한 두 가지 데이터를 중첩하려면distplot 함수를 두 번 기술하면 그릴 수 있다.
도표에 도례를 추가할 때distplot 옵션으로 탭 이름을 지정하고 matplotlib의legend 함수를 기술합니다.
seaborn.distplot(Seriesを代入した変数, label="ラベル名")
matplotlib.pyplot.legend()
matplotlib에서는 도표의 미관을 조정하기 위해 많은 함수를 준비했다.예를 들어 x축과 y축에 이름을 붙이려면 xlabel 함수와 ylabl 함수를 사용하십시오.matplotlib.pyplot.xlabel(x축의 이름)
matplotlib.pyplot.ylabl(y 축의 이름)
또한 xlim 함수를 사용하여 x축의 표시 범위를 지정합니다.(y축은 ylim 함수에서도 동일한 디스플레이 범위를 지정할 수 있습니다.)
matplotlib.pyplot.xlim(x축의 하한값, x축의 상한값)
# pandasのインポート
import pandas as pd
# データの読み込み
df = pd.read_csv('data.csv', index_col='id')
# matplotlib.pyplotのインポート
import matplotlib.pyplot as plt
# seabornのインポート
import seaborn as sns
# durationの抜き出し
duration_0 = df[df['y']==0]['duration']
duration_1 = df[df['y']==1]['duration']
# ヒストグラムの作成
sns.distplot(duration_0, label='y=0')
sns.distplot(duration_1, label='y=1')
# グラフにタイトルを追加
plt.title('duration histgram')
# グラフのx軸に名前を追加
plt.xlabel('duration')
# グラフのy軸に名前を追加
plt.ylabel('frequency')
# x軸の表示範囲の指定
plt.xlim(0, 2000)
# グラフに凡例を追加
plt.legend()
# グラフを表示
plt.show()
특징량의 생성과 가공
Reference
이 문제에 관하여(SIGNATE Quest ① 데이터에서 사전 처리로 읽기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rbrf7321/items/0f249aa4a53d79653269텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)