|
56 | 56 | }, |
57 | 57 | { |
58 | 58 | "cell_type": "code", |
59 | | - "execution_count": 9, |
| 59 | + "execution_count": 14, |
60 | 60 | "id": "ada8c4db", |
61 | 61 | "metadata": {}, |
62 | 62 | "outputs": [ |
|
311 | 311 | " <td>0.0</td>\n", |
312 | 312 | " <td>0.0</td>\n", |
313 | 313 | " </tr>\n", |
314 | | - " <tr>\n", |
315 | | - " <th>2025-04-16 00:00:00-04:00</th>\n", |
316 | | - " <td>380.670013</td>\n", |
317 | | - " <td>381.609985</td>\n", |
318 | | - " <td>368.000000</td>\n", |
319 | | - " <td>371.609985</td>\n", |
320 | | - " <td>21967800</td>\n", |
321 | | - " <td>0.0</td>\n", |
322 | | - " <td>0.0</td>\n", |
323 | | - " </tr>\n", |
324 | | - " <tr>\n", |
325 | | - " <th>2025-04-17 00:00:00-04:00</th>\n", |
326 | | - " <td>373.440002</td>\n", |
327 | | - " <td>374.321503</td>\n", |
328 | | - " <td>366.890015</td>\n", |
329 | | - " <td>367.779999</td>\n", |
330 | | - " <td>20858907</td>\n", |
331 | | - " <td>0.0</td>\n", |
332 | | - " <td>0.0</td>\n", |
333 | | - " </tr>\n", |
334 | 314 | " </tbody>\n", |
335 | 315 | "</table>\n", |
336 | 316 | "</div>" |
|
359 | 339 | "2025-04-11 00:00:00-04:00 380.640015 390.049988 378.890015 388.450012 \n", |
360 | 340 | "2025-04-14 00:00:00-04:00 393.220001 394.649994 384.209991 387.809998 \n", |
361 | 341 | "2025-04-15 00:00:00-04:00 388.510010 391.890015 384.160004 385.730011 \n", |
362 | | - "2025-04-16 00:00:00-04:00 380.670013 381.609985 368.000000 371.609985 \n", |
363 | | - "2025-04-17 00:00:00-04:00 373.440002 374.321503 366.890015 367.779999 \n", |
364 | 342 | "\n", |
365 | 343 | " Volume Dividends Stock Splits \n", |
366 | 344 | "Date \n", |
|
384 | 362 | "2025-04-10 00:00:00-04:00 38024400 0.0 0.0 \n", |
385 | 363 | "2025-04-11 00:00:00-04:00 23839200 0.0 0.0 \n", |
386 | 364 | "2025-04-14 00:00:00-04:00 19251200 0.0 0.0 \n", |
387 | | - "2025-04-15 00:00:00-04:00 17199900 0.0 0.0 \n", |
388 | | - "2025-04-16 00:00:00-04:00 21967800 0.0 0.0 \n", |
389 | | - "2025-04-17 00:00:00-04:00 20858907 0.0 0.0 " |
| 365 | + "2025-04-15 00:00:00-04:00 17199900 0.0 0.0 " |
390 | 366 | ] |
391 | 367 | }, |
392 | | - "execution_count": 9, |
| 368 | + "execution_count": 14, |
393 | 369 | "metadata": {}, |
394 | 370 | "output_type": "execute_result" |
395 | 371 | } |
396 | 372 | ], |
397 | 373 | "source": [ |
398 | 374 | "dat = yf.Ticker(\"MSFT\")\n", |
399 | 375 | "msft_df = dat.history(period='1mo')\n", |
| 376 | + "# drop last 2 rows, so we can update later\n", |
| 377 | + "msft_df = msft_df[:-2]\n", |
400 | 378 | "msft_df" |
401 | 379 | ] |
402 | 380 | }, |
|
410 | 388 | }, |
411 | 389 | { |
412 | 390 | "cell_type": "code", |
413 | | - "execution_count": 10, |
| 391 | + "execution_count": 15, |
414 | 392 | "id": "180c6f83", |
415 | 393 | "metadata": {}, |
416 | 394 | "outputs": [ |
417 | 395 | { |
418 | 396 | "name": "stderr", |
419 | 397 | "output_type": "stream", |
420 | 398 | "text": [ |
421 | | - "100%|██████████| 1/1 [00:00<00:00, 874.00it/s]\n" |
| 399 | + "100%|██████████| 1/1 [00:00<00:00, 977.01it/s]\n" |
422 | 400 | ] |
423 | 401 | } |
424 | 402 | ], |
|
432 | 410 | " credentials=credentials,\n", |
433 | 411 | ")" |
434 | 412 | ] |
435 | | - }, |
436 | | - { |
437 | | - "cell_type": "code", |
438 | | - "execution_count": 12, |
439 | | - "id": "8f2394ac", |
440 | | - "metadata": {}, |
441 | | - "outputs": [], |
442 | | - "source": [ |
443 | | - "import json" |
444 | | - ] |
445 | | - }, |
446 | | - { |
447 | | - "cell_type": "code", |
448 | | - "execution_count": 13, |
449 | | - "id": "589378e2", |
450 | | - "metadata": {}, |
451 | | - "outputs": [ |
452 | | - { |
453 | | - "ename": "JSONDecodeError", |
454 | | - "evalue": "Invalid control character at: line 6 column 46 (char 179)", |
455 | | - "output_type": "error", |
456 | | - "traceback": [ |
457 | | - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", |
458 | | - "\u001b[1;31mJSONDecodeError\u001b[0m Traceback (most recent call last)", |
459 | | - "Cell \u001b[1;32mIn[13], line 16\u001b[0m\n\u001b[0;32m 1\u001b[0m bq_credentials \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\"\"\u001b[39m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;124m{\u001b[39m\n\u001b[0;32m 3\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtype\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m: \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mservice_account\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m,\u001b[39m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 14\u001b[0m \u001b[38;5;124m}\u001b[39m\n\u001b[0;32m 15\u001b[0m \u001b[38;5;124m\"\"\"\u001b[39m\n\u001b[1;32m---> 16\u001b[0m bq_credentials \u001b[38;5;241m=\u001b[39m \u001b[43mjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloads\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbq_credentials\u001b[49m\u001b[43m)\u001b[49m\n", |
460 | | - "File \u001b[1;32m~\\anaconda3\\Lib\\json\\__init__.py:346\u001b[0m, in \u001b[0;36mloads\u001b[1;34m(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[0;32m 341\u001b[0m s \u001b[38;5;241m=\u001b[39m s\u001b[38;5;241m.\u001b[39mdecode(detect_encoding(s), \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msurrogatepass\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 343\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[0;32m 344\u001b[0m parse_int \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m parse_float \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[0;32m 345\u001b[0m parse_constant \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_pairs_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kw):\n\u001b[1;32m--> 346\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_default_decoder\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 347\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 348\u001b[0m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;241m=\u001b[39m JSONDecoder\n", |
461 | | - "File \u001b[1;32m~\\anaconda3\\Lib\\json\\decoder.py:337\u001b[0m, in \u001b[0;36mJSONDecoder.decode\u001b[1;34m(self, s, _w)\u001b[0m\n\u001b[0;32m 332\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mdecode\u001b[39m(\u001b[38;5;28mself\u001b[39m, s, _w\u001b[38;5;241m=\u001b[39mWHITESPACE\u001b[38;5;241m.\u001b[39mmatch):\n\u001b[0;32m 333\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Return the Python representation of ``s`` (a ``str`` instance\u001b[39;00m\n\u001b[0;32m 334\u001b[0m \u001b[38;5;124;03m containing a JSON document).\u001b[39;00m\n\u001b[0;32m 335\u001b[0m \n\u001b[0;32m 336\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 337\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mraw_decode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43midx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_w\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mend\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 338\u001b[0m end \u001b[38;5;241m=\u001b[39m _w(s, end)\u001b[38;5;241m.\u001b[39mend()\n\u001b[0;32m 339\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m end \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(s):\n", |
462 | | - "File \u001b[1;32m~\\anaconda3\\Lib\\json\\decoder.py:353\u001b[0m, in \u001b[0;36mJSONDecoder.raw_decode\u001b[1;34m(self, s, idx)\u001b[0m\n\u001b[0;32m 344\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Decode a JSON document from ``s`` (a ``str`` beginning with\u001b[39;00m\n\u001b[0;32m 345\u001b[0m \u001b[38;5;124;03ma JSON document) and return a 2-tuple of the Python\u001b[39;00m\n\u001b[0;32m 346\u001b[0m \u001b[38;5;124;03mrepresentation and the index in ``s`` where the document ended.\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 350\u001b[0m \n\u001b[0;32m 351\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 352\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 353\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mscan_once\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43midx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 354\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m 355\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m JSONDecodeError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExpecting value\u001b[39m\u001b[38;5;124m\"\u001b[39m, s, err\u001b[38;5;241m.\u001b[39mvalue) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m\n", |
463 | | - "\u001b[1;31mJSONDecodeError\u001b[0m: Invalid control character at: line 6 column 46 (char 179)" |
464 | | - ] |
465 | | - } |
466 | | - ], |
467 | | - "source": [ |
468 | | - "bq_credentials = \"\"\"\n", |
469 | | - "{\n", |
470 | | - " \"type\": \"service_account\",\n", |
471 | | - " \"project_id\": \"sipa-adv-c-roberto\",\n", |
472 | | - " \"private_key_id\": \"876ad52d3ab1986becae68062b203d4546bd85ef\",\n", |
473 | | - " \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDD4LnzefsyaYQK\\nmrEUxc7nwSywziFYaJCikTWnpMwGq63nJm0VlFOAHTQ+Bms1ctgN9sr3zR9T/1bY\\nbw6Cds4oAsTkZXDYippi8uRUvpLZtuQjUejEZISRXFZ3Yeeqq6hZrSrYR9f27IV0\\niBLRmiIICrsMh0N4LWnYuRU+IDJEfgovGw1B86YdYqN8wBFh/T+ewFnjEetv98Pr\\nojmRBas1/L4TI31C1shcbjTCcxxgfM/tURoDSRGQtlZVg+BLwsD+jO6/8I27B1+d\\nVDMcHKPfDbRxzJgKgGDRl6c1PbfEvF9Hx3P8dkz0UFbxN29mY+ZIEogdkbkqPn6W\\nTvd+ug/tAgMBAAECggEAHbo8Nm+3mCvL4pkeEW9A6srWR8IM7QA3nTiJCleYMFX7\\nV1atXQZNEuc7v8MVH8A9eocPQEL1A3g/26qlKtcxjAB5lckwcmi8rBI9ZYAjxN99\\nKcAbYbz4op//LnChKnWRYATIORlUNTEpwukI5B8ulYZdY3Ye3v0TcJUMXIih4GN1\\nkvMCHzaK3EBo6xXQMs9jY/UQm67OD7eDA9o333bqTevlz0VNhi/zUhsB5DsofhrI\\naYOTcrmWrzk6l/J8q5AOiXxHbFnxyvvVMu1SAqG1jfTILGl2U0aNOZ1hISqwn7Fd\\ngZ1yeU0Lt/+7tnX3oqu/888Z1hAtA2KTRObR5X260QKBgQDm7zREm9BVuLOC1AFx\\nawvRfyymzvNDvzB2pOKNlwvhDXoIMzgFLOLNlewquD0jN+ucHt+PBnJMKdbhttOs\\nfBMMeJyH2UoZpw0XcbYNiTbzK7EScvsjHQ7L6gwQqiPry3K6DN58rVvvC1M2uMpB\\nWxbIWMyHFvkkTf+zDnPxLMOk/QKBgQDZI27KMAU8pPi1iUr3/9vz6ky7FVGd+u3G\\nU8keTtPgacpq/1zbsyg1e69BUDLT0x2Aa/z84OYm74oN0qU/aVuTqsgkol6qXK9s\\ndhC/lJcegKlZWbC7E+MWdehk7NIvarkoehRdc6ANIRFCuwSpED1RHSTtLwfYrED9\\n4B932BABsQKBgFBUkvzuqmi3KBJxRtM6JlFIiLK5uFsvjV8n+frAuQwfEPz7PBho\\nxbg314AAuJugnx+eiauJ1YZy42F+pGESg9nJtsF2r1T/DAnEr0xEF848u4qsXnmX\\naQc7sdi2JmqmSZE4WshJ0Xn0mYymeQyE8AbfBL5VGnMrgq+5blFNffzNAoGAXqsp\\nGXO4RMl0Ocmi6t8daYnEbGiODf+h/S74Z4NcsuHMw7uUI6FHrZHARgyOLHZFzYDH\\nawUustkK6p3lN/FaYNY7rmUwOrxwKyyKfsxs2nqj2vXUrKut/VPov1/U/6FbGr+m\\n81t+81pwaRSaoo8W/K9lMxenJxtqtoUpkxmbWPECgYEA1rBy0zX5QZ/7xN7+pQ5Y\\nxwqHNMdQQ8WNEjgMLvA/vegWHlfVinsnvDYjRXtzTPjkYV+JEQ1JisII0G8PGA8T\\nkPQIl4jk35lTL3HAVaN3z5lrx9ccKqdlSa5T1+yKdXQiKJJ5ekaN2+k09ftpvvYO\\nzP3Bb7GfKNfgkl51Vdok1bE=\\n-----END PRIVATE KEY-----\\n\",\n", |
474 | | - " \"client_email\": \"lab13-example@sipa-adv-c-roberto.iam.gserviceaccount.com\",\n", |
475 | | - " \"client_id\": \"115701079677709179069\",\n", |
476 | | - " \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n", |
477 | | - " \"token_uri\": \"https://oauth2.googleapis.com/token\",\n", |
478 | | - " \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n", |
479 | | - " \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/lab13-example%40sipa-adv-c-roberto.iam.gserviceaccount.com\",\n", |
480 | | - " \"universe_domain\": \"googleapis.com\"\n", |
481 | | - "}\n", |
482 | | - "\"\"\"\n", |
483 | | - "bq_credentials = json.loads(bq_credentials)" |
484 | | - ] |
485 | 413 | } |
486 | 414 | ], |
487 | 415 | "metadata": { |
|
0 commit comments