Анализ данных (Data analysis)
46.3K subscribers
2.33K photos
269 videos
1 file
2.06K links
Data science, наука о данных.

@haarrp - админ

@itchannels_telegram - 🔥 главное в ит

@ai_machinelearning_big_data - ML

@machinelearning_interview - вопросы с собесдований по Ml

РКН: clck.ru/3FmyAp
Download Telegram
🔥 Подборка полезных папок с каналами для датасаентисов

Папки, где вы найдете каналы с разбором лучших практик написания кода на Python и Golang до каналов по машинному обучению и нейросетям (папки работают на последних версиях тг).

https://t.iss.one/addlist/2Ls-snqEeytkMDgy - Машинное обучение

https://t.iss.one/addlist/8vDUwYRGujRmZjFi - Python

https://t.iss.one/addlist/MUtJEeJSxeY2YTFi - Golang
👍11🔥2
🖥 Как переписать и оптимизировать ваши SQL-запросы к Pandas на пяти простых примерах

Аналитики данных, инженеры и учёные одинаково знакомы с SQL. Язык запросов по-прежнему широко используется для работы с реляционными базами данных любого типа.

Однако, в настоящее время, всё больше и больше, особенно для аналитиков данных, растут технические требования, и ожидается, что люди, по крайней мере, знают основы языка программирования. При работе с данными Python и Pandas являются обычным дополнением к списку требований в описании вакансий.

Хотя Pandas может быть новым для людей, знакомых с SQL, концепции выбора, фильтрации и агрегирования данных в SQL легко переносятся в Pandas. Давайте рассмотрим в этой статье некоторые распространённые SQL-запросы и способы их написания и оптимизации в Pandas.

Читать

@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍6🔥3💔1
🔥 5 примеров использования Redis с кодом на Python

1. Caching
Redis можно использовать для кэширования часто используемых данных, снижая нагрузку на ваше основное хранилище данных. Вот пример того, как реализовать кэширование с помощью Redis в Python

import redis

# Connect to Redis
r = redis.Redis(host='localhost', port=6379, db=0)

def get_data_from_cache(key):
# Check if data exists in the cache
if r.exists(key):
# Retrieve data from the cache
data = r.get(key)
return data.decode('utf-8') # Convert bytes to string
else:
# Fetch data from the primary data source
data = fetch_data_from_source()

# Store data in the cache with a timeout of 1 hour
r.setex(key, 3600, data)
return data


2. Pub/Sub (Publish/Subscribe):
Redis поддерживает паттерн pub/sub, позволяя вам создавать системы обмена сообщениями. Вот пример:

import redis
import time

# Connect to Redis
r = redis.Redis(host='localhost', port=6379, db=0)

def publish_message(channel, message):
# Publish a message to the specified channel
r.publish(channel, message)

def subscribe_channel(channel):
# Subscribe to a channel and process incoming messages
pubsub = r.pubsub()
pubsub.subscribe(channel)

for message in pubsub.listen():
print(message['data'].decode('utf-8')) # Process the received message


3. Rate Limiting:
Redis можно использовать для реализации ограничения скорости, чтобы контролировать количество запросов или операций за период времени. Пример:

import redis

# Connect to Redis
r = redis.Redis(host='localhost', port=6379, db=0)

def check_rate_limit(ip_address):
# Increment the request count for the IP address
request_count = r.incr(ip_address)

# If the count exceeds the limit (e.g., 100 requests per minute), deny the request
if request_count > 100:
return False

return True


4. Session Storage:
Redis можно использовать для хранения данных сеанса в веб-приложениях. Пример:

import redis
import uuid

# Connect to Redis
r = redis.Redis(host='localhost', port=6379, db=0)

def create_session(user_id):
# Generate a unique session ID
session_id = str(uuid.uuid4())

# Store the session data in Redis with a timeout of 30 minutes
r.setex(session_id, 1800, user_id)

return session_id

def get_user_id_from_session(session_id):
# Retrieve the user ID from the session data in Redis
user_id = r.get(session_id)

if user_id is not None:
return user_id.decode('utf-8') # Convert bytes to string
else:
return None


5. Leaderboard:
Redis можно использовать для создания таблиц лидеров или рейтингов на основе набранных баллов. Пример:

import redis

# Connect to Redis
r = redis.Redis(host='localhost', port=6379, db=0)

