|
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\": \"[email protected]\",\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