'''
원격 DB와 연동 후 DataFrame으로 처리
'''
import MySQLdb
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from conda.common._logic import FALSE
plt.rc('font', family='malgun gothic')
plt.rcParams['axes.unicode_minus'] = False
import pickle
import csv
try:
with open('mydb.dat', mode='rb') as obj:
config=pickle.load(obj)
except Exception as e:
print('connect err : ', e)
try:
conn=MySQLdb.connect(**config)
cursor = conn.cursor()
sql="""
select jikwon_no, jikwon_name, buser_name, jikwon_jik, jikwon_gen, jikwon_pay
from jikwon inner join buser
on buser_num=buser_no
"""
cursor.execute(sql)
#출력 1 --> DataFrame
df1=pd.DataFrame(cursor.fetchall(),
columns=['jikwon_no', 'jikwon_name', 'buser_name', 'jikwon_jik', 'jikwon_gen', 'jikwon_pay'])
print(df1.head(3))
#출력 2 --> csv 파일
with open("직원.csv", mode='w', encoding='utf-8') as fo:
writer = csv.writer(fo)
for r in cursor:
writer.writerow(r)
# csv 읽기
df2=pd.read_csv("직원.csv", names=['번호','이름','부서','직급', '성별','연봉'])
print(df2.head(3))
print()
df = pd.read_sql(sql, conn)
df.columns = ['번호','이름','부서','직급', '성별','연봉']
print(df.head(3))
print()
print('건수 :', len(df), df['이름'].count())
print('직급별 인원수 :', df['직급'].value_counts())
print('연봉 평균 :', df.loc[:,'연봉'].mean())
print('연봉 표준편차 :', df.loc[:,'연봉'].std())
ctab = pd.crosstab(df['성별'], df['직급'], margins = True) # 각 직급별로 성별 구분
print(ctab)
# 시각화 : 직급별 연봉 평균
jik_ypay = df.groupby(['직급'])['연봉'].mean() # 직급별로 연봉 평균 구하기
print(jik_ypay, type(jik_ypay))
print(jik_ypay.index)
print(jik_ypay.values)
plt.pie(jik_ypay, explode = (0.2,0,0,0.3,0), labels = jik_ypay.index, shadow = True,
labeldistance=0.8, counterclock=False)
plt.show()
except Exception as e:
print('process err : ', e)
finally:
cursor.close()
conn.close()
<console>
jikwon_no jikwon_name buser_name jikwon_jik jikwon_gen jikwon_pay
0 1 홍길동 총무부 이사 남 9900
1 2 한송이 영업부 부장 여 8800
2 3 이순신 영업부 과장 남 7900
번호 이름 부서 직급 성별 연봉
0 1 홍길동 총무부 이사 남 9900
1 2 한송이 영업부 부장 여 8800
2 3 이순신 영업부 과장 남 7900
번호 이름 부서 직급 성별 연봉
0 1 홍길동 총무부 이사 남 9900
1 2 한송이 영업부 부장 여 8800
2 3 이순신 영업부 과장 남 7900
건수 : 30 30
직급별 인원수 : 사원 13
대리 7
과장 6
부장 3
이사 1
Name: 직급, dtype: int64
연봉 평균 : 5305.0
연봉 표준편차 : 2069.6222377275885
직급 과장 대리 부장 사원 이사 All
성별
남 4 3 2 5 1 15
여 2 4 1 8 0 15
All 6 7 3 13 1 30
직급
과장 7200.000000
대리 5064.285714
부장 8466.666667
사원 3476.923077
이사 9900.000000
Name: 연봉, dtype: float64 <class 'pandas.core.series.Series'>
Index(['과장', '대리', '부장', '사원', '이사'], dtype='object', name='직급')
[7200. 5064.28571429 8466.66666667 3476.92307692 9900. ]
원형 차트 시각화