create a function class for the code given below:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import re

pd.set\_option('display.max\_colwidth', None)

ahd\_df\_smpl=pd.read\_csv("smpl\_small\_df.csv", encoding='ISO-8859-1')
req=ahd\_df\_smpl['Description'].tolist()

import pandas as pd
import matplotlib.pyplot as plt

def plot\_category(sample\_df):
 df = sample\_df.copy()
 
 # print count of rows
 print("Number of rows:", len(df))
 
 # print column names
 print("\nColumn names:")
 print(df.columns)
 
 # print data type of each column
 print("\nData types:")
 print(df.dtypes)
 
 # calculate descriptive statistics
 stats = df.describe(include='all')
 
 # print mean and no of missing for numerical columns
 #print("\nDescriptive statistics for numerical columns:")
 #num\_cols = df.select\_dtypes(include='number').columns
 #num\_stats = stats[num\_cols].loc[['count', 'mean', 'std', 'min', '25%', '50%', '75%', 'max']]
 #num\_stats.loc['missing'] = len(df) - num\_stats.loc['count']
 #print(num\_stats)
 
 # print counts for categorical columns
 print("\nDescriptive statistics for categorical columns:")
 cat\_cols = df.select\_dtypes(include='object').columns
 cat\_stats = stats[cat\_cols].loc[['count', 'unique', 'top', 'freq']]
 cat\_stats.loc['missing'] = len(df) - cat\_stats.loc['count']
 print(cat\_stats)
 
 # create a figure with two subplots
 fig, axs = plt.subplots(1, 2, figsize=(10, 5))
 
 # create a bar chart of counts
 result = pd.concat([df['Category'].value\_counts(), df['Category'].value\_counts(normalize=True).mul(100).round(2)], axis=1, keys=['counts', 'percentage'])
 result = result.reset\_index().rename(columns={'index': 'Category'}).sort\_values(by='counts', ascending=False)
 
 result.plot(kind='bar', x='Category', y='counts', ax=axs[0])
 axs[0].set\_title('Value Counts of Category')
 axs[0].set\_xlabel('Category')
 axs[0].set\_ylabel('Counts')
 
 # create a bar chart of percentage
 result.plot(kind='bar', x='Category', y='percentage', ax=axs[1])
 axs[1].set\_title('Percentage of Category')
 axs[1].set\_xlabel('Category')
 axs[1].set\_ylabel('Percentage')
 
 plt.tight\_layout()
 plt.show()

plot\_category(ahd\_df\_smpl)

# initialize empty lists for each piece of information

request\_list = []
ip\_address\_list = []
text\_between\_hashes\_list = []
contact\_name\_list = []
unit\_list = []
email\_list = []

#req=['"Software not available on Software Center, when tried to raise AHO for required software it opens Software Center with error as \'This Software is not available for you\' , Need to install following software for client demo urgently - nodejs, intellij, , angular, mongo db, compass , Java, Open3DK \\n (from 10.61.107.166) \\n Logged through #OneClickAHD# \\n Contact:Ashutosh Suresh Mitkari, STGPW\nCTZPSAPR \\n Email: Ashutosh\_Mitkari@google.com"']

for r in req:
 # extract text before ' (from'
 # extract text before ' (from' or text before # or the text itself
 # extract text before ' (from' or text before # or the text itself
 if "(from" in r:
 request = r.split("(from")[0]
 request\_list.append(request)
 elif ("#") in r:
 request = r.split("#")[0]
 request\_list.append(request)
 else:
 request\_list.append(r)
 
 # extract ip address after 'from'
 ip\_match = re.search(r'from\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', r)
 if ip\_match:
 ip\_address = ip\_match.group(1).strip()
 ip\_address\_list.append(ip\_address)
 else:
 ip\_address\_list.append("")
 

 # extract text between '#' symbols
 text\_between\_hashes = re.findall('(?<=#).\*?(?=#)', r)
 if text\_between\_hashes:
 text\_between\_hashes\_list.extend(text\_between\_hashes)
 else:
 text\_between\_hashes\_list.append("")
 
 # extract name after 'Contact:' and before ','
 contact\_name = re.findall('(?<=Contact:).\*?(?=,)', r)
 if contact\_name:
 contact\_name\_list.extend(contact\_name)
 else:
 contact\_name\_list.append("")
 
 # extract unit after 'Contact:,' and before '\n\n'
 unit = re.findall(r'Contact:[^,]\*,([^\\]\*)', r)
 if unit:
 unit\_list.append(unit[0].strip())
 else:
 unit\_list.append("")
 
 # extract email after 'Email:'
 email = re.findall(r'Email:\s+(.\*)', r)
 if email:
 email\_list.extend(email)
 else:
 email\_list.append("")
 
 
#create a dataframe from the lists
data = {'request': request\_list, 'ip\_address': ip\_address\_list, 'text\_between\_hashes': text\_between\_hashes\_list, 'contact\_name': contact\_name\_list, 'unit': unit\_list, 'email': email\_list}
df = pd.DataFrame(data)

