# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
###csv 파일 읽기 default는 ','로 구분된다고 설정
dataFrame = pd.read_csv('C:/Users/Byun YB/Desktop/pandas-master/pandas-master/data/friend_list.csv')
#print (dataFrame)
#print (dataFrame.head(2)) # 처음부터 n개 까지의 데이터를 보여준다. default 5개
#print (dataFrame.tail(2)) # 뒤에서부터 n개 까지의 데이터를 보여준다. default 5개
###txt 파일 읽기
df = pd.read_csv('C:/Users/Byun YB/Desktop/pandas-master/pandas-master/data/friend_list.txt')
#print (df)
### delimiter = '\t'임을 옵션으로 지정해야 함
df = pd.read_csv('C:/Users/Byun YB/Desktop/pandas-master/pandas-master/data/friend_list_tab.txt', delimiter = '\t')
#print (df)
### Header가 없을 떼
#df = pd.read_csv('C:/Users/Byun YB/Desktop/pandas-master/pandas-master/data/friend_list_no_head.csv', delimiter = ',', header = None)
#df.columns = ['name','age','job']
#아레 한 줄은 위 2줄 축약한 것
df = pd.read_csv('C:/Users/Byun YB/Desktop/pandas-master/pandas-master/data/friend_list_no_head.csv', delimiter = ',', header = None, names = ['name', 'age', 'job'])
print (df)
#
# 데이터 프레임 생성하기
#
friend_dict_list = [
{'name': 'John', 'age' : 25, 'job' : 'student'},
{'name': 'Nate', 'age' : 30, 'job' : 'teacher'},
{'name': 'Kevin', 'age' : 30, 'job' : None}
]
df = pd.DataFrame(friend_dict_list)
df = df[['name', 'age', 'job']]
print (df.head())
#
#데이터 프레임 파일로 저장히기
#
#df.to_csv('C:\\Users\\Byun YB\\Desktop\\dist\\friend.csv', index = True, header = True, na_rep = '-')
#
#데이터프레임 행, 열 선택 및 필터하기
#
friend_list = [
['name', ['John', 'Jenny', 'Nate']],
['age', [20,30,30]],
['job', ['student', 'developer', 'teacher']]
]
df = pd.DataFrame.from_items(friend_list)
print (df.loc [[0,2]])
print (df[df.age > 25])
print (df.query('age>25'))
print (df[(df.age>25) & (df.name == 'Nate')])
### Filter Column
friend_dict_list = [
{'name': 'John', 'age' : 25, 'job' : 'student'},
{'name': 'Nate', 'age' : 30, 'job' : 'teacher'},
{'name': 'Kevin', 'age' : 30, 'job' : None}
]
df = pd.DataFrame.from_records(friend_dict_list)
print (df.iloc[:,0:2]) ### 앞부분 row, 뒷부분 column
###by column name
df = pd.read_csv('C:/Users/Byun YB/Desktop/pandas-master/pandas-master/data/friend_list_no_head.csv', delimiter = ',', header = None, names = ['name', 'age', 'job'])
df_filtered = df[['name', 'age']]
print (df.filter(items=['age', 'job']))
print (df)
print (df_filtered)
print(df.filter(like='na', axis=1)) ### column에 'na'문자가 들어간 행만 추출
print (df.filter(regex='b$', axis =1))###b로 끝나는 column을 추출하고 싶을 때
#
#데이터프레임 행,열 삭제하기
#
friends = [{'age':15, 'job':'student'},
{'age':25, 'job':'developer'},
{'age':30, 'job':'teacher'}]
df = pd.DataFrame(friends,
index = ['John', 'Jenny', 'Nate'],
columns = ['age', 'job'])
print (df)
#삭제하고 싶은 행의 index정보를 넘겨준다.
df = df.drop(['John', 'Nate']) # df.drop(['John', 'Nate'], inplace = True)와 같은 의미
print(df)
friends = [{'name':'john', 'age':15, 'job':'student'},
{'name':'Ben','age':25, 'job':'developer'},
{'name':'jenny','age':30, 'job':'teacher'}]
df = pd.DataFrame(friends, columns = ['name', 'age', 'job'])
print (df)
df.drop(df.index[[0,2]], inplace = True)
print(df)
friends = [{'name':'john', 'age':15, 'job':'student'},
{'name':'Ben','age':25, 'job':'developer'},
{'name':'jenny','age':30, 'job':'teacher'}]
df = df[df.age > 20] # dataFrame안에 value 값에 대한 조건으로 추출하는 법
print (df)
#axis=1을 주는 경우는 row가 아니고 'age'값을 가지는 column을 삭제하라는 의미
df = df.drop('age', axis=1)
print (df)
#
#행, 열 생성 및 수정하기
#
friends = [{'name':'john', 'age':15, 'job':'student'},
{'name':'Ben','age':25, 'job':'developer'},
{'name':'jenny','age':30, 'job':'teacher'}]
df = pd.DataFrame(friends, columns = ['name', 'age', 'job'])
print (df)
df['salary'] = 0
print (df)
df['salary'] = np.where(df['job'] != 'student', 'yes', 'no')
print (df)
friends = [{'name':'john', 'midterm':95, 'final':85},
{'name':'Ben','midterm':95, 'final':85},
{'name':'jenny','midterm':35, 'final':15}]
df = pd.DataFrame(friends, columns = ['name', 'midterm', 'final'])
print (df)
df['total'] = df['midterm'] + df['final']
df['average'] = df['total'] / 2
grades = []
for row in df['average']:
if row >= 90:
grades.append('A')
elif row >= 80:
grades.append('B')
else:
grades.append('F')
df['grade'] = grades
print(df)
def pass_or_fail(row):
if row != 'F':
return "Pass"
else:
return "Fail"
df.grade = df.grade.apply(pass_or_fail) #각 row마다 이 함수의 인자로 넣어줘서 함수가 돌아간 후 return value를 변수에 넣어준다
print (df)
date_list = [
{
'yyyy-mm-dd' : '2000-06-27'
},
{
'yyyy-mm-dd' : '2007-10-27'
},
{
'yyyy-mm-dd' : '2011-06-27'
}
]
df = pd.DataFrame(date_list, columns = ['yyyy-mm-dd'])
print (df)
def extract_year(row):
return row.split('-')[0]
df['year'] = df['yyyy-mm-dd'].apply(extract_year)
print(df)
friends = [{'name':'john', 'midterm':95, 'final':85},
{'name':'Ben','midterm':95, 'final':85},
{'name':'jenny','midterm':35, 'final':15}]
df = pd.DataFrame(friends, columns = ['name', 'midterm', 'final'])
df2 = pd.DataFrame([
['Ben', 50, 50]
], columns = ['name', 'midterm', 'final'])
print(df2)
df = df.append(df2, ignore_index = True) #추가되는 인덱스는 무시한다는 의미
print(df)
#
#데이터 그룹 만들기
#
student_list = [{'name': 'John', 'major': "Computer Science", 'sex': "male"},
{'name': 'Nate', 'major': "Computer Science", 'sex': "male"},
{'name': 'Abraham', 'major': "Physics", 'sex': "male"},
{'name': 'Brian', 'major': "Psychology", 'sex': "male"},
{'name': 'Janny', 'major': "Economics", 'sex': "female"},
{'name': 'Yuna', 'major': "Economics", 'sex': "female"},
{'name': 'Jeniffer', 'major': "Computer Science", 'sex': "female"},
{'name': 'Edward', 'major': "Computer Science", 'sex': "male"},
{'name': 'Zara', 'major': "Psychology", 'sex': "female"},
{'name': 'Wendy', 'major': "Economics", 'sex': "female"},
{'name': 'Sera', 'major': "Psychology", 'sex': "female"}
]
df = pd.DataFrame(student_list, columns = ['name', 'major', 'sex'])
groupby_major = df.groupby('major')
print(groupby_major.groups)
for name, group in groupby_major:
print (name + " : " + str(len(group)))
print(group)
print()
groupby_sex = df.groupby('sex')
print(groupby_sex.groups)
for name, group in groupby_sex:
print (name + " : " + str(len(group)))
print(group)
print()
df_major_cnt = pd.DataFrame( {'count' : groupby_major.size()}).reset_index()
print (df_major_cnt)
#
#중복 데이터 삭제하기
#
student_list = [{'name': 'John', 'major': "Computer Science", 'sex': "male"},
{'name': 'Nate', 'major': "Computer Science", 'sex': "male"},
{'name': 'Abraham', 'major': "Physics", 'sex': "male"},
{'name': 'Brian', 'major': "Psychology", 'sex': "male"},
{'name': 'Janny', 'major': "Economics", 'sex': "female"},
{'name': 'Yuna', 'major': "Economics", 'sex': "female"},
{'name': 'Jeniffer', 'major': "Computer Science", 'sex': "female"},
{'name': 'Edward', 'major': "Computer Science", 'sex': "male"},
{'name': 'Zara', 'major': "Psychology", 'sex': "female"},
{'name': 'Wendy', 'major': "Economics", 'sex': "female"},
{'name': 'Sera', 'major': "Psychology", 'sex': "female"},
{'name': 'John', 'major': "Computer Science", 'sex': "male"},
]
df = pd.DataFrame(student_list, columns = ['name', 'major', 'sex'])
print(df.duplicated())
print(df.drop_duplicates()) # 중복된 값 제거
student_list = [{'name': 'John', 'major': "Computer Science", 'sex': "male"},
{'name': 'Nate', 'major': "Computer Science", 'sex': "male"},
{'name': 'Abraham', 'major': "Physics", 'sex': "male"},
{'name': 'Brian', 'major': "Psychology", 'sex': "male"},
{'name': 'Janny', 'major': "Economics", 'sex': "female"},
{'name': 'Yuna', 'major': "Economics", 'sex': "female"},
{'name': 'Jeniffer', 'major': "Computer Science", 'sex': "female"},
{'name': 'Edward', 'major': "Computer Science", 'sex': "male"},
{'name': 'Zara', 'major': "Psychology", 'sex': "female"},
{'name': 'Wendy', 'major': "Economics", 'sex': "female"},
{'name': 'Nate', 'major': None, 'sex': "male"},
{'name': 'John', 'major': "Computer Science", 'sex': None},
]
df = pd.DataFrame(student_list, columns = ['name', 'major', 'sex'])
print(df.duplicated(['name'])) # name이 같으면 중복되었다는 의미
print(df.drop_duplicates(['name'], keep = 'first')) #name이 같은 값은 삭제하고, 처음 나오는 값만 살린다. #last는 마지막에 나오는 값을 살린다.
#
#NaN(None) 찾아서 다른 값으로 변경하기
#
student_list = [{'name': 'John', 'major': "Computer Science", 'sex': "male"},
{'name': 'Nate', 'major': "Computer Science", 'sex': "male"},
{'name': 'Abraham', 'major': "Physics", 'sex': "male"},
{'name': 'Brian', 'major': "Psychology", 'sex': "male"},
{'name': 'Janny', 'major': "Economics", 'sex': "female"},
{'name': 'Yuna', 'major': "Economics", 'sex': "female"},
{'name': 'Jeniffer', 'major': "Computer Science", 'sex': "female"},
{'name': 'Edward', 'major': "Computer Science", 'sex': "male"},
{'name': 'Zara', 'major': "Psychology", 'sex': "female"},
{'name': 'Wendy', 'major': "Economics", 'sex': "female"},
{'name': 'Nate', 'major': None, 'sex': "male"},
{'name': 'John', 'major': "Computer Science", 'sex': None}
]
df = pd.DataFrame(student_list, columns = ['name', 'major', 'sex'])
print(df)
print(df.shape)
print(df.info())
print(df.isna()) # df.isnull과 같은 의미, null값이 있으면 True로 출력함
print(df.isnull())
df.major = df.major.fillna('aaa') # 의미는 df에 있는 age columns에서 null값을 발견하면은 aaa으로 바꿔라!는 의미
print(df)
school_id_list = [{'name': 'John', 'job': "teacher", 'age': 40},
{'name': 'Nate', 'job': "teacher", 'age': 35},
{'name': 'Yuna', 'job': "teacher", 'age': 37},
{'name': 'Abraham', 'job': "student", 'age': 10},
{'name': 'Brian', 'job': "student", 'age': 12},
{'name': 'Janny', 'job': "student", 'age': 11},
{'name': 'Nate', 'job': "teacher", 'age': None},
{'name': 'John', 'job': "student", 'age': None}
]
df = pd.DataFrame(school_id_list, columns = ['name', 'job', 'age'])
for name, group in df.groupby("job"):
print (name + " : " + str(len(group)))
print(group)
print()
df["age"].fillna(df.groupby("job")["age"].transform("median"), inplace=True)
print (df)
#
#apply 함수 활용
#
date_list = [{'yyyy-mm-dd': '2000-06-27'},
{'yyyy-mm-dd': '2002-09-24'},
{'yyyy-mm-dd': '2005-12-20'}]
df = pd.DataFrame(date_list, columns = ['yyyy-mm-dd'])
print(df)
def extract_year(row):
return row.split('-')[0]
df['year'] = df['yyyy-mm-dd'].apply(extract_year) #'year'라는 새로운 column을 만든다. 그리고 df['yyyy-mm-dd'] col값을
###apply 함수 안에 넣는다. 그 의미는 df['yyyy-mm-dd'] column의 모든 row들을 각 하나씩 해당 함수에 적용시키겠다는 의미임. 즉, for문을 쓰지 않고도 모든 row에 새로운 column값을 만들어 줄 수 있음
print(df)
def get_age(row, current_year):
return current_year - int(row)
df['age'] = df['year'].apply(get_age, current_year=2018)
print(df)
#2개 이상의 파라메타를 보낼 수 있음
def get_introduce(age, prefix, suffix):
return prefix + str(age) + suffix
df['introduce'] = df['age'].apply(get_introduce, prefix="I am ", suffix=" years old")
print(df)
#column 2개를 넣을 수 있음
def get_introduce_2(row):
return "I was born in "+str(row.year)+" my age is " + str(row.age)
df.introduce = df.apply(get_introduce_2, axis=1) #이렇게 하면 dataFrame에 있는 모든 col을 활용할 수 있다.
print (df)
#
#map, applymap함수 활용
#
date_list = [{'yyyy-mm-dd': '2000-06-27'},
{'yyyy-mm-dd': '2002-09-24'},
{'yyyy-mm-dd': '2005-12-20'}]
df = pd.DataFrame(date_list, columns = ['yyyy-mm-dd'])
def extract_year(row):
return row.split('-')[0]
df['year'] = df['yyyy-mm-dd'].map(extract_year)
print(df)
job_list = [{'age': 20, 'job': 'student'},
{'age': 30, 'job': 'developer'},
{'age': 30, 'job': 'teacher'}]
df = pd.DataFrame(job_list)
df.job = df.job.map({"student":1, "developer":2, "teacher":3})
print(df)
x_y = [{'x': 5.5, 'y': -5.6},
{'x': -5.2, 'y': 5.5},
{'x': -1.6, 'y': -4.5}]
df = pd.DataFrame(x_y)
df = df.applymap(np.around)
print(df)
#
#컬럼 내 유니크한 값 뽑아내고 갯수 확인하기
#
job_list = [{'name': 'John', 'job': "teacher"},
{'name': 'Nate', 'job': "teacher"},
{'name': 'Fred', 'job': "teacher"},
{'name': 'Abraham', 'job': "student"},
{'name': 'Brian', 'job': "student"},
{'name': 'Janny', 'job': "developer"},
{'name': 'Nate', 'job': "teacher"},
{'name': 'Obrian', 'job': "dentist"},
{'name': 'Yuna', 'job': "teacher"},
{'name': 'Rob', 'job': "lawyer"},
{'name': 'Brian', 'job': "student"},
{'name': 'Matt', 'job': "student"},
{'name': 'Wendy', 'job': "banker"},
{'name': 'Edward', 'job': "teacher"},
{'name': 'Ian', 'job': "teacher"},
{'name': 'Chris', 'job': "banker"},
{'name': 'Philip', 'job': "lawyer"},
{'name': 'Janny', 'job': "basketball player"},
{'name': 'Gwen', 'job': "teacher"},
{'name': 'Jessy', 'job': "student"}
]
df = pd.DataFrame(job_list, columns = ['name', 'job'])
print(df.job.unique())
print(df.job.value_counts())
#
#두개의 데이터프레임 합치기
#
l1 = [{'name': 'John', 'job': "teacher"},
{'name': 'Nate', 'job': "student"},
{'name': 'Fred', 'job': "developer"}]
l2 = [{'name': 'Ed', 'job': "dentist"},
{'name': 'Jack', 'job': "farmer"},
{'name': 'Ted', 'job': "designer"}]
df1 = pd.DataFrame(l1, columns = ['name', 'job'])
df2 = pd.DataFrame(l2, columns = ['name', 'job'])
frames = [df1, df2]
result = pd.concat(frames, ignore_index=True)
result = pd.concat([df1, df2], ignore_index=True)
print (result)
result = df1.append(df2, ignore_index=True)
print (result)
l1 = [{'name': 'John', 'job': "teacher"},
{'name': 'Nate', 'job': "student"},
{'name': 'Jack', 'job': "developer"}]
l2 = [{'age': 25, 'country': "U.S"},
{'age': 30, 'country': "U.K"},
{'age': 45, 'country': "Korea"}]
df1 = pd.DataFrame(l1, columns = ['name', 'job'])
df2 = pd.DataFrame(l2, columns = ['age', 'country'])
result = pd.concat([df1, df2], axis=1, ignore_index=True)
print(result)
label = [1,2,3,4,5]
prediction = [1,2,2,5,5]
comparison = pd.DataFrame(
{'label': label,
'prediction': prediction
})
print(comparison)
-------------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
'''
불용어 제거(Stopword Removal)
일반적으로 코퍼스에서 자주 나타나는 단어는 학습 모델로서 학습이나 예측 프로세스에 실제로 기여하지 않아 다른 텍스트와 구별하지 못한다.
예를들어 조사, 접미사, i, me, my, it, this, that, is, are 등 과 같은 단어는 빈번하게 등장하지마 실제 의미를 찾는데
큰 기여를 하지 않는다. Stopwords는 'to'또는 'the'와 같은 용어를 포함하므로 사전 처리 단계에서 제거하는 것이 좋다.
NLTK에는 153 갸의 영어 불용어가 미리 정의되어 있다. 17개의 언어에 대해 정의되어 있으며 한국어는 없다.
스태밍(어간추출, 형태소 분석)
어간 추출은 어형이 변형된 단어로부터 접사 등을 제거하고 그 단어의 어간을 분리해 내는 것
'message', 'messages', 'messaging'과 같이 복수형, 진행형 등의 문자를 같은 의미의 단어로 다룰 수 있도록 도와준다.
stemming(형태소 분석): 여기에서는 NLTK에서 제공하는 형태소 분석기를 사용한다. 포터 형태소 분석기는 보수적이고 랭커스터 형태소 분석기는
좀 더 적극적이다. 형태소 분석 규칙의 적극성 때문에 랭커스터 형태소 분석기는 더 많은 동음이의어 형태소를 생산한다.
Lemmatization 음소표기법
언어학에서 음소 표기법 (또는 lemmatization)은 단어의 보조 정리 또는 사전 형식에 의해 식별되는 단일 항목으로 분석 될 수 있도록
굴절 된 형태의 단어를 그룹화하는 과정이다. 예를 들어 동음이의어가 문맥에 따라 다른 의미를 갖는데
1) 배가 맛있다.
2) 배를 타는 것이 재미있다.
3) 평소보다 두 배로 많이 먹어서 배가 아프다.
위에 있는 3개의 문장에 있는 "배"는 모두 다른 의미를 갖는다.
레마타아제이션은 이때 앞뒤 문맥을 보고 단어의 의미를 식별하는 것이다. 영어에서 meet는 meeting으로 쓰였을때 회의를 뜻하지만
meet 일 때는 만나다는 뜻을 갖는데 그 단어가 명사로 쓰였는지 동사로 쓰였는지에 따라 적합한 의미를 갖도록 추출하는 것이다.
'''
import pandas as pd
from bs4 import BeautifulSoup
import re
import nltk
from nltk.corpus import stopwords
from nltk.stem.lancaster import LancasterStemmer
from nltk.stem.snowball import SnowballStemmer
from nltk.stem import WordNetLemmatizer
from multiprocessing import Pool
import numpy as np
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
# %matplotlib inline 설정을 해주어야지만 노트북 안에 그래프가 디스플레이 된다.
'''
header = 0은 파일의 첫 번째 줄에 열 이름이 있음을 나타내며
delimiter = \t 는 필드가 탭으로 구분되는 것을 의미한다.
quoting = 3은 쌍따옴표를 무시하도록 한다.
'''
#레이블인 sentiment 가 있는 학습 데이터
train = pd.read_csv('C:\\Users\\Byun YB\\Desktop\\kaggle_data\\labeledTrainData.tsv', header=0, delimiter='\t', quoting=3)
#레이블이 없는 테스트 데이터
test = pd.read_csv('C:\\Users\\Byun YB\\Desktop\\kaggle_data\\testData.tsv', header=0, delimiter='\t', quoting=3)
#train data의 크기, 25000개의 리뷰가 있고, 3개의 칼럼이 있다.
print (train.shape)
#위에서 5개
print (train.head())
print (train.columns.values)
print (test.columns.values)
print (train.info())
print (train.describe())
print (train['sentiment'].value_counts())
# html 태그가 섞여있기 때문에 이를 정제해줄 필요가 있음
print (train['review'][0][:1000])
example1 = BeautifulSoup(train['review'][0], "html5lib")
print(train['review'][0][:700])
print(example1.get_text()[:700])
#정규표현식을 사용해서 특수문자를 제거
#소문자와 대문자가 아닌 것은 공백으로 대체한다.
letters_only = re.sub('[^a-zA-Z]',' ', example1.get_text()) #arg3의 str에서 a-zA-Z가 아닌 char를 공백으로 치환
print (letters_only[:700])
#모두 소문자로 변환한다.
lower_case = letters_only.lower()
#문자를 나눈다. => 토큰화
words = lower_case.split()
print(len(words))
print(words[:12])
#nltk.download() #nltk data는 용랴이커서 따로 다운받아야 함. 그래서 해당 코드로 최초 1회 쉽게 데이터를 다운받을 수 있음
print (stopwords.words('english')[:10]) #영어로 된 단어의 stopwords
#stopwords를 제거한 토큰들
words = [w for w in words if not w in stopwords.words('english')]
print(len(words)) #stopwords 제거 전 437개 -> 219개
print(words[:10])
#포터 스태머의 사용 예
stemmer = nltk.stem.PorterStemmer()
print(stemmer.stem('maximum'))
print("The stemmed form of running is: {}".format(stemmer.stem("running")))
#랭커스터 스태머의 사용 예
lancaster_stemmer = LancasterStemmer()
print(lancaster_stemmer.stem('maximun'))
print("The stemmed form of running is: {}".format(lancaster_stemmer.stem("running")))
#처리 전 단어
print(words[:10])
stemmer = SnowballStemmer('english')
words = [stemmer.stem(w) for w in words]
#처리 후 단어
print(words[:10])
wordnet_lemmatizer = WordNetLemmatizer()
print(wordnet_lemmatizer.lemmatize('fly'))
print(wordnet_lemmatizer.lemmatize('flies'))
words = [wordnet_lemmatizer.lemmatize(w) for w in words]
#처리 후 단어
print(words[:10])
#
# 문자열 처리 method
# 위에서 간략하게 살펴본 내용을 바탕으로 문자열을 처리해 본다
#
def review_to_words(raw_review):
#1. HTML 제거하고
review_text = BeautifulSoup(raw_review, 'html.parser').get_text()
#2. 영문자가 아닌 문자는 공백으로 변환한다
letters_only = re.sub('[^a-zA-Z]', ' ', review_text)
#3. 소문자 변환
words = letters_only.lower().split()
#4. 파이썬에서는 리스트보다 세트로 찾는게 훨씬 빠르다.
# stopwords 를 세트로 변환한다.
stops = set(stopwords.words('english'))
#5 Stopwords 불용어 제거
meaningful_words = [w for w in words if not w in stops]
#6. 어간추출
stemming_words = [stemmer.stem(w) for w in meaningful_words]
#7. 공백으로 구분된 문자열로 결합하여 결과를 반환
return( ' '.join(stemming_words))
clean_review = review_to_words(train['review'][0])
print (clean_review)
#첫 번째 리뷰를 대상으로 전처리 해줬던 내용을 전체 텍스트 데이터를 대상으로 처리한다.
#전체 리뷰 데이터 수 가져오기
num_reviews = train['review'].size
print(num_reviews)
def _apply_df(args):
df, func, kwargs = args
return df.apply(func, **kwargs)
def apply_by_multiprocessing(df, func, **kwargs):
#키워드 항목 중 workers 파라메터를 꺼냄
workers = kwargs.pop('workers')
#위에서 가져온 workers 수로 프로세스 풀을 정의
pool = Pool(processes=workers)
#실행할 함수와 데이터프레임을 워커의 수 만큼 나눠 작업
result = pool.map(_apply_df, [(d,func, kwargs)
for d in np.array_split(df, workers)])
pool.close()
#작업 결과를 합쳐서 반환
return pd.concat(list(result))
'''
clean_train_reviews = apply_by_multiprocessing(\
train['review'], review_to_words, workers=4)
'''
'''
clean_test_reviews = apply_by_multiprocessing(\
test['review'], review_to_words, workers=4)
'''
def displayWordCloud(data = None, backgroundcolor = 'white', width=800, height=600):
wordcloud = WordCloud(stopwords = STOPWORDS, background_color = backgroundcolor, width = width, height = height).generate(data)
plt.figure(figsize = (15, 10))
plt.imshow(wordcloud)
plt.axis("off")
plt.savefig('C:\\Users\\Byun YB\\Desktop\\kaggle_data\\wordcloud_ex1.svg')
#displayWordCloud(' '.join(clean_train_reviews))
displayWordCloud(clean_review)
'''
text = open('C:\\Users\\Byun YB\\Desktop\\kaggle_data\\aaa.txt').read()
wordcloud = WordCloud().generate(text)
plt.figure(figsize=(12,12))
plt.imshow(wordcloud)
plt.axis("off")
plt.savefig('C:\\Users\\Byun YB\\Desktop\\kaggle_data\\wordcloud_ex1.svg')
'''
'이것저것' 카테고리의 다른 글
파이썬 연산자 (0) | 2019.03.10 |
---|---|
파이썬 데이터타입 (0) | 2019.03.10 |
union-find 알고리즘(파이썬 코드) (0) | 2018.08.19 |
파이썬 기본 문법 정리 (0) | 2018.08.19 |
네트워크 플로우 알고리즘 (0) | 2018.07.24 |
댓글