728x90
반응형

 티스토리 

데이터 분석을 위한 판다스와 DASK의 활용하기

안녕하세요, 여러분! 오늘은 데이터 분석에 있어서 아주 중요한 두 라이브러리, PANDAS, DASK를 활용하는 방법에 대해 알아보려고 해요. 이 둘을 잘 사용하면 대용량(big size) 빅데이터 분석이 훨씬 수월해진답니다. 그럼, 간단한 예시를 통해 어떻게 활용하는지 살펴볼까요?

1. 코드리뷰

  먼저, 판다스는 데이터 분석과 조작을 위한 아주 강력한 라이브러리에요. 예를 들어, 다음과 같이 간단한 데이터프레임을 생성할 수 있죠.

import pandas as pd

df1 = pd.DataFrame({'a': [1, 2, 3], 'b': ['4', '5', '6'], 'c': [7.0, 8.0, 9.0]})
df2 = pd.DataFrame({'a': ['1', '2', '4'], 'b': [10, 11, 12], 'd': [13.0, 14.0, 15.0], 'f': ['16', '17', '18'], 'g': [19, 20, 21]})

다음으로, 판다스의 데이터프레임을 DASK의 데이터프레임으로 변환할 수 있어요. 다크는 병렬 계산을 위한 라이브러리로, 큰 데이터를 다룰 때 유용해요.

import dask.dataframe as dd

df1 = dd.from_pandas(df1, npartitions=1)
df2 = dd.from_pandas(df2, npartitions=1)

이제, 두 데이터프레임의 'a' 열의 데이터 타입(dtype)을 문자열(str)로 통일한 뒤, 병합하는 작업을 해볼 거에요. 이렇게 하면 두 데이터프레임의 정보를 통합하여 더 유용한 분석을 할 수 있답니다.

아래 클릭하여 코드를 확인. 

더보기

df1['a'] = df1['a'].astype(str)
df2['a'] = df2['a'].astype(str)

merged_df = df1.merge(df2[['a', 'd']], on='a', how='left')

print(merged_df.compute())

 

반응형

이 예시를 통해 판다스와 DASK의 기본적인 사용법을 간단히 알아봤어요. 데이터 분석의 세계는 정말 넓고, 이 두 라이브러리는 그 세계를 탐험하는 데 있어서 강력한 도구랍니다. 여러분도 이런 도구들을 활용해서 다양한 데이터 분석 프로젝트에 도전해보세요!

2. 코드리뷰

이제 이 예제를 확장하여 두 데이터프레임 간의 다른 유형의 조작을 수행하는 추가 예제를 알아 볼게요.

import pandas as pd
import dask.dataframe as dd

# 새로운 예시 데이터프레임 생성
df3 = pd.DataFrame({'x': [10, 20, 30], 'y': ['a', 'b', 'c'], 'z': [0.1, 0.2, 0.3]})
df4 = pd.DataFrame({'x': [20, 30, 40], 'y': ['b', 'c', 'd'], 'k': [3, 4, 5], 'm': ['x', 'y', 'z']})

# dask 데이터프레임으로 변환
df3 = dd.from_pandas(df3, npartitions=1)
df4 = dd.from_pandas(df4, npartitions=1)

# 'x' 열을 기준으로 df3과 df4를 내부 병합(inner join) 예시
inner_merged_df = df3.merge(df4, on='x', how='inner')

# 'y' 열을 기준으로 df3과 df4를 외부 병합(outer join) 예시
outer_merged_df = df3.merge(df4, on='y', how='outer')

# 결과 확인
print("Inner Merged DataFrame:\n", inner_merged_df.compute())
print("\nOuter Merged DataFrame:\n", outer_merged_df.compute())

추가 리뷰는 아래 클릭하여 확인 해보세요~

더보기

이 예제에서는 두 개의 새로운 데이터프레임 df3과 df4를 생성하고, 'x' 열을 기준으로 내부 병합(inner join)을 수행하며, 'y' 열을 기준으로 외부 병합(outer join)을 수행합니다. 내부 병합은 두 데이터프레임 모두에 존재하는 키(열의 값)에 대해서만 행을 병합하는 반면, 외부 병합은 한쪽 또는 양쪽 데이터프레임에 존재하는 모든 키에 대해 행을 병합하고, 매칭되지 않는 행의 경우 결측값으로 채웁니다.

728x90

 

마무리

- 이번 포스팅은 Pandas / Dask 라이브러 에 대해 알아봤습니다.

CostZeroCode

 
 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

DATA CAMP https://app.datacamp.com/jobs/coming-soon

원하는 코스로 퀴즈를 풀어가며 무료로 코딩하고 학습가능한 온라인 코딩 연습 사이트 

한글지원이 아직 안되지만, 영어 공부하며 코딩까지 공부하기 딱 좋아요.

