portfolio
portfolio is this site. It holds one object, erdem, and everything you can read here is an attribute of it.
This page is its documentation, and it is a notebook too. Every example below has already been run. Click into a cell, change it, and press Enter to run it again, or use the empty cell at the end.
Quickstart
Import the object and look at it.
dir(erdem) lists the sections of the site. Each name in the output is a link that runs it.
Methods and attributes
erdem follows the pandas convention. What builds a report is a method and is called with parentheses. What is data is an attribute and is read without them.
| Method | Reports |
|---|---|
erdem.describe() | A short summary and the key facts |
erdem.info() | The CV: education, skills, languages |
| Attribute | Type | Holds |
|---|---|---|
erdem.projects | DataFrame | The projects, one row each |
erdem.experience | Experience | Work experience |
erdem.skills | dict | Languages and technologies |
erdem.contact | dict | Email and profile links |
name, location, seeking, email | str | The basics |
education, languages | dict | Degree and spoken languages |
As in pandas, describe() returns its table and info() prints, so the output of info() has no Out prompt.
An attribute is a Python value: index it, take its length, call string methods on it.
Projects
erdem.projects is a small pandas-style DataFrame: one row per project, indexed by a short name, with the columns title, status, stack and summary.
Select rows the pandas way, with a boolean mask.
| title | status | stack | summary | |
|---|---|---|---|---|
| fbref-scraper | fbref_scraper | Built | Python 3.11, nodriver, BeautifulSoup, pydantic, SQLAlchemy, PostgreSQL | A modular fbref.com football data scraper: 4 page types parsed by 19 scraper modules into 26 typed models with 118 validated fields. |
| kaggle-competitions | Kaggle competitions | Built | Pandas, scikit-learn, XGBoost, LightGBM, CatBoost | Spaceship Titanic (solo): rank 95 of 1,583 (top 6%), 0.810 public accuracy against a roughly 50% majority-class baseline. |
.loc with a row and a column gives one value. With the row alone it opens that project's full write-up; so does clicking a row's name in the table above.
| On | Supported |
|---|---|
| DataFrame | head(n), tail(n), shape, columns, index, info(), len(df), df["column"], df.column, df[mask], loc[row], loc[row, column], iloc[n] |
| Series | value_counts(), unique(), tolist(), == value, != value |
Plain Python
The kernel also evaluates arithmetic, strings, lists and tuples, and the built-ins len, type, print, vars, dir and help.
Errors
A mistake raises the error Python would raise, with Python's suggestion when it has one.
The same goes for mixing up the two kinds. Data is not callable, and a method named without its parentheses is shown, not run.
Using the notebook
| Control | What it does |
|---|---|
| Enter, or Shift + Enter | Runs the cell and moves to the next one |
| Alt + Enter | Starts a new line in the cell |
| Tab | Completes a partly typed command |
| The four toolbar buttons | Insert a cell below, run the selected cell, reload the page, run everything from the top |
| Code / Markdown | Changes the selected cell's type; a Markdown cell renders what you write |
| The bin on the selected cell | Deletes it. The cells a page opens with stay. |
| Double-click | Opens a Markdown cell you wrote for editing |
Limits
This is not a full Python. A cell holds one expression: there are no variables, assignments, loops or function definitions, and portfolio is the only module that can be imported. Anything else raises NotImplementedError.