0. Data Science
Scientific method
1. Ask a question
목표가 무엇인지, 모든 데이터를 가지고 있다면 어떤 것을 할 것인지, 무엇을 예측하거나 추정할지?
2. Determine the necessary data
sample size, 가설을 증명하거나 기각하기 위해서 필요한 데이터
3. Get the data
어떤 데이터들과 연관있는지, 데이터를 사용할 수 있는지?
4. Clean and organize the data
데이터를 읽을 수 있는지 확인하고 필요없는 데이터를 제거한 뒤 데이터를 표 형식으로 변환
5. Explore the data
데이터를 시각화하고 이상치가 없는지, 어떤 패턴이 존재하는지 확인
6. Model the data
모델을 구축해서 학습시키고 검증함
7. Communicate your finding
우리가 뭘 배웠는지, 결과가 의미가 있는지 확인
Clean the data
데이터는 일반적으로 엑셀 형태와 같이 행, 열로 이루어져있습니다. 하지만 Raw data는 대부분 정리되지 않은 다양한 형태입니다. 결측값 또한 많이 존재할겁니다.
그렇기 떄문에 데이터를 깔끔하게 정리한다는건 매우 중요합니다. 헷갈리게도 데이터 처리는 조금 다른 의미를 가지고 있습니다. 데이터 처리는 맞지 않는 값이나 라벨링을 제거하거나 올바르게 바꾸는 것을 의미합니다.
이제 데이터를 정리해보겠습니다. 대부분이 사용하는 파이썬의 Pandas 라이브러리를 쓰겠습니다. Pandas 라이브러리는 데이터셋을 만들때, 데이터를 CSV과 같은 파일로 변환할 때, 데이터를 읽을 때, 데이터셋을 변경할 때 등 데이터를 사용할 때 우리에게 큰 도움을 주는 아주 유용한 툴입니다.
import pandas as pd
import matplotlib.pyplot as plt
1.데이터 읽어오기
data = pd.read_csv("data_name.csv")
new_data = pd.read_csv("data_name2.csv")
Pandas 라이브러리는 csv 파일을 데이터 테이블로 읽어올 수 있습니다.
2. 데이터 출력
print(data.head(20))
head()에 적은 숫자 만큼의 행을 읽어 출력합니다.
3.데이터 합치기
new = pd.merge(data, new_data)
파일 두 개를 합쳐서 사용하고 싶을 때 merge를 사용합니다. 단, merge()함수는 두 데이터프레임을 각 데이터에 존재하는 고유값(Key)을 기준으로 병합합니다. 다른 병합 함수로 concat(),join()이 있습니다.
4. 데이터 인덱싱
new.loc[new_df.column_name<100000,"example"]="exmaple1"
new.loc[new_df.column_name >= 100000, "exmaple"] = "exmaple2"
Explore the Data
데이터를 들여다 보는 것은 데이터를 빠르게 이해하고 진행하기 전에 변경해야 할 사항이 있는지 여부를 결정하는 데 도움이 됩니다. 통계와 시각화를 사용하여 데이터에 대해 알아보겠습니다.
-통계
데이터 세트를 처음 가져올 때 기술 통계를 사용하여 데이터 세트에 무엇이 포함되어 있는지 파악할 수 있습니다. 기술 통계량은 평균, 중위값, 표준 편차와 같은 통계 계산을 사용하여 데이터의 대략적인 모습을 파악할 수 있습니다. 파이썬에선 Numpy를 사용하여 통계 값을 계산할 수 있습니다.
-시각화
데이터를 시각화하는 것 또한 데이터를 빠르게 파악할 수 있습니다. 데이터 시각화를 통해 패턴, 관계, 이상치, 전체 데이터 세트 간의 관계를 확인할 수 있습니다. 특히 대용량 데이터를 작업할 때 유용합니다. 파이썬에선 Matplotlob, Seaborn 등을 사용합니다.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
히스토그램 예시
age = new["column_name"]
sns.displot(column_name)
plt.show()
평균
column_mean = new.groupby("example").column_name.mean()
barplot
plt.close()
sns.barplot(
data=new,
x= "column_name",
y= "column_name2"
)
plt.show()
*이전 코드에서 plt.show()를 사용한 경우 plt.close()를 해주세요
Violin plot
plt.close()
sns.violinplot(x="column_name", y="column_name2", data=new_df)
plt.show()
Modeling
데이터 전처리를 끝냈다면 모델을 만듭니다. 모델은 실제 데이터의 정보를 제공해주고 변수를 추측할 수 있게 해줍니다. 모델은 둘 이상의 변수 사이의 관계를 표현하고 우리는 그 값을 기반으로 추론하고 예측할 수 있습니다.
x = new_df["column_name"]
y = new_df["column_name2"]
plt.scatter(x, y, alpha=0.5)
sns.regplot(x="column_name", y="column_name2", data=new)
plt.show()
저는 데이터에 column_name=population_proper, column_name2=age라고 되어있습니다. scatter plot을 그려준 후, regression 그림을 그려주면 이렇게 두 사진이 겹쳐져 나오게 됩니다.
sns.set_style("darkgrid")
sns.set_palette("bright")
sns.despine()
sns.regplot(x="x_axis_name", y="y_axis_name", data=new)
exam = plt.subplot(1, 1, 1)
exam.set_xticks([100000, 1000000, 2000000, 4000000, 8000000])
exam.set_xticklabels(["100k", "1m", "2m","4m", "8m"])
exam.set_xlabel("Modify x axis")
exam.set_ylabel("Modify y axis")
plt.title("Example")
plt.show()
이렇게 사진의 설정을 바꿀수도 있습니다.
set_xticks은 눈금을 설정하고, set_xticklabels는 눈금 이름을, set_xlabel/set_ylabel은 x축/y축의 이름을 설정합니다.