Pet-проекты и данные для Data-Engineer
⚡️ При изучении дата-инжиниринга часто возникает вопрос: «откуда брать данные?»
1️⃣ Брать реальные данные откуда‑то.
2️⃣ Генерить данные самостоятельно.
Первый вариант хорош, но сложнее, потому что к такого вида данным сложнее получить доступ и я бы этот вариант использовал, если вы хотите на этих данных строить какой‑то продукт или аналитику. Если обобщить, то сделать данные «полезными».
Второй вариант как по мне более предпочтителен, потому что вы сможете проверить больше инструментов и возможностей в своих pet‑проектах и не особо задумываться над качеством и источником данных. Но также стоит упомянуть, что можно генерировать довольно правдоподобные данные, которые можно будет использовать для аналитики или визуализаций.
APILayer APIs
Faker
🖥 Оптимизировал пример создания ненастоящего пользователя:
⌨️ Теги: #analytics #faker #api #generate #user #profile #данные #генерация #quadd4rv1n7 #maximdupley #2024
Первый вариант хорош, но сложнее, потому что к такого вида данным сложнее получить доступ и я бы этот вариант использовал, если вы хотите на этих данных строить какой‑то продукт или аналитику. Если обобщить, то сделать данные «полезными».
Второй вариант как по мне более предпочтителен, потому что вы сможете проверить больше инструментов и возможностей в своих pet‑проектах и не особо задумываться над качеством и источником данных. Но также стоит упомянуть, что можно генерировать довольно правдоподобные данные, которые можно будет использовать для аналитики или визуализаций.
APILayer APIs
Faker
from faker import Faker
from datetime import timedelta
import random
fake = Faker(locale='ru_RU')
def generate_fake_user(min_age=18, max_age=70, registration_years=5):
"""
Генерирует фейковый профиль пользователя.
:param min_age: минимальный возраст пользователя
:param max_age: максимальный возраст пользователя
:param registration_years: максимальное количество лет назад для даты регистрации
:return: словарь с данными пользователя
"""
# Генерация даты рождения и даты регистрации
birthday = fake.date_of_birth(minimum_age=min_age, maximum_age=max_age)
registration_at = fake.date_time_between(start_date=f"-{registration_years}y", end_date="now")
# Генерация фейкового профиля пользователя
fake_user = {
'first_name': fake.first_name(),
'last_name': fake.last_name(),
'middle_name': fake.middle_name(),
'phone_number': fake.phone_number(),
'email': fake.email(),
# Генерация адресных данных с логической структурой
'address': {
'country': fake.country(),
'country_code': fake.country_code(),
'region': fake.region(),
'city': fake.city(),
'street_address': fake.street_address(),
'postcode': fake.postcode(),
},
# Дополнительные сведения о пользователе
'occupation': fake.job(),
'company': fake.company(),
'work_phone': fake.phone_number(),
'marital_status': random.choice(['Single', 'Married', 'Divorced', 'Widowed']),
'website': fake.url(),
# Даты
'registration_at': registration_at,
'birthday': birthday,
# Профиль в социальных сетях и банковские реквизиты (при необходимости)
'social_profile': fake.url(),
'credit_card': {
'number': fake.credit_card_number(),
'provider': fake.credit_card_provider(),
'expiration_date': fake.credit_card_expire(),
}
}
return fake_user
# Пример использования
fake_user = generate_fake_user()
print(fake_user)
⌨️ Теги: #analytics #faker #api #generate #user #profile #данные #генерация #quadd4rv1n7 #maximdupley #2024
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Pet-проекты и данные для Data-Engineer
При изучении дата-инжиниринга часто возникает вопрос: « откуда брать данные? » И тут я вижу два варианта: Брать реальные данные откуда‑то. Генерить данные самостоятельно. Первый вариант хорош,...
👍2
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
dt = [int(i) for i in input("Введите дату отправки в формате mm:dd ").split(":")]
tm = [int(i) for i in input("Введите время отправки в формате hh:mm:ss: ").split(":")]
receivers = input("Вставьте ссылки получателей через запятую без пробелов: ").split(",")
message = input("Введите сообщение: ")
while True:
if (tm[0] == time.localtime().tm_hour and tm[1] == time.localtime().tm_min and tm[2] == time.localtime().tm_sec\
and dt[0] == time.localtime().tm_mon and dt[1] == time.localtime().tm_mday):
urls = ["https://vk.com/?to=c3RpbGxtb3J0YWw-",
"/html/body/div[14]/div/div/div/div[3]/div/div/div[2]/div[1]/div/div/section/div/div/div/div/div/div[2]/div/button[1]/span/span",
"/html/body/div[14]/div/div/div/div[3]/div/div/div[2]/div[1]/div/div/section/div/div/div/div/div/form/div[1]/div[3]/span/div/div[2]/input",
"/html/body/div[14]/div/div/div/div[3]/div/div/div[2]/div[1]/div/div/section/div/div/div/div/div/form/button[1]/span",
"/html/body/div[1]/div/div/div/div/div[1]/div[1]/div/div/div/div/form/div[3]/button/span/span",
"/html/body/div[1]/div/div/div/div/div[2]/div/div[2]/div/div/div/div/div[2]/div[1]/div/div/div[4]/div[2]/div[1]/span",
"/html/body/div[1]/div/div/div/div/div[1]/div[1]/div/div/div/div/form/div[1]/div[3]/div/div/input",
"/html/body/div[1]/div/div/div/div/div[1]/div[1]/div/div/div/div/form/div[2]/button[1]/span",
]
urls_send = ["//*[@id='mail_box_editable']",
"//*[@id='mail_box_send']/span/span"]
friend = "//*[@id='profile_redesigned']/div/div/div/div[2]/div[2]/div[2]/div/div[2]/div/div/div/div[1]/a/span/span"
not_friend = "#profile_redesigned > div > div > div > div.ProfileHeader.ProfileHeader--withSnowballs > div.ProfileHeader__in > div.ProfileHeader__wrapper > div > div.ProfileHeader__actions > div > div > div > div:nth-child(2) > a > span > span > svg"
# entrance
browser = webdriver.Chrome()
browser.maximize_window()
browser.get(urls[0])
time.sleep(5)
search = browser.find_element(By.XPATH, urls[1])
search.click()
time.sleep(5)
search = browser.find_element(By.XPATH, urls[2])
search.send_keys("login")
time.sleep(5)
search = browser.find_element(By.XPATH, urls[3])
search.click()
time.sleep(5)
search = browser.find_element(By.XPATH, urls[4])
search.click()
time.sleep(5)
search = browser.find_element(By.XPATH, urls[5])
search.click()
time.sleep(5)
search = browser.find_element(By.XPATH, urls[6])
search.send_keys("password")
time.sleep(5)
search = browser.find_element(By.XPATH, urls[7])
search.click()
time.sleep(5)
# sending
for receiver in receivers:
browser.get(receiver)
time.sleep(5)
try:
search = browser.find_element(By.CSS_SELECTOR, not_friend)
search.click()
except Exception:
search = browser.find_element(By.XPATH, friend)
search.click()
time.sleep(5)
search = browser.find_element(By.XPATH, urls_send[0])
search.send_keys(message)
time.sleep(5)
search = browser.find_element(By.XPATH, urls_send[1])
search.click()
print(time.localtime())
time.sleep(1)
Ставьте «
⌨️ Теги:
#python
#lesson
#аналитика
#quadd4rv1n7
#maximdupley
#maestro7it
#2025
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Пишем отложенные сообщения для ВК на питоне
Данная проблема возникла у меня, когда мне нужно было уехать загород на несколько недель, при этом во время отъезда нужно было отправить сообщение в ВК, а доступа в интернет я не имел бы. Поискав...
👍1