32 마리아 디비의 테이블을 파이썬과 연동해서 시각화 하기2(소상공인 데이터)
+) 리눅스를 다루는 이유
기업의 대부분 데이터는 다 리눅스 서버에 있음. 그래서 우리가 리눅스에 있는 데이터를 다루는 훈련을 해야함.
리눅스에 있는 빅데이터를 다루기 쉽도록 하기 위한 소프트웨어?
1. 리눅스 명령어 자체로 데이터 다루기
2. 마리아 디비에 데이터를 넣고 데이터 다루기(SQL)
3. 마리아 디비와 파이썬을 연동해서 파이썬에서 데이터 다루기(SQL + 판다스)
> 지금 이 순간에도 실시간으로 발생하는 데이터는 전부 database에 insert 되고 있음.
스마트폰의 앱이나 PC의 어떤 홈페이지를 통해 데이터를 발생시키는데 이 데이터는 전부 리눅스 서버의 db에 저장됨.
ex) 현업에서의 분석 프로세스
1. 고객 데이터를 리눅스 명령어를 이용해 데이터 필터링을 함.(연령별로 csv 파일 생성)
2. 연령별 데이터를 가지고 군집분석(k-means) 실행 (R 또는 파이썬)
3. 연령별 데이터를 가지고 연관분석(아프리오리 알고리즘)을 함 (R 또는 파이썬)
> 이러한 분석을 하는 이유는 새로운 서비스 가입 유도시 모든 가입자에게 연락해서 가입유도를 하는 것보다 가능성이 높은 고객들에게만 유도하는게 훨씬 효율적이기 때문
예제1. emp.csv에서 리눅스 명령어로 직업이 SALESMAN인 사원들의 모든 행을 검색하시오.
[root@localhost ~]# awk -F ',' '$3 == "SALESMAN"' emp.csv
7654,MARTIN,SALESMAN,7698,1981-09-10,1250,1400,30
7499,ALLEN,SALESMAN,7698,1981-02-11,1600,300,30
7844,TURNER,SALESMAN,7698,1981-08-21,1500,0,30
7521,WARD,SALESMAN,7698,1981-02-23,1250,500,30
예제2. 위의 결과를 salesman.csv로 저장하시오.
[root@localhost ~]# ls -l salesman.csv
-rw-r--r--. 1 root root 196 3월 18 10:10 salesman.csv
[root@localhost ~]# cat salesman.csv
7654,MARTIN,SALESMAN,7698,1981-09-10,1250,1400,30
7499,ALLEN,SALESMAN,7698,1981-02-11,1600,300,30
7844,TURNER,SALESMAN,7698,1981-08-21,1500,0,30
7521,WARD,SALESMAN,7698,1981-02-23,1250,500,30
그렇담 위 작업처럼 salesman.csv, analyst.csv, clerk.csv, manager.csv 직업별로 각각 파일을 만들어야 한다면....
[root@localhost ~]# awk -F ',' '$3 == "SALESMAN"' emp.csv >> salesman.csv
[root@localhost ~]# awk -F ',' '$3 == "ANALYST"' emp.csv >> analyst.csv
[root@localhost ~]# awk -F ',' '$3 == "CLERK"' emp.csv >> clerk.csv
[root@localhost ~]# awk -F ',' '$3 == "MANAGER"' emp.csv >> manager.csv
[root@localhost ~]# awk -F ',' '$3 == "PRESIDENT"' emp.csv >> president.csv
이렇게 하드코딩할 수 밖에 없게됨. 하지만 작업할 내용이 많다면 일일이 치는데 한계가 있음.
> 리눅스에서 for문을 돌려 각각 데이터를 추출할 수 있음.
예제3. emp.csv에서 직업을 출력하는데 중복을 제거해서 출력하시오!(awk명령어로)
[root@localhost ~]# awk -F ',' '{print $3}' emp.csv | sort |uniq
ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN
예제4. 위에서 출력되고 있는 직업을 하나씩 불러와서 for loop문으로 직업이 출력되게 쉘 스크립트를 작성하시오.
[root@localhost ~]# vi for_job.sh
vi 편집기 사용
job=`awk -F ',' '{print $3}' emp.csv | sort | uniq`
역따옴표(`) 안에 있는 리눅스 명령어의 결과가 job이라는 변수에 할당됨
for i in $job
do
echo $i
done
변수 앞에는 $를 써줘야함. for문 다음에 do와 done 사이에 실행문을 넣습니다.
저장하고 나와서 for_job.sh를 다음과 같이 실행합니다.
[root@localhost ~]# sh for_job.sh
예제4. 위의 스크립트를 이용해서 해당 직업의 사원들의 데이터만 직업을 이름으로 해서 다음과 같이 생성되게 하세요.
[root@localhost ~]# vi generate_job.sh
편집기 실행
job=`awk -F ',' '{print tolower($3)}' emp.csv | sort | uniq`
for i in $job
do
awk -F ',' -v job2=$i 'tolower($3)==job2 {print $0}' emp.csv > $i.csv
done
직업을 중복제거해서 출력하는데 소문자로 변경한 후에 job이라는 변수에 담으시오.
for문을 이용해서 변수 안에 데이터를 하나씩 불러옴. 변수 안에 있는 데이터를 가져오려면 $를 붙여서 가져와야함.
-v옵션을 썼기 때문에 job2에 $i를 담고 'tolower($3)==job2 {print $0}'에서 사용할 수 있는 것!
( 'tolower($3)==job2 {print $0}' 이 코드 안에는 $i를 넣을 수 없기 때문에 밖에서 -v옵션을 사용해 $i를 job2에 담고, job2를 명령문에 쓴 것. )
for문이 돌면서 변수 안에 담긴 데이터를 차례대로 실행함.
리다이렉션 한번만 실행하겠음.
[root@localhost ~]# sh generate_job.sh
[root@localhost ~]# ls -l *.csv
예제6. 위의 스크립트를 참고해서 emp.csv의 데이터를 불러와서 부서번호별로 다음과 같이 csv파일이 생성되게 하시오.
[root@localhost ~]# vi make_deptno.sh
deptno=`awk -F ',' '{print $8}' emp.csv | sort | uniq`
for i in $deptno
do
awk -F ',' -v deptno2=$i '$8==deptno2 {print $0}' emp.csv > ${i:0:2}.csv
ls -l ${i:0:2}.csv
done
${i:0:2} i를 앞에서부터 2자리만 잘라내라는 뜻
[root@localhost ~]# sh make_deptno.sh
-rw-r--r--. 1 root root 139 3월 18 11:21 10.csv
-rw-r--r--. 1 root root 229 3월 18 11:21 20.csv
-rw-r--r--. 1 root root 287 3월 18 11:21 30.csv
예제7. 서울시 소상공인 데이터를 리눅스 서버에 /root 밑에 올리시오(모바텀으로 올리세요)
데이터셋 : seoul.csv
예제8. 리눅스 명령어로 seoul.csv의 건수가 어떻게 되는지 확인하시오.
[root@localhost ~]# wc -l seoul.csv
316079 seoul.csv
현재 데이터에 더블 쿼테이션이 다 붙어있음.
예제9. 데이터에 있는 더블 쿼테이션 마크를 다 없앱니다.
[root@localhost ~]# cp seoul.csv s.csv #백업
[root@localhost ~]# vi s.csv
:%s/"//g
저장하고 나오면 됨(:wq!)
예제10. 서울시는 부동산이 몇개 있나요?(5번째 컬럼이 부동산인 것으로 검색해야합니다)
[root@localhost ~]# awk -F ',' '$5 == "부동산" {print $0}' s.csv | wc -l
12742
예제11. seoul.csv 파일을 리눅스의 mariadb에 테이블로 생성하시오.
putty를 열고 root로 접속하고 orcldb로 접속, 테이블 생성스크립트를 수행합니다.
[root@localhost ~]# systemctl restart mariadb
[root@localhost ~]# mysql -h 192.168.122.1 -u scott -p
create table seoul
(storecode varchar(10),
store varchar(300),
branch varchar(100),
seg1code varchar(2),
seg1name varchar(20),
seg2code varchar(20),
seg2name varchar(100),
seg3code varchar(20),
seg3name varchar(100),
bizcode varchar(20),
bizname varchar(100),
citycode varchar(30),
city varchar(30),
guncode varchar(10),
gun varchar(30),
dong1code varchar(20),
dong1 varchar(30),
dong2code varchar(20),
dong2 varchar(30),
dgibuncode varchar(20),
e1code varchar(20),
e1name
varchar(80),
e2code varchar(20),
e3code varchar(20),
address1 varchar(300),
streetcode varchar(50),
street
varchar(300),
buidingcode1 varchar(50),
buidingcode2 varchar(50),
buidingcode3 varchar(50),
building
varchar(100),
address2 varchar(300),
zipcode1 varchar(50),
zipcode2 varchar(50),
donginfo varchar(50),
floor
varchar(20),
hoinfo varchar(20),
longitude varchar(50),
latitude varchar(50) );
예제12. /root밑에 있는 seoul.csv를 seoul 테이블에 로드하시오.
MariaDB [orcl]> LOAD DATA LOCAL INFILE '/root/seoul.csv'
-> REPLACE
-> INTO TABLE orcl.seoul
-> fields TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n'
-> IGNORE 1 LINES
-> (storecode,store,branch,seg1code,seg1name,seg2code,seg2name,seg3code,seg3name,bizcode,bizname,citycode,city,guncode,gun,dong1code,dong1,dong2code,dong2,dgibuncode,e1code,e1name,e2code,e3code,address1,streetcode,street,buidingcode1,buidingcode2,buidingcode3,building,address2,zipcode1,zipcode2,donginfo,floor,hoinfo,longitude,latitude);
MariaDB [orcl]> select count(*) from seoul;
+----------+
| count(*) |
+----------+
| 316078 |
+----------+
1 row in set (0.156 sec)
로드 확인! 데이터가 잘 들어가졌음!
예제13. 5번째 컬럼인 seg1name컬럼의 데이터를 중복제거해서 출력하시오(seg1name 은 대분류명)
MariaDB [orcl]> select distinct seg1name
-> from seoul;
+----------------------+
| seg1name |
+----------------------+
| 음식 |
| 소매 |
| 학문/교육 |
| 부동산 |
| 관광/여가/오락 |
| 생활서비스 |
| 숙박 |
| 스포츠 |
+----------------------+
8 rows in set (0.261 sec)
예제14. 서울시에 부동산 업종이 몇개가 있는지 조회하시오.
MariaDB [orcl]> select count(*)
-> from seoul
-> where seg1name like '%부동산%';
+----------+
| count(*) |
+----------+
| 12748 |
+----------+
1 row in set (0.173 sec)
아까 리눅스 명령어랑 결과는 12742건으로 조회됐는데, 마리아db에서 검색하면 12748건으로 조회됨. 리눅스 명령어가 틀렸음.
그래서 sql과 판다스로 확인하는게 가장 확실한 방법입니다.
그러면 판다스에서 s.csv를 판다스 데이터 프레임으로 로드해서 확인해보겠습니다.
예제15. 리눅스의 주피터노트북을 윈도우에서 실행하고 /root 밑에 s.csv판다스 데이터프레임 seoul이라는 이름으로 생성하시오.
마리아 디비에 데이터를 넣을때는 csv파일 안에 더블쿼테이션마크가 있어도 되고 없어도 되는데 우리는 지금 더블 쿼테이션 마크를 다 지우고 s.csv로 생성했습니다. 그런데 판다스로 로드할때는 문자 양쪽에 더블/싱글 쿼테이션 마크가 있어야 합니다. 그래서 지금 아래와 같이 seoul.csv를 seoul2.csv로 복사해서 소유자를 oracle로 변경하고 /home/oracle 밑으로 복사한 것 입니다.
[root@localhost ~]# cp seoul.csv seoul2.csv
[root@localhost ~]# chown oracle:oracle seoul2.csv
[root@localhost ~]# cp seoul2.csv /home/oracle/
판다스로 데이터 불러오기
import pandas as pd
seoul = pd.read_csv("/home/oracle/seoul2.csv", encoding = 'utf8')
seoul
예제16. 판다스로 상권업종대분류명(seg1name)이 부동산인 행의 건수를 출력하시오.
seoul['상가업소번호'][seoul.상권업종대분류명 == '부동산'].count()
예제17. 업종(5번째 컬럼), 업종별 건수가 어떻게 되는지 확인하시오.
MariaDB [orcl]> select seg1name, count(*)
-> from seoul
-> group by seg1name;
+----------------------+----------+
| seg1name | count(*) |
+----------------------+----------+
| 관광/여가/오락 | 6633 |
| 부동산 | 12748 |
| 생활서비스 | 55634 |
| 소매 | 89857 |
| 숙박 | 2322 |
| 스포츠 | 1255 |
| 음식 | 126203 |
| 학문/교육 | 21426 |
+----------------------+----------+
8 rows in set (0.377 sec)
# 주피터 노트북
seoul.groupby('상권업종대분류명')['상가업소번호'].count().reset_index()
예제18. 아래의 sql을 튜닝하시오.
튜닝전 : 8 rows in set (0.377 sec)
MariaDB [orcl]> select seg1name, count(*)
-> from seoul
-> group by seg1name;
튜닝후:
8 rows in set (0.104 sec)
MariaDB [orcl]> create index seoul_index1
-> on seoul(seg1name,storecode);
MariaDB [orcl]> select seg1name, count(storecode)
-> from seoul
-> group by seg1name;
> 결합컬럼인덱스를 지정해서 빠르게 scan 할 수 있도록 함. 속도가 빨라짐!
> 단일컬럼인덱스를 지정해도 상관없음. 하지만 보통 null값이 없는 컬럼을 같이 지정해서 결합컬럼으로 지정함.
예제19. seoul_index1인덱스를 삭제하고 다시 생성하는데 seg1name 컬럼으로만 인덱스를 생성하시오.
MariaDB [orcl]> drop index seoul_index1
-> on seoul;
MariaDB [orcl]> create index seoul_index1
-> on seoul(seg1name);
MariaDB [orcl]> select seg1name, count(seg1name) from seoul group by seg1name;
+----------------------+-----------------+
| seg1name | count(seg1name) |
+----------------------+-----------------+
| 관광/여가/오락 | 6633 |
| 부동산 | 12748 |
| 생활서비스 | 55634 |
| 소매 | 89857 |
| 숙박 | 2322 |
| 스포츠 | 1255 |
| 음식 | 126203 |
| 학문/교육 | 21426 |
+----------------------+-----------------+
8 rows in set (0.086 sec)
> mysql에서는 drop index 할 때 on 테이블명도 같이 써줘야함.
> 인덱스를 하나에만 걸어줘도 속도가 빨리진 것을 확인할 수 있음.
MariaDB [orcl]> explain select seg1name, count(seg1name) from seoul group by seg1name;
>실행계획을 살펴보면 index를 타고 스캔한 것을 알 수 있음.
예제21. 아래의 SQL을 튜닝하시오.
튜닝전 :
425 rows in set (0.639 sec)
MariaDB [orcl]> select dong1, count(*)
-> from seoul
-> group by dong1;
튜닝후:
425 rows in set (0.091 sec)
MariaDB [orcl]> create index seoul_index2
-> on seoul(dong1);
MariaDB [orcl]> select dong1, count(*) from seoul group by dong1;
실행계획 살펴보면 index를 탄 것을 확인할 수 있음.
예제22. mariaDB에 있는 seoul 테이블을 파이썬과 연동해서 판다스 데이터프레임 seoul로 생성하시오.
import mysql.connector
config = {
"user": "scott",
"password": "tiger",
"host": "192.168.122.1", #local
"database": "orcl", #Database name
"port": "3306" #port는 최초 설치 시 입력한 값(기본값은 3306)
}
conn = mysql.connector.connect(**config)
# db select, insert, update, delete 작업 객체
cursor = conn.cursor()
# 실행할 select 문 구성
sql = """
select *
from seoul
"""
# cursor 객체를 이용해서 수행한다.
cursor.execute(sql)
# select 된 결과 셋 얻어오기
rows= cursor.fetchall() # tuple 이 들어있는 list
#print(rows)
####################################
import pandas as pd
colname = cursor.description
col = [i[0].lower() for i in colname]
seoul = pd.DataFrame(rows, columns = col)
seoul
예제23. 위에 연동되는 코드를 수정하는데 sql을 다음과 같이 변경하시오.
# 실행할 select 문 구성
sql = """
select seg1name, count(*) as cnt
from seoul
group by 1
order by 2 desc
"""
# cursor 객체를 이용해서 수행한다.
cursor.execute(sql)
# select 된 결과 셋 얻어오기
rows= cursor.fetchall() # tuple 이 들어있는 list
#print(rows)
####################################
import pandas as pd
colname = cursor.description
col = [i[0].lower() for i in colname]
result = pd.DataFrame(rows, columns = col)
result
연동하는 sql에서 데이터 시각화에 필요한 데이터만 가져오게끔 쿼리문을 작성했더니 훨씬 빨리 에러없이 결과가 출력되었음.
예제24. 위의 결과를 막대그래프로 시각화하시오.
result.plot(kind = 'bar', x = 'seg1name')
예제25. 위의 결과에서 한글이 그래프에 잘 출력될 수 있도록 하시오.
# 먼저 네이버 나눔 폰트를 다운로드 받습니다.
1. putty를 열고 root로 접속합니다.
2. 리눅스에서 폰트들이 저장된 위치로 이동합니다.
cd /usr/share/fonts
3.그리고 네이버 나눔 폰트를 다운로드 받습니다.
wget http://cdn.naver.com/naver/NanumFont/fontfiles/NanumFont_TTF_ALL.zip
4.그리고 NanumFont_TTF_ALL.zip 의 압축을 풉니다.
unzip NanumFont_TTF_ALL.zip -d NanumFont
5.폰트들이 있는 곳으로 이동합니다.
cd /usr/share/fonts
6.네이버 나눔 폰트를 시스템에 적용하기 위해서 폰트들을 전부 설치합니다.
fc-cache -fv
이제 한글이 깨지지 않고 불러와짐!
import matplotlib.pyplot as plt
plt.rc('font',family = 'NanumGothic')
# from matplotlib import font_manager, rc
# font_path = "/usr/share/fonts/NanumFont/NanumGothic.ttf"
# font_name = font_manager.FontProperties(fname=font_path).get_name()
# rc('font', family=font_name)
result.plot(kind = 'bar', x = 'seg1name')
plt.show()
오늘 수업했던 내용 정리!
1. 공공데이터포털에서 소상공인 데이터를 다운로드 받습니다.
2. 서울 데이터만 리눅스 서버에 올립니다.
3. 마리아 디비에 데이터를 넣기 위해 데이터 중에 더블 쿼테이션 마크를 전부 지웠습니다.
4. 마리아 디비에 seoul테이블을 생성합니다.
5. 마리아 디비에 seoul.csv를 로드합니다.
6. 우리가 원하는 데이터 검색을 빠르게 하기 위해 데이터베이스에 인덱스를 생성합니다.
7. 마리아 디비와 파이썬을 연동해서 업종별 건수를 막대그래프로 시각화했습니다.
문제192. 위의 막대그래프를 이번에는 원형그래프로 출력하시오.
result.set_index('seg1name').plot(kind = 'pie',autopct='%0.0f%%',subplots=True, figsize=(10,10))
문제193. 세종시에는 어느 지자체에 상권이 많은지 조사하기 위해서 세종시 소상공인 데이터를 마리아 디비에 테이블로 생성하시오.(테이블명 : sejong)
우선 모바텀에 테이블 올리고, 마리아 디비에서 테이블 생성 후 스크립트 불러오면 됨.
MariaDB [orcl]> create table sejong
-> (storecode varchar(10),
-> store varchar(300),
-> branch varchar(100),
-> seg1code varchar(2),
-> seg1name varchar(20),
-> seg2code varchar(20),
-> seg2name varchar(100),
-> seg3code varchar(20),
-> seg3name varchar(100),
-> bizcode varchar(20),
-> bizname varchar(100),
-> citycode varchar(30),
-> city varchar(30),
-> guncode varchar(10),
-> gun varchar(30),
-> dong1code varchar(20),
-> dong1 varchar(30),
-> dong2code varchar(20),
-> dong2 varchar(30),
-> dgibuncode varchar(20),
-> e1code varchar(20),
-> e1name
-> varchar(80),
-> e2code varchar(20),
-> e3code varchar(20),
-> address1 varchar(300),
-> streetcode varchar(50),
-> street
-> varchar(300),
-> buidingcode1 varchar(50),
-> buidingcode2 varchar(50),
-> buidingcode3 varchar(50),
-> building
-> varchar(100),
-> address2 varchar(300),
-> zipcode1 varchar(50),
-> zipcode2 varchar(50),
-> donginfo varchar(50),
-> floor
-> varchar(20),
-> hoinfo varchar(20),
-> longitude varchar(50),
-> latitude varchar(50) );
Query OK, 0 rows affected (0.045 sec)
MariaDB [orcl]> LOAD DATA LOCAL INFILE '/root/16.csv'
-> REPLACE
-> INTO TABLE orcl.sejong
-> fields TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n'
-> IGNORE 1 LINES
-> (storecode,store,branch,seg1code,seg1name,seg2code,seg2name,seg3code,seg3name,bizcode,bizname,citycode,city,guncode,gun,dong1code,dong1,dong2code,dong2,dgibuncode,e1code,e1name,e2code,e3code,address1,streetcode,street,buidingcode1,buidingcode2,buidingcode3,building,address2,zipcode1,zipcode2,donginfo,floor,hoinfo,longitude,latitude);
Query OK, 10543 rows affected (0.213 sec)
Records: 10543 Deleted: 0 Skipped: 0 Warnings: 0
MariaDB [orcl]> select count(*) from sejong;
+----------+
| count(*) |
+----------+
| 10543 |
+----------+
1 row in set (0.015 sec)
MariaDB [orcl]>
> 더블쿼테이션 없애지 않고 바로 넣어도 됨
문제194. 세종시에는 부동산 업종이 몇개가 있는지 카운트하시오.
MariaDB [orcl]> select count(*) from sejong where seg1name = '부동산';
+----------+
| count(*) |
+----------+
| 804 |
+----------+
1 row in set (0.012 sec)
문제195. 업종(seg1name)에 인덱스를 거시오. (인덱스명 : sejong_index1)
MariaDB [orcl]> create index sejong_index1
-> on sejong(seg1name);
문제196. 업종(seg1name)을 출력하고 업종(seg1name)별 건수를 출력하시오.
MariaDB [orcl]> select seg1name, count(*)
-> from sejong
-> group by seg1name;
+----------------------+----------+
| seg1name | count(*) |
+----------------------+----------+
| 관광/여가/오락 | 221 |
| 부동산 | 804 |
| 생활서비스 | 1536 |
| 소매 | 2773 |
| 숙박 | 61 |
| 스포츠 | 135 |
| 음식 | 4184 |
| 학문/교육 | 829 |
+----------------------+----------+
8 rows in set (0.004 sec)
문제197. 위의 결과를 파이썬과 연동하는 sql로 만들어서 result에 넣고 원형그래프로 시각화하시오.
import mysql.connector
config = {
"user": "scott",
"password": "tiger",
"host": "192.168.122.1", #local
"database": "orcl", #Database name
"port": "3306" #port는 최초 설치 시 입력한 값(기본값은 3306)
}
conn = mysql.connector.connect(**config)
# db select, insert, update, delete 작업 객체
cursor = conn.cursor()
# 실행할 select 문 구성
sql = """
select seg1name, count(*) as cnt
from sejong
group by seg1name
"""
# cursor 객체를 이용해서 수행한다.
cursor.execute(sql)
# select 된 결과 셋 얻어오기
rows= cursor.fetchall() # tuple 이 들어있는 list
#print(rows)
import pandas as pd
colname = cursor.description
col = [i[0].lower() for i in colname]
result = pd.DataFrame(rows, columns = col)
result
result.set_index('seg1name').plot(kind = 'pie',autopct='%0.0f%%',subplots=True, figsize=(10,10))
문제198. (오늘의 마지막문제) 세종시에는 어느 동네에 상권이 많은지 확인하시오.
1. mariaDB 파이썬 연동 코드
# 실행할 select 문 구성
sql = """
select dong1, count(*) as cnt
from sejong
group by dong1
"""
# cursor 객체를 이용해서 수행한다.
cursor.execute(sql)
# select 된 결과 셋 얻어오기
rows= cursor.fetchall() # tuple 이 들어있는 list
2. 테이블 구성
import pandas as pd
colname = cursor.description
col = [i[0].lower() for i in colname]
result = pd.DataFrame(rows, columns = col)
result
3. 막대그래프 생성
import matplotlib.pyplot as plt
plt.rc('font',family = 'NanumGothic') # 한글 불러오는 코드
result.plot(kind = 'bar', x = 'dong1', figsize = (10,10))
plt.show()
4. 원형그래프 생성
result.set_index('dong1').plot(kind = 'pie',autopct='%0.0f%%',subplots=True, figsize=(10,10))
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.show()
'Study > class note' 카테고리의 다른 글
리눅스 / 쉘스크립트2 (0) | 2022.03.22 |
---|---|
리눅스 / 프로세서 관리 명령어, 쉘 스크립트, if문 (0) | 2022.03.21 |
리눅스 / 마리아디비 파이썬 연동해서 시각화하기1(코로나 데이터) (0) | 2022.03.17 |
리눅스 / 리눅스의 마리아 디비와 파이썬 연동하기2 (0) | 2022.03.17 |
리눅스 / 마리아 디비와 파이썬 연동하기 (0) | 2022.03.16 |