1. 외부 파일 읽어오기
1-1. CSV 파일
- 데이터 값을 쉼표(,)로 구분하고 있다는 의미로 CSV(comma-seperated values)라고 부르는 텍스트 파일
- 쉼표로 열을 구분, 줄바꿈으로 행을 구분
#CSV파일 -> 데이터프레임
import pandas
pandas.read_csv("파일 경로(이름)")
#header 옵션
#'열 이름'이 되는 행을 지정
import pandas as pd
file_path = './read_csv_sample.csv'
#read_csv() 함수로 데이터프레임 변환
df1 = pd.read_csv(file_path)
#header 옵션 - '열 이름'이 되는 행을 지정
#header 옵션이 없으면, CSV 파일의 첫 행의 데이터가 열 이름이 된다.
df2 = pd.read_csv(file_path, header=None)
#index_col 옵션 - '행 주소'가 되는 열을 지정
#index_col 옵션이 없으면, 행 인덱스는 정수 0,1,2,... 가 자동으로 지정된다.
df3 = pd.read_csv(file_path, index_col=None)
- CSV 파일에 따라서 쉼표 대신 탭(\t)이나 공백(" ")으로 텍스트를 구분하기도 함. (구분자 옵션을 알맞게 입력)
<read_csv() 함수의 옵션>
- path : 파일의 위치(파일명 포함), URL
- sep(또는 delimiter) : 텍스트 데이터를 필드별로 구분하는 문자
- header : 열 이름으로 사용될 행의 번호 (기본값은 0)
header가 없고 첫 행부터 데이터가 있는 경우 None으로 지정 가능
- index_col : 행 인덱스로 사용할 열의 번호 또는 열 이름
- names : 열 이름으로 사용할 문자열의 리스트
- skiprows : 처음 몇 줄을 skip 할 것인지 설정(숫자 입력)
sip 하려는 행의 번호를 담은 리스트로 설정 가능(예: [1,3,5])
- parse_dates : 날짜 텍스트를 datetime64로 변환할 것인지 설정(기본값은 False)
- skip_footer : 마지막 몇 줄을 skip 할 것인지 설정(숫자 입력)
- encoding : 텍스트 인코딩 종류를 지정(예: 'utf-8')
1-2 Excel 파일
- read_csv() 함수 대부분의 옵션을 그대로 사용 가능
- 실행 환경에 따라서 Excel 파일 데이터 추출을 지원하는 xlrd 라이브러리와 openpyxl 라이브러리 설치 필요
- xlsx 확장자를 갖는 경우, engine 옵션에 'openpyxl'을 지정
- xls 확장자를 갖는 경우, engine 옵션에 'xlrd' 지정
import pandas as pd
df = pd.read_excel('./fileName.xlsx', engine = 'openpyxl')
1-3 JSON 파일
- 데이터 공유를 목적으로 개발된 특수한 파일 형식
- 파이썬 딕셔너리와 비슷하게 'key : value' 구조를 갖는데, 구조가 중첩되는 방식에 따라 다르게 적용
import pandas as pd
df = pd.read_json('./read_json_sample.json')
2. 웹(web)에서 가져오기
2-1 HTML 웹 페이지에서 표 속성 가져오기
#HTML 표 속성 읽기
pandas.read_html("웹 주소(URL)" 또는 "HTML 파일 경로(이름)")
import pandas as pd
url = './sample.html'
#HTML 웹페이지의 표(table)를 가져와서 데이터프레임으로 변환
tables = pd.read_html(url)
#tables 리스트의 원소를 iteration하면서 각각 화면 출력
for i in range(len(tables)):
print("tables[%s]" % i)
print(tables[i])
print('\n')
df = tables[1]
#'name' 열을 인덱스로 지정
df.set_index(['name'], inplace=True)
- read_sql() 함수를 이용하면, SQL 쿼리를 가지고 데이터베이스로부터 데이터를 불러올 수 있다. 이때 읽어온 데이터는 데이터프레임 포맷으로 저장된다.
2-2 웹 스크래핑
- 스크래핑한 내용을 파이썬 리스트, 딕셔너리 등으로 정리한 뒤 DataFrame() 함수에 리스트나 딕셔너리 형태로 전달하여 데이터프레임으로 변환한다.
3. API 활용하여 데이터 수집하기
구글 지오코딩(Geocoding) API
- 장소 이름 또는 주소를 입력하면 위도와 경도 좌표 정보를 변환해주는 서비스
발급 절차
1. 구글 지도 서비스 접속
2. 새 프로젝트 만들기(무료 평가판은 사용 가능하지만 신용카드 정보 등록 필요)
3. API 설정
4. 사용자 인증
5. API 키 발급
파이썬 환경에서 구글 지오코딩 사용하는 방법
- Anaconda Prompt 실행 > install -c conda-forge googlemaps 입력 > y 입력
* 사용 예제 코드 (in 파이썬머신러닝판다스데이터분석 Part 2 2.6)
# -*- coding: utf-8 -*-
## google 지오코딩 API 통해 위도, 경도 데이터 가져오기
# 라이브러리 가져오기
import googlemaps
import pandas as pd
my_key = "----발급받은 API 키를 입력-----"
# 구글맵스 객체 생성하기
maps = googlemaps.Client(key=my_key) # my key값 입력
lat = [] #위도
lng = [] #경도
# 장소(또는 주소) 리스트
places = ["서울시청", "국립국악원", "해운대해수욕장"]
i=0
for place in places:
i = i + 1
try:
print(i, place)
# 지오코딩 API 결과값 호출하여 geo_location 변수에 저장
geo_location = maps.geocode(place)[0].get('geometry')
lat.append(geo_location['location']['lat'])
lng.append(geo_location['location']['lng'])
except:
lat.append('')
lng.append('')
print(i)
# 데이터프레임으로 변환하기
df = pd.DataFrame({'위도':lat, '경도':lng}, index=places)
print('\n')
print(df)
4. 데이터 저장하기
4-1. CSV 파일로 저장
#CSV 파일로 저장
DataFrame 객체.to_csv("파일 이름(경로)")
import pandas as pd
df = pd.DataFrame(data)
df.to_csv("./파일명.csv")
4-2. JSON 파일로 저장
#JSON 파일로 저장
DataFrame 객체.to_json("파일 이름(경로)")
4-3. Excel 파일로 저장
- 데이터프레임의 행과 열은 Excel 파일의 행과 열로 일대일 대응
- 데이터프레임을 Excel 파일로 저장할 때는 to_excel() 메소드 사용
- 단, to_excel() 메소드 사용하려면 openpyxl 라이브러리를 사전에 설치해야 한다.
- 아나콘다 배포판에는 openpyxl 라이브러리가 기본 제공되므로 따로 설치 안 해도 됨.
#Excel 파일로 저장
DataFrame 객체.to_excel("파일 이름(경로)")
4-4 여러 개의 데이터프레임을 하나의 Excel 파일로 저장
- ExcelWriter() 함수는 Excel 워크북 객체를 생성 (워크북 객체: Excel 파일이라고 생각)
- 데이터프레임에 to_excel() 메소드를 적용할 때 삽입하려는 워크북 객체를 인자로 전달한다.
- 또한, sheet_name 옵션에 Excel 파일의 시트 이름을 입력하여 삽입되는 시트 위치를 지정할 수 있다.
- 데이터프레임을 삽입하는 시트 이름을 다르게 설정하면, 같은 Excel 파일의 서로 다른 시트에 여러 데이터프레임을 구분하여 저장한다.
#데이터프레임 여러 개를 Excel 파일로 저장
#pandas.ExcelWriter("파일 이름(경로)")
import pandas as pd
# 판다스 DataFrame() 함수로 데이터프레임 변환. 변수 df1, df2에 저장
data1 = {'name' : [ 'Jerry', 'Riah', 'Paul'],
'algol' : [ "A", "A+", "B"],
'basic' : [ "C", "B", "B+"],
'c++' : [ "B+", "C", "C+"]}
data2 = {'c0':[1,2,3],
'c1':[4,5,6],
'c2':[7,8,9],
'c3':[10,11,12],
'c4':[13,14,15]}
df1 = pd.DataFrame(data1)
df1.set_index('name', inplace=True) #name 열을 인덱스로 지정
print(df1)
print('\n')
df2 = pd.DataFrame(data2)
df2.set_index('c0', inplace=True) #c0 열을 인덱스로 지정
print(df2)
# df1을 'sheet1'으로, df2를 'sheet2'로 저장 (엑셀파일명은 "df_excelwriter.xlsx")
writer = pd.ExcelWriter("./df_excelwriter.xlsx")
df1.to_excel(writer, sheet_name="sheet1")
df2.to_excel(writer, sheet_name="sheet2")
writer.save()
(파이썬머신러닝판다스데이터분석 Part 2 2.10)
'📈 Data-Science > Pandas' 카테고리의 다른 글
[Pandas] 산술연산 (0) | 2024.04.01 |
---|---|
[Pandas] 인덱스 활용 (0) | 2024.04.01 |
[Pandas] 자료구조 (1) | 2024.04.01 |