C.E/Python(DeepLearning)

pandas 기본 문법 (텐서플로우 기본 문법/Tensorflow/python3)

숨[Breath] 2018. 6. 26. 11:44

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([8524691015785485199])
#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



#실행화면




city_names = pd.Series(['San Francisco''San Jose''Sacramento'])
population = pd.Series([8524691015785485199])

pd.DataFrame({ 'City name': city_names, 'Population': population })



- City Name 열과 Population 열이 합쳐져 DataFrame. 즉 하나의 관계형 데이터 테이블로 만들어졌습니다.






california_housing_dataframe = pd.read_csv("https://storage.googleapis.com/mledu-datasets/california_housing_train.csv", sep=",")
california_housing_dataframe.describe()



- 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.head()
#Dataframe 레코드 중 처음 몇개만 표시합니다.







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 = pd.DataFrame({ 'City name': city_names, 'Population': population })

print (type(cities['City name']))
cities['City name']


- 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






print (type(cities['City name'][1]))
cities['City name'][1]


- cities 안의 city name의 2번째 값의 타입(형태)와 2번째의 값을 출력합니다.






print (type(cities[0:2]))
cities[0: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.87176.5397.92])
cities['Population density'= cities['Population'/ cities['Area square miles']
cities
#기존 DataFrame에 두 개의 Series를 추가합니다.
cs




#실행화면 (데이터 액세스)


여기선 딱히 추가 될 말이 없는 것 같습니다..



population / 1000.






import numpy as np
np.log(population)






population.apply(lambda val: val > 1000000)






cities['Area square miles'= pd.Series([46.87176.5397.92])

cities['Population density'= cities['Population'/ cities['Area square miles']
cities