18년 서울 Data Science 스터디

깊이있는 삽질 Ubuntu Korea Community Wiki
Gilhan (토론 | 기여) 사용자의 2018년 11월 19일 (월) 19:33 판 (5주차)

이동: 둘러보기, 검색

개요

  • 2018년 하반기에 진행하는 데이터사이언스 스터디.
  • 기간 (총 횟수) : 2018년 10월부터 2018년 12월까지(8 - 12)
  • 장소 : 서울 강남 일대
  • 교재 : 처음 배우는 데이터 과학
참가자
스터디장 홍길환
참가자 배준현
홍찬양
정동우
이승윤
최주영
박정호

모임 기록

1주차

  • 날짜 : 10/13
  • 참석자 : 7
  • 진행한 내용 : 오리엔테이션, 교재소개, Python 설정, Pycharm(IDE) 설정, PIP 활용
  • 과제 : 데이터 과학에 필요한 패키지(이승윤)

세부 진행내용

  • ubuntu나 linux 등에서는 기본적으로 python3가 리눅스가 설치되면서 함께 내장되어 있습니다.
    • 최신 버전인 3.7 버전으로도 업그레이드가 가능합니다.
    • 하지만 3.6 버전으로도 진행이 가능하여, 3.6 버전에서 스터디를 진행하겠습니다.
user@ubuntu:~$ python3 --version
Python 3.6.6
  • Ubuntu에 Python 3.6 환경에서 PyCharm 설치 및 설정
    • 터미널에 아래 명령어를 입력

sudo apt install snapd snapd-xdg-open

  • 설치가 정상적으로 된 후, 다음 과정을 거쳐 PyCharm을 설치합니다.
    • 개인용을 설치 할 예정이므로, "--classic" 버전을 설치해주세요.

sudo snap install pycharm-community --classic

  • 정상적으로 설치가 된 경우 터미널에 아래와 같이 입력을 했을 때 다음과 같은 결과가 나옵니다.
user@ubuntu:~$ sudo snap install pycharm-community --classic
pycharm-community 2018.2.4 from jetbrains✓ installed


  • pip을 활용한 파이썬 라이브러리 설치 (링크로 대체)
    • [PyCharm pip 명령어 대신 파이참을 이용해서 파이썬 패키지 모듈 설치하기]
  • Pycharm 실행해보기
    • Py.png
      • pycharm classic ide의 아이콘을 클릭합니다.
      • 실행이 되면 처음에는 기본 설정대로만 다음을 클릭합니다.
    • Py2.png
      • 새 프로젝트 생성
    • Py3.png
      • 새 파일 생성
      • 새로 만든 프로젝트 명에서 마우스 오른쪽 버튼을 누르고 new에서 python file이라고 되어 있는 곳을 클릭하고 임의의 파이썬 파일명을 입력합니다.
      • 아래와 같은 코드를 입력하신 후, "run"을 눌러주세요.
print("Hello, World!")
    • Py4.png
  • 실습 - 라이브러리를 활용하여 그래프(Plot) 그려보기
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))

plt.show()
  • Py5.png


2주차

  • 날짜 : 10/20
  • 참석자 : 8
  • 진행한 내용 : 데이터 과학 관련 패키지 소개, 데이터 과학 관련 파이썬 기초 문법과 활용 소개
  • 과제 : 데이터 과학에 필요한 파이썬 문법

세부 진행내용

  • 이번 주 과제 발표는 이승윤님이 해주셨습니다.
  • 발표안은 데이터 과학 관련 파이썬 라이브러리입니다.
    • 데이터 과학의 구성 요소
    • 데이터 수집
    • 데이터 분석
    • 데이터 시각화
  • 데이터 과학의 구성요소
  • 데이터 과학은 크게 세 가지 구성 요소로 나눌 수 있습니다.
    • 수집
    • 분석
    • 시각화
  • 데이터 수집에 사용되는 라이브러리에 대해서 알아보기로 합니다.
  • 데이터 수집의 방법 중에 하나는 웹 크롤링이 있습니다.
    • 크롤링이란 웹 페이지의 자원을 읽어와 이용할 수 있도록 하는 것입니다.
    • [1] [크롤링 참고 자료] 파이썬으로 크롤링하기
  • requests
    • html 획득에 사용됩니다.
    • 원하는 웹 사이트에 requests를 날려 html을 받을 수 있는 라이브러리 입니다.
    • [2] [requests] requests simple 참고 자료
  • beautifulsoup
    • beautifulsoup는 html 파싱에 사용된다.
    • html 안에 원하는 태그를 가져 올 수 있는 find(), find_all()이 있습니다.
    • 태그 안의 모든 문자열을 하나의 문자열로 만들어 반환 해주는 get_text() 등의