def update_score(player_id, score):
# Update the score of a player
r.zadd('leaderboard', {player_id: score})

def get_leaderboard():
# Get the top 10 players from the leaderboard
leaderboard = r.zrevrange('leaderboard', 0, 9, withscores=True)

for player, score in leaderboard:
print(f"Player: {player.decode('utf-8')}, Score: {score}")


Это лишь несколько примеров того, как Redis можно использовать в Python. Redis предоставляет множество других мощных функций и структур данных, которые можно использовать в различных приложениях.

Github

@data_analysis_ml
👍183🔥1
Прощайте, циклы в Python: знакомство с возможностями векторизации

В этой статье я хочу поделиться с вами захватывающей техникой, которая произвела революцию в моём подходе к анализу и визуализации данных в Python.

Она называется векторизацией и позволяет вам попрощаться с циклами и использовать более эффективный и элегантный способ программирования.

Читать

@data_analysis_ml
👍23🔥21
8 инструментов распознавания речи:

1. DeepSpeech на базе Baidu DeepSpeech, позволяющий расшифровать аудиофайлы с использованием предварительно обученных моделей или обучить пользовательский набор данных.

2. wav2letter - open-course набор инструментов от Facebook AI Research, объединенный с библиотекой Flashlight.

3. OpenSeq2Seq- исследовательский проект от NVIDIA по проблемам преобразования последовательностей в последовательности.

4. TensorFlowASR – это бесплатный набор инструментов с открытым исходным кодом от Tensorflow, который включает в себя обученные модели на основе рекуррентных нейронных сетей с CTC.

5. SpeechRecognition - проект, предоставляющий доступ к нескольким моделям автоматического распознавания речи, включая оболочки для речевых API от Google, Microsoft Azure и IBM.

6. Yandex SpeechKit от Яндекса - программный продукт, который полностью разработан и настроен.

7. SmartSpeech от СберDevices - проект предоставляет возможность использовать несколько моделей для автоматического распознавания речи, включая оболочки для речевых API от Google, Microsoft Azure и IBM.

8. Сервис Google Документы позволяет переводить устную речь в записанный текст. Это встроенная функция с поддержкой разных языков. Для активации голосового ввода перейдите в раздел «Инструменты» и кликните на «Голосовой ввод»

@data_analysis_ml
👍6🔥51
💬 Полезные NLP инструменты: Библиотека fastText

fastText - это библиотека для анализа и классификации текста.

Вот как загрузить и использовать предварительно обученные модели:

import fasttext
from huggingface_hub import hf_hub_download

model_path = hf_hub_download(repo_id="facebook/fasttext-en-vectors", filename="model.bin")
model = fasttext.load_model(model_path)
model.words

['the', 'of', 'and', 'to', 'in', 'a', 'that', 'is', ...]

len(model.words)

145940

model['bread']

array([ 4.89417791e-01, 1.60882145e-01, -2.25947708e-01, -2.94273376e-01,
-1.04577184e-01, 1.17962055e-01, 1.34821936e-01, -2.41778508e-01, ...])


В следующем примеры мы будем использовать метод ближайших соседей:

import fasttext
from huggingface_hub import hf_hub_download

model_path = hf_hub_download(repo_id="facebook/fasttext-en-nearest-neighbors", filename="model.bin")
model = fasttext.load_model(model_path)
model.get_nearest_neighbors("bread", k=5)

[(0.5641006231307983, 'butter'),
(0.48875734210014343, 'loaf'),
(0.4491206705570221, 'eat'),
(0.42444291710853577, 'food'),
(0.4229326844215393, 'cheese')]


Вот как использовать эту модель для определения языка из введенного текста:

import fasttext
from huggingface_hub import hf_hub_download

model_path = hf_hub_download(repo_id="facebook/fasttext-language-identification", filename="model.bin")
model = fasttext.load_model(model_path)
model.predict("Hello, world!")

(('__label__eng_Latn',), array([0.81148803]))

model.predict("Hello, world!", k=5)

(('__label__eng_Latn', '__label__vie_Latn', '__label__nld_Latn', '__label__pol_Latn', '__label__deu_Latn'),
array([0.61224753, 0.21323682, 0.09696738, 0.01359863, 0.01319415]))


Github

@data_analysis_ml
👍83🥰1
6 досадных ошибок Sklearn, которые вы можете совершать, и как их избежать