Python Data Camp은 데이터 과학, 프로그래밍, 그리고 머신러닝을 배우고자 하는 개인들을 대상으로 한 온라인 학습 플랫폼입니다. 이 사이트는 Python을 사용하여 데이터 분석과 관련된 다양한 기술을 배울 수 있는 코스를 제공하며, 초보자부터 전문가 수준까지 다양한 난이도의 코스를 포함하고 있습니다.

 

1. 학습 리뷰

주요 특징은 다음과 같습니다:

인터랙티브한 학습 방식: 사용자는 비디오 강의를 시청하는 것뿐만 아니라, 실시간으로 코드를 작성하고 실행해볼 수 있는 인터랙티브한 환경에서 학습할 수 있습니다. 이를 통해 학습자는 이론뿐만 아니라 실제 코딩 경험을 통해 지식을 확립할 수 있습니다.

다양한 코스: 데이터 사이언스, 머신러닝, 딥러닝, 데이터 시각화, 데이터 처리 및 분석 등 다양한 주제에 대한 코스를 제공합니다. 각 코스는 특정 주제에 초점을 맞추며, 기초부터 고급까지 다양한 수준의 학습자를 위해 설계되었습니다.

프로젝트 기반 학습: 이론 학습을 넘어서, 사용자는 실제 데이터를 사용한 프로젝트를 통해 학습한 기술을 실제 문제 해결에 적용해볼 수 있습니다. 이는 실제 업무 환경에서의 문제 해결 능력을 향상시키는 데 도움이 됩니다.

경력 개발: 데이터 사이언스와 관련된 직업을 찾거나 경력을 발전시키고자 하는 사용자를 위해, 특정 직무에 필요한 기술 세트를 개발할 수 있는 코스와 가이드를 제공합니다.

커뮤니티 및 지원: 학습자는 질문을 공유하고, 피드백을 받으며, 다른 학습자와 지식을 공유할 수 있는 활발한 커뮤니티에 접근할 수 있습니다. 이는 학습 과정에서 발생할 수 있는 어려움을 극복하는 데 도움이 됩니다.

Python Data Camp는 이러한 특징을 바탕으로, Python을 사용하여 데이터 사이언스와 관련된 다양한 기술을 배우고자 하는 사람들에게 매우 유용한 자원입니다. 사용자는 자신의 속도에 맞춰 학습할 수 있으며, 언제 어디서나 학습 자료에 접근할 수 있는 유연성을 제공받습니다. 

좌측의 문제를 읽고 우측 입력칸에서 코딩 입력하며 학습 

 

반응형

2. 학습 지원

 추가로 동영상도 코스마다 매우 쉽고 자세하게 제공.

728x90

 

 

마무리

- 이번 포스팅은 DATA CAMP 코딩 연습 사이에 대해 알아봤습니다.

CostZeroCode

 
 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

Convert CSV file to list type
CSV파일 리스트 타입변환

- Reads data from a CSV file and converts it into a Python list
- Can use either pandas or the csv module

# CSV 파일을 읽어서 DataFrame으로 변환한 후, 리스트로 변환함

1.Code Review

import csv

# Open the CSV file, and convert each row into a list
with open('example.csv', 'r') as file:
    csv_reader = csv.reader(file)
    list_of_rows = list(csv_reader)

print(list_of_rows)

# Using pandas
import pandas as pd

# Read the CSV file into a DataFrame, then convert to a list
df = pd.read_csv('example.csv')
list_of_rows_with_pandas = df.values.tolist()

print(list_of_rows_with_pandas)

추가로 아래와 같이 리스트 pop Method를 사용하여 0번을 컬럼으로 지정할수도 있다.

columns = list_of_rows.pop(0)
df = pd.DataFrame(csvdata,columns=columns)

반응형

 

728x90

 

마무리

- 이번 포스팅은 CSV를 List type으로 변환에 대해 알아봤습니다.

CostZeroCode

 
 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

Customized ChatGPT instructions 

파이썬 데이터 분석 개발자가 ChatGPT와 같은 AI 모델을 사용자 정의하기 위해 설정할 수 있는 instructions는 해당 개발자의 고유한 요구와 목표에 따라 달라질 수 있습니다. 

1. Review of Instructions

 아래 예제처럼 질문 과 답변 형식을 지정하면 보다 명확하게 답변합니다. 

