728x90
반응형
Kaggle 에서 제공하는 타이타닉 데이터를 불러와 생존자 분석 - 샘플 실습
https://www.kaggle.com/c/titanic/data
** ( ~ Sat 31 Dec 2016 )
* 필드 설명
survival Survival (0 = No; 1 = Yes)
pclass Passenger Class (1 = 1st; 2 = 2nd; 3 = 3rd)
name Name
sex Sex
age Age
sibsp Number of Siblings/Spouses Aboard
parch Number of Parents/Children Aboard
ticket Ticket Numbersibsp
fare Passenger Fare
cabin Cabin
embarked Port of Embarkation
* 작업내용
1. elasticsearch-spark 를 활용하여 elasticsearch에 데이터를 저장
- sparkConf 설정
public static SparkConf conf =
new SparkConf().setMaster("local").setAppName("TitanicData")
.set("es.index.auto.create", "true")
.set("es.nodes.discovery", "true")
.set("es.nodes", "192.168.40.18:9200");
public static JavaSparkContext sc = new JavaSparkContext(conf);
- 파일을 불러와 Elasticsearch에 저장
SQLContext sql = new SQLContext(sc);
DataFrame data =
sql.read().format("com.databricks.spark.csv")
.option("header", "true")
//.option("charset", "UTF8")
.option("inferSchema", "true")
.load("C:\\data\\titanic\\train_total.csv");
EsSparkSQL.saveToEs(data, "titanic/train");
2. elasticsearch에서 데이터 로드
SQLContext sql = new SQLContext(sc);
DataFrame data sql.read().format("org.elasticsearch.spark.sql")
.option("header", "true")
//.option("charset", "UTF8")
.option("inferSchema", "true") // schema 자동 추론
.load("titanic/train");
3. 데이터 중 "Age"필드에 빈값을 대표값(평균)으로 셋팅
Double avgAge = Double.parseDouble(
String.format("%.0f", data.select(functions.avg("Age")).first().getDouble(0)));
String[] fill_col = {"Age"};
data = data.na().fill(avgAge.doubleValue(), fill_col);
4. 필요없는 데이터 삭제
데이터 타입을 double형태로 변환 ( features는 반드시 dobule값 )
data = data.drop("Name")
.drop("Cabin")
.drop("Ticket")
.drop("Embarked")
.withColumn("Survived", data.select("Survived").col("Survived").cast("double") );
5. 성별 값을 코드값으로 변환
StringIndexer sexIndexer = new StringIndexer().setInputCol("Sex").setOutputCol("SexIndex");
6. 이용금액을 카테고리로 분류
double[] fareSplit = {
0.0
, 50.0
, 100.0
, 150.0
, 200.0
, Double.POSITIVE_INFINITY};
Bucketizer fareBucket
= new Bucketizer().setInputCol("Fare").setOutputCol("FareBucket").setSplits(fareSplit);
7. 알고리즘 적용 시 사용할 필드를 선택
String[] assembly_col = {"Age", "SexIndex", "FareBucket", "SibSp", "Parch", "Pclass"};
VectorAssembler assembly = new VectorAssembler().setInputCols(assembly_col)
.setOutputCol("tempResult");
8. 범위 형태의 값을 동일한 기준값으로 변환 (표준화)
Normalizer normalizer = new Normalizer().setInputCol("tempResult").setOutputCol("features");
9. 알고리즘 생성 ( LogisticRegression 적용 )
LogisticRegression logreg = new LogisticRegression().setMaxIter(10);
logreg.setLabelCol("Survived");
10. 파이프라인 생성
Pipeline pipeline = new Pipeline().setStages(
new PipelineStage[] {fareBucket, sexIndexer, assembly, normalizer, logreg});
11. 파이프라인 모델 생성 후 결과 추출
PipelineModel model = pipeline.fit(data);
DataFrame result = model.transform(data);
12. 결과 평가
inaryClassificationMetrics metrics =
new BinaryClassificationMetrics(result.select("prediction", "Survived"));
System.out.println(metrics.areaUnderROC());
728x90
반응형
'공부 > Apache spark' 카테고리의 다른 글
[Spark] Spark Cluster 운영하기 (0) | 2021.04.12 |
---|---|
[Spark] 스파크 설치 & 기본실행 (0) | 2021.04.12 |