Часто Sklearn выдаёт большие красные сообщения об ошибках и предупреждения, когда вы делаете что-то не так. Эти сообщения предполагают, что в вашем коде содержатся ошибки, которые мешают магии Sklearn делать свою работу.

Но что произойдёт, если вы не получите никаких ошибок или предупреждений? Означает ли это, что вы делаете всё правильно? Не обязательно.

Научитесь избегать шести самых серьёзных ошибок, связанных с теорией машинного обучения, которые новички часто совершают в Sklearn.

Читать

@data_analysis_ml
👍81🔥1
💫 StarCoder

StarCoder - это современный метод коррекции и генерации кода с использованием нейронных сетей, созданный исследовательским сообществом The BigCode, MIT, Университета Пенсильвании и Колумбийского университета. StarCoder улучшает показатели качества и производительности по сравнению с предыдущими моделями, такими как PaLM, LaMDA, LLaMA и OpenAI code-cushman-001.

обученная на исходном коде и текстах на естественном языке. Ее обучающие данные включают более 80 различных языков программирования, а также текст, извлеченный из вопросов и коммитов GitHub.

Github
Модель
Demo

@data_analysis_ml
👍112🔥2
🔍 Data Validation

Подборка полезных инструментов для проверки данных в ваших проектах. Если вы еще не используете их в своих ds проектах, рекомендуем обратить на них внимание.

pydantic - Проверка данных с помощью подсказок типов Python.

jsonschema - Реализация спецификации JSON Schema для Python.

validators - удобная библиотека Проверки данных.

param - Param: Сделает ваш код Python более понятным и надежным.

voluptuous - Валидаторы - это простые вызываемые функции: С ними вам не нужно создавать нагромождение классов, просто импортируйет 1 функцию из этой замечательной библиотеки.

strictyaml - Безопасный парсер и валидатор YAML.

dirty-equals - dirty-equals - это библиотека python, которая (неправильно) использует метод eq, чтобы сделать ваш код python более декларативным и, следовательно, более легким для понимания и редактирования.

typical - Быстрая, простая и корректная проверка данных с использованием Python 3.

valideer - Легкая библиотека Python для проверки данных.

@data_analysis_ml
5👍4🔥2
🖥 Тестирование инструментов для обработки данных на Python. Часть 1.

Это будет история о том, как мы придумали и приступили к реализации бенчмарка объективным, упорядоченным и унифицированным способом – через написание универсального инструмента.

В первой части публикации представим теоретическую часть задачи, предпосылки, а также первую попытку реализации универсального инструмента. Основные результаты сравнения опишем в следующей части.

В нашей работе часто приходится сталкиваться с задачами обработки больших данных. Традиционный метод обработки, который мы используем — библиотека Pandas. Она предоставляет приятные вещи (чтения форматов из коробки, фильтрации, агрегации, concat, join merge). Всё это позволяет абстрагироваться от технических трудностей, сразу приступая к самому алгоритмически интересному.

Читать дальше

@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥1
🐼 4 альтернативы Pandas: ускоренное выполнение анализа данных

Pandas — одна из самых популярных библиотек Python. Ее DataFrame интуитивно понятен и оснащен продвинутыми API для выполнения задач по работе с данными. Многие библиотеки Python были интегрированы с Pandas DataFrame, чтобы повысить скорость их принятия.

Однако библиотека Pandas не является эталоном в области обработки больших наборов данных. Она преимущественно используется для анализа данных на одной машине, а не на кластере машин. В этой статье будут представлены результаты оценки производительности более быстрых альтернатив: Polars, DuckDB, Vaex и Modin.

Читать дальше

@data_analysis_ml
👍134🔥3❤‍🔥1
Первый в России ускоренный онлайн-бакалавриат «Фронтенд и мобильная разработка» — от Яндекс Практикума и университета ИТМО.

— Учёба 2,5 года вместо четырёх лет
— Диплом государственного образца по направлению «Прикладная информатика»
— Можно выбрать специализацию: фронтенд, iOS- или Android-разработка
— Удобно совмещать с работой: обучение онлайн, 20-25 часов в неделю
— Преподаватели — действующие разработчики
— Стажировка в крупных IT-компаниях
— Системное развитие хард-и софтскилов

Программы рассчитаны на людей со средним профессиональным или высшим образованием.
Обучение почти в два раза короче, потому что формат позволяет перезачесть часть общих предметов и оставить только профильные.

