반응형
반응형

[python] polar plot에서 한글 사용하기. 

 

Python에서 한글을 matplotlib 플롯에 표시하려면, 폰트를 설정하여 한글이 올바르게 렌더링되도록 해야 합니다. 시스템에 설치된 한글 폰트를 지정하거나, matplotlib에서 기본적으로 한글을 지원하는 폰트를 설정하면 됩니다.

아래는 Example Polar Plot이라는 제목을 한글로 변경하여 출력하는 예제 코드입니다.

 

import matplotlib.pyplot as plt
import numpy as np

# 한글 폰트 설정 (예: Windows에서는 'Malgun Gothic', MacOS에서는 'AppleGothic')
plt.rcParams['font.family'] = 'Malgun Gothic'  # 또는 'AppleGothic' (Mac)
plt.rcParams['axes.unicode_minus'] = False     # 마이너스 기호 깨짐 방지

# 데이터 준비
angles = np.linspace(0, 2 * np.pi, 100)
radii = 1 + np.sin(angles)

# Polar Plot 생성
plt.figure(figsize=(6, 6))
ax = plt.subplot(111, projection='polar')
ax.plot(angles, radii, color='blue', linewidth=2)

# 한글 제목 추가
ax.set_title("예제 polar plot", va='bottom')
plt.show()

코드 설명

  • plt.rcParams['font.family']: 한글을 표시하기 위한 폰트를 지정합니다. Windows에서는 'Malgun Gothic', MacOS에서는 'AppleGothic'을 사용할 수 있습니다.
  • plt.rcParams['axes.unicode_minus'] = False: 마이너스 기호(-)가 깨지지 않도록 설정합니다.
  • ax.set_title("예제 극좌표 플롯", va='bottom'): 제목을 한글로 설정합니다.

이제 matplotlib 플롯에서 한글 제목이 잘 출력될 것입니다.

 

반응형
반응형

Python의 matplotlib 라이브러리를 사용하여 polar plot(극좌표 플롯)을 쉽게 그릴 수 있습니다. polar plot은 데이터를 각도와 반경을 사용하여 나타내며, 방위 데이터나 주기적인 패턴을 표현하는 데 유용합니다.

* 코드 설명
    1.theta와 r 설정: theta는 각도 값, r은 반경 값입니다.
         1.1.theta는 0에서 2π까지 균일하게 분포된 100개의 값을 가지며, np.linspace를 사용하여 생성합니다.
         1.2.r은 sin(3 * theta) 함수를 이용하여 생성된 반경 값에 1을 더하여 그래프를 그립니다.

                 이 함수는 각도에 따른 반경의 변화를 표현하며, 주기적인 패턴을 생성합니다.
     2.polar=True 옵션: plt.subplot(111, polar=True)로 설정하여 polar plot을 생성합니다.
     3.그래프 출력: plt.show()로 결과를 화면에 출력합니다.

import matplotlib.pyplot as plt
import numpy as np

# 각도 (theta)와 반경 (r) 값 생성
theta = np.linspace(0, 2 * np.pi, 100)  # 0에서 2π 사이의 각도 값
r = 1 + np.sin(3 * theta)               # 반경 값은 특정 함수로 정의

# Polar plot 생성
plt.figure(figsize=(6, 6))
ax = plt.subplot(111, polar=True)       # polar=True 옵션으로 polar plot 생성
ax.plot(theta, r)

# 플롯 설정
ax.set_title("Polar Plot Example", va='bottom')
plt.show()

import matplotlib.pyplot as plt
import numpy as np

# 임의의 데이터
theta = np.array([0, np.pi/4, np.pi/2, 3*np.pi/4, np.pi])  # 각도 데이터
r = np.array([1, 2, 3, 4, 5])                              # 반경 데이터

# Polar plot 생성
plt.figure(figsize=(6, 6))
ax = plt.subplot(111, polar=True)
ax.plot(theta, r, marker='o')

# 플롯 설정
ax.set_title("Custom Data Polar Plot", va='bottom')
plt.show()

반응형
반응형

[python] 난수 10자리에서 영문 숫자 분포가 골고루 들어갈수있게

 

import random
import string

def generate_balanced_random_string(length=10):
    # 원하는 비율로 대문자, 소문자, 숫자 개수 설정
    num_uppercase = 4  # 대문자 4개
    num_lowercase = 3  # 소문자 3개
    num_digits = 3     # 숫자 3개

    # 각 문자 유형에서 원하는 만큼 선택
    uppercase_letters = random.choices(string.ascii_uppercase, k=num_uppercase)
    lowercase_letters = random.choices(string.ascii_lowercase, k=num_lowercase)
    digits = random.choices(string.digits, k=num_digits)

    # 모든 문자들을 합쳐서 무작위로 섞음
    random_string = uppercase_letters + lowercase_letters + digits
    random.shuffle(random_string)

    # 리스트를 문자열로 변환하여 반환
    return ''.join(random_string)

# 함수 호출
random_string = generate_balanced_random_string()
print(f"균형 잡힌 10자리 난수: {random_string}")
반응형
반응형

[python] 랜덤 난수 생성해서 엑셀에 저장하기 

"""   
랜덤으로 생성된 문자열을 엑셀 파일에 저장
"""
import random
import string
import os
from captcha.image import ImageCaptcha
import pandas as pd  # pandas 라이브러리를 사용하여 엑셀 파일 저장

