티스토리 뷰
파이썬으로 데이터 주무르기라는 책을 보고 데이터 분석과정을 따라해보고자 한다. 이 책은 이 분야로 이끌어준 친한 동생이 추천해준 소중한 책이다.
처음에는 이해가 안되어 몇 개 따라해보다 말았는데, 이제는 이해 할 수 있을 정도가 되어 하나하나 따라해보며 과정을 곱씹어보려 한다.
이 책은 총 8개의 대단원으로 이루어져 있고, 각 대단원마다는 조금씩 관련이 있는것 같다.
지금 진행하는 단원은 다음과 같이 구성되어 있고, 시간날때마다 천천히 정리해보겠다.
1단원 서울시 구별 CCTV현황 분석¶
- CCTV 현황과 인구 현황 데이터 구하기
- 파이썬에서 텍스트 파일과 엑셀 파일을 읽기 -pandas
- pandas 기초 익히기
- pandas를 이용해서 CCTV와 인구 현황 데이터 파악하기
- pandas 고급기능 - 두 DataFrame 병합하기
- CCTV 데이터와 인구 현황 데이터를 합치고 분석하기
- 파이썬의 대표 시각화 도구 - Matplotlib
- CCTV 현황 그래프로 분석하기
1. CCTV 현황과 인구 현황 데이터 구하기¶
https://github.com/PinkWink/DataScience/tree/master/data
파이썬으로 데이터 주무르기 깃허브. 책에 나온 코드들과 텍스트 파일 및 엑셀 파일을 받을 수 있다.
2. 파이썬에서 텍스트 파일과 엑셀 파일 읽기¶
In [1]:
import pandas as pd
In [2]:
CCTV_Seoul = pd.read_csv('pydata/01. CCTV_in_Seoul.csv', encoding='utf-8') # UTF-8로 인코딩 되어있는 데이터를 불러온다.
CCTV_Seoul.head() # 5행만 보여주시오
Out[2]:
In [3]:
CCTV_Seoul.columns # 컬럼의 이름이 반환된다.
Out[3]:
In [4]:
CCTV_Seoul.columns[0] # 첫번째 컬럼의 이름을 반환한다.
Out[4]:
In [5]:
# 첫번째 컬럼의 이름을 '구별'로 바꾸겠다.
CCTV_Seoul.rename(columns={CCTV_Seoul.columns[0]:'구별'}, inplace=True)
CCTV_Seoul.head()
Out[5]:
In [6]:
# 두 번째 받은 엑셀 파일을 읽자.
pop_Seoul = pd.read_excel('pydata/01. population_in_Seoul.xls', encoding='utf-8')
pop_Seoul.head()
Out[6]:
읽어오긴 했는데 형태가 좀 이상하다. 위에 2줄이 컬럼명에 있어야 하는데...?¶
In [7]:
# header=2로 하여 3줄을 읽도록 하자.
#엑셀 컬럼을 나타내는 B, D, G, J, N 열만 읽도록 parse_cols='B,D,G,J,N' 옵션을 넣는다.(usecols로 바뀜)
pop_Seoul = pd.read_excel('pydata/01. population_in_Seoul.xls',
header=2,
usecols = 'B, D, G, J, N',
encoding='utf-8')
pop_Seoul.head()
Out[7]:
In [8]:
# 컬럼명이 마음에 안들어 바꾸자!
pop_Seoul.rename(columns={pop_Seoul.columns[0]: '구별',
pop_Seoul.columns[1]: '인구수',
pop_Seoul.columns[2]: '한국인',
pop_Seoul.columns[3]: '외국인',
pop_Seoul.columns[4]: '고령자'}, inplace=True)
pop_Seoul.head()
Out[8]:
3.pandas 기초 익히기¶
(1) Series와 DataFrame¶
In [9]:
import pandas as pd
import numpy as np
In [10]:
# Series는 판다스 데이터 유형 중 기초이다.
# 대괄호를 이용하여 list를 만든 후 pd.Series 명령어를 이용하여 만들어 주었다.
s = pd.Series([1,3,5,np.nan,6,8])
s
Out[10]:
In [11]:
# date range를 이용하여 기준날짜로 부터 6일간의 날짜를 구할 수 있다.
dates = pd.date_range('20130101', periods=6)
dates
Out[11]:
In [12]:
# 6행 4열의 random 변수를 만들고 컬럼은 A,B,C,D로 지정한다.
# 인덱스를 위에서 구해준 날짜로 지정해준다.
df=pd.DataFrame(np.random.randn(6,4), index=dates, columns=['A','B','C','D'])
df
Out[12]:
In [13]:
# 3행까지만 볼래!
df.head(3)
Out[13]:
In [14]:
#인덱스를 보여줘!
df.index
Out[14]:
In [15]:
#컬럼명을 보여줘!
df.columns
Out[15]:
In [16]:
#안에 들어가는 내용들을 확인 가능
df.values
Out[16]:
In [17]:
# 데이터 프레임의 개요를 알 수 있다.
df.info()
In [18]:
# 통계적 개요를 확인할 수 있다.
df.describe()
Out[18]:
In [19]:
# B열을 기준으로 내림차순으로 정렬했다. Default 값은 asending=True로 오름차순
df.sort_values(by='B', ascending=False)
Out[19]:
In [20]:
# 컬럼에 해당하는 Series를 보여준다.
df['A']
Out[20]:
(2) loc¶
In [21]:
# 원하는 행의 범위를 지정해서 볼 수 있다.
df[0:3]
Out[21]:
In [22]:
# 인덱스를 이용해 행의 범위를 지정할수도 있다.
df['20130102':'20130104']
Out[22]:
In [23]:
# 특정 인덱스의 데이터만 보고 싶다면 df.loc 명령을 사용해봐!
df.loc[dates[1]]
Out[23]:
In [24]:
# A, B열의 모든 행을 보고 싶다면 ?!
df.loc[:,['A','B']]
Out[24]:
In [25]:
# 행과 열의 범위를 동시에 지정해볼까?
df.loc['20130102':'20130104',['A','B']]
Out[25]:
In [26]:
# 2013년 1월 2일의 A, B 컬럼의 내용을 보자
df.loc['20130102',['A','B']]
Out[26]:
In [27]:
# dates[0]에 맞는 날짜인 2013년 1월 1일의 A컬럼 데이터 확인
df.loc[dates[0],'A']
Out[27]:
(3) iloc¶
In [28]:
# 행과 열의 번호를 이용하여 데이터에 바로 접근
df.iloc[3]
Out[28]:
In [29]:
# 3번부터 5번째 앞까 행과 0번부터 1번까지 열의 데이터를 가져오기
df.iloc[3:5,0:2]
Out[29]:
In [30]:
# 범위가 아니라 콤마를 이용해서 행과 열을 지정할 수도 있다.
df.iloc[[1,2,4],[0,2]]
Out[30]:
In [31]:
# : 는 전체범위를 의미한다. 모든 행을 출력!
df.iloc[:,1:3]
Out[31]:
In [32]:
# 이번에는 모든 열을 출력!
df.iloc[1:3,:]
Out[32]:
(4) 조건문¶
In [33]:
df
Out[33]:
In [34]:
# A컬럼에서 0보다 큰 행만 출력하시오!
df[df.A>0]
Out[34]:
In [35]:
# 데이터 자체에 조건을 걸면 만족하지 않은 곳은 NaN 처리된다.
df[df>0]
Out[35]:
In [36]:
# 데이터의 원본은 바꾸고 싶지 않을때 copy 명령어를 사용한다.
df2 = df.copy()
In [37]:
# E 컬럼을 새롭게 추가한다.
df2['E'] = ['one', 'one', 'two', 'three', 'four', 'three']
df2
Out[37]:
In [38]:
# isin 명령을 이용해 'two'와 'four'가 있는지 조건을 확인.
df2['E'].isin(['two','four'])
Out[38]:
In [39]:
# 조건에 맞는 행만 추출
df2[df2['E'].isin(['two','four'])]
Out[39]:
(5) cumsum¶
In [40]:
df
Out[40]:
In [41]:
# 누적합을 구한다.
df.apply(np.cumsum)
Out[41]:
(6) lambda¶
In [42]:
# 최대값과 최소값의 차이를 구한다.
df.apply(lambda x: x.max() - x.min())
Out[42]:
'beginner > 파이썬 분석' 카테고리의 다른 글
서울시 구별 CCTV 현황 분석 -3 (0) | 2019.06.29 |
---|---|
서울시 구별 CCTV 현황 분석-2 (0) | 2019.06.28 |
맥주 추천시스템-데이터분할 (0) | 2019.04.23 |
맥주데이터 추천시스템_4/22 (0) | 2019.04.22 |
캐글 타이타닉 데이터 분석 - 2 (1) | 2019.04.12 |