{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["# https://pandas.pydata.org/docs/#"],"metadata":{"id":"FGdzH4g69klH"}},{"cell_type":"markdown","source":["# Pandas Datetimes"],"metadata":{"id":"kmIR7LHSeKG8"}},{"cell_type":"code","source":["# Import Pandas\n"],"metadata":{"id":"18mjiYBdg7u8"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Problem 1. Complex Date Parsing and Cleanup\n","\n","- You're given a messy CSV with dates in inconsistent formats:\n","\n","```\n","data = {\n","    'raw_date': ['2023/01/01', 'Jan 2, 2023', '03-01-2023', '20230104', '05 Jan 2023']\n","}\n","df = pd.DataFrame(data)\n","```\n","\n","- Clean and convert all raw_date entries to proper datetime format.\n","- Identify any invalid or missing conversions.\n","- Sort the DataFrame chronologically by this new date column."],"metadata":{"id":"omb-sIHQeNyX"}},{"cell_type":"code","execution_count":1,"metadata":{"id":"o5OJGUkZeHCt","executionInfo":{"status":"ok","timestamp":1747275647123,"user_tz":300,"elapsed":1143,"user":{"displayName":"Andrew Thomas","userId":"06040021951436773188"}}},"outputs":[],"source":["# Create the messy DataFrame with inconsistent date formats\n","data = {\n","    'raw_date': ['2023/01/01', 'Jan 2, 2023', '03-01-2023', '20230104', '05 Jan 2023']\n","}"]},{"cell_type":"code","source":["# Check for any mistakes\n"],"metadata":{"id":"aSMcBXRL_t72"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Sort chronologically\n"],"metadata":{"id":"-Y0TwWUN_y-j"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Problem 2. Feature Engineering from Datetime\n","\n","\n","```\n","date_range = pd.date_range(start='2023-01-01', periods=100, freq='D')\n","df = pd.DataFrame(index=date_range)\n","df['visits'] = (np.random.rand(100) * 100).astype(int)\n","```\n","- Extract and add new columns: day of week, is_weekend, week of the year.\n","- Create a binary feature: high_traffic = 1 if visits > 75 & its a buisness day, else 0."],"metadata":{"id":"F2TrltyTelB5"}},{"cell_type":"code","source":["# Create your new features except for 'high_traffic'\n"],"metadata":{"id":"1iukbqdselIa"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["\n","# Create the 'high_traffic feature'"],"metadata":{"id":"occ-JXcg_-zh"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["##Problem 3. Timedelta-Based Filtering\n","\n","\n","\n","```\n","df = pd.DataFrame({\n","    'user': ['Alice', 'Bob', 'Charlie'],\n","    'login': ['2023-03-01 08:00', '2023-03-01 09:30', '2023-03-01 08:45'],\n","    'logout': ['2023-03-01 12:15', '2023-03-01 12:00', '2023-03-01 17:00']\n","})\n","```\n","\n","- Convert login and logout columns to datetime.\n","- Calculate session durations using Timedelta.\n","- Filter users whose sessions lasted **more than  hours**."],"metadata":{"id":"mUs7PrfleXAm"}},{"cell_type":"code","source":["# convert the strings to datetime objects\n"],"metadata":{"id":"gLKq-c_1eXG6"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# timedelta\n"],"metadata":{"id":"B2ssJo4tAgbL"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# filter your dataframe\n"],"metadata":{"id":"HqOIb1gQiHIL"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Problem 5. Business Day Offsets\n","\n","\n","- Generate a date range starting from '2024-5-14' with 30 periods using only business days.\n","- Add a new column showing delivery ETA = order date + 3 business days.\n","\n"],"metadata":{"id":"veGr7dbEerQj"}},{"cell_type":"code","source":["# Generate dates\n"],"metadata":{"id":"pZLIHmwmerWf"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Generate the ETA column\n"],"metadata":{"id":"of0X_7J8fMhl"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Problem 6. Rolling, Shifting, and Comparing Time Windows\n","\n","\n","\n","- Generate a time series of daily scores over 180 days.\n","- Calculate:\n","  - A 7-day rolling average\n","  - A column showing the percent change by day\n","- Identify dates where the percent change exceeds ±15%."],"metadata":{"id":"3JpuuDdOHu9v"}},{"cell_type":"code","source":["# Generate your fake data\n"],"metadata":{"id":"cly2vc4oHvD0"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Rolling average\n"],"metadata":{"id":"WF2-fDcbJKgC"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# %_daily_change column\n"],"metadata":{"id":"D5yUXtDDJNSO"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Identify Days with large changes (>15%)\n"],"metadata":{"id":"ME0ocbwYJdXK"},"execution_count":null,"outputs":[]}]}