2018. 11. 6. 22:31ㆍPython/pandas
지난 시행착오를 통해 분석을하는데 데이터를 어떻게 만들어주느냐가 중요하다는걸 깨달았다.
그러려면 분석을 공부해야될것같다....
일단은 pandas의 사용법을 익히고있으니 그거에 맞춰서만 진행해보자
지난 데이터의 잘못된점을 찾아본다면,
내가 상관관계의 분석을 a의 변화에 맞춰서 b의 변화가 얼마나 이루어지나로 이해했다고 해놓고
데이터는 값이 변화하는걸 뽑은게 아니라, 여자와 남자의 구분수가 얼마나 있는지를 뽑았으니
원하는 결과가 안나왔던거 같다.
그럼 값이 변화하는 데이터를 뽑아보자.
import pandas as pd
from pandas import DataFrame
from pandas import Series
import numpy as np
import matplotlib.pyplot as plt
# Reading abalone data set
pd.set_option('display.float_format', None)
co = pd.read_excel("D:\Project\myProject\python\pandas\CO.xlsx",
sheet_name='Sheet1')
# 필요한열만가지고옴#
co2 = co[ ["남여구분","월소득액","주민번호 앞자리"] ]
## 월소득액이 nan 인거 제거
co2 = co2.dropna()
co2
설명을 하자면
## 월소득액이 10000보다 작은 값이 있을 경우 포맷에 맞춰 변경 co2.loc[(co2["월소득액"] < 10000) & (co2["월소득액"] > 0) , ["월소득액"]] = co2.loc[(co2["월소득액"] < 10000) & (co2["월소득액"] > 0) , ["월소득액"]] * 10000
부분은 월소득액이 어떤거는 2400000 으로되어있고, 어떤거는 240 으로되어있어서 format을 맞춰주는 작업이 필요하였다.
어떤식으로 진행해야될지몰라 여러번시도한결과 위와같이 사용했다.
co2.loc[(co2["월소득액"] < 10000) & (co2["월소득액"] > 0) , ["월소득액"]] =
는 월소득액이 <10000보다 작고 0보다 큰 조건일때의 월소득액 column을 loc로 선택하고, 거기에 값을 대입하는데
co2.loc[(co2["월소득액"] < 10000) & (co2["월소득액"] > 0) , ["월소득액"]] * 10000
그조건에 해당하는 값에 * 10000을 해준다는 의미다..
코드가 너무 번거롭고 수준이 낮은것같지만 (다른방법이 많을듯) 현재로서는 이것밖에 생각이 안났다.
##주민번호 앞자리 string 변경 substring 후 다시 int 변환 co2["주민번호 앞자리"] = co2["주민번호 앞자리"].astype(str) co2['주민번호 앞자리'] = co2['주민번호 앞자리'].apply(lambda e: e[0:2]) co2["주민번호 앞자리"] = co2["주민번호 앞자리"].astype(int)
substring을 해줄려고 보니, python에서는 substring이 없는것같았다?????(맞나??)
자를때 사용을 str[0:2] 이런식으로 사용하는걸로 판단하였고, 이걸 각 값마다 어떻게 적용해줄까 찾아보니
lambda 식이란게 존재하여 lambda식을 사용하였다.
정확하게 찾아본건아니지만 사용되는 형식만 봤을땐
자바스크립트로 따지면
apply(function (e) { e = e.substring(0,2)}) 뭐 이런 느낌인것같아서
문자열자르기인 e[0:2] 를 사용해보니까 적용되었다.
이제 드디어 pandas 의 상관관계 분석 함수인 corr 을 적용해보겠다.
co2.corr()Out[62]:
???????
이게 내가 원하는 값인가?? 라는 생각이 들었다. 제대로 적용한게 맞고, 이렇게 사용하는게 맞나??
그럼 두개는 상관관계가 거의없다고 인식해도되는것일까??
데이터가 실제로 변화가 거의없는것일까???
이를 확인해보기위해 직접 데이터를 만들어보고 상관관계분석을 해봐야될것같다
test_date = {'월소득액': [1000, 1000, 990, 800, 700, 670, 640, 620, 610, 600,590,580,570,560,550,540,530,520,510,300,300,280], '주민번호 앞자리': [40, 40, 41, 42,50,51,51,53,55,58,58,60,62,66,68,80,82,85,88,93,93,93] } #22,22 co3 = pd.DataFrame(test_date)Out[71]:In [72]:co3.corr()Out[72]:
주민번호에 따라 월소득액이 작아지게 data를 만들고 적용해본결과!!
원하는 결과가 나왔다.
-0.0887109
이를 통해 위의 데이터도 맞고, 상관관계분석은 이렇게 사용한다는것을 알았다.
이제 방금뽑은 데이터를 이용해서 그래프를 그려주면 이쁠것같은데....
'Python > pandas' 카테고리의 다른 글
Python pandas - 상관관계 분석 -1 (0) | 2018.11.06 |
---|---|
Pandas 엑셀파일읽고 데이터 컨트롤 (0) | 2018.10.17 |
Python Pandas 시작 (0) | 2018.09.28 |