# 2023-05-26 ngio add
# 파이썬 컴파일 경로가 달라서 현재 폴더의 이미지를 호출하지 못할때 작업디렉토리를 변경한다. 
import os
from pathlib import Path
# src 상위 폴더를 실행폴더로 지정하려고 한다.
###real_path = Path(__file__).parent.parent
real_path = Path(__file__).parent
print(real_path)
#작업 디렉토리 변경
os.chdir(real_path) 


# 랜덤 6자리 문자열 생성 함수
def generate_random_string(length=6):
    # string.ascii_uppercase: 영문 대문자 A-Z만을 포함합니다.
    # string.ascii_lowercase: 영문 소문자 a-z만을 포함합니다.
    # characters = string.ascii_letters + string.digits  # 영문 대소문자 + 숫자
    characters = string.ascii_uppercase + string.digits
    return ''.join(random.choices(characters, k=length)) 

# 초기 데이터
data = [['QWE123', 10001], ['RTY456', 10002]]

# 반복문을 통해 데이터 추가
for i in range(1, 10):
    #letter = chr(64 + i)  # A: 65 -> B: 66 -> C: 67 -> ...
    letter = generate_random_string();
    data.append([letter, (10002 + i)])

print(data)
print("\n\n")

# 중복 값 확인 함수
def check_duplicates(data):
    # 리스트를 튜플로 변환 (리스트는 set에 직접 넣을 수 없기 때문)
    data_as_tuples = [tuple(item) for item in data]
    
    # 집합의 크기와 리스트의 크기를 비교
    if len(data_as_tuples) != len(set(data_as_tuples)):
        print("중복된 값이 있습니다.")
    else:
        print("중복된 값이 없습니다.")

# 함수 호출
check_duplicates(data)
print("\n\n")


# DataFrame으로 변환
df = pd.DataFrame(data, columns=['random_word', 'word_index'])

# 결과 출력
print(df)
print("\n\n")
반응형
반응형

## pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.

This project was forked from rbenv and ruby-build, and modified for Python.

https://github.com/pyenv/pyenv

 

GitHub - pyenv/pyenv: Simple Python version management

Simple Python version management. Contribute to pyenv/pyenv development by creating an account on GitHub.

github.com

## What pyenv does...
* Lets you change the global Python version on a per-user basis.
* Provides support for per-project Python versions.
* Allows you to override the Python version with an environment variable.
* Searches for commands from multiple versions of Python at a time. This may be helpful to test across Python versions with tox.

## In contrast with pythonbrew and pythonz, pyenv does not...
* Depend on Python itself. pyenv was made from pure shell scripts. There is no bootstrap problem of Python.
* Need to be loaded into your shell. Instead, pyenv's shim approach works by adding a directory to your PATH.
* Manage virtualenv. Of course, you can create virtualenv yourself, or pyenv-virtualenv to automate the process.

반응형
반응형

[python]  랜덤 6자리 문자열을 생성하고, 중복되지 않도록 파일명을 지정한 후 이미지 캡차를 저장. captcha

import random
import string
import os
from captcha.image import ImageCaptcha  # ImageCaptcha 라이브러리를 사용해야 합니다.

# 랜덤 6자리 문자열 생성 함수
def generate_random_string(length=6):
    characters = string.ascii_letters + string.digits  # 영문 대소문자 + 숫자
    return ''.join(random.choices(characters, k=length))

# 중복되지 않는 파일명 생성 함수
def get_unique_filename(base_name, extension, directory="./img/"):
    counter = 1
    new_filename = f"{base_name}.{extension}"
    
    # 경로 내 파일명이 중복되면 새로운 파일명 생성
    while os.path.exists(os.path.join(directory, new_filename)):
        new_filename = f"{base_name}_{counter}.{extension}"
        counter += 1
    
    return new_filename

# 메인 로직
def main():
    # 캡차 이미지 생성기 설정
    image = ImageCaptcha(width=280, height=90)

    # 랜덤 6자리 문자열 생성
    captcha_text = generate_random_string()
    print(f"\n랜덤 6자리 문자열: {captcha_text}")

    # 이미지 생성
    data = image.generate(captcha_text)

    # 이미지 저장 경로 지정
    img_directory = "./img/"
    os.makedirs(img_directory, exist_ok=True)  # img 폴더가 없을 경우 생성

    # 중복되지 않는 파일명 생성
    unique_filename = get_unique_filename(captcha_text, 'png', directory=img_directory)

    # 이미지 파일 저장
    image.write(captcha_text, os.path.join(img_directory, unique_filename))

    print(f"이미지가 {unique_filename}으로 저장되었습니다.")

# 프로그램 실행
if __name__ == "__main__":
    main()

 

수정 내용:

  1. generate_random_string() 함수: 랜덤한 6자리 문자열을 생성합니다.
  2. get_unique_filename() 함수: 파일명 중복을 방지하기 위해, 기존에 존재하는 파일이 있을 경우 숫자를 추가하여 고유 파일명을 생성합니다.
  3. 폴더 생성 (os.makedirs()): 이미지 저장 경로(./img/)가 존재하지 않으면 자동으로 폴더를 생성하도록 os.makedirs()를 사용합니다.
  4. os.path.exists(): 파일이 존재하는지 확인하고 중복 파일명을 방지합니다.
  5. 경로 및 파일명 결합 (os.path.join()): OS에 관계없이 적절한 경로를 결합하기 위해 os.path.join()을 사용합니다.

실행 결과:

  • ./img/ 폴더에 랜덤한 문자열을 포함한 이미지가 저장됩니다.
  • 파일명이 중복되면 자동으로 _1, _2 등의 숫자가 추가됩니다.

 

반응형

+ Recent posts