책) 파이썬으로 데이터 주무르기 - 소스코드 및 데이터 공개
Switch branches/tags
Nothing to show
Clone or download
Latest commit 72dcb50 Jun 27, 2018
Permalink
Failed to load latest commit information.
.vscode add noti Jun 27, 2018
data add ch8 Jan 9, 2018
driver add ch6 Jan 8, 2018
images add ch4 Jan 4, 2018
img add ch6 Jan 8, 2018
source_code add noti Jun 27, 2018
.DS_Store fix Apr 28, 2018
DataScience.yml bug fix Apr 17, 2018
README.md add noti Jun 27, 2018

README.md

파이썬으로 데이터 주무르기

  • 파이썬으로 데이터 주무르기 집필하고서 책 내용의 데이터와 소스코드를 최신으로 관리할 목적으로 유지하는 공간입니다.
  • IT의 빠른 흐름 때문에 책 집필 후에 아래의 상황을 자주 만나게 됩니다.
    • 분석하려는 인터넷 사이트가 변경
    • 최신 버젼의 모듈이 문법이 변경
  • 그래서 이 공간은 책이 다룬 데이터와 소스코드를 단순히 공개하는 것이 아니라 보다 적극적으로 독자를 위해 항상 소스코드가 공개되도록 유지하겠습니다.
    • 단, 분석하려는 해당 사이트가 아예 없어지거나
    • 해당 모듈이 더이상 버전업등의 지원이 없는 경우는 예외로 합니다.

관련 사이트

  • 본 책에서 일부 중복되거나 혹은 시점의 차이는 있지만, 단편적 이야기들과 못다한 이야기들은 저자인 PinkWink의 블로그에서 볼 수 있습니다.
  • 본 책의 내용에서 더 자세하고 발전된 내용과 다양한 추가 예제는 패스트캠퍼스에서 강의로 진행되고 있습니다.

목차별 소스코드 학습시 주의 사항

  • 집필 후 모듈의 업데이터 및 데이터의 취득 방법이나 그 내용이 변경된 경우에 대해서만 정리합니다.

