pandas 기본 문법 (텐서플로우 기본 문법/Tensorflow/python3)
Google Tensorflow 첫걸음 자료로 공부하며 작성하였습니다.
저는 현재 Ubuntu 16.04.4 LTS / Python3 / Jupyter Notebook 환경입니다.
#소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import pandas as pd #pandas 를 import 하고 이름을 pd로 명칭한다. pd.__version__ #pandas 버전을 확인한다. ''' Pandas의 기본 데이터 구조는 두 가지 클래스로 구현됩니다. - DataFrame은 행 및 이름 지정된 열이 포함된 관계형 데이터 테이블이라고 생각할 수 있습니다. - Series는 하나의 열입니다. DataFrame에는 하나 이상의 Series와 각 Series의 이름이 포함됩니다. 데이터 프레임은 데이터 조작에 일반적으로 사용하는 추상화입니다. Spark 및 R에 유사한 구현이 존재합니다. Series를 만드는 한 가지 방법은 Series 객체를 만드는 것입니다. ''' city_names = pd.Series(['San Francisco', 'San Jose', 'Sacramento']) population = pd.Series([852469, 1015785, 485199]) #pandas Series 객체 만듦 pd.DataFrame({ 'City name': city_names, 'Population': population }) #DataFrame 객체 만듦 california_housing_dataframe = pd.read_csv("https://storage.googleapis.com/mledu-datasets/california_housing_train.csv", sep=",") california_housing_dataframe.describe() ''' describe() 함수는 전체 혹은 int로 구성된 특정 컬럼 데이터의 빈도, 평균, 편차, 최소값, 25%, 50%, 75%, 최대값을 자동으로 뽑아줍니다. ''' | cs |
#실행화면
pd.DataFrame({ 'City name': city_names, 'Population': population })
- City Name 열과 Population 열이 합쳐져 DataFrame. 즉 하나의 관계형 데이터 테이블로 만들어졌습니다.
- csv 데이터 파일을 pandas를 이용해 읽어와 Dataframe을 하나 만들었습니다.
이후 describe 함수를 사용하여 데이터의 빈도, 평균, 편차, 최소값, 25%, 50%, 75%, 최대값을 뽑아냈습니다.
#소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | california_housing_dataframe.head() #Dataframe 레코드 중 처음 몇개만 표시합니다. %matplotlib inline california_housing_dataframe.hist('housing_median_age') ''' 여기서 %matplotlib inline가 쓰인 이유는 데이터를 출력할 때 시각화를 하기 위해서 입니다. 단순히 출력을 실행 시켰을 때 아래와 같은 결과만 나올 때 사용합니다. array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7f411cd8d160>]], dtype=object) 이는 matplotlib과 관련된 이슈인데, 자세히 설명하지는 않겠습니다. ''' | cs |
#실행화면
california_housing_dataframe.hist('housing_median_age')
- 시각화 하여 출력합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #찾아보면 <pandas의 고급 색인 생성 / 선택 기능>을 위한 API가 많이 존재합니다. cities = pd.DataFrame({ 'City name': city_names, 'Population': population }) print (type(cities['City name'])) ''' (cities['City name'])의 type을 출력합니다. 참고로 print (type(cities['City name'])) 는 <class 'pandas.core.series.Series'> 라는 결과가 나오고 print (type(cities)) 는 <class 'pandas.core.frame.DataFrame'> 라는 결과가 나옵니다. type(cities['City name'][1])는 <class 'str'>을 출력합니다. ''' cities['City name'] #cities에 저장되어 있는 city name을 출력합니다. print (type(cities['City name'][1])) #cities의 city name 안의 2번째 값의 형태를 출력합니다. cities['City name'][1] #2번째 값은 'San Jose'로 확인되네요. print (type(cities[0:2])) #type(cities[0:2])는 print (type(cities)) 와 같습니다. cities[0:2] #dataframe인 cities를 출력합니다. #위와 같이 python dict/list로 dataframe 데이터에 액세스 할 수 있습니다. | cs |
#실행화면 (데이터 액세스)
위에서 자세한 설명을 하였으니 아래는 따로 설명이 필요 없을 것 같습니다.
- cities라는 dataframe을 만듭니다. city name과 population을 넣었네요.
- cities의 city name을 출력하니 Series라는 출력이 나옵니다. 눈치 빠른 사람들은 아시겠지만, Dataframe의 일부분은 Series 입니다.
(잘 생각해 봅시다. 우리는 cities를 출력한 것이 아니라 cities의 일부를 출력하였습니다.)
- cities의 city name을 출력하니 3가지의 city name이 출력되네요.
+ 참고로 print (type(cities))는 이런 결과가 나옵니다.
1 | print (type(cities)) | cs |
- cities 안의 city name의 2번째 값의 타입(형태)와 2번째의 값을 출력합니다.
- 슬라이싱을 합니다. 슬라이싱 개념은 따로 다루지 않겠습니다.
- 슬라이싱 된 cities의 타입(형태)를 출력하는데 city name을 콕 찝은 것이 아니라 dataframe 입니다. 출력 된 결과를 보면 이해가 쉽습니다.
- 슬라이싱 된 cities를 출력합니다.
#소스코드 (데이터 조작)
1 2 3 4 5 6 7 8 9 10 11 12 13 | population / 1000. import numpy as np np.log(population) #population을 log 합니다. population.apply(lambda val: val > 1000000) #인구가 백만 명을 초과하는지 나타내는 새 Series를 만듭니다. cities['Area square miles'] = pd.Series([46.87, 176.53, 97.92]) cities['Population density'] = cities['Population'] / cities['Area square miles'] cities #기존 DataFrame에 두 개의 Series를 추가합니다. | cs |
#실행화면 (데이터 액세스)
여기선 딱히 추가 될 말이 없는 것 같습니다..
population / 1000.
population.apply(lambda val: val > 1000000)
cities['Area square miles'] = pd.Series([46.87, 176.53, 97.92])