반응형

1. 시험환경

    ˙ 윈도우

    ˙ python, venv, pip

 

2. 목적

    ˙ 프로젝트 별 패키지 버전을 관리 하기 위해 파이썬 가상화 환경에서 개발한다.

    ˙ venv 관련 명령어 및 패키지 관리법에 대하여 알아보자.

 

3. 적용

    ① 파이썬이 설치되어 있어야 한다.

        - 참고 : https://languagestory.tistory.com/31

 

Window 파이썬(python) 설치하기

1. 시험환경 ˙ 윈도우 ˙ 파이썬 2. 목적 ˙ 윈도우 운영체제에서 파이썬을 설치한다. 3. 적용 ① 파이썬 공식 사이트에 접속하여 "Downloads" 메뉴를 클릭한다. - https://www.python.org/ ② 설치 프로그램이

languagestory.tistory.com

 

    ② 생성 : 가상환경을 생성하면 "가상환경-이름"으로 하위폴더가 생성된다.

        - python -m venv [가상환경-이름]

        - 보통, [가상환경-이름].venv로 지정하는 것이 관례이다.

 

    ③ 활성화 : 커맨드라인 맨 왼쪽에 (가상환경-이름)이 붙는 것을 확인하면 활성화 모드로 진입한다.

        - [가상환경-이름]/Scripts/activate.bat

 

    ④ 활성화 모드에서 "deactivate" 명령어를 입력하면 비활성화 된다.

 

    ⑤ 가상환경 내에서 패키지 설치/삭제

        - 가상환경 활성화 상태에서 "pip install" 명령어로 패키지 설치
        - 가상환경 활성화 상태에서 "pip uninstall" 명령어로 패키지 삭제

        - 가상환경 생성 폴더 내에서 작업한 것에 유의한다.

 

    ⑥ 설치 패키지를 확인하고 다른 환경에서도 동일한 패키지를 일괄 설치할 경우의 명령어를 실행한다.

        - pip freeze
        - pip freeze > requirements.txt
        - pip install -r requirements.txt

가상환경에서 설치한 패키지만 포함

 

     가상환경 및 관련 패키지 삭제

        - 폴더를 삭제한다 :  [가상환경-이름] 폴더

 

반응형
반응형

1. 시험환경

    ˙ 윈도우

    ˙ 파이썬

 

2. 목적

    ˙ 윈도우 운영체제에서 파이썬을 설치한다.

 

3. 적용

    ① 파이썬 공식 사이트에 접속하여 "Downloads" 메뉴를 클릭한다.

        - https://www.python.org/

 

    ② 설치 프로그램이 다운로드 완료되면 실행한다.

 

    ③ "Add Python 3.10 to PATH"를 체크하는 것이 사용에 편리하다.

 

    ④ 설치가 진행된다.

 

4. 결과

    ˙ ③ "Add Python 3.10 to PATH"를 체크한 경우, 시스템 변수 PATH에 자동 등록 되었다.

 

    ˙ 기본 설치 경로 : C:\Users\[사용자]\AppData\Local\Programs\Python

        - python x32, x64 중 하나만 사용할 수 있다.

        - python x32를 설치한 경우, "-32"로 끝나는 폴더가 생성된다.

        - python x32를 설치한 경우, python library 사용에 제약이 있을 수 있다.

 

    ˙ CLI에서 "python"을 입력하여 동작하는지 확인한다.

 

반응형
반응형

1. 시험환경

    ˙ python

    ˙ pandas

 

2. 목적

    ˙ excel 파일을 읽어서(load) dataframe을 생성한다.

    ˙ dataframe을 excel 파일로 저장한다.

 

3. 적용

    ① 파이썬을 이용하여 읽어 올 엑셀(excel) 파일을 준비한다.

read.xlsx
0.01MB

 

    ② 엑셀(excel) 파일을 읽어서 데이터를 추가한 후 엑셀(excel) 파일로 저장하는 파이썬 예제 코드이다.

        - 첫번째 행에 'idx' 컬럼 생성 후 index 값을 추가한다.

        - 마지막 행에 'extra' 컬럼 생성 후 모든 행에 'appended_column'을 추가한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
 
