파이썬에서 파일을 저장할때 encoding을 설정해주지 않으면 윈도우 환경에서는 파일을 열었을때 괴상한 문자가 나온다.
물론 linux 계열인 mac에서도 encoding을 잘못 설정하면 괴상한 문자가 나오기는 당연!

Encoding

  • encoding은 os마다 다르다. 윈도우에서는 cp949
  • linux에서는 utf8을 사용
  • 아래 코드에서 encoding을 설정하는곳이 있는데
  • 위처럼 윈도우에서 파일을 열어볼 예정이라면 encoding=cp949를 넘겨줘야 한다.
  • linux 계열에서 파일을 열어볼 예정이라면 encoding을 설정할 필요가 없다.
  • 설정할 필요가 없는 이유는 ? pandas to_csv()를 보면 defulat: utf-8이기 때문이다.

오늘부터 자주 사용하게 되는 리눅스 명령어를 모아봐야겠다.

1. 메모리 현황 보기 : cat /proc/meminfo | grep Mem

cat /proc/meminfo | grep Mem
MemTotal:       131445188 kB
MemFree:         6539336 kB
MemAvailable:   52647956 kB

* Free memory is the amount of memory which is currently not used for anything. This number should be small, because memory which is not used is simply wasted. Available memory is the amount of memory which is available for allocation to a new process or to existing processes.
* free memory는 현재 어떤 것에도 사용되지 않는 메모리이고, 사용되지 않는 메모리는 낭비되기때문에 사이즈가 작음.
available memory는 새로운 프로세스 또는 존재하는 프로세스에 allocation할 수 있는 메모리.

2. 특정 port가 사용되는지 보기 : sudo netstat -ntlp | grep :5044
port가 listen되고 있는지 볼 수 있음.


3. cpu 현황 전체 보기 : cat /proc/cpuinfo

processor 수만 따로 보기 : grep -c processor /proc/cpuinfo

 

  • 아파트 단지를 검색하면 단지 주소, 좌표가 있었으면 좋겠다는 생각에 지도 관련 api를 제공하는 서비스를 찾아봤다.
  • NaverAPI와 kakaoAPI가 있었는데 쉽게 사용하는것은 kakaoAPI가 훠얼씬 편했다.
  • 네이버의 경우 NBP로 지도API가 넘어가면서 결재카드를 등록하는 등의 번거로운 작업이 굉장히 많다.
  • 반면 카카오는 사용하는게 매~우 편리했다. RestAPI 툴도 제공해서 바로 결과값도 확인이 가능
  • 네이버도 가능했을지 모르지만... 일단 회원가입하고 카드등록하라고해서 일단 패스
  • 나중에 정말 사용을 해야하는데 카카오에 기능이 없거나 요청에 제한이 생긴다면 네이버를 사용할지 몰라도 당장은....
  • 일단 네이버는 일에 요청수 제한이 있는데 카카오는 별 다른... 가이드가 없었다.
  • 네이버 지도 API
  • 카카오 지도 API

카카오 지도에서는 간단하게 테스트가 가능한데 아래에 키만 입력하면 조회가 가능하다

