반응형
0. 들어가기 전에, 한글 폰트 설정해주기
코랩에서 한글 폰트 설정
1) 한글 폰트 코드 실행
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
2) 런타임 - 런타임 다시시작
3) 글꼴 지정 명령어
plt.rc('font', family='NanumGothic')
In [2]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
In [2]:
plt.rc('font', family='NanumGothic')
1. 파일 업로드
csv 파일이란?
comma seperated values의 약자로 콤마(,)로 분리된 파일
# 코랩에 파일 업로드하는 방법
from google.colab import files
uploaded = files.upload()
In [ ]:
csv 파일을 파이썬으로 읽어오기
- 파일 open
- 파일 읽기 reader
- 파일 헤더 건너뛰기
- 파일을 리스트로 바꾸기
# csv 라이브러리 임포트
import csv
f = open('파일명.csv') # 파일 오픈
data = csv.reader(f) # 파일 읽기 reader
next(data) # 파일 헤더 건너뛰기
data = list(data) # 파일 리스트로 바꾸기
In [3]:
import csv
f = open("card.csv", encoding="utf8")
data = csv.reader(f)
next(data)
data = list(data)
In [11]:
<class 'list'>
In [ ]:
In [21]:
# 총 데이터의 개수는?
print(len(data))
print("\n")
236
In [22]:
# 데이터 하나만 출력해본다
print(data[0])
print("\n")
['2019-10-12 9:13', '1972753', '본', 'S&', '185', '네이버파이낸셜(주)', '546800', '일시불(A)', '부분취소']
In [23]:
# 일부만 출력해보기(슬라이싱)
print(data[:3])
print("\n")
[['2019-10-12 9:13', '1972753', '본', 'S&', '185', '네이버파이낸셜(주)', '546800', '일시불(A)', '부분취소'], ['2019-10-12 11:56', '3399357', '본', 'S&', '185', 'GS 샵', '60440', '일시불(A)', '전표매입'], ['2019-10-13 9:16', '12621902', '본', 'S&', '185', 'G마켓', '91520', 'P(A)', '전표매입']]
In [24]:
# 데이터 일부만 지정해서 추출
print(data[0][6])
print("\n")
546800
In [ ]:
In [7]:
# 특정데이터 뽑기
# for row in data:
# print(row[0], row[5],row[6])
# print("\n")
In [4]:
# 특정 데이터와 타입 보기
for row in data:
pass
# print(row[5], type(row[6]))
In [5]:
# if 문으로 데이터 구별
for row in data:
pass
# if row[-1] == "전표매입":
# print("구매확정")
# else:
# print("취소")
In [ ]:
# 54600원 일시불(A)로 결제만 빼보기
# -3 -2
for row in data:
payment = int(row[-3])
2. 데이터 다뤄보기
In [6]:
# 카드 사용금액 모두 출력하기
spend = 0
for row in data:
if row[-1] == "전표매입":
payment = int(row[-3])
spend += payment
print(spend)
8174028
3개월간 사용한 총 금액 구하기
프로그램 흐름 생각해보기
1. 총 지출액을 저장할 변수(spend)를 만들고 초깃값 0 저장하기
2. 전체 이용내역(data)을 돌며 반복하기
2.1 이용금액(row[-3])만 골라 총 지출액(spend)에 더하기
파일로 읽어들인 데이터는 모두 문자이다. </br> 따라서 연산하려면 숫자로 변경해주어야 함!!
수정된 프로그램 흐름
1. 총 지출액을 저장할 변수(spend)를 만들고 초깃값 0 저장하기
2. 전체 이용내역(data)을 돌며 반복하기
2.1 이용금액(row[-3])만 골라 정수형으로 변환한 후 총 지출액(spend)에 더하기
매입상태를 잘 살펴보자
수정된 프로그램 흐름
1. 총 지출액을 저장할 변수(spend)를 만들고 초깃값 0 저장하기
2. 전체 이용내역(data)을 돌며 반복하기
2.1 매입상태(row[-1])가 '전표매입'이라면
2.1.1 이용금액(row[-3])만 골라 정수형으로 변환한 후 총 지출액(spend)에 더하기
3. 진짜! 데이터 분석!
1) 10월, 11월, 12월 지출액을 막대그래프로 그리기
Q. 그래프로 표현하려면 plt.bar()안에 뭐가 필요할까?
</br> </br>
- 10월 -> [0]
- 11월 -> [1]
- 12월 -> [2]
</br>
Q. 규칙을 발견하셨나요?
In [4]:
s_mon = [0, 0, 0]
for row in data:
if row[-1] == "전표매입":
s_mon[int(row[0].split("-")[1])-10] += int(row[-3])
print(s_mon)
[2093015, 4127744, 1953269]
프로그램 흐름 생각해보기
1. 10~12월의 월별 지출액을 저장할 리스트(s_mon)를 만들고 초깃값 0 저장하기
2. 전체 이용내역(data)을 돌며 반복하기
2.1 각 이용내역에서 매입상태가 '전표매입'이라면
2.1.1 해당 건의 이용월과 이용금액 구하기
2.1.2. 이용월에서 10을 빼 월별 지출액 리스트(s_mon)의 인덱스(idx) 구하기
2.1.3 과정 2.1.2에서 구한 인덱스의 값(s_mon[idx])에 과정 2.1.1에서 구한 이용금액 더하기
3. 월별 지출액 리스트(s_mon)로 막대그래프 그리기
In [11]:
# 월별 지출액 시각화 (막대그래프)
import matplotlib.pyplot as plt
import set_matplotlib_hangul
plt.title("10-12월 지출액")
plt.bar(["10월", "11월", "12월"], s_mon, color = "royalblue")
plt.show()
지수표기법 e를 검색해보세요!
2) 월별 택시 이용 금액 구하기
프로그램 흐름 생각해보기
1. 10-12월의 월별 택시비 지출액을 저장할 리스트(taxi)를 만들고 각 월별 택시 지출액의 초깃값을 0으로 저장하기
2. 전체 이용내역(data)를 돌며 반복하기
2.1 매입상태(row[-1])가 '전표매입'이고, 가맹점명에 '택시'가 있다면
2.1.1 해당 건의 이용월 구하고, 이용금액도 구하기
2.1.2 이용월에서 10을 빼서 taxi의 인덱스 구하기
2.1.3 taxi[인덱스] += 이용금액
3. 월별 지출액 리스트로 막대그래프 그리기
In [21]:
# 월별 택시비 지출액
# 월별 택시비 누적 변수 : list
taxi = [0, 0, 0]
for row in data:
if row[-1] == "전표매입" and "택시" in row[5]:
mon, payment = int(row[0].split("-")[1]), int(row[-3])
idx = mon-10
taxi[idx] += payment
print(taxi)
[8600, 83900, 52800]
In [17]:
# 월별 택시비 지출액 시각화(선그래프: plot())
plt.title("10-12월 택시비 지출액")
plt.bar(["10월", "11월", "12월"], taxi, color = "royalblue", label = "택시비 지출액")
plt.legend()
plt.show()
3) 월별 배달 이용 금액 구하기
In [22]:
# 월별 택시비 지출액
# 월별 택시비 누적 변수 : list
deliver = [0, 0, 0]
for row in data:
if row[-1] == "전표매입" and "우아한형제들" in row[5]:
mon, payment = int(row[0].split("-")[1]), int(row[-3])
idx = mon-10
deliver[idx] += payment
print(deliver)
[134300, 127900, 99230]
4) 택시 지출액과 배달음식 지출액 비교하기
여러 그래프 한 번에 표시하기
# 그래프 그리는 명령어를 여러개 작성하고, plt.show()를 마지막에 한번만 작성
plt.plot(리스트A)
plt.plot(리스트B)
plt.show()
In [24]:
plt.title("10-12월 택시비/ 배달음식비 지출액")
plt.plot(["10월", "11월", "12월"], taxi, color = "royalblue", label = "택시비 지출액")
plt.plot(["10월", "11월", "12월"], deliver, color = "red", label = "배달비 지출액")
plt.legend()
plt.show()
지출액 상위 10개 항목 추출 및 시각화
- 지출액 상위 10개 항목을 추출 하기 위한 데이터 구조 변경 : dict이용
- dict의 키 : 가맹점명
- dict의 키 값 : 이용금액을 가맹점별 누적
In [74]:
keys = []
values = []
for i in range(len(data)):
keys.append(data[i][5])
values.append(data[i][-3])
In [75]:
new_dict = {}
for i,v in zip(keys,values):
if i not in new_dict.keys():
new_dict[i] = int(v)
else:
new_dict[i] += int(v)
In [76]:
sort_new_dict = sorted(new_dict.items(), key= lambda item: item[1],reverse=True)
fainl = sort_new_dict[:10]
In [77]:
fainl
Out[77]:
[('네이버파이낸셜(주)', 3117380),
('스마일페이 (신라면세점)', 978035),
('(주)현대백화점신촌점', 415502),
('(주)우아한형제들', 397930),
('네이버페이', 374976),
('SSG.COM', 370153),
('신라면세점', 339125),
('(주)신세계백화점강남점', 333800),
('(주)이마트 신촌점', 305690),
('크로키닷컴', 299610)]
In [78]:
company = []
money = []
for i,v in fainl:
company.append(i)
money.append(v)
plt.barh(company,money, color= "b")
plt.title("10-12월 지출 top 10")
Out[78]:
Text(0.5, 1.0, '10-12월 지출 top 10')
'경기도 인공지능 개발 과정 > Python' 카테고리의 다른 글
[Python] tkinter를 이용한 GUI 개발 (0) | 2022.07.10 |
---|---|
[파이썬 머신러닝] 회귀, 능형회귀, 로지스틱회귀 (0) | 2022.07.08 |
[Python 데이터분석] matplotlib을 이용한 기본 시각화 (0) | 2022.06.30 |
[django] TODOLIST 앱 등록해보기 (0) | 2022.06.10 |
[Django] 장고 구조 및 템플릿 사용해보기 (0) | 2022.06.10 |