Example: 
사용자 : xx가 자세하게 알려줘~
You!(ChatGPT) : 관련 예시를 제공하고, 분석한 결과도 제공해줘~
  1. 데이터 전처리 자동화 예제:
    • 사용자: "데이터셋에서 결측치를 제거하고, 모든 숫자형 변수를 표준화해주세요."
    • ChatGPT: 데이터 전처리 코드를 제공하고 실행 결과를 보여줍니다.
  2. 실시간 데이터 분석 예제:
    • 사용자: "최근 30일간의 주식 데이터를 분석하여 평균 거래량과 변동성을 계산해주세요."
    • ChatGPT: 해당 주식 데이터를 분석하고, 요청된 통계를 계산하여 결과를 제공합니다.
  3. 머신러닝 모델 트레이닝 예제:
    • 사용자: "제공된 데이터셋을 사용하여 고객 이탈 예측 모델을 만들어주세요."
    • ChatGPT: 데이터셋을 분석하고, 이탈 예측 모델을 트레이닝한 후, 모델 성능을 보고합니다.
  4. 대화형 시각화 요청 예제:
    • 사용자: "지난 해 월별 매출 데이터를 바 차트로 보여줘요."
    • ChatGPT: 월별 매출 데이터를 바 차트로 시각화하여 제공합니다.
이러한 지침과 예제는 데이터 분석에 특화된 ChatGPT를 만드는 데 있어 기본적인 출발점을 제공합니다. 
사용자의 특정 요구사항과 목표에 따라 추가적인 기능과 개선 사항을 반영하여,
 보다 전문화된 ChatGPT를 구축할 수 있습니다.

 

추가 예제 : 아래의 다양한 예시를 참고하여 질문해보자.

1. 질의응답 최적화를 위한 지침
사례: 사용자가 복잡한 데이터 집합에 대한 질문을 할 때, ChatGPT가 관련 데이터를 분석하고, 가장 관련성 높은 정보를 요약하여 제공하도록 지침을 설정합니다.

예시:
사용자: "지난 분기 대비 올 분기의 판매 성장률을 분석해주세요."
ChatGPT: 지난 분기와 이번 분기의 판매 데이터를 비교 분석하여, 성장률을 계산하고, 성장률에 영향을 미친 주요 요인들을 요약하여 제공합니다.

2. 사용자 맞춤형 데이터 분석 지침
사례: 사용자가 특정 조건이나 매개변수를 기반으로 데이터 분석을 요청할 때, ChatGPT가 그 요구 사항에 맞춰 유연하게 대응하도록 합니다.

예시:
사용자: "18-24세 연령대의 사용자들 사이에서 가장 인기 있는 제품 카테고리는 무엇인가요?"
ChatGPT: 해당 연령대 사용자들의 구매 데이터를 분석하여, 가장 많이 구매된 제품 카테고리를 식별하고, 인기 제품의 특징을 분석하여 제공합니다.

3. 동적 데이터 소스 통합 지침
사례: 실시간 데이터나 다양한 데이터 소스로부터 정보를 수집하고 분석할 수 있도록, ChatGPT에게 동적 데이터 통합 능력을 부여합니다.

예시:
사용자: "최근 한 달간 소셜 미디어에서 가장 많이 언급된 기술 트렌드는 무엇인가요?"
ChatGPT: 다양한 소셜 미디어 플랫폼에서의 데이터를 수집 및 분석하여, 언급 빈도가 높은 기술 트렌드를 식별하고 요약하여 제공합니다.

4. 교육 및 튜토리얼 지침
사례: 사용자가 특정 데이터 분석 기법이나 도구를 배우고 싶어 할 때, ChatGPT가 단계별 설명과 함께 실습 예제를 제공하도록 합니다.

예시:
사용자: "파이썬에서 K-평균 군집화를 어떻게 구현하나요?"
ChatGPT: K-평균 알고리즘의 기본 원리를 설명하고, 파이썬 코드를 통한 구현 예제를 단계별로 제공합니다.
이러한 추가적인 지침 사례들은 ChatGPT를 데이터 분석 작업에 특화된, 훨씬 더 유용한 도구로 만들기 위해 설계되었습니다. 사용자의 요구 사항에 맞춰 적절한 지침을 설정하고, ChatGPT의 응답이 사용자의 질문에 정확하고 유용하게 맞춰질 수 있도록 하는 것이 중요합니다.

 

반응형

2. Custom ChatGPT Setup Instructions (English Ver.)

 

The instructions a Python data analysis developer can set for customizing an AI model like ChatGPT may vary according to their specific needs and objectives. Below, I will present a variety of detailed guidelines and examples for creating a customized ChatGPT. These guidelines focus on maximizing the efficiency and utility of a chatbot specialized in data analysis.


Clarify Analysis Objectives: Clearly define the purpose of using ChatGPT, so you can focus on implementing features for data processing, analysis techniques, and visualization that align with these objectives.

Enhance Data Processing Capabilities: Include data preprocessing features necessary for analyzing raw data, such as handling missing values and normalizing numerical variables.

Integrate Analysis Techniques: Add support for various statistical methodologies and machine learning algorithms. For example, include techniques like regression analysis, classification, and clustering.