{
    "documents": [
        {
            "address_name": "경기 성남시 분당구 삼평동 681",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "서비스,산업 > 인터넷,IT > 포털서비스",
            "distance": "",
            "id": "18577297",
            "phone": "1899-1326",
            "place_name": "카카오 판교오피스",
            "place_url": "http://place.map.kakao.com/18577297",
            "road_address_name": "경기 성남시 분당구 판교역로 235",
            "x": "127.108212226945",
            "y": "37.4020560436306"
        },
        {
            "address_name": "제주특별자치도 제주시 영평동 2181",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "서비스,산업 > 인터넷,IT > 포털서비스",
            "distance": "",
            "id": "18059921",
            "phone": "1899-1326",
            "place_name": "카카오 스페이스닷원",
            "place_url": "http://place.map.kakao.com/18059921",
            "road_address_name": "제주특별자치도 제주시 첨단로 242",
            "x": "126.57066132748933",
            "y": "33.450677320070916"
        },
        {
            "address_name": "제주특별자치도 제주시 영평동 2184",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "서비스,산업 > 인터넷,IT > 포털서비스",
            "distance": "",
            "id": "22251293",
            "phone": "1899-1326",
            "place_name": "카카오 스페이스닷투",
            "place_url": "http://place.map.kakao.com/22251293",
            "road_address_name": "제주특별자치도 제주시 첨단로 216-19",
            "x": "126.570875463183",
            "y": "33.4526219140826"
        },
        {
            "address_name": "경기 성남시 분당구 백현동 541",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "가정,생활 > 문구,사무용품 > 디자인문구 > 카카오프렌즈",
            "distance": "",
            "id": "26944943",
            "phone": "031-5170-2451",
            "place_name": "카카오프렌즈 현대백화점판교점",
            "place_url": "http://place.map.kakao.com/26944943",
            "road_address_name": "경기 성남시 분당구 판교역로146번길 20",
            "x": "127.112385409653",
            "y": "37.392202184912"
        },
        {
            "address_name": "경기 성남시 분당구 삼평동 680",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "금융,보험 > 금융서비스 > 은행",
            "distance": "",
            "id": "27578089",
            "phone": "1599-3333",
            "place_name": "한국카카오은행",
            "place_url": "http://place.map.kakao.com/27578089",
            "road_address_name": "경기 성남시 분당구 판교역로 231",
            "x": "127.108644810967",
            "y": "37.4012843732024"
        },
        {
            "address_name": "경기 성남시 분당구 백현동 537",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "금융,보험 > 금융서비스",
            "distance": "",
            "id": "949394317",
            "phone": "1644-7405",
            "place_name": "카카오페이",
            "place_url": "http://place.map.kakao.com/949394317",
            "road_address_name": "경기 성남시 분당구 판교역로 152",
            "x": "127.110699049301",
            "y": "37.39426531392528"
        },
        {
            "address_name": "경기 성남시 분당구 삼평동 685",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "서비스,산업 > 전문대행 > 고객관리,TM",
            "distance": "",
            "id": "25824400",
            "phone": "",
            "place_name": "카카오 고객센터",
            "place_url": "http://place.map.kakao.com/25824400",
            "road_address_name": "경기 성남시 분당구 판교역로241번길 20",
            "x": "127.107372945892",
            "y": "37.4027632089203"
        },
        {
            "address_name": "경기 성남시 분당구 삼평동 672",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "서비스,산업 > 인터넷,IT > 소프트웨어",
            "distance": "",
            "id": "13556208",
            "phone": "1644-4755",
            "place_name": "카카오페이지",
            "place_url": "http://place.map.kakao.com/13556208",
            "road_address_name": "경기 성남시 분당구 판교역로 221",
            "x": "127.108996408808",
            "y": "37.4007470412071"
        },
        {
            "address_name": "경기 성남시 분당구 삼평동 633",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "스포츠,레저 > 골프",
            "distance": "",
            "id": "18858127",
            "phone": "1666-1538",
            "place_name": "카카오VX",
            "place_url": "http://place.map.kakao.com/18858127",
            "road_address_name": "경기 성남시 분당구 판교로228번길 17",
            "x": "127.10158226559571",
            "y": "37.400195010191624"
        },
        {
            "address_name": "경기 성남시 분당구 백현동 537",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "서비스,산업 > 기업",
            "distance": "",
            "id": "547176330",
            "phone": "",
            "place_name": "카카오모빌리티",
            "place_url": "http://place.map.kakao.com/547176330",
            "road_address_name": "경기 성남시 분당구 판교역로 152",
            "x": "127.1101250888609",
            "y": "37.39407843730005"
        },
        {
            "address_name": "경기 성남시 분당구 백현동 537",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "서비스,산업 > 인터넷,IT > 게임업체",
            "distance": "",
            "id": "24974641",
            "phone": "1566-8834",
            "place_name": "카카오게임즈",
            "place_url": "http://place.map.kakao.com/24974641",
            "road_address_name": "경기 성남시 분당구 판교역로 152",
            "x": "127.11016618280905",
            "y": "37.39437843929819"
        },
        {
            "address_name": "경기 성남시 분당구 삼평동 680",
            "category_group_code": "PS3",
            "category_group_name": "어린이집,유치원",
            "category_name": "교육,학문 > 유아교육 > 어린이집",
            "distance": "",
            "id": "26914389",
            "phone": "031-607-9993",
            "place_name": "늘예솔카카오판교어린이집",
            "place_url": "http://place.map.kakao.com/26914389",
            "road_address_name": "경기 성남시 분당구 판교역로 231",
            "x": "127.108879816692",
            "y": "37.401345426449"
        },
        {
            "address_name": "경기 성남시 분당구 삼평동 681",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "스포츠,레저 > 골프 > 골프연습장 > 스크린골프연습장",
            "distance": "",
            "id": "245183397",
            "phone": "031-778-6806",
            "place_name": "카카오VX 판교",
            "place_url": "http://place.map.kakao.com/245183397",
            "road_address_name": "경기 성남시 분당구 판교역로 235",
            "x": "127.108645940077",
            "y": "37.4020664581538"
        },
        {
            "address_name": "경기 성남시 분당구 삼평동 670",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "서비스,산업 > 기업",
            "distance": "",
            "id": "730664075",
            "phone": "",
            "place_name": "카카오커머스",
            "place_url": "http://place.map.kakao.com/730664075",
            "road_address_name": "경기 성남시 분당구 대왕판교로 660",
            "x": "127.10681400191869",
            "y": "37.40046431022458"
        },
        {
            "address_name": "경기 성남시 분당구 삼평동 681",
            "category_group_code": "",
            "category_group_name": "",
            "category_name": "교통,수송 > 자동차 > 전기자동차 충전소",
            "distance": "",
            "id": "679200161",
            "phone": "",
            "place_name": "판교H스퀘어 카카오판교사옥 전기차충전소",
            "place_url": "http://place.map.kakao.com/679200161",
            "road_address_name": "경기 성남시 분당구 판교역로 235",
            "x": "127.108616558231",
            "y": "37.4020547718792"
        }
    ],
    "meta": {
        "is_end": false,
        "pageable_count": 45,
        "same_name": {
            "keyword": "카카오",
            "region": [],
            "selected_region": ""
        },
        "total_count": 421
    }
}

