1. 외부 파일 가져오기

판다스는 다양한 형태의 파일을 가져와 데이터프레임으로 변환하고, 또한 다양한 파일형식으로 변환이 가능하다.
한번 데이터프레임으로 변환하고 나면 판다스의 모든 함수를 사용할 수 있다.
1-1 csv 파일
.csv 형식의 파일.
#csv파일의 데이터프레임 변환
pandas.read_csv("파일경로")
#header 옵션: 데이터프레임의 열 이름으로 사용할 행을 지정하기
pandas.read_csv("파일경로", header=0) #0행을 지정
pandas.read_csv("파일경로", header=1) #1행을 지정
pandas.read_csv("파일경로", header=none) #행 지정 안함
#index 옵션: 데이터프레임의 행 이름으로 사용할 열 지정하기
pandas.read_csv("파일경로", index_col=c0) #c0 열을 인덱스 지정(행 이름)
pandas.read_csv("파일경로", index_col=False) #지정안함
#예제 2-1 CSV 파일 불러오기
import pandas as pd
file_path = "C:\Download\read_csv_sample.csv" #위의 예제처럼 바로 해도되지만 여러번 사용할 경우 따로 함수지정해서 하는게 간편한듯
df1= pd.read_csv(file_path, header= none)
print(df1)
'


