Создаём свою БД на PostgreSQL из CSV

Kate

Administrator
Команда форума
Давайте вместе попробуем создать основы большой базы данных, с помощью готового dataset. Для поиска нужного нам матерьяла воспользуемся помощью прекрасного ресурса KAGGLE

Что такое Kaggle​

b5dfcf43068a8884f2efd766507a4fc4.jpg

Kaggle - - платформа созданная для проведение конкурсов по исследованию данных. Организаторы выкладывают Datasets , описывают задачи , метрики по которым будут выявляться победители конкурса , призы и время проведения. Каждый желающий может выставить свою работа по этим данных , красиво описать её , показать свои умения и надеяться на победу.

Мы будем использовать Used Cars Dataset

Также мы можем посмотреть Code других участников соревнования

  • подчерпнуть оттуда интересную информацию
  • найти нестандартные подходы к обработке данных
  • На примере других работа , научиться чему-то новому
  • и даже наткнуться на боже зачем это тут ? интересную работу по ''Ускорение рабочего процесса Pandas с Modin''
Можем посмотреть Обсуждения

  • Найти друзей
  • Заставить других сделать свою работу
  • Узнать ответ на интересующий тебя вопрос(есть шанс)

Перейдём к делу, Pgadmin4​

1a6e0e33f6633027bb02d68bd596e298.jpg

pgAdmin — это платформа с открытым исходным кодом для администрирования и разработки на PostgreSQL и связанных с ней систем управления базами данных.

pgAdmin будет предложен в установке PostgreSQL, я пользуюсь 14.3. Багов и проблем не боюсь , беру самую новую версию сразу видно профессионал. Если боитесь устанавливать приложение без ведения за ручку , вам поможет интернет()_(). Уже 1000 раз было рассказывать как это делать и что за чему , так что не буду тратить наше драгоценное.

Перейдём к делу 2, Python​

563cf3a75b8554e5543c0c9a7ebb1cd1.jpg

Python - - высокоуровневый язык программирования. и нам нужна библиотека pandas

Перейдём к делу 3, Pycharm​

ef68ef1373919444ad6764dbc0f199ec.jpg

Pycharm - - среда разработки(IDE) созданная специально для языка программирования Python.

  • Предоставляет средства для анализа кода
  • графический отладчик
  • инструменты для отладки юнит-тестов
  • интуитивно понятный интерфейс
  • очень много полезных функций для продвинутых пользователей

Начнём кодить(0)_(з)​

экспорт данных + получение основной информации​

для начала открываем Pycharm, создаём там новый проект и в терминале инсталлируем библиотеку pаndas Открываем терминал и пишем там pip install pandas, нажимаем enter и ждём установки.

pip install pandas
Далее нам надо открыть для чтения наш файл -

import pandas as pd

# загружаем наш csv
car = pd.read_csv(r'C:\Users\ratmu\PycharmProjects\Cars\vehicles.csv')

# просмотр первыйх 5 строк
print(car.head(5))


f4310786821d7cb2cc5f7518b6e2491b.jpg

видим что из-за 26 столбцов, Pycharm не подгружает всё таблицу( в дальнейшем исправим)

# Cведения о датафрейме, выходит общая информация о нём вроде заголовка, количества значений, типов данных столбцов.
print(car.info())
645d53f213c5d91fba248b7a693d473e.jpg

Получаем основные данные из таблицы.

  • Название всех столбцов
  • Количество значений в них
  • Типы данных
# загружаем нашу csv , смотрим тольна на первые 100 строк ибо долго грузиться полный файл )
car = pd.read_csv(r'C:\Users\ratmu\PycharmProjects\Cars\vehicles.csv',nrows=100)

# просмотр всей таблици без ограничений колличество знаков , на строку)
print(car.to_csv(None))
529a06e4e8e78e1313226ab327bf848f.jpg

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

Очистка данных​

Убирает лишние столбцы​

Нам точно не нужны url ссылки, и пустая строка country , так же нам не надо описание автомобиля на 1000+ символов(description) Так что пишемс простой код

import pandas as pd
# загружаем нашу csv
car = pd.read_csv(r'C:\Users\ratmu\PycharmProjects\Cars\vehicles.csv')