Поступайте, чтобы стать востребованным разработчиком и подготовиться к роли тимлида.

→ Оставить заявку

Реклама АНО ДПО "Образовательные технологии Яндекса", ИНН:7704282033, erid: LjN8KCpNz
👍1
💫 SQLite для работы с данными

Рассказываю, почему SQLite отлично подойдет вам в повседневной работе. И неважно, разработчик вы, аналитик, тестировщик, админ или продакт-менеджер.

Для затравки несколько известных фактов:

SQLite — самая распространенная СУБД в мире, включена во все популярные ОС.
Работает без сервера.
Для разработчиков — встраивается прямо в приложение.
Для всех остальных — удобная консоль (REPL) одним файлом (sqlite3.exe на Windows, sqlite3 в Linux / macOS).

📌 Читать

@data_analysis_ml
🔥10👍31
toPandas тормозит на больших датасетах? Это типичная боль аналитика

А вот вам исчерпывающая инструкция, как устранить эту проблему. Выгрузка данных через консоль, обход ограничений Arrow, исправление ошибок настройки памяти — обо всем этом рассказывает Александр Ледовский — тимлид команды аналитики и DS. Он строит рекламные аукционы в Авито, так что про большие массивы данных знает как никто другой.

Так что если у вас все падает с ошибками, не мучайтесь: берите инструкцию — и вперед!
👍8
➡️ Методы ускорения кода: Векторизация

Это один из методов, который необходимо знать при работе с pandas, а его игнорирование обычно приводит к проваленным собеседованиям и медленному коду.

Задача: необходимо применить некоторую функцию к каждой записи. Очевидный способ, который делают новички — цикл по строкам или конкретному столбцу. Однако это антипатерн в pandas, работающий неприлично медленно на больших датафреймах. Разберем другие способы с примерами.

Например, итерация по строкам с помощью метода .iterrows(). Это самый медленный способ, к тому же не сохраняет типы данных. Другие варианты — использовать .itertuples(), где на каждой итерации строка рассматривается как именованный tupple. Это во много раз быстрее, чем .iterrows(). Еще один аналог — .iteritems().

Любые итерации все равно на порядки медленнее векторизованного подхода, поэтому использовать их стоит только в редких случаях, например когда результат зависит от предыдущих строк.

Другой метод — использование функции .apply(). Она принимает на вход функцию и доп. параметры, и затем применяет ее к каждой строке. Это более предпочтительный способ, работающий в разы быстрее. Также, apply лаконичнее и удобнее, особенно если применять lambda-функции.

Однако, современные процессоры научились оптимизировать подобные задачи с помощью SIMD-инструкций, в которых операции производятся над вектором, а не одним значением (как это происходит когда мы итерируемся по строкам). Чтобы использовать эти инструкции, нужно явно вызвать их в пакете.

Поэтому pandas содержит собственные реализации простых операций (сумма, min/max и тд), выполняющиеся гораздо быстрее итерирования. Такие функции называют векторизированными. Прежде чем использовать apply или iter…, стоит поискать в документации соответствующие векторные функции.

Для строк и дат есть свои методы, например df['col'].str.contains('pat') и df['col'].dt.days.

Ниже сравнение времени работы методов выше для операции добавления столбца-логарифма. Результаты ошеломляющие, векторизация быстрее циклов и iterrows в тысячу раз! Похожее сравнение можно прочитать тут.

import numpy as np
import pandas as pd
import math

df = pd.DataFrame(data={'values':range(1,100_000)})

temp=[]

# -------------------------------------------------
# 1.15 секунды
for idx in range(0, df.shape[0], 1):
temp.append(math.log(df['values'].iloc[idx]))

# 7.18 секунд
for i,row in df.iterrows():
temp.append(math.log(row['values']))

# 156 миллисекунд
for row in df.itertuples():
temp.append(math.log(row.values))

# 84.6 миллисекунды
temp = df['values'].apply(lambda x: math.log(x))

# 3.38 миллисекунды
temp = np.log(df['values'])
# -------------------------------------------------

df['new_values'] = temp


@data_analysis_ml
👍184🔥4
Методы ускорения кода  часть 2 : Параллелизация

Большинство современных компьютеров имеют процессор с более чем одним ядром, т.е. с возможностью делать несколько вычислений одновременно. Более того, часто аналитики и DS работают на сервере (например, c JupyterHub), у которого число ядер может достигать сотен.

