728x90

https://github.com/Astrophotographer

 

제로베이스부터 개발 공부를 한 지 7개월이 지났다. 이제는 현장에서 필요로 하는 직무가 정확히 무엇인지 파악하고, 그 스킬들에 집중하여 공부하여 최대한 빨리 현장에 투입되어서 이리저리 부딪히고, 사수의 조언을 들어가면서 배우는 게 더 도움이 되리라 생각한다. 

 

카메라 다루는걸 업으로 하였고 개인적으로 하고 싶은 아이템도 영상처리 쪽이 많다 보니

영상관련 된 업을 기반으로 하는 <서버, 네트워크>백엔드 파트를 생각 중이다.

물론 가능하다면 CV 쪽도 가고 싶은데 아직 내가 CV 쪽으로는 더 많이 배워야 함을 느낀다.

 

물리학이 아니라 컴공을 전공했어야 했다 ㅠㅠ 늦었지만 이제라도 컴공학위를 따야 하나? 방통대를 알아봐야겠다

 

 

1.  CJeS Gulliver Studios

CV 쪽 안티에이징 기술을 보다가 알게 되었다. 채용 공고를 보다가 영상처리를 위한 대용량 관리 등 내가 알아두면 참 좋을게 많아 보였다. 

http://gullivervfx.com/sub06/sub01.php

 

걸리버스튜디오

영화제작 및 배급/전자상거래/컴퓨터 애니메이션 기술의 개발/제조/판매/특수시청각효과영상 등 일반 영화 및 비디오물 제작업체

gullivervfx.com

 

2. bepro (스포츠 영상 분석 및 트레킹)

 

https://bepro.notion.site/Welcome-to-Bepro-d61b332d81ac476787ddb50e5be8b37c

 

Welcome to Bepro

“WE TAKE YOU TO THE NEXT LEVEL”

bepro.notion.site

 

 

 

3. IDIS : AI 접목 CCTV

 

영상을 업으로 할 때 생각했던, 그리고 해보고 싶었던 기술들을 활용하고 있는 곳.

CV를 활용한 다양한 콘텐츠를 만든다. 진짜 배울게 많은 곳이다.

 

 

 

 

https://recruit.idis.co.kr:1007/_service/idis/apply_site/apply/recruit_default.asp

 

 

 

 

4. Tabspace

IOT (HA) 를 활용한 무인매장 원격제어 서비스 

 IOT와 CV는 찰떡이라 생각된다. 무인매장 또한 굉장한 블루오션이자 IOT, CV가 반드시 필요한 시장이라 생각된다. 

아직 채용공고를 확인하지못해서 개인적으로 살펴봐야할듯

https://www.tabspace.kr/

 

 

5. FaindersAI

4번과 비슷하게 CV + IOT를 활용한 무인매장 운영

시드를 거쳐 23년 5월 기준 시리즈A를 진행중인데

스타트업 회사 생각이라면 이곳도 좋겠다는 생각

현재 백엔드 경력3년차를 뽑고있는데 아숩...ㅠ

https://fainders.ai/

https://fainders.notion.site/AI-6d1460bb4340489292c91b2bdfc88cd1

 

728x90
728x90

나도 비전공생으로 국비교육을 받았다.

다행히도 빠른취업을 원해서 들어온게 아니라 내가 공부하고 만들고 싶었던 콘텐츠들이 있기에 무엇을 배워야하는지 쉽게 선택할 수 있었지만, 같이 수업을 들었던 친구들은 아니였다. 기피성 국비교육을 듣다보니 중간에 자는 친구들이나 중도포기하는 친구들도 꽤 있었다.

 

웹개발 교육같은 경우 20명이라면 2~3명은 아무것도 모르고 와서 2주정도 뒤에 나갈애들이였고, 3~5명 정도는 컴공과, 10~12명 비전공자(이직준비 또는 취업준비)생이였다.

요즘 컴공, 컴과 졸업하고 국비하는게 대세인듯 하더라.

 

미리 알면 좋을 내용

1) 개발자 세계는 정말 적성이 중요하다.

코딩 배워서 하고 싶은게 있어야한다 (이것으로 무슨 콘텐츠를 만들고 싶다 이런게 있으면 진짜 좋음).

나랑 안맞다고 느낀다면 빠르게 접어라. 

 

 

2) 끊임없이 공부해야한다.

배움자체를 즐겨야한다. 웹 프론트같은 경우  매년 트랜드가 바뀌고 ML, DL(AI) 쪽은 매년 논문 내용의 색이 달라진다.

요즘은 상, 하반기로 느낌이 달라지는 듯?

 


국비교육 올바른 선택방법

 

코스 선택:

개발자에는 여러가지 포지션이 있다.

 

프론트엔드(웹, 앱 화면에 보이는 부분을 코딩)

백엔드(웹, 앱 서버, 데이터베이스)

Devops(배포 및 네트워크)

데이터사이언스(모델,예측)

데이터엔지니어(모델과 예측을 위한 환경 구축) 

데이터아날리스트(분석 및 시각화)

임베디드개발자(BSP, FA, 등등 끝도 없이 가지치기 가능)

게임개발(유니티, 언리얼)
보안 등등

등등 크게 잡으면 이 정도?

 

최대한 검색을 많이해서 내가 어떤 부분과 잘 맞을지 생각해보고

https://itcreator.tistory.com/145 (언어추천)

https://boottent.sayun.studio/ (부트캠프 모음)

 

- 웹 관련 -

<프론트>

개인적으로 취업이 가장 빠른 부분은 개인적으로 프론트엔드

웹, 앱 화면 단에 어떤 효과등을 넣거나한다. 약간 에펙하는 친구들이 좋아할만함

(신입 포지션이 많고, 바뀌는 속도가 빠르다보니 신입한테 유리, 실력대비효율이 크지않다)

 

<백>

개발원리나 작동원리가 궁금하다면 백엔드

개발기본중에 기본 보통 백엔드로 시작해서 프론트를 가든 데브옵스를 가든 AI 쪽을 가던가 함

작정하고 개발자가 되고싶다하면 백엔드 추천  사실 프론트도 백을하고 백도 프론트를 하게된다

 

<데브옵스>

배포 운영을 하는 부서인데 개인적으로 신입에게는 잘 맞지않는 부서이다 실제로 국비과정에 Devops 과정을 찾아보기 힘들다

백엔드를 하시다가 주로 데브옵스를 한다고 하시던데 혹시나 Devops를 하고싶다고 한다면 백엔드부터 하는거 추천

 

-AI- 

AI 국비교육의 경우 데싸, 엔지니어, 분석가 과정이 다 들어가 있다. 보통 NLP(자연어처리)로 갈것인지 CV(컴퓨터비전) 으로 갈것인지 구분 된다.

국비로 AI한다면 거의 무조건 데이터 엔지니어는게 맞는듯? 
데이터 싸이언스는 대부분 연구직이라 석박만 뽑고 석박할꺼면 그시간에 국비말고 석박코스 밟는게 맞을듯.

 

 

 

1. 웹 + 네트워크 + 빅데이터(AI) 올인원 코스는 가능하다면 피해라

내가 어떤 분야랑 맞는지 잘 모르겠다. 취업이 급하지 않고, 어떤것들이 어떻게 사용되는지 전체적인 흐름을 알고 싶다면 괜찮지만

그렇지않고 내가 이미 하나의 분야를 생각하고 빠르게 취업하고 싶다면 반드시 피해라 (웹 + 네트워크 이 정도만 배워두면 충분)

진짜 결국 남는거 하나없이 전부 찍먹만 한 자신을 발견하게 될 것이다

 

2. 국비교육전 강사 평점을 반드시 확인하라

https://bootcamp-analyzer.binarycraft.studio/ 국비학생들이 만든 국비강사평점