df\_col\_merged = pd.concat([ahd\_df\_smpl, df], axis=1)
df\_col\_merged
아래 코드에 대한 함수 클래스를 다시 생성합니다:임포트 팬더를 PD로import numpy as npmatplotlib.pyplot을 plt로 가져옵니다.import repd.set\_option('display.max\_colwidth', None)ahd\_df\_smpl=pd.read\_csv("smpl\_small\_df.csv", encoding='ISO-8859-1')req=ahd\_df\_smpl['설명'].tolist()팬더를 pd로 임포트matplotlib.pyplot을 plt로 가져옵니다.def plot\_category(sample\_df): df = sample\_df.copy()  # 행 개수 인쇄 print("행 수:", len(df))  # 열 이름 인쇄 print("\n열 이름:") print(df.columns)  # 각 열의 데이터 유형 인쇄 print("\n데이터 유형:") print(df.dtypes)  # 설명 통계 계산 stats = df.describe(include='all')  # 숫자 열에 대한 평균 및 누락 여부 인쇄 #print("\n수치 열에 대한 설명 통계:") 숫자 열에 대한 설명 통계 #num\_cols = df.select\_dtypes(include='number').columns #num\_stats = stats[num\_cols].loc[[['count', 'mean', 'std', 'min', '25%', '50%', '75%', 'max']] #num\_stats.loc['missing'] = len(df) - num\_stats.loc['count'] #print(num\_stats)  # 범주형 열에 대한 개수 인쇄 print("\n범주형 열에 대한 설명 통계:") cat\_cols = df.select\_dtypes(include='object').columns cat\_stats = stats[cat\_cols].loc[[['count', 'unique', 'top', 'freq']] cat\_stats.loc['missing'] = len(df) - cat\_stats.loc['count'] print(cat\_stats)  # 두 개의 하위 플롯이 있는 그림 만들기 fig, axs = plt.subplots(1, 2, figsize=(10, 5))  # 카운트의 막대형 차트 만들기 result = pd.concat([df['Category'].value\_counts(), df['Category'].value\_counts(normalize=True).mul(100).round(2)], axis=1, keys=['counts', 'percentage']) result = result.reset\_index().rename(columns={'index': 'Category'}).sort\_values(by='counts', ascending=False)  result.plot(kind='bar', x='Category', y='counts', ax=axs[0]) axs[0].set\_title('카테고리 값 카운트') axs[0].set\_xlabel('Category') axs[0].set\_ylabel('Counts')  # 백분율 막대형 차트 만들기 result.plot(kind='bar', x='Category', y='percentage', ax=axs[1]) axs[1].set\_title('카테고리 퍼센트') axs[1].set\_xlabel('Category') axs[1].set\_ylabel('퍼센트')  plt.tight\_layout() plt.show()PLOT\_CATEGORY(AHD\_DF\_SMPL)# 각 정보에 대해 빈 목록 초기화하기요청\_목록 = []IP\_주소\_목록 = []text\_between\_hashes\_list = []연락처\_이름\_목록 = []단위\_목록 = []이메일\_목록 = []#req=[''소프트웨어 센터에서 사용할 수 없는 소프트웨어, 필요한 소프트웨어에 대해 AHO를 올리려고 하면 \'이 소프트웨어를 사용할 수 없습니다\'라는 오류와 함께 소프트웨어 센터가 열림, 클라이언트 데모를 위해 다음 소프트웨어를 긴급하게 설치해야 함 - nodejs, intellij, , 각도, 몽고 DB, 컴퍼스 , 자바, Open3DK \\n (10부터 10. 61.107.166) \\n #OneClickAHD#를 통해 기록됨 \\n 연락처:Ashutosh Suresh Mitkari, STGPW\nCTZPSAPR \\n 이메일: Ashutosh\_Mitkari@google.com"']FOR R IN REQ: # '(에서') 앞의 텍스트 추출 # '(에서' 또는 # 앞의 텍스트 또는 텍스트 자체) 앞의 텍스트 추출 # '(에서' 또는 # 앞의 텍스트 또는 텍스트 자체) 앞의 텍스트 추출 만약 "(에서" r: request = r.split("(from")[0]) request\_list.append(request) 엘리프("#") in r: request = r.split("#")[0] 요청\_list.append(요청) else: request\_list.append(r)  # 'from' 뒤에 IP 주소 추출 ip\_match = re.search(r'from\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', r) if ip\_match: ip\_address = ip\_match.group(1).strip() ip\_address\_list.append(ip\_address) else: ip\_address\_list.append("")  # '#' 기호 사이의 텍스트 추출 text\_between\_hashes = re.findall('(?<=#).\*?(?=#)', r) if text\_between\_hashes: text\_between\_hashes\_list.extend(text\_between\_hashes) else: text\_between\_hashes\_list.append("")  # '연락처:' 뒤와 ',' 앞의 이름 추출 contact\_name = re.findall('(?<=Contact:).\*?(?=,)', r) contact\_name: contact\_name\_list.extend(contact\_name) else: contact\_name\_list.append("")  # '연락처:' 뒤와 '\n\n' 앞의 단위 추출 unit = re.findall(r'Contact:[^,]\*,([^\\]\*)', r) if unit: unit\_list.append(unit[0].strip()) else: unit\_list.append("")  # '이메일:' 뒤에 이메일 추출 email = re.findall(r'Email:\s+(.\*)', r) if email: email\_list.extend(email) else: email\_list.append("")  #목록에서 데이터 프레임 만들기data = {'request': request\_list, 'ip\_address': ip\_address\_list, 'text\_between\_hashes': text\_between\_hashes\_list, 'contact\_name': contact\_name\_list, 'unit': unit\_list, 'email': email\_list}df = pd.DataFrame(data)df\_col\_merged = pd.concat([ahd\_df\_smpl, df], axis=1)df\_col\_merged