Изначально интерпретатор python — однопоточная программа с глобальным локом во время вычисления, а значит в ванильном “pandas” нельзя параллелить задачи. Однако, в стандартной библиотеке python есть несколько модулей, позволяющих работать с многопоточностью, и далее мы разберем их применение.

Первый модуль — multiprocessing. Он обходит глобальный лок, работая не через под-потоки, а через под-процессы. Основной его параметр — это кол-во процессов, на которые будет биться основной. Обычно его выбирают равным кол-ву ядер в процессоре, но я советую брать число на 1 меньше, оставляя одно ядро на накладные расходы и синхронизацию. Далее создается пул воркеров (процессов), на которые будут параллелиться вычисления. Есть несколько вариантов, как разбить по ним датафрейм, но обычно используется .array_split():

import pandas as pd
import multiprocessing as mp

def your_datarame_func(df):
...

n_cores = max(mp.cpu_count() - 1, 1)
p = mp.Pool(n_cores) # Data parallelism Object

def parallelize_dataframe(df, func, n_cores):
df_split = np.array_split(df, n_cores)
df = pd.concat( pool.map(func, df_split) )
pool.close() ; pool.join()
return df

df_results = parallelize_dataframe(df, func=your_datarame_func)


Более высокоуровневый интерфейс предоставляет другой пакет из стандартной библиотеки — concurrent.futures, однако возможностей у него меньше. Он предоставляет 2 аналогичных API для работы с процессами и тредами — ProcessPoolExecutor и ThreadPoolExecutor.

import psutil
import pandas as pd
import numpy as np
from concurrent.futures import ProcessPoolExecutor, as_completed

def your_datarame_func(df):
...

num_procs = max(psutil.cpu_count(logical=True) - 1, 1)

splitted_df = np.array_split(df, num_procs)
df_results = []

with ProcessPoolExecutor(max_workers=num_procs) as executor:
results = [executor.submit(your_datarame_func, df=df) for df in splitted_df]
for result in as_completed(results):
try:
df_results.append(result.result())
except Exception as ex:
print(str(ex))
pass

df_results = pd.concat(df_results)


В concurrent.futures можно получить pid порождаемых процессов (пример). Также, можно использовать сторонние пакеты для параллельных вычислений.

Часть 1

@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥52
🗒 Регулярные выражения для задач NLP в Python. Часть1

Рассморим основные функции Python-модуля re.

Регулярные выражения - это набор символов, который определяет паттерн для поиска в тексте. Например, в задачах NLP можно использовать Python-библиотеку Yargy для поиска именованных сущностей. Но использование выражений может вызвать неоднозначность, так как выражения, содержащие искомый паттерн, также будут найдены.

В Python модуль re используется для работы с регулярными выражениями и содержит 4 основные функции: search, match, findall, finditer и sub.

Первые четыре функции имеют одинаковую сигнатуру и принимают на вход шаблон и выражение, а функция sub дополнительно требует строку замены.

re.search() – находит первое вхождение фрагмента в любом месте и возвращает объект match. Если в строке есть другие фрагменты, соответствующие запросу, re.search их проигнорирует.

import re
expr = 'i love Data Science'
pattern = 'love'
print(re.search(pattern, expr))


<re.Match object; span=(2, 6), match='love'>


Обратите внимание, что функция search находит только первый попавшийся шаблон, дальше она уже не смотрит:

expr = 'I love data science, i love @data_analysis_ml' print( re.search(pattern, expr))

<re.Match object; span=(2, 6), match='love'>

Нельзя забывать, что шаблон представляет собой последовательность символов, а не сами слова.
Например, как можно найти последовательность "love" в составном слове в Python, показано ниже.

expr = 'So many lovers
re.search('love', expr)


Как найти все вхождения при помощи findall и finditer.

В отличие от функции search, две другие функции findall и finditer найдут все вхождения. Разница между findall и finditer заключается в том, что первый возвращает список (list), а второй возвращает итератор (iterator), который мы обсудили ранее.

Возвращаясь к предыдущему примеру, регулярное выражение для обнаружения всех вхождений в Python будет иметь следующий вид:

expr = 'I love data science, I love @data_analysis_ml'

re.findall('love', expr)
['love', 'love']


re.finditer('love', expr)
<callable_iterator object at 0x7efd1caf6b60>