학원보다 강사 퀄리티가 중요하다. 간혹 일반 it 학원에 찐 전문 강사님들이 오시기도 하심!

강사평가 자체가 주관적이여서 좋고 나쁜 강사평가 자체가 의미가 없을 순 있겠지만

나는 개인적으로 감정을 케어하시는 분 보다는 설명력을 이해하기 쉽게 풀어주시는 분을 좋아한다.

한번은 다른 강사님의 설명에 3일간 이해를 못하다가 그냥 암기를 했었는데 5개월 뒤 유태영 강사님 수업을 듣고 10분만에 바로 이해했다. 진짜 삽질을 해서 직접 배우신거구나를 느낄 수 있었다. 진짜 강의만 봐도 느껴지는게 이 강사가 그냥 복붙만한 SI 개발자출신이였는지 아니면 창업까지 하시면서 개발자체를 즐기시는 개발자출신이셨는지 바로 느껴지고 강의 퀄리티가 달라짐을 느꼈다.

 

3. 여러강사가 있어야 좋다

한명의 강사가 파이썬, 자바, 데이터를 다 설명하는 경우가 있다.

국비교육이다보니 이것저것 기업들이 원하는거 다 때려박는 경우가 있는데 이것보다 문제인게

한명의 강사가 이걸 다 설명한다는게 문제이다. 제대로 이해도 못하고 수업준비를 위해 그냥 암기식으로 설명하는 경우가 허다하다.

각각 분야에 맞는 강사가 있는지 반드시 확인해라.

 

4. 주관사에 대한 이해

나 같은 경우 이직을 위해 1년 반동안 개발공부를 하겠다고 계획을 잡았고 6개월 백엔드/ 6개월 네트워크 및 AI / 6개월 AI(CV)과정을 을 준비했고, 어떤 과정을 들을지 살펴보다 재미있는걸 알아냈다.

교육처에 따라 지원부서가 달랐고 고용노동청 뿐만아니라 과기정통부에서도 국비교육을 한다는것을 알게되었다.

 

고용노동부주관 hrd KDT 수업을 듣게된다면 내일배움카드의 500만원을 한번에 소진함 -> 다른 국비교육 못들음

고용노동부주관 hrd 일반국비교육(6개월)을 듣게된다면 내일배움카드의 300만원을 소진하여 200만원이 남음 -> 이후에 kdt 이수가능

(kdt 같은경우 내일배움카드에 1원이라도 있으면 수강가능 -> 단타 정처기 과정, 자격증 과정 다 신청해버렸다가 kdt 들어도 됨  * 5년마다 5백만원 다시 재충전됨)

과기정통부주관 국비교육을 듣게된다면 내일배움카드 자체가 필요가 없음 -> hrd든 뭐든 선택가능 

https://www.cccr-edu.or.kr/main/page.jsp?code=swcamp (과기 정통부 국비교육)

뿐만 아니라 42서울은 고용노동청, 과기정통부와 별개이므로 이것 또한 듣고 국비교육도 가능 or 국비교육이후 지원도 가능

 

 

4-1. 지원금에 관해

정리를 하자면 주관부서에는 42서울처럼 개별운영기관 , 고용노동부, 과기정통부 3가지 주관부서가 있는데

일반적으로 국비교육(고용노동부)은 최대 약 80만원 정도의 지원금을 함께 수령가능하다

우선 고용노동부 국비 -> 50(국취제 1유형으로 이름 바뀌었음) + 30 (노동부 훈련지원금)으로 보통 구성되지만,

과기정통부 국비 -> 50(국취제) + 30(과기부 훈련지원금)에서 두개가 중복이 안된다. 국취제를 미리받던 후에 받던 해야함 중간에 과기정통부 국비가 끼면 국취제 중도소멸

