Към съдържанието

Примерни данни ​

Примерите на тези страници и задачите в Homework repository използват един и същ малък, измислен кредитен портфейл. Нищо в него не идва от истинска банка: клиентите, кредитите и всички стойности са измислени. Типична е само формата: таблица с клиенти, таблица с кредити, която сочи към клиентите, и номенклатура (рейтинговата скала).

ФайлРедовеКакво е
150по един ред за всеки клиент
400по един ред за всеки кредит; client_id сочи към clients.csv
10рейтинговата скала: по един ред за всеки рейтингов клас, с неговия PD интервал

От занятие 7 нататък - още файлове от същия измислен портфейл, нарочно с проблемите на истинските данни: разхвърлян текст, няколко формата, лоши редове, история във времето.

ФайлРедовеКакво еЗанятия
150клиентите с текстовите им полета, както са ги въвели хората7, 8
231свободни коментари на кредитни служители за кредитите8
280плащанията през септември 2026, с няколко лоши реда9
-настройките на месечен отчет9
3 листадневни валутни курсове, по един лист на месец9, 14, 16
7регионите на български и английски - записани в cp12517, 9
1800рейтингът на всеки клиент към края на 12 месеца12, 13, 16
3992непогасената сума на всеки кредит към края на 12 месеца16
406loans.csv като локален експорт: ;, десетична запетая, dd.mm.yyyy, липсващи стойности, повторения14, 15
4 таблицибаза данни SQLite: clients, loans, rating_scale, ratings_history13, 16

Същите файлове са в папката data/ на Homework repository. На тези страници те са в data/ на всеки пример, който може да се пусне.

Разгледайте файловете

Щракнете върху името на файл в таблиците, за да видите какво има в него. Файл CSV, лист от файла на Excel или таблица от базата данни се показва като таблица, която може да филтрирате; редовете с грешен брой полета и празните редове са отбелязани. Текст показва файл CSV или JSON такъв, какъвто е - с разделителя, кавичките и интервалите му, а SQL - таблиците на базата данни. Изтегли записва файла. Прегледът сам открива кодировката на regions_bg.csv (cp1251); Python не я открива - вижте описанието на файла по-долу.

clients.csv ​

КолонаПримерЗначение
client_idC0002идентификаторът на клиента
segmentsmeretail, sme или corporate
regionRuseрегионът на клиента
industryMкод на икономическата дейност (буква, като секциите на NACE / КИД); празен за клиентите на дребно
rating5вътрешният рейтинг, от 1 (най-добър) до 10 (неизпълнение) - вижте rating_scale.csv
client_since2014-06-08началото на отношенията с клиента (дата във формат ISO)
python
import pandas as pd

clients = pd.read_csv("data/clients.csv")
clients.head()
Променете кода и го изпълнете отново

loans.csv ​

КолонаПримерЗначение
loan_idL000001идентификаторът на кредита
client_idC0080клиентът (вижте clients.csv)
productinvestmentmortgage, consumer, credit_card, overdraft, working_capital, investment, project_finance
currencyEUREUR или USD
start_date, maturity_date2026-01-22дати във формат ISO
amount1156900.00първоначалната сума
outstanding1044231.30сумата, която остава за плащане към отчетната дата (30.09.2026)
interest_rate8.83в проценти годишно
days_past_due0дни, с които плащанията закъсняват
stage11, 2 или 3 - stage 3 означава повече от 90 дни просрочие или рейтинг 10
python
import pandas as pd

loans = pd.read_csv("data/loans.csv")
loans.groupby("product")["outstanding"].sum().round(2)
Променете кода и го изпълнете отново

rating_scale.csv ​

Номенклатура: по един ред за всеки рейтинг, с неговия клас и интервала на вероятността от неизпълнение (PD).

КолонаПримерЗначение
rating4от 1 до 10
gradeBBBбуквеният клас
pd_min, pd_max0.0025, 0.006PD интервалът на класа (0.0025 = 0.25%)
descriptionmoderate risk
python
import csv

with open("data/rating_scale.csv", encoding="utf-8") as f:
    for row in csv.DictReader(f):
        print(row["rating"], row["grade"], row["description"])
Променете кода и го изпълнете отново

Файловете за следващите занятия ​

client_register.csv ​

Същите 150 клиента като в clients.csv, но текстовите полета са такива, каквито са въведени в стара система: client_id в много форми (c0014, C 0009, C-0026, C17), имена с произволни главни и малки букви, с излишни интервали и кавички, правни форми, написани като E.A.D., ЕИК с интервали или с BG отпред, IBAN на групи по четири или с малки букви, e-mail адреси с главни букви или с " at ", градове на латиница или кирилица, с gr. отпред, дати на регистрация в пет формата и оборотът на фирмите в български и английски формат на числата. Колони: client_id, name, eik, iban, email, city, registered, turnover. IBAN-ите използват измислени банкови кодове (DEMO, TEST, XMPL, FAKE), а e-mail адресите - запазените домейни example.*.

loan_comments.csv ​

loan_id, comment_date (ISO), comment: кратки бележки като "Payment of 1 250,00 EUR received on 15.09.2026." или "Disbursement to IBAN BG71 DEMO ... confirmed" - суми, дати, IBAN, ЕИК, e-mail адреси и номера на кредити в свободен текст.

payments_2026-09.csv ​

payment_id, loan_id, pay_date, amount, currency. Повечето редове са наред; някои не са: липсваща сума, 12O.50 (буква O), n/a, дата, която не съществува, непознат кредит, отрицателна сума, едно поле по-малко или повече, празен ред.

report_config.json, fx_rates.xlsx, regions_bg.csv ​

  • report_config.json: датата на отчета, LGD, групите по DPD, сегментите и настройките за изхода на месечен отчет.
  • fx_rates.xlsx: по един лист на месец (2026-07, 2026-08, 2026-09); колони date, USD, GBP, CHF - колко единици от валутата се купуват с едно евро.
  • regions_bg.csv: code, name_bg, name_en - записан в кодировката за кирилица на Windows cp1251, като много стари експорти. Отваряйте го с encoding="cp1251".

ratings_history.csv и balances_monthly.csv ​

Историята към края на 12 месеца, от 31.10.2025 до 30.09.2026; последният месец съвпада с clients.csv и loans.csv. Клиент или кредит се появява едва от месеца, в който е започнал.

  • ratings_history.csv: client_id, month_end, rating.
  • balances_monthly.csv: loan_id, month_end, outstanding, days_past_due.

loans_export.csv ​

400-те кредита като експорт от локална система: разделителят е ;, десетичните числа са със запетая (651927,30), датите са dd.mm.yyyy, имената на колоните имат интервали (Loan ID), файлът започва с BOM ("CSV UTF-8" на Excel). Някои стойности липсват - празни или . като липсваща стойност в SAS - а 6 реда са повторени.

portfolio.db ​

База данни SQLite с четири таблици: clients, loans, rating_scale и ratings_history - същите данни като във файловете CSV, с първични и външни ключове.

python
import sqlite3

con = sqlite3.connect("data/portfolio.db")
for name, sql in con.execute("SELECT name, sql FROM sqlite_master WHERE type = 'table'"):
    print(name)
print(con.execute("SELECT COUNT(*), ROUND(SUM(outstanding), 2) FROM loans").fetchone())
con.close()
Променете кода и го изпълнете отново

Без pandas

Първите лекции четат файловете със стандартната библиотека (open, csv), а pandas идва в занятие 14. И двата начина четат едни и същи файлове.

Създаден за