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 ==========================

+ Recent posts