개별운영도 (42서울/싸피)의 경우 운영사에서 100 (이건도 국취제와 동시에 안되니(60만원 소득발생되면 안됨) 미리받던 후에 받던 해야함 중간 42서울이 끼면 국취제 중도소멸

개별운영사 + 노동부 국비인경우(싸피 kdt인 경우) : 운영사100 + 30(노동부 훈련지원금) / 이 경우는 kdt로 내일배움카드 사용해버림

 

 

예시   A 42서울100 -> B 일반 고노부국비 30 (+국취제1유형시 50) -> C kdt 30 (+국취제1유형시 50) -> D 과기부국비 30 이런식으로 운영도 가능 ( 42서울이나 과기부국비는 어느 자리에 들어가도되지만 국취제 받는 중간에 들어가면 안됨) 

 

아무리 생각해봐도 레알 짜증나서 이거관련 민원도 넣었었는데 역시 뭐가 이상한지도 문제인지도 모르더라

참고로 국취제는 지원주의라 단위기간별 수당신청을 안하면 지원금이 소멸됨(공무원들아 일해라)

 

 

   

 

 

 

728x90

'글적글적' 카테고리의 다른 글

아이폰 VS 갤럭시  (0) 2024.02.21
[전세보증보험] 주소가 안뜬다면?  (0) 2023.04.27
728x90

https://www.youtube.com/watch?v=L7-UFtcFlDk&list=PLA9FEbcHdUCa0oeAhTyxkb2Rgfkw11Pte&index=20 

 

한국 영화판에 벌써 AI바람이 불기 시작했다.

 

몇 년 전만 하더라도 분장을 했을 텐데, 이제 단가가 이게 더 저렴해졌다.

기술로 인한 영화판에 산업이 바뀌는게 보인다.

 

영상편집에

자막, 컷편집, 색보정에 이어서 분장까지 AI 기술로 대체되는 중.

 

 

http://gullivervfx.com/sub06/sub01.php

 

 

요즘 스튜디오에서도 서버, 네트워크를 필요로 하는게 정말 좋아보인다!!

 

 

728x90
728x90

개발자들에게 검색은 생명과도 같은데 그 검색을 ChatGPT가 패러다임을 바꿔버렸다.

요즘 구글 검색 전에 chatGPT에게 먼저 물어보는데 나름 답변이 마음에 든다.

그러다 이번에 VScode extension이 생겼다길래 한번 알아보기로 했다.

 

 

 

1. VScode 왼쪽 상단바 > 확장 > "ChatGPT" 검색

 

검색을 해도 안뜬다면 VScode 버전을 확인해주세요!

https://marketplace.visualstudio.com/items?itemName=gencay.vscode-chatgpt

 

 

2.  API 받기

설치가 되고 처음 여기를 들어오면 api를 달라고 한다.

 api 받기 버튼을 누르면 https://openai.com/api/  로 이동하고 로그인 후 api를 받을 수 있다.  

 

3. 활용해보기

파이썬 코드 print()를 자바 코드로 바꿔달라고 했는데

바로 튀어나온다!!

VScode에서 ChatGPT로 바로 코드변환이라니...

728x90

'AI' 카테고리의 다른 글

[AI] AI 컨퍼런스 링크모음  (0) 2023.04.06
728x90

Python Jupyternotebook으로 코딩하다보면 http://localhost:8889/tree 에서 작업하는걸 볼 수 있다.

 

 

 

 

그러다 문뜩 도커에 분명 쥬피터 이미지가 있을것 같은데? 했는데 역시 있었다!!!

다시 말하자면 전세계 어디든 인터넷만 된다면 나만의 코딩 공간을 확보할 수 있다는 것이다.

(물론 깃허브로 가능함) ->  아이패드에서 깃허브 코드 관리하는 방법도 다음에 알아보겠음

 

1.  도커 설치 : 시놀로지 패키지센터 > 도커설치 

2.  이미지 검색  : 검색창 > jupyer 검색

가장 위의 datascience-notebook 다운 

 

 

 

 

 

3. 컨테이너 설정

1. 이미지 더블 클릭하고 "고급 설정" 선택

 

2. 나스의 적당한 폴더를 만들고 마운트 경로 "/var/nas/jupyer" 입력

 

3. 로컬포트 자동에서 ->  "8888"로 변경" 하고 다음버튼 

4.  외부 엑세스 8888 생성

제어판 > 외부엑세스 > 라우터 구성 > 사용자 지정 > 라우터 포트

 

 

 

5. 이미지 토큰값 가져오기

 

1. 도커 > 컨테이너 > 해당 이미지 더블클릭

 

2.  로그 > 검색창에 "token" 검색 > token 값 복사

 

 

 http://127.0.0.1:8888/lab?token="토큰값" 라고 보이는게 토큰 값임 

 

 

 

 

6.  나스주소:8888 접속 

토큰 값 넣고 패스워드 만들면 나만의 코딩공간이 생김!!

 

설정한 비밀번호로

다른 컴퓨터에서 나의 나스서버로 접속가능!!

 

시각화를 하기엔 무리이고 그냥 단순 코드 작성이나 마크다운 내용 적기용

이럴땐 컴파일언어보다 인터프리터언어가 좋아보이네!!

 

728x90
728x90

협업 과정에서 서로의 푸시 내역과 알림을 받을 수 없을까? 하다가 알게 된 꿀팁

 

전체 순서

  1.  Slack에서 Github App 설치 
  2.  Slack <- > Github 연동
  3. 원하시는 Channel 에서 알림 설정
  4. Github > Repository 연동
  5. 기타 명령어

 

 

1. 슬랙에서 깃허브 앱 설치

1.  Apps > Add apps  / or 슬랙 상단 검색창에서 app 검색 

 

 

2. "github" 입력 > Github Install

 

2.  슬랙 > 깃 연동

1. 설치가 되었다면 새로운 창으로 redirect 되어서 이창으로 오게 됨 > Add to Slack

 

이제 슬렉에서 깃허브 연동이 1차 완료 되었습니다.

이제는 깃허브로 가서 슬랙과 2차 연동을 진행하여야 합니다.

 

2. 슬랙으로 돌아와서 우측 사이드바 Apps > Github> Connect Github account

 

3. Github에서 슬랙과 연동을 진행합니다.  Connect Github account >

 

 

 

 

 

새로운 창으로 Redirect > Authorize Slack 

 



 

여기까지 됐다면, 슬랙에서 깃허브 앱 설치 완료 및 슬랙 <->깃 연동이 되었습니다.

 

3. 원하는 Channel에서 알림 설정

1. Apps에서도 알림을 받을 수 있지만, 따로 채널을 파서 받도록 하겠습니다. (app-github 생성)

 

2. 사이드 바의 app-github > 메인 화면의 채널 상단 바

 

3. Integrations(통합) >  Add Apps > "Github" 추가 

 

 

채널에 깃허브를 추가가 완료가 되었습니다.

 

 

 

4. Github > Repository 연동

 

 

1. 다시 슬랙으로 돌아와서 알림을 받고자 하는 app-github로 돌아오겠습니다.

/github subscribe "조직or 계정"/ "레포지토리"

를 입력하시면 되는데

 

아직 레포지토리 설정이 되지 않았습니다. 

 

마지만 단계로 어떤 레포지토리 선택만 하시면 됩니다.

2. install Github App > 레포지토리 선택  (All 하시면 모든 레포지토리에 대해 알림이 옵니다)

 

 

3. 다시 한번 하시면 정상 작동됩니다.

단 아직  main(or master)에 대한 issues, pulls, commits, 등등 과 같은 기능에만 알려줍니다.

5. 기타 명령어

# 알림을 받습니다.
/github subscribe owner/repo

# 알림을 해지합니다.
/github unsubscribe owner/repo

# 알림 리스트를 확인합니다.
/github subscribe list

# main(or master) 브랜치 뿐아니라 모든 브랜치의 알림을 받겠다
/github subscribe owner/repository branches commits:all reviews comments


# 채널에 연결할 깃허브 아이디
/github signin

# 이슈생성
/github open owner/repo

# 이슈닫기
/github close [issue link]

# 이 모든 명령어를 한번에 보는 명령어
/github help
 
728x90
728x90

Smartthings 사용하다가 더 뛰어난 안정성과 장비들의 사용량과 데이터 로그들을 수집하고 인터페이스를 커스터마이징 해보고자 HA를 설치하려는데

도커를 쓰자니 DSM 7버전에는 제한이 많다고 하여 NAS에서 가상환경으로 OS구동하면 되지않을까 알아보다가 찾게 되었다!!

 

데이터 로그 모아서 시각화하면 재미있을듯? 

계절별 전기사용량, 시간대별 등등

 

1. VMM 설치 및 설정

저장소 관리자 > 볼륨 > 파일시스템:Btrfs 인지 확인

(벌써 65%나 썻네 80프로되면 슬슬 바꿀준비해야할듯)

 

 

 

패키지 센터 > vir 입력 > Virtual Machine Manage (VMM) 설치

 

 

 

시작 >

 

 

호스트 설정 확인 따로 설정할거 없음.   다음 >

 

 

네트워크 활성 화 시킴.  따로 설정할 거 없음.   다음 >

 

 

VMM으로 사용할 볼륨 선택. 다음 >

 

 

 

 

2. VM용 HA파일 다운받기  

https://www.home-assistant.io/installation/alternative

 

 

 

3번째의 .ova 파일 다운 받기
 
 

 

 

 

 

다시 나스 DSM으로 > VMM 좌측 메뉴 >  가상 컴퓨터 > 생성 옆 화살표 > 가져오기 

 

 

 

 

 

다운받았던 ova파일 선택

 

 

 

 

 

 

 

필자는 램을 20기가로 설치한 상태 4기가는 좀 빡빡해보여 넉넉하게 8기가로 잡아둠

 

 

생성단계에서는 바꿀 수 있지만, 가져오기에서는 크기조절 불가능함

 

 

자동으로 잡을꺼 다음

 

 

 

디폴트로 레거시로 잡혀있을텐데 UEFI로 바꿔주셔야 부팅이 됩니다.

 

 

전원 관리 권한 부분, 딱히 체크안해도 됨

 

 

 

생성 후 가상 컴퓨터 켜기 체크 후 다음

 

 

 

 

시간이 조금 걸림.

기본포트는 8123

 

 

 

 

172.30.1.22:8123 입력하면 이렇게 나와야 정상

728x90
728x90

 

Seaborn은 Matplotlib의 기능과 스타일을 확장한 파이썬 시각화 도구의 고급버전이지만 쉽다.

# import library
import seaborn as sns

# 타이타닉 데이터셋 로딩
titan_df = sns.load_dataset('titanic')

 

회귀직선이 있는 산점도

import matplotlib.pyplot as plt
import seaborn as sns

# 스타일을 지정 - darkgrid
sns.set_style('darkgrid')
# 그래프 객체 생성 - 한 out에 그래프를 살펴보도록
fig = plt.figure(figsize=(15,5)) # 15: 가로길이 // 5: 세로길이
ax1 = fig.add_subplot(1,2,1)  # 1 x 2 사이즈에서 1번째 (왼쪽에 위치함)
ax2 = fig.add_subplot(1,2,2)  # 1 x 2 사이즈에서 2번째 (오른쪽에 위치함)

# 그래프 그리기 - 선형회귀선 표시 (fit_reg = True)
sns.regplot(x='age', y='fare',
           data=titan_df,
           ax=ax1)


# 그래프 그리기 - 선형회귀선 미표시 (fit_reg = false)
sns.regplot(x='age', y='fare',
           data=titan_df,
           ax=ax2,
           fit_reg=False)

plt.show()

 

히스토그램 및 밀도함수

 

# 그래프 객체 생성 - 한 out에 그래프를 살펴보도록
fig = plt.figure(figsize=(15,5)) # 15,5 // 16,8
ax1 = fig.add_subplot(1,3,1)
ax2 = fig.add_subplot(1,3,2)
ax3 = fig.add_subplot(1,3,3)

# 기본값 
sns.distplot(titan_df.fare, ax=ax1)

# hist = False
sns.distplot(titan_df.fare, hist=False, ax=ax2)

# kde = False
sns.distplot(titan_df.fare, kde=False, ax=ax3) # Kernel Density 

# 차트 제목 표시
ax1.set_title('titan fare-hist/kde')
ax2.set_title('titan fare-hist')
ax3.set_title('titan fare-kde')

plt.show()

 

 

히트맵(Heat-map)

# 테이블 생성
table = titan_df.pivot_table(index=['sex'], columns=['class'], aggfunc='size')

# 히트맵 그리기
sns.heatmap(table,
           annot=True,
           fmt='d',
           linewidth=1) # heat-map을 쓰실때 cmap - color mapping :: heatmap_cmap의 종류

박스플롯 / 바이올린 플롯

import matplotlib.pyplot as plt
import seaborn as sns

# 데이터 로드
titan_df = sns.load_dataset('titanic')

# set_style theme
sns.set_style('whitegrid')

# 그래프 객체 생성
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)