1장 서울시 구별 CCTV 현황 분석

  • 소스코드 : 바로가기

  • 오타 수정

    • P34, In [26] 바로 위의 줄 df.loc[:, ['A', 'B']라고 --> df.loc[:, ['A', 'B']] (helpotcreator님 감사합니다.)
    • P36, In [32] : df.iloc[[1,2,4],[0,2]] --> In [32] : df.iloc[[1,2,4],[0:2]] (조힘찬빛님 감사합니다.)
    • P38, In[40] df2['E'].isIn(['two','four']) --> In[40] df2['E'].isin(['two','four']) (focussjh님 감사합니다.)
    • P40, In[44] x.mIn() --> x.min() (buillee님 감사합니다.)
    • P54, 밑에서 세 번째 줄, 0.7 이하면 뚜렷한 상관관계 --> 0.7 이상이면 뚜렸한 상관관계 (김혁님 감사합니다.)
    • P57, In [95] np.arrange --> np.arange (김혁님 감사합니다.)

2장 서울시 범죄 현황 분석

  • 소스코드 : 바로가기

  • 구글 지도 API의 유료화 진행에 대해

    • 구글 지도 API가 최근 유료화 되었습니다. 그러나 학습용으로는 구글이 매월 200달러 규모의 크래딧을 지원하기 때문에 신용카드는 등록하더라도, 실제로 결재가 되지는 않을 것 같습니다. 바로가기
  • 오타 수정

    • P79, 그림 2-7과 같이 --> 그림 2-9와 같이 (김혁님 감사합니다.)
    • P83, In[7]의 마지막 print문이 앞으로 들여쓰기가 되어야 합니다. 단, for문안에는 있어야 하구요. github 소스를 확인해 주세요. (pitbulls님 감사합니다.)
    • P86, In [13] crime_anal_police.loc[crime_anal_police['관서명']=='금천서', ['구별']] = '금천서' --> crime_anal_police.loc[crime_anal_police['관서명']=='금천서', ['구별']] = '금천구' (grabchance님 감사합니다.)
    • P87, In [15] ccrime_anal_police.head() --> crime_anal_police.head() (조힘찬빛님 감사합니다.)
    • P93, In [32]의 마지막 명령인 crime_anal.head() 명령은 앞으로 당겨야합니다. 즉, indent 적용이 안되어야 합니다. (김혁님 감사합니다.)
  • 교재 대비 데이터나 환경이 변경된 사항

    • 교재에서 접근하는 방식으로 데이터를 얻으로 가면 교재 집필하던 때와 데이터의 형식이 변경되어 있습니다.
    • 지금은 데이터를 얻는 것이 실제 데이터라는 것에 대한 증명일 뿐이므로, 해당 데이터를 Github에서 배포하는 데이터를 다운받는 것으로 합니다.
  • 교재 대비 코드가 변경된 사항

    • Matplotlib의 heatmap 등을 그릴때 cmap의 디폴트 설정이 변경되어 heatmap 등에서 cmap을 적용할 때 옵션을 잡아주어야 교재와 동일한 효과가 나타납니다. (소스코드에 모두 반영됨)
    • Folium이 0.4.0으로 판올림 되면서 choropleth 명령에서 geo_str 옵션명이 geo_data 옵션명으로 변경되었습니다.. (소스코드에 모두 반영)
    • Folium이 0.4.0으로 판올림 되면서 circle marker 적용할때, fill=True 옵션을 반듯이 사용해야 합니다. (소스코드에 모두 반영)

3장 시카고 샌드위치 맛집 분석

  • 소스코드 : 바로가기1, 바로가기2

  • 오타 수정

    • P125, 밑에서 두 번째 줄, 02. test_first.html --> 03. test_first.html
    • P151, 첫 줄, 코드 [105]를 --> 코드 [51]을 (조힘찬빛님 감사합니다.)
    • P159의 In[2]에 page = url_base+url_sub --> page = urlopen(url_base+url_syb) 로 변경되어야 합니다. (buillee님 감사합니다.)
  • 교재 오류 수정

    • P144 In [41] 제일 위에 아래 코드가 추가되어야 합니다. (조힘찬빛님 감사합니다.)
     from urllib.parse import urljoin 
    • P156 In[72]와 In[74] 사이에 df['lng'], df['lat']를 계산하는 코드가 교재에서 빠져있습니다. 소스코드를 참조해 주세요. 누락된 코드는 아래와 같습니다. (이경재님 감사합니다.)
     lat = []
     lng = []
    
     for n in tqdm_notebook(df.index):
        if df['Address'][n] != 'Multiple':
            target_name = df['Address'][n]+', '+'Cicago'
            gmaps_output = gmaps.geocode(target_name)
            location_output = gmaps_output[0].get('geometry')
            lat.append(location_output['location']['lat'])
            lng.append(location_output['location']['lng'])
         
        else:
            lat.append(np.nan)
            lng.append(np.nan)
    
         	
     df['lat'] = lat
     df['lng'] = lng
     df.head()
    • P161, In[15] 코드를 실행한 후 movie.info()로 관찰해보면 데이터들이 숫자형이 아님을 알 수 있습니다. 그래서 아래 코드를 추가해서 숫자형으로 변경시켜 주어야 합니다. (이경재님 감사합니다.)
     movie['point'] = movie['point'].astype(float)
  • 교재 대비 코드가 변경된 사항

    • Folium이 0.4.0으로 판올림 되면서 choropleth 명령에서 geo_str 옵션명이 geo_data 옵션명으로 변경되었습니다.. (소스코드에 모두 반영)
    • Folium이 0.4.0으로 판올림 되면서 circle marker 적용할때, fill=True 옵션을 반듯이 사용해야 합니다. (소스코드에 모두 반영)

4장 셀프 주유소는 정말 저렴할까

  • 소스코드 : 바로가기

  • 오타 수정

    • P175, 가장 마지막 줄, 메일(mail.naver.com] --> 메일(mail.naver.com) (광영님 감사합니다.)
    • P178, webdriver.Chrome('../drvier/chromedriver')에서 윈도우 유저들께서는 chromedriver.exe로 맥 유저들은 그대로 chromedriver로 하시면 됩니다. (pitbulls님 감사합니다.)
    • P178, In [11]의 두 번째 줄 driver.get("http://naver.com")의 주소는 github의 소스코드에 있는데로 수정되어야 합니다. driver.get("http://www.opinet.co.kr/searRgSelect.do") (광영님 감사합니다.)
    • P185, 우리는 학습의 목직이므로 --> 우리는 학습이 목적이므로 (김혁님 감사합니다.)
    • P188, 가격 정보가 기입하지 않은 --> 가격 정보가 기입되지 않은 (김혁님 감사합니다.)
    • P198, 대체로 '중구','중랑구'에 비싼 주유소가 몰려 있고, --> 대체로 '중구','종로구'에 비싼 주유소가 몰려 있고
  • 내용 수정

    • (소스코드에 언급했지만) 본 책에서 다루는 유가 정보 홈페이지는 접속한 사용자의 지역을 판단해서 첫 화면을 보여줍니다.
    • 그러므로 페이지 178의 그림 4-14 단계에서 지역에서 서울을 손으로 선택해 주어야 합니다.
    • 프로그램으로 접근해야하지만, 책 내용과 유사성을 맞추기 위해 손으로 선택해 주는 것으로 하겠습니다.
  • 교재 대비 코드가 변경된 사항

    • Folium이 0.4.0으로 판올림 되면서 choropleth 명령에서 geo_str 옵션명이 geo_data 옵션명으로 변경되었습니다.. (소스코드에 모두 반영)
    • Folium이 0.4.0으로 판올림 되면서 circle marker 적용할때, fill=True 옵션을 반듯이 사용해야 합니다. (소스코드에 모두 반영)

5장 우리나라 인구 소멸 위기 지역 분석

  • 소스코드 : 바로가기

  • 교재 대비 코드가 변경된 사항

    • Folium이 0.4.0으로 판올림 되면서 choropleth 명령에서 geo_str 옵션명이 geo_data 옵션명으로 변경되었습니다.. (소스코드에 모두 반영)

6장 19대 대선 결과 분석

  • 소스코드 : 바로가기

  • 내용수정

    • 6장은 아주 큰 변화가 있습니다. 바로 분석 대상이 되는 선거관리위원회 홈페이지가 변경된 것입니다.
    • 그래서 6장의 1절과 2절은 그 내용이 아주 많이 바뀌어야 합니다.
    • 그러나 6-3절 이후의 내용은 Github에서 배포하는 데이터를 이용해서 학습이 가능합니다.
    • 정상적으로 동작하는 코드는 다시 올려두었습니다. 세세한 내용은 해당 소스코드를 참조해 주세요.
    • 다시 이야기하지만 6-1절과 6-2절은 코드가 바뀌어서 Github에서 배포되는 소스코드를 확인해 주세요
    • 데이터를 다운받아 사용하시면 6-3절 이후부터 학습가능합니다.
  • 교재 대비 코드가 변경된 사항

    • Folium이 0.4.0으로 판올림 되면서 choropleth 명령에서 geo_str 옵션명이 geo_data 옵션명으로 변경되었습니다.. (소스코드에 모두 반영)

7장 시계열 데이터를 다뤄보자

  • 소스코드 : 바로가기

  • 교재 오류 수정

    • p276의 마지막 코드인 In[19]를 실행한 후 교재에는 없지만, 아래 코드를 실행해야 합니다.

       forecast = m.predict(future)
        forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
      • 위 코드는 Github의 7장 소스코드에는 배포되어 있지만, 저자가 출판사에 전달하는 과정에서 누락된 듯 합니다.
      • 본의 아니게 누를 끼쳐 독자 여러분과 관계자분들꼐 죄송합니다.
      • 그리고, 이를 알려주신 s199414님께도 감사드립니다. 없는 것을 없다고 알려주는 것이 엄청 귀찮은 일인데 정말 감사드립니다.
    • 7장의 마지막 부분의 holiday 예측 부분

      • 교재의 소제목에는 7장의 마지막에 holiday 옵션을 잡은 forecast가 있습니다. 그런데 책에서는 빠졌는데요.
      • 이유는 편집단계에서 이 부분 코드가 에러가 나는 경우가 많았고 이를 일반화하기가 좀 어렵다고 여겼기 때문에 교재에서는 누락하고, 대신 fb-forecast의 튜토리얼에 포함되어 있으니 소스코드에서만 소개를 하려 했습니다.
      • 그 과정에서 실수로 교재에는 내용만 빠지고 소제목에는 들어가는 창피한 일이 생겼습니다.
      • 충분한 검토를 거치지 못해 이 역시 죄송합니다. 이것도 역시 알려주신 s199414님께 감사드립니다.
      • 책에서는 소제목의 holiday가 있지만, 내용에는 없습니다. 그러나 holiday 설정이 궁금하신 분은 소스코드를 확인해 주시면 됩니다.
  • 중요 변경 부분 : Pandas 주식 데이터 오류

    • 현재 구글이든 야후든 pandas의 주식 데이터를 읽어오는데 문제가 있습니다. 이미 github에서 꽤 issue가 되고 있는듯 하지만, 아직 해결방법이 있지는 않은듯 합니다.
    • 최근 이 문제를 해결하기 위한 방법을 고민해주는 고마운 분들이 만들어준 모듈이 있습니다.
    • 터미널에서 pip install fix_yahoo_finance로 fix_yahoo_finance를 설치하시고 아래와 같이 코드에서 사용하시면 됩니다.
     from pandas_datareader import data
     import fix_yahoo_finance as yf
     yf.pdr_override()
    
     start_date = '2010-03-01' 
     end_date = '2018-02-28' 
     KIA = data.get_data_yahoo('000270.KS', start_date, end_date)
  • 내용수정

    • 7-3절에서 pandas에서 구글(google)에서 주식데이터를 가져오는데 최근 버전업 이후 이 명령이 동작하지 않습니다.
    • 그래서 yahoo에서 주식데이터를 가져오도록 수정되었습니다.
    • 일부 daily_seasonality=True와 같이 Prophet 명령을 사용할때 옵션이 교재와 달리 추가된 곳이 있습니다. 소스코드를 확인해 주세요.

8장 자연어 처리 시작하기

  • 소스코드 : 바로가기

  • 모듈 설치

    • KoNLPy : pip install konlpy
    • JPype1 : conda install -c conda-forge jpype1
      • 이후 Jupyter Notebook 재실행 필요
    • JDK 설치 : Java JDK로 검색해서 OS에 맞춰 설치
      • JAVA_HOME 설정 : 교재내용 참조
    • WordCloud 설치 : pip install wordcloud
    • gensim install : pip install gensim
  • 내용수정

    • P335에 있는 In125, In128 두 명령은 현 시점의 네이버 검색결과가 달라서 실행되지 않습니다.
    • 적절한 단어를 따로 찾아보셔도 좋습니다.