Provide Visualization Tools: Integrate graph generation features using visualization libraries such as matplotlib, seaborn, and plotly to make the results of data analysis easily understandable.

Support Interactive Analysis: Offer an interactive interface that performs data analysis corresponding to user queries in natural language and returns the results.

Reflect Latest Technological Trends: Continuously incorporate the latest research and technologies in AI and data analysis fields, enabling users to utilize cutting-edge methods.

Recommended Examples
Data Preprocessing Automation Example:

User: "Remove missing values from the dataset and standardize all numerical variables."
ChatGPT: Provides data preprocessing code and shows the execution results.
Real-time Data Analysis Example:

User: "Analyze the stock data for the last 30 days to calculate the average trading volume and volatility."
ChatGPT: Analyzes the specified stock data, calculates the requested statistics, and provides the results.
Machine Learning Model Training Example:

User: "Use the provided dataset to create a customer churn prediction model."
ChatGPT: Analyzes the dataset, trains the churn prediction model, and reports on the model's performance.
Interactive Visualization Request Example:

User: "Show me the sales data from last year by month in a bar chart."
ChatGPT: Visualizes the monthly sales data in a bar chart and provides it.
These guidelines and examples provide a basic starting point for creating a ChatGPT specialized in data analysis. Depending on specific requirements and objectives, additional features and improvements can be incorporated to build a more specialized ChatGPT.
728x90

 

마무리

- 이번 포스팅은 Custom Chatgpt Prompt 지시사항(instructions), 질문, Prompt에 대해 알아봤습니다.

CostZeroCode

 
 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

Python Developer Prompts

Python 개발자가 ChatGPT 프롬프트를 설정할 때, 효과적인 결과를 얻기 위한 몇 가지 방법을 소개합니다. 그리고 각 방법에 맞는 예제 프롬프트도 제공하겠습니다.

Here are some strategies for Python developers on setting up ChatGPT prompts effectively, along with various example prompts for each strategy.

1. Prompts Review

Python 개발자가 ChatGPT 프롬프트를 설정할 때, 효과적인 결과를 얻기 위한 몇 가지 방법을 소개합니다. 그리고 각 방법에 맞는 예제 프롬프트도 제공하겠습니다.

1. 구체적인 질문 설정
목적: 명확하고 구체적인 질문을 통해 ChatGPT로부터 원하는 정보를 정확히 얻는 것입니다.
방법: 질문에 포함될 키워드와 상세 정보를 명확히 합니다.
예제 프롬프트:

더보기

"Python에서 JSON 파일을 읽고 파싱하는 방법을 단계별로 설명해주세요."
"Flask와 Django 비교에서 각각의 장단점은 무엇인가요?"


2. 시나리오 기반 질문
목적: 실제 개발 상황이나 문제 해결 과정에서 필요한 조언을 구하는 것입니다.
방법: 구체적인 시나리오나 배경 정보를 제공합니다.
예제 프롬프트:

더보기

"RESTful API를 설계할 때 인증을 위해 JWT를 사용하는 예제 코드를 보여주세요."
"데이터 사이언스 프로젝트에서 큰 데이터셋을 효율적으로 처리하기 위한 Pandas 팁을 알려주세요."


3. 최신 기술 동향 질문
목적: 최신 기술, 라이브러리, 프레임워크에 대한 정보를 얻는 것입니다.
방법: 최신 기술 트렌드에 관한 질문을 하거나, 특정 도구의 최신 버전을 언급합니다.
예제 프롬프트:

더보기

"Python 3.10의 새로운 기능 중에서 개발자에게 가장 유용한 것은 무엇인가요?"
"AsyncIO를 사용하여 Python에서 비동기 프로그래밍을 구현하는 최신 방법을 설명해주세요."


4. 코드 리뷰 요청
목적: 작성한 코드의 피드백을 받거나, 개선 방안을 모색하는 것입니다.
방법: 짧은 코드 조각을 제공하고 구체적인 피드백을 요청합니다.
예제 프롬프트:

더보기

"다음 Python 코드의 성능을 향상시킬 수 있는 방법을 제안해주세요." (코드 조각 포함)
"이 Python 스크립트에서 메모리 사용량을 줄이는 방법은 무엇인가요?" (코드 조각 포함)


5. 베스트 프랙티스 및 패턴 질문
목적: 효율적이고 안정적인 코드 작성 방법을 배우는 것입니다.
방법: 특정 주제나 문제에 대한 베스트 프랙티스를 요청합니다.
예제 프롬프트:

더보기

"Python에서의 예외 처리 베스트 프랙티스는 무엇인가요?"
"대규모 Python 애플리케이션에서 코드 재사용성을 높이는 패턴은 무엇인가요?"