# 박스플롯 - 기본값
sns.boxplot(x='alive', y='age', data=titan_df, ax=ax1).set(title='BOXPLOT')
      # .set(title='BOXPLOT') 타이틀 넣어주기 or 객체.set_title("타이틀")

# 박스플롯 - hue 변수 추가 
sns.boxplot(x='alive', y='age', hue='sex', data=titan_df, ax=ax2).set(title='BOXPLOT + HUE')

# 바이올린 플롯 - 기본값
sns.violinplot(x='alive', y='age', data=titan_df, ax=ax3).set(title='VIOLINPLOT')

# 바이올린 플롯 - hue 변수 추가 
sns.violinplot(x='alive', y='age', hue='sex', data=titan_df, ax=ax4).set(title='VIOLINPLOT+HUE')

 

 

막대 그래프

# 그래프 객체 생성
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,3,1)
ax2 = fig.add_subplot(1,3,2)
ax3 = fig.add_subplot(1,3,3)

# x축, y축에 변수 할당
sns.barplot(x='sex', y='survived', data=titan_df, ax=ax1)

# x축, y축에 변수 할당 후, hue 옵션 추가
sns.barplot(x='sex', y='survived', hue='class', data=titan_df, ax=ax2)

# x축, y축에 변수 할당 후, hue 옵션 추가 후 누적 출력
sns.barplot(x='sex', y='survived', hue='class', dodge=False, data=titan_df, ax=ax3)

# 차트 제목 표시
ax1.set_title('titan survived - sex')
ax2.set_title('titan survived - sex/class')
ax3.set_title('titan survived - sex/class(stacked)')

plt.show()

 

 

 

범주형 데이터의 산점도

import matplotlib.pyplot as plt
import seaborn as sns

# titan
titan_df = sns.load_dataset('titanic')

# set style theme
sns.set_style('whitegrid')

# 그래프 객체 생성
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)

# 이산형 변수의 분포 - 데이터 분산 고려를 안한다면(중복 표시 O)
sns.stripplot(x='class',
             y='age',
             data=titan_df,
             ax=ax1)

# 이산형 변수의 분포 - 데이터 분산 고려를 한다면(중복 표시 X)
sns.swarmplot(x='class',
             y='age',
             data=titan_df,
             ax=ax2)

# 차트 제목 표시
# ax1.set_title('Strip Plot')
# ax2.set_title('Swarm Plot')

plt.show()

728x90

'AI > [Visualization]' 카테고리의 다른 글

[Matplotlib] Pie그래프  (0) 2023.02.13
[Matplotlib] 막대바  (0) 2023.02.13
[Matplotlib] 산점도 찍기  (0) 2023.02.13
[Matplotlib] 시각화 첫 단계  (0) 2023.02.07
728x90
# 한국어 폰트 적용

import matplotlib
# matplotlib.rcParams['font.family'] = 'Malgun Gothic' # 윈도우즈의 '맑은 고딕'설정
matplotlib.rcParams['font.family'] = 'AppleGothic'    # 맥북 '애플 고딕'설정

matplotlib.rcParams['axes.unicode_minus'] = False

 

# 도형 1
fruit = ['사과','바나나','딸기','오렌지','포도']
result = [7,6,3,2,2]
import matplotlib.pyplot as plt
plt.pie(result)
plt.show()

# 도형 2
# 생성한 원이 타원 -> 원형으로 변환
plt.figure(figsize=(5,5))
plt.pie(result, labels = fruit, autopct = '%.1f%%')
plt.show()

도형 1
도형 2

 

 

# 시계방향순 데이터 정렬

plt.figure(figsize=(5,5))
plt.pie(result, labels = fruit, autopct = '%.1f%%', startangle=90, counterclock=False )  

# startangle=90 x축 기준 90도 에서 시작 (생략시 0도)
# autopct 소수점 보여줄꺼
# counterclock=False  시계방향

plt.show()

 

explode_value = (0.1, 0,0,0,0)   # 1번째 요소 0.1 만큼 파이에서 나오게

# 시계방향 순으로 데이터 pie_chart를 생성
plt.figure(figsize=(5,5))
plt.pie(result, labels = fruit, autopct = '%.1f%%', startangle =90, counterclock=False, explode=explode_value, shadow=True)

# img 저장하기
plt.savefig('./save_test0.png')
plt.show()


# 사진의 해상도 높이기 dpi(dot per inch)
import matplotlib as mpl
mpl.rcParams['figure.figsize']

# 해상도 보기 dpi를 찍어보기 
mpl.rcParams['figure.dpi']

 

 

 

 

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 5)
x
y1 = x
y2 = x+1
y3 = x+2
y4 = x+3

 

<y= x 꼴 그래프 만들어보기>

plt.plot(x,y1, x,y2, x,y3, x,y4)

plt.grid()
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Saving a figure')

# 위의 이미지 저장 
plt.savefig('./save_test10', dpi=1000)

728x90

'AI > [Visualization]' 카테고리의 다른 글

[Seaborn] Seaborn 그래프 형태  (0) 2023.02.13
[Matplotlib] 막대바  (0) 2023.02.13
[Matplotlib] 산점도 찍기  (0) 2023.02.13
[Matplotlib] 시각화 첫 단계  (0) 2023.02.07
728x90

 

<2가지 비교사항을 막대바로 정렬해보기>

# 한국어 폰트 적용

import matplotlib
# matplotlib.rcParams['font.family'] = 'Malgun Gothic' # 윈도우즈의 '맑은 고딕'설정
matplotlib.rcParams['font.family'] = 'AppleGothic'    # 맥북 '애플 고딕'설정

matplotlib.rcParams['axes.unicode_minus'] = False

 

<Before, After 설정>

members_id= ['m_01','m_02','m_03','m_04']
before_wo = [27,35,40,33]
after_wo = [30,38,42,37]

 

# plt.bar

# 세로막대기
import matplotlib.pyplot as plt
import numpy as np

n_data = len(members_id) # 4명
index_1 = np.arange(n_data) # Numpy 배열 (0,1,2,3)

plt.bar(index_1, before_wo, tick_label=members_id) # bar(x,y)에서 x=index, y= before_wo
plt.title('Before 세로막대기')
plt.show()

 

 

 