read_csv() 함수의 다양한 옵션을 통해서 다양한 csv 파일의 형식에 대응해야 한다. csv 파일에 따라서는 쉼표나 탭 또는 공백으로 텍스트를 구분하기 때문이다
1-2 엑셀 파일
엑셀파일은 에초에 행과 열의 형태가 데이터프레임과 일치하기 때문에 위의 csv파일과 같이 읽고 때에 따라서는 옵션만 간단하게 추가해주면 된다
.xlsx-> DataFrame: pandas.read_excel("파일경로", 옵션)
#예제 2-2 엑셀 파일 읽기
import pandas as pd
path= "C:/Download/남북한발전전력량.xlsx" #마찬가지로 경로는 다시쓰기 귀찮으니까 path라는 함수로 지정
df1 = pd.read_excel(paht, engine = 'openpyxl')
df2 = pd.read_excel(path, engine = 'openpyxl', header=None)
print(df1)
print('\n')
print(df2)
engine을 왜쓰는가: 실행 환경에 따라서는 excel 파일 데이터 추출을 지원하는 xlrd 라이브러리와 openpyxl 라이브러리 설치가 필요할 수도 있다. xlsx 확장자를 갖는 경우, engine 옵션에 'openpyxl'을 지정한다. 확장자가 xls인 경우에는 engine 옵현으로 xlrd을 지정한다.
1-3 JSON 파일
.json 은 데이터 공유를 목적으로 개발된 특수 파일형식이다.
JSON -> DataFrame: pandas.read_json("파일경로")
#예제 2-3 JSON 파일 읽기
import pandas as pd
#read_json() 데이터프레임 변환
df= pd.read_json("C:/download/read_json_sample.json")
print(df)
print("\n")
print(df.index)
2. 웹(web)에서 가져오기
2-1 HTML 웹 페이지에서 표 속성 가져오기
read_html() 함수를 이용해서 웹 페이지에 있는 <table> 태그에서 표 형식을 모두 찾아와 데이터프레임으로 변환한다.
이때, 표 데이터들은 각각 다른 테이블이기 때문에 여러개의 표를 원소로 같는 리스트가 반환된다.
HTML 표 가져오기: pandas.read_html("웹주소" 또는 "HTML" 파일 경로)
#예제 2-4 웹에서 표 정보 읽기
import pandas as pd
#HTML 파일 경로 or 웹페이지 주소를 변수에 저장 #이 역시 만찬가지로 여러번 쓰기 번거로워서
url= "C:/download/sample.html"
#html 웹페이지의 테이블을 가져와서 데이터프레임으로 변환
tables= pd.read_html(url)
#테이블의 개수 확인
print(len(tables))
print("\n")
#테이블 리스트의 원소를 iteration하면서 각각 화면 출력
for i in range(len(tables)):
print("tables[%s]" % i
print(tables[i]
print("\n")
#파이썬 패키지 정보가 들어있는 두번째 데이터프레임선택df 변수 저장
df= tables[1]
#'name' 열을 인덱스로 지정
df.set_index(['name'], inplace=True)
print(df)
2-2 웹 스크래핑
BeautifulSoup 등 웹 스크래핑의 도구로 수집한 데이터를 판다스 데이터프레임으로 정리하는 방법을 설명하자면,
1. 데이터 스크래핑하기
2. 파이썬 리스트, 딕셔너리 등으로 정리
3. DataFrame() 함수에 리스트나 딕셔너리 형태로 전달하여 데이터프레임으로 변환
이 정도가 되겠다.
#예제 2-5 웹에서 데이터 가져와 데이터 프레임으로 변환하기
import pandas as pd
import requests
from bs4 import BeautifulSoup
# 빈 데이터프레임 생성
df_list = []
# 페이지 순회
for i in range(152200, 155001): # 페이지 번호 범위 설정
url = f'https://www.geumcheon.go.kr/reserve/edcLctreView.do?key=112&searchLctreKey={i}'
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
program_name_elem = soup.find('span', class_='p-table__subject_text')
if program_name_elem:
# span 태그의 내부 텍스트 전체를 추출
text_content = program_name_elem.text.strip()
# 프로그램명 추출
program_name = text_content.split('\n')[0]
# 신청자 및 대기자 정보 추출
applicant_info = text_content.split('신청자:')[-1].split(',')[0].strip()
waiting_info = text_content.split('대기자:')[-1].strip()
# 추출한 정보를 딕셔너리로 추가
data = {'프로그램명': program_name, '신청자': applicant_info, '대기자': waiting_info}
df_list.append(pd.DataFrame(data, index=[0])) # 각 페이지의 정보를 DataFrame으로 변환하여 리스트에 추가
# 데이터프레임 합치기
df = pd.concat(df_list, ignore_index=True)
3. API 활용하여 데이터 수집하기
인터넷 서비스 업체에서 제공하는 api를 통해서 수집한 데이터를 판다스 자료구조로 변환하는 방식
- 구글 지오코딩 API
구글 지오코딩의 api를 이용하여 장소에 대한 위도경도 데이터를 가져와 데이터프레임으로 저장할 수 있다.
지오코딩의 api 변환방식에 대해서 먼저 알아보자면, 아래와 같다. 아래는 해운대 해수욕장에 대한 위경도 정보를 확인한 것이다.

#예제 2-6 구글 지오코딩 위치정보
import googlemaps
import pandas as pd
my_key = "AIzaSyDBV36PoBl6Fn6ToUgWZT2LhZZ25rl9fTc"
#구글맵스 객체 생성하기
maps = googlemaps.Client(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)
#결과값
1 서울시청
2 경희대학교 서울캠퍼스
3 국립국악원
위도 경도
서울시청 37.566585 126.978204
경희대학교 서울캠퍼스 37.596837 127.051844
국립국악원 37.477759 127.008304
4. 데이터 저장하기
4-1 CSV 파일로 저장
CSV 파일로 저장: df.to_csv("경로")
4-2 JSON 파일로 저장
JSON 파일로 저장: df.to_json("경로")
4-3 Excel 파일로 저장
Excel파일로 저장: df.to_excel("경로")
4-4 여러개의 데이터프레임을 하나의 Excel 파일로 저장
#데이터 여러개를 한 엑셀로 저장 : pd.ExcelWriter("파일경로")
# df1을 'sheet1'으로, df2를 'sheet2'로 저장
writer = pd.ExcelWriter("./파일명.xlsx")
df1.to_excel(writer, sheet_name='sheet1')
df2.to_excel(writer, sheet_name='sheet2')
writer.save()
'파이썬 머신러닝 판다스 데이터분석' 카테고리의 다른 글
4주차- 데이터프레임의 다양한 응용 (0) | 2024.08.22 |
---|---|
3주차-데이터 사전 처리 (0) | 2024.08.21 |
3주차-시각화 도구 및 데이터 사전 처리 (0) | 2024.08.21 |
2주차- 데이터 살펴보기 (0) | 2024.08.14 |
1주차- 판다스 입문 (0) | 2024.07.30 |