<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>mogu_.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Wed, 19 Jul 2023 05:13:35 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. mogu_.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/mogu_" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 35]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-35</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-35</guid>
            <pubDate>Wed, 19 Jul 2023 05:13:35 GMT</pubDate>
            <description><![CDATA[<p>[ MySQL 설치하기 ]
Window : <a href="https://dev.mysql.com/downloads/mysql/DPTJ">https://dev.mysql.com/downloads/mysql/DPTJ</a> 
에서 dmg파일 다운로드
Root password 설정 후 메모해놓기 : 잃어버리면 패스워드를 
찾을 수 없어서 새로 설치해야한다.</p>
<p>[ database 정의 ]
Database : 여러 사람이 공유해서 사용할 목적으로 체계화하여 통합, 관리하는 데이터의 집합체다.
DBMS(Database Management System) : 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 데이터베이스를 관리해주는 소프트웨어</p>
<ul>
<li>RDB (Relational Database) : 관계형 데이터베이스, 서로간에 관계가 있는 데이터 테이블들을 모아둔 데이터 저장공간</li>
<li>SQL (Structured Query Language) : 데이터베이스에서 데이터를 정의, 조작, 제어하기 위해 사용하는 언어</li>
<li>SQL 구성 </li>
</ul>
<ol>
<li>데이터 정의 언어 (DDL) : CREATE, ALTER, DROP 등의 명령어</li>
<li>데이터 조작 언어 (DML) : INSERT, UPDATE, DELETE, SELECT 등의 명령어</li>
<li>데이터 제어 언어 (DCL) : GRANT, REVOKE, COMMIT, ROLLBACK 등의 명령어</li>
</ol>
<p>[ Database 관리 ]
show databases; ( 현재 database 목록 확인 )
Create database dbname; (database 이름을 지정하여 생성)
Create database testdb; (testdb라는 이름의 데이터베이스 생성 및 확인)
Use dbname; (해당 데이터베이스로 이동)
Use testdb; (testdb 로 이동)
Drop database testdb; (testdb 데이터베이스 삭제)</p>
<p>[ user 관리 ]
Use mysql;
Select host, user from user; (사용자 정보는 mysql에서 
관리하므로 일단 mysql 데이터베이스로 이동 후 조회)
Create user ‘username’ @ ‘localhost’ identified by ‘password’;
(현재 pc에서만 접속 가능한 사용자를 비밀번호와 함께 생성)</p>
<p>Create user ‘noma’ @ ‘localhost’ identified by ‘1234’;
(현재 pc에서 접속 가능한 사용자(noma, 1234) 생성)</p>
<p>Creater user ‘username’ @ ‘%’ identified by ‘password’;
(외부에서 접속 가능한 사용자를 비밀번호와 함께 생성)</p>
<p>Creater user ‘noma’ @ ‘%’ identified by ‘1234’;
(외부에서 접속 가능한 사용자 (noma, 1234) 생성)</p>
<p>Drop user ‘username’ @ ‘localhost’
Drop user ‘username’ @ ‘%’
(접근 범위에 따라 같은 이름의 사용자여도 별도로 삭제)</p>
<p>Drop user ‘noma’ @ ‘%’
(외부에서 접근가능한 noma 계정 삭제)</p>
<p>Drop user ‘noma’ @ ‘localhost’
(현재 pc에서 접근가능한 noma 계정 삭제)</p>
<p>[ user 권한 관리 ]</p>
<p>Create database testdb;
(권한 관리를 실습하기 위한 database (testdb) 생성 )</p>
<p>Create user ‘noma’ @ ‘localhost’ identified by ‘1234’;
(권한관리를 실습하기 위한 사용자 (id : ‘noma’ @ ‘localhost’ , password: 1234) 생성 )</p>
<p>Show grants for ‘username’ @ ‘localhost’;
(사용자에게 부여된 모든 권한 목록을 확인)</p>
<p>Show grants for ‘noma’ @ ‘localhost’;
(현재 pc에 접근가능한 noma의 권한 확인)</p>
<p>Grants all on dbname.* to ‘username’ @ ‘localhost’;
(사용자에게 특정 데이터베이스의 모든 권한을 부여)</p>
<p>Grants all on testdb.* to ‘noma’ @ ‘localhost’;
(현재 pc에 접근가능한 noma에게 testdb의 모든 권한을 부여)</p>
<p>Revoke all on dbname.* from ‘username’ @ ‘localhost’;
(사용자에게 특정 데이터베이스의 모든 권한을 삭제)</p>
<p>Revoke all on testdb.* from ‘noma’@‘localhost’;
(현재 pc에 접근가능한 noma 에게 testdb의 모든 권한을 삭제)</p>
<p>Flush privileges;
(수정내용이 적용되지 않은 경우 새로고침)</p>
<p>[ table 사용하기 ]</p>
<p>Create database zerobase default character set utf8mb4;
(zerobase라는 이름의 데이터베이스 생성)
=&gt; 데이터베이스 안에서 실제 데이터가 저장되는 형태이고 행(row)과 
열(column)로 구성된 데이터 모음</p>
<p>Create table mytable(id int, name varchar(16));
(id(int)와 name(varchar(16)) 칼럼을 가지는 mytable이라는 이름의 테이블 생성)</p>
<p>Show tables;
Desc tablename;
Desc mytable;
(mytable 테이블 정보 확인)</p>
<p>Alter table mytable rename person;
(mytable 이름을 person 으로 변경)</p>
<p>Alter table person add column agee double;
(person 테이블에 agee(double) 칼럼 추가)</p>
<p>Alter table person
Modify column agee int;
(person 테이블의 agee 칼럼의 데이터 타입을 int로 변경)</p>
<p>Alter table person
Change column agee age int;
(person 테이블의 agee 칼럼 이름을 age로 변경)</p>
<p>Alter table person
Drop column age;
(person 테이블의 age 칼럼을 삭제)</p>
<p>Drop table person;
(person 테이블 삭제)</p>
<p>[ select, insert, update, delete ]</p>
<p>Use zerobase;
(zerobase로 이동)</p>
<p>Create table person
(
    Id int,
    Name varchar(16),
    Age int,
    Sex char
);
(person 테이블 생성)
Desc person;
(table 확인)</p>
<p>Insert into person(id, name, age, sex)
Values (1, ‘이효리’, 43, ‘F’);
(입력한 컬럼 이름의 순서와 같이 순서가 일치하도록 주의)</p>
<p>Insert into person
Values (2, ‘이상순’, 48, ‘M’);
(데이터 추가, 모든 컬럼값을 추가하는 경우에 다음과 같이 컬럼 이름을 저장하지 않아도 되지만, 입력하는 값의 순서가 테이블의 컬럼 순서와 일치하도록 주의)</p>
<p>Select name, age, sex from person;
(person 테이블 내의 이름, 나이, 성별 데이터 조회)</p>
<p>Select *
From person;
(person 테이블 내의 모든 칼럼에 대한 데이터를 조회)</p>
<p>Select * from person where sex=‘F’;
(person 테이블 내에서 성별이 여자인 데이터 조회, where은 테이블 내에서 조건을 만족하는 데이터 조회 문법)</p>
<p>Update person set age=23 where name=‘이효리’;
(이효리 나이를 23세로 수정, update는 수정할 때 사용하는 문법)</p>
<p>Delete from person where name=‘이상순’
(이상순 데이터 삭제)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[7/15 제로베이스 데이터 취업스쿨 세번째 팀 미팅 회고]]></title>
            <link>https://velog.io/@mogu_/715-%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B7%A8%EC%97%85%EC%8A%A4%EC%BF%A8-%EC%84%B8%EB%B2%88%EC%A7%B8-%ED%8C%80-%EB%AF%B8%ED%8C%85-%ED%9A%8C%EA%B3%A0</link>
            <guid>https://velog.io/@mogu_/715-%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B7%A8%EC%97%85%EC%8A%A4%EC%BF%A8-%EC%84%B8%EB%B2%88%EC%A7%B8-%ED%8C%80-%EB%AF%B8%ED%8C%85-%ED%9A%8C%EA%B3%A0</guid>
            <pubDate>Tue, 18 Jul 2023 05:07:14 GMT</pubDate>
            <description><![CDATA[<h1 id="week3">Week.3</h1>
<p>Week.3 진행_본인이 지원하고자 하는 관심 산업/기업 채용공고 스크랩** 1~2주차에 스크랩한 채용공고와 직무분석 기반으로 본인이 지원하고자 하는 산업/기업 채용공고를 스크랩 합니다.</p>
<p>지원하고자 하는 관심 산업 : 게임 / 금융</p>
<p>[ 게임 ]</p>
<ol>
<li>게임듀오에서 채용 중인 데이터 분석가에 한번 지원해 보세요. <a href="http://wntd.co/356e7a9a">http://wntd.co/356e7a9a</a></li>
</ol>
<ul>
<li>&lt; 주요 업무 &gt;</li>
<li>데이터 기반 의사결정에 기여하기 위해 분석 과제를 정의 및 도출해 인사이트를 전달</li>
<li>서버 Database, BigQuery, s3등에 수집된 raw Data를 SQL, Python을 이용해 처리하고 분석</li>
<li>분석된 내용을 바탕으로 실제 Action으로 이어질 수 있는 리포트 및 대시보드 제작</li>
<li>&lt; 자격 요건 &gt;</li>
<li>게임회사 인하우스 데이터 분석 경험 1년 이상 보유</li>
<li>python, SQL, BI Tool활용 능력 가능자</li>
<li>데이터 기반 인사이트와 실험 결과를 이해하기 쉽도록 커뮤니케이션 할 수 있는 사람</li>
<li>데이터 분석 결과를 도출하기 위한 수학적/통계적 지식을 보유한 사람</li>
</ul>
<p>[ 게임 ]</p>
<ol>
<li>(주)넥슨 - [인텔리전스랩스] 데이터 분석가 (게임/브랜드 가치/플랫폼)
<a href="https://m.jobkorea.co.kr/info/app_down.asp?Gno=41732944">https://m.jobkorea.co.kr/info/app_down.asp?Gno=41732944</a></li>
</ol>
<ul>
<li><strong>&lt;필수 자격 요견&gt;</strong></li>
<li>게임에 대한 관심</li>
<li>SQL 활용 경험</li>
<li><strong>&lt;업무 종류&gt;</strong></li>
<li>게임, 플랫폼 및 넥슨 서비스 데이터 기반 다양한 주제 분석</li>
<li>분석, 설계, 데이터 추출 및 가공, 모델링, 배치 관리</li>
<li>인사이트 도출 후 Tableau 기반 시각화 및 리포팅</li>
<li>사업, 개발, 인프라 등 유관 부서 대상 컨설팅 및 다양한 협업</li>
</ul>
<p>⇒ 현재 게임 산업이 예전과 같은 호황기가 아님. 데이터 분석, 게임 개발 가능한 인력을 충원하는데에 힘쓰는 실정이라 능력만 갖춘다면 경쟁력 있는 지원자가 될 가능성이 높다. 넥슨 이외에도 넷마블, 네오플, 엔씨소프트 등에서도 다양한 데이터 분석가를 채용중이다. 다만 넥슨 이외의 게임회사는 현재 경력직을 뽑고 있다. 게임을 좋아하고 SQL활용 능력이 있다면 좋을듯하다.</p>
<p>(이외에도 각 분야마다 데이터 분석가들 채용중)</p>
<p>[ 금융 ]</p>
<ol>
<li>(주)비바리퍼블리카 - [토스페이먼츠] Data Analyst
<a href="https://m.jobkorea.co.kr/info/app_down.asp?Gno=41887258">https://m.jobkorea.co.kr/info/app_down.asp?Gno=41887258</a></li>
</ol>
<ul>
<li><strong>&lt; 자격 요건 &gt;</strong></li>
<li>SQL로 Raw Data를 처리하고 가공 할 수 있는 데이터 추출 능력</li>
<li>Raw Data의 탐색부터 기본적인 데이터 마트의 구축까지 지표를 설정하여 시각화</li>
<li>복잡하고 다양한 데이터 셋을 정제하여 서비스의 문제를 진단하고 해결하는 역량</li>
<li>분석 결과물을 적시에 자료 활용과 간결한 커뮤니케이션을 통해 전달</li>
<li>데이터 분석에 필요한 기본적인 통계지식 보유</li>
<li>데이터 분석을 통해 직접적인 성과를 낸 경험이 있거나, 비록 결과가 부족했더라도   끊임없이 호기심을 발휘하여 문제를 해결하려 노력해 본 경험</li>
<li><strong>&lt; 경험 할 업무 &gt;</strong></li>
<li>Raw Data를 정제/가공/적재하여 다양한 팀에 인사이트 제공</li>
<li>실제 유저들이 경험하고 있는 로그 및 결제 데이터를 바탕으로 임펙트 있는 가설을 수립하고 실험을 설계하여 분석 결과 전달</li>
<li>리스크 관리</li>
<li>가맹점 유치</li>
<li>가맹점 관리</li>
</ul>
<p>(데이터 분석가 보조 업무도 채용 중)</p>
<p>⇒ 금융권 IT직무 담당 인원과 데이터 분석가 인원이 적어 금융권 기업들이 IT 대기업들과 손을 잡아 인재양성에 힘쓰고 있다는 뉴스가 매주 보도되고있음. 평소 금융에 관심있고 다양한 데이터 수집 가능한 직군에 관심이 있다면 추천할만한 분야. 이 곳 또한 SQL을 필수적으로 요구하고있음을 알 수 있음.</p>
<p>[ 스타일 커머스 플랫폼 ] </p>
<ol>
<li>에이블리코퍼레이션에서 채용 중인 데이터 분석가 (Product Data Analyst)에 한번 지원해 보세요. <a href="http://wntd.co/ab17b324">http://wntd.co/ab17b324</a></li>
</ol>
<ul>
<li>&lt; 주요 업무 &gt;</li>
<li>PO, 엔지니어, 디자이너와 긴밀하게 협력하여 에이블리 앱 서비스 개선을 위한 문제파악, 기획, 분석하는 역할을 담당</li>
<li>모바일 앱 서비스 지표를 개선하고, 문제 해결을 위한 데이터 기반의 인사이트 제공</li>
<li>서비스 개선에 대한 실험을 설계하고, 결과 분석</li>
<li>&lt; 자격 요건 &gt;</li>
<li>데이터 분석 관련 업무 경력이 2년 이상 혹은 5년 이상이거나 그에 준하는 역량을 갖고 있는 사람</li>
<li>모바일 앱 유저 행동 데이터 분석에 대한 이해도 있는 사람</li>
<li>A/B test, 앱 서비스 분석 관련 툴 (google analytics, Amplitude 등)을 활용한 경험이 있거나, 새로운 툴을 적용하는데 어려움이 없는 사람</li>
<li>SQL을 활용하여 데이터 추출을 하고 가공할 수 있는 사람</li>
</ul>
<p>[ HR 테크 ]</p>
<ol>
<li>원티드랩에서 채용 중인 데이터 분석가 [데이터팀]에 한번 지원해 보세요. <a href="http://wntd.co/7fb4c158">http://wntd.co/7fb4c158</a></li>
</ol>
<ul>
<li><p>&lt; 주요 업무 &gt;</p>
</li>
<li><p>전사 및 부문의 비즈니스 모델을 개선하기 위한 가설을 세우고 데이터로 인사이트를 도출</p>
</li>
<li><p>Product Owner와 긴밀하게 협업하여 제품 개선 과정 전반에 걸쳐 문제 정의, 가설 검증에 필요한 데이터와 인사이트를 제공</p>
</li>
<li><p>전사의 자발적/ 효율적 데이터를 활용 문화 발전 주도</p>
</li>
<li><p>&lt; 자격 요건 &gt;</p>
</li>
<li><p>데이터 분석 업무 수행 경력 3년 이상</p>
</li>
<li><p>python, SQL등 데이터 분석에 필요한 언어에 능숙한 사람</p>
</li>
<li><p>A/B 테스트 설계, 해석 실무 경험이 있는 사람</p>
</li>
<li><p>다양한 직군의 동료들과 원활한 협업을 위한 커뮤니케이션 능력이 있는 사람</p>
</li>
<li><p>거버넌스 매니저, 데이터 엔지니어와 함께 전사 차원의 인프라 개선을 위해 같이 고민할 수 있는 사람</p>
</li>
<li><ul>
<li>각 스크랩한 기업에서 필요로 하는 역량이 무엇인지 작성합니다.</li>
</ul>
</li>
<li><ul>
<li>python, SQL, raw data 가공 능력 및 경험, 커뮤니케이션 능력</li>
</ul>
</li>
<li><ul>
<li>추가적으로 A/B TEST, BigQuery 등을 요구하는 회사도 있음</li>
</ul>
</li>
<li><ul>
<li>3주차에 수행하신 학습 내용을 정리하여 어려운 점은 무엇인지 이해가 잘 된 부분은 무엇이였는지 조원들과 논의 후 스터디노트에 작성합니다. 1) 관심분야 지원 기업 리스트 스크랩_원티드, 잡코리아 서치</li>
</ul>
</li>
<li><p>파이썬 중급, 기초수학 파트가 어려워서 강의 진도 나가는게 더뎠다. 또한 EDA파트에서는 각 모듈마다 쓸 수 있는 기능들이 다르고 불러오는 형식도 달라 적재적소에 사용하는것이 어려웠다. 반대로 기초 파이썬 수업과 자료구조, pandas, matplotlib파트 내용은 이해가 잘되었던 것 같다.</p>
</li>
</ul>
<p>2) 각 관심분야 지원 기업 리스트에서 공통적으로 보는 역량은 무엇인지 파악</p>
<ul>
<li>python, SQL, raw data 가공 능력 및 경험, 커뮤니케이션 능력을 가장 우선시 하는듯하다.</li>
</ul>
<p>[ 매주 과제가 어려워져 그만해야하나 싶지만 그래도 못먹어도 고 ! ]</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[7/8 제로베이스 데이터 취업스쿨 두번째 팀미팅 회고록]]></title>
            <link>https://velog.io/@mogu_/78-%EB%91%90%EB%B2%88%EC%A7%B8-%ED%8C%80%EB%AF%B8%ED%8C%85-%ED%9A%8C%EA%B3%A0%EB%A1%9D</link>
            <guid>https://velog.io/@mogu_/78-%EB%91%90%EB%B2%88%EC%A7%B8-%ED%8C%80%EB%AF%B8%ED%8C%85-%ED%9A%8C%EA%B3%A0%EB%A1%9D</guid>
            <pubDate>Tue, 18 Jul 2023 05:00:03 GMT</pubDate>
            <description><![CDATA[<p><strong>[희망하는 직군/이유]</strong></p>
<p>최종적으로 희망하는 직군은 데이터 사이언티스트이지만 현재시점에서 단기적으로 희망하는 목표는 데이터 분석가이다. 현재까지 툴과 이론을 공부한 양으로는 데이터 분석가로 지원하는것이 맞다고 생각하기 때문이다. 데이터 분석가로 일을 하게 되면 그 때 부터 데이터 사이언티스트 준비를 할 예정이다.</p>
<p>데이터 분석가 중 게임분야 데이터 분석을 원하는데 평소 게임을 좋아하고 유저의 입장에서 자주 접해왔기 때문에 좀 더 현실적으로 가설을 세워 유의미한 인사이트를 낼 수 있을 것 같고, 일을 하는것이 즐거울 것이라 예상되며, 관심분야이기때문에 공부하는것을 덜 힘들게 느끼고 오래 근무할 수 있을 것 같아 준비중이다. 또한 게임산업이 앞으로 좀 더 발전할 수 있을것이라는 확신이 들기 때문이기도 하다.</p>
<p><strong>[데이터 분석가]</strong></p>
<p>데이터 분석가는 기업이 다양한 형태로 수집해놓은 데이터를 분석하고 시각화 해주는 </p>
<p>도구를 이용하여 나온 결과를 타 부서들에 전달하여 의사결정을 만들어내게 하는 </p>
<p>서포터 역할을 한다. 데이터 작업 수행 능력과 커뮤니케이션이 중요한 직업이며 </p>
<p>상대방의 눈높이에 맞춰서 설명해 줄 수 있어야한다.</p>
<p><strong>[데이터 사이언티스트]</strong></p>
<p>데이터 사이언티스트 또한 데이터 분석가와 같이 데이터들 사이에 숨어있는 인사이트들을 찾아 결론을 도출해내는 업무를 수행한다. 기존의 통계분석 + 딥러닝 알고리즘을 통해 데이터를 가공, 분석하는 업무를 수행한다. </p>
<p><strong>[데이터 엔지니어]</strong></p>
<p>데이터 엔지니어는 프레임 워크를 이용해 데이터 파이프라인을구축하는 업무를 수행한다. 방대한 데이터들을 수집하고 처리하며 가공하여 데이터 분석가나 데이터 사이언티스트가 쉽게 이용할 수 있도록 API를 제공한다. 또한 다양한 장애 상황을 모니터링하고 안정적으로 데이터를 공급할 수 있는 인프라 구축에 집중해야하는 직업이다.</p>
<p>=&gt; 현 시점에서 공고가 올라오는것을 보면 데이터분석가를 채용한다고 하지만 데이터 엔지니어의 역할을 요구하는 곳이 상당히 많다. 대기업의 경우는 데이터 분석가, 데이터 엔지니어, 데이터 사이언티스트의 역할을 명확히 구분해 채용하고있는 것 같지만 조금 작은 회사나 it계열이 아닌 회사들은 복합적 역량을 갖춘 인재를 원하는것으로 파악된다. 기본적인 python, SQL을 구사하게된다면 다양한 언어를 간단하게 사용할 수 있을 정도로 공부하는것이 취업성공률을 높일 수 있는 방안이 될 것 같다고 예상된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 34]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-34</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-34</guid>
            <pubDate>Tue, 18 Jul 2023 04:54:08 GMT</pubDate>
            <description><![CDATA[<ol start="7">
<li>Population <h2 id="1-배경">1. 배경</h2>
</li>
</ol>
<ul>
<li>목표<ul>
<li><ol>
<li>인구 소멸 위기 지역 파악 </li>
</ol>
</li>
<li><ol start="2">
<li>인구 소멸 위기 지역의 지도 표현 </li>
</ol>
</li>
<li><ol start="3">
<li>지도 표현에 대한 카르토그램 표현</li>
</ol>
</li>
</ul>
</li>
</ul>
<ol start="2">
<li>데이터 읽고 인구 소멸 지역 계산하기</li>
</ol>
<pre><code>import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import set_matplotlib_hangul
import warnings

warnings.filterwarnings(action=&quot;ignore&quot;)
%matplotlib inline 

- fillna()
datas = {
    &quot;A&quot;: np.random.randint(1, 45, 8), 
    &quot;B&quot;: np.random.randint(1, 45, 8),
    &quot;C&quot;: np.random.randint(1, 45, 8),
}

datas

fillna_df = pd.DataFrame(datas)
fillna_df

fillna_df.loc[2:4, [&quot;A&quot;]] = np.nan
fillna_df.loc[3:5, [&quot;B&quot;]] = np.nan
fillna_df.loc[4:7, [&quot;C&quot;]] = np.nan
fillna_df

method : {&#39;backfill&#39;, &#39;bfill&#39;, &#39;pad&#39;, &#39;ffill&#39;, None}, default None
    Method to use for filling holes in reindexed Series
    pad / ffill: propagate last valid observation forward to next valid
    backfill / bfill: use next valid observation to fill gap.

fillna_df.fillna(method=&quot;pad&quot;)

population = pd.read_excel(&quot;../data/07_population_raw_data.xlsx&quot;, header=1)
population.fillna(method=&quot;pad&quot;, inplace=True)
population

population.info()
# 컬럼 이름 변경 

population.rename(
    columns={
        &quot;행정구역(동읍면)별(1)&quot;: &quot;광역시도&quot;,
        &quot;행정구역(동읍면)별(2)&quot;: &quot;시도&quot;,
        &quot;계&quot;: &quot;인구수&quot;
    }, inplace=True
)
population.tail()

population.head()

# 소계 제거 
population = population[population[&quot;시도&quot;] != &quot;소계&quot;]
population.head()

population.is_copy = False 

population.rename(
    columns={&quot;항목&quot;: &quot;구분&quot;}, inplace=True
)

population.head()

population.loc[population[&quot;구분&quot;] == &quot;총인구수 (명)&quot;, &quot;구분&quot;] = &quot;합계&quot;
population.loc[population[&quot;구분&quot;] == &quot;남자인구수 (명)&quot;, &quot;구분&quot;] = &quot;남자&quot;
population.loc[population[&quot;구분&quot;] == &quot;여자인구수 (명)&quot;, &quot;구분&quot;] = &quot;여자“

population

# 소멸지역을 조사하기 위한 데이터 

population[&quot;20-39세&quot;] = (
    population[&quot;20 - 24세&quot;] + population[&quot;25 - 29세&quot;] + population[&quot;30 - 34세&quot;] + population[&quot;35 - 39세&quot;]
)

population[&quot;65세이상&quot;] = (
    population[&quot;65 - 69세&quot;] + population[&quot;70 - 74세&quot;] + population[&quot;75 - 79세&quot;] + population[&quot;80 - 84세&quot;] + population[&quot;85 - 89세&quot;] + population[&quot;90 - 94세&quot;] + population[&quot;95 - 99세&quot;] + population[&quot;100+&quot;]
)

population.tail()

# pivot_table 

pop = pd.pivot_table(
    data=population,
    index=[&quot;광역시도&quot;, &quot;시도&quot;], 
    columns=[&quot;구분&quot;],
    values=[&quot;인구수&quot;, &quot;20-39세&quot;, &quot;65세이상&quot;]
)

pop

# 소멸 비율 계산 

pop[&quot;소멸비율&quot;] = pop[&quot;20-39세&quot;, &quot;여자&quot;] / (pop[&quot;65세이상&quot;, &quot;합계&quot;] / 2)
pop.tail()

# 소멸위기지역 컬럼 생성 

pop[&quot;소멸위기지역&quot;] = pop[&quot;소멸비율&quot;] &lt; 1.0 
pop

# 소멸위기지역 조회 
pop[pop[&quot;소멸위기지역&quot;] == True].index.get_level_values(1)

pop.reset_index(inplace=True)
pop.head()

pop.columns.get_level_values(0)[5]

tmp_columns = [
    pop.columns.get_level_values(0)[n] + pop.columns.get_level_values(1)[n]
    for n in range(0, len(pop.columns.get_level_values(0)))
]

pop.columns = tmp_columns
pop.head()
3. 지도 시각화를 위한 지역별 ID 만들기
pop.info()
pop.head()
pop[&quot;시도&quot;].unique()
si_name = [None] * len(pop)
si_name

tmp_gu_dict = {
    &quot;수원&quot;: [&quot;장안구&quot;, &quot;권선구&quot;, &quot;팔달구&quot;, &quot;영통구&quot;],
    &quot;성남&quot;: [&quot;수정구&quot;, &quot;중원구&quot;, &quot;분당구&quot;],
    &quot;안양&quot;: [&quot;만안구&quot;, &quot;동안구&quot;],
    &quot;안산&quot;: [&quot;상록구&quot;, &quot;단원구&quot;],
    &quot;고양&quot;: [&quot;덕양구&quot;, &quot;일산동구&quot;, &quot;일산서구&quot;],
    &quot;용인&quot;: [&quot;처인구&quot;, &quot;기흥구&quot;, &quot;수지구&quot;],
    &quot;청주&quot;: [&quot;상당구&quot;, &quot;서원구&quot;, &quot;흥덕구&quot;, &quot;청원구&quot;],
    &quot;천안&quot;: [&quot;동남구&quot;, &quot;서북구&quot;],
    &quot;전주&quot;: [&quot;완산구&quot;, &quot;덕진구&quot;],
    &quot;포항&quot;: [&quot;남구&quot;, &quot;북구&quot;],
    &quot;창원&quot;: [&quot;의창구&quot;, &quot;성산구&quot;, &quot;진해구&quot;, &quot;마산합포구&quot;, &quot;마산회원구&quot;],
    &quot;부천&quot;: [&quot;오정구&quot;, &quot;원미구&quot;, &quot;소사구&quot;],
}
pop.head()
pop[&quot;광역시도&quot;].unique()
pop[&quot;시도&quot;].unique()</code></pre><ul>
<li>만들고자 하는 ID의 형태 <ul>
<li>서울 중구 </li>
<li>서울 서초</li>
<li>통영</li>
<li>남양주 </li>
<li>포항 북구 </li>
<li>인천 남동 </li>
<li>안양 만안 </li>
<li>안양 동안 </li>
<li>안산 단원<pre><code>(1) 일반 시 이름과 세종시, 광역시도 일반 구 정리
pop[&quot;광역시도&quot;]
pop[pop[&quot;광역시도&quot;] == &quot;세종특별자치시&quot;]
text1 = &quot;서울특별시&quot;
text2 = &quot;경산시&quot;
</code></pre></li>
</ul>
</li>
</ul>
<p>text1[:2] + &quot; &quot; + text2[:-1]</p>
<p>for idx, row in pop.iterrows():
    if row[&quot;광역시도&quot;][-3:] not in [&quot;광역시&quot;, &quot;특별시&quot;, &quot;자치시&quot;]:
        si_name[idx] = row[&quot;시도&quot;][:-1]</p>
<pre><code>elif row[&quot;광역시도&quot;] == &quot;세종특별자치시&quot;:
    si_name[idx] = &quot;세종&quot;

else:
    if len(row[&quot;시도&quot;]) == 2:
        si_name[idx] = row[&quot;광역시도&quot;][:2] + &quot; &quot; + row[&quot;시도&quot;]
    else:
        si_name[idx] = row[&quot;광역시도&quot;][:2] + &quot; &quot; + row[&quot;시도&quot;][:-1]</code></pre><p>text = &quot;마산회원구&quot;
text[2:-1]</p>
<p>(2) 행정구 
for idx, row in pop.iterrows():
    if row[&quot;광역시도&quot;][-3:] not in [&quot;광역시&quot;, &quot;특별시&quot;, &quot;자치시&quot;]:
        for keys, values in tmp_gu_dict.items():
            if row[&quot;시도&quot;] in values:
                if len(row[&quot;시도&quot;]) == 2:
                    si_name[idx] = keys + &quot; &quot; + row[&quot;시도&quot;]</p>
<pre><code>            elif row[&quot;시도&quot;] in [&quot;마산합포구&quot;, &quot;마산회원구&quot;]:
                si_name[idx] = keys + &quot; &quot; + row[&quot;시도&quot;][2:-1]

            else:
                si_name[idx] = keys + &quot; &quot; + row[&quot;시도&quot;][:-1]</code></pre><p>(3) 고성군
for idx, row in pop.iterrows():
    if row[&quot;광역시도&quot;][-3:] not in [&quot;광역시&quot;, &quot;특별시&quot;, &quot;자치시&quot;]:
        if row[&quot;시도&quot;][:-1] == &quot;고성&quot; and row[&quot;광역시도&quot;] == &quot;강원도&quot;: 
            si_name[idx] = &quot;고성(강원)&quot;
        elif row[&quot;시도&quot;][:-1] == &quot;고성&quot; and row[&quot;광역시도&quot;] == &quot;경상남도&quot;: 
            si_name[idx] = &quot;고성(경남)“
si_name
pop[&quot;ID&quot;] = si_name
pop
del pop[&quot;20-39세남자&quot;]
del pop[&quot;65세이상남자&quot;]
del pop[&quot;65세이상여자&quot;]
pop.head()</p>
<ol start="4">
<li>지도 그리기(카르토그램)
draw_korea_raw = pd.read_excel(&quot;../data/07_draw_korea_raw.xlsx&quot;)
draw_korea_raw</li>
</ol>
<p>draw_korea_raw_stacked = pd.DataFrame(draw_korea_raw.stack())
draw_korea_raw_stacked</p>
<p>draw_korea_raw_stacked.reset_index(inplace=True)
draw_korea_raw_stacked</p>
<p>draw_korea_raw_stacked.rename(
    columns={
        &quot;level_0&quot;: &quot;y&quot;,
        &quot;level_1&quot;: &quot;x&quot;,
        0: &quot;ID&quot;
    }, inplace=True
)
draw_korea_raw_stacked</p>
<p>draw_korea = draw_korea_raw_stacked</p>
<p>BORDER_LINES = [
    [(5, 1), (5, 2), (7, 2), (7, 3), (11, 3), (11, 0)], # 인천
    [(5, 4), (5, 5), (2, 5), (2, 7), (4, 7), (4, 9), (7, 9), (7, 7), (9, 7), (9, 5), (10, 5), (10, 4), (5, 4)], # 서울
    [(1, 7), (1, 8), (3, 8), (3, 10), (10, 10), (10, 7), (12, 7), (12, 6), (11, 6), (11, 5), (12, 5), (12, 4), (11, 4), (11, 3)], # 경기도
    [(8, 10), (8, 11), (6, 11), (6, 12)], # 강원도
    [(12, 5), (13, 5), (13, 4), (14, 4), (14, 5), (15, 5), (15, 4), (16, 4), (16, 2)], # 충청북도
    [(16, 4), (17, 4), (17, 5), (16, 5), (16, 6), (19, 6), (19, 5), (20, 5), (20, 4), (21, 4), (21, 3), (19, 3), (19, 1)], # 전라북도
    [(13, 5), (13, 6), (16, 6)], 
    [(13, 5), (14, 5)], # 대전시 # 세종시
    [(21, 2), (21, 3), (22, 3), (22, 4), (24, 4), (24, 2), (21, 2)], # 광주
    [(20, 5), (21, 5), (21, 6), (23, 6)], # 전라남도
    [(10, 8), (12, 8), (12, 9), (14, 9), (14, 8), (16, 8), (16, 6)], # 충청북도
    [(14, 9), (14, 11), (14, 12), (13, 12), (13, 13)], # 경상북도
    [(15, 8), (17, 8), (17, 10), (16, 10), (16, 11), (14, 11)], # 대구
    [(17, 9), (18, 9), (18, 8), (19, 8), (19, 9), (20, 9), (20, 10), (21, 10)], # 부산
    [(16, 11), (16, 13)],
    [(27, 5), (27, 6), (25, 6)]
]</p>
<p>draw_korea[&quot;ID&quot;][13].split()[1]</p>
<p>def plot_text_simple(draw_korea):
    for idx, row in draw_korea.iterrows():
        if len(row[&quot;ID&quot;].split()) == 2:
            dispname = &quot;{}\n{}&quot;.format(row[&quot;ID&quot;].split()[0], row[&quot;ID&quot;].split()[1])
        elif row[&quot;ID&quot;][:2] == &quot;고성&quot;:
            dispname = &quot;고성&quot;
        else:
            dispname = row[&quot;ID&quot;]</p>
<pre><code>    if len(dispname.splitlines()[-1]) &gt;= 3:
        fontsize, linespacing = 9.5, 1.5
    else:
        fontsize, linespacing = 11, 1.2


    plt.annotate(
        dispname,
        (row[&quot;x&quot;] + 0.5, row[&quot;y&quot;] + 0.5),
        weight=&quot;bold&quot;,
        fontsize=fontsize,
        linespacing=linespacing,
        ha=&quot;center&quot;, # 수평 정렬
        va=&quot;center&quot;, # 수직 정렬 
    )</code></pre><p>def simpleDraw(draw_korea):
    plt.figure(figsize=(8, 11))</p>
<pre><code>plot_text_simple(draw_korea)

for path in BORDER_LINES:
    ys, xs = zip(*path)
    plt.plot(xs, ys, c=&quot;black&quot;, lw=1.5)

plt.gca().invert_yaxis()
plt.axis(&quot;off&quot;)
plt.tight_layout()
plt.show()</code></pre><p>simpleDraw(draw_korea)</p>
<p>pop.head()</p>
<p>draw_korea.head()</p>
<p>pop.head()</p>
<p>draw_korea.head()</p>
<p>검증 작업</p>
<p>set(draw_korea[&quot;ID&quot;].unique()) - set(pop[&quot;ID&quot;].unique())
set(pop[&quot;ID&quot;].unique()) - set(draw_korea[&quot;ID&quot;].unique())</p>
<p>tmp_list = list(set(pop[&quot;ID&quot;].unique()) - set(draw_korea[&quot;ID&quot;].unique()))</p>
<p>for tmp in tmp_list:
    pop = pop.drop(pop[pop[&quot;ID&quot;] == tmp].index)
print(set(pop[&quot;ID&quot;].unique()) - set(draw_korea[&quot;ID&quot;].unique()))</p>
<p>merge (병합)
pop = pd.merge(pop, draw_korea, how=&quot;left&quot;, on=&quot;ID&quot;)
pop.head()</p>
<p>그림을 그리기 위한 데이터를 계산하는 함수 </p>
<ul>
<li>색상을 만들 때, 최소값을 흰색 </li>
<li>blockedMap: 인구현황(pop) </li>
<li>targetData: 그리고 싶은 컬럼</li>
</ul>
<p>def get_data_info(targetData, blockedMap):
    whitelabelmin = (
        max(blockedMap[targetData]) - min(blockedMap[targetData])
    ) * 0.25 + min(blockedMap[targetData])
    vmin = min(blockedMap[targetData])
    vmax = max(blockedMap[targetData])</p>
<pre><code>mapdata = blockedMap.pivot_table(index=&quot;y&quot;, columns=&quot;x&quot;, values=targetData)

return mapdata, vmax, vmin, whitelabelmin</code></pre><p>def get_data_info_for_zero_center(targetData, blockedMap):
    whitelabelmin = 5 
    tmp_max = max(
        [np.abs(min(blockedMap[targetData])), np.abs(max(blockedMap[targetData]))]
    )
    vmin, vmax = -tmp_max, tmp_max
    mapdata = blockedMap.pivot_table(index=&quot;y&quot;, columns=&quot;x&quot;, values=targetData)
    return mapdata, vmax, vmin, whitelabelmin</p>
<p>def plot_text(targetData, blockedMap, whitelabelmin):
    for idx, row in blockedMap.iterrows():
        if len(row[&quot;ID&quot;].split()) == 2:
            dispname = &quot;{}\n{}&quot;.format(row[&quot;ID&quot;].split()[0], row[&quot;ID&quot;].split()[1])
        elif row[&quot;ID&quot;][:2] == &quot;고성&quot;:
            dispname = &quot;고성&quot;
        else:
            dispname = row[&quot;ID&quot;]</p>
<pre><code>    if len(dispname.splitlines()[-1]) &gt;= 3:
        fontsize, linespacing = 9.5, 1.5
    else:
        fontsize, linespacing = 11, 1.2


    annocolor = &quot;white&quot; if np.abs(row[targetData]) &gt; whitelabelmin else &quot;black&quot;
    plt.annotate(
        dispname,
        (row[&quot;x&quot;] + 0.5, row[&quot;y&quot;] + 0.5),
        weight=&quot;bold&quot;,
        color=annocolor,
        fontsize=fontsize,
        linespacing=linespacing,
        ha=&quot;center&quot;, # 수평 정렬
        va=&quot;center&quot;, # 수직 정렬 
    )</code></pre><p>def drawKorea(targetData, blockedMap, cmapname, zeroCenter=False):
    if zeroCenter:
        masked_mapdata, vmax, vmin, whitelabelmin = get_data_info_for_zero_center(targetData, blockedMap)</p>
<pre><code>if not zeroCenter:
    masked_mapdata, vmax, vmin, whitelabelmin = get_data_info(targetData, blockedMap)

plt.figure(figsize=(8, 11))
plt.pcolor(masked_mapdata, vmin=vmin, vmax=vmax, cmap=cmapname, edgecolor=&quot;#aaaaaa&quot;, linewidth=0.5)

plot_text(targetData, blockedMap, whitelabelmin)

for path in BORDER_LINES:
    ys, xs = zip(*path)
    plt.plot(xs, ys, c=&quot;black&quot;, lw=1.5)

plt.gca().invert_yaxis()
plt.axis(&quot;off&quot;)
plt.tight_layout()
cb = plt.colorbar(shrink=0.1, aspect=10)
cb.set_label(targetData)
plt.show()</code></pre><p>pop.head()</p>
<p>drawKorea(&quot;인구수합계&quot;, pop, &quot;Blues&quot;)</p>
<p>pop</p>
<p>pop[&quot;소멸위기지역&quot;] = [1 if con else 0 for con in pop[&quot;소멸위기지역&quot;]]
drawKorea(&quot;소멸위기지역&quot;, pop, &quot;Reds&quot;)</p>
<p>pop.head()</p>
<p>pop[&quot;여성비&quot;] = (pop[&quot;인구수여자&quot;] / pop[&quot;인구수합계&quot;] - 0.5) * 100
drawKorea(&quot;여성비&quot;, pop, &quot;RdBu&quot;, zeroCenter=True)</p>
<p>pop[&quot;2030여성비&quot;] = (pop[&quot;20-39세여자&quot;] / pop[&quot;20-39세합계&quot;] - 0.5) * 100
drawKorea(&quot;2030여성비&quot;, pop, &quot;RdBu&quot;, zeroCenter=True)</p>
<p>import folium
import json </p>
<p>pop_folium = pop.set_index(&quot;ID&quot;)
pop_folium.head()</p>
<p>geo_path = &quot;../data/07_skorea_municipalities_geo_simple.json&quot;
geo_str = json.load(open(geo_path, encoding=&quot;utf-8&quot;))</p>
<h1 id="인구수합계-지도-시각화">인구수합계 지도 시각화</h1>
<p>mymap = folium.Map(location=[36.2002, 127.054], zoom_start=7)
mymap.choropleth(
    geo_data=geo_str,
    data=pop_folium[&quot;인구수합계&quot;],
    key_on=&quot;feature.id&quot;,
    columns=[pop_folium.index, pop_folium[&quot;인구수합계&quot;]],
    fill_color=&quot;YlGnBu&quot;
)</p>
<p>mymap</p>
<h1 id="소멸위기지역-지도-시각화">소멸위기지역 지도 시각화</h1>
<p>mymap = folium.Map(location=[36.2002, 127.054], zoom_start=7)
mymap.choropleth(
    geo_data=geo_str,
    data=pop_folium[&quot;소멸위기지역&quot;],
    key_on=&quot;feature.id&quot;,
    columns=[pop_folium.index, pop_folium[&quot;소멸위기지역&quot;]],
    fill_color=&quot;PuRd&quot;
)</p>
<p>mymap</p>
<h1 id="데이터-저장">데이터 저장</h1>
<p>draw_korea.to_csv(&quot;../data/07_draw_korea.csv&quot;, encoding=&quot;utf-8&quot;, sep=&quot;,&quot;)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 33]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-33</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-33</guid>
            <pubDate>Tue, 18 Jul 2023 04:51:40 GMT</pubDate>
            <description><![CDATA[<p>[ 06. Naver API ]</p>
<ol>
<li>네이버 API 사용 등록 </li>
</ol>
<ul>
<li>네이버 개발자 센터 </li>
<li><a href="https://developers.naver.com/main/">https://developers.naver.com/main/</a></li>
<li>Application <ul>
<li>어플리케이션 등록</li>
<li>어플리케이션 이름 ds_study </li>
<li>사용 API <ul>
<li>검색</li>
<li>데이터랩(검색어트렌드)</li>
<li>데이터랩(쇼핑인사이트)</li>
</ul>
</li>
<li>환경추가 <ul>
<li>WEB 설정 </li>
<li><a href="http://localhost">http://localhost</a></li>
</ul>
</li>
<li>Clienct ID: H2_6lcavpVyHW8211rUq</li>
<li>Clienct Secret: D1XBjnKTe9</li>
<li><a href="https://developers.naver.com/apps/#/myapps/H2_6lcavpVyHW8211rUq/overview">https://developers.naver.com/apps/#/myapps/H2_6lcavpVyHW8211rUq/overview</a> </li>
</ul>
</li>
</ul>
<ol start="2">
<li>네이버 검색 API 사용하기</li>
</ol>
<ul>
<li><a href="https://developers.naver.com/docs/serviceapi/search/blog/blog.md#%EB%B8%94%EB%A1%9C%EA%B7%B8">https://developers.naver.com/docs/serviceapi/search/blog/blog.md#%EB%B8%94%EB%A1%9C%EA%B7%B8</a> # 개발 가이드 </li>
<li>urllib: http 프로토콜에 따라서 서버의 요청/응답을 처리하기 위한 모듈 </li>
<li>urllib.request: 클라이언트의 요청을 처리하는 모듈 </li>
<li>urllib.parse: url 주소에 대한 분석 
검색: 블로그(blog)</li>
</ul>
<p>#네이버 검색 Open API 예제 - 블로그 검색</p>
<pre><code>import os
import sys
import urllib.request
client_id = &quot;H2_6lcavpVyHW8211rUq&quot;
client_secret = &quot;D1XBjnKTe9&quot;

encText = urllib.parse.quote(&quot;파이썬&quot;)
url = &quot;https://openapi.naver.com/v1/search/blog?query=&quot; + encText # json 결과
#url = &quot;https://openapi.naver.com/v1/search/blog.xml?query=&quot; + encText # xml 결과
request = urllib.request.Request(url)
request.add_header(&quot;X-Naver-Client-Id&quot;,client_id)
request.add_header(&quot;X-Naver-Client-Secret&quot;,client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
    response_body = response.read()
    print(response_body.decode(&#39;utf-8&#39;))
else:
    print(&quot;Error Code:&quot; + rescode)

response, response.getcode(), response.code, response.status

글자로 읽을 경우, decode utf-8 설정 
print(response_body.decode(&quot;utf-8&quot;))

검색: 책(book)

#네이버 검색 Open API 예제 - 블로그 검색
import os
import sys
import urllib.request

client_id = &quot;H2_6lcavpVyHW8211rUq&quot;
client_secret = &quot;D1XBjnKTe9&quot;

encText = urllib.parse.quote(&quot;파이썬&quot;)
url = &quot;https://openapi.naver.com/v1/search/book?query=&quot; + encText # json 결과
#url = &quot;https://openapi.naver.com/v1/search/blog.xml?query=&quot; + encText # xml 결과
request = urllib.request.Request(url)
request.add_header(&quot;X-Naver-Client-Id&quot;,client_id)
request.add_header(&quot;X-Naver-Client-Secret&quot;,client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
    response_body = response.read()
    print(response_body.decode(&#39;utf-8&#39;))
else:
    print(&quot;Error Code:&quot; + rescode)

검색: 영화(movie)

#네이버 검색 Open API 예제 - 블로그 검색
import os
import sys
import urllib.request

client_id = &quot;H2_6lcavpVyHW8211rUq&quot;
client_secret = &quot;D1XBjnKTe9&quot;

encText = urllib.parse.quote(&quot;파이썬&quot;)
url = &quot;https://openapi.naver.com/v1/search/movie?query=&quot; + encText # json 결과
#url = &quot;https://openapi.naver.com/v1/search/blog.xml?query=&quot; + encText # xml 결과
request = urllib.request.Request(url)
request.add_header(&quot;X-Naver-Client-Id&quot;,client_id)
request.add_header(&quot;X-Naver-Client-Secret&quot;,client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
    response_body = response.read()
    print(response_body.decode(&#39;utf-8&#39;))
else:
    print(&quot;Error Code:&quot; + rescode)

검색: 카페(cafearticle)

#네이버 검색 Open API 예제 - 블로그 검색
import os
import sys
import urllib.request

client_id = &quot;H2_6lcavpVyHW8211rUq&quot;
client_secret = &quot;D1XBjnKTe9&quot;

encText = urllib.parse.quote(&quot;파이썬&quot;)
url = &quot;https://openapi.naver.com/v1/search/cafearticle?query=&quot; + encText # json 결과
#url = &quot;https://openapi.naver.com/v1/search/blog.xml?query=&quot; + encText # xml 결과
request = urllib.request.Request(url)
request.add_header(&quot;X-Naver-Client-Id&quot;,client_id)
request.add_header(&quot;X-Naver-Client-Secret&quot;,client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
    response_body = response.read()
    print(response_body.decode(&#39;utf-8&#39;))
else:
    print(&quot;Error Code:&quot; + rescode)

</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 32]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-32</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-32</guid>
            <pubDate>Tue, 18 Jul 2023 04:47:53 GMT</pubDate>
            <description><![CDATA[<p>[ 함수(def)의 기초 ]</p>
<pre><code>def test_def(a, b):
    return a + b
c = test_def(2, 3)
c</code></pre><ul>
<li><p>가장 기초적인 모양의 def 정의 </p>
</li>
<li><p>이름(test_df)과 입력 인자(a, b)를 정해준다 </p>
</li>
<li><p>출력(return)을 작성</p>
<ul>
<li>전역변수(global)<pre><code>a = 1 
</code></pre></li>
</ul>
</li>
</ul>
<p>def edit_a(i):
    # 지역변수(local)
    global a 
    a = I 
edit_a(2)
a</p>
<pre><code>
- global 변수를 def 내에서 사용하고 싶다면 global로 선언</code></pre><p>def edit_a(i):
    a = I 
edit_a(5)
print(a)</p>
<pre><code>
- def 내에서의 변수와 밖에서의 변수는 같은 이름이어도 같은 것이 아니다
- y = asin(2\pi ft + t_0) + b</code></pre><p>import matplotlib.pyplot as plt 
import numpy as np 
%matplotlib inline 
def plotSinWave(amp, freq, endTime, sampleTime, startTime, bias):
    &quot;&quot;&quot;
    plot sine wave 
    y = a sin(2 pi f t + t_0) + b
    &quot;&quot;&quot;
    time = np.arange(startTime, endTime, sampleTime)
    result = amp * np.sin(2 * np.pi * freq * time + startTime) + bias </p>
<pre><code>plt.figure(figsize=(12, 6))
plt.plot(time, result)
plt.grid(True)
plt.xlabel(&quot;time&quot;)
plt.ylabel(&quot;sin&quot;)
plt.title(str(amp) + &quot;*sin(2*pi&quot; + str(freq) + &quot;*t+&quot; + str(startTime) + &quot;)+&quot; + str(bias))
plt.show()</code></pre><p>plotSinWave(2, 1, 10, 0.01, 0.5, 0)
def plotSinWave(**kwargs):
    &quot;&quot;&quot;
    plot sine wave 
    y = a sin(2 pi f t + t_0) + b
    &quot;&quot;&quot;
    endTime = kwargs.get(&quot;endTime&quot;, 1)
    sampleTime = kwargs.get(&quot;sampleTime&quot;, 0.01)
    amp = kwargs.get(&quot;amp&quot;, 1)
    freq = kwargs.get(&quot;freq&quot;, 1)
    startTime = kwargs.get(&quot;startTime&quot;, 0)
    bias = kwargs.get(&quot;bias&quot;, 0)
    figsize = kwargs.get(&quot;figsize&quot;, (12, 6))</p>
<pre><code>time = np.arange(startTime, endTime, sampleTime)
result = amp * np.sin(2 * np.pi * freq * time + startTime) + bias 

plt.figure(figsize=(12, 6))
plt.plot(time, result)
plt.grid(True)
plt.xlabel(&quot;time&quot;)
plt.ylabel(&quot;sin&quot;)
plt.title(str(amp) + &quot;*sin(2*pi&quot; + str(freq) + &quot;*t+&quot; + str(startTime) + &quot;)+&quot; + str(bias))
plt.show()</code></pre><p>plotSinWave()
plotSinWave(amp=2, freq=0.5, endTime=10)</p>
<pre><code>[ 내가 만든 함수 import ]
- drawSinWave.py
%%writefile ./drawSinWave.py
</code></pre><p>import numpy as np 
import matplotlib.pyplot as plt </p>
<p>def plotSinWave(**kwargs):
    &quot;&quot;&quot;
    plot sine wave 
    y = a sin(2 pi f t + t_0) + b
    &quot;&quot;&quot;
    endTime = kwargs.get(&quot;endTime&quot;, 1)
    sampleTime = kwargs.get(&quot;sampleTime&quot;, 0.01)
    amp = kwargs.get(&quot;amp&quot;, 1)
    freq = kwargs.get(&quot;freq&quot;, 1)
    startTime = kwargs.get(&quot;startTime&quot;, 0)
    bias = kwargs.get(&quot;bias&quot;, 0)
    figsize = kwargs.get(&quot;figsize&quot;, (12, 6))</p>
<pre><code>time = np.arange(startTime, endTime, sampleTime)
result = amp * np.sin(2 * np.pi * freq * time + startTime) + bias 
plt.figure(figsize=(12, 6))
plt.plot(time, result)
plt.grid(True)
plt.xlabel(&quot;time&quot;)
plt.ylabel(&quot;sin&quot;)
plt.title(str(amp) + &quot;*sin(2*pi&quot; + str(freq) + &quot;*t+&quot; + str(startTime) + &quot;)+&quot; + str(bias))
plt.show()</code></pre><p>if <strong>name</strong> == &quot;<strong>main</strong>&quot;:
    print(&quot;hello world~!!&quot;)
    print(&quot;this is test graph!!&quot;)
    plotSinWave(amp=1, endTime=2)</p>
<ul>
<li>Overwriting ./drawSinWave.py</li>
</ul>
<p>import drawSinWave as dS
dS.plotSinWave()
dS.plotSinWave(freq=5)</p>
<pre><code>[ 그래프 한글 설정 ]
%%writefile ./set_matplotlib_hangul.py
</code></pre><p>import platform
import matplotlib.pyplot as plt 
from matplotlib import font_manager, rc</p>
<p>path = &quot;c:/Windows/Fonts/malgun.ttf&quot;</p>
<p>if platform.system() == &quot;Darwin&quot;:
    print(&quot;Hangul OK in your MAC!!!&quot;)
    rc(&quot;font&quot;, family=&quot;Arial Unicode MS&quot;)
elif platform.system() == &quot;Windows&quot;:
    font_name = font_manager.FontProperties(fname=path).get_name()
    print(&quot;Hangul OK in your Windows!!!&quot;)
    rc(&quot;font&quot;, family=font_name)
else:
    print(&quot;Unknown system.. sorry<del>~</del>&quot;)</p>
<p>plt.rcParams[&quot;axes.unicode_minus&quot;] = False </p>
<ul>
<li>Overwriting ./set_matplotlib_hangul.py
import set_matplotlib_hangul
plt.title(&quot;한글&quot;)<pre><code></code></pre></li>
</ul>
<p>[ 2. Fbprophet 기초 ]</p>
<pre><code>import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline 

time = np.linspace(0, 1, 365*2)
result = np.sin(2*np.pi*12*time)
ds = pd.date_range(&quot;2018-01-01&quot;, periods=365*2, freq=&quot;D&quot;)
df = pd.DataFrame({&quot;ds&quot;: ds, &quot;y&quot;: result})
df.head()

df[&quot;y&quot;].plot(figsize=(10, 6));

from fbprophet import Prophet

m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df);

future = m.make_future_dataframe(periods=30)
forecast = m.predict(future)

m.plot(forecast);

2
time = np.linspace(0, 1, 365*2)
result = np.sin(2*np.pi*12*time) + time 

ds = pd.date_range(&quot;2018-01-01&quot;, periods=365*2, freq=&quot;D&quot;)
df = pd.DataFrame({&quot;ds&quot;: ds, &quot;y&quot;: result})

df[&quot;y&quot;].plot(figsize=(10, 6));

m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df)
future = m.make_future_dataframe(periods=30)
forecast = m.predict(future)
m.plot(forecast);

3
time = np.linspace(0, 1, 365*2)
result = np.sin(2*np.pi*12*time) + time + np.random.randn(365*2)/4

ds = pd.date_range(&quot;2018-01-01&quot;, periods=365*2, freq=&quot;D&quot;)
df = pd.DataFrame({&quot;ds&quot;: ds, &quot;y&quot;: result})

df[&quot;y&quot;].plot(figsize=(10, 6));
m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df)
future = m.make_future_dataframe(periods=30)
forecast = m.predict(future)
m.plot(forecast);

import pandas as pd 
import pandas_datareader as web 
import numpy as np 
import matplotlib.pyplot as plt 

from fbprophet import Prophet
from datetime import datetime 

%matplotlib inline 

pinkwink_web = pd.read_csv(
    &quot;../data/05_PinkWink_Web_Traffic.csv&quot;,
    encoding=&quot;utf-8&quot;,
    thousands=&quot;,&quot;,
    names=[&quot;date&quot;, &quot;hit&quot;],
    index_col=0
)

pinkwink_web = pinkwink_web[pinkwink_web[&quot;hit&quot;].notnull()]
pinkwink_web.head()</code></pre><ul>
<li>전체 데이터 그려보기 <pre><code>pinkwink_web[&quot;hit&quot;].plot(figsize=(12, 4), grid=True);
</code></pre></li>
</ul>
<h1 id="trend-분석을-시각화하기-위한-x축-값을-만들기">trend 분석을 시각화하기 위한 x축 값을 만들기</h1>
<p>time = np.arange(0, len(pinkwink_web))
traffic = pinkwink_web[&quot;hit&quot;].values
fx = np.linspace(0, time[-1], 1000)</p>
<h1 id="에러를-계산할-함수">에러를 계산할 함수</h1>
<p>def error(f, x, y):
    return np.sqrt(np.mean((f(x) - y) ** 2))</p>
<p>fp1 = np.polyfit(time, traffic, 1)
f1 = np.poly1d(fp1)</p>
<p>f2p = np.polyfit(time, traffic, 2)
f2 = np.poly1d(f2p)</p>
<p>f3p = np.polyfit(time, traffic, 3)
f3 = np.poly1d(f3p)</p>
<p>f15p = np.polyfit(time, traffic, 15)
f15 = np.poly1d(f15p)</p>
<p>print(error(f1, time, traffic))
print(error(f2, time, traffic))
print(error(f3, time, traffic))
print(error(f15, time, traffic))</p>
<p>plt.figure(figsize=(12, 4))
plt.scatter(time, traffic, s=10)
plt.plot(fx, f1(fx), lw=4, label=&#39;f1&#39;)
plt.plot(fx, f2(fx), lw=4, label=&#39;f2&#39;)
plt.plot(fx, f3(fx), lw=4, label=&#39;f3&#39;)
plt.plot(fx, f15(fx), lw=4, label=&#39;f15&#39;)</p>
<p>plt.grid(True, linestyle=&quot;-&quot;, color=&quot;0.75&quot;)
plt.legend(loc=2)
plt.show()</p>
<p>df = pd.DataFrame({&quot;ds&quot;: pinkwink_web.index, &quot;y&quot;: pinkwink_web[&quot;hit&quot;]})
df.reset_index(inplace=True)
df[&quot;ds&quot;] = pd.to_datetime(df[&quot;ds&quot;], format=&quot;%y. %m. %d.&quot;)
del df[&quot;date&quot;]
df.head()</p>
<p>m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df);</p>
<h1 id="60일에-해당하는-데이터-예측">60일에 해당하는 데이터 예측</h1>
<p>future = m.make_future_dataframe(periods=60)
future.tail()</p>
<h1 id="예측-결과는-상한하한의-범위를-포함해서-얻어진다">예측 결과는 상한/하한의 범위를 포함해서 얻어진다</h1>
<p>forecast = m.predict(future)
forecast[[&quot;ds&quot;, &quot;yhat&quot;, &quot;yhat_lower&quot;, &quot;yhat_upper&quot;]].tail()</p>
<p>m.plot(forecast);</p>
<p>m.plot_components(forecast);</p>
<pre><code>[ 4. 주식 데이터 fbprophet 으로 분석하기 ]
</code></pre><ol>
<li>yahoo finance </li>
</ol>
<ul>
<li><a href="https://finance.yahoo.com/quote/035420.KS/history?p=035420.KS&amp;guccounter=1">https://finance.yahoo.com/quote/035420.KS/history?p=035420.KS&amp;guccounter=1</a>
from bs4 import BeautifulSoup
from urllib.request import urlopen, Request</li>
</ul>
<p>url = &quot;<a href="https://finance.yahoo.com/quote/035420.KS/history?p=035420.KS&amp;guccounter=1&quot;">https://finance.yahoo.com/quote/035420.KS/history?p=035420.KS&amp;guccounter=1&quot;</a>
req = Request(url, headers={&quot;User-Agent&quot;: &quot;Chrome&quot;})
page = urlopen(req).read()
soup = BeautifulSoup(page, &quot;html.parser&quot;)
table = soup.find(&quot;table&quot;)
df_raw = pd.read_html(str(table))[0]
df_raw.head()</p>
<h1 id="fbprophet을-사용하는-형식에-맞춰준-뒤-맨-마지막-nan-값이-있어서-제외">fbprophet을 사용하는 형식에 맞춰준 뒤, 맨 마지막 NaN 값이 있어서 제외</h1>
<p>df_tmp = pd.DataFrame({&quot;ds&quot;: df_raw[&quot;Date&quot;], &quot;y&quot;: df_raw[&quot;Close*&quot;]})
df_target = df_tmp[:-1]
df_target.head()</p>
<h1 id="harcopy-후-날짜를-fbprophet이-요구하는-형태로-변형">harcopy 후, 날짜를 fbprophet이 요구하는 형태로 변형</h1>
<p>df = df_target.copy()
df[&quot;ds&quot;] = pd.to_datetime(df_target[&quot;ds&quot;], format=&quot;%b %d, %Y&quot;)
df.head()</p>
<p>df.info()</p>
<h1 id="데이터형-변환-object--float">데이터형 변환 object =&gt; float</h1>
<p>df[&quot;y&quot;] = df[&quot;y&quot;].astype(&quot;float&quot;)
df.info()</p>
<p>m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df);</p>
<p>future = m.make_future_dataframe(periods=30)
forecast = m.predict(future)
forecast[[&quot;ds&quot;, &quot;yhat&quot;, &quot;yhat_lower&quot;, &quot;yhat_upper&quot;]].tail()</p>
<p>plt.figure(figsize=(12, 6))
plt.plot(df[&quot;ds&quot;], df[&quot;y&quot;], label=&quot;real&quot;)
plt.grid(True)
plt.show()</p>
<p>m.plot_components(forecast);</p>
<ol start="2">
<li>KIA
!pip install yfinance</li>
</ol>
<h1 id="기아-자동차의-종목코드를-가지고-기간을-입력한다">기아 자동차의 종목코드를 가지고 기간을 입력한다</h1>
<p>import yfinance as yf
from pandas_datareader import data </p>
<p>yf.pdr_override()</p>
<p>start_date = &quot;2010-03-01&quot;
end_date = &quot;2018-02-28&quot;
KIA = data.get_data_yahoo(&quot;000270.KS&quot;, start_date, end_date)</p>
<p>KIA.head()</p>
<p>KIA[&quot;Close&quot;].plot(figsize=(12, 6), grid=True);</p>
<h1 id="accuracy-확인을-위한-데이터">accuracy 확인을 위한 데이터</h1>
<p>KIA_trunc = KIA[:&quot;2017-11-30&quot;]
KIA_trunc.head()</p>
<h1 id="forecast를-위한-준비">forecast를 위한 준비</h1>
<p>df = pd.DataFrame({&quot;ds&quot;: KIA_trunc.index, &quot;y&quot;:KIA_trunc[&quot;Close&quot;]})
df.reset_index(inplace=True)
del df[&quot;Date&quot;]
df.head()</p>
<p>m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df);</p>
<p>future = m.make_future_dataframe(periods=90)
forecast = m.predict(future)
forecast[[&quot;ds&quot;, &quot;yhat&quot;, &quot;yhat_lower&quot;, &quot;yhat_upper&quot;]].tail()</p>
<p>m.plot(forecast);
m.plot_components(forecast);
KIA[&quot;Close&quot;]
plt.figure(figsize=(12, 6))
plt.plot(KIA.index, KIA[&quot;Close&quot;], label=&quot;real&quot;)
plt.plot(forecast[&quot;ds&quot;], forecast[&quot;yhat&quot;], label=&quot;forecast&quot;)
plt.grid(True)
plt.legend()
plt.show()</p>
<ol start="3">
<li>대한항공
003490 대한항공 </li>
</ol>
<p>start_date = &quot;2010-03-01&quot;
end_date = &quot;2018-02-28&quot;
KoreaAir = data.get_data_yahoo(&quot;003490.KS&quot;, start_date, end_date)
KoreaAir.tail()
KoreaAir[&quot;Close&quot;].plot(figsize=(12, 6), grid=True);</p>
<h1 id="accuracy-데이터-분리">accuracy 데이터 분리</h1>
<p>KoreaAir_trunc = KoreaAir[:&quot;2017-11-30&quot;]
KoreaAir_trunc.tail()</p>
<h1 id="forecast를-위한-준비-1">forecast를 위한 준비</h1>
<p>df = pd.DataFrame({&quot;ds&quot;: KoreaAir_trunc.index, &quot;y&quot;: KoreaAir_trunc[&quot;Close&quot;]})
df.reset_index(inplace=True)
del df[&quot;Date&quot;]
df.head()
m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df)
future = m.make_future_dataframe(periods=90)
forecast = m.predict(future)
forecast[[&quot;ds&quot;, &quot;yhat&quot;, &quot;yhat_lower&quot;, &quot;yhat_upper&quot;]].tail()
m.plot(forecast);
m.plot_components(forecast);</p>
<h1 id="실제와-예측값-비교-그래프">실제와 예측값 비교 그래프</h1>
<p>plt.figure(figsize=(12, 6))
plt.plot(KoreaAir.index, KoreaAir[&quot;Close&quot;], label=&quot;real&quot;)
plt.plot(forecast[&quot;ds&quot;], forecast[&quot;yhat&quot;], label=&quot;forecast&quot;)
plt.grid(True)
plt.legend()
plt.show()</p>
<ol start="4">
<li>조금 특이한 형태의 데이터에 대한 forecast<h1 id="logistic-성장형-그래프를-가진-데이터에-대한-forecast">Logistic 성장형 그래프를 가진 데이터에 대한 forecast</h1>
df = pd.read_csv(&quot;../data/05_example_wp_R2.csv&quot;, index_col=0)
df[&quot;y&quot;].plot(figsize=(12, 4), grid=True); </li>
</ol>
<p>df[&quot;cap&quot;] = 8.5
df.tail()</p>
<p>m = Prophet(growth=&quot;logistic&quot;, daily_seasonality=True)
m.fit(df);</p>
<p>future = m.make_future_dataframe(periods=1826)
future[&quot;cap&quot;] = 8.5 
forecast = m.predict(future)
m.plot(forecast);</p>
<pre><code>5. 비트코인 데이터 fbprophet으로 분석하기
- https://bitcoincharts.com/charts/bitstampUSD#rg60ztgSzm1g10```
zm2g25zv
import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import time 

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from bs4 import BeautifulSoup
from fbprophet import Prophet

%matplotlib inline 

url = &quot;https://bitcoincharts.com/charts/bitstampUSD#rg730ztgSzm1g10zm2g25zv&quot;
driver = webdriver.Chrome(&quot;../driver/chromedriver&quot;)
driver.get(url)

#스크롤 
xpath = &#39;//*[@id=&quot;content_chart&quot;]/div/div[2]/a&#39;
variable = driver.find_element_by_xpath(xpath)
driver.execute_script(&quot;return arguments[0].scrollIntoView();&quot;, variable)
variable.click()


html = driver.page_source
soup = BeautifulSoup(html, &quot;html.parser&quot;)
table = soup.find(&quot;table&quot;, &quot;data&quot;)
table

driver.quit()

df = pd.read_html(str(table))
bitcoin = df[0]
bitcoin.head()

!rm -rf &quot;../data/05_bitcoin_history.csv&quot;
bitcoin.to_csv(&quot;../data/05_bitcoin_history.csv&quot;, sep=&quot;,&quot;)

bitcoin = pd.read_csv(&quot;../data/05_bitcoin_history.csv&quot;, index_col=0)
bitcoin.tail()

#분석하고 싶은 항목(Close)만 가지고, Prophet 적용 

df = pd.DataFrame({&quot;ds&quot;: bitcoin[&quot;Timestamp&quot;], &quot;y&quot;: bitcoin[&quot;Close&quot;]})
m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df);

#향후 30일간의 forecast
future = m.make_future_dataframe(periods=30)
forecast = m.predict(future)
m.plot(forecast);

#트렌드 
m.plot_components(forecast);</code></pre><ul>
<li>미니 프로젝트 시작 중 웹크롤링 다음 가장 어려웠다. </li>
<li>눈으로 1번, 무작정 따라하기 1번, 개인연습 1번씩 하기로 다짐 :)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 31]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-31</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-31</guid>
            <pubDate>Thu, 13 Jul 2023 14:35:13 GMT</pubDate>
            <description><![CDATA[<p>[ 시계열 분석 ]
001-002. fbprophet 설치</p>
<ul>
<li>시계열 데이터란 시간의 흐름에 대해 특정 패턴과 같은 정보를 
가지고 있는 경우를 시계열 데이터라고 한다.</li>
<li>통계학에서 시계열 데이터라는 것 만으로도 많은 학습량을 가지고 
있다.</li>
<li>보통 데이터 분석에서 개요 정도의 레벨에서 접근하는 시계열은 
대부분 Forecast다.</li>
<li>시계열 데이터에서 주기성을 가지고 있는 데이터를 다루는 경우 Seasonal Time Series라고 한다.</li>
<li>fb-Prophet : 통계적 지식이나 이론에 대해 이야기할 것이 아니고 그저 목표로 하는 데이터가 하필 시계열 데이터여서 단일 함수로 쉽게 접근할 수 없을 때 사용하는 도구, Seasonal Time Series에 대한 
모듈로 Facebook에서 만들었다.</li>
<li>윈도우 유저는 Visual C ++ Build Tool을 먼저 설치해야 한다.</li>
<li><a href="https://go.microsoft.com/fwlink/?LinkId=691126">https://go.microsoft.com/fwlink/?LinkId=691126</a></li>
<li>conda install pandas-datareader</li>
<li>conda install –c conda-forge fbprophet 로 설치</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 30]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-30</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-30</guid>
            <pubDate>Wed, 12 Jul 2023 06:06:48 GMT</pubDate>
            <description><![CDATA[<p>&lt; 입력 창에 글자 넣기 코드 &gt;</p>
<pre><code>some_tag = driver.find_element_by_id(‘’‘gsc-i-idl’‘’)
some_tag.send_keys(‘data science’)</code></pre><p>&lt; 버튼 클릭하는 코드 실행 &gt;</p>
<pre><code>xpath = ‘’‘//*[@id=“____gcse_0”]/div/form/table/tbody/tr/td[2]/button’‘’
some_tag = driver.find_element_by_xpath(xpath).click()
</code></pre><p>&lt; 현재 화면 html 코드 가져오기 &gt;</p>
<pre><code>from bs4 import BeautifulSoup

req = driver.page_source
soup = BeautifulSoup(req, ‘html.parser’)
#광고를 제외한 검색 결과가 나타나는 태그를 찾을 수 있음
#검색결과 하나하나를 의미하는 태그를 찾을 수 있다.
result = soup.find_all(‘div’, ‘gsc-webResult gsc-result’)
result[0]</code></pre><p>으로 접근 가능하다.</p>
<p>006-009. selenium으로 데이터 얻어오기</p>
<ul>
<li><a href="https://www.opinet.co.kr/user/main/mainView.do">https://www.opinet.co.kr/user/main/mainView.do</a></li>
<li>위 링크는 대한민국 주유 가격을 알아보는 사이트</li>
<li>싼 주유소 찾기에서 지역별 선택</li>
<li>사이트 구조 확인</li>
<li>목표 데이터는 브랜드, 가격, 셀프 주유 여부, 위치</li>
<li>지역에서 광역시도와 시구 정보를 입력하면 지도가 바뀌고 주유소 정보가 로딩된다.</li>
<li>셀프여부를 알려주고 휘발유 가격도 있지만 상표와 주소 정보를 다루기엔 까다로움</li>
<li>BeautifulSoup 보다는 selenium으로 접근하는 것이 좋아보인다.</li>
</ul>
<p>&lt; 주유 가격 확인 &gt;</p>
<pre><code>from selenium import webdriver
driver = webdriver.Chrome(“../driver/chromedriver”)
driver.get(“http://www.opinet.co.kr”)
# 페이지 전환이 되지 않을 경우
#driver.get(“http://www.opinet.co.kr/searRgSelect.do”)
#로 한번 더 실행</code></pre><ul>
<li>지역 시/도/광역시 id는 SIDO_NMO, dirver에서 해당 id를 sido_list_raw 변수로 저장</li>
<li>sido_list_raw 변수에 리스트 결과값을 저장한 sido_names, sido_names의 값을 send_keys를 이용해서 내보내면 된다.</li>
<li>두 번째 리스트인 시/군/구 항목도 동일하게 id, option을 확인 (id=“SIGUNGU_NM”)
&lt; option 에서 리스트 안의 변수값들 저장 &gt;<pre><code>gu_list_raw = driver.find_element_by_id(“SIGUNGU_NMO”)
gu_list = gu_list_raw.find_elements_by_tag_name(“option”)
</code></pre></li>
</ul>
<p>gu_names = [option.get_attribute(“value”) for option in gu_list]
gu_names.remove(“”)
gu_names</p>
<pre><code>&lt; send_keys(gu_names[num])로 해당 값을 변경하기 &gt;</code></pre><p>element_get_excel = driver.find_element_by_id(“glopopd_excel”).click()</p>
<pre><code>
&lt; 반복문으로 모든 구의 데이터 엑셀 파일로 저장 &gt;</code></pre><p>import time
fro tqdm import tqdm_notebook</p>
<p>for gu in tqdm_notebook(gu_names):
    element = driver.find_element_by_id(“SIGUNGU_NMO”)
    element.send_keys(gu)
    time.sleep(2)</p>
<pre><code>element_get_excel = driver.find_element_by_id(“glopopd_excel”).click()
time.sleep(1)</code></pre><pre><code>
- download 폴더에 25개의 엑셀 파일이 생겼다면 ds_study – data 폴더에 넣기
- 모든 작업이 끝나면 반드시 driver.close() 실행하기

&lt; 파일 목록 한번에 불러오기 &gt;</code></pre><p>import pandas as pd
from glob import glob</p>
<p>glop(“../data/지역_*.xls”)</p>
<pre><code>&lt; 파일명 저장 &gt;</code></pre><p>stations_files = glob(“../data/지역_*.xls”)
stations_files</p>
<pre><code></code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 29]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-29</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-29</guid>
            <pubDate>Tue, 11 Jul 2023 14:14:54 GMT</pubDate>
            <description><![CDATA[<p>유가분석 
001. selenium 세팅
&lt; Beautiful Soup 만으로 해결할 수 없는 것 &gt;</p>
<ol>
<li>접근 할 웹 주소를 알 수 없을 때</li>
<li>자바스크립트를 사용하는 웹페이지의 경우</li>
<li>웹 브라우저로 접근하지 않으면 안될 때
&lt; selenium &gt;</li>
</ol>
<ul>
<li>웹 브라우저를 원격 조작하는 도구</li>
<li>자동으로 url을 열고 클릭 등이 가능</li>
<li>스크롤, 문자의 입력, 화면 캡쳐 등이 필요할 때 사용</li>
<li>selenium 은 python모듈도 설치하고 크롬 드라이버도 다운 받아야 한다.</li>
<li>windows, intel mac : conda install selenium</li>
<li>mac(m1) : pip install selenium</li>
<li>크롬 도움말에 들어가 크롬 버전을 확인한다.</li>
<li>그 후 chromedriver에서 자신의 크롬 버전에 맞는 파일을 다운 받는다.</li>
</ul>
<p>&lt; selenium 접근 코드 &gt;</p>
<pre><code>from selenium import webdriver
driver = webdriver.Chrome(‘./chromedriver’)
driver.get(‘원하는 링크 주소’)</code></pre><ul>
<li>크롬 드라이버 실행</li>
<li>webdriver.Chrome 명령으로 크롬 드라이버의 경로 지정</li>
<li>get 명령으로 접근하고 싶은 주소 지정</li>
</ul>
<p>&lt; 스크롤 가능한 높이를 가져오는 코드 &gt;</p>
<pre><code>last_height = driver.execute_script(“return document.body.scrollHeight”)
last_height</code></pre><p>&lt; 화면 스크롤 코드 &gt;</p>
<pre><code>driver.execute_script(“window.scrollTo(0, document.body.scrollHeight);”)</code></pre><p>&lt; 화면 페이지를 지정하는 지점의 xpath를 찾은 후 그 지점까지 스크롤 하는 코드 &gt;</p>
<pre><code>from selenium.webdriver import ActionChains

some_tag = driver.find_element_by_xpath(‘’‘//*[@id=“paging”]/ul’‘’)
action = ActionChains(driver)
action.move_to_element(some_tag).perform()</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터직군 취업로그 28]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-28</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-28</guid>
            <pubDate>Mon, 10 Jul 2023 14:05:33 GMT</pubDate>
            <description><![CDATA[<ol start="5">
<li>크롬 개발자 도구 이용하기
&lt; 환율 정보 가져오기 &gt;</li>
</ol>
<ul>
<li>네이버 금융에서 시장지표 탭으로 이동하기</li>
<li>USD 환율 체크를 파이썬으로 하고싶은데 HTML을 잘 모를 때 이용하는 도구 : 크롬 개발자 도구</li>
<li>크롬 설정 -&gt; 도구 더보기 -&gt; 개발자 도구(화면 오른쪽부터 선택)</li>
<li>(사진과 같은 곳을 클릭 한 후 ) 필요한 데이터 부분 선택하기</li>
<li>이렇게 한다면 내가 원하는 HTML 태그가 위치한 곳을 찾아 갈 수 있다.</li>
<li>span class =“value” 잘 기억하기<pre><code>from urllib.request import urlopen
</code></pre></li>
</ul>
<p>url = “<a href="http://info.finance.naver.com/marketindex/%E2%80%9D">http://info.finance.naver.com/marketindex/”</a> 
page = urlopen(url)
soup = BeautifulSoup(page, “html.asrser”)
print(soup.prettify())</p>
<pre><code>- 웹주소에 접근할때는 urllib의 request모듈이 필요하다.

010. 위키백과 문서 정보 가져오기
- 여명의 눈동자 위키백과 페이지로 이동
- 웹페이지 URL 복사 후 메모장이나 jupyter notebook 셀에 붙여넣기
- 웹 주소는 utf-8로 인코딩되어야 한다.</code></pre><p>import urllib
from urllib.request import Request</p>
<p>html = “<a href="https://ko.wikipedia.org/wiki/%7Bsearch_words%7D%E2%80%9D">https://ko.wikipedia.org/wiki/{search_words}”</a>
req = Request(html.format(search_words=urllib.parse.quote(“여명의_눈동자”)))
response = urlopen(req)
soup = BeautifulSoup(response, “html.parser”)
soup</p>
<p>n = 0
for each in soup.find_all(‘ul’):
    print(“=&gt;” + str(n) + “================”)
    print(each)
    n += 1</p>
<p>soup.find_all(“ul”)[2]</p>
<p>```</p>
<ol start="12">
<li>list 데이터형</li>
</ol>
<ul>
<li>List 형은 대괄호로 생성한다.
colors = [“red”, “blue”, “green”]</li>
</ul>
<p>print(colors[0])
print(colors[1])
print(len(colors))</p>
<ul>
<li>List 형을 반복문 (for)에서 사용하는 방법이 다른 언어에 비해 편하다.</li>
<li>in 명령으로 조건문(if)에 적용하는 것도 역시 다른 명령어에 비해 편하다.</li>
<li>append : list 제일 뒤에 하나 추가</li>
<li>pop : 제일 뒤 자료를 지움</li>
<li>extend : 제일 뒤에 다수의 자료를 추가</li>
<li>remove : 같은 이름의 자료를 지움</li>
<li>슬라이싱 : [n:m] n번째부터 m-1까지</li>
<li>insert : 원하는 위치에 자료를 삽입</li>
<li>list 안에 list를 가질 수 있다.</li>
<li>isinstance : 자료형이 list인지 확인 할 수 있다.</li>
</ul>
<p>014-016. 시카고 맛집 메인페이지 분석</p>
<ul>
<li>메인페이지 : 시카고의 50개 맛집 샌드위치에 대해 메뉴와 가게 이름이 정리되어 있다.</li>
<li>세부페이지 : 각각을 소개한 50개의 페이지에 가게 주소와 대표 메뉴의 가격이 있다.</li>
<li>최종목표 : 총 51개 페이지에서 각 가게의 정보를 가져온다.<pre><code>      &lt; 가게이름, 대표메뉴, 대표메뉴의 가격, 가게주소 &gt;</code></pre><pre><code class="language-from">
</code></pre>
</li>
</ul>
<p>from urllib.request import Request, urlopen</p>
<p>url_base = “<a href="http://www.chicagomag.com%E2%80%9D">http://www.chicagomag.com”</a>
url_sub = “/Chicago-Magazine/Novemver=2012/Best-Sandwiches-Chicago/”
url = url_base + url_sub</p>
<p>req = Request(url, headers={“User-Agent”: “Chrome”})
html = urlopen(req).read()
soup = BeautifulSoup(html, “html.parser”)</p>
<p>soup</p>
<p>print(soup.find_all(“div”, “sammy”))</p>
<p>len(soup.find_all(“div”, “sammy”))</p>
<h1 id="50개가-제대로-들어온-것을-확인하기">50개가 제대로 들어온 것을 확인하기</h1>
<p>print(soup.find_all(“div”, “sammy”)[0])</p>
<p>tmp_one = soup.find_all(“div”, “sammy”)[0]
type(tmp_one)</p>
<h1 id="type이-bs4elementtag라는-것은-find명령을-사용할-수-있다는-뜻">type이 bs4.element.Tag라는 것은 find명령을 사용할 수 있다는 뜻</h1>
<p>tmp_one.find(class_=“sammyRank”)
tmp_one.find(class_=“sammyRank”).get_text()</p>
<h1 id="랭킹-데이터-확보">랭킹 데이터 확보</h1>
<p>tmp_one.find(class_=“sammyListing”).get_text()</p>
<h1 id="가게-이름과-메뉴-데이터가-한번에-있다">가게 이름과 메뉴 데이터가 한번에 있다.</h1>
<p>tmp_one.find(“a)[”href“]</p>
<h1 id="연결되는-홈페이지-주소가-상경대로임">연결되는 홈페이지 주소가 ‘상경대로’임</h1>
<p>import re
tmp_string = tmp_one.find(class_=“sammyListing”).get_text()
re.split((“역슬래쉬n|역슬래쉬r역슬래쉬n”), tmp_string)
#가게 이름과 메뉴는 re 모듈의 split으로 쉽게 구분할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 27]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-27</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-27</guid>
            <pubDate>Sun, 09 Jul 2023 14:33:43 GMT</pubDate>
            <description><![CDATA[<p>[ 오늘의 수업내용 요약 ]</p>
<ol>
<li>Beautiful Soup 기초와 웹데이터</li>
</ol>
<ul>
<li>HTML과 XML 문서들의 구문을 분석하기 위한 파이썬 패키지이다. HTML로부터 데이터를 추출하기 위해 사용할 수 있는 파싱된 페이지의 파스 트리를 만드는데, 이는 웹 스크래핑에 유용하다.
&lt; 파일로 저장된 html 파일을 읽을 때 &gt;</li>
</ul>
<ol>
<li>open: 파일명과 함께 읽기(r), 쓰기(w)속성을 지정</li>
<li>html.parser: Beautiful Soup의 html을 읽는 엔진 중 하나(lxml도 많이 사용)</li>
<li>prettify(): html 출력을 이쁘게 만들어주는 기능</li>
<li>find_all(): 지정된 태그를 모두 찾아준다.</li>
</ol>
<ul>
<li>html 내에서 속성 id는 딱 한번만 나타난다.</li>
<li>그래서 find_all() 함수는 의미가 없다.</li>
<li>단 검색결과를 list로 받고싶다면 id라도 find_all() 함수를 사용한다.</li>
</ul>
<ol start="5">
<li>크롬 개발자 도구 이용하기
&lt; 환율 정보 가져오기 &gt;</li>
</ol>
<ul>
<li><p>네이버 금융에서 시장지표 탭으로 이동하기</p>
</li>
<li><p>USD 환율 체크를 파이썬으로 하고싶은데 HTML을 잘 모를 때 이용하는 도구 : 크롬 개발자 도구</p>
</li>
<li><p>크롬 설정 -&gt; 도구 더보기 -&gt; 개발자 도구(화면 오른쪽부터 선택)</p>
</li>
<li><p>(사진과 같은 곳을 클릭 한 후 ) 필요한 데이터 부분 선택하기</p>
</li>
<li><p>이렇게 한다면 내가 원하는 HTML 태그가 위치한 곳을 찾아 갈 수 있다.</p>
</li>
<li><p>span class =“value” 잘 기억하기</p>
<blockquote>
</blockquote>
<pre><code>from urllib.request import urlopen
url = “http://info.finance.naver.com/marketindex/” 
page = urlopen(url)
soup = BeautifulSoup(page, “html.asrser”)
print(soup.prettify())</code></pre></li>
<li><p>웹주소에 접근할때는 urllib의 request모듈이 필요하다.</p>
</li>
</ul>
<p>=&gt; 기초수학이나 파이썬은 코드 따라적어보느라 정신이없었는데 folium부터는 시각화 자료가 나타나니 수업이 너무 재밌다 :)
얼른 손에 익혀서 코드 안보고 코딩해보고싶다 !</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 26]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-26</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-26</guid>
            <pubDate>Sat, 08 Jul 2023 11:16:57 GMT</pubDate>
            <description><![CDATA[<p>[ 오늘의 수업내용 요약 ]</p>
<ol start="24">
<li>folium 지도 시각화</li>
</ol>
<ul>
<li>현재 사용의 편의성이나 활발한 기능 개선등으로 folium이 만족도가 높은 편</li>
<li>miniconda에서 conda install –c conda-forge folium 해서 설치 가능</li>
<li>folium은 기본적으로 크롬에서 동작이 가장 좋다.</li>
</ul>
<pre><code class="language-m">    location=[37.544564958079896, 127.05582307754338],
    zoom_start=14,
    tiles=&quot;stamen Toner&quot;
) # 0-18
m</code></pre>
<ul>
<li>근본적으로 그냥 위도 경도를 알려주면 된다.<pre><code>folium.Marker(
  location=[37.544564958079896, 127.05582307754338],
  popup=&quot;&lt;b&gt;Subway&lt;/b&gt;&quot; #html문법도 적용 가능
).add_to(m)</code></pre></li>
<li>html문법도 적용 가능하다.</li>
<li>스타일은 tiles옵션으로 지정하면 된다.</li>
<li>마커 추가도 가능</li>
<li>다양한 모양의 아이콘 지원(무료 아이콘을 사용하고싶다면 구글링 !)
[ 최종적으로 2번째 프로젝트에 시각화 자료들의 코드들을 적용한 내용 ]
=&gt; <pre><code>my_map = folium.Map(
  location=[37.5502, 126.982], zoom_start=11
)
</code></pre></li>
</ul>
<p>folium.Choropleth(
    geo_data=geo_str, #우리나라 경계선 좌표값이 담긴 데이터
    data=crime_anal_norm[&quot;범죄&quot;],
    columns=[crime_anal_norm.index, crime_anal_norm[&quot;범죄&quot;]],
    key_on=&quot;feature.id&quot;,
    fill_color=&quot;PuRd&quot;,
    fill_opacity=0.7,
    line_opacity=0.2,
)</p>
<p>for idx, row in crime_anal_station.iterrows():
    folium.CircleMarker(
        location=[row[&quot;lat&quot;], row[&quot;lng&quot;]],
        radius=row[&quot;검거&quot;] * 50,
        popup=row[&quot;구분&quot;] + &quot; : &quot; + &quot;%.2f&quot; % row[&quot;검거&quot;],
        color=&quot;#3186cc&quot;,
        fill=True,
        fill_color=&quot;#3186cc&quot;
    ).add_to(my_map)
my_map</p>
<pre><code>=&gt; </code></pre><p>crime_loc_norm_sort = crime_loc_norm.sort_values(&quot;종합&quot;, ascending=False) #내림차순</p>
<p>def drawGraph():
    plt.figure(figsize=(10,10))
    sns.heatmap(
        crime_loc_norm_sort,
        annot=True,
        fmt=&quot;f&quot;,
        linewidths=0.5,
        cmap=&quot;RdPu&quot;)
    plt.title(&quot;범죄 발생 장소&quot;)
    plt.show()
drawGraph()
```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 25]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-25</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-25</guid>
            <pubDate>Fri, 07 Jul 2023 12:46:21 GMT</pubDate>
            <description><![CDATA[<ol start="18">
<li>seaborn</li>
</ol>
<ul>
<li>seaborn은 matplotlib과 함께 실행된다.</li>
<li>seaborn은 import하는 것만으로도 뭔가 효과를 준다.</li>
<li>white스타일
sns.set_style(“white”)
plt.figure(figsize=(10, 6))
plt.plot(x, y1, x, y2, x, y3, x, y4)
sns.despine()
plt.show()</li>
<li>dark스타일
sns.set_style(“dark”)
plt.figure(figsize=(10, 6))
plt.plot(x, y1, x, y2, x, y3, x, y4)
sns.despine()
plt.show()</li>
<li>whitegrid스타일
sns.set_style(“whitegrid”)
plt.figure(figsize=(10, 6))
plt.plot(x, y1, x, y2, x, y3, x, y4)
sns.despine()
plt.show()</li>
<li>despine적용
plt.figure(figsize=(10, 6))
plt.plot(x, y1, x, y2, x, y3, x, y4)
sns.despine(offset=10)
plt.show()</li>
<li>seaborn에는 실습용 데이터가 몇 개 내장되어 있다.</li>
<li>이 중 하나 tips를 불러보기</li>
<li>boxplot그리기 가능
plt.figure(figsize=(8, 6))
sns.boxplot(x=tips[“total_bill])
plt.show()</li>
<li>boxplot에 컬럼을 지정
plt.figure(figsize=(8, 6))
sns.boxplot(x=”day“, y=”total_bill“, data=tips)
plt.show()</li>
<li>컬럼을 지정하고 구분 지을 수 있음</li>
<li>swarmplot
plt.figure(figsize=(8, 6))
sns.swarmplot(x=”day“, y=”total_bill“, data=tips, color=”.5“)
plt.show()</li>
<li>boxplot을 swarmplot의 콜라보
plt.figure(figsize=(8,6))
sns.boxplot(x=“day”, y=“total_bill”, data=tips)
sns.swarmplot(x=“day”, y=“total_bill”, data=tips, color=“.25”)
plt.show()</li>
<li>pivot옵션을 사용할 수 있다.</li>
<li>heatmap을 이용하면 전체 경향을 알 수 있다.</li>
<li>colormap을 조금 다르게 설정 가능</li>
<li>iris데이터도 있다.</li>
<li>다수의 컬럼을 비교하는 pairplot</li>
<li>pairplot에서는 hue 옵션</li>
<li>원하는 컬러만 pairplot가능</li>
</ul>
<ol start="22">
<li>데이터 시각화</li>
</ol>
<ul>
<li>앞에서 했던 matplotlib의 한글 폰트 잡기</li>
<li>윈도우 : Malgun Gothic</li>
<li>pairplot으로 강도, 살인, 폭력에 대한 상관관계 확인</li>
<li>인구수, CCTV와 살인 강도와의 관계도 확인</li>
<li>인구수, CCTV와 살인/폭력 검거율의 관계 확인</li>
<li>인구수, CCTV와 절도/강도 검거율 확인</li>
<li>검거율만 가지고 heatmap</li>
<li>단, 전거 검거율의 대푯값인 검거를 기준으로 정렬</li>
<li>범죄발생 건수로도 heatmap</li>
<li>대푯값인 범죄를 기준으로 정렬</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[7/1 제로베이스 데이터 취업스쿨첫번째 팀 미팅 회고록]]></title>
            <link>https://velog.io/@mogu_/71-%EC%B2%AB%EB%B2%88%EC%A7%B8-%ED%8C%80-%EB%AF%B8%ED%8C%85</link>
            <guid>https://velog.io/@mogu_/71-%EC%B2%AB%EB%B2%88%EC%A7%B8-%ED%8C%80-%EB%AF%B8%ED%8C%85</guid>
            <pubDate>Fri, 07 Jul 2023 11:51:35 GMT</pubDate>
            <description><![CDATA[<p>매주 1번 각자 원하는 산업군을 지정해 채용 공고가 올라오면
원하는 역량이나 자격요건 등을 간단하게 자료를 만들어 공유하는 시간을
가지고 있다. 저번주는 첫 팀 미팅이라 간단하게 진행했기 때문에
산업군끼리 나누어 채용공고 링크 정도만 정리해 둘 생각이다.
[ 게임 ] </p>
<ol>
<li>(주)넥슨 - [인텔리전스랩스] 데이터 분석가 (게임/브랜드 가치/플랫폼)
<a href="https://m.jobkorea.co.kr/info/app_down.asp?Gno=41732944">https://m.jobkorea.co.kr/info/app_down.asp?Gno=41732944</a></li>
<li>(주)넥슨 - [인텔리전스랩스] 데이터 분석가 (UX/게임 경험 분석)<a href="https://career.nexon.com/user/recruit/member/postDetail?joinCorp=NX&amp;reNo=20230169&amp;currentPage=0">https://career.nexon.com/user/recruit/member/postDetail?joinCorp=NX&amp;reNo=20230169&amp;currentPage=0</a></li>
</ol>
<p>[ 금융 ]</p>
<ol>
<li>(주)비바리퍼블리카 - [토스페이먼츠] Data Analyst
<a href="https://m.jobkorea.co.kr/info/app_down.asp?Gno=41887258">https://m.jobkorea.co.kr/info/app_down.asp?Gno=41887258</a></li>
<li>케이뱅크 - UX Data Researcher 채용
<a href="https://www.saramin.co.kr/zf_user/jobs/relay/view?isMypage=no&amp;rec_idx=44862956&amp;recommend_ids=eJxNjssVw0AIA6vJHRAfcXYh7r%2BLbOK3Zo%2FzhDR4NLygN60%2FdXk0KcGbqhsV%2BaIS7rKO%2F5gCka43ZaNSputU2qQEsrcoRQIYEZEpR6prKyYN8xxRZ3Qf3SqGb1xdiB1otmRH%2BntrpoyCebI1sse7LHzwC3aaQF8%3D&amp;view_type=search&amp;searchword=ux+researcher&amp;searchType=search&amp;gz=1&amp;t_ref_content=generic&amp;t_ref=search&amp;paid_fl=n&amp;search_uuid=506e1be0-9c0b-4f85-a4b6-cda46ad3926a&amp;immediately_apply_layer_open=n#seq=0">https://www.saramin.co.kr/zf_user/jobs/relay/view?isMypage=no&amp;rec_idx=44862956&amp;recommend_ids=eJxNjssVw0AIA6vJHRAfcXYh7r%2BLbOK3Zo%2FzhDR4NLygN60%2FdXk0KcGbqhsV%2BaIS7rKO%2F5gCka43ZaNSputU2qQEsrcoRQIYEZEpR6prKyYN8xxRZ3Qf3SqGb1xdiB1otmRH%2BntrpoyCebI1sse7LHzwC3aaQF8%3D&amp;view_type=search&amp;searchword=ux+researcher&amp;searchType=search&amp;gz=1&amp;t_ref_content=generic&amp;t_ref=search&amp;paid_fl=n&amp;search_uuid=506e1be0-9c0b-4f85-a4b6-cda46ad3926a&amp;immediately_apply_layer_open=n#seq=0</a></li>
<li>한국투자증권 - 데이터 시각화
<a href="https://www.wanted.co.kr/wd/146640">https://www.wanted.co.kr/wd/146640</a></li>
</ol>
<p>[ 유통 ]</p>
<ol>
<li>[컬리] 데이터플랫폼팀 데이터분석가(Data Analyst)에 한번 지원해 보세요. <a href="http://wntd.co/e4adf711">http://wntd.co/e4adf711</a></li>
</ol>
<p>[ CS ]</p>
<ol>
<li>엘지유플러스 채용 - [Consumer부문] 데이터마케팅 경력사원 채용 | 잡코리아 (jobkorea.co.kr)</li>
<li>엘지전자 채용 - [CX센터] 통계/데이터 분석 전문가 채용 | 잡코리아 (jobkorea.co.kr)</li>
<li>하이텔레서비스 채용 - [LG전자 자회사] 데이터 통계/분석 담당 정규직 채용 | 잡코리아 (jobkorea.co.kr)</li>
</ol>
<p>[ 디지털/ 커머스 마케팅 ]</p>
<ol>
<li>애드이피션시 채용 - 데이터분석 &amp; 통계 전문가 경력 모집 [주2회 재택근무] | 잡코리아 (jobkorea.co.kr)</li>
<li>케이티알파 채용 - [kt alpha] 마케팅팀 경력직(커머스 데이터분석/브랜드 마케터) 채용(채용 시 마감) | 잡코리아 (jobkorea.co.kr)</li>
<li>[더블엔씨] 데이터분석가(Data Analyst) 채용 | 원티드 (wanted.co.kr)</li>
</ol>
<ul>
<li>개인적으로는 게임, 금융, 항공, 유통에 관심이 있어서 팀원들이 올린 채용공고들이 동기부여가 된다. 얼른 취뽀하고싶어라 :)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 24]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-24</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-24</guid>
            <pubDate>Thu, 06 Jul 2023 04:33:32 GMT</pubDate>
            <description><![CDATA[<p>[ 오늘의 수업 내용 요약 ]</p>
<ol start="12">
<li>matplotlib 기초</li>
</ol>
<ul>
<li>파이썬의 대표 시각화 도구</li>
<li>matplotlib는 plt로 많이 naming한다.</li>
<li>jupyter notebook 유저의 경우 matplotlib의 결과가 
out session에 나타나는 것이 유리하므로 %matplotlib inline 
옵션을 사용한다.</li>
<li>figure로 열어서 show로 닫는다.</li>
<li>그래프를 그리는 코드를 def()로 작성한다.</li>
<li>그러면 나중에 별도의 셀에서 그림만 나타낼 수 있기 때문이다.</li>
<li>scatter(): 점을 찍는 함수 </li>
</ul>
<ol start="15">
<li>데이터 그래프로 표현하기</li>
</ol>
<ul>
<li>시각화 이유 : 표로만 확인하는건 정보 전달에 한계가 있다.</li>
<li>DataFrame은 데이터 변수에서 바로 plot()명령을 사용할 수 있다.</li>
<li>그리고 데이터(컬럼)가 많은 rudd 정렬한 후 그리는 것이 
효과적일때가 많다.</li>
</ul>
<p>017 데이터 경향</p>
<ul>
<li>Linear Regression: 선형회귀, trend파악</li>
<li>np.polyfit(): 직선을 구성하기 위한 계수 계산</li>
<li>np.poly1d(): polyfit으로 찾은 계수로 python에서 
사용할 함수로 만들어준다.</li>
<li>np.linespace(a, b, n): a부터 b까지 n개의 등간격 
데이터 생성</li>
</ul>
<ol start="19">
<li>경향에서 벗어난 데이터</li>
</ol>
<ul>
<li>경향과 오차를 만들자 (실제값 – 예측값)</li>
<li>경향은 f1함수에 해당하는 인구를 입력 : 
f1(data_result[‘인구수’])</li>
<li>현재값: data_result[‘소계’]</li>
<li>plt.text(): 마커 옆에 구 이름을 명시</li>
</ul>
<p>[ 2. 서울시 CCTV 현황 데이터 분석 ]
002. 데이터 개요</p>
<ul>
<li>필요한 모듈 import</li>
<li>먼저 numpy와 pandas를 사용한다.</li>
<li>숫자값들이 콤마를 사용하고 있어서 문자로 인식될 수 있다.</li>
<li>천단위 구분 (‘,’)이라고 알려주면 콤마를 제거하고 숫자형으로 
읽는다.</li>
<li>info(): 데이터 개요 확인하기</li>
<li>특정 컬럼에서 unique 조사</li>
<li>nan이 들어가 있다. (이는 index가 65535의 크기를 가지게 
되면서 실제 values와 크기 차이가 발생했기 때문)</li>
<li>이럴때는 nan을 제거하는 것이 아니라 nan이 아닌 데이터만 
다시 가져오면 된다.</li>
</ul>
<ol start="3">
<li>pandas의 pivot_table</li>
</ol>
<ul>
<li>인덱스를 여러 개 지정할 수 있음</li>
<li>정렬 가능</li>
<li>values를 지정할 수 있음</li>
<li>values에 함수를 적용할 수 있다.</li>
<li>디폴트는 평균</li>
<li>합산 등의 다름 함수를 적용할 때는 aggfunc옵션을 지정</li>
<li>len(): 개수 적용</li>
<li>columns 지정</li>
<li>NaN에 대한 처리를 지정</li>
<li>합계 지정 가능</li>
</ul>
<ol start="7">
<li>pip명령과 conda명령
pip명령</li>
</ol>
<ul>
<li>python의 공식 모듈 관리자</li>
<li>pip list: 현재 설치된 모듈 리스트 반환</li>
<li>pip install module_name: 모듈 설치</li>
<li>pip uninstall module_name: 설치된 모듈 제거
conda 명령</li>
<li>pip를 사용하면 conda환경에서 dependency관리가 
정확하지 않을 수 있다.</li>
<li>아나콘다에서는 가급적 conda명령으로 모듈을 관리하는 것이 좋다.</li>
<li>conda list: 설치된 모듈 list</li>
<li>conda install module_name: 모듈 설치</li>
<li>conda uninstall module_name: 설치된 모듈 제거</li>
<li>conda install –c channel_name moduel_name: 
지정된 배포 채널에서 모듈 설치</li>
<li>그러나 모든 모듈이 conda로 설치되는 것은 아니다.</li>
</ul>
<ol start="10">
<li>python의 for문</li>
</ol>
<ul>
<li>모든 언어에는 다 반복문이 있다.</li>
<li>파이썬은 들여쓰기로 구분한다.</li>
<li>들여쓰기를 중단하면 for문이 아니다.</li>
<li>pandas에 잘 맞춰진 반복문용 명령 iterrows()</li>
<li>pandas 데이터 프레임은 대부분 2차원</li>
<li>이럴때는 for문을 사용하면 n번째라는 지정을 반복해서 
가독률이 떨어진다.</li>
<li>pandas데이터 프레임으로 반복문을 만들 때 iterrows()라는 
옵션을 사용하면 편하다.</li>
<li>받을 때 인덱스와 내용으로 나누어 받는것만 주의</li>
</ul>
<ol start="12">
<li>구글맵스에서 구별 정보를 얻어 데이터를 정리</li>
</ol>
<ul>
<li>경찰서별 데이터로 정리되어 있다.</li>
<li>서울은 한 구에 경찰서가 두 곳인 구가 존재한다.</li>
<li>그러므로 구의 이름으로 다시 정렬해야 한다.</li>
<li>데이터를 다시 읽어 온 후 중간 중간 데이터를 파일로 
저장해두면 테스트 코드가 긴 경우 중간부더 다시 작업 가능하다.</li>
<li>pivot_table을 이용해서 구별로 정리</li>
<li>pivot_table의 func를 sum으로 잡고, 필요없는 컬럼은 
del로 제거</li>
</ul>
<ol start="14">
<li>구별 데이터로 변경하기</li>
</ol>
<ul>
<li>본래 데이터 프레임은 두고, 정ㄱ화된 데이터를 따로 만들자</li>
<li>최고값을 1로, 최소값을 0으로</li>
<li>정규화된 범죄발생 건수 전체의 평균을 구해서 범죄의 
대푯값으로 사용하자</li>
<li>검거율 평균을 구해서 검거의 대푯값으로 사용</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 23]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-23</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-23</guid>
            <pubDate>Thu, 06 Jul 2023 04:10:21 GMT</pubDate>
            <description><![CDATA[<p>[ 오늘의 수업 내용 요약 ]</p>
<ol start="2">
<li>데이터 읽기</li>
<li>pandas로 CSV, 엑셀 파일 읽기</li>
</ol>
<ul>
<li>python에서 R만큼의 강력한 데이터 핸들링 성능을 제공하는 모듈</li>
<li>단일 프로세스에서는 최대 효율</li>
<li>코딩 가능하고 응용 가능한 엑셀로 받아들여도 됨</li>
<li>누군가는 스테로이드를 맞은 엑셀이라고 표현함</li>
</ul>
<ol start="2">
<li>python에서 import pandas as pd 라고 사용</li>
</ol>
<ul>
<li>원하는 모듈이 설치되어 있으면 import 명령을 통해 사용하겠다고 
선언
ex) import MODULE: MODULE
=&gt; MODULE..function을 사용하겠다.</li>
</ul>
<p>import MODULE as md
=&gt; MODULE을 사용할건데, 앞으로는 md라는 이름으로 부르겠다.
=&gt; md.functin을 사용하겠다.
from MODULE import function
=&gt; MODULE에 포함된 function이라는 함수만 사용하겠다.
=&gt; function만 사용하겠다.
3. pandas에서 엑셀 및 텍스트 파일 읽기</p>
<ul>
<li>통상 csv는 띄어쓰기로 구분되니 그냥 read_csv 명령으로 읽기만
해도 된다.</li>
<li>긴 파일명을 끝까지 입력하지 말고 적당한 곳에 TAB키를 눌러보자</li>
<li>한글은 encoding 설정이 필수 (안그러면 글자가 깨진다.)</li>
<li>엑셀 설정</li>
<li>자료를 읽기 시작할 행(header)지정</li>
<li>읽어올 엑셀의 컬럼을 지정(useclos)</li>
</ul>
<ol start="4">
<li>pandas dataframe구조</li>
</ol>
<ul>
<li>index</li>
<li>column name</li>
<li>column</li>
<li>values</li>
</ul>
<ol start="3">
<li>실습 서울시 CCTV 현황 분석 데이터 읽기</li>
</ol>
<ul>
<li>파일명.head() : 상위 5개 결과 보기</li>
<li>파일명.tail() : 하위 5개 결과 보기, 전체 데이터 개수 파악 용이</li>
<li>inplace=True : 변경한 사항을 원본에 저장</li>
</ul>
<ol start="4">
<li>pandas 기초</li>
</ol>
<ul>
<li>pandas는 통상 pd로 import한다.</li>
<li>수치해석적 함수가 많은 numpy는 통상 np로 import한다.</li>
<li>pandas의 데이터형을 구성하는 기본은 Series이다.</li>
<li>date_range(): 날짜(시간)을 이용할 수 있다.</li>
<li>pandas에서 가장 많이 사용되는 데이터형은 Data Frame이다.</li>
<li>index와 columns를 지정하면 된다.</li>
<li>df.head(): 앞부분 5개 데이터 확인</li>
<li>df.index: Data Frame의 index만 확인하고 싶을 때 사용</li>
<li>df.columns: Data Frame의 컬럼만 확인하고 싶을 때 사용</li>
<li>df.values: Data Frame의 value만 확인하고 싶을 때 사용</li>
<li>df.info: DataFrame의 기본 정보 확인할 때 사용, 여기서는 각 
컬럼의 크기와 데이터 형태를 확인하는 경우가 많다.</li>
<li>df.describe(): Data Frame의 통계적 기본 정보를 확인할 때 
사용</li>
<li>df.sort_values: 데이터 정렬</li>
<li>df[n:m] :n~m-1까지, 그러나 인덱스나 칼럼의 이름으로 
slice하는 경우는 끝을 포함함</li>
<li>df.loc: location의 약자, 행과 열을 지정할 수 있다. 
이름으로도 사용가능하며 pandas의 보편적인 slice옵션이다.</li>
<li>df.iloc: 번호로만 지정하여 접근할 수 있다.</li>
<li>df[condition]과 같이 사용하는 것이 일반적이다.</li>
<li>pandas의 버전에 따라 조금씩 허용되는 문법이 다르다.</li>
<li>인터넷에서 확보한 소스코드를 돌릴때는 pandas의 버전을 
확인하는 것이 필요하다</li>
<li>isin: 특정 요소가 있는지 확인</li>
<li>del: 특정 컬럼 제거</li>
<li>apply(): 함수를 적용 </li>
</ul>
<ol start="5">
<li>서울시 CCTV현황분석 pandas series</li>
</ol>
<ul>
<li>object는 파이썬에서 str과 같다.</li>
</ul>
<ol start="6">
<li>DataFrame 실습</li>
</ol>
<ul>
<li>df.head()와 df.tail()은 메서드이기 때문에 함수가 붙고, df.index, df.columns, df.values는 변수이기 때문에 
함수가 붙지 않아도 선언되는 것이다.</li>
<li>asceding=False 라는 값을 주면 내림차순으로 정렬된다.</li>
<li>오름차순은 sort_value()</li>
<li>두 개 이상 컬럼 선택: df[[&quot;A&quot;, &quot;B&quot;]]</li>
<li>df.drop([&quot;D&quot;], axis=0), drop메서드는 axis를 꼭 같이 
사용해야한다.</li>
<li>#axis = 0 가로, axis = 1 세로</li>
</ul>
<ol start="7">
<li>데이터 훑어보기</li>
</ol>
<ul>
<li>CCTV 앞부분 데이터 확인</li>
<li>단순히 구별 CCTV 개수로는 한계가 있어 인구 현황과 함께 
비교 해야한다.</li>
<li>unique 조사</li>
<li>데이터가 많아지면 unique 조사를 통해 데이터를 초반 검증 
해야한다.</li>
<li>외국인과 고령자 비율을 만들어둔다</li>
<li>데이터 행이 25개인데 딱 한줄로 의도하는 바를 이룬다.</li>
<li>컬럼 연산이 편하다는 것이 python의 장점</li>
</ul>
<ol start="9">
<li>데이터 합치기</li>
</ol>
<ul>
<li>merge를 이용한 데이터 병합</li>
<li>pandas DataFrame 데이터끼리의 병합은 빈번히 발생한다.</li>
<li>병합후 데이터가 엉망이 되지 않도록 잘 익혀야 한다.</li>
<li>key컬럼을 기준으로 병합</li>
<li>how=“left”로 지정하면 left의 키값들이 모두 보존된다.</li>
<li>how=“outer”(합집합)를 사용하면 left, right 데이터들을 
모두 살릴 수 있다.</li>
<li>how=“inner”은 교집합들만 가지고 간다고 이해하면 쉽다.</li>
</ul>
<p>[ 수업과정 데이터 병합 순서 ]</p>
<ol>
<li>pandas index 지정</li>
<li>데이터를 정리하는 과정에서 index를 재지정할 때가 있다.</li>
<li>여기서는 unique한 데이터인 구별로 index를 잡자</li>
<li>index를 재지정하는 명령은 set_index이다.</li>
</ol>
<p>상관관계란 ?
: 두 변량 사이에 한쪽이 증가하면 다른쪽도 증가(또는 감소)하는 
경향이 있을 때 이 두 변량 사이에는 상관관계가 있다고 한다. 
단, 상관관계가 있다고 해서 두 변량이 인과관계인 것은 아니다.</p>
<ul>
<li>상관관계 함수 : corr()</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 22]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-22</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-22</guid>
            <pubDate>Thu, 06 Jul 2023 04:07:45 GMT</pubDate>
            <description><![CDATA[<p>[ 오늘의 수업내용 요약 ]</p>
<p>6_027 병합정렬</p>
<ul>
<li>병합정렬이란 자료구조를 분할하고 각각의 분할된 자료구조를 
정렬한 후 다시 병합하여 정렬한다.</li>
<li>각 병합 단계마다 작은 수가 앞으로 배열된다.</li>
</ul>
<p>6_029 퀵정렬</p>
<ul>
<li>기준 값 보다 작은 값과 큰 값으로 분리한 후 다시 합친다.</li>
<li>기준값을 알아야 함</li>
</ul>
<p>6_034_ 순위 알고리즘</p>
<ul>
<li>isalpha(): 알파벳인지 판독해주는 함수</li>
<li>ord() : 문자를 아스키코드로 변환해주는 함수</li>
</ul>
<p>part4. EDA/웹 크롤링/파이썬 프로그래밍</p>
<ol>
<li>오리엔테이션</li>
<li>INTO</li>
</ol>
<ul>
<li>프로젝트가 진행되는 과정을 중시</li>
<li>당장 이해되기 어려운 코드가 있을 수 있지만 그럴때는 문맥의 
흐름을 이해하고 어려운 단어는 추후 다시 공부하는 태도가 필요하다.
&lt;프로젝트위주로 하는 이유&gt;</li>
<li>버전업이 수시로 일어나는 다이나믹한 세계이기 때문이다.</li>
<li>심지어 버전업에 따라 명령 체계조차 변경된다.</li>
<li>짧은 시간 안에 광범위하게 많은 경험이 가능하다.</li>
<li>24시간은 누구에게나 있으니, 문제는 효율이다.</li>
<li>공부해야 할 많은 것들 중에 목표에 맞는 것을 먼저 학습하자 ! </li>
</ul>
<ol start="2">
<li>환경설정</li>
</ol>
<ul>
<li>miniconda설치</li>
<li>주피터 설치</li>
<li>matplotlib 설치 및 한글 설정</li>
<li>vscode 설치</li>
</ul>
<p>[ 서울시 CCTV 현황 데이터 분석 ]</p>
<ol>
<li>서울시 CCTV현황 분석 프로젝트 소개 및 데이터 출처</li>
</ol>
<ul>
<li>인구수가 많은 것을 감안해도 다른 구에 비해 CCTV가 많은 구를 
도출해내기</li>
<li>서울 시 전체 경향 파악</li>
<li>인구수가 많음에도 불구하고 다른 구에 비해 CCTV가 상대적으로 
너무 적은 구 도출해내기
위 연습을 통해 얻을 수 있는 능력</li>
</ul>
<ol>
<li>서울시 구별 CCTV 현황 데이터 확보</li>
<li>인구 현황 데이터 확보</li>
<li>CCTV와 데이터 인구현황 데이터 합치기 (1~3) =&gt; Python, 
pandas 익히기 가능</li>
<li>데이터를 정렬하기</li>
<li>그래프를 그릴 수 있는 능력 (4~5) =&gt; Matplotlib 익히기 가능</li>
<li>전체적인 경향을 파악할 수 있는 능력 
=&gt; Regression using Numpy사용 가능</li>
<li>그 경향에서 벗어난 데이터를 강조하는 능력 
=&gt; Insight and Visualization 익히기 가능
● 전체 흐름을 보는 자료, 기초 하나하나를 익히는 자료, 
필요한 내용을 필요할 때 적절한 분량을 익히는 것이 중요하다.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 21]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-21</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-21</guid>
            <pubDate>Sun, 25 Jun 2023 16:06:29 GMT</pubDate>
            <description><![CDATA[<p>[ 오늘의 수업내용 요약 ]</p>
<p>6_007 버블 정렬</p>
<ul>
<li>처음부터 끝까지 인접하는 인덱스의 값을 순차적으로 비교하면서 큰 숫자를 가장 끝으로 
옮기는 알고리즘이다.</li>
</ul>
<p>6_009 삽입 정렬</p>
<ul>
<li>정렬되어 있는 자료 배열과 비교해서, 정렬 위치를 찾는다.</li>
</ul>
<p>6_011 선택 정렬</p>
<ul>
<li>주어진 리스트 중에 최소값을 찾아, 그 값을 맨 앞에 위치한 값과 교체하는 방식으로 
자료를 정렬하는 알고리즘이다.</li>
<li>import copy모듈을 사용해 깊은 복사를 하게되면 원본은 회손되지 않는다.</li>
</ul>
<p>6_13 최댓값</p>
<ul>
<li>자료구조에서 가장 큰 값을 찾는다.</li>
</ul>
<p>6_014 최댓값 실습</p>
<ul>
<li>문자열을 아스키 코드 값으로 변환해 주는 함수 :ord()</li>
</ul>
<p>6_015 최솟값 
-자료에서 가장 작은 값을 찾는다.</p>
<p>6_017 최빈값</p>
<ul>
<li>데이터에서 빈도수가 가장 많은 데이터를 최빈값이라고 한다.</li>
</ul>
<p>6_019 근사값</p>
<ul>
<li>특정 값(참값)에 가장 가까운 값을 근삿값이라고 한다.</li>
<li>sum()는 합을 구할 수 있는 함수다.</li>
</ul>
<p>6_021 평균</p>
<ul>
<li>여러 수나 양의 중간값을 갖는 수를 평균이라고 한다.</li>
</ul>
<p>6_023 재귀</p>
<ul>
<li>나 자신을 다시 호출하는 것을 재귀라고 한다.</li>
</ul>
<p>6_024 재귀 알고리즘 실습</p>
<ul>
<li>유클리드 호제법 : 두 자연수 n1,n2에 대하여 (n1&gt; n2) n1를 n2로 
나눈 나머지를 r이라고 할 때 n1과 n2의 최대 공약수는 n2와 r의 최대공약수와 같다.</li>
<li>최대공약수 : gcd</li>
</ul>
<p>6_025 하노이의 탑</p>
<ul>
<li>퍼즐 게임의 일종으로 세 개의 기둥을 이용해서 원판을 다른 기둥으로 옮기면 되고, 
제약 조건은 다음과 같다.</li>
</ul>
<ol>
<li>한 번에 한 개의 원판만 옮길 수 있다.</li>
<li>큰 원판이 작은 원판 위에 있어서는 안된다.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 20]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-20</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-20</guid>
            <pubDate>Sun, 25 Jun 2023 16:05:12 GMT</pubDate>
            <description><![CDATA[<p>[ 오늘의 수업내용 요약 ]</p>
<p>4_027 튜플 아이템 정렬</p>
<ul>
<li>튜플은 수정이 불가하기 때문에 리스트로 변환 후 정렬하자</li>
<li>list() -&gt; sort() -&gt; tuple() 순서로 변환
자료형 변환 -&gt; 오름차순 정렬 -&gt; 자료형 변환</li>
<li>sort(reverse = True)</li>
<li>sorted()함수를 이용하면 튜플도 정렬할 수 있다.</li>
<li>sorted()는 리스트 자료형을 변환한다.</li>
</ul>
<p>4_028/029 튜플과 for문</p>
<ul>
<li>for문을 이용하면 튜플의 아이템을 자동으로 참조할 수 있다.</li>
<li>for문을 이용하면 튜플 내부에 또 다른 튜플의 아이템을 조회할 수 있다.</li>
<li>for문과 if문을 이용해서 출력도 가능하다.
4_030/031 튜플과 while문</li>
<li>while문을 이용하면 다양한 방법으로 아이템 조회가 가능하다.</li>
<li>len(), flag변수, while True 3가지 방법으로 사용 가능</li>
</ul>
<p>4_032 딕셔너리</p>
<ul>
<li>키와 값(value)을 이용해서 자료를 관리한다.</li>
<li>키가 중복되면 안되지만 값은 중복되도 상관없다.</li>
<li>{}를 이용해서 선언하고, 키:값의 형태로 아이템을 정의한다.</li>
<li>키와 값에는 숫자, 문자열, 논리형 뿐만 아니라 컨테이너 자료형도 올 수 있다.</li>
<li>단 키에 immutable(변경불가능한)값은 올 수 있지만 mutable값은 올 수 없다.</li>
</ul>
<p>4_033 딕셔너리 조회</p>
<ul>
<li>딕셔너리는 키를 이용해서 값을 조회한다.</li>
<li>존재하지 않는 키를 이용한 조회시 에러가 발생한다.</li>
<li>get(key)를 이용해서 값을 얻을 수 있다.</li>
<li>get(key)은 값이 없어도 에러를 일으키지 않는다.</li>
</ul>
<p>4_034 딕셔너리 추가</p>
<ul>
<li>딕셔너리 이름[키(key)] = 값(value)형태로 아이템을 추가한다.</li>
<li>같은 키 값을 추가하면 값을 변경하는 결과를 가져온다.</li>
</ul>
<p>4_035 딕셔너리 수정</p>
<ul>
<li>딕셔너리 이름[키(key)] = 값(value)형태로 아이템을 수정한다.</li>
</ul>
<p>4_036 key()와 values()</p>
<ul>
<li>전체 key()와 values()을 조회할 수 있다.</li>
<li>ites() = key() + value()</li>
<li>리스트로 변환 가능</li>
<li>for문을 이용해 조회가능하다.</li>
<li>딕셔너리는 인덱스가 존재하지 않는다.</li>
</ul>
<p>4_037 딕셔너리 삭제</p>
<ul>
<li>del과 key를 이용한 item 삭제</li>
<li>pop()와 key를 이용한 item 삭제</li>
<li>pop()는 삭제된 값이 반환된다.</li>
</ul>
<p>4_038 딕셔너리 유용한 기능</p>
<ul>
<li>in/not in 키워드 : 키 존재 유/무를 판단한다.</li>
<li>len() : 딕셔너리 길이(아이템의 개수)를 알 수 있다.</li>
<li>clear() : 모든 아이템을 삭제한다.</li>
</ul>
<p>4_051
aboutpython.split()</p>
<p>6_001 선형 검색</p>
<ul>
<li>선형으로 나열되어 있는 데이터를 순차적으로 스캔하면서 원하는 값을 찾는다.</li>
<li>인덱스 0부터 순차적으로 검색</li>
<li>검색 성공 or 검색 실패</li>
<li>보초법 : 마지막 인덱스에 찾으려는 값을 추가해서 찾는 과정을 간략화한다.</li>
</ul>
<p>6_003 이진 검색</p>
<ul>
<li>정력되어 있는 자료구조에서 중앙값과의 크고 작음을 이용해서 데이터를 검색한다.</li>
</ul>
<p>6_005 순위</p>
<ul>
<li>수의 크고 작음을 이용해서 수의 순서를 정하는 것을 순위라고 한다.</li>
<li>파이썬 코드 참조<blockquote>
<p>import random</p>
</blockquote>
</li>
</ul>
<p>nums = random.sample(range(10, 101), 20)
ranks = [0 for i in range(20)]
print(f&#39;ranks : {ranks}&#39;)
print(f&#39;nums : {nums}&#39;)</p>
<p>for idx, num1 in enumerate(nums):
    for num2 in nums:
        if num1 &lt; num2:
            ranks[idx] += 1</p>
<p>print(f&#39;ranks : {ranks}&#39;)
print(f&#39;nums : {nums}&#39;)</p>
<p>for idx, num in enumerate(nums):
    print(f&#39;nums : {num} ranks : {ranks[idx] +1}&#39;)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[인문대생의 데이터 직군 취업로그 19]]></title>
            <link>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-19</link>
            <guid>https://velog.io/@mogu_/%EC%9D%B8%EB%AC%B8%EB%8C%80%EC%83%9D%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%81%EA%B5%B0-%EC%B7%A8%EC%97%85%EB%A1%9C%EA%B7%B8-19</guid>
            <pubDate>Sun, 25 Jun 2023 16:02:28 GMT</pubDate>
            <description><![CDATA[<p>[ 오늘의 수업내용 요약 ]</p>
<p>4_018 리스트 나머지 기능들</p>
<ul>
<li>리스트를 곱셈 연산하면 아이템이 반복된다.(리스트 자체가 처음부터 끝까지 n번 연속 출력됨)</li>
<li>index(item)함수를 item의 인덱수를 알아낼 수 있다.</li>
<li>ex) index(‘강호동’) =&gt; 1번째 인덱스</li>
</ul>
<p>4_019 리스트 나머지 기능들 2</p>
<ul>
<li>count()함수를 이용하면 특정 아이템의 개수를 알아낼 수 있다.</li>
<li>ex) count(‘강호동’)</li>
<li>del 키워드를 이용하면 특정 아이템을 삭제할 수 있다.</li>
<li>ex) del students[1]</li>
</ul>
<p>4_020 튜플</p>
<ul>
<li>튜플이란 리스트와 비슷하지만 아이템 변경이 불가하다.</li>
<li>()를 이용해서 선언하고, 데이터 구분은 ‘,’를 이용한다.</li>
<li>숫자, 문자열, 논리항 등 모든 기본 데이터를 같이 저장할 수 있다.</li>
<li>튜플에도 또 다른 컨테이너 자료형 데이터를 저장할 수 있다.</li>
</ul>
<p>4_021 튜플 아이템 조회</p>
<ul>
<li>튜플 리스트와 마찬가지로 아이템에 자동으로 부여되는 번호표가 있다.</li>
<li>튜플 아이템은 인덱스를 이용해서 조회 가능하다.</li>
<li>잘못된 인덱스로 인한 에러 발생 가능성 있음</li>
</ul>
<p>4_022 in 과 not in 키워드</p>
<ul>
<li>in, not in 키워드를 이용하면 아이템의 존재 유/무를 알 수 있다.</li>
<li>in, not in 키워드는 문자열에서도 사용 가능하다.</li>
</ul>
<p>4_023 튜플 길이</p>
<ul>
<li>리스트와 마찬기지로 튜플에 저장된 아이템 개수를 튜플 길이라고 한다</li>
<li>len()과 반복문을 이용하면 튜플의 아이템 조회가 가능하다.</li>
</ul>
<p>4_024 튜플 결합</p>
<ul>
<li>두 개의 튜플을 결합할 수 있다.</li>
<li>리스트에서 사용할 수 있는 extend()함수를 튜플에서는 사용할 수 없다.</li>
</ul>
<p>4_025 튜플 슬라이싱</p>
<ul>
<li>리스트와 마찬가지로 [n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.</li>
<li>슬라이싱할 때 단계를 설정할 수 있다.</li>
<li>[2:-2:2] 인덱스 2부터 –2 앞까지의 인덱스를 2개씩 건너뛰어 출력해라 라는 의미</li>
<li>튜플은 슬라이싱을 이용해서 아이템을 변경할 수 없다.</li>
<li>리스트에 튜플 아이템으로 변경 가능하다.</li>
</ul>
<p>4_026 리스트와 튜플</p>
<ul>
<li>튜플은 리스트와 달리 아이템 추가, 변경, 삭제가 불가능하다.</li>
<li>튜플은 선언 시 괄호 생략이 가능하다.</li>
<li>리스트와 튜플은 자료형 변환이 가능하다.</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>