공공데이터 포털에서 데이터를 가져와서 확인하는데 동일한 row가 있어서 확인을 해봤다.

185    2019-07-01    1995    2019    정자동    40000    정든마을(5단지)(신화)    7    0    8    69.93    192    41135    8    40000    572.000572    21.153858    60-85m2이하    2019-07-08
191    2019-07-01    1995    2019    정자동    40000    정든마을(5단지)(신화)    7    0    8    69.93    192    41135    8    40000    572.000572    21.153858    60-85m2이하    2019-07-08

해당 row를 보면 동일한 row가 두개가 있다! 가격이 동일하고 거래날짜도 동일한!!! 이런...
전처리가 반드시 필요하다.

부동산 데이터를 살펴보다 보니 층 데이터에 NaN이 있는게 아닌가.. 이게 어떤 값인지... 웃긴건 분당동 전체 112612개중에 달랑 3개만 NaN의 값이다.

date    건축년도    년    법정동    보증금액    아파트    월    월세금액    일    전용면적    지번    지역코드    층
124    201906    1992.0    2019.0    수내동    64,000    양지마을(5단지)(한양515-529)    6.0    0    29.0    84.9    24    41135.0    NaN
126    201906    1992.0    2019.0    수내동    64,000    양지마을(5단지)(한양515-529)    6.0    0    29.0    84.9    24    41135.0    NaN
128    201906    1992.0    2019.0    수내동    64,000    양지마을(5단지)(한양515-529)    6.0    0    29.0    84.9    24    41135.0    NaN