Проверяем начало строки с помощью функции match.
Функция match проверяет начало строки на соответствие шаблону.

Пример выше не начинается с "love", поэтому эта функция вернет значение None. С другой стороны, если выражение начинается с шаблона, функция match вернет объект Match. Рассмотрите следующие регулярные выражения в Python:

expr = 'i love Data Science'
re.match('Data', expr)
None


re.match('love', expr) is None
True


Исключаем шаблон из строки с sub

Ещё одной полезной функцией Python-модуля re является sub. Она необходима, когда один шаблон нужно заменить на другой и пригодится для подготовки текстов перед применением NLP-методов в Python, например, для избавления от всех цифр, знаков препинания и символов. К сигнатуре этой функции добавляется аргумент repl — на какую строку заменяем. Ниже регулярные выражения в Python это демонстрируют. Обратите внимание, что sub возвращает строку, поэтому их стоит переприсвоить.

expr = 'i love Data Science'
pattern = 'love'
repl = 'hate'
re.sub(pattern, repl, expr)
'i hate Data Science'

Также отметим, что функция заменяет все вхождения. Если требуется ограничить это число, то оно указывается в аргументе count.

re.sub(pattern, repl, expr, count=1)

шпаргалка по регулярным выражениям

@data_analysis_ml
👍13🔥42
🤖12 сервисов искусственного интеллекта, для написания кода.

Mutable AI
Альтернатива Copilot, которая предлагает бесплатную версию со сокращенным функционалом, а стоимость ее платной подписки варьируется от $10 до $25 в месяц. Эта альтернатива также предлагает следующие возможности: автодополнение кода, управление с помощью промптов, рефакторинг кода и автоматическую документацию.

SpellBox
Это AI-помощник для программистов, который можно установить как настольное приложение (для Windows и macOS), так и как плагин для VS Code. Он способен генерировать код в ответ на запросы, объяснять принципы работы программы и сохранять фрагменты кода в закладках.

StarCoder
Это AI-ассистент, который может создавать код на 80 языках, обученный на данных из GitHub. Эта модель похожа на GitHub Copilot, но с открытым исходным кодом и, по мнению разработчиков, она лучше других моделей.

Blackbox AI
BlackboxAI поддерживает более 20 языков программирования, включая Python, Java, C, C++, C#, JavaScript, SQL, PHP, Go, TypeScript, Kotlin, MATLAB, R, Swift, Rust, Ruby, Dart и Scala.

Ghostwriter Chat
Разработчики Replit создали не имеющую себе равных онлайн-IDE, которая основана на искусственном интеллекте. Эта инновационная система способна написать код в соответствии с контекстом проекта и не только дополняет код, написанный программистом, но и помогает отслеживать ошибки.

CodeSquire.ai
Это ИИ-ассистент, который помогает дата-сайентистам, инженерам и аналитикам. Он способен генерировать код в ответ на вопросы, создавать функции различной сложности, преобразовывать вводимые команды в SQL-запросы и детально объяснять, как работает каждый блок кода.

Toolbuilder
Toolbuilder позволяет быстро создавать ИИ-приложения и чат-боты, которые хранятся и запускаются на сайте. Вы можете поделиться ссылками на приложения с друзьями, а для выбора подходящего инструмента есть каталог готовых приложений, например, инструменты для поиска персонализированных подарков, анализа SEO показателей, рекомендации коктейлей и описания товаров. Еще один популярный инструмент - генератор постов для блога. Также вы можете использовать Toolbuilder для описания сюжета фильма с помощью эмодзи и иконок.

Safurai
Это бесплатный инструмент на основе искусственного интеллекта, который можно использовать как плагин для VS Code. Для того чтобы воспользоваться ее возможностями, достаточно выделить фрагмент кода: Safurai объяснит, как он работает, предложит советы по оптимизации и рефакторингу, напишет необходимые тесты и документацию. Будучи обучаемым на коде проекта, он запомнит все заданные вопросы.

Text2SQL
Text2SQL - данный искусственный интеллект создает запросы SQL, регулярные выражения, дизайны баз данных и формулы для Excel и Google Sheets. Присутствует бесплатный тариф, в то время как цены платной подписки варьируются от $2.49 до $4.99 в месяц.

Code Snippets AI
Приложение, использующее технологию GPT-4 для генерации кода. По вопросу о необходимости данного инструмента, разработчики отвечают, что это более экономичный вариант по сравнению с оригинальным ChatGPT Plus, подписка на который стоит $24 в месяц, в то время как подписка на Code Snippets AI обойдется в $10 в месяц.