"Python에서의 예외 처리 베스트 프랙티스는 무엇인가요?"
"대규모 Python 애플리케이션에서 코드 재사용성을 높이는 패턴은 무엇인가요?"
이러한 방법들을 통해 Python 개발자는 ChatGPT로부터 보다 정확하고 유용한 정보를 얻을 수 있습니다. 각 질문 유형에 따라 필요한 정보의 깊이와 범위가 달라질 수 있으므로, 질문을 설정할 때 이를 고려하는 것이 중요합니다.

 

반응형

2.English Version

1. Setting Specific Questions
Objective: To obtain precise information you're seeking from ChatGPT by asking clear and specific questions.
Approach: Ensure your question includes necessary keywords and detailed information.
Example Prompts:
"Explain step-by-step how to read and parse a JSON file in Python."
"What are the pros and cons of Flask vs Django?"
2. Scenario-based Questions
Objective: To seek advice for real development situations or problem-solving processes.
Approach: Provide a specific scenario or background information.
Example Prompts:
"Show me example code on using JWT for authentication when designing a RESTful API."
"Give me tips on efficiently handling large datasets in a data science project using Pandas."
3. Questions on Latest Technology Trends
Objective: To learn about the latest technologies, libraries, and frameworks.
Approach: Ask questions about the latest tech trends or mention the latest version of a specific tool.
Example Prompts:
"What are the most useful features for developers in Python 3.10?"
"Explain the latest methods for implementing asynchronous programming in Python using AsyncIO."
4. Code Review Requests
Objective: To receive feedback on your code or to explore ways to improve it.
Approach: Provide a short snippet of code and ask for specific feedback.
Example Prompts:
"Can you suggest ways to improve the performance of the following Python code?" (include code snippet)
"How can I reduce memory usage in this Python script?" (include code snippet)
5. Best Practices and Patterns Questions
Objective: To learn efficient and robust coding practices.
Approach: Request best practices for a specific topic or problem.
Example Prompts:
"What are the best practices for exception handling in Python?"
"What patterns increase code reusability in large Python applications?"

By employing these strategies, Python developers can gain more accurate and useful information from ChatGPT. The depth and scope of the information needed may vary depending on the type of question, so it's important to consider this when setting up your prompts.

 

728x90

 

 

마무리

- 이번 포스팅은 Python Devloper 를 위한 Prompts에 대해 알아봤습니다.

CostZeroCode

 
 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

Simple and Easy example Code

더보기

# unittest
- 파이썬의 표준 라이브러리 중 하나로, 자동화된 단위 테스트를 작성하기 위해 사용함
- 테스트 케이스의 작성, 테스트 스위트의 구성, 테스트 실행 및 결과 확인을 지원함
- JUnit과 유사한 구조를 가지고 있어 Java 경험이 있는 개발자에게 친숙함
- 각 테스트는 독립적이며, 여러 테스트 케이스를 하나의 테스트 스위트로 묶어 관리할 수 있음

1. Code Reviw

  Very Easy Simple Code.

import unittest

# 테스트할 함수 정의
def add(a, b):
    return a + b

# 테스트 케이스 클래스 정의
class TestAddFunction(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(1, 2), 3) # 1 + 2가 3과 같은지 검사
    def test_add_negative(self):
        self.assertEqual(add(-1, -1), -2) # 음수 덧셈 검사
    def test_add_float(self):
        self.assertAlmostEqual(add(1.1, 2.2), 3.3, places=1) # 부동소수점 덧셈 검사, 소수점 아래 1자리까지 검사

# 테스트 실행
if __name__ == '__main__':
    unittest.main()
더보기

이 코드는 add 함수에 대한 세 가지 테스트를 포함하고 있습니다: 양수의 덧셈, 음수의 덧셈, 부동소수점 수의 덧셈입니다. 각 테스트는 assertEqual 또는 assertAlmostEqual 메소드를 사용하여 함수의 반환값이 예상값과 일치하는지 검사합니다.

 

반응형

2. Example Unit Test #2

 또다른 예제 코드

import unittest

class TestStringMethods(unittest.TestCase):
    # 문자열이 대문자로 변환되는지 테스트하는 메소드
    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')
    
    # 문자열이 소문자로 변환되는지 테스트하는 메소드
    def test_islower(self):
        self.assertTrue('foo'.islower())
        self.assertFalse('Foo'.islower())
    
    # 특정 문자열을 포함하는지 테스트하는 메소드
    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # split의 결과가 예상과 다를 때 발생하는 에러 메시지 지정
        with self.assertRaises(TypeError):
            s.split(2)

# 테스트 실행
if __name__ == '__main__':
    unittest.main()

 

더보기

테스트 실행은 python -m unittest <test_file>.py 명령어를 사용하거나, 파일 내부에 unittest.main()을 호출하여 직접 실행할 수 있음.

 