데이터의 신뢰도를 위해서 국토부에서 동일한 기간의 데이터를 받아봤더니 NaN의 값은 층 0층이다.

1516    경기도 성남분당구 수내동    24    0024    0000    양지마을(5단지)(한양515-529)    전세    84.9    201906    29    64,000    0    0    1992    내정로165번길 35
1517    경기도 성남분당구 수내동    24    0024    0000    양지마을(5단지)(한양515-529)    전세    84.9    201906    29    64,000    0    0    1992    내정로165번길 35
1518    경기도 성남분당구 수내동    24    0024    0000    양지마을(5단지)(한양515-529)    전세    84.9    201906    29    64,000    0    0    1992    내정로165번길 35

응? 0층이 어디에 있지.. 네이버 부동산 매물을 보아도 양지마을(5단지)에는 0층이 없다.

부동산 데이터는 국토부에서 가져올수가 있는데,
국토부 데이터는 하나씩 특정 조회를 통해서 가져올 수 있다.
내가 원하는 모든 데이터를 가져오기에는 매우 큰 노가다가 필요하다.

국토부 데이터 파싱하기

  • 국토부에서 특정조건으로 데이터를 다운로드
  • 아래와 같이 parsing이 가능하다.

국토부 데이터 결과는 아래와 같다.

시군구    번지    본번    부번    단지명    전월세구분    전용면적(㎡)    계약년월    계약일    보증금(만원)    월세(만원)    층    건축년도    도로명
0    경기도 성남분당구 구미동    77    0077    0000    까치마을(1단지)(대우롯데선경)    전세    84.79    201905    2    53,000    0    10    1995    미금로 184
1    경기도 성남분당구 구미동    77    0077    0000    까치마을(1단지)(대우롯데선경)    전세    51.32    201905    3    29,000    0    1    1995    미금로 184
2    경기도 성남분당구 구미동    77    0077    0000    까치마을(1단지)(대우롯데선경)    월세    51.32    201905    6    12,000    60    4    1995    미금로 184

공공데이터에서 API를 통한 호출

  • opendata는 API를 제공하고 있어 serviceKey를 발급받고 아래와 같이 조회하면 된다.
  • 파라미터로 사용하는 값은 월데이터 ex: 201901법정동코드이다.
  • 이때 하나의 팁은 numOfRows의 값을 9999로 넘겨주면!? 한번의 요청으로 모든 결과를 가져올수 있다.
  • 이렇게 해야하는 이유는 요청 제한이 있기 때문이다.

공공데이터의 결과는 아래와 같다.

건축년도    년    법정동    보증금액    아파트    월    월세금액    일    전용면적    지번    지역코드    층
0    1992    2019    분당동    30,000    샛별마을(동성)    5    0    1    59.4    35    41135    5
1    1993    2019    분당동    35,000    장안타운(건영)    5    0    1    67.73    66    41135    9
2    1993    2019    분당동    26,500    장안타운(건영)    5    0    1    53.72    66    41135    1

1. automatic garbage collection.

프로그램에서 <사용되고있거나 or 참조되고있는> 객체와 <사용되지않거나 or 참조되고있지않는> 객체를 구별하여,
<사용되지않고 or 참조되지않고있는> 객체가 사용하는 메모리를 회수 할 수 있다.
c에서는 수동 프로세스인데, java에서는 automatic process!

2. process

  • step1. marking
    • 마킹단계에서는 모든 객체들을 스캔하여, 어떤것이 안쓰이는지를 마킹함.
  • step2. normal deletion
    • 참조되는 객체는 남기고, 참조되지 않는 객체는 지우고, 메모리 할당은 free space를 가르키고, 메모리 할당이 이루어져야 할때 free space를 찾는다.
  • step3. deletion with compacting
    • 남겨진 참조되는 객체들을 compact 압축 할 수 있다.
    • 남겨진 객체들을 모음으로써 새로운 메모리 할당을 더욱 쉽고, 빠르게 할 수 있음. ---- 선택?

