
우선
내가 혼공분석으로 다시 공부를 하는 이유는
지금까지 여러 방식으로 파이썬과 데이터 공부를 하긴 했지만 스스로 정리되어있다고 느껴지지 않아서이고
이 책으로 공부한 후 다양한 실습을 해봤으면 한다.
그러니 이번에 혼공분석을 정리하면서 지금까지 배운 내용을 같이 정리하면 좋을 것 같다!
Ch1. 데이터 분석을 시작하며
01-1 데이터 분석이란
데이터과학 안에는 통계학, 머신러닝, 데이터 분석, 데이터마이닝이 있다고 한다.
처음에 내가 관심이 있었던 건 데이터 분석 및 마이닝이고, 지금 알고 있는 건 통계학뿐인 것 같다.
머신러닝은... 아직 스스로 이해하지 못하고 있는 듯.
"데이터과학은 프로그래밍, 통계학, 시각화와 더불어 비즈니스 감각을 갖추어야 한다"라고 적혀있는 말에 형광펜을 쳤었다.
"비즈니스 감각"이라는 표현이 들어간 부분이, 내가 데이터과학에 관심을 가진 이유였지않나 하는 생각에...
아무튼 데이터과학에 대해 더 공부해보고 싶다는 생각이다.
물론 그 전에 데이터분석이나 잘 이해하고 있어야겠지만,,,
책을 고르면서 데이터 분석이 R과 파이썬 모두 있다는 것을 알았다.
그런데 듣기로, R은 실무에서 잘 사용하지 않는다고 하길래 파이썬을 골랐다.
또, 학교에서 R을 주로 사용하고 있어서, 파이썬은 따로 내가 공부해야겠다는 생각도 있고.
01-2 구글 코랩과 주피터 노트북
지금까지 파이썬 수업도 들은 적 있고, 간단한 스터디도 한 적이 있어
양쪽에서 코랩과 주피터를 모두 사용해 본 적이 있다.
코랩은 아무래도 구글과 연동되어 있고, 모든 패키지가 설치되어있기 때문에 편하다.
근데 왠지 주피터를 쓰면 더 멋지게 코딩을 하는 기분이라 내가 더 좋아했던 것 같다.
주피터도, 코랩도 텍스트를 쓰기 편해서 내용을 정리하는데도 많이 사용했다.
여러분도 마음에 드는 걸로 골라 쓰시길,,
(아 근데 맥 유저는 코랩이 더 편하다... 주피터를 들어가려면 터미널 통해 들어가야됨)
혼공책은 좋은게, 공부하며 필요한 코드가 모두 깃허브에 있고, 바로 코랩으로 연동해서 쓸 수 있다!
01-3 이 도서가 얼마나 인기가 좋을까요?
데이터 찾기.
뭔가 분석하기 위해서 데이터가 필요하지만, 사기업의 데이터는 그 기업의 소유인 자료라서 잘 돌아다니지 않는다.
그렇다보니 공개되어있는 건 공공데이터 뿐.
[공공데이터 포털] https://www.data.go.kr
[서울 열린데이터광장] https://data.seoul.go.kr
[local data] https://www.localdata.go.kr/main.do
[kaggle] https://www.kaggle.com/datasets
[Our world in data] https://ourworldindata.org
[World bank open data] https://data.worldbank.org
책에서 소개한 공공데이터 포털 외에도 서울, 지방의 데이터를 모아둔 사이트,
케글, 글로벌 데이터를 모아둔 사이트 등 여러 개가 있다.
필요하면 둘러보시길,,,
- CSV
데이터 분석에 정말 많이 사용...이라고 말해주기도 민망한.
필수랄까.
csv파일을 그냥 열면 메모장 같다.
그렇지만 그 안에는 레코드와 필드가 있는데
레코드가 행, 필드가 열. 열은 콤마로 구분된다.
"1","이름","번호","확인여부", - > 레코드(행)
"2",
"3",
필드(열)
- 구글 드라이브에서 코랩으로 다운하기
gdown 패키지 이용
import gdown
gdown.download("파일링크","파일이름",quiet=T/F)
### 파일이름은 원하는 이름으로 적으면 됨
### quiet=True 면 진행(다운)상황 보여주지 않음, False면 진행상황 보여줌.
직접 파일을 코렙으로 업로드할 경우 90분 이후면 초기화되기 때문에 새로 올려야 한다.
따라서 컴퓨터에 있는 파일을 직접 업로드 하고 싶을 때, 이를 코드화하고 싶다면
form google.colab import files
f=files.upload()
이렇게하면, 로컬에 있는 파일을 선택해서 업로드 가능하다
- 코랩에서 CSV열기
with open('남산도서관 장서 대출목록 (2021년 04월).csv') as f:
print(f.readline())
open()함수는 기본적으로 텍스트파일이 UTF-8 형식으로 저장되어 있다고 가정.
그런데 한글 텍스트는 EUC-KR 형식으로 인코딩되어 있는 경우가 잦다.
*readline() : csv파일에서 한 줄 읽기
**readline() 함수를 여러번 사용하면, 계속 첫 줄을 읽는 게 아니라 첫 줄, 두번째 줄, 이렇게 순서대로 읽는다.
-파일 인코딩 확인하기
import chardet
with open('남산도서관 장서 대출목록 (2021년 04월).csv', mode='rb') as f:
d = f.readline()
print(chardet.detect(d))
{'encoding': 'EUC-KR', 'confidence': 0.99, 'language': 'Korean'}
chardet 패키지의 chardet.detect 함수를 사용하면 문자 인코딩 방식을 알아낼 수 있다.
*여기서 mode='rb'는 reading binary 라는 의미. 기본적으로는 'r' (reading)으로 설정되어 있다.
| 항목 | 'r'(텍스트 읽기 모드) | 'rb' (바이너리 읽기 모드) |
| 읽는 데이터 | 문자열(str) | 바이트(bytes) |
| 줄바꿈 처리 | 자동 변환 (\r\n → \n) | 변환 없음 (원본 그대로 유지) |
| 인코딩 처리 | 기본적으로 UTF-8 등으로 디코딩함 | 디코딩하지 않음 (순수한 이진 데이터) |
| 사용 용도 | 일반 텍스트 파일 읽기 (예: .txt, .csv) | 이미지, 오디오, 영상 등 바이너리 파일 읽기 또는 디코딩 전에 파일 내용 확인할 때 |
** 인코딩 문제 때문에 원본을 그대로 열고 싶을 때 mode='rb'를 이용하면 된다.
-인코딩 형식 지정해서 열기
with open('남산도서관 장서 대출목록 (2021년 04월).csv', encoding='euc-kr') as f:
print(f.readline())
f=open('~~.csv','r',encoding=' ')
('파일 이름','mode',인코딩 방법)
with문 없이 이렇게 여는 방법도 있다. 물론 파일 전체를 여는 방법이지만
-판다스
판다스는 csv를 데이터프레임으로 저장한다.
데이터 프레임은 엑셀시트처럼 열과 행으로 이루어진 표.
판다스에는 시리즈도 있는데
시리즈는 1차원 배열로, 리스트와 비슷하지만 동일한 종류의 데이터만 배열할 수 있음.
데이터프레임은 열마다 다른 데이터 타입을 사용 할 수 있음.
그러나 같은 열에 있는 데이터는 모두 동일한 종류여야 한다.
- csv 열기
import pandas as pd
df = pd.read_csv('파일이름',encoding='')
*행이 탭으로 구분되어 있다면
df = pd.read_table('파일이름',encoding='')
-dtype 오류가 발생하는 경우
파이썬이 알아서 dtype를 인식하고 읽긴 하지만, 간혹 헷갈려서 실패할 수도 있다.
그럴 때는 low_memory=False 라는 방법을 쓰거나
오류가 발생한 열의 dtype을 지정해주는 방법이 있다.
df = pd.read_csv('남산도서관 장서 대출목록 (2021년 04월).csv', encoding='euc-kr',
low_memory=False)
df = pd.read_csv('남산도서관 장서 대출목록 (2021년 04월).csv', encoding='euc-kr',
dtype={'ISBN':str, '세트 ISBN':str, '주제분류번호':str})
-> 이렇게 오류가 발생한 행의 dtype 지정
- head()
원래 데이터의 양이 큰 경우가 많고, 항상 잘 열리는지 확인하기 위해서 전체를 출력하면 시간이 오래걸리니까
데이터가 잘 불러왔는지 확인하기 위해서는 head() 함수를 이용해서 5줄정도만 확인한다.
파이썬은 기본적으로 첫 행이 열 이름이라고 생각하기 때문에, 그게 아니라면 따로 지정해주거나 알려줘야 한다.
df.head()
df.head(n)
이면 n개의 행 만을 보일 수 있다.
첫 행이 열이름이 아니라면
df=pd.read_csv('파일 이름',header=None,names=['열1','열2','열3'])
이렇게 지정해주면 된다.
* 열 이름에는 중복이 없어야 한다.
** 열 이름 -> names
*** 행 이름 (인덱스) -> 기본적으로 숫자가 세팅됨. 0부터 시작.
- csv 저장
df.to_csv('파일이름')
-> csv로 저장하는 과정에서는 자동으로 인덱스를 새로 하나 생성.
인덱스를 빼고 저장하려면
df.to_csv('파일이름', index=False)
인덱스를 빼고 읽으려면
ns_df = pd.read_csv('ns_202104.csv', index_col=0, low_memory=False)
ns_df.head()
*index_col=n은
df의 n번째 열을 index로 설정하라는 것.
그러면 n번째 열은 col에서 없어지고, index 역할만 하게 됨.
[기본 숙제]

4번 문제에서 헷갈린 흔적... names는 행이름이 아니라 열이름이죠ㅎㅎ
[선택숙제]

잠시 덮어두었던 데이터분석을 다시 꺼내들어서, 여러 군데 퍼져있는 지식을 한 군데에 주워담으려니 복잡시럽네요.
그렇지만 다양한 지식을 함께 모으는 과정에서 코드에 대한 이해가 키워지는 느낌입니다.
다음주부터 본격적인 데이터 수집이 시작되네요!
그럼 모두 다음주에 봬요:)
'혼공단' 카테고리의 다른 글
| [혼공분석] 6주차_Ch.6 복잡한 데이터 표현하기 (5) | 2025.08.18 |
|---|---|
| [혼공분석] 5주차_Ch.5 데이터 시각화하기 (4) | 2025.08.11 |
| [혼공분석] 4주차_Ch.4 데이터 요약하기 (4) | 2025.08.03 |
| [혼공분석] 3주차_ch.03 데이터의 정제 (2) | 2025.07.25 |
| [혼공분석] 2주차_Ch2. 데이터 수집 (7) | 2025.07.12 |