함수를 이용하여 html 코드를 간단하게 분석할 수도 있습니다.

    • [3] [beautifulsoup사용법 참고 자료] beautifulsoup 사용법 링크입니다.
  • 데이터 분석
    • 데이터 분석과 가공 (pandas)
    • 데이터를 분석하고 가공할 수 있습니다.
    • [4] [pandas 관련 발표 링크] pandas 라이브러리에 대한 설명 자료입니다.
  • pandas
    • 데이터 분류된 데이터와 관계형 데이터를 직관적으로 처리할 수 있도록 하는 라이브러리 입니다.
    • 1차원 자료구조인 Series, 2차원 자료구조인 DataFrame, 그리고 3차원 자료구조인 Panel

총 세 가지 자료구조를 지원합니다.

빠르고 쉬운 데이터 조작을 할 수 있는 점이 특징입니다.

  • numpy
    • 수학적, 과학적 데이터 분석에 용이한 라이브러리 입니다.
    • 파이썬의 기본 자료구조보다 빠르고 효율적인 다차원배열 객체 n-array를 제공합니다.
    • 배열 원소를 다루거나 배열간의 수학계산을 수행하는 함수,

선형대수의 계산, 푸리에 변환, 난수 발생기 같은 수치와 관련된 다양한 기능을 제공합니다.

  • 데이터 시각화
    • 분석, 가공한 데이터를 시각화할 수 있습니다. 파이썬 시각화 라이브러리로는 matplotlib가 있습니다.
    • [5] [matplotlib 시각화 발표 참고 자료]

matplotlib

    • 데이터 시각화에 사용되는 라이브러리 입니다.
    • 2차원 선 그래프, 막대 그래프, 원형 그래프, 히스토그램은 물론 3차원 그래프까지

데이터를 다양한 형태로 시각화 할 수 있는 라이브러리 입니다.

[세부 참고 영어 문서] Better web scraping in Python with Selenium, Beautiful Soup, and pandas

    • [7] [세부 참고 영어 문서 2]

Web Scraping in Python using Scrapy

  • 감사합니다.

3주차

  • 날짜 : 10/27
  • 참석자 : 5
  • 진행한 내용 : 데이터 과학에 필요한 파이썬 문법
  • 과제 : matplotlib와 dpandas 문법과 csv를 이용하여 심플한 데이터 분석

세부 진행내용

  • 파이썬 프로그램 실행 방법
    • 인터프리터 프롬프트에서 실행
>>> print("hello world")
hello world
>>> 
  • 소스 파일을 사용하여 실행
    • 예) hello.py 파일 생성 -> print("hello world") 입력 -> 터미널창에서 python3 hello.py 실행
    • 실행 예시

vim hello.py
python3 hello.py 
cat hello.py 

#!/usr/bin/python3
print("hello world")
    • 편집기의 종류 : vim, emacs, pycharm
    • 문법강조 기능, 들여쓰기 기능 지원
  • 파이썬 문법
  • 주석
    • 주석 기호
#, """
    • 주석 사용 케이스
      • 미리 가정하고 넘어간 것들에 대한 설명
      • 중요한 결정 사항에 대한 설명
      • 중요한 세부 사항에 대한 설명
      • 해결하고자 하는 문제에 대한 설명
      • 앞으로 극복하고자 하는 문제들에 대한 설명 등등.
  • 데이터 형
    • 리터럴 상수 : 문자 형태로 지정되며 변하지 않음
ex) 'hello world'
    • 숫자형
    • 정수 - integer
2
    • 부동 소수점 - float