if __name__ == '__main__':
 
    # 데이터프레임 생성 (load from excel)
    data_frame = pd.read_excel('./RawData/read.xlsx', engine='openpyxl', sheet_name='Sheet1')
 
    row_list = []
 
    for index, row in data_frame.iterrows():
        row_list.append([index, row['Language'], row['Money'], row['Nation'], row['Population'], 'appended_column'])
 
    print(row_list)
 
    # 데이터프레임 생성 (save to excel)
    df = pd.DataFrame(row_list, columns=['idx''Language''Money''Nation''Population''extra'])
 
    # Excel 파일로 저장
    df.to_excel('./RawData/write.xlsx', index=False, sheet_name='Sheet2')
 
cs

 

4. 결과

    ˙ 프로그램 실행 콘솔로그

 

    ˙ 프로그램 실행 후 생성된 엑셀 파일 (추가된 컬럼)

 

반응형
반응형

1. 시험환경

    ˙ Python

    ˙ JSON

 

2. 목적

    ˙ python을 이용하여 JSON 파일 Parsing 하는 코드를 작성한다.

    ˙ JSON 파일로부터 읽어들인 내용을 출력하는 코드를 작성한다.

 

3. 적용

    ① json 샘플파일은 공공 데이터 포털에서 획득한 아파트 실거래가 정보이다.

sample.json
0.03MB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
{
    "response":{
       "header":{
          "resultCode":"00",
          "resultMsg":"NORMAL SERVICE."
       },
       "body":{
          "items":{
             "item":[
                {
                   "거래금액":"250,000",
                   "거래유형":"중개거래",
                   "건축년도":"2010",
                   "년":"2022",
                   "도로명":"소공로",
                   "도로명건물본번호코드":"00046",
                   "도로명건물부번호코드":"00000",
                   "도로명시군구코드":"11140",
                   "도로명일련번호코드":"05",
                   "도로명지상지하코드":"0",
                   "도로명코드":"3101004",
                   "법정동":"회현동2가",
                   "법정동본번코드":"0087",
                   "법정동부번코드":"0000",
                   "법정동시군구코드":"11140",
                   "법정동읍면동코드":"12200",
                   "법정동지번코드":"1",
                   "아파트":"쌍용남산플래티넘",
                   "월":"1",
                   "일":"31",
                   "일련번호":"11140-1123",
                   "전용면적":"177",
                   "중개사소재지":"서울 중구",
                   "지번":"87",
                   "지역코드":"11140",
                   "층":"23",
                   "해제사유발생일":"None",
                   "해제여부":"None"
                },
                {
                   "거래금액":"59,500",
                   "거래유형":"직거래",
                   "건축년도":"1982",
                   "년":"2022",
                   "도로명":"퇴계로50길",
                   "도로명건물본번호코드":"00042",
                   "도로명건물부번호코드":"00000",
                   "도로명시군구코드":"11140",
                   "도로명일련번호코드":"01",
                   "도로명지상지하코드":"0",
                   "도로명코드":"4103357",
                   "법정동":"묵정동",
                   "법정동본번코드":"0011",
                   "법정동부번코드":"0002",
                   "법정동시군구코드":"11140",
                   "법정동읍면동코드":"13600",
                   "법정동지번코드":"1",
                   "아파트":" 충무",
                   "월":"1",
                   "일":"27",
                   "일련번호":"11140-16",
                   "전용면적":"54.18",
                   "중개사소재지":"None",
                   "지번":"11-2",
                   "지역코드":"11140",
                   "층":"1",
                   "해제사유발생일":"None",
                   "해제여부":"None"
                },
                {
                   "거래금액":"25,000",
                   "거래유형":"직거래",
                   "건축년도":"2020",
                   "년":"2022",
                   "도로명":"동호로33길",
                   "도로명건물본번호코드":"00015",
                   "도로명건물부번호코드":"00000",
                   "도로명시군구코드":"11140",
                   "도로명일련번호코드":"00",
                   "도로명지상지하코드":"0",
                   "도로명코드":"4103109",
                   "법정동":"오장동",
                   "법정동본번코드":"0145",
                   "법정동부번코드":"0001",
                   "법정동시군구코드":"11140",
                   "법정동읍면동코드":"15400",
                   "법 정동지번코드":"1",
                   "아파트":"오렌지카운티을지로",
                   "월":"1",
                   "일":"1",
                   "일련번호":"11140-1355",
                   "전용면적":"14.37",
                   "중개사소재지":"None",
                   "지번":"145-1",
                   "지역코드":"11140",
                   "층":"14",
                   "해제사유발생일":"22.01.21",
                   "해제여부":"O"
                },
                {
                   "거래금액":"25,000",
                   "거래유형":"직거래",
                   "건축년도":"2020",
                   "년":"2022",
                   "도로명":"동호로33길",
                   "도로명건물본번호코드":"00015",
                   "도로명건물부번호코드":"00000",
                   "도로명시군구코드":"11140",
                   "도로명일련번호코드":"00",
                   "도로명지상지하코드":"0",
                   "도로명코드":"4103109",
                   "법정동":"오장동",
                   "법정동본번코드":"0145",
                   "법정동부번코드":"0001",
                   "법정동시군구코드":"11140",
                   "법정동읍면동코드":"15400",
                   "법정동지번코드":"1",
                   "아파트":"오렌지카운티을지로",
                   "월":"1",
                   "일":"1",
                   "일련번호":"11140-1355",
                   "전용면적":"14.37",
                   "중개사소재지":"None",
                   "지번":"145-1",
                   "지역코드":"11140",
                   "층":"15",
                   "해제사유발생일":"22.02.03",
                   "해제여부":"O"
                }
             ]
          },
          "numOfRows":"1000",
          "pageNo":"1",
          "totalCount":"19"
       }
    }
 }