728x90

 

 

마무리

- 이번 포스팅은 Unit TestCode 에 대해 알아봤습니다.

CostZeroCode

 
 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

특정 문자열을 포함하는 데이터를 탐색

안녕하세요, 
오늘의 블로그 포스팅에서는 Python의 Pandas 라이브러리를 활용하여 특정 문자열을 포함하는 데이터를 탐색하고 이를 기반으로 새로운 열을 데이터프레임에 추가하는 방법을 알아보겠습니다.

이번 예제에서특정 문자열을 찾아내는 것을 목표로 합니다.

1. 코드리뷰

데이터프레임 준비
먼저, 우리가 작업할 샘플 데이터프레임을 생성해보겠습니다.

데이터프레임에는 날짜(DATE), 선수 이름(PLAYER), 출생년도(Birth), 소속 클럽(TEAM), 그리고 데이터베이스 ID(DB_ID)가 포함됩니다.

import pandas as pd

# 데이터프레임 수정
data = {
    'DATE': ['2023-10-13 0:00:00', '2023-10-14 1:00:00', '2023-10-15 2:00:00', 
             '2024-01-16 3:00:00', '2024-01-17 4:00:00', '2024-01-18 5:00:00', 
             '2024-01-18 6:00:00', '2024-01-18 7:00:00', '2024-01-18 8:00:00'],
    'PLAYER': ['손흥민(Son Heung-min)', '이강인(Lee Kang-in)', '김민재(Kim Min-jae)', 
               '황희찬(Hwang Hee-chan)', '박지성(Park Ji-sung)', '기성용(Ki Sung-yueng)', 
               '차범근(Cha Bum-kun)', '차두리(Cha Du-ri)', '이청용(Lee Chung-yong)'],
    'Birth': ['1992년 7월 8일', '2001년 2월 19일', '1996년 11월 15일', 
              '1996년 1월 26일', '1981년 2월 25일', '1989년 1월 24일', 
              '1953년 5월 22일', '1980년 7월 25일', '1988년 7월 2일'],
    'TEAM': ['Tottenham Hotspur', 'PSG', 'FC Bayern Munich', 
               'Wolverhampton Wanderers FC', 'Manchester United', 'THE CELTIC FC', 
               '프랑크푸르트', '프랑크푸르트', '볼턴 원더러스'],
    'DB_ID': ['CI13/JO_DATA/TZ10', 'CI07/JO_DATA/TZ10', 'CI13//TZ10', 
              'SI_DATA/TZ10', 'CI3/JO_DATA/TZ12', 'CI13/JO_DATA', 
              'CI13/SI_DATA/TZ10', 'CI77/JO_DATA/TZ10', 'SI_DATA/TZ10']
}
df = pd.DataFrame(data)
df.to_csv('result.csv') # 결과 저장

특정 문자열 탐색 및 새 열 추가

이제 'DB_ID' 열에서 'JO_DATA' 문자열을 포함하는 행을 찾아, 이 정보를 바탕으로 새로운 열 'CHECK_ID'에 'JO_DATA'를 저장하는 작업을 진행하겠습니다. 이를 위해 apply 함수와 람다(lambda) 표현식을 사용합니다.

df.apply() 메소드 와 람다(lambda)는 아래에 다시 자세히 설명 하겠습니다.

df['CHECK_ID'] = df['PLACE'].apply(lambda x: 'JO_DATA' if 'JO_DATA' in x else None)

결과 (output) : CHECK_ID 열에 DB_ID 값 JO_DATA가 있으면 저장한 결과

 

2. apply 함수와 람다(lambda) 표현식

DataFrame.apply() 메소드는 판다스(Pandas)에서 데이터프레임의 열이나 행에 함수를 적용할 때 사용합니다. 
이 메소드는 데이터프레임의 각 열이나 행에 대해 지정된 함수를 적용하고 결과를 데이터프레임 또는 시리즈로 반환합니다.
 axis 매개변수를 통해 함수가 적용되는 축을 지정할 수 있으며, axis=0은 열에 함수를 적용하고, axis=1은 행에 함수를 적용합니다.

예제 1: 열의 최대값과 최소값의 차이 계산

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})

def max_min_diff(x):
    return x.max() - x.min()

result = df.apply(max_min_diff)
print(result)

결과 : 

A    2
B    2
C    2

예제 2: 행별로 최대값 찾기

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})

result = df.apply(max, axis=1)
print(result)

결과 :

0    7
1    8
2    9

예제 3: 데이터프레임의 각 열에 대해 데이터 유형 변환

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': ['4', '5', '6'], 'C': [0.1, 0.2, 0.3]})

def convert_dtype(x):
    if x.dtype == 'float64':
        return x.astype('int64')
    return x

result = df.apply(convert_dtype)
print(result)