# 가로 막대 그래프를 생성
colors =['r','g','b','m']
plt.barh(index_1,after_wo, color=colors, tick_label = members_id)  # barh <- h만 넣어주면 됨
plt.title('After 세로막대기')
plt.show()

 

<2가지 세로막대기 생성으로 비교해보기>

# 하나의 창에서 두 개의 그래프를 그리자.
barwidth = 0.4
plt.bar(index_1,before_wo, color='c', align='edge', width=barwidth, label='before')
plt.bar(index_1+barwidth,after_wo, color='m', align='edge', width=barwidth, label='after')
plt.legend() # 범례
plt.xlabel('회원 ID')
plt.ylabel('근육량')
plt.title('운동 전후의 근육변화량 비교')
plt.show()

 

728x90

'AI > [Visualization]' 카테고리의 다른 글

[Seaborn] Seaborn 그래프 형태  (0) 2023.02.13
[Matplotlib] Pie그래프  (0) 2023.02.13
[Matplotlib] 산점도 찍기  (0) 2023.02.13
[Matplotlib] 시각화 첫 단계  (0) 2023.02.07
728x90
# 한국어 폰트 적용

import matplotlib
# matplotlib.rcParams['font.family'] = 'Malgun Gothic' # 윈도우즈의 '맑은 고딕'설정
matplotlib.rcParams['font.family'] = 'AppleGothic'    # 맥북 '애플 고딕'설정

matplotlib.rcParams['axes.unicode_minus'] = False

 

 

 

import matplotlib.pyplot as plt
import numpy as np
height = [165,177,160,180,185,155,172] # 키 데이터
weight = [62,67,55,74,90,43,64] # 몸무게 데이터
plt.scatter(height, weight)

plt.xlabel('Height(cm)')
plt.ylabel('Weight(kg)')
plt.title('Height & Weight')
plt.grid()  # 그리드

plt.scatter(height, weight, s=500, c='r') # s: 마커크기, c: 색

plt.show()

 

 

# 마커 크기를 변경하는 방법

plt.scatter(height, weight, s=500, c='r') # s: 마커 크기, c: 색깔
plt.show()

 

 

 

 

 

# 데이터마다 마커의 크기와 컬러를 다르게 지정

size = 100* np.arange(1, 8)
colors = ['r', 'g', 'b', 'c', 'm', 'k','y'] 
plt.scatter(height, weight, s=size, c=colors)
height = [165,177,160,180,185,155,172] # 키 데이터
weight = [62,67,55,74,90,43,64] # 몸무게 데이터       # 165, 62가 1번째 Red -> 177, 67 Green 순서대로
plt.show()

 

 

 

 

https://hyunmin1906.tistory.com/30

 

import numpy as np

city = ['서울','인천','대전','대구','울산','부산','광주']

# 위도(latitude)와 경도(longitude)
lat = [37.56, 37.45, 36.35, 35.87, 35.53, 35.18, 35.16]
lon = [126.97, 126.70, 127.38, 128.60, 129.31, 129.07, 126.85]

# 인구밀도
pop_den = [16154, 2751, 2839, 2790, 1099, 4454, 2995]

size = np.array(pop_den) * 0.2 # 마커의 크기 지정
colors = ['r','g','b','c','m','k','y'] # 마커의 컬러 지정

plt.scatter(lon, lat, s= size, alpha=0.5)
plt.xlabel('경도')
plt.ylabel('위도')
plt.title('지역별 인구밀도')

for x,y, city_name in zip(lon, lat,city):
    plt.text(x,y, city_name) # 경도, 위도에 따른 도시이름 mapping
    
    
plt.show()

728x90

'AI > [Visualization]' 카테고리의 다른 글

[Seaborn] Seaborn 그래프 형태  (0) 2023.02.13
[Matplotlib] Pie그래프  (0) 2023.02.13
[Matplotlib] 막대바  (0) 2023.02.13
[Matplotlib] 시각화 첫 단계  (0) 2023.02.07
728x90

휴대폰으로 스캔 다 되고, 본인 인증까지 다 되는데 왜 굳이

시간을 들여가면서 신분증 들고 복지센터 가서 팩스 민원을 넣어야 하나? 

 

예상 답변 : 서류를 빠르게 처리하기 위해서 A4형식의 종이가 필요하다

 

해결책 : 1. 디지털로온 서류를 자동프린트 해주는 기능 넣으면 끝 /

             2. 서류철 시대를 끝내자. 디지털 보관이 훨씬 안전하고 효율적이다.(물론 서버2중화 필요)

 

예상 답변 : 아직 팩스를 사용하시는 분이 많고 새로운 서비스를 도입하기엔 돈이 많이 들어간다

           1. 팩스를 없애자는 말이아니다. 하나의 옵션을 넣자는 거다.

           2. 클라우드서비스가 비싸다는 소리에는 전혀 이해할 수 없다.

 

예상답변 : 보안에 문제가 있다

           1. 신분증들고 복지센터가서 팩스 민원을 넣는게, 그 신분증으로 다른 채널을 통해서 보내는 거 보다 어떤점에서 보안상으로 안전한                건지 전혀 이해가 되지않음. 돈 문제가 걸린거라면 절차가 까다로워야 하는것에 대해선 이해가능

 

           2. 모바일 신분증을 사용하면 되지않는가? 

 

예상답변 : 작성 중

 

 

 

 

 

 

 

728x90

'글적글적 > 바꿔야할부분' 카테고리의 다른 글

저출산대책  (0) 2024.06.07
SI개발자 때문에 빡치는 경우  (1) 2022.11.23
728x90

교차 검증이 무엇인가요?

교차검증이란 모델 학습 시 데이터를 훈련용과 검증용으로 교차로 선택하는 방법

 

이전에 150개 중 120개만 데이터 훈련용, 30개를 검증용으로 사용했다면 단 1번만 훈련이 된다.

 

 

이를 보안하기 위하여 학습용 데이터 셋을 분할시켜 정확도를 올림.

 

00

예시로 150개의 자료가 있다면 대략 5등분 하여(유효한 수의 데이터셋을 유지한 채) 4 x Train(초록색)을 이용해서 학습을 시킨다음 1 x 검증용(파란색) 데이터로 정확도를 측정을 총 5번 반복해서 진행하는 과정이다.

 

 

교차 검증 왜 하나요?

 

장점 

  • 특정 데이터셋에 대한 과적합 방지
  • 더욱 일반화된 모델 생성 가능
  • 데이터셋 규모가 적을 시 과소적합 방지

 

단점

  • 학습 및 검증에 필요한 시간이 증가

 

코드를 통하여서 알아보자.

 

1. 주요 라이브러리 임포트

# 필수 라이브러리 호출


from sklearn.datasets import load_iris   # 품종 데이터셋
from sklearn.tree import DecisionTreeClassifier   # 의사결정나무 알고리즘
from sklearn.model_selection import KFold    # 교차검증 자료 나누기
from sklearn.metrics import accuracy_score as acc_sc   # 평가지표
from sklearn.model_selection import train_test_split   # 훈련, 검증용 자료 나누기

import numpy as np
import pandas as pd

2. 데이터 불러오기

# 데이터 재정의
iris = load_iris()
features = iris.data # X값
label = iris.target # y값
dt_clf = DecisionTreeClassifier(random_state=156)

# kfold에서 k= 5로 놓자. (5등분한다)
kfold = KFold(n_splits=5)


print('데이터 셋의 크기:', features.shape[0])

# 데이터 셋의 크기: 150

 

 

 

3. 학습 수행 

