Data cleansing and enrichment via Dadata API.
Project description
Dadata API Client
Data cleansing, enrichment and suggestions via Dadata API
Thin Python wrapper over Dadata API.
Installation
pip install dadata
Usage
Create API client instance:
>>> from dadata import Dadata
>>> token = "Replace with Dadata API key"
>>> secret = "Replace with Dadata secret key"
>>> dadata = Dadata(token, secret)
Then call API methods as specified below.
Postal Address
>>> dadata.clean(name="address", source="мск сухонская 11 89")
{
'source': 'мск сухонская 11 89',
'result': 'г Москва, ул Сухонская, д 11, кв 89',
'postal_code': '127642',
'country': 'Россия',
'region': 'Москва',
'city_area': 'Северо-восточный',
'city_district': 'Северное Медведково',
'street': 'Сухонская',
'house': '11',
'flat': '89',
'flat_area': '34.6',
'flat_price': '6854710',
'fias_id': '5ee84ac0-eb9a-4b42-b814-2f5f7c27c255',
'timezone': 'UTC+3',
'geo_lat': '55.8782557',
'geo_lon': '37.65372',
'qc_geo': 0,
'qc': 0,
'metro': [ ... ],
...
}
Geocode address (same API method as cleanse):
>>> dadata.clean(name="address", source="москва сухонская 11")
{
'source': 'мск сухонская 11 89',
'result': 'г Москва, ул Сухонская, д 11, кв 89',
...
'geo_lat': '55.8782557',
'geo_lon': '37.65372',
'beltway_hit': 'IN_MKAD',
'beltway_distance': None,
'qc_geo': 0,
...
}
>>> dadata.geolocate(name="address", lat=55.878, lon=37.653)
[
{ 'value': 'г Москва, ул Сухонская, д 11', ... },
{ 'value': 'г Москва, ул Сухонская, д 11А', ... },
{ 'value': 'г Москва, ул Сухонская, д 13', ... },
...
]
>>> dadata.iplocate("46.226.227.20")
{
'value': 'г Краснодар',
'unrestricted_value': '350000, Краснодарский край, г Краснодар',
'data': { ... }
}
Autocomplete (suggest) address:
>>> dadata.suggest(name="address", query="самара метал")
[
{ 'value': 'г Самара, пр-кт Металлургов', ... },
{ 'value': 'г Самара, ул Металлистов', ... },
{ 'value': 'г Самара, поселок Зубчаниновка, ул Металлургическая', ... },
...
]
>>> dadata.suggest(name="address", query="samara metal", language="en")
[
{ 'value': 'Russia, gorod Samara, prospekt Metallurgov', ... },
{ 'value': 'Russia, gorod Samara, ulitsa Metallistov', ... },
{ 'value': 'Russia, gorod Samara, poselok Zubchaninovka, ulitsa Metallurgicheskaya', ... },
...
]
>>> locations = [{ "kladr_id": "6500000100000" }]
>>> dadata.suggest(name="address", query="Ватутина", locations=locations)
[
{'value': 'г Южно-Сахалинск, ул Ватутина' ... }
]
>>> geo = [{ "lat": 59.244634, "lon": 39.913355, "radius_meters": 200 }]
>>> dadata.suggest(name="address", query="сухонская", locations_geo=geo)
[
{'value': 'г Вологда, ул Сухонская' ... }
]
>>> boost = [{ "kladr_id": "6300000700000" }]
>>> dadata.suggest(name="address", query="авто", locations_boost=boost)
[
{'value': 'Самарская обл, г Тольятти, Автозаводское шоссе' ... },
{'value': 'Самарская обл, г Тольятти, ул Автомобилистов' ... },
{'value': 'Самарская обл, г Тольятти, ул Автостроителей' ... },
...
]
>>> dadata.find_by_id(name="address", query="9120b43f-2fae-4838-a144-85e43c2bfb29")
[
{ 'value': 'г Москва, ул Снежная', ... }
]
>>> dadata.find_by_id(name="address", query="77000000000268400")
>>> dadata.suggest(name="postal_unit", query="дежнева 2а")
[
{
'value': '127642',
'unrestricted_value': 'г Москва, проезд Дежнёва, д 2А',
'data': { ... }
}
]
>>> dadata.find_by_id(name="postal_unit", query="127642")
[
{
'value': '127642',
'unrestricted_value': 'г Москва, проезд Дежнёва, д 2А',
'data': { ... }
}
]
>>> dadata.geolocate(name="postal_unit", lat=55.878, lon=37.653, radius_meters=1000)
[
{
'value': '127642',
'unrestricted_value': 'г Москва, проезд Дежнёва, д 2А',
'data': { ... }
}
]
Get City ID for delivery services:
>>> dadata.find_by_id(name="delivery", query="3100400100000")
[
{
'value': '3100400100000',
'unrestricted_value': 'fe7eea4a-875a-4235-aa61-81c2a37a0440',
'data': {
...
'boxberry_id': '01929',
'cdek_id': '344',
'dpd_id': '196006461'
}
}
]
Get address strictly according to FIAS:
>>> dadata.find_by_id(name="fias", query="9120b43f-2fae-4838-a144-85e43c2bfb29")
[
{ 'value': 'г Москва, ул Снежная', ... }
]
>>> dadata.suggest(name="country", query="та")
[
{ 'value': 'Таджикистан', ... },
{ 'value': 'Таиланд', ... },
{ 'value': 'Тайвань', ... },
...
]
Company or individual enterpreneur
>>> dadata.find_by_id(name="party", query="7707083893")
[
{
'value': 'ПАО СБЕРБАНК',
'unrestricted_value': 'ПАО СБЕРБАНК',
'data': {
'inn': '7707083893',
'kpp': '773601001',
...
}
},
...
]
>>> dadata.find_by_id(name="party", query="7707083893", kpp="540602001")
[
{
'value': 'СИБИРСКИЙ БАНК ПАО СБЕРБАНК',
'unrestricted_value': 'СИБИРСКИЙ БАНК ПАО СБЕРБАНК',
'data': {
'inn': '7707083893',
'kpp': '540602001',
...
}
}
]
>>> dadata.suggest(name="party", query="сбер")
[
{ 'value': 'ПАО СБЕРБАНК', ... },
{ 'value': 'АО "СБЕРБРОКЕР"', ... },
{ 'value': 'АО "СБЕРИНВЕСТКАПИТАЛ"', ... },
...
]
>>> dadata.find_affiliated("7736207543")
[
{ 'value': 'ООО "ДЗЕН.ПЛАТФОРМА"', ... },
{ 'value': 'ООО "ЕДАДИЛ"', ... },
{ 'value': 'ООО "ЗНАНИЕ"', ... },
...
]
>>> dadata.find_affiliated("773006366201", scope=["MANAGERS"])
[
{ 'value': 'ООО "ЯНДЕКС"', ... },
{ 'value': 'МФ "ФОИ"', ... },
{ 'value': 'АНО ДПО "ШАД"', ... },
]
Bank
Find bank by BIC, SWIFT or INN:
>>> dadata.find_by_id(name="bank", query="044525225")
[
{
'value': 'ПАО Сбербанк',
'unrestricted_value': 'ПАО Сбербанк',
'data': {
'bic': '044525225',
'swift': 'SABRRUMM',
'inn': '7707083893',
...
}
}
]
>>> dadata.find_by_id(name="bank", query="SABRRUMM")
>>> dadata.find_by_id(name="bank", query="7728168971")
>>> dadata.find_by_id(name="bank", query="7728168971", kpp="667102002")
>>> dadata.find_by_id(name="bank", query="1481")
>>> dadata.suggest(name="bank", query="ти")
[
{ 'value': 'АО «Тимер Банк»', ... },
{ 'value': 'АО «Тинькофф Банк»', ... },
{ 'value': '«Азиатско-Тихоокеанский Банк» (ПАО)', ... },
...
]
Personal name
>>> dadata.clean(name="name", source="Срегей владимерович иванов")
{
'source': 'Срегей владимерович иванов',
'result': 'Иванов Сергей Владимирович',
...
'surname': 'Иванов',
'name': 'Сергей',
'patronymic': 'Владимирович',
'gender': 'М',
'qc': 1
}
>>> dadata.suggest(name="fio", query="викт")
[
{ 'value': 'Виктор', ... },
{ 'value': 'Виктория', ... },
{ 'value': 'Викторова', ... },
...
]
>>> dadata.suggest(name="fio", query="викт", parts=["NAME"], gender="FEMALE")
[
{ 'value': 'Виктория', ... },
{ 'value': 'Викторина', ... }
]
Phone
>>> dadata.clean(name="phone", source="9168-233-454")
{
'source': '9168-233-454',
'type': 'Мобильный',
'phone': '+7 916 823-34-54',
'provider': 'ПАО "Мобильные ТелеСистемы"',
'country': 'Россия',
'region': 'Москва и Московская область',
'timezone': 'UTC+3',
'qc': 0,
...
}
Passport
>>> dadata.clean(name="passport", source="4509 235857")
{
'source': '4509 235857',
'series': '45 09',
'number': '235857',
'qc': 0
}
>>> dadata.suggest(name="fms_unit", query="772 053")
[
{ 'value': 'ОВД ЗЮЗИНО Г. МОСКВЫ', ... },
{ 'value': 'ОВД РАЙОНА ЗЮЗИНО УВД ЮГО-ЗАО Г. МОСКВЫ', ... },
{ 'value': 'ПАСПОРТНО-ВИЗОВЫМ ОТДЕЛЕНИЕМ ОВД РАЙОНА ЗЮЗИНО Г. МОСКВЫ', ... },
...
]
>>> dadata.clean(name="email", source="serega@yandex/ru")
{
'source': 'serega@yandex/ru',
'email': 'serega@yandex.ru',
'local': 'serega',
'domain': 'yandex.ru',
'type': 'PERSONAL',
'qc': 4
}
>>> dadata.suggest(name="email", query="maria@")
[
{ 'value': 'maria@mail.ru', ... },
{ 'value': 'maria@gmail.com', ... },
{ 'value': 'maria@yandex.ru', ... },
...
]
Other datasets
>>> dadata.find_by_id(name="fns_unit", query="5257")
[
{
'value': 'Инспекция ФНС России по Канавинскому району г.Нижнего Новгорода',
'unrestricted_value': 'Инспекция ФНС России по Канавинскому району г.Нижнего Новгорода',
'data': {
'code': '5257'
'oktmo': '22701000',
'inn': '5257046101',
'kpp': '525701001',
...
}
}
]
>>> dadata.suggest(name="region_court", query="таганско")
[
{ 'value': 'Судебный участок № 371 Таганского судебного района г. Москвы', ... },
{ 'value': 'Судебный участок № 372 Таганского судебного района г. Москвы', ... },
{ 'value': 'Судебный участок № 373 Таганского судебного района г. Москвы', ... },
...
]
>>> dadata.suggest(name="metro", query="алек")
[
{ 'value': 'Александровский сад', ... },
{ 'value': 'Алексеевская', ... },
{ 'value': 'Площадь Александра Невского 1', ... },
...
]
>>> filters = [{ "city": "Санкт-Петербург" }]
>>> dadata.suggest(name="metro", query="алек", filters=filters)
[
{ 'value': 'Площадь Александра Невского 1', ... },
{ 'value': 'Площадь Александра Невского 2', ... }
]
>>> dadata.suggest(name="car_brand", query="фо")
[
{ 'value': 'Volkswagen', ... },
{ 'value': 'Ford', ... },
{ 'value': 'Foton', ... }
]
>>> dadata.suggest(name="currency", query="руб")
[
{ 'value': 'Белорусский рубль', ... },
{ 'value': 'Российский рубль', ... }
]
>>> dadata.suggest(name="okved2", query="космических")
[
{ 'value': 'Производство космических аппаратов (в том числе спутников), ракет-носителей', ... },
{ 'value': 'Производство автоматических космических аппаратов', ... },
{ 'value': 'Деятельность космических лабораторий', ... },
...
]
>>> dadata.suggest(name="okpd2", query="калоши")
[
{ 'value': 'Услуги по обрезинованию валенок (рыбацкие калоши)', ... }
]
Development setup
$ python3 -m venv env
$ . env/bin/activate
$ make deps
$ tox
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Make sure to add or update tests as appropriate.
Use Black for code formatting and Conventional Commits for commit messages.
Changelog
License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
dadata-0.3.0.tar.gz
(10.7 kB
view hashes)
Built Distribution
dadata-0.3.0-py3-none-any.whl
(7.7 kB
view hashes)