Fall 2026 · University of Texas at Arlington · Instructor: Amir Farbin
Course materials are distributed through this repository. Pull regularly — lectures and labs are pushed as the semester progresses.
| Path | What's there |
|---|---|
syllabus.pdf |
Course syllabus, grading breakdown, policies |
Chapters/ |
The course text, one PDF per chapter, with a review question set |
Lectures/ |
One folder per lecture: notebooks and/or slide PDFs |
Labs/ |
One folder per lab assignment, plus the GitHub setup guide |
sample.ipynb |
Notebook whose one code cell prints Hello World!, to check Jupyter can run code |
requirements.txt |
Python packages used in the course |
Chapters/ holds the written version of the material — the same ground the lectures cover, but
in prose you can read at your own pace and go back to. Start with the chapter, use the lecture
slides as the map, and use the review questions to find out what didn't stick.
| File | Covers |
|---|---|
Chapter.01.Computers.pdf |
How computers work, from a transistor to an iPhone. Lecture 2 + Lab 1. |
Chapter.01.Review.Questions.pdf |
100 multiple-choice questions on Chapter 1, tagged easy / medium / hard. |
Chapter.03.Probability.and.Statistics.pdf |
Probability, Bayes, distributions, and generating data from them. Lectures 6 and 7. |
The questions are for self-testing and are not graded. In most of them at least one wrong option is what you would believe if you almost understood the idea, so read them carefully.
Chapter 3 pairs with a notebook: read the chapter for the reasoning, then work through
Lectures/Lecture.7/Lecture.7.ipynb, which turns it into code — a random number generator built
from scratch, a histogram function written by hand, accept/reject sampling and Monte Carlo
integration. Lab 3 draws directly on it.
More chapters land as the semester goes on.
We did all of this together in the first lab session. These are the same steps, so you can catch up or start over.
You need Linux, macOS, or Windows with WSL. On Windows, WSL is required — not a suggestion. Google Colab is an acceptable fallback if your machine can't handle the later assignments, but it is not a substitute for having a working setup.
-
Get a Unix shell.
- Windows: in PowerShell as Administrator, run
wsl --install, then reboot. Launch Ubuntu from the Start menu and set a username and password when it asks. Write the password down — everysudoneeds it. - macOS: open Terminal and run
xcode-select --install. - Linux: you already have one.
- Windows: in PowerShell as Administrator, run
-
Install the system packages. On Ubuntu/WSL/Debian:
sudo apt update sudo apt install python3 python3-pip python3-venv git
On macOS these came with the command line tools. Then close and reopen the terminal.
-
Make a course directory with its own virtual environment.
cd ~ mkdir -p Data-3402 cd Data-3402 python3 -m venv .venv source .venv/bin/activate
Your prompt should now start with
(.venv). That is a private Python for this course — nothing you install into it can break your system. Run thesourceline again in every new terminal; most "module not found" problems are just a forgotten activation.Do not use
sudo pip install. Current Ubuntu blocks it withexternally-managed-environment, on purpose; the virtual environment is the fix.Windows: keep all of this in your Linux home directory (
~), not under/mnt/c. Git and Jupyter are slow and unreliable across that boundary. Your Windows drives are visible from Linux at/mnt/c, and your Linux files are visible from Windows File Explorer at\\wsl.localhost\Ubuntu. -
Clone this repository and install the requirements. The clone is read-only;
git pullbrings you new lectures and labs as they are released. Submitting work also needs your own fork — see Labs and submission below.cd ~/Data-3402 git clone https://github.com/UTA-DataScience/DATA3402.Fall.2026.git cd DATA3402.Fall.2026 pip install -r requirements.txt
No
sudoon that last line — inside the virtual environment you are already allowed. -
Check that it works.
python3 -c "import numpy, pandas, matplotlib; print('ok')" jupyter labOpen
sample.ipynb, click the code cell, and press Shift+Enter.Ctrl-Ctwice in the terminal stops Jupyter.Every time you come back:
cd ~/Data-3402 && source .venv/bin/activate, thencd DATA3402.Fall.2026.
Several lectures and labs use datasets too large to keep in git (the SUSY dataset,
Kaggle competition data, image sets). They are not in this repository: you download
them when a lecture or lab tells you to. .gitignore excludes them under the names the
course uses, along with the pickles and model files the notebooks write — don't commit
them. GitHub refuses files over 100 MB, so a committed dataset stops your pushes.
Lab 5 has two parts. Labs/Lab.5/Lab.5.ipynb is the matrix class, the main assignment.
Labs/Lab.5/Lab.5.CommandLine.ipynb is the shorter piece we work through in the lab session:
getting a data file into shape from the command line, using bank-churn.csv beside it and
files already in Lectures/. Nothing to download.
Lab work is submitted through your own fork of this repository:
- you fork this repository once on GitHub, giving you your own copy under your account;
- you pull from this repository to receive new lectures and labs as they are released;
- you do your lab work in your fork and push to your fork, which is where it is graded.
We set this up together in the Lab 4 session (Friday 9/11). If you missed it or need to
start over, Part 1 of Labs/Lab.4/Lab.4.ipynb walks through it, and Labs/GitHub-Setup.pdf
has the same steps line by line — including logging in to GitHub from the terminal, which
you need before your first push — plus a table of what to do when git complains. In short:
-
Fork this repository. On its GitHub page, press Fork at the top right and fork it into your own account.
-
Clone your fork, not this repository:
cd ~/Data-3402 git clone https://github.com/YOUR_USERNAME/DATA3402.Fall.2026.git cd DATA3402.Fall.2026
Already have the clone from Getting started? Then
~/Data-3402/DATA3402.Fall.2026exists, and cloning your fork into the same place stops with destination path already exists. Don't clone again, and don't delete that folder:cd ~/Data-3402/DATA3402.Fall.2026and carry on with step 3, which works on that clone unchanged. -
Fix the remotes, so that pulls come from this repository and pushes go to your fork:
git remote remove origin git remote add origin https://github.com/UTA-DataScience/DATA3402.Fall.2026.git git remote set-url --push origin https://github.com/YOUR_USERNAME/DATA3402.Fall.2026.git git remote -v
git remote -vshould show this repository for fetch and your fork for push. If both lines show the same URL, theset-url --pushdidn't take; run it again. If you use SSH keys, your fork's URL isgit@github.com:YOUR_USERNAME/DATA3402.Fall.2026.git, in both the clone and theset-url --push.
From then on git pull brings class material and git push sends your work to your fork.
The moment you pull a new lab, copy it to a new name and work only in the copy — never edit the file we handed out:
cp Labs/Lab.3/Lab.3.ipynb Labs/Lab.3/Lab.3.solution.ipynbgit pull only touches files it recognizes from this repository, so a copy under a name we
never handed out can't conflict with a fix we push later. To submit, commit your copy, push,
and check on GitHub that your fork shows the new commit:
git add Labs/Lab.3/Lab.3.solution.ipynb
git commit -m "Lab 3 submission"
git pushCommit only your own copies. If you run a lecture notebook in place and commit it, the next
release of that lecture can conflict when you pull; Labs/GitHub-Setup.pdf says how to recover.
All course communication goes through Teams — not email.