cs

 

    ② 동일 폴더에 있는 sample.json 파일 Parsing 및 출력 코드를 작성한다.

main.py
0.00MB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import json
 
 
if __name__ == '__main__':
 
    jsonFile = './sample.json'
    with open(jsonFile, encoding='UTF-8'as f:
        data = json.load(f)
 
    aptDealList = list()
    if data['response']['header']['resultCode'== '00':
        aptDealList = data['response']['body']['items']['item']
 
    for item in aptDealList:
        print(item)
    
cs

 

4. 결과

    ˙ 코드 실행 결과 json 파일을 Parsing하여 출력한다.

반응형
반응형

1. 시험환경

    ˙ python

    ˙ configparser

 

2. 목적

    ˙ configparser 라이브러리를 import하고 사용법을 학습한다.

    ˙ DB connection 데이터를 별도 파일로 만들고 configparser 라이브러리를 이용하여 설정 정보를 획득한다.

 

3. 적용

    ① DB 접속 정보를 config 파일에 저장한다.

        - 파일명 : config.ini

1
2
3
4
5
6
[DB]
dbUser  = account
dbPw    = password
dbIp    = 127.0.0.1
dbPort  = 3306
dbName  = sample
cs

 

    ② configparser 라이브러리를 import하고 config.ini 데이터를 획득하여 dict 자료형에 저장한다.

        - 파일명 : getConfig.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import configparser
 
 
properties = configparser.ConfigParser()
properties.read('./config.ini', encoding="utf-8")
 
def getDbConfig():
    configDb = properties["DB"]
 
    ### MariaDB Connection Info.
    respCnf = dict()
    respCnf["dbUser"]   = configDb["dbUser"]
    respCnf["dbPw"]     = configDb["dbPw"]
    respCnf["dbIp"]     = configDb["dbIp"]
    respCnf["dbPort"]   = int(configDb["dbPort"])
    respCnf["dbName"]   = configDb["dbName"]
    return respCnf
cs

 

    ③ 획득한 데이터를 출력한다.

        - 파일명 : main.py

1
2
3
4
5
6
7
8
9
10
11
import getConfig
 
 
def main():
    cfg = getConfig.getDbConfig()
    print(cfg["dbUser"], cfg["dbPw"], cfg["dbIp"], cfg["dbPort"], cfg["dbName"])
    
 
if __name__ == "__main__":
    main()
 
cs

 

4. 결과

    ˙ config.ini 데이터가 출력되는 것을 확인한다.

 

 

※ 내용이 도움 되셨다면 광고 클릭 한번 부탁드립니다 ※

반응형
반응형

1. 시험환경

    ˙ 파이썬

    ˙ 카카오 Map API

 

2. 목적

    ˙ 카카오 Map API를 이용하는 방법을 알아보자.

    ˙ 파이썬 코드에서 위경도(입력값)를 주소(출력값)로 변환하는 코드를 작성한다.

 

3. 적용

    ① 카카오 API를 사용하기 위해 kakao developers 사이트에 계정 등록한다.

        - https://developers.kakao.com/

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

    ② 애플리케이션을 추가하고 발급된 "키"을 확인한다.

        - Python 코드에서 사용하기 위해 REST API 키를 사용하면 된다.

"+"버튼 클릭
추가한 애플리케이션에 할당된 키

 

    ③ 카카오 API를 이용하여 "위경도"(wgs84)를 "주소"  데이터로 변환한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import json
import requests
 
api_key = "발급키입력"
 
def coord_to_addr(lon, lat):
    url = 'https://dapi.kakao.com/v2/local/geo/coord2regioncode.json?x={longitude}&y={latitude}'.format(longitude=lon,latitude=lat)
    headers = {"Authorization""KakaoAK " + api_key}
    result = json.loads(str(requests.get(url, headers=headers).text))
    match_first = result['documents'][0]['address_name']
    return str(match_first)
 
 
if __name__ == "__main__":
    addr = coord_to_addr(127.0910237.46997)
    print(addr)
cs

 

4. 결과

    ˙ 변환 결과를 확인한다.

변환 결과값

 

 

※ 내용이 도움 되셨다면 광고 클릭 한번 부탁드립니다 ※

반응형
반응형

1. 시험환경

    ˙ 파이썬

    ˙ 카카오 Map API

 

2. 목적

    ˙ 카카오 Map API를 이용하는 방법을 알아보자.

    ˙ 파이썬 코드에서 주소(입력값)를 위경도(출력값)로 변환하는 코드를 작성한다.

 

3. 적용

    ① 카카오 API를 사용하기 위해 kakao developers 사이트에 계정 등록한다.

        - https://developers.kakao.com/

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

    ② 애플리케이션을 추가하고 발급된 "키"을 확인한다.

        - Python 코드에서 사용하기 위해 REST API 키를 사용하면 된다.

"+" 버튼 클릭
추가한 애플리케이션에 할당된 키

 

    ③ 카카오 API를 이용하여 "주소"를 "위경도"(wgs84) 데이터로 변환한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
import requests
from urllib.parse import urlparse
 
 
address = "서울시 강남구 자곡로 3길 22"
url = f"https://dapi.kakao.com/v2/local/search/address.json?query={address}"
 
result = requests.get(urlparse(url).geturl(), headers={"Authorization""KakaoAK 발급키입력"}).json()

print
(json.dumps(result, indent=4, ensure_ascii=False))

lat = result['documents'][0]['x']
lng = result['documents'][0]['y']
 
print("lat=",lat, ", lng=", lng)
cs

 

4. 결과

    ˙ 변환 결과를 확인한다.

결과값 출력

 

 

 

※ 내용이 도움 되셨다면 광고 클릭 한번 부탁드립니다 ※

반응형
반응형

1. 시험환경

    ˙ python

    ˙ mariadb

    ˙ excel

 

2. 목적

    ˙ pandas를 이용하여 엑셀(xlsx) 데이터를 추출하여 dataframe을 생성한다.

    ˙ dataframe에서 열 단위 데이터를 추출한다.

    ˙ 추출한 열 단위 데이터를 DB에 저장한다.

 

3. 적용

    ① 엑셀(xlsx) 샘플 파일

        - 파일명 : sample.xlsx

        - Sheet명 : Sheet1

sample.xlsx
0.01MB
샘플 데이터

 

    ② DB 설정 파일에서 설정 정보를 입력한다.

        - 파일명 : rdb.py

        - DB 설정정보 : user(계정), password(계정 비밀번호), host(DB IP), port(DB Port), database(스키마)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import mariadb
import sys
 
def connection():
    try:
        conn = mariadb.connect(
            user="root",
            password="1q2w3e",
            host="127.0.0.1",
            port=3307,
            database="sample"
        )
 
    except mariadb.Error as e:
        print(f"Error connecting to MariaDB Platform: {e}")
        sys.exit(1)
 
    return conn
cs

 

    ③ 데이터 처리 코드를 작성한다.

        - pandas를 이용하여 엑셀(xlsx) 데이터를 추출하여 dataframe을 생성한다.

        - dataframe에서 열 단위 데이터를 추출한다.

        - 추출한 열 단위 데이터를 DB에 저장한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import mariadb
import pandas as pd
import rdb
 
file = './input/sample.xlsx'
 
def readXlsx(_file):
    return pd.read_excel(_file, engine='openpyxl', sheet_name='Sheet1')
 
 
def insertColData(_cursor, _col_1_list, _col_2_list, _col_3_list, _col_4_list):
    for i in range(len(_col_1_list)):
        print(_col_1_list[i], _col_2_list[i], _col_3_list[i], _col_4_list[i])
 
        try:
            _cursor.execute("INSERT INTO world VALUES (?, ?, ?, ?)",
                            (str(_col_1_list[i]).strip(),
                             str(_col_2_list[i]).strip(),
                             str(_col_3_list[i]).strip(),
                             str(_col_4_list[i]).strip()))
        except mariadb.Error as e:
            print(f"Error: {e}")
 
 
if __name__ == '__main__':
    print('1. xlsx 파일 읽기')
    df = readXlsx(file)
    print(df)
    print()
 
    print('2. dataframe으로부터 열단위 데이터 추출')
    col_1_list = df.iloc[:,0].values.tolist()   # 1열
    col_2_list = df.iloc[:,1].values.tolist()   # 2열
    col_3_list = df.iloc[:,2].values.tolist()   # 3열
    col_4_list = df.iloc[:,3].values.tolist()   # 4열
    print(col_1_list)
    print(col_2_list)
    print(col_3_list)
    print(col_4_list)
 
    print('3. DB Insert')
    conn = rdb.connection()
    cursor = conn.cursor()
    insertColData(cursor, col_1_list, col_2_list, col_3_list, col_4_list)
    conn.commit()
    conn.close()
cs

 

    ④ 파일 구조

        - input/sample.xlsx : 입력 데이터 샘플

        - rdb.py : DB 설정 파일

파일 구조

 

4. 결과

    ˙ 콘솔 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1. xlsx 파일 읽기
    Nation  Language   Money  Population
0  America   English  Dollar        5000
1    Spain   Spanish    Euro        4000
2    Italy   Italian     NaN        3000
3    Japan  Japanish   Japan       20000
 
2. dataframe으로부터 열단위 데이터 추출
['America''Spain''Italy''Japan']
['English''Spanish''Italian''Japanish']
['Dollar''Euro', nan, 'Japan']
[50004000300020000]
 
3. DB Insert
cs

 

    ˙ DB 테이블 저장

sample.world 데이터 저장 결과

 

 

※ 내용이 도움 되셨다면 광고 클릭 한번 부탁드립니다 ※

반응형

+ Recent posts