Table of Contents

Upstage AI 3기

[파이썬] 코드 리뷰

꼬꼬마코더 2024. 5. 14. 12:18
728x90
import pandas as pd
셀트리온_df=pd.read_excel(r'C:\Users\user\Downloads\셀트리온_20200501-20210501.xlsx')

셀트리온_df['일자'] = 셀트리온_df['일자'].astype('str')
# 한 날짜로 데이터 합치기
pv_0 = pd.pivot_table(셀트리온_df, values='제목', index='일자', aggfunc='sum')
pv_0.reset_index(inplace=True)
pv_0.columns.values
pv_0

from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
from datetime import datetime, timedelta

#최종 데이터 프레임
tfidf2021제목_셀트리온 = pd.DataFrame()

for idx, row in pv_0.iterrows():
    # 입력 텍스트 데이터
    date = row['일자']
    
    data = row['제목']
    
    # 사용자 정의 스톱워드 리스트
    #custom_stopwords = ['오늘', '포토', '종합', '서울', '다음', '영상']

    # TF-IDF 벡터화 객체 생성 TfidfVectorizer를 사용하여 스톱워드 지정
    tfidf_vectorizer = TfidfVectorizer()
    #tfidf_vectorizer = TfidfVectorizer(stop_words=data)

    # TF-IDF 가중치 계산
    tfidf_matrix = tfidf_vectorizer.fit_transform([data])

    # 결과 출력
    feature_names = tfidf_vectorizer.get_feature_names_out()
    tfidf_values = tfidf_matrix.toarray()

    feature_names_df = pd.DataFrame(feature_names, columns=['feature_'+date])
    tfidf_values_df = pd.DataFrame(tfidf_values.T, columns=['tfidf_'+date])
    tfidf_daily_temp = pd.concat([feature_names_df, tfidf_values_df], axis=1)


    tfidf_daily_temp = tfidf_daily_temp[tfidf_daily_temp.iloc[:,1]>0.00000000000001].sort_values(by='tfidf_'+date, ascending=False)
    tfidf2021제목_셀트리온 = pd.concat([tfidf2021제목_셀트리온, tfidf_daily_temp.reset_index(drop=True)], axis=1, ignore_index=False)

tfidf2021제목_셀트리온.to_csv('tfidf2021제목_셀트리온.csv', index=False, encoding='utf-8-sig')
tfidf2021제목_셀트리온

from datetime import datetime, timedelta

row_data = []

start_date = datetime(2020, 5, 1)
end_date = datetime(2021, 5, 1)

current_date = start_date
for i in range(1,len(tfidf2021제목_셀트리온.columns)+1,1):
    #print(tfidf_daily_제목_2019.iloc[:50,i-1:i+1])
    date = current_date.strftime('%Y%m%d')
       
    print(date) 
    feature =tfidf2021제목_셀트리온[f'feature_'+date].values
    #tfidf =tfidf2021제목_셀트리온[f'tfidf_'+date].values
    
    pair = []
    for j in range(50):
        #pair.append([feature[j], tfidf[j]])
        pair.append(feature[j])
    
    row_data.append({
        '일자': date,
        'feature': pair
    })
    i=i*2
    if current_date == end_date:
        break
    current_date += timedelta(days=1)


daily제목feature_2021_셀트리온 = pd.DataFrame(row_data)

df=daily제목feature_2021_셀트리온
df['일자'] = pd.to_datetime(df['일자'], format='%Y%m%d')

# 월 단위로 그룹화하여 feature 합산
df['month'] = df['일자'].dt.to_period('M')
pivot_df = df.groupby('month')['feature'].sum().reset_index()

# 결과 확인
print(pivot_df)

from collections import Counter

# 초기 빈 데이터프레임 생성
final_df = pd.DataFrame()

# 기간 설정
start_date = pd.Period('2020-05', freq='M')
end_date = pd.Period('2021-04', freq='M')

# 각 월별로 루프를 돌며 데이터 처리
for date in pd.period_range(start=start_date, end=end_date, freq='M'):

    # 연월 단위로 데이터 필터링
    feature2005 = pivot_df[pivot_df['month'] == date]

    # 'feature' 컬럼의 리스트를 펼쳐서(flatten) 모든 값을 하나의 리스트로 만듭니다.
    all_features = [item for sublist in feature2005['feature'] for item in sublist]
    # 각 값의 등장 횟수를 카운트합니다.
    feature_counts = Counter(all_features)

    # Counter 객체를 딕셔너리로 변환
    counts_dict = dict(feature_counts)

    # 딕셔너리를 데이터프레임으로 변환
    feature_counts_df = pd.DataFrame(list(counts_dict.items()), columns=['feature_'+str(date), 'count_'+str(date)])
    
    # 데이터프레임 내림차순
    feature_counts_df.sort_values(by='count_'+str(date), ascending=False, inplace=True)
      
    # 결과 데이터프레임 병합
    if final_df.empty:
        final_df = feature_counts_df
    else:
        #final_df = pd.merge(final_df, feature_counts_df, on='feature_'+str(date), how='outer')
        final_df = pd.concat([final_df, feature_counts_df.reset_index(drop=True)], axis=1, ignore_index=False)
    

final_df.to_csv('셀트리온_워드클라우드.csv', index=False, encoding='utf-8-sig')
final_df