# удлаляем столбци с которыми не будем работать
car.drop(['description', 'county', 'url', 'region_url', 'image_url', 'posting_date'], axis=1, inplace=True)
drop удаления столбцов , Axis: указывает, что столбцы или строки должны быть удалены, inplace = True, он возвращает Data Frame с удаленными столбцами или None

После этого сохраняем наш изменённый df в новый файл , что бы в дальнейшем работать только с нужными данными

# сохраняем обработанный df в csv файл
car.to_csv('car_info.csv')

Убираем выбросы​

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

Нас интересуют выбросы в колонке price, согласитесь если цена на машину будет 5 000 000 000 долларов это будет сильно менять среднее значение цены и мешать нашим вычислениям

Находим выбросы​

Узнаем самые часто встречаемые цены с помощью value_counts И_И узнаем статистику по цене в нашем df с помощью describe

print(car['price'].value_counts().iloc[:5])

print(car.price.describe())
59c5760fb8cbbf027a11c66c371fe765.jpg

слева видим что у нас есть 32к значений = 0, которые стоят обрезать , и множество значений цены = около 3к

справа у нас показатели зашкаливают и выдают огромные цифры. ЧТО ТО ТУТ НЕ ТАК!!!

А теперь сделаем грубую и ужасную профессиональную вырезку. Я называю её "и так сойдёт"(объясняю, мы как бы не готовим данные для отчётов и т.д , а просто убираем самый явный бред)

Импортируем 2 крутые штуки seaborn

pip install seaborn
pip install matplotlib
Теперь в шапку нашего кода добавляем

import matplotlib.pyplot as plt
import seaborn as sns
Строем простецкий графии

plt.figure(figsize=(5,8))
sns.boxplot(y='price', data=car,showfliers=True)
plt.show()
a0c1624160d475dc8a7ed9ed37ad5583.jpg

Тут мы смотря на значения Y будем постепенно обрезать наши выбросы , пока они не станут чуть-чуть адекватными( код ниже)

Убираем выбросы​

# price > 300000 если труе обрезаем ( а эту цифру берём из значение Y с графика выше)
car.drop(car[car.price > 300000].index, inplace = True)
# + убираем все лишнии значения
car.drop(car[car.price == 0].index, inplace = True)
да это всё можно делать с помощью IQR (но это совершенно другая история)

И с помощью value_counts, describe проверяем похоже ли это на правду

Сохраняем то что сделали​

# сохраняем обработанный df в csv файл без заголовка и интекса , для экспорта в pgadmin
car.to_csv('car_info.csv', index=False)

Переноcим данные в СУБД​

Создаём пустую бд под экспорт​

Осталось дело за малым, открываем pgAdmin4(и подключаемся к серверу)

f87f44734aecf567cebc2ca9e6518497.jpg

Далее нам нужно, создать базу данных

a5db3f77b0f01e1dcb1e3f20e12ff848.jpg
c68206c702b7e22ecd9b4bc69020a347.jpg

Выбираем нашу базу данных и открываем запросник

e3dc3c00e8e9ba5361a8001de679e60b.jpg

Вводим туда простейший код

CREATE TABLE car
(
car_id int8,
region text,
price int8,
year float4,
manufacture text,
model text,
condition_car text,
cylinders text,
fuel text,
odometer float4,
tittle_status text,
transmision text,
VIN text,
drive text,
size text,
type text,
paint_color text,
state text,
lat float4,
long float4
)
дааааааа -- можно использовать CHARACTER VARYING , int4 , date . Но мы сейчас не про экономию места на диске

Далее нам надо импортировать наши данные в таблицу

Занимаемся экспортом данных​

Находим и открываем sql Shell (psql) -- терминальный интерфейс для PostgreSQL

637b6fd5370f55b2530807d0fa834624.jpg

просто нажимаем на enter везде кроме, Database(название вашей базы данных) и Пароль пользователя postgres. И у нас начинается подключение

Далее вводим команду

\COPY car FROM 'C:\Users\ratmu\PycharmProjects\Cars\vehicles.csv' DELIMITER ',' CSV HEADER;
и бежим проверять в pgAdmin всё ли сработало

SELECT *
FROM car
Если увидели таблицу значит вы молодец

d14de08775d39c51df261d0d35436f32.jpg

Конец​



 
Сверху