결과 :

   A  B  C
0  1  4  0
1  2  5  0
2  3  6  0

이 예제들은 apply() 메소드의 다양한 사용 방법을 보여줍니다. 첫 번째 예제는 각 열의 최대값과 최소값의 차이를 계산합니다. 두 번째 예제는 각 행의 최대값을 찾습니다. 세 번째 예제에서는 데이터프레임의 각 열의 데이터 유형을 조건에 따라 변환합니다.

파이썬의 lambda 함수는 작은 익명 함수를 정의하는 데 사용됩니다. lambda 함수는 여러 인자를 받을 수 있지만, 표현식은 하나만 가질 수 있으며, 그 표현식의 계산 결과가 반환됩니다. lambda 함수는 일반적으로 함수를 인자로 받는 고차 함수에서 사용되거나, 짧은 함수가 필요한 곳에 쓰이는 경우가 많습니다. 기본 형식은 다음과 같습니다.

lambda arguments: expression

예제 1: 두 수를 더하는 lambda 함수

add = lambda x, y: x + y
print(add(5, 3))

예제 2: 리스트의 각 요소에 제곱을 적용

numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)

예제 3: 리스트에서 홀수만 필터링

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
odds = list(filter(lambda x: x % 2 != 0, numbers))
print(odds)

이 예제들은 lambda 함수의 다양한 사용 방법을 보여줍니다. 첫 번째 예제는 두 수를 더하는 간단한 lambda 함수를 정의합니다. 두 번째 예제에서는 map() 함수와 lambda를 결합하여 리스트의 각 요소에 제곱을 적용합니다. 세 번째 예제에서는 filter() 함수와 lambda를 사용하여 리스트에서 홀수만을 필터링합니다.

마무리

- 이번 포스팅은 판다스 조건별 탐색 및 apply() 메소드 및 lambda에 대해 알아봤습니다.

 

궁금한 사항은 댓글을 통해서 남겨 주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

파일 브라우저, 파일 탐색기를 만들어 보자. 

Tkinter GUI 라이브러리가 있지만, 저는 PysimpleGUI이 좀더 동작이 가볍고 구현이 쉬워 자주 활용 하고있습니다.

PySimpleGUI:
PySimpleGUI는 Tkinter, Qt, WxPython, Remi를 래핑한 라이브러리입니다.
이름에서 알 수 있듯이, PySimpleGUI는 사용하기 쉬우며, 빠르게 GUI를 구축할 수 있도록 설계되었습니다.
코드가 더 짧고, 이해하기 쉬운 편이며, 빠르게 프로토타입을 만들기에 적합합니다.
다양한 테마와 위젯을 지원하여 멋진 인터페이스를 쉽게 만들 수 있습니다.
PySimpleGUI를 선택하는 것은 사용의 용이성과 빠른 개발이 필요할 때 좋은 선택일 수 있습니다. 복잡한 요구 사항이 없고, 간단하면서도 효율적인 GUI를 원한다면 PySimpleGUI가 매우 적합할 것입니다. 반면, 더 복잡하고 맞춤화된 GUI가 필요하다면 Tkinter를 고려해볼 수 있습니다.

Tkinter:
Tkinter는 파이썬의 표준 GUI 툴킷입니다.
광범위하게 사용되며, 파이썬 설치와 함께 기본적으로 제공됩니다.
Tkinter는 매우 유연하며, 맞춤화가 가능하지만, 복잡한 인터페이스를 만들 때는 코드가 길어질 수 있습니다.
플랫폼 독립적이며, 윈도우, 맥OS, 리눅스에서 잘 작동합니다.

1. 코드리뷰

이 PySimpleGUI 스크립트는 사용자가 파일을 선택할 수 있는 간단한 파일 브라우저 GUI를 구현하고 있습니다.

import PySimpleGUI as sg
import os

current_path = os.getcwd()  # Get the current working directory

layout = [
    [sg.Text("Choose a file: ")],
    [sg.InputText(key="-FILE-"), sg.FileBrowse(initial_folder=current_path, file_types=[("ALL Files", "*.*")])],
    [sg.Button("OK"), sg.Exit()]
]

window = sg.Window("File Browser", layout)

while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, "Exit"):
        break
    elif event == "OK":
        file_path = values["-FILE-"]
        if file_path:
            print(f"Loaded File: {file_path}")
        else:
            print("No file selected.")

window.close()

위의 sg.Exit() 버튼은 sg.Button('EXIT')로 변경해서 사용하셔도 됩니다.

실행결과