52.3E - 4
    • 문자열
    • 큰따옴표(") 또는 작은 따옴표(')로 지정. 모든 공백 문자나 탭은 그대로 유지.
    • 큰따옴표 또는 작은따옴표 출력시 이스케이프(\) 사용.
    • r 또는 R을 사용하여 그대로 출력 가능.
    • 줄바꿈시 \n 사용.
    • \만 사용할 경우 끊김 없이 문자열 정의
    • 여러줄의 경우 (""" 또는 )로 표현 가능
"테스트 문자열" -> 테스트 문자열

"테스트 문자열 \"" -> 테스트 문자열 \

r"테스트 문자열 \"" ->  테스트 문자열 \"

"테스트 문자열 \n 다음줄 문자열" ->
테스트 문자열
다음줄 문자열

print ('''테스트 문자열.
다음줄 문자열.
다음줄 문자열.
다음줄 문자열.
''')

    • 문자열 포맷팅
    • format() 문자열 생성시 다른 정보 포함하여 생성하는 함수
 vim place.py
python3 place.py
데이터 사이언스 는 선릉 에서 한다
cat place.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

place = '선릉'
study = '데이터 사이언스'
# 중괄호 안에 숫자는 생략  가능
print ('{0} 는 {1} 에서 한다'.format(study, place))
python3 flt.py
0.333
___hello___
Swaroop wrote A Byte of Python
cat flt.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

# 소수점 이하 셋째 자리까지 부동 소숫점 숫자 표기 (0.333)
print ('{0:.3f}'.format(1.0/3))
# 밑줄(_)ㄹ 11칸을 채우고 가운데 정렬(^)하기 (___hello___)
print ('{0:_^11}'.format('hello'))
# 사용자 지정 키워드 이용해 (Swaproop wrote A Byte of Python) 표기
print ('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python'))


  • 변수
    • 변수 : 정보 저장을 위한 컴퓨터의 기억 장치의 한 부분을 가져와 이름을 붙여 사용하는 것
    • 변수 식별자 규칙
    • 식별자의 첫 문자는 알파벳 문자 (ASCII 대/소문자 혹은 유니코드 문자)이거나 밑줄 (_)이어야 합니다.
    • 나머지는 문자 (ASCII 대/소문자 혹은 유니코드 문자), 밑줄(_), 또는 숫자 (0-9)가 될 수 있습니다.
    • 식별자는 대/소문자를 구분합니다. 예를 들어, myname과 myName은 다릅니다. 전자의 `n`은 소문자이고,

후자의 `N`은 대문자입니다.

- 올바른 예
i, name_2_3
-잘못된 예
2things, this is spaced out, my-name, >a1b2_c3
  • 논리적/물리적 명령행
    • 물리적 명령행 : 프로그램 코드 내에서 직접 표현된 한줄
    • 논리적 명령행 : 파이썬 인터프리터 관점에서 한 명령 단위
i = 5; print (i) # 세미콜론을 사용하여 하나의 물리적 명령행에 두 개의 논리적 명령행을 사용.
권장하지 않음.
  • 들여쓰기
    • 명령어 앞에 공백으로 한 명령의 범위를 구분, 이것은 같은 들여쓰기 단계에 있는 명령들은 반드시

같은 들여쓰기를 사용해야 함을 의미합니다.

    • 들여쓰기시 파이썬 언어에서 공식적으로 추천하는 방법은 공백 4개.
i = 5
# 다음 행에서 오류가 발생합니다! 행 앞에 잘못된 공백이 한 칸 있습니다.
 print ('Value is ', i)
print ('I repeat, the value is '. i)
  • 연산자
    • 사칙연산 : +,,-,/,*
    • 거듭제공: **
    • 나머지 : %
    • 왼쪽 시프트 : <<
    • 지정된 숫자에 대해 비트 수 만큼 왼쪽 시프트 연산
gildangsam@gildangsam-GA-MA74GM-S2H:~$ python3 
Python 3.6.6 (default, Sep 12 2018, 18:26:19) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 2 << 2
8
>>> 
2 << 2 # 8을 반환합니다. 2 는 이진수로 10 으로 표현
# 이것을 왼쪽으로 2비트 시프트 연산하면 이진수 1000 이 되고, 이것을 정수로 표현하면 8 이 됨.
    • 오른쪽 시프트 : >>
    • 지정된 숫자에 대해 지정된 비트 수 만큼 오른쪽 시프트 연산
gildangsam@gildangsam-GA-MA74GM-S2H:~$ python3 
Python 3.6.6 (default, Sep 12 2018, 18:26:19) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 11 >> 1 # # 은 5를 반환.
5
>>> # 11은 이진수로 1011 로 표현됩니다. 이것으로 오른쪽으로 1비트 시프트 연산하면 이진수 101이 되고, 이것을 정수로 표현하면 5가 됨.
    • 비트 AND 연산자 : &
5 & 3 # 1을 반환. 5는 이진수로 101. 3은 인진수 011. 각각의 비트를 and로 연산.
    • 비트 OR 연산자 : |
5 | 3 # 7을 반환. 5는 이진수로 101. 3은 이진수로 011. 각각의 비트를 or로 연산.
    • 비트 XOR 연산자 : ^
5 ^ 3 # 6을 반환. 5는 이진수로 101. 3은 이진수로 011. 각각의 비트를 xor로 연산
    • 비트 반전 연산자 : ~

숫자 x의 비트 반전 연산값 -(x+1)을 반환

~5 # -6을 반환
    • 비교 연산자 : <,>,<=,>=,==,!=
    • 불리언 연산자 : not, and, or
x = true
y = false
not x = false
x and y = false
x or y = true
  • 흐름제어
    • if 문: 조건을 판별하기 위해 사용
num1 = 1
num2 = 2
if num1 == num2:
    print('두 숫자는 같다')
else:
    print('두 숫자는 다르다')

    • while문 : 특정 조건이 참일 경우 블록의 명령문을 반복 실행
    • while에도 else사용 가능
num = 1
while num < 10:
    print('숫자가 10보다 작음')
    num = num + 1
else:
    print('숫자가 10보다 크거나 같음')
    • for 문 : 열거형을 반복하여 실행할 때 사용.
# range 함수 : 첫번째 숫자 이상, 두번째 숫자 미만의 숫자 목록을 반환
for i in range(1, 5):
    print(i)
else:
    print('The for loop is over')
    • break 문 : 루프문을 강제로 빠져나올 때 사용
num = 1
while num < 10:
    if num == 5:
        break
    print('숫자가 10보다 작음')
else:
    print('숫자가 10보다 크거나 같음')
    • continue 문 : 현재 실행중인 루프 블록의 나머지 명령문들을 실행하지 않고 곧바로 다음 루프로 넘어갈 때 사용
num = 1
while num < 10:
    num = num + 1
    if num == 5:
        continue
    print(num)
  • 여기까지입니다. ^^

4주차

  • 날짜 : 11/03
  • 참석자 : 4
  • 진행한 내용 : matplotlib와 dpandas 문법과 csv를 이용하여 심플한 데이터 분석
  • 과제 : 데이터 처리

세부 진행내용

  • python3 matplotlib 그래프 한글 폰트 설정
  • python3에서 폰트 설정 없이 한글을 matplotlib 그래프에서 그리면

한글이 깨져서 나옵니다.

    • code 내용 (코드 출처 : 파이썬 jupyter notebook 실전 입문 : 터닝포인트)
#!/usr/bin/python3

import numpy as np
from matplotlib import pyplot as plt

np.random.seed(0)

x = range(5)
y = 10 + 5 * np.random.randn(5)

flg = plt.figure()
ax = flg.add_subplot(111)

ax.set_title('한글을 지정한 타이틀')
ax.bar(x, y)

plt.show()
      • 한글이 깨진 그래프 모습 코드 결과 모습
      • Mat.png
  • matplotlib 한글 폰트 설정
    • 한글 폰트 설정
      • Adobe와 Google이 공동 개발한 한국, 중국, 일본에 사용되고 있는 문자를 이용 가능한 폰트 패밀리

Source Han Sans를 사용하기로 합니다.

      • [8] [Source Han Sans 폰트 패밀리가 있는 github 주소]
      • 이 github 주소에 있는 특정 폰트를 wget으로 다운로드 받습니다.
wget https://github.com/adobe-fonts/source-han-serif/raw/release/OTF/Korean/SourceHanSerifK-Regular.otf
 mv SourceHanSerifK-Regular.otf SourceHanK-Regular.otf
mv SourceHanSerifK-Regular.otf SourceHanK-Regular.otf
mv SourceHanK-Regular.otf SourceHanSansK-Regular.otf
sudo cp SourceHanSansK-Regular.otf /usr/share/fonts/
sudo fc-cache -vf
      • 여기까지가 필요한 한글 폰트 우분투 설치준비 과정이었습니다.
      • 다음은 우선 특정 디렉토리에 있는 폰트(otf)를 사용하여, 직접 matplotlib

에서 한글 폰트를 이용하는 방법입니다.

#!/usr/bin/python3

import os
import numpy as np
from matplotlib import pyplot as plt, font_manager

font_manager._rebuild()

if os.name == 'nt':
    font_dir = font_manager.win32FontDirectory()

else:
    font_dir = '/home/gildangsam/sample-data'


font_path = os.path.join(font_dir, 'SourceHanSansK-Regular.otf')
font = font_manager.FontProperties(fname=font_path, size=14)

np.random.seed(0)
x = range(5)

y = 10 + 5 * np.random.randn(5)
fig = plt.figure()
ax = fig.add_subplot(111)

ax.set_title('한국어를 지정한 타이틀', fontproperties=font)
ax.set_xlabel('X축', fontproperties=font)
ax.bar(x,y)

plt.show()
      • 실행 결과

Mat2.png

      • 이번 경우는 매번 특정 디렉토리를 지정하는 번거로움에서 벗어난 방법입니다.
#!/usr/bin/python3
# -*- config: utf-8 -*-

import os
import numpy as np
from matplotlib import pyplot as plt, rcParams

# 여기에서 지정된 설정은 초기 설정 값으로 이용된다.
rcParams['font.sans-serif'] = 'Source Han Serif K'
rcParams['font.weight'] = 'regular'
rcParams['axes.titlesize'] = 15
rcParams['ytick.labelsize'] = 12
rcParams['xtick.labelsize'] = 12

np.random.seed(0)

x = range(5)
y = 10 + 5 * np.random.randn(5)
fig = plt.figure()
ax = fig.add_subplot(111)

ax.set_title('한국어를 지정한 타이틀')
ax.set_xlabel('X축')
ax.bar(x,y)

plt.show()
      • 실행결과 : rcParams를 이용한 폰트 지정 방법

Mat3.png

      • 다음은 matplotlib의 설정 파일인 matplotlibrc 파일을 현재 디렉토리에

복사하는 방법입니다.

#!/usr/bin/python3
#-*- coding: utf-8 -*-

import shutil
from matplotlib import matplotlib_fname

shutil.copyfile(matplotlib_fname(), 'matplotlibrc')
      • 이 복사된 matplotlibrc 설정파일을 열어서 다음과 같이 저장하면, 다음번에는

굳이 rcParams를 사용하지 않아도 됩니다.

205 font.serif          : Source Han Serif K, DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman,     Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
      • 복사된 matplotlibrc 설정파일을 열어서 205행에 있는 주석 표시를 해제하고, Source Han Serif K 라고

명시합니다.

      • 저장하고 나옵니다.
#!/usr/bin/python3
# -*- config: utf-8 -*-

import os
import numpy as np
from matplotlib import pyplot as plt

# 여기에서 지정된 설정은 초기 설정 값으로 이용된다.
#rcParams['font.sans-serif'] = 'Source Han Sans K'
#rcParams['font.weight'] = 'regular'
#rcParams['axes.titlesize'] = 15
#rcParams['ytick.labelsize'] = 12
#rcParams['xtick.labelsize'] = 12

np.random.seed(0)

x = range(5)
y = 10 + 5 * np.random.randn(5)
fig = plt.figure()
ax = fig.add_subplot(111)

ax.set_title('한국어를 지정한 타이틀')
ax.set_xlabel('X축')
ax.bar(x,y)

plt.show()
      • 같은 결과가 나오므로 이미지는 생략합니다.
  • 여기까지가 한글 설정 내용이었으며, 다음은 jupyter notebook에서

실제 스터디 모임에서 사용된 데이터를 ipynb 파일에서 py로 변환하여 코드를 적습니다.



# coding: utf-8

# In[1]:


import os


# In[2]:


base_url = 'https://raw.githubusercontent.com/practical-jupyter/sample-data/master/anime/'
anime_csv = os.path.join(base_url, 'anime.csv')


# In[3]:


print(anime_csv)


# In[4]:


import pandas as pd

jupyter nbconvert --to script
# In[5]:


anime_csv = os.path.join(base_url, 'anime.csv')
pd.read_csv(anime_csv).head()


# In[6]:


anime_master_csv = os.path.join(base_url, 'anime_master.csv')
pd.read_csv(anime_master_csv).head()


# In[7]:


anime_split_genre_csv = os.path.join(base_url, 'anime_split_genre.csv')
pd.read_csv(anime_split_genre_csv).head()
jupyter nbconvert --to script

# In[8]:


anime_genre_top10_csv = os.path.join(base_url, 'anime_genre_top10.csv')
pd.read_csv(anime_genre_top10_csv).head()


# In[9]:


anime_genre_top10_pivoted_csv = os.path.join(base_url, 'anime_genre_top10_pivoted.csv')
pd.read_csv(anime_genre_top10_pivoted_csv).head()


# In[12]:


anime_stock_price_csv = os.path.join(base_url, 'anime_stock_price.csv')
pd.read_csv(anime_stock_price_csv, index_col =0, parse_dates=['Date']).head()


# In[13]:


anime_stock_returns_csv = os.path.join(base_url, 'anime_stock_returns.csv')
pd.read_csv(anime_stock_returns_csv, index_col=0, parse_dates=['Date']).head()


# In[15]:


t4816_csv = os.path.join(base_url, '4816.csv')
pd.read_csv(t4816_csv, index_col=0, parse_dates=['Date']).head()


# Series 작성
# =============

# In[16]:


import pandas as pd

ser = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
ser


# index를 생략한 Series 작성
# -------------

# In[21]:


import pandas as pd
pd.Series([1, 2, 3])


# 레이블을 사용해서 데이터를 선택하기
# -------------

# In[22]:


ser.loc['b']


# In[23]:


ser['b']


# In[24]:


ser.loc['b':'c']


# 복수의 요소 지정
# -------------

# In[25]:


ser.loc[['a', 'c']]


# In[26]:


ser.iloc[1]


# In[27]:


ser.iloc[1:3]jupyter nbconvert --to script


# 논리값을 사용해서 데이터 선택하기
# -------------

# In[28]:


ser.loc[[True, False, True]]


# In[29]:


ser != 2


# In[30]:


ser.loc[ser != 2]


# DataFrame
# =============

# DataFrame 작성하기
# -------------

# In[32]:


import pandas as pd


df = pd.DataFrame(
    [[1, 10, 100], [2, 20, 200], [3, 30, 300]],
    index=['r1', 'r2', 'r3'],
    columns=['c1', 'c2', 'c3']
)
df


# 레이블을 사용해서 데이터 선택하기
# -------------

# In[33]:


df.loc['r2', 'c2']


# 모든 행(열)을 지정하는 경우
# -------------

# In[34]:


df.loc['r2', :]


# 모든 행에 레이블 지정
# -------------

# In[35]:


df.loc[:, 'c2']


# In[37]:


df.loc[['r1', 'r3'], 'c2' : 'c3']


# iloc를 사용해서 데이터를 선택하기
# -------------

# In[38]:


df.iloc[1:3, [0, 2]]


# 열 이름을 지정해서 데이터 선택하기
# -------------

# In[39]:


df['c2']


# 논리값을 사용해서 데이터 선택하기
# -------------

# In[40]:


df > 10


# In[42]:


df.loc[df['c2'] > 10]


# In[44]:


df.loc[(df['c1'] > 1) & (df['c3'] < 300)]


# CSV 파일 불러오기
# -------------

# In[46]:


import os
import pandas as pd

base_url = 'https://raw.githubusercontent.com/practical-jupyter/sample-data/master/anime/'
anime_csv = os.path.join(base_url, 'anime.csv')

df = pd.read_csv(anime_csv)
df.head()


# In[48]:


df = pd.read_csv(anime_csv, index_col=0)
df.head()


# In[50]:


df = pd.read_csv(anime_csv, index_col ='anime_id')
df.head()


# In[53]:


df = pd.read_csv(anime_csv, dtype={'memebers' : float})
df.head()


# In[54]:


anime_stock_price_csv = os.path.join(base_url, 'anime_stock_price.csv')
df = pd.read_csv(anime_stock_price_csv, parse_dates=['Date'])
df.dtypes


# In[55]:


anime_tsv = os.path.join(base_url, 'anime.tsv')
df = pd.read_csv(anime_tsv, sep='\t')


# In[56]:


df.head()


# In[57]:


df.dtypes

5주차

  • 날짜 : 11/10
  • 참석자 : 2
  • 진행한 내용 : pandas 기본
  • 과제 : 데이터 분석 시각화

6주차

  • 날짜 : 11/17
  • 참석자 :
  • 진행한 내용 :
  • 과제 :

7주차

  • 날짜 : 11/24
  • 참석자 :
  • 진행한 내용 :
  • 과제 :

8주차

  • 날짜 : 12/01
  • 참석자 :
  • 진행한 내용 :
  • 과제 :

후원

1. KOSSLAB(장소)


참고