spark-shell 기상 조건에 따른 관객 동원 수에 미치는 영향 조사 (1)

6326 단어 스파크spark-shell

목적



Apache Spark의 MLlib에 의한 기계 학습을 이용하여 기상 조건이 부여하는 고시엔 야구장에서의 프로야구 관객 동원수에 대한 영향을 조사해 보겠습니다.
※이쪽의 투고는 데이터의 준비 단계까지입니다

데이터 준비



기상 데이터

2019년 3월 29일부터 9월 30일까지의 기상 데이터를 기상청의 페이지로부터 취득했습니다(감사합니다).
다만, 니시노미야시의 데이터에는 기온이나 풍속 등의 정보가 없었기 때문에, 대신에 오사카시의 데이터를 취득하고 있습니다.
과거 기상 데이터 다운로드

여러가지 데이터를 지정할 수 있는 것 같습니다만, 우선 이번 지정한 항목은 이하입니다.
- 강수량의 합계(mm)
- 평균 기온(℃)
- 평균 풍속(m/s)

이것을 weather.csv라는 이름으로 저장하십시오.

관객 동원 수 데이터

2019년 시즌의 성적 데이터를 이하의 페이지를 참고로 했습니다(감사합니다)
프로야구 Freak

사용하고 싶은 데이터는 고시엔의 관객 동원수만이었습니다만, 드디어 승패나 대전 상대등도 취득했습니다.
여기서 시작 시간과 승패에 대해서는 다음과 같이 변환하고 있습니다.
[시작 시간]
14:00(데이게임) -> 0
18:00 (나이트 게임) -> 1

[승패]
승리 -> 0
패배 -> 1
무승부 -> 2


각 파일(weather.csv, game.csv)을 HDFS에 저장합니다.
이번에는/data/mllib/input/부하에 저장했습니다.

또, 미리 필드명을 이하와 같이 변경해 둡니다.

weather.csv



game.csv



spark-shell 시작


/usr/hdp/2.6.2.0-205/spark2/bin/spark-shell --master yarn --deploy-mode client --packages org.apache.lucene:lucene-kuromoji:3.6.2 --conf spark.serializer=org.apache.spark.serializer.KryoSerializer

버전은 다음과 같습니다.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.1.1.2.6.2.0-205
      /_/

Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_232)

기상 데이터 로드

Weather의 case class를 정의해 둡니다.
case class Weather(
  date: String,
  dayOfWeek: String,
  rainfall: Double,
  aveTemp: Double,
  aveWindSpeed: Double)

spark 라이브러리를 사용하여 DataFrame으로 로드합니다.
scala> import org.apache.spark.sql.Encoders
scala> val schemaWeather = Encoders.product[Weather].schema
scala> val weatherCSV = spark.read.option("header","true").schema(schemaWeather).csv("/data/mllib/input/weather.csv").as[Weather]
scala> weatherCSV.first
res0: Weather = Weather(2019/3/29,金,0.0,12.1,2.0)

관객 동원 수 데이터 로드

BaseballGame의 case class를 정의해 둡니다.
case class BaseballGame(
  date: String,
  startTime: Integer,
  result: Integer,
  opponent: String,
  startingPitcher: String,
  audience: Integer,
  gameTime: Double)

spark 라이브러리를 사용하여 DataFrame으로 로드합니다.
scala> val schemaGame = Encoders.product[BaseballGame].schema
scala> val gameCSV = spark.read.option("header","true").schema(schemaGame).csv("/data/mllib/input/game.csv").as[BaseballGame]
scala> gameCSV.first
res6: BaseballGame = BaseballGame(2019/4/9,1,0,DeNA,ガルシア,46298,3.5)

스키마 확인

기상 데이터, 관객 동원수 데이터 각각의 스키마를 확인해 둡니다.
scala> weatherCSV.printSchema
root
 |-- date: string (nullable = true)
 |-- dayOfWeek: string (nullable = true)
 |-- rainfall: double (nullable = true)
 |-- aveTemp: double (nullable = true)
 |-- aveWindSpeed: double (nullable = true)

scala> gameCSV.printSchema
root
 |-- date: string (nullable = true)
 |-- startTime: integer (nullable = true)
 |-- result: integer (nullable = true)
 |-- opponent: string (nullable = true)
 |-- startingPitcher: string (nullable = true)
 |-- audience: integer (nullable = true)
 |-- gameTime: double (nullable = true)

데이터 병합

date 열을 사용하여 기상 데이터와 관객 동원 수 데이터를 결합합니다.
관객 동원수 데이터가 적기 때문에 이에 대해 기상 데이터를 결합해 갑니다.
scala> val gameAndWeather = gameCSV.join(weatherCSV, "date")
scala> gameAndWeather.show
+---------+---------+------+--------+---------------+--------+--------+---------+-----------+-------+------------+
|     date|startTime|result|opponent|startingPitcher|audience|gameTime|dayOfWeek|rainfall|aveTemp|aveWindSpeed|
+---------+---------+------+--------+---------------+--------+--------+---------+-----------+-------+------------+
| 2019/4/9|        1|     0|    DeNA|           ガルシア|   46298|     3.5|        火|        0.0|   12.3|         3.2|
|2019/4/10|        1|     1|    DeNA|             青柳|   40116|    3.23|        水|       16.0|    9.3|         3.5|
|2019/4/11|        1|     1|    DeNA|             秋山|   38078|    3.27|        木|        0.0|   11.4|         3.3|

데이터를 결합할 때까지 가능했습니다.
이 데이터를 이용하여 계속 분석을 진행합니다.

좋은 웹페이지 즐겨찾기