Давайте вместе попробуем создать основы большой базы данных, с помощью готового dataset. Для поиска нужного нам матерьяла воспользуемся помощью прекрасного ресурса KAGGLE
Kaggle - - платформа созданная для проведение конкурсов по исследованию данных. Организаторы выкладывают Datasets , описывают задачи , метрики по которым будут выявляться победители конкурса , призы и время проведения. Каждый желающий может выставить свою работа по этим данных , красиво описать её , показать свои умения и надеяться на победу.
Мы будем использовать Used Cars Dataset
Также мы можем посмотреть Code других участников соревнования
pgAdmin — это платформа с открытым исходным кодом для администрирования и разработки на PostgreSQL и связанных с ней систем управления базами данных.
pgAdmin будет предложен в установке PostgreSQL, я пользуюсь 14.3. Багов и проблем не боюсь , беру самую новую версиюсразу видно профессионал. Если боитесь устанавливать приложение без ведения за ручку , вам поможет интернет()_(). Уже 1000 раз было рассказывать как это делать и что за чему , так что не буду тратить наше драгоценное.
Python - - высокоуровневый язык программирования. и нам нужна библиотека pandas
Pycharm - - среда разработки(IDE) созданная специально для языка программирования Python.
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))
видим что из-за 26 столбцов, Pycharm не подгружает всё таблицу( в дальнейшем исправим)
# Cведения о датафрейме, выходит общая информация о нём вроде заголовка, количества значений, типов данных столбцов.
print(car.info())
Получаем основные данные из таблицы.
car = pd.read_csv(r'C:\Users\ratmu\PycharmProjects\Cars\vehicles.csv',nrows=100)
# просмотр всей таблици без ограничений колличество знаков , на строку)
print(car.to_csv(None))
Получаем гигантский DF который я не могу передать как картинку , так что переходим сразу обработке этих данных
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 долларов это будет сильно менять среднее значение цены и мешать нашим вычислениям
print(car['price'].value_counts().iloc[:5])
print(car.price.describe())
слева видим что у нас есть 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()
Тут мы смотря на значения Y будем постепенно обрезать наши выбросы , пока они не станут чуть-чуть адекватными( код ниже)
car.drop(car[car.price > 300000].index, inplace = True)
# + убираем все лишнии значения
car.drop(car[car.price == 0].index, inplace = True)
да это всё можно делать с помощью IQR (но это совершенно другая история)
И с помощью value_counts, describe проверяем похоже ли это на правду
car.to_csv('car_info.csv', index=False)
Далее нам нужно, создать базу данных
Выбираем нашу базу данных и открываем запросник
Вводим туда простейший код
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 . Но мы сейчас не про экономию места на диске
Далее нам надо импортировать наши данные в таблицу
просто нажимаем на enter везде кроме, Database(название вашей базы данных) и Пароль пользователя postgres. И у нас начинается подключение
Далее вводим команду
\COPY car FROM 'C:\Users\ratmu\PycharmProjects\Cars\vehicles.csv' DELIMITER ',' CSV HEADER;
и бежим проверять в pgAdmin всё ли сработало
SELECT *
FROM car
Если увидели таблицу значит вы молодец
habr.com
Что такое Kaggle
![b5dfcf43068a8884f2efd766507a4fc4.jpg](https://habrastorage.org/r/w1560/getpro/habr/upload_files/b5d/fcf/430/b5dfcf43068a8884f2efd766507a4fc4.jpg)
Kaggle - - платформа созданная для проведение конкурсов по исследованию данных. Организаторы выкладывают Datasets , описывают задачи , метрики по которым будут выявляться победители конкурса , призы и время проведения. Каждый желающий может выставить свою работа по этим данных , красиво описать её , показать свои умения и надеяться на победу.
Мы будем использовать Used Cars Dataset
Также мы можем посмотреть Code других участников соревнования
- подчерпнуть оттуда интересную информацию
- найти нестандартные подходы к обработке данных
- На примере других работа , научиться чему-то новому
- и даже наткнуться на
боже зачем это тут ?интересную работу по ''Ускорение рабочего процесса Pandas с Modin''
Найти друзейЗаставить других сделать свою работу- Узнать ответ на интересующий тебя вопрос(есть шанс)
Перейдём к делу, Pgadmin4
![1a6e0e33f6633027bb02d68bd596e298.jpg](https://habrastorage.org/r/w1560/getpro/habr/upload_files/1a6/e0e/33f/1a6e0e33f6633027bb02d68bd596e298.jpg)
pgAdmin — это платформа с открытым исходным кодом для администрирования и разработки на PostgreSQL и связанных с ней систем управления базами данных.
pgAdmin будет предложен в установке PostgreSQL, я пользуюсь 14.3. Багов и проблем не боюсь , беру самую новую версию
Перейдём к делу 2, Python
![563cf3a75b8554e5543c0c9a7ebb1cd1.jpg](https://habrastorage.org/r/w1560/getpro/habr/upload_files/563/cf3/a75/563cf3a75b8554e5543c0c9a7ebb1cd1.jpg)
Python - - высокоуровневый язык программирования. и нам нужна библиотека pandas
Перейдём к делу 3, Pycharm
![ef68ef1373919444ad6764dbc0f199ec.jpg](https://habrastorage.org/r/w1560/getpro/habr/upload_files/ef6/8ef/137/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](https://habrastorage.org/r/w1560/getpro/habr/upload_files/f43/107/868/f4310786821d7cb2cc5f7518b6e2491b.jpg)
видим что из-за 26 столбцов, Pycharm не подгружает всё таблицу( в дальнейшем исправим)
# Cведения о датафрейме, выходит общая информация о нём вроде заголовка, количества значений, типов данных столбцов.
print(car.info())
![645d53f213c5d91fba248b7a693d473e.jpg](https://habrastorage.org/r/w1560/getpro/habr/upload_files/645/d53/f21/645d53f213c5d91fba248b7a693d473e.jpg)
Получаем основные данные из таблицы.
- Название всех столбцов
- Количество значений в них
- Типы данных
car = pd.read_csv(r'C:\Users\ratmu\PycharmProjects\Cars\vehicles.csv',nrows=100)
# просмотр всей таблици без ограничений колличество знаков , на строку)
print(car.to_csv(None))
![529a06e4e8e78e1313226ab327bf848f.jpg](https://habrastorage.org/r/w1560/getpro/habr/upload_files/529/a06/e4e/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 с помощью describeprint(car['price'].value_counts().iloc[:5])
print(car.price.describe())
![59c5760fb8cbbf027a11c66c371fe765.jpg](https://habrastorage.org/r/w1560/getpro/habr/upload_files/59c/576/0fb/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](https://habrastorage.org/r/w1560/getpro/habr/upload_files/a0c/162/416/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 файл без заголовка и интекса , для экспорта в pgadmincar.to_csv('car_info.csv', index=False)
Переноcим данные в СУБД
Создаём пустую бд под экспорт
Осталось дело за малым, открываем pgAdmin4(и подключаемся к серверу)![f87f44734aecf567cebc2ca9e6518497.jpg](https://habrastorage.org/r/w1560/getpro/habr/upload_files/f87/f44/734/f87f44734aecf567cebc2ca9e6518497.jpg)
Далее нам нужно, создать базу данных
![a5db3f77b0f01e1dcb1e3f20e12ff848.jpg](https://habrastorage.org/r/w1560/getpro/habr/upload_files/a5d/b3f/77b/a5db3f77b0f01e1dcb1e3f20e12ff848.jpg)
![c68206c702b7e22ecd9b4bc69020a347.jpg](https://habrastorage.org/r/w1560/getpro/habr/upload_files/c68/206/c70/c68206c702b7e22ecd9b4bc69020a347.jpg)
Выбираем нашу базу данных и открываем запросник
![e3dc3c00e8e9ba5361a8001de679e60b.jpg](https://habrastorage.org/r/w1560/getpro/habr/upload_files/e3d/c3c/00e/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](https://habrastorage.org/r/w1560/getpro/habr/upload_files/637/b6f/d53/637b6fd5370f55b2530807d0fa834624.jpg)
просто нажимаем на enter везде кроме, Database(название вашей базы данных) и Пароль пользователя postgres. И у нас начинается подключение
Далее вводим команду
\COPY car FROM 'C:\Users\ratmu\PycharmProjects\Cars\vehicles.csv' DELIMITER ',' CSV HEADER;
и бежим проверять в pgAdmin всё ли сработало
SELECT *
FROM car
Если увидели таблицу значит вы молодец
![d14de08775d39c51df261d0d35436f32.jpg](https://habrastorage.org/r/w1560/getpro/habr/upload_files/d14/de0/877/d14de08775d39c51df261d0d35436f32.jpg)
Конец
![habr.com](https://habrastorage.org/getpro/habr/upload_files/b5d/fcf/430/b5dfcf43068a8884f2efd766507a4fc4.jpg)
Создаём свою БД на PostgreSQL из CSV
Давайте вместе попробуем создать основы большой базы данных, с помощью готового dataset. Для поиска нужного нам материала воспользуемся помощью прекрасного ресурса KAGGLE Что такое Kaggle Kaggle - -...
![habr.com](https://assets.habr.com/habr-web/img/favicons/favicon-16.png)