n_iter = 0
cv_accuracy = []  # CV : cross validation
for train_index, val_index in kfold.split(label):
    # Kfold.split()으로 반환된 인덱스를 통해 학습용, 검증용 데이터 정의
    X_val, X_train = features[val_index], features[train_index]
    y_val, y_train = label[val_index], label[train_index]
    # 각 CV별 학습 및 예측
    dt_clf.fit(X_train,y_train) # 학습
    pred = dt_clf.predict(X_val) # 예측
    # 정확도 지표 계산
    accuracy = np.round(acc_sc(y_val, pred),3)
    train_size = X_train.shape[0]
    val_size = X_val.shape[0]
    n_iter += 1
    print(f'\n #{n_iter} CV 정확도:{accuracy}, 학습데이터 크기:{train_size}, 검증데이터 크기 : {val_size}')
    print(f'#{n_iter} 검증 데이터셋 인덱스 :{val_index}')
    cv_accuracy.append(accuracy)
    
# 개별 iteration 별 정확도 평균내기
print(f'\n ## 평균 CV정확도 :{np.mean(cv_accuracy)}')

<정확표 값>

 

 #1 CV 정확도:1.0, 학습데이터 크기:120, 검증데이터 크기 : 30
#1 검증 데이터셋 인덱스 :[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 24 25 26 27 28 29]

 #2 CV 정확도:0.967, 학습데이터 크기:120, 검증데이터 크기 : 30
#2 검증 데이터셋 인덱스 :[30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
 54 55 56 57 58 59]

 #3 CV 정확도:0.867, 학습데이터 크기:120, 검증데이터 크기 : 30
#3 검증 데이터셋 인덱스 :[60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
 84 85 86 87 88 89]

 #4 CV 정확도:0.933, 학습데이터 크기:120, 검증데이터 크기 : 30
#4 검증 데이터셋 인덱스 :[ 90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107
 108 109 110 111 112 113 114 115 116 117 118 119]

 #5 CV 정확도:0.733, 학습데이터 크기:120, 검증데이터 크기 : 30
#5 검증 데이터셋 인덱스 :[120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
 138 139 140 141 142 143 144 145 146 147 148 149]

 ## 평균 CV정확도 :0.9

 

 

cv_accuracy

# [1.0, 0.967, 0.867, 0.933, 0.733]

 

 

728x90

'AI > [ML]' 카테고리의 다른 글

[ML] 머신러닝 분류  (0) 2023.03.30
[ML] Scikit-learn 을 활용한 붓꽃 품종 예측하기  (0) 2023.02.08
728x90

Scikit-learn 을 활용한 붓꽃 품종 예측하기

 

 

sepal length, sepal , petal length, petal width를 통해서 label (품종)을 예측해보자

쉽게 말해서:  4개의 꽃의 특성을 구분한 150개의 자료가 있다.

특징1, 특징2....특징4(독립변수)와 거기에 맞는 품종이 표시된 120개의 데이터(특징 + 품종)를 이용하여 학습을 시킨 다음에 

나머지 30개의 특징만으로 그 특징에 맞는 품종을 예측을 하려고 한다.

 

 

 

 

 

어렵게 말하면 4개의 독립변수(특징)와 1개의 종속변수(품종)를 가지는 150개의 데이터를 가지고

120개는 훈련용 (4개의 독립변수 + 1개 종속변수) 

30개는 (4개의 독립변수) 검증용으로  1개의 종속변수 예측하기 :

 

 

어렵게 말하면 4개의 독립변수와 1개의 종속변수를 가지는 150개의 데이터를 가지고 1개의 종속변수 예측하기 :

 

scikit-learn 

# conda 가상환경시
#!conda install scikit-learn

!pip install scikit-learn

 

import sklearn 
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

print(sklearn.__version__) # 사이킷런 버전확인

 

#붓꽃 데이터 세트를 로딩
iris=load_iris()

#iris.data는 Iris 데이터 세트에서 피처(feature)만으로 된 데이터를 numpy로 가지고 있음.
iris_data=iris.data # x값 들

#iris.target은 붓꽃 데이터 세트에서 레이블(결정 값)데이터를 numpy로 가지고 있다.
iris_label=iris.target #y값 들
print('iris target값:', iris_label)
print('iris target명:', iris.target_names) # ['setosa' 'versicolor' 'virginica'] 문자타입을 0, 1, 2숫자로 변환!

#붓꽃 데이터 세트를 자세히 보기 위해 DataFrame으로 변환한다.
iris_df = pd.DataFrame(iris_data,columns=iris.feature_names)
iris_df['label']=iris.target
iris_df.tail()
iris target값: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
iris target명: ['setosa' 'versicolor' 'virginica']

# 0 : sentosa
# 1 : versicolor
# 2 : virginica

다음으로 학습용 데이터와 테스트용 데이터를 분리해보자. 학습용 데이터와 테스트용 데이터는 반드시 분리해야 한다.

학습데이터로 학습된 모델이 얼마나 뛰어난 성능을 가지는지 평가하려면 테스트 데이터 세트가 필요하기 때문이다.

이를 위해 사이킷런은 train_test_split()API를 제공한다. train_test_split()을 이용하면 학습 데이터와 테스트 데이터를 test_size 파라미터 입 값의 비율로 쉽게 분할이 가능하다. 예를 들어 test_size =0.2로 입력 파라미터를 설정하면 전체 데이터 중 테스트 데이터가 20%, 학습데이터가 80%로 데이터를 분할한다. 먼저 train_test_split()을 호출한 후 좀 더 자세히 입력 파라미터와 변환값을 살펴보자.

 

X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, test_size=0.2) 
# test_size=0.2 = 20프로는 테스트용이로 따로 빼두겠다

 

X_train.shape # (sepal length, sepal width, petal length, petal width)
# (120, 4)   120가지의 4개의 컬럼을 가지고 있고 이것을 학습용 x (독립 변수로 두겠다)

y_train.shape # (label => 품종이 어떤건지)
(120,)	     120가지의 품종이 있다 (종속 변수) 


# X_train의 4가지 독립변수들을 결합하여 y_train 종속 변수를 찾아내는 알고리즘을 학습시킴


# 그 알고리즘에 

X_test.shape # (sepal length, sepal width, petal length, petal width)
# (30, 4)   30가지의 4개의 컬럼을 직접 넣어서 

y_test.shape 
# (30,)      30개의 품종을 얼마나 잘 맞추는지 테스트하는것!

 

의사결정나무를 통해서 학습시키기

# 의사결정 트리에  120개의 학습용 데이터 넣기

DecisionTreeClassifier.fit(X_train,y_train)
#학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행.

pred=dt_clf.predict(X_test) # X_test는 test_size=0.2에서 빼둔 (30, 4)개의 데이터

 

 

# 예측값
pred

# array([2, 2, 1, 1, 2, 0, 1, 0, 0, 1, 1, 1, 1, 2, 2, 0, 2, 1, 2, 2, 1, 0,
#       0, 1, 0, 0, 2, 1, 0, 1])

 

# 실제값
y_test

# array([2, 2, 2, 1, 2, 0, 1, 0, 0, 1, 2, 1, 1, 2, 2, 0, 2, 1, 2, 2, 1, 0,
#       0, 1, 0, 0, 2, 1, 0, 1])

예측값(학습된 데이터로 만들어진 알고리즘) 30개중 2개가 실제값과 다름

정확도 : 0.93333

from sklearn.metrics import accuracy_score as acc_sc
print('예측 정확도: {0}'.format(acc_sc(y_test,pred)))


학습한 의사 결정 트리의 알고리즘 예측 정확도가 약 0.9333(93.33%)으로 측정되었다. 앞의 붓꽃 데이터 세트로 분류를 예측한 프로세스를 정리하면 다음과 같다.

  1. 데이터 세트 분리: 데이터를 학습 데이터와 테스트 데이터로 분리한다.
  2. 모델 학습: 학습 데이터를 기반으로 ML 알고리즘을 적용해 모델을 학습시킨다.
  3. 예측 수행: 학습된 ML 모델을 이용해 테스트 데이터의 분류 (즉, 붓꽃 종류)를 예측한다.
  4. 평가: 이렇게 예측된 결과 값과 테스트 데이터의 실제 결과를 비교해 ML 모델 성능을 평가한다.