코드 분석
모듈 임포트: PySimpleGUI와 os 모듈을 사용합니다. PySimpleGUI는 GUI를 만드는데 사용되고, os는 현재 작업 디렉토리 경로를 얻는데 사용됩니다.
현재 디렉토리 경로: os.getcwd()를 사용하여 현재 실행중인 디렉토리 위치를 가져옵니다.
GUI 레이아웃 설정: 파일을 선택할 수 있는 인터페이스와 'OK' 및 'Exit' 버튼이 포함된 GUI 레이아웃을 정의합니다.
이벤트 루프: 사용자의 입력을 기다리고, 'OK' 버튼을 누르면 파일 경로를 출력하고, 'Exit' 버튼이나 창 닫기를 통해 프로그램을 종료합니다.

이벤트 처리 개선: if event in (sg.WIN_CLOSED, "Exit") 부분은 명확하지만, elif event == "OK"는 else로 대체할 수 있습니다. 현재 구조에서는 'OK' 외의 다른 이벤트는 발생하지 않기 때문입니다.

리소스 관리: GUI 프로그램에서는 리소스 관리도 중요합니다. PySimpleGUI는 내부적으로 리소스 관리를 잘 하지만, 크고 복잡한 응용 프로그램에서는 리소스 관리를 더 신경 써야 할 수 있습니다.

오류 처리: 사용자가 파일을 선택하지 않고 'OK'를 누를 경우를 대비해 오류 처리를 추가하는 것이 좋습니다.

다른 예제 코드: 

import PySimpleGUI as sg
import os

def create_file_browser():
    # 현재 작업 디렉토리를 가져옵니다.
    current_path = os.getcwd()

    # 레이아웃을 정의합니다.
    layout = [
        [sg.Text("Choose a file: ")],
        [sg.InputText(key="-FILE-"), sg.FileBrowse(initial_folder=current_path, file_types=[("ALL Files", "*.*")])],
        [sg.Button("Open"), sg.Button("Cancel")]
    ]

    # 윈도우 객체를 생성합니다.
    window = sg.Window("File Browser", layout)

    # 이벤트 루프
    while True:
        event, values = window.read()
        if event in (None, "Cancel"):
            break
        if event == "Open":
            file_path = values["-FILE-"]
            if file_path:
                sg.popup(f"You selected: {file_path}")
            else:
                sg.popup("No file selected.")
    
    window.close()

# 파일 브라우저 실행
create_file_browser()

- os.getcwd() 는 현재 작업 디렉토리를 가져오는 데 사용됩니다.

- 레이아웃 생성: GUI의 레이아웃을 정의합니다. 여기에는 파일 선택을 위한 InputText와 FileBrowse 버튼, 그리고 'Open'과 'Cancel' 버튼이 포함됩니다.

- 이벤트 루프: 사용자의 입력을 처리하는 이벤트 루프입니다. 사용자가 파일을 선택하고 'Open'을 클릭하면 선택된 파일 경로를 팝업으로 표시합니다. 'Cancel'을 클릭하거나 창을 닫으면 프로그램이 종료됩니다.

2. 여러파일 또는 폴더 선택

sg.FileBrowse()에서 sg.FilesBrowse()로 변경한다.
values['-FILE-']를 values['-FILE-'].split(';')로 세미콜론 단위로 파일 정보를 가져온다.

import PySimpleGUI as sg

# Create the layout for the file browser
layout = [[sg.Text('Select multiple files:')],
          [sg.Input(key='-FILES-'), sg.FilesBrowse()],
          [sg.Button('Submit'), sg.Button('Cancel')]]

# Create the window
window = sg.Window('File Browser', layout)

# Event loop
while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED or event == 'Cancel':
        break
    elif event == 'Submit':
        selected_files = values['-FILES-'].split(';')
        print('Selected Files:', selected_files)

# Close the window
window.close()

실행결과

 

2. 폴더(디렉토리) 의 정보를 가져오기.

폴더 정보를 가져는 연습을 해보자.

이번에는 한글을 적용해서 만든 코드 예제 입니다.

import PySimpleGUI as sg

# 파일 브라우저를 위한 레이아웃 생성
layout = [[sg.Text('폴더를 선택하세요:')],
          [sg.Input(key='-FOLDER-'), sg.FolderBrowse()],
          [sg.Button('확인'), sg.Button('취소')]]

# 창 생성
window = sg.Window('파일 브라우저', layout)

# 이벤트 루프
while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED or event == '취소':
        break
    elif event == '확인':
        selected_folder = values['-FOLDER-']
        print('선택된 폴더:', selected_folder)

# 창 닫기
window.close()

실행결과

 

 

마무리

- 이번 포스팅은 PySimpleGUI의 파일 브라우저를 사용하여 Python GUI 애플리케이션에서 파일과 폴더를 선택할 수 있는 기본적인 사용법을 알아 보았습니다.

 

궁금한 사항은 댓글을 통해서 남겨 주시면 답변 드리겠습니다.
감사합니다.

 

728x90
반응형

+ Recent posts