티스토리 뷰

스파크는 오라클에서 제공하는 언어(?)라고 합니다.

실시간으로 데이터를 병렬처리하는데 유용하다고 알려져 있으며, 

java, scala, python 세 언어를 활용하여 사용할 수 있습니다.


세 언어 중 파이썬을 활용하여 데이터를 분석해보도록 하겠습니다.

그 이유는 파이썬의 장점인 데이터 분석은 살리고 단점인 전처리 속도를 보완하기 위해서입니다.



pyspark라는 모듈을 사용하여 python에서 spark를 사용할 수 있습니다.


프로젝트를 진행하면서 배우는게 가장 빠르게 습득할 수 있는거라 판단되어

러닝 스파크(번개같이 빠른 데이터 분석)에 나와있는 예제를 보며 진행해보록 하겠습니다.



데이터 분석의 첫 번째 편으로 메일 스팸분류기를 만들어보도록 하겠습니다.


#pyspark 불러오기

from pyspark import SparkContext

sc = SparkContext()



from pyspark.mllib.regression import LabeledPoint #라벨을 표시하기 위해 사용 from pyspark.mllib.feature import HashingTF #단어를 숫자로 변환하고 빈도수를 매핑하기 위해 사용 from pyspark.mllib.classification import LogisticRegressionWithSGD #SGD 즉 확률론적경사하강법을 적용한 로지스틱 회귀분석을 위해 사용


#파일읽기

spam = sc.textFile("C:/spark/data/mllib/spam.txt") normal = sc.textFile("C:/spark/data/mllib/normal.txt")


#HashingTF 기능 사용하기 위해 축약어로 정의

tf = HashingTF()


#문장을 빈칸을 기준으로 자른 후, 단어별로 몇 번 나왔는지를 체크하는 함수

spamFeatures = spam.map(lambda email : tf.transform(email.split(" "))) normalFeatures = normal.map(lambda email : tf.transform(email.split(" ")))


#라벨 표시

spamExamples = spamFeatures.map(lambda features : LabeledPoint(1, features)) normalExamples = normalFeatures.map(lambda features : LabeledPoint(0, features))


#두 데이터를 하나로 합침

trainingData = spamExamples.union(normalExamples) trainingData.cache() #메모리에 올려놓기


#학습데이터로 모델만들기

model = LogisticRegressionWithSGD.train(trainingData)


#테스트 데이터 만들기

spamTest = tf.transform("Dear sir, I am a Prince in a far kingdom you have not heard of.".split(" ")) normalTest = tf.transform("Patrick, How are you? Love, Dad".split(" "))


#결과 확인

print("Prediction for positive test example: %f" % model.predict(spamTest)) print("Prediction for negative test example: %f" % model.predict(normalTest))

프린트해보면 결과가 모두 0.0000으로 나오고 있습니다.


그 원인을 파악해본 결과, 트레이닝 데이터와 테스트 데이터에서 같은 단어는 동일한 숫자로 변환이 되어야하는데

현재의 코드로는 그렇게 되지 않고 있었습니다.


그 결과, 학습 데이터와 테스트 데이터는 아예 별게의 것으로 모델이 인식하여 제대로 된 분류를 하지 못하게 된 것입니다.

(예를 들면 트레이닝 데이터에서 'is'라는 단어가 545라는 숫자로 변환이 되었으면, 테스트에서도 'is'라는 단어는 545라는 숫자로 변환이 되어야했지만 파싱결과는 그러하지 않았습니다.)


해결방법을 찾아본 후 글을 수정하도록 하겠습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함