// it's for Latex

pages

[How to connect Python programs to MariaDB in NAS & How to parsing text data using Python pandas module] #10. Parsing text data using Python pandas module

#09에서는  pandas module을 설치해보았다.

이번엔 pandas module을 이용하여 text file을 parsing 해보겠다.


작업환경
- OS : Windows 10
- PC : LattePanda 4G RAM 64G eMMC (DFR0419)
- NAS : DS1618+
- Python : 3.6.8
- Python Module : mysql, pandas
- Tool : Pycharm
- PC와 NAS는 다른 네트워크
- PC와 NAS는 각각 Internet이 가능한 상태



pandas module을 처음 쓰다보니 생각보다 parsing 작업을 진행하는데 시간이 걸렸다.
알고보면 정말 간단한데, 아무래도 pandas의 기능이 다양하다보니 더 좋은 방법을 찾아보려 시간이 더 걸렸던 것 같다.

먼저 pandas의 기본적인 사용법은 다음 사이트를 참고했다.

https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html#min

거두절미하고 소스를 보여드리고 설명을 이어나가겠다.


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
#!/usr/bin/python
import mysql.connector as mariadb
from mysql.connector import Error
import pandas as pd
try:
   connection = mariadb.connect(host='#07의 2번에서 확인한 NAS DDNS의 외부주소', user='#06의 3번에서 확인한 user 명 입력', port='#06의 6번에서 확인된 Port 번호 입력', password='#06의 3번에서 login에 사용되는 password 입력', database='#06의 4번에서 확인된 db 명 입력')
   if connection.is_connected():
       db_Info = connection.get_server_info()
       print("Connected to MySQL database... MySQL Server version on ", db_Info)
       cursor = connection.cursor(prepared=True)
       cursor.execute("select database()")
       record = cursor.fetchone()
       print("Your connected to -", record)
       df = pd.read_csv('C:\Data\\20190624-14-32-30-646.txt',
                        skiprows=1,
                        skipfooter=1027,
                        sep='\t')
       
       print(df)
       id = 1
       date_time = df.iloc[0,0]
       print("date_time : ", date_time)
       time_rms = df.iloc[0,5]
       print("time_rms : ", time_rms)
       time_peak = df.iloc[04]
       print("time_peak : ", time_peak)
       time_crest_factor = df.iloc[06]
       print("time_crest_factor : ", time_crest_factor)
       frequency_peak_1 = df.iloc[08]
       print("frequency_peak_1 : ", frequency_peak_1)
       frequency_peak_2 = df.iloc[010]
       print("frequency_peak_2 : ", frequency_peak_2)
       frequency_peak_3 = df.iloc[012]
       print("frequency_peak_3 : ", frequency_peak_3)
       frequency_peak_4 = df.iloc[014]
       print("frequency_peak_4 : ", frequency_peak_4)
       frequency_peak_5 = df.iloc[016]
       print("frequency_peak_5 : ", frequency_peak_5)
       frequency_peak_6 = df.iloc[018]
       print("frequency_peak_6 : ", frequency_peak_6)
       frequency_band_1 = df.iloc[09]
       print("frequency_band_1 : ", frequency_band_1)
       frequency_band_2 = df.iloc[011]
       print("frequency_band_2 : ", frequency_band_2)
       frequency_band_3 = df.iloc[013]
       print("frequency_band_3 : ", frequency_band_3)
       frequency_band_4 = df.iloc[015]
       print("frequency_band_4 : ", frequency_band_4)
       frequency_band_5 = df.iloc[017]
       print("frequency_band_5 : ", frequency_band_5)
       frequency_band_6 = df.iloc[019]
       print("frequency_band_6 : ", frequency_band_6)
except Error as e:
   print("Error while connecting to MySQL", e)
   connection.rollback()
   print("Failed to read insert into MySQL table {}".format(e))
finally:
  # closing database connection
   if(connection.is_connected()):
       cursor.close()
       connection.close()
       print("MySQL connection is closed")
cs

위 소스를 보면 #8에서 몇몇 부분이 추가된 것을 알 수 있다. 해당 부분들을 확인해보겠다.

       df = pd.read_csv('C:\Data\\20190624-14-32-30-646.txt',
                        skiprows=1,
                        skipfooter=1027,
                        sep='\t')
       
       print(df)

pd는 pandas module의 macro를 의미하고 read_csv 함수를 이용해 파일을 불러오게 된다.
이 때, parameter들은 다음과 같다.

(1) file location
(2) skiprows : text file에서 맨 윗줄부터 1번째 줄까지 skip한다.
(3) skipfooter : text file에서 맨 아랫줄부터 1027번째 줄까지 skip한다.
(4) sep : '\t' (Tab)을 기준으로 column을 나눈다.

위와같은 parameter를 이용하여 원본 text file인 1029 x 1 형태를 1 x 21 로 만들어 내게 된다.

필자의 상황에서는 text file에서 3번째 줄만 필요했기 때문에 2번째 줄을 column으로 만들고 3번째 줄을 data로 만든 것이다.


       id = 1
       date_time = df.iloc[0,0]
       print("date_time : ", date_time)
       time_rms = df.iloc[0,5]
       print("time_rms : ", time_rms)
       time_peak = df.iloc[04]
       print("time_peak : ", time_peak)
       time_crest_factor = df.iloc[06]
       print("time_crest_factor : ", time_crest_factor)
       frequency_peak_1 = df.iloc[08]
       print("frequency_peak_1 : ", frequency_peak_1)
       frequency_peak_2 = df.iloc[010]
       print("frequency_peak_2 : ", frequency_peak_2)
       frequency_peak_3 = df.iloc[012]
       print("frequency_peak_3 : ", frequency_peak_3)
       frequency_peak_4 = df.iloc[014]
       print("frequency_peak_4 : ", frequency_peak_4)
       frequency_peak_5 = df.iloc[016]
       print("frequency_peak_5 : ", frequency_peak_5)
       frequency_peak_6 = df.iloc[018]
       print("frequency_peak_6 : ", frequency_peak_6)
       frequency_band_1 = df.iloc[09]
       print("frequency_band_1 : ", frequency_band_1)
       frequency_band_2 = df.iloc[011]
       print("frequency_band_2 : ", frequency_band_2)
       frequency_band_3 = df.iloc[013]
       print("frequency_band_3 : ", frequency_band_3)
       frequency_band_4 = df.iloc[015]
       print("frequency_band_4 : ", frequency_band_4)
       frequency_band_5 = df.iloc[017]
       print("frequency_band_5 : ", frequency_band_5)
       frequency_band_6 = df.iloc[019]
       print("frequency_band_6 : ", frequency_band_6)

위 코드를 보면 df.iloc을 사용해 원하는 position의 data를 획득하는 것을 알 수 있다.
결과는 다음과 같다.



필자가 여기서 사용한 pandas의 함수는 극히 일부에 지나지 않는다.

위에서 알려준 사이트를 참고하여 본인의 필요에 맞는 코딩을 해나가면 되겠다.



댓글 없음:

댓글 쓰기