text
Автор: Naeemah Aliya Small
Цей пост є частиною серії, де я документую свої навчання з курсу "Data Engineering Zoomcamp", створеного DataTalksClub. Матеріали курсу можна знайти на GitHub тут: DataTalksClub/data-engineering-zoomcamp: Безкоштовний курс з Data Engineering!
У цьому пості я продовжу свою попередню публікацію на тему вступу до Docker, зосереджуючись на інгестії даних у базу даних Postgres за допомогою Python і Docker.
Налаштування PostgreSQL у Docker
Щоб запустити екземпляр PostgreSQL в Docker, потрібно налаштувати змінні середовища, шляхи до томів та мапінг портів. Нижче наведена приклад команда:
docker run -it \
-e POSTGRES_USER="root" \
-e POSTGRES_PASSWORD="root" \
-e POSTGRES_DB="ny_taxi" \
-v $(pwd)/ny_taxi_postgres_data:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:13
-e
(Змінні середовища): Встановлює ім’я користувача, пароль і назву бази даних для PostgreSQL.-v
(Том): Мапить папку контейнераvar/lib/postgresql/data
на локальний каталог (ny_taxi_postgres_data
). Це забезпечує збереження даних за межами життєвого циклу контейнера. Контейнери за замовчуванням є безстатевими, тому це мапування зберігає ваші дані між запусками контейнера.-p
(Мапінг портів): Мапить порт5432
на вашій локальній машині на порт5432
в контейнері. Це дозволяє підключатись до PostgreSQL черезlocalhost:5432
.
Примітка:
Для Docker на Windows замініть $(pwd)
на відповідний шлях файлу для Windows.
Альтернативно, ви можете використовувати іменований том замість прив'язки:
docker volume create --name dtc_postgres_volume_local -d local
docker run -it \
-e POSTGRES_USER="root" \
-e POSTGRES_PASSWORD="root" \
-e POSTGRES_DB="
-p 5432:5432 \
postgres:13
Тут параметр -d
(драйвер) вказує на драйвер зберігання (local
) для тому.
Коли ми побачимо повідомлення:
LOG: система бази даних готова до прийому з'єднань
, це означає, що наш контейнер PostgreSQL запущений і працює!
Доступ до бази даних за допомогою pgcli
Щоб взаємодіяти з базою даних PostgreSQL, ми будемо використовувати pgcli
, клієнт PostgreSQL на Python. Встановіть його, а потім підключіться за допомогою наступної команди:
pgcli \
-h localhost -p 5432 \
-u root -d ny_taxi
Використовуйте команду \dt
, щоб отримати список доступних таблиць. Оскільки таблиць спочатку немає, це виведе порожній результат.
Знімок екрана pgcli, коли я запускав його в GitHub Codespace
Завантаження даних у PostgreSQL
Тепер давайте завантажимо дані у нашу базу даних PostgreSQL. Ми будемо використовувати дані з NYC Taxi Dataset, надані в курсі.
Завантаження даних
Ви можете завантажити набір даних, використовуючи бібліотеку requests
в Python або інструменти, такі як wget
.
text
Автор: Naeemah Aliya Small
Цей пост є частиною серії, в якій я документую свої досягнення та знання з аналізу даних та лінгвістики. Я працюю з даними співробітників за допомогою потужних інструментів та досліджень, зокрема через техніки текстового аналізу, і хочу поділитися своїми висновками!
Що таке лексикон? Лексикон — це більше, ніж просто збірка слів; це яскравий малюнок словникового запасу, який відображає багатство мови чи конкретної галузі знань. Уявіть це як скарбницю мови, що містить всі слова та фрази, які надають сенс нашим думкам і розмовам.
У лінгвістичних термінах лексикон складається з морфем — найменших одиниць значення в будь-якій мові. Наприклад, англійський лексикон є величезним сховищем, що містить все — від повсякденних слів до складних термінів. У свою чергу, медичний лексикон схожий на спеціалізований інструмент, що містить терміни, які використовуються в охороні здоров’я — такі як "діагноз" і "фармацевтика", необхідні для розуміння цієї галузі. Точно так само юридичний лексикон багатий на специфічні терміни, як-от "юрисдикція" та "прецедент", що є важливими у правозастосуванні.
Зрештою, лексикон може бути схожий на словник, але він також є особистою бібліотекою словникових запасів, що росте та еволюціонує в кожної людини. Тому, незалежно від того, чи ви вивчаєте науку, право чи іншу галузь, лексикон — це ваш ключ до розуміння та вираження нюансів цієї теми.
Дослідження інсайтів: Аналіз даних співробітників для обґрунтованого прийняття рішень. Я поринула у захоплюючий світ опитувань співробітників, використовуючи винятковий набір даних від IPUMS Higher Ed, який я знайшла під час свого дослідження. Цей аналіз дозволив мені дослідити різні аспекти робочого досвіду співробітників, зокрема рівень їх задоволеності.
Я використовувала техніку Term Frequency-Inverse Document Frequency (TF-IDF), щоб виявити їх інтереси, що показало найбільш значущі слова у їх відгуках. Це дослідження висвітлило ключові терміни, які справді резонують з робочим середовищем. Крім того, я використовувала Word2Vec, щоб знайти більш релевантні слова, покращуючи дані для подальшого дослідження.
Хоча спочатку я розглядала можливість розширення цієї методології для аналізу есе та виявлення ще глибших ключових слів, що відображають справжні пристрасті співробітників, моє дослідження зосередилося на використанні існуючих даних для витягування цінних інсайтів.
Що таке текстовий аналіз? Текстовий аналіз — це цінний процес, який дозволяє виявляти інсайти з написаного тексту, покращуючи наше розуміння складного світу, сформованого текстовими даними.
Існують два основних підходи до текстового аналізу: ручний та обчислювальний. Ручний аналіз покладається на людську інтуїцію, тоді як обчислювальні методи використовують технології, включаючи Natural Language Processing (NLP) та Machine Learning, щоб ефективно обробляти великі обсяги тексту. Однак важливо пам'ятати, що ці технології можуть відображати упередження в їх навчальних даних.
Текстовий аналіз має широкі можливості в різних сферах. У бізнесі компанії аналізують відгуки клієнтів і соціальні мережі для прийняття рішень. У наймі це допомагає виявити упередження в описах вакансій і резюме. Дослідники вивчають літературу та історичні документи для отримання інсайтів, а уряди використовують їх для відстеження громадської думки. Текстовий аналіз також покращує обслуговування в охороні здоров’я, аналізуючи медичні записи та відгуки пацієнтів.
Займаючись текстовим аналізом, ми можемо керувати складною інформацією, перетворювати сирі дані на цінні інсайти, стимулювати інновації та покращувати прийняття рішень.
Примітка: Коли виконуєте текстовий аналіз, завжди пам’ятайте про очищення вашого документа. Я використовую контрольний список, щоб переконатися, що я слідую всім крокам і що дані очищені та готові до аналізу.
Ось мій контрольний список:
I. Основні характеристики для видобутку:
A. Кількість слів
B. Кількість символів
C. Середня довжина слова
D. Кількість стоп-слів
E. Кількість спеціальних символів
F. Кількість чисел
G. Кількість слів з великої літери
II. Основне передоброблення:
A.
text
Перетворення всіх слів на малі літери
B. Видалення пунктуації
C. Видалення стоп-слів
D. Видалення рідкісних слів
E. Виправлення орфографії
F. Токенізація
G. Новий стовпець для стемінгу
H. Новий стовпець для лематизації
III. Розширене оброблення тексту:
A. N-грамми
B. Частота термінів
C. Інверсна частота документів
D. Частота термінів — інверсна частота документів
E. Мішок слів
F. Аналіз настроїв
G. Вбудовування слів
Коли працюєте з текстовими даними, важливо пріоритезувати конкретні завдання, щоб ефективно їх обробляти. Пункти, виділені жирним шрифтом, представляють найбільш критичні дії, які потрібно виконати спочатку. Зосередження уваги на цих ключових завданнях допоможе вам краще керувати та аналізувати ваші текстові дані.
Токенізація — це основний процес обробки природної мови (NLP), який є базою для багатьох подальших завдань. Розбиваючи текст на менші, керовані одиниці, токенізація дозволяє комп'ютерам краще аналізувати та розуміти людську мову. Токенізація є необхідною при використанні TextBlob, тоді як у SpaCy цей процес обробляється автоматично.
Що стосується виправлення орфографії, TextBlob є хорошим варіантом, однак він може бути повільним при обробці середніх та великих наборів даних. Для більш ефективних альтернатив можна використовувати Autocorrect, SymSpellJPy або різноманітні пакети для виправлення орфографії, доступні на PYPI.org. Ці варіанти значно покращують продуктивність ваших потреб.
Лематизація і стемінг — це важливі методи обробки природної мови (NLP), що допомагають аналізувати та спрощувати слова. Лематизація перетворює слово на його базову або словникову форму, враховуючи його частину мови. Цей підхід забезпечує, щоб отримане слово було значущим і контекстуально правильним. У той час як стемінг видаляє суфікси зі слів, що призводить до несловникових форм, які можуть втратити чіткість або значення. Хоча обидва методи мають своє застосування в обробці тексту, лематизація зазвичай вважається більш точною з лінгвістичної точки зору, ніж агресивний і прямолінійний метод стемінгу. Я зазвичай використовую лематизацію в 80% випадків у своїй роботі через її більш тонкий підхід.
Частота термінів — інверсна частота документів (TF-IDF) — це статистичний метод, що використовується для оцінки значущості слова в документі відносно більш широкої колекції текстів. Цей метод допомагає визначити найважливіші та інформативні слова, враховуючи, як часто вони зустрічаються в конкретному документі порівняно з їх присутністю в більшій кількості документів.
N-грамми, Мішок слів, Аналіз настроїв і Вбудовування слів — це цінні методи обробки природної мови (NLP) та аналізу тексту. Ці методи можна застосовувати залежно від конкретних вимог для отримання інсайтів з текстових даних. Наприклад, N-грамми допомагають захоплювати контекст слів у послідовностях, в той час як модель "Мішок слів" допомагає представляти текст без врахування порядку слів. Аналіз настроїв дозволяє оцінювати емоції та думки в тексті, а вбудовування слів забезпечують спосіб представляти слова в безперервному векторному просторі, захоплюючи їх значення в залежності від контексту. Кожна з цих технік відіграє важливу роль у розумінні та інтерпретації мови.
N-грамми — це послідовності з 'n' елементів (слів або символів), що часто аналізуються на основі їх частоти у конкретному текстовому корпусі. Ці моделі грають важливу роль у різних застосуваннях, оцінюючи ймовірність послідовності слів чи символів. Вони особливо корисні для передбачення тексту, покращення систем розпізнавання мови, генерації тексту, який нагадує людське мовлення, покращення релевантності результатів пошуку та аналізу біоінформатичних даних.
Аналіз настроїв стосується процесу ідентифікації та інтерпретації суб'єктивної інформації в тексті.
text
Це включає розуміння думок, настроїв та емоцій автора, що дозволяє глибше зрозуміти, як люди ставляться до певної теми чи досвіду.
Вбудовування слів — це техніка обробки природної мови, у якій слова, що мають схоже значення, представляються як вектори в багатовимірному векторному просторі. Це розташування представляє семантичні та синтаксичні зв'язки між словами, допомагаючи ефективніше захоплювати їхні значення. Завдяки розміщенню споріднених слів поряд у цьому просторі, вбудовування слів дозволяє застосовувати різні методи, такі як підвищення ефективності роботи мовних моделей та розуміння тексту.
Цікаво, що я зробив? Дозвольте провести вас через процес того, як я досяг цього! Мій набір даних, myemployees, містить важливу інформацію про моїх співробітників та їхні пристрасті. Зосереджуючись на myemployees['emp_passions'], ми можемо розкрити інсайти, які допоможуть підвищити залученість та створити більш мотивовану робочу силу. Давайте використаємо цей багатий ресурс інформації!
Лексикон особистості для всіх слів
Ось лексикон особистості для всіх слів ще раз
Я розпочав захоплюючу подорож, використовуючи модель глибокого навчання, основану на архітектурі Long Short-Term Memory (LSTM), щоб глибше зануритися в цікаву взаємозв'язок між посадами та пристрастями співробітників. Моя мета полягала в тому, щоб гармонізувати категорії, знайдені в employeelex['category'], з різноманітними пристрастями, вираженими в myemployees['emp_passions'].
Для досягнення цього я використав багаті дані з employeelex['all_words'], що стали ідеальним посиланням для того, щоб майстерно поєднати посади з особистими інтересами, зазначеними в myemployees['emp_passions']. Цей інноваційний підхід дозволив провести детальний аналіз і виявити зв'язки між ролями та індивідуальними інтересами в організації.
#1. Бібліотеки
import numpy as np
import pandas as pd
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import accuracy_score
#2. Попередня обробка текстових даних
# Оскільки текст вже очищено, перетворюємо текстові дані на числа.
# Створюємо токенізатор: Це допоможе нам перетворити текст на послідовності чисел.
# Навчимо токенізатор на текстах: Це означає, що ми вказуємо токенізатору, щоб він вивчив унікальні слова в нашому тексті.
# Перетворюємо текст на послідовності: Кожне слово замінюється числом.
# Додаємо нулі для вирівнювання послідовностей до однакової довжини, якщо це потрібно.
tokenizer = Tokenizer()
tokenizer.fit_on_texts(employeelex['all_words'])
employeelex_seq = tokenizer.texts_to_sequences(employeelex['all_words'])
employeelex_padded = pad_sequences(employeelex_seq, maxlen=10)
#3. Кодування категорій
# Кодування міток
label_encoder = LabelEncoder()
employeelex['category_encoded'] = label_encoder.fit_transform(employeelex['category'])
#4. Створення моделі LSTM -- Нейронна мережа
# Шар вбудовування: перетворює числа на щільний вектор фіксованого розміру.
# Шар LSTM: Спеціальний тип нейронної мережі, яка може запам'ятовувати послідовності.
# Шар Dense: Останній шар, що дає нам результат (прогнозовану категорію).
model = Sequential()
model.add(Embedding(input_dim=len(tokenizer.word_index) + 1, output_dim=50, input_length=10))
model.add(LSTM(64))
model.add(Dense(len(label_encoder.classes_), activation='softmax'))
text
Скомпілюйте модель
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
#6. Навчання моделі
model.fit(employeelex_padded, employeelex['category_encoded'], epochs=5, batch_size=2, verbose=1)
#7. Попередня обробка нових даних
# Для нових даних (myemployees), потрібно попередньо обробити їх так само, як ми робили раніше:
myemployees_seq = tokenizer.texts_to_sequences(myemployees['emp_passions'])
myemployees_padded = pad_sequences(myemployees_seq, maxlen=10)
#8. Прогнозування категорій
# Навчена модель для прогнозування категорій для нових даних
predicted_categories = model.predict(myemployees_padded)
predicted_labels = label_encoder.inverse_transform(np.argmax(predicted_categories, axis=1))
#9. Додавання прогнозів до DataFrame
myemployees['predicted_category'] = predicted_labels
#10. Обчислення точності
true_labels = myemployees['predicted_category'] # замінити на реальні мітки, якщо вони є
accuracy = accuracy_score(true_labels, predicted_labels)
print(f'Точність: {accuracy}')
Моя точність складає 70%, що підходить для набору даних myemployees['emp_passion'], з огляду на його відносно малий розмір. Цей рівень точності відображає труднощі, що виникають при роботі з обмеженими даними, але все ж надає цінні інсайти щодо пристрастей співробітників в організації.
70% — цифра, яка підходить для набору даних myemployees['emp_passion'], з огляду на його відносно малий розмір. Цей рівень точності відображає труднощі, що виникають при роботі з обмеженими даними, але все ж надає цінні інсайти щодо пристрастей співробітників в організації.
Я провів експеримент машинного навчання, використовуючи просту Рекурентну Нейронну Мережу (RNN), щоб проаналізувати дані з колонки 'emp_passions' мого набору даних. Незважаючи на відносно малий розмір набору даних, який складається з різноманітних слів та фраз, що представляють інтереси співробітників, я досяг точності 66%. Цей результат є обнадійливим, з огляду на обмеження, накладені розміром набору даних, і вказує на те, що модель ефективно захоплює шаблони в даних. Додаткове налаштування та, можливо, доповнення набору даних можуть покращити ефективність у майбутніх ітераціях моделі.
Результати:
Давайте подивимося більше:
Ефективність цієї методології вражає і не обмежується маленькими наборами даних. Вона масштабується разом із збільшенням обсягу даних, що дає більше можливостей для точності та глибини розуміння. Ключове полягає в тому, щоб використовувати цю безліч інформації для виявлення глибоких інсайтів, які можуть призвести до значущих результатів, незалежно від обсягу даних чи розміру організації.
Організації можуть допомогти людям процвітати, справжньо визнаючи та цінуючи унікальні особистості та пристрасті кожного співробітника. Ця методологія створює динамічну синергію між робочими досвідами співробітників та їхніми особистими прагненнями, сприяючи середовищу, яке підвищує задоволеність роботою та суттєво покращує рівень утримання в організації.
У майбутньому стає важливим ідентифікувати конкретні риси особистості, які відповідають вимогам позиції. Такий підхід змінює фокус з формальних кваліфікацій чи попереднього досвіду роботи на особисту відповідність.
text
Це дозволяє потенційним новим працівникам і наявним співробітникам, які розглядають можливість переходу на іншу роль, оцінити, чи відповідає їхня особистість вимогам посади.
Зрозумівши типи особистості, які ідеально відповідають певним ролям, можна допомогти співробітникам досягти успіху в їхніх посадах. Це дає людям змогу розпізнати, коли робота може не бути їх ідеальним варіантом, надаючи їм впевненість шукати інші можливості. Така продумана відповідність сприяє створенню більш гармонійного та продуктивного робочого середовища, що в кінцевому підсумку веде до позитивних результатів як для співробітників, так і для організації. Кожен виграє, коли ми цінуємо унікальні сильні сторони, які кожна людина приносить до колективу!