import pandas as pd
from pymongo import MongoClient
from faker import Faker

# Faker 객체 생성 (한국어 로케일 설정)
fake = Faker('ko_KR')

# MongoDB 연결 설정
client = MongoClient('mongodb://localhost:27017/')  # 여기에 적절한 연결 정보 입력
db = client['fake_database']  # 데이터베이스 선택
#collection = db['fake_collection']  # 컬렉션 선택

collection_name = 'fake_collection'

# 기존 컬렉션이 있다면 삭제
if collection_name in db.list_collection_names():
    db[collection_name].drop()

# 새로운 컬렉션 생성
collection = db[collection_name]

# 가상 데이터 생성 및 MongoDB에 저장
for _ in range(100):
    fake_data = {
        'name': fake.name(),
        'email': fake.email(),
        'age': fake.random_int(min=18, max=80),
        'address': fake.address()
    }
    collection.insert_one(fake_data)

# MongoDB에서 데이터 조회하여 Pandas 데이터프레임으로 변환
data_from_mongodb = collection.find()
df = pd.DataFrame(data_from_mongodb)

# Pandas로 데이터 조건 조회 예제
# 나이가 30세 이상인 데이터 조회
df_above_30 = df[df['age'] >= 30]

# 이메일이 특정 도메인을 포함하는 데이터 조회
df_specific_domain = df[df['email'].str.contains('example.com')]

# 이름에 'John'이 포함된 데이터 조회
df_johns = df[df['name'].str.contains('김')]

# 결과 출력
print("나이가 30세 이상인 데이터:")
print(df_above_30)

print("\\n특정 이메일 도메인을 포함하는 데이터:")
print(df_specific_domain)

print("\\n이름에 'John'이 포함된 데이터:")
print(df_johns)

나이를 제외하고 데이터베이스 생성

import streamlit as st
import pandas as pd
from pymongo import MongoClient
from faker import Faker

# Faker 객체 생성 (한국어 로케일 설정)
fake = Faker('ko_KR')

# MongoDB 연결 설정
client = MongoClient('mongodb://localhost:27017/')  # 여기에 적절한 연결 정보 입력
db = client['fake_database']  # 데이터베이스 선택
collection = db['fake_collection']  # 컬렉션 선택

# 가상 데이터 생성 및 MongoDB에 저장
def generate_fake_data(num_records):
    for _ in range(num_records):
        fake_data = {
            'name': fake.name(),
            'email': fake.email(),
            'address': fake.address()
        }
        collection.insert_one(fake_data)

# Streamlit 애플리케이션
st.title("가상 데이터 조회기")
num_records = st.number_input("생성할 레코드 수를 입력하세요:", min_value=1, value=100)
# 데이터 생성 및 조회 버튼
if st.button("가상 데이터 생성"):
    
    generate_fake_data(num_records)
    st.success(f"{num_records}개의 가상 레코드가 생성되었습니다!")

# MongoDB에서 데이터 조회하여 Pandas 데이터프레임으로 변환
data_from_mongodb = collection.find()
df = pd.DataFrame(data_from_mongodb)

# 이메일 도메인 필터
email_domain = st.text_input("필터링할 이메일 도메인을 입력하세요:", value="")
filtered_df = df.copy()
if email_domain:
    filtered_df = filtered_df[filtered_df['email'].str.contains(email_domain)]

# 이름 필터
name_filter = st.text_input("필터링할 이름을 입력하세요:", value="")
if name_filter:
    filtered_df = filtered_df[filtered_df['name'].str.contains(name_filter)]

# 결과 출력
st.dataframe(filtered_df)