728x90
기본 준비
import numpy as np
import pandas as pd
import os
print(os.getcwd())
print(os.listdir(os.getcwd()))
print(os.listdir('./csv'))
csv 파일들은 편의를 위해 csv 폴더에 따로 모아두기
자료
https://www.data.go.kr/index.do
https://www.data.go.kr/data/15080794/fileData.do
전체출력
import csv
f = open('./csv/school in seoul.csv')
data = csv.reader(f)
for row in data:
print(row)
카테고리 확인
import csv
f = open('./csv/school in seoul.csv')
data = csv.reader(f)
for row in data:
a=0
print(f"* 첫째 행 구성요소 : {row}")
print(f"* 행 길이 : {len(row)}")
for i in row:
print(f"{a}번째 값 : {i}")
a+=1
break
Pandas를 활용하여 간단하게
import csv
import pandas as pd
f = open('./csv/school in seoul.csv')
data = csv.reader(f)
df = pd.read_csv('./csv/school in seoul.csv', encoding='cp949', index_col=0)
df
df = pd.read_csv('./csv/school in seoul.csv', encoding='cp949', index_col=0)
cp949 : 한글 표현하기 위함
index_col = 0 : 불필요한 인덱스 제거 역할
index_col = 0 입력
index_col 생략
원하는 정보(초, 중, 고 중에서 선택)만 골라서 출력
df.index.str.contains() 함수를 통해 데이터 프레임의 인덱스 문자열에 원하는 문자열이 포함된 행을 찾기
import csv
import pandas as pd
f = open('./csv/school in seoul.csv')
data = csv.reader(f)
df = pd.read_csv('./csv/school in seoul.csv', encoding='cp949', index_col=0)
name = input('초등학교, 중학교, 고등학교 중에서 선택')
a = df.index.str.contains(name)
df2 = df[a]
df2
df.index.str.contains(name)에는 True, False 값이 배열 형태로 저장
"초등학교" 입력 결과
초, 중, 고 갯수 확인
import csv
import pandas as pd
f = open('./csv/school in seoul.csv')
data = csv.reader(f)
df = pd.read_csv('./csv/school in seoul.csv', encoding='cp949', index_col=0)
df_cho = df[df.index.str.contains("초등학교")]
df_jung = df[df.index.str.contains("중학교")]
df_go = df[df.index.str.contains("고등학교")]
print(f"전체 학교 수 : {df.shape[0]}")
print(f"초등학교 수 : {df_cho.shape[0]}")
print(f"중학교 수 : {df_jung.shape[0]}")
print(f"고등학교 수 : {df_go.shape[0]}")
행 개수, 열 개수 확인
import csv
import pandas as pd
f = open('./csv/school in seoul.csv')
data = csv.reader(f)
df = pd.read_csv('./csv/school in seoul.csv', encoding='cp949', index_col=0)
df
print(f"행 개수 : {df.shape[0]} 열 개수 : {df.shape[1]}")
학교 종류 확인(리스트 타입)
import csv
import pandas as pd
f = open('./csv/school in seoul.csv')
data = csv.reader(f)
df = pd.read_csv('./csv/school in seoul.csv', encoding='cp949', index_col=0)
index_info = list(set(df.index.to_list()))
print(index_info)
학교 종류별 갯수
import csv
import pandas as pd
f = open('./csv/school in seoul.csv')
data = csv.reader(f)
df = pd.read_csv('./csv/school in seoul.csv', encoding='cp949', index_col=0)
index_info = list(set(df.index.to_list()))
print(f" index_info {index_info}\n\n")
a=[]
for i in index_info:
# 정확한 일치 개수를 세는 방식으로 변경
count = (df.index==i).sum()
print(f"{i}: {count}")
a.append(count)
print('\n\n',a,'\n\n')
print(sum(a),'\n\n')
(df.index==i).sum() 코드 이해
시각화
import matplotlib.pyplot as plt
print(index_info)
print(a)
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams['axes.unicode_minus'] =False
plt.bar(index_info,a)
plt.xticks(rotation=90)
plt.tick_params(axis='x', direction='in', length=3, pad=6, labelsize=8, labelcolor='black')
plt.show()
한글 깨짐 방지 코드
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams['axes.unicode_minus'] =False
한 번에 끝내기
import numpy as np
import pandas as pd
import os
import csv
import matplotlib.pyplot as plt
f = open('./csv/school in seoul.csv')
data = csv.reader(f)
df = pd.read_csv('./csv/school in seoul.csv', encoding='cp949', index_col=0)
kind = list(set(df.index.to_list()))
print(f"학교 종류 확인\n {kind}\n")
numbers =[]
for i in kind:
count = (df.index==i).sum()
print(f"{i}: {count}")
numbers.append(count)
# print(df)
print(f"\n갯수 : {numbers}")
print("총 합계 :",sum(numbers),"\n")
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams['axes.unicode_minus'] =False
plt.bar(kind,numbers)
plt.xticks(rotation=90)
plt.tick_params(axis='x', direction='in', length=3, pad=6, labelsize=8, labelcolor='black')
plt.show()
728x90
'프로젝트, 공모전 > 프로젝트 공모전_데이터 분석' 카테고리의 다른 글
데이터분석_공모전_DBI] 데이터 분석 (0) | 2023.09.23 |
---|---|
데이터분석_공모전_DBI] 기법 정리 K-means (0) | 2023.09.23 |
데이터 분석_공모전_서울교육] 교직원 1인당 학생 수 (0) | 2023.08.20 |
데이터분석_공모전_서울교육] 서울 공공데이터 활용 (0) | 2023.08.20 |
데이터분석_공모전_서울교육] 인구 구조 시각화_행정안전부 인구 데이터 (0) | 2023.08.19 |