728x90

'AI > [ML]' 카테고리의 다른 글

[ML] 머신러닝 분류  (0) 2023.03.30
[ML] 2. Cross Validation 교차 검증  (0) 2023.02.09
728x90

Matplotlib를 통한 시각화 첫 단계 

# matplotlib
!pip install matplotlib # 라이브러리 설치


import matplotlib.pyplot as plt # 라이브러리 임포트

 

 

값 채워 넣고 라이브러리 실행 (1차식)

data1 = [10,14,19,20,25]
plt.plot(data1)
plt.show()

 


 

2차식 넘파이를 활용하여 만들기

import numpy as np 
x = np.arange(-4.5, 5, 0.5) # 넘파이로 숫자 생성(-4.5 부터 5까지 0.5씩증가)
y = 2*x**2   # y = 2x^2
[x,y]



#[array([-4.5, -4. , -3.5, -3. , -2.5, -2. , -1.5, -1. , -0.5,  0. ,  0.5,
#         1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5]),
# array([40.5, 32. , 24.5, 18. , 12.5,  8. ,  4.5,  2. ,  0.5,  0. ,  0.5,
#         2. ,  4.5,  8. , 12.5, 18. , 24.5, 32. , 40.5])]

시각화하기 

plt.plot(x,y)
plt.show()


 

여러 그래프를 하나의 창에 넣어보기

# 함수 설정하기
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-4.5, 5.0, 0.5)
y1 = 2*x**2
y2 = 5*x + 30
y3 = 4*x**2 + 10

 

# 시각화 방법 1
plt.plot(x,y1)
plt.plot(x,y2)
plt.plot(x,y3)
plt.show()

# 더 간단하게도 가능
#plt.plot(x,y1,x,y2,x,y3)
# plt.show()

 


여러 그래프를 여러 창에 넣어보기

# 넘파이로 함수 생성
import numpy as np

# 데이터 생성
x = np.arange(-5,5, 0.1)
y1 = x**2 -2

y2 = 20*np.cos(x)**2

#plt.figure 로 새창을 만들고 (숫자)로 여러 창 생성가능

plt.figure(1) # 1번 그래프를 창에 넣기
plt.plot(x, y1)

plt.figure(2) # 2번 그래프를 창에 넣기
plt.plot(x, y2)

plt.show()

728x90

'AI > [Visualization]' 카테고리의 다른 글

[Seaborn] Seaborn 그래프 형태  (0) 2023.02.13
[Matplotlib] Pie그래프  (0) 2023.02.13
[Matplotlib] 막대바  (0) 2023.02.13
[Matplotlib] 산점도 찍기  (0) 2023.02.13

728x90
import pandas as pd
df = pd.DataFrame({'Old A' : ['Old a1', 'Old a2', 'Old a3', 'Old a4'], 'Old B' : ['Old b1', 'Old b2', 'Old b3', 'Old b4'], 'Old C' : ['Old c1', 'Old c2', 'Old c3', 'Old c4']})
df

1. 인덱스 명 바꾸기

 

  • 1-1 df.index = ["바꿀 인덱스 값"]

# 모든 인덱스를 바꿀때만 

# 이미 생성된 컬럼수와 입력하는 컬럼수가 같아야함
df.index = ["New 0", "New 1", "New 2", "New 3"]
df

 

 

 

  • 1- 2 df.rename(columns = {"원래이름" : "바꿀이름" }, option)   

(일부의 인덱스명만 바꿀때 and 인덱스명으로)

 * rename의 파라미터인 딕셔너리 형태로 써줌

# 일부의 인덱스명만 바꿀때 and 인덱스명으로
df.rename(index = {0: "New 0", 1: "New 1"}) 
# df.rename({0: "New 0", 1: "New 1"}, axis =0)

# axis= 0 은 인덱스  (생략도 가능)

 

 

 

option : inplace = True (기존값도 변경)   

 

  • 1-3 df.index.values[컬럼번호] = "바꿀 컬럼명" 

(일부의 컬럼명만 바꿀때 and 컬럼명으로)

# 일부의 인덱스명만 바꿀때 and 인덱스 번호로
df.index.values[0] = "New A0"

 

 

 

오류발생 !!

# 'int' object has no attribute 'index'
# invalid literal for int() with base 10: 'New A0'

 

  • 1-4 컬렴을(열)을 인덱스로 만들기
df1 = df.set_index("Old A")
df1

 

 

 

2.  컬럼명 명 바꾸기

-> 인덱스랑 똑같다. 'Index 대신 'columns'로 바꾸면 끝

 

  • 1- 1  df.column 을 통해서 바꾸기  

(모든 컬럼명을 바꿔야 할때만)

* column 의 파라미터인 리스트형태로 써줌

df.columns = ["New A", "New B", "New C"] # 이미 생성된 컬럼수와 입력하는 컬럼수가 같아야함
df

 

 

  • 1- 2 df.rename(columns = {"원래이름" : "바꿀이름" }, option)   

(일부의 컬럼명만 바꿀때 and 컬럼명으로)

 * rename의 파라미터인 딕셔너리 형태로 써줌

# 일부의 컬럼명만 바꿀때 and 컬럼명으로
df.rename(columns = {"Old A": "New A1", "Old B": "New B1"}) 
# df.rename({"Old A": "New A1", "Old B": "New B1"}, axis =1)

# axis= 1 은 컬럼(열)

# rename() 함수에서는 lambda 사용가능
df.rename(columns= lambda x:'[' + x +']' )

 

option : inplace = True (기존값에 저장)   

 

  • 1-3 df.columns.values[컬럼번호] = "바꿀 컬럼명" 

(일부의 컬럼명만 바꿀때 and 컬럼명으로)

# 일부의 컬럼명만 바꿀때 and 컬럼 번호로
df.columns.values[0] = "New A1"

 

 

3.  데이터 값 변경

CRUD에서 R과 똑같음

https://itcreator.tistory.com/143

# https://itcreator.tistory.com/143    3-1번 

titan_df.loc[0,'Pclass']  # 3이 출력됐었음

# " = " 만 넣으면 끝
titan_df.loc[0,'Pclass'] = 999999  # 3에서 999999로 바뀜

 

 

4. 조건으로 데이터 값 변경하기 

- lamda

# st['default'] = st['default'].apply(lambda x : 0 if x == 'No' else 1)
# st

 

5. replace

df.replace('현재 문자열', '바꿀 문자열', inplace = True) # inplace = True : 원본도 바꿈


# 여러개 바꿀때는 Key-Value 형태로 가능 
df.replace({'현재 문자열1':'바꿀 문자열 1', '현재문자열2':' 바꿀 문자열 2'})


