cs109 #Lecture 2 DataScraping
cs109의 강의 구성이 어떻게 되는지 잘 모르겠다..
배운 거 다른 교수가 또 하고 또 하고 그런다.
그리고 올린 강의 교재도 다 안 끝내고 수업이 끝난다.
무슨 영화 트레일러 같은 느낌이다.
여튼 그래도 듣기 시작한 거 다 들어야겠다.
또 pandas를 배운다..
배우지 못한 것들 위주로 해야겠다..
배운 거 다른 교수가 또 하고 또 하고 그런다.
그리고 올린 강의 교재도 다 안 끝내고 수업이 끝난다.
무슨 영화 트레일러 같은 느낌이다.
여튼 그래도 듣기 시작한 거 다 들어야겠다.
1. Pandas
또 pandas를 배운다..배우지 못한 것들 위주로 해야겠다..
1.1 Split-Apply-Combine
말 그대로 groupby 함수를 이용해서 split하고,
적용하고 싶은 함수(ex. count(), mean() ...)를 이용해 split된 데이터 프레임에게 apply하고,
다시 합쳐 큰 데이터 프레임을 만든다.
grouped_data = ratings['movie_id'].groupby(ratings['user_id'])
위 코드는 rating의 user_id를 기준으로 rating의 movie_id를 split하는 것이다.
그렇다면 user_id가 한 개일 때 여러가지 moive_id들이 존재할 것이다.
ratings_per_user = grouped_data.count()
쪼개진 데이터 프레임에 count 함수를 적용시킨다.
1.2 Quiz
print (ratings[ratings.movie_id.isin(good_movie_ids)].rating)
이건 도약이 좀 있지만 isin 함수가 잘 쓰일 수 있다는 생각에 써봤다.
ratings 데이터 프레임에 good_movie_ids (rating 이 가장 높은 영화의 ids의 리스트) 가 movie_id 열에 존재하면 isin 함수를 통해 True를 반환한다.
그럼 []안에 True 값이 가리키는 mov의 rating 출력된다.
2. Passing a Function
2.1 lamda
한 줄로 사용자 정의 함수를 표현할 수 있다.
average_ratings = grouped_data.apply(lambda f: f.mean())
3. Python data scraping
3.1 robot.txt
이 문서를 통해 스크래핑이 합법인지 확인할 수 있다.
3.2 Scraping
스크래핑에 유용한 라이브러리로는 urllib, beautifulsoup, pattern 등 여러가지가 존재한다.
url = 'http://www.crummy.com/software/BeautifulSoup'
source = urllib2.urlopen(url).read()
url을 불러와 읽어드린다.
print source.count('Soup')
Soup라는 단어를 찾아 갯수를 센다.
position = source.find('alien video games')
alien video games라는 단어의 위치를 찾는다.
print source[position:position + 20]
alien video games라는 단어의 위치부터 20칸 멀어져있는 단어까지 출력
soup = bs4.BeautifulSoup(source)
print (soup)
print (soup.prettify())
위 두가지 출력의 결과는 조금 다르다. prettify 가 좀 더 깔끔하게 나온다.
soup.findAll('a')
위 명령어는 a가 포함된 HTML tag를 모두 출력해준다.
1.
link_list = [l.get('href') for l in soup.findAll('a')]
[l for l in link_list if l is not None and l.startswith('http')]
2.
external_links = []
for l in link_list:
if l is not None and l[:4] == 'http':
external_links.append(l)
위 두개의 결과는 같다. 1번이 훨씬 간결해보인다.
4. Python Dictionaries
a = {'a': 1, 'b':2}
print a.keys()
print a.values()
위의 것들은 다 안다.
이제 반복문을 통해 딕셔너리의 내부를 보기 위해 2가지 옵션이 있다.
1.
for k,v in zip(a.keys(), a.values()):
print k,v
2.
for k,v in a.iteritems():
print k,v
두 옵션의 결과는
a 1
b 2
로 같은 결과를 출력한다.
댓글
댓글 쓰기