15일차와 같은 '데이터를 어떻게 가져올 것인가'와 pandas, numpy에 대한 내용이 있다.
pandas의 경우 R의 data.frame과 같은 구조로 데이터를 더 해석하기 수비게 바꿔주는 라이브러리이다.
여기 나오는 내용은 '예제로 배우는 파이썬 데이터 시각화'의 코드(파이썬 2.7)를
파이썬 3 코드로 바꾼 것이다.
========================== Python ==========================
from openpyxl import load_workbook
file = 'ch02-xlsxdata.xlsx'
try:
wb = load_workbook(filename=file)
# ws = wb.get_sheet_by_name('Sheet1') # 이건 openpyxl에서 안 쓴다
ws = wb['Sheet1']
# ws = wb[0] # xlrd와 달리 이런 형태는 안 된다.
except:
print('파일이 없습니다.')
dataset = []
for r in ws.rows:
col = []
for c in r:
col.append(c.value)
dataset.append(col)
from pprint import pprint
pprint(dataset)
'''
데이터 분석
=> 읽어온다.(csv, json)
=> 회귀분석 => 예측 편하게 할 수 있다.
데이터 출력
'''
import csv
filename = 'ch02-data-write.csv'
# with open으로 하면 close를 하지 않아도 된다.
with open(filename, 'w', encoding='UTF-8', newline='') as f:
writer = csv.writer(f)
for row in range(10):
writer.writerow([row + 1, '2018-05-%s' %(19 + row)])
import json
dict = {
"name": "홍길동"
}
with open('j.json', 'w', encoding='UTF-8') as file:
file.write(json.dumps(dict, ensure_ascii=False))
# ensure_ascii=False를 이용해서 아스키 코드를 한글로 제대로 저장 가능하다.
# 만약 안 하면 {"name": "\ud64d\uae38\ub3d9"} 이렇게 저장된다.
import csv
filename = 'ch02-data-write.tab'
with open(filename, 'w', encoding='UTF-8') as f:
writer = csv.writer(f, dialect=csv.excel_tab)
for row in range(10):
writer.writerow([row + 1, '2016.01.%s' %(19+row)])
'''
Pandas는 R의 데이터 프레임과 같다.
'''
import pandas as pd
import numpy as np
data = {
"juso": ["서울시","인천시","부산시"],
"name": ["kim","lee","yoo"],
"age": [20,30,40]
}
data = pd.DataFrame(data)
print(data) # 표 구조로 위의 데이터를 출력.
print(data.tail(1)) # 맨 뒤의 하나의 행을 출력.
print(data.juso) # 특정 열을 선택하는 방법. R과 동일.
print(data['juso']) # 위와 동일.
print(data.name[1]) # name 컬럼의 1번 인덱스(2번)을 출력.
print(data["age"] > 30) # age 행의 > 30을 적용해서 boolean값을 출력
data["money"] = [1000, 300, 400] # 새로운 열을 추가한다.
print(data) # money컬럼이 추가되었다.
data.loc[4] = [60,"광주시","Lim"] # 새로운 행을 추가한다.
print(data)
data1 = pd.DataFrame({"age":[90], "juso":["청주시"], "name":["Han"]})
# concat을 이용하여 새로운 데이터 프레임을 붙여서 행을 추가 할 수도 있다.
result = pd.concat([data, data1], ignore_index=True) # ignore_index=True를 하면 인덱스가 통합된다.
print(result)
data1 = pd.DataFrame({"age":[90], "juso":["청주시"], "name":["Han"]})
# concat을 이용하여 새로운 데이터 프레임을 붙여서 행을 추가 할 수도 있다.
result = pd.concat([data, data1]) # ignore_index=True를 하면 인덱스가 통합된다.
print(result.loc[0]) # 만약 ignore_index=True를 안 하면 두 개 행이 다 검색된다.
'''
'결과'
age juso name
0 20 서울시 kim
0 90 청주시 Han
'''
data = pd.DataFrame(data)
print(np.sum(data.age)) # age컬럼을 다 더한다. 결과는 90.
print(np.sum(data.name)) # 결과는 kimleeyoo. String은 다 합쳐지게 된다.
print(np.sum(data.juso)) # 결과는 서울시인천시부산시.
print(data[:2]) # 0~1까지만 출력한다.
'''
'결과'
age juso name
0 20 서울시 kim
1 30 인천시 lee
'''
data.drop(2) # 2행을 삭제. 그런데 이 삭제라는 것이 실제로 data에 영향을 주는 것은 아니다.
# 영향을 주고 싶다면 data = data.drop(2) 라고 저장을 해줘야 한다.
print(data.drop(2)) # 2번 행을 없앤 형식을 출력
'''
'결과'
age juso name
0 20 서울시 kim
1 30 인천시 lee
'''
print(data.to_html()) # html의 구조로 만든다.
'''
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>age</th>
<th>juso</th>
<th>name</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>20</td>
<td>서울시</td>
<td>kim</td>
</tr>
<tr>
<th>1</th>
<td>30</td>
<td>인천시</td>
<td>lee</td>
</tr>
<tr>
<th>2</th>
<td>40</td>
<td>부산시</td>
<td>yoo</td>
</tr>
</tbody>
</table>
'''
========================== Python ==========================
'프로그래밍 > Python, R 프로그래밍' 카테고리의 다른 글
[Python] pandas에서 특정 문자열이 들어간 데이터를 제외하기 (0) | 2018.06.12 |
---|---|
[Python] Python 17일차 (0) | 2018.06.12 |
[Python] dialect 란? (0) | 2018.06.11 |
[Python] Python 15일차(예제로 배우는 파이썬 데이터 시각화) (0) | 2018.06.07 |
[Python] Python 14일차 (0) | 2018.06.04 |