# 하나의 컬럼에서 바꿀때
df.replace({'컬럼이름': {'찾을 문자열': '대체 문자열'}}
728x90
728x90

DataFrame에서 데이터 추출

 

1. 추출용 데이터 셋 다운받기 

https://www.kaggle.com/competitions/titanic/data

에서 자료 다운받기 

 

# 데이터셋 불러오기

import pandas as pd
titan_df = pd.read_csv('./titanic/train.csv')
titan_df

 

 

2. 선택된 열(column) 세로만 뽑아보기

# 선택된 열(column) 세로만 뽑아보기

titan_df[['Name']]

# 여러개는 ,'컬럼명' 넣어주면 된다
# titan_df[['Name','Age']]


# print(type(titan_df[['Name']]))  => [[]] 2차원 <class 'pandas.core.frame.DataFrame'> 
# print(type(titan_df['Name']))   => [] 1차원 <class 'pandas.core.series.Series'>

 

 

 

2-1. 해당조건의 열(column) 세로 뽑아보기 

# 3. Pclass 1인 정보 추출하기

titan_df[titan_df.Pclass==1]  # <class 'pandas.core.series.Series'>
# titan_df[titan_df['Pclass']==1] # 이렇게 해도됨


#titan_df[titan_df.Pclass==1].Pclass.value_counts() # 갯수

# print(type(titan_df[titan_df.Pclass==1]))  =>  <class 'pandas.core.frame.DataFrame'>
# print(type(titan_df.Pclass==1]))           => <class 'pandas.core.series.Series'>

 

여러가지 조건 

# and 조건일 때는 &  /  or 조건일 때는 |   / Not 조건일 때는 ~
# 60세넘는  1등급 여성 추출

titan_df[(titan_df.Pclass==1) & (titan_df.Sex=='female') & (titan_df['Age'] > 60)]

# Not 조건인 경우 (반대조건)
# titan_df[~((titan_df.Pclass==1) & (titan_df.Sex=='female') & (titan_df['Age'] > 60))]

 

2-2 여러가지 기능들

# 해당 열(Name)에 글자가 포함된 데이터 출력
titan_df[titan_df.Name.str.contains('Mrs')]

# 인덱스번호 재정렬
titan_df[titan_df.Name.str.contains('Mrs')].reset_index()

# 인덱스번호 재정렬상태에서 상위3개만 보여주기 
# titan_df[titan_df.Name.str.contains('Mrs')].reset_index().head(3) # 상위 3개
# titan_df[titan_df.Name.str.contains('Mrs')].reset_index()[:3]  # 상위 3개

# titan_df[titan_df.Name.str.contains('Mrs')].reset_index().tail(3) # 하위


# 결측치받기
.isna() # 표로 보여주기
.isna().sum() # 합쳐서 보여주기

 

3. 선택된 행(row) 가로만 뽑아보기

titan_df.loc[[0]] # loc 이름이 0인 행만 추출해줘
titan_df.iloc[[0]] # iloc 위치가 0번째 행인 값들만 추출해줘

# 단일값을 불러오기1 - loc(label::명칭) // iloc(Positional-위치)

titan_df.loc[[0]] # loc 이름이 0인 행만 추출해줘
titan_df.iloc[[0]] # iloc 위치가 0번째 행인 값들만 추출해줘

# iloc 경우 슬라이스 가능
# iloc [시작:끝:옵션]

#  테스트하기 위해서 행 이름 바꿀때 
# data_df.rename(index={'two': 1, 'one': 3}, inplace=True) # inplace 원본도 바꿀래?
data_df

 

3-1. loc/iloc 을 통한 행열 을 사용하여 하나의 값 뽑기

 

titan_df.loc[0,'Pclass'] 
# 3 출력

 
# titan_df.loc[[0,'Pclass']] 로 하면 "['Pclass'] not in index" 에러 뜸

 

 

3-2. loc/iloc 을 통한 행열 을 사용하여 여러개의 값 뽑기

 

titan_df.loc[:,'Pclass':'Age']  
# 행 [:] = 전부 , 열 ['Pclass':'Age'] Pclass부터 ~ Age 까지3-1. loc을 통한 행열 을 사용하여 하나의 값 뽑기



titan_df.iloc[:,2:6]  
# 와 동일한 값 (2열부터 ~ 2,3,4,5 까지) 6열 포함x

 

<원본>

titan_df

 

 

 

 

 

<조건으로 나온 값>

 

728x90
728x90

DataFrame 행(row)열(column) 추가 삭제

CRUD중 Create 와 Delete

1: DataFrame 생성 또는 불러오기

# csv 불러오기

import pandas as pd

# 절대경로
# file_path = '/Users/chris/Desktop/Develop/TIL/python/BIGDATA/test.csv'
# tset_df = pd.read_csv(file_path, engine='python') # DataFrame의 약자 df

# 상대경로
test_df = pd.read_csv("./test.csv", encoding="cp949")  # ./ 현재폴더    # encoding="cp949" 한글 인코딩 오류해결용
# 생성하기

import pandas as pd

# 딕셔너리 형태로 
df = pd.DataFrame({'A' : ['a1', 'a2', 'a3', 'a4'], 'B' : ['b1', 'b2', 'b3', 'b4'], 'C' : ['c1', 'c2', 'c3', 'c4']})


# 리스트 형태로 (api로 불러올때는 대부분 이런식)
df = pd.DataFrame([{'A' : 'a1', 'B' : 'b1', 'C' : 'c1'},
		   {'A' : 'a2', 'B' : 'b2', 'C' : 'c2'},
                   {'A' : 'a3', 'B' : 'b3', 'C' : 'c3'},
                   {'A' : 'a4', 'B' : 'b4', 'C' : 'c4'}])
 


df

 

 

2: DataFrame  행(row) 추가 / 열(column) 추가

 

 

# 행(row, 가로) 추가 
df.loc[len(df)] = ['st', 123, '아무거나']     # len(df) df : 행 인덱스  (숫자넣는곳)
df

 

 

# 열(column, 세로) 추가

df['새컬럼'] = 'new'
df

 

 

3: DataFrame  행(row)  / 열(column) 삭제

 

# 행(row)가로 삭제

df2 = df.drop(0, axis = 0) # axis = 0 (생략가능) 행 
df2 

#df2 = df.drop([0, 1],axis = 0) 여러개도 한번에 가능
#df2

# df.drop([0], axis = 0, inplace = true) # inplace = True / 리턴없이 원본이 수정됨 (결과창 안뜸)
# df.drop([0], axis = 0, inplace = false) # false(생략가능)인 경우 리턴은 있지만 원본은 그대로 (결과창 뜸)

# 원본을 저장하고 싶으면 =>
# df = df.drop([0], axis = 0, inplace = false) 로  df에 담아야함

# df = df.drop(df.index[[0, 1]]) #인덱스 번호로도 삭제가능 (행 이름이 문자일때 번호로 지우기용)

# 열 (column, 세로) 삭제

df2 = df.drop('A', axis = 1)  # axis = 1 열 
df2

728x90
728x90

Pandas 시리즈(Series)와 데이터프레임(Dataframe)

Pandas의 차원이해하기 

<class 'pandas.core.series.Series'> : 1차원

<class 'pandas.core.frame.DataFrame'> : 2차원

 

 

 

 

 

 

 

DataFrame

:  시리즈가 여러개 합쳐진 자료형
데이터프레임에서 하나의 행 또는 열만 뽑으면 그것은 시리즈이다.

열내의 데이터 같고, 열간의 데이터는 다름

 

 

 

 

차원에 대한 이해

import pandas as pd

dic = {'컬럼_열1': ['행_가','행_나','행_다'], '컬럼_열2': ['행_a', '행_b', '행_c'], '컬럼_열3': ['행_1', '행_2', '행_3']}


df = pd.DataFrame(dic)
df

pd.DataFrame(df[df.컬럼_열1=='행_가']['컬럼_열2'])

# [][] =>  [행][렬] 
#  [행] => [df.컬럼_열1=='행_가']  => '행_가'가 포함된 행_가, 행_a, 행_1을 뽑는다. 0번째 행을 뽑는다.
#  [열] => ['컬럼_열2'] => 행_a, 행_b, 행_c를 뽑고 곂치는 값을 출력한다.
#  행_a 출력

 

 

 


pd.DataFrame(df[df.컬럼_열2=='행_c']['컬럼_열3']) 
#을 한다면?

# 행_3 출력

 

728x90

+ Recent posts