3. the generatinal garbage collection process.

대부분의 객체들은 아주 짧은 수명을 지님.
시간이 지남에 따라 더 적은 수의 객체가 할당 된 상태로 유지 됨.
실제로 대부분의 객체는 그래프 왼쪽값이 높을 수록 수명이 매우 짧음.
jvm성능 강화를 위해 위의 내용을 참고하여 jvm generations개념을 도입함.

young generation은 1개의 eden영역과 2개의 survivor영역(s0, s1)이 존재.
지난 글 참조. 2020/02/19 - [우리는 개발자] - [java] GC에 관하여.

  • step1. 새로운 객체가 eden영역에 할당됨. survivor영역은 빈곳으로 시작.
  • step2. eden영역 모두 차면, 마이너 gc발생 : 참조되는 객체가 s0 영역으로 이동되고, 참조되지 않는 영역은 지워짐.
  • step3. 다음 gc에도 같은 일이 eden영역에서 벌어지는데, 참조되지 않는 영역은 지워지고 참조되는 영역은 s1 으로 이동.                               s0에 있던 객체들도 s1로 이동. 이동할때마다 age가 1씩 늘어나는 셈.
  • step4. 모든 surviving 객체가 s1으로 이동되면 s0과 eden이 모두 클리어된 상태. survivor공간에는 age가 다른 객체들이 존재하게됨.
  • step5. 다음 minor gc에도 같은 프로세스가 반복됨. 이때에 survivor spaces들이 전환됨.
  • step6. minor gc이후 오래된 객체들은 특정 age(treshold)에 도달하면 old generation으로 승격됨.
  • step7. 계속해서 minor gc가 일어나다가, 결국에는 old genertaion에서 major gc도 발생하게 됨.

그림으로 살펴보면 아래와 같은 흐름이 됨.

* 아주 잘 정리되어있는 오라클 공식문서 

4. jvm java garbage collectors 옵션 설정.

-Xms : jvm start할때 초기 heap size.
-Xmx : maximum heap size.
-Xmn : young gengeration size.
-XX:PermSize : starting size of the permanent generation.
-XX:MaxPermSize : the maximu, size of the Permanent Generation

1. JRE

Java Runtime Environment = java virtual machine(JVM) + java platform core calsses + supporting java platform libraries

2. JAVA (object-oriented programming language)

  • 1) platform independence
    • java 애플리케이션은 bytecode로 컴파일 됨. 그리고 jvm위에 올라가서 동작함. 그래서 다른 os, 다른 device에도 잘 돌아감.
  • 2) object-oriented
    • c와 c++ feature를 많이 차용한 object-oriented 언어임.
  • 3) automatic garbage collection
    • java는 자동적으로 메모리를 할당하고, 해제함. 프로그램이 그 일을 해야하는 버든이 없음.
  • 4) rich standard library
    • 미리 만들어진 오브젝트들이 많음. input/output, networking, date manipulation과 같은 일을 수행하기 위한

3. jdk

  • jdk (java development kit)은 java 애플리케이션을 developing하기 위한 툴의 컬렉션임.
  • 즉, jdk로 java program을 컴파일하고, jvm에서 돌릴 수 있음.
  • jdk는 application을 패키징하고, 배포해주는 기능까지 함.

4. 정리하면 ? jdk는 complile할때 필요한거고, jre는 run할때 필요한것인데

  • jdk설치하면 jre까지 전부 설치됨.
  • jdk와 jre는 서로 java application programming interfaces를 공유함.
  • java api는 java application을 만들기 위해 사용되는 패키징된 라이브러리의 컬렉션.

5. jvm

  • 추상화된 computing machine임.

+ Recent posts