CodiumAI
CodiumAI - программа для тестирования, использующая TestGPT-1 и GPT-3.5 & 4 для интеллектуального создания тестов и обработки кода, выявления ошибок и багов. В настоящее время этот инструмент работает с кодом Python, JavaScript и TypeScript. Благодаря подключению к VS Code и другим IDE от JetBrains, использование CodiumAI бесплатно.

Metabob
Metabob исправляет ошибки и выявляет уязвимости в коде, а также интегрируется с такими платформами, как VS Code, GitHub, BitBucket и GitLab. Эта программа берет под контроль все самые популярные языки программирования, включая Python, Javascript, Typescript, C++, С и Java, и предоставляет своевременные рекомендации по улучшению кода. B процессе работы Metabob автоматически производит рефакторинг кода разработчиков и искусственный разум.

@data_analysis_ml
👍144🔥4
Python со скоростью света

Задача: заполнить список из n целых чисел.

def populate_python(size:int)->list:
b = []
for i in range(size):
b.append(i)
return b


Запуск функции с size = 10 000 000 занял в среднем 765 мс на моей машине.

Ускорим этот процесс!

Numpy
import numpy as np
def populate_numpy(size:int)->np.ndarray:
b = np.empty((size),dtype=np.int64)
for i in range(size):
b[i] = i
return b


Запуск функции с тем же количеством элементов занял 964 мс.

Numba
from numba import njit, prange
@njit
def populate_numba(size:int)->np.ndarray:
b = np.empty((size),dtype=np.int64)
for i in prange(size):
b[i] = i
return b


Как мы видим, функция почти такая же. Просто добавил декоратор и prange (функция диапазона в numba, которая работает параллельно). На этот раз время вычислений составило всего 16 мс! Почти в 50 раз быстрее, чем на голом Python. Это впечатляющий результат.

Julia
Julia – еще один язык, который набирает обороты. Его цель – предложить почти такую же гибкость и понятный синтаксис, как у Python, но с высокой скоростью компиляции кода.

function populate_array(size::Int)::AbstractVector{Int64}
b = Vector{Int64}(undef,size)
Threads.@threads for i=1:size
b[i] = i
end
return b
end


В Julia нет проблем с GIL, поэтому потоки могут работать параллельно. Это заняло всего 12 мс.

Mojo
Mojo – это новый язык, находящийся в стадии активной разработки.

from Pointer import DTypePointer
from Random import rand, random_ui64
from DType import DType
from Range import range
from Functional import parallelize
import SIMD

struct Vect:
var data: DTypePointer[DType.uint64]
var rows: Int

fn __init__(inout self, rows: Int):
self.data = DTypePointer[DType.uint64].alloc(rows)
self.rows = rows

fn __del__(owned self):
self.data.free()

@always_inline
fn len(self)->UInt64:
return self.rows

fn zero(inout self):
memset_zero(self.data, self.rows)

@always_inline
fn __getitem__(self, x: Int) -> UInt64:
return self.data.load(x)


@always_inline
fn __setitem__(self, x: Int, val: UInt64):
return self.data.store( x, val)

fn populate_mojo(b:Vect):
@parameter
fn process_row(i:Int):
b[i] = i
parallelize[process_row](b.rows)


Приведенная выше функция отработала всего за 7 мс, в 110 раз быстрее, чем Python, и намного быстрее, чем Julia. Это Python со скоростью света!

📌 Почитать про Mojo

@data_analysis_ml
👍14🔥54👎2
🖥 30 SQL-запросов, объяснённых через их эквиваленты Pandas

В мире, где с 1974 года доминирует SQL, в 2008 году появился Pandas, предлагающий привлекательные функции, такие как встроенная визуализация и гибкая обработка данных. Он быстро стал популярным инструментом для исследования данных, затмив собой SQL.

Но не обманывайте себя, SQL по-прежнему держит свои позиции. Это второй по востребованности и третий по скорости роста язык для Data science (см. здесь ). Таким образом, в то время как Pandas привлекает всеобщее внимание, SQL остаётся жизненно важным навыком для любого специалиста по данным.

Давайте узнаем, как легко выучить SQL, если вы уже знаете Pandas.

Читать

@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥21🤣1