Last active
October 10, 2025 22:04
-
-
Save jc4p/334d52de25624e6419aa21f4ccd35f10 to your computer and use it in GitHub Desktop.
Making and running a BERT classifier on Farcaster casts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env python3 | |
| """ | |
| Classify Farcaster casts using Google Gemini Batch API. | |
| Classifies each cast into one of 5 categories: | |
| - Personal Life | |
| - Spam | |
| - App/Bot Interactions | |
| - Crypto Content | |
| - Not Enough Context To Tell | |
| """ | |
| import json | |
| import time | |
| from google import genai | |
| from google.genai import types | |
| def create_classification_prompt(cast_text): | |
| """Create the prompt for classifying the cast.""" | |
| return f"""Classify this Farcaster cast into exactly ONE of these categories: | |
| 1. Personal Life | |
| 2. Spam | |
| 3. App/Bot Interactions | |
| 4. Crypto Content | |
| 5. Not Enough Context To Tell | |
| Cast: "{cast_text}" | |
| Respond in this exact format: | |
| Category: [category name] | |
| Confidence: [number from 0-10]""" | |
| def main(): | |
| # Initialize the client | |
| client = genai.Client() | |
| # Load the filtered casts from JSON | |
| print("Loading data/casts_filtered.json...") | |
| with open('data/casts_filtered.json', 'r') as f: | |
| casts = [] | |
| for line in f: | |
| casts.append(json.loads(line)) | |
| # Sample to 10k records | |
| import random | |
| if len(casts) > 10000: | |
| print(f"Loaded {len(casts)} casts, sampling 10,000...") | |
| random.seed(42) # For reproducibility | |
| casts = random.sample(casts, 10000) | |
| print(f"Processing {len(casts)} casts") | |
| # Create JSONL file with batch requests | |
| jsonl_filename = 'classification_batch_requests.jsonl' | |
| print(f"Creating {jsonl_filename}...") | |
| with open(jsonl_filename, 'w') as f: | |
| for i, cast in enumerate(casts): | |
| cast_hash = cast['Hash'] | |
| cast_text = cast['Text'] | |
| # Create the classification prompt | |
| prompt = create_classification_prompt(cast_text) | |
| # Create the request object | |
| request = { | |
| "key": f"cast-{i}-{cast_hash}", | |
| "request": { | |
| "contents": [ | |
| { | |
| "parts": [{"text": prompt}], | |
| "role": "user" | |
| } | |
| ], | |
| "generation_config": { | |
| "temperature": 0.1 # Very low temperature for consistent classification | |
| } | |
| } | |
| } | |
| f.write(json.dumps(request) + '\n') | |
| print(f"Created {jsonl_filename} with {len(casts)} requests") | |
| # Upload the file to the File API | |
| print("Uploading JSONL file to Google File API...") | |
| uploaded_file = client.files.upload( | |
| file=jsonl_filename, | |
| config=types.UploadFileConfig( | |
| display_name='farcaster-cast-classification', | |
| mime_type='application/jsonl' | |
| ) | |
| ) | |
| print(f"Uploaded file: {uploaded_file.name}") | |
| # Create the batch job | |
| print("Creating batch job...") | |
| batch_job = client.batches.create( | |
| model="gemini-flash-latest", | |
| src=uploaded_file.name, | |
| config={ | |
| 'display_name': "farcaster-cast-classification", | |
| }, | |
| ) | |
| job_name = batch_job.name | |
| print(f"Created batch job: {job_name}") | |
| # Poll for job completion | |
| print("\nPolling job status...") | |
| completed_states = { | |
| 'JOB_STATE_SUCCEEDED', | |
| 'JOB_STATE_FAILED', | |
| 'JOB_STATE_CANCELLED', | |
| 'JOB_STATE_EXPIRED', | |
| } | |
| while batch_job.state.name not in completed_states: | |
| print(f"Current state: {batch_job.state.name}") | |
| time.sleep(30) # Wait 30 seconds before polling again | |
| batch_job = client.batches.get(name=job_name) | |
| print(f"\nJob finished with state: {batch_job.state.name}") | |
| # Handle results | |
| if batch_job.state.name == 'JOB_STATE_SUCCEEDED': | |
| if batch_job.dest and batch_job.dest.file_name: | |
| result_file_name = batch_job.dest.file_name | |
| print(f"Results are in file: {result_file_name}") | |
| # Download the results | |
| print("Downloading results...") | |
| file_content = client.files.download(file=result_file_name) | |
| # Save raw results (bulk file) | |
| raw_results_filename = 'cast_classification_raw.jsonl' | |
| with open(raw_results_filename, 'wb') as f: | |
| f.write(file_content) | |
| print(f"Saved raw results to {raw_results_filename}") | |
| # Parse and format results | |
| print("Parsing results...") | |
| results = [] | |
| for line in file_content.decode('utf-8').strip().split('\n'): | |
| result = json.loads(line) | |
| results.append(result) | |
| # Create a structured output with the original cast data + classification | |
| structured_results = [] | |
| for i, cast in enumerate(casts): | |
| # Find matching result | |
| key = f"cast-{i}-{cast['Hash']}" | |
| matching_result = next((r for r in results if r.get('key') == key), None) | |
| output = { | |
| 'Fid': cast['Fid'], | |
| 'Hash': cast['Hash'], | |
| 'Text': cast['Text'], | |
| 'Timestamp': cast['Timestamp'], | |
| 'Classification': None, | |
| 'Confidence': None, | |
| 'error': None | |
| } | |
| if matching_result: | |
| if 'response' in matching_result: | |
| # Extract the classification text | |
| response_text = matching_result['response']['candidates'][0]['content']['parts'][0]['text'].strip() | |
| # Parse the response to extract category and confidence | |
| lines = response_text.split('\n') | |
| for line in lines: | |
| if line.startswith('Category:'): | |
| output['Classification'] = line.replace('Category:', '').strip() | |
| elif line.startswith('Confidence:'): | |
| try: | |
| output['Confidence'] = int(line.replace('Confidence:', '').strip()) | |
| except ValueError: | |
| output['Confidence'] = None | |
| elif 'status' in matching_result: | |
| output['error'] = matching_result['status'] | |
| structured_results.append(output) | |
| # Save structured results (filtered file for analysis) | |
| output_filename = 'cast_classification_results.json' | |
| with open(output_filename, 'w') as f: | |
| json.dump(structured_results, f, indent=2) | |
| print(f"Saved structured results to {output_filename}") | |
| # Print summary by category | |
| successful = sum(1 for r in structured_results if r['Classification']) | |
| failed = sum(1 for r in structured_results if r['error']) | |
| # Count by category | |
| category_counts = {} | |
| for r in structured_results: | |
| if r['Classification']: | |
| cat = r['Classification'] | |
| category_counts[cat] = category_counts.get(cat, 0) + 1 | |
| # Calculate average confidence per category | |
| category_confidence = {} | |
| for r in structured_results: | |
| if r['Classification'] and r['Confidence'] is not None: | |
| cat = r['Classification'] | |
| if cat not in category_confidence: | |
| category_confidence[cat] = [] | |
| category_confidence[cat].append(r['Confidence']) | |
| print(f"\nSummary:") | |
| print(f" Total casts: {len(structured_results)}") | |
| print(f" Successful: {successful}") | |
| print(f" Failed: {failed}") | |
| print(f"\nClassification breakdown:") | |
| for cat, count in sorted(category_counts.items(), key=lambda x: x[1], reverse=True): | |
| avg_conf = sum(category_confidence.get(cat, [0])) / len(category_confidence.get(cat, [1])) if cat in category_confidence else 0 | |
| print(f" {cat}: {count} (avg confidence: {avg_conf:.1f})") | |
| elif batch_job.state.name == 'JOB_STATE_FAILED': | |
| print(f"Error: {batch_job.error}") | |
| print("\nDone!") | |
| if __name__ == "__main__": | |
| main() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "id": "a6817309-ab62-44ae-a842-99b24f6e9e6c", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import duckdb\n", | |
| "import json" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "id": "lbkv06arqjd", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Use DuckDB for fast parquet querying - much faster than pandas for large files!\n", | |
| "# DuckDB can read parquet files directly without loading everything into memory\n", | |
| "\n", | |
| "# Farcaster epoch is January 1, 2021 00:00:00 UTC (Unix timestamp: 1609459200)\n", | |
| "FARCASTER_EPOCH = 1609459200\n", | |
| "\n", | |
| "# Query with DuckDB - it handles the parquet file efficiently\n", | |
| "# Filter for casts from April 2025 onwards and non-empty text\n", | |
| "query = f\"\"\"\n", | |
| "SELECT \n", | |
| " Fid,\n", | |
| " Hash,\n", | |
| " Text,\n", | |
| " TIMESTAMP '1970-01-01 00:00:00' + (Timestamp + {FARCASTER_EPOCH}) * INTERVAL '1 second' AS Timestamp\n", | |
| "FROM 'data/casts.parquet'\n", | |
| "WHERE TIMESTAMP '1970-01-01 00:00:00' + (Timestamp + {FARCASTER_EPOCH}) * INTERVAL '1 second' >= TIMESTAMP '2025-04-01 00:00:00'\n", | |
| " AND Text IS NOT NULL\n", | |
| " AND Text != ''\n", | |
| "\"\"\"\n", | |
| "\n", | |
| "# Execute query and convert to pandas DataFrame\n", | |
| "df = duckdb.sql(query).df()\n", | |
| "\n", | |
| "# Ensure proper data types\n", | |
| "df['Fid'] = df['Fid'].astype('int64')\n", | |
| "df['Hash'] = df['Hash'].astype('string')\n", | |
| "df['Text'] = df['Text'].astype('string')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "id": "7f6b9545-fea5-4407-b655-e7a504e1877a", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Total casts: 42,341,976\n", | |
| "\n", | |
| "Data types:\n", | |
| "Fid int64\n", | |
| "Hash string[python]\n", | |
| "Text string[python]\n", | |
| "Timestamp datetime64[us]\n", | |
| "dtype: object\n", | |
| "\n", | |
| "Sample data:\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>Fid</th>\n", | |
| " <th>Hash</th>\n", | |
| " <th>Text</th>\n", | |
| " <th>Timestamp</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>1364998</td>\n", | |
| " <td>0xceb1df1197834ca69f9b7b2b37b781ceecfa07ad</td>\n", | |
| " <td>What a nice view</td>\n", | |
| " <td>2025-10-03 15:49:32</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>1364998</td>\n", | |
| " <td>0x56f5865472a0a78ac31cfa3d1137cca4c6bdcfaf</td>\n", | |
| " <td>I especially like autumn</td>\n", | |
| " <td>2025-10-03 15:50:47</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>1364998</td>\n", | |
| " <td>0x5374fbfc2e1ddca53737829c9a7465ba62738a0a</td>\n", | |
| " <td>So cool</td>\n", | |
| " <td>2025-10-03 16:01:10</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>1364998</td>\n", | |
| " <td>0xa17004422bfe6fa78864e753449f7717ea37e2c2</td>\n", | |
| " <td>I like</td>\n", | |
| " <td>2025-10-03 16:11:34</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>1364980</td>\n", | |
| " <td>0x4439edb229466b9c6aa9be1d1af20bf1243a43bc</td>\n", | |
| " <td>check out this poll: https://polla-rosy.vercel...</td>\n", | |
| " <td>2025-10-03 15:59:26</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " Fid Hash \\\n", | |
| "0 1364998 0xceb1df1197834ca69f9b7b2b37b781ceecfa07ad \n", | |
| "1 1364998 0x56f5865472a0a78ac31cfa3d1137cca4c6bdcfaf \n", | |
| "2 1364998 0x5374fbfc2e1ddca53737829c9a7465ba62738a0a \n", | |
| "3 1364998 0xa17004422bfe6fa78864e753449f7717ea37e2c2 \n", | |
| "4 1364980 0x4439edb229466b9c6aa9be1d1af20bf1243a43bc \n", | |
| "\n", | |
| " Text Timestamp \n", | |
| "0 What a nice view 2025-10-03 15:49:32 \n", | |
| "1 I especially like autumn 2025-10-03 15:50:47 \n", | |
| "2 So cool 2025-10-03 16:01:10 \n", | |
| "3 I like 2025-10-03 16:11:34 \n", | |
| "4 check out this poll: https://polla-rosy.vercel... 2025-10-03 15:59:26 " | |
| ] | |
| }, | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Display info and sample\n", | |
| "print(f\"Total casts: {len(df):,}\")\n", | |
| "print(f\"\\nData types:\")\n", | |
| "print(df.dtypes)\n", | |
| "print(f\"\\nSample data:\")\n", | |
| "df.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 14, | |
| "id": "dmk520qpczl", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Filter out casts with text length < 25 characters\n", | |
| "df = df[df['Text'].str.len() >= 25]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 17, | |
| "id": "368ee7c9-6987-4d79-a022-604d1445caca", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "23,403,842\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "print(f\"{len(df):,}\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "id": "04621979-48f3-4f38-8859-e113a161da31", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>Fid</th>\n", | |
| " <th>Hash</th>\n", | |
| " <th>Text</th>\n", | |
| " <th>Timestamp</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>1364998</td>\n", | |
| " <td>0xceb1df1197834ca69f9b7b2b37b781ceecfa07ad</td>\n", | |
| " <td>What a nice view</td>\n", | |
| " <td>2025-10-03 15:49:32</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>1364998</td>\n", | |
| " <td>0x56f5865472a0a78ac31cfa3d1137cca4c6bdcfaf</td>\n", | |
| " <td>I especially like autumn</td>\n", | |
| " <td>2025-10-03 15:50:47</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>1364998</td>\n", | |
| " <td>0x5374fbfc2e1ddca53737829c9a7465ba62738a0a</td>\n", | |
| " <td>So cool</td>\n", | |
| " <td>2025-10-03 16:01:10</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>1364998</td>\n", | |
| " <td>0xa17004422bfe6fa78864e753449f7717ea37e2c2</td>\n", | |
| " <td>I like</td>\n", | |
| " <td>2025-10-03 16:11:34</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>1364980</td>\n", | |
| " <td>0x4439edb229466b9c6aa9be1d1af20bf1243a43bc</td>\n", | |
| " <td>check out this poll: https://polla-rosy.vercel...</td>\n", | |
| " <td>2025-10-03 15:59:26</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>...</th>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>42341971</th>\n", | |
| " <td>533</td>\n", | |
| " <td>0x5a5d8f73bf591e9ad849d6e2b440c4fb390c86b8</td>\n", | |
| " <td>my farcon ticket is yours if you want it king</td>\n", | |
| " <td>2025-04-02 00:10:04</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>42341972</th>\n", | |
| " <td>528</td>\n", | |
| " <td>0xa437c2b20cbd54e54b7a5e5489d34f9ba72fe3d1</td>\n", | |
| " <td>2020 at least</td>\n", | |
| " <td>2025-10-02 00:05:15</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>42341973</th>\n", | |
| " <td>528</td>\n", | |
| " <td>0x4f1f63606ef6b32c30cd81ebc227330b4b685165</td>\n", | |
| " <td>users getting very rich</td>\n", | |
| " <td>2025-10-02 02:40:06</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>42341974</th>\n", | |
| " <td>528</td>\n", | |
| " <td>0x583693eb30b3140e45b480250cd1f3bf021cd67f</td>\n", | |
| " <td>there's a $zora coin $farcats</td>\n", | |
| " <td>2025-10-02 08:04:45</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>42341975</th>\n", | |
| " <td>528</td>\n", | |
| " <td>0xfd1c2adfd2cf09754caf621b4772d0d7af4d5e92</td>\n", | |
| " <td>hunting season</td>\n", | |
| " <td>2025-10-02 08:23:04</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>42341976 rows Γ 4 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " Fid Hash \\\n", | |
| "0 1364998 0xceb1df1197834ca69f9b7b2b37b781ceecfa07ad \n", | |
| "1 1364998 0x56f5865472a0a78ac31cfa3d1137cca4c6bdcfaf \n", | |
| "2 1364998 0x5374fbfc2e1ddca53737829c9a7465ba62738a0a \n", | |
| "3 1364998 0xa17004422bfe6fa78864e753449f7717ea37e2c2 \n", | |
| "4 1364980 0x4439edb229466b9c6aa9be1d1af20bf1243a43bc \n", | |
| "... ... ... \n", | |
| "42341971 533 0x5a5d8f73bf591e9ad849d6e2b440c4fb390c86b8 \n", | |
| "42341972 528 0xa437c2b20cbd54e54b7a5e5489d34f9ba72fe3d1 \n", | |
| "42341973 528 0x4f1f63606ef6b32c30cd81ebc227330b4b685165 \n", | |
| "42341974 528 0x583693eb30b3140e45b480250cd1f3bf021cd67f \n", | |
| "42341975 528 0xfd1c2adfd2cf09754caf621b4772d0d7af4d5e92 \n", | |
| "\n", | |
| " Text \\\n", | |
| "0 What a nice view \n", | |
| "1 I especially like autumn \n", | |
| "2 So cool \n", | |
| "3 I like \n", | |
| "4 check out this poll: https://polla-rosy.vercel... \n", | |
| "... ... \n", | |
| "42341971 my farcon ticket is yours if you want it king \n", | |
| "42341972 2020 at least \n", | |
| "42341973 users getting very rich \n", | |
| "42341974 there's a $zora coin $farcats \n", | |
| "42341975 hunting season \n", | |
| "\n", | |
| " Timestamp \n", | |
| "0 2025-10-03 15:49:32 \n", | |
| "1 2025-10-03 15:50:47 \n", | |
| "2 2025-10-03 16:01:10 \n", | |
| "3 2025-10-03 16:11:34 \n", | |
| "4 2025-10-03 15:59:26 \n", | |
| "... ... \n", | |
| "42341971 2025-04-02 00:10:04 \n", | |
| "42341972 2025-10-02 00:05:15 \n", | |
| "42341973 2025-10-02 02:40:06 \n", | |
| "42341974 2025-10-02 08:04:45 \n", | |
| "42341975 2025-10-02 08:23:04 \n", | |
| "\n", | |
| "[42341976 rows x 4 columns]" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "id": "01frdrwf0nm7", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>Fid</th>\n", | |
| " <th>Hash</th>\n", | |
| " <th>Text</th>\n", | |
| " <th>Timestamp</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>1088459</td>\n", | |
| " <td>0xa9fecd6da5ef8a6a502aa1923364a8b15bf0a485</td>\n", | |
| " <td>Happy Tuesday!!</td>\n", | |
| " <td>2025-07-22 08:41:52</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>984202</td>\n", | |
| " <td>0x9bb19f17559c0d1b52fa1ad09f1606036553683d</td>\n", | |
| " <td>Eclipse attacks isolate nodes, manipulating th...</td>\n", | |
| " <td>2025-06-01 16:03:20</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>1065265</td>\n", | |
| " <td>0x3b99e3d6946594d2c296678326094b797c1f3a0f</td>\n", | |
| " <td>ya π₯π₯</td>\n", | |
| " <td>2025-09-17 01:12:37</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>511348</td>\n", | |
| " <td>0x3ef593ec5dfb589e3885ab6d0dbd15f7ae424162</td>\n", | |
| " <td>Wow</td>\n", | |
| " <td>2025-04-23 10:51:54</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>504676</td>\n", | |
| " <td>0x0814c74769f420cdce328bfd135d39aece43ff34</td>\n", | |
| " <td>Next-level</td>\n", | |
| " <td>2025-09-07 17:32:23</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>1043747</td>\n", | |
| " <td>0xa64f32a37c7b0c47cda18c97ffe24f9ecd475df5</td>\n", | |
| " <td>Step into this channel as into a hall of echoe...</td>\n", | |
| " <td>2025-08-30 09:58:12</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>518127</td>\n", | |
| " <td>0x1c8282b47df5756da29ea5aa90b52d500af8ff3b</td>\n", | |
| " <td>Good afternoon dear friend</td>\n", | |
| " <td>2025-10-01 13:19:43</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>822634</td>\n", | |
| " <td>0xd8a00812c8ca66dc5b76964d511003fe07c22389</td>\n", | |
| " <td>have a good day my fren</td>\n", | |
| " <td>2025-09-13 10:42:56</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>8</th>\n", | |
| " <td>279434</td>\n", | |
| " <td>0x0e1be58c2a16d1486f789a3bf05b9210e82e155f</td>\n", | |
| " <td>We didnβt invent the Game β We just play it be...</td>\n", | |
| " <td>2025-05-31 01:22:32</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>9</th>\n", | |
| " <td>1163345</td>\n", | |
| " <td>0xcdfbbd66bb9ec752bc8ca3807d88d36b51dfe382</td>\n", | |
| " <td>GM</td>\n", | |
| " <td>2025-08-13 16:05:43</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>10</th>\n", | |
| " <td>836504</td>\n", | |
| " <td>0x070fe7365114f6d0d4d1f718276bd95fbb8d24c1</td>\n", | |
| " <td>pm famnn x 100 $degen</td>\n", | |
| " <td>2025-04-14 23:48:54</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>11</th>\n", | |
| " <td>5406</td>\n", | |
| " <td>0x864995ef916f6ff53939607d826e5e55d545b547</td>\n", | |
| " <td>great!</td>\n", | |
| " <td>2025-09-06 14:58:34</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>12</th>\n", | |
| " <td>879654</td>\n", | |
| " <td>0x0c94176607615edeba72dd0f6b10c2cb628f8190</td>\n", | |
| " <td>@HUNT</td>\n", | |
| " <td>2025-06-26 05:22:41</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>13</th>\n", | |
| " <td>489775</td>\n", | |
| " <td>0x655138819dd89f4190c30258e3f1e2f488aeaeab</td>\n", | |
| " <td>Efficient</td>\n", | |
| " <td>2025-07-31 17:24:02</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>14</th>\n", | |
| " <td>5494</td>\n", | |
| " <td>0x50032cc3001a714dc3bd087c6e0bfc345726fa9a</td>\n", | |
| " <td>I will open my doors when I stop spilling it a...</td>\n", | |
| " <td>2025-08-30 15:33:44</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>15</th>\n", | |
| " <td>502107</td>\n", | |
| " <td>0xe450652c0388120be63d440d88c49cc323ab17d1</td>\n", | |
| " <td>Clever</td>\n", | |
| " <td>2025-07-17 17:46:43</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>16</th>\n", | |
| " <td>898320</td>\n", | |
| " <td>0x5c313ff3aea0a3d4f2635790af57f8dd0b7e3da1</td>\n", | |
| " <td>Good job friend ππΌ</td>\n", | |
| " <td>2025-07-31 04:53:06</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>17</th>\n", | |
| " <td>2210</td>\n", | |
| " <td>0x4e7005f97957c0b82f81546aa87a8205a2c16ecb</td>\n", | |
| " <td>checking in on Ryan</td>\n", | |
| " <td>2025-05-07 01:04:34</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>18</th>\n", | |
| " <td>790522</td>\n", | |
| " <td>0xd9b1877883ca365cb203ca4cba8c327c6e1cfc54</td>\n", | |
| " <td>γγπrenγγγγγγ¨γγγγγΎγπε¬γγγπ</td>\n", | |
| " <td>2025-07-30 14:00:17</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>19</th>\n", | |
| " <td>1176368</td>\n", | |
| " <td>0x6201411f2e0a7cce225cd97a4f00653e5e7ae820</td>\n", | |
| " <td>Lol</td>\n", | |
| " <td>2025-09-24 13:23:00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>20</th>\n", | |
| " <td>1060048</td>\n", | |
| " <td>0x7ce38085ecba3aaa0d98be1468ecb7ad23ccfd60</td>\n", | |
| " <td>Just painted some pixels on Monad Lisa! π¨β¨\\n\\n...</td>\n", | |
| " <td>2025-08-31 04:18:47</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>21</th>\n", | |
| " <td>870424</td>\n", | |
| " <td>0x17a1fb96619ca8f6d316f8550829473ce0b31d14</td>\n", | |
| " <td>Gm dear ashis</td>\n", | |
| " <td>2025-08-31 07:52:39</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>22</th>\n", | |
| " <td>311446</td>\n", | |
| " <td>0x7f4e7a101c73a9d892f3207fbce530fe512871ce</td>\n", | |
| " <td>GM Maryam!</td>\n", | |
| " <td>2025-06-12 06:37:03</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>23</th>\n", | |
| " <td>960565</td>\n", | |
| " <td>0xdbd8397254e8bac81979487600513d3405df9606</td>\n", | |
| " <td>I love this message! It's so inspiring.</td>\n", | |
| " <td>2025-09-17 05:56:34</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>24</th>\n", | |
| " <td>1112278</td>\n", | |
| " <td>0x490ae5f117d3c3e01f4c0d030ef04d5597a4275a</td>\n", | |
| " <td>Amen</td>\n", | |
| " <td>2025-09-17 00:15:07</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>25</th>\n", | |
| " <td>873707</td>\n", | |
| " <td>0x0c017db514a3ea74cd23e6bbfb88be270763399b</td>\n", | |
| " <td>ChΓ©o Δi mn Ζ‘i</td>\n", | |
| " <td>2025-05-28 13:00:11</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>26</th>\n", | |
| " <td>246458</td>\n", | |
| " <td>0xe05fa130511de1776d90b420d3d6c8cf026a944e</td>\n", | |
| " <td>π\\n\\nD H A N U S H K O D I\\n\\nβAt the edge of ...</td>\n", | |
| " <td>2025-05-23 09:07:55</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>27</th>\n", | |
| " <td>500808</td>\n", | |
| " <td>0x0a38df44e18cd51d5ccbaba621297ea82ddc5918</td>\n", | |
| " <td>Marvelous</td>\n", | |
| " <td>2025-07-17 19:39:23</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>28</th>\n", | |
| " <td>419545</td>\n", | |
| " <td>0x425534fd892225f120e638b7d63be38d8c1c2a6a</td>\n", | |
| " <td>so pretty buddy</td>\n", | |
| " <td>2025-09-11 18:57:44</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>29</th>\n", | |
| " <td>18570</td>\n", | |
| " <td>0x67ba837a3d059cf4725b1cf01f90a8d2e3042d30</td>\n", | |
| " <td>AI'd it up</td>\n", | |
| " <td>2025-08-19 21:49:21</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>30</th>\n", | |
| " <td>310531</td>\n", | |
| " <td>0xf8c81a2dc0dfde6d891dc65cc42880bebf0086aa</td>\n", | |
| " <td>feels like decades ago in crypto years</td>\n", | |
| " <td>2025-04-16 22:04:43</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>31</th>\n", | |
| " <td>499092</td>\n", | |
| " <td>0xc7714ce72b21cc320e186caf1a243463d4a2d46c</td>\n", | |
| " <td>Slightly before our time. Had a 2 week job one...</td>\n", | |
| " <td>2025-09-05 17:53:19</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>32</th>\n", | |
| " <td>681148</td>\n", | |
| " <td>0xbde6b8e2e9c91daeb0f0190b618783090b418752</td>\n", | |
| " <td>yo thatβs a red surya</td>\n", | |
| " <td>2025-05-31 08:36:37</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>33</th>\n", | |
| " <td>548316</td>\n", | |
| " <td>0xfb669f01c5c3bbeb3a69e2decb7951189960f1e9</td>\n", | |
| " <td>Just right</td>\n", | |
| " <td>2025-06-25 17:48:29</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>34</th>\n", | |
| " <td>1007759</td>\n", | |
| " <td>0xf4258b8e17249e7374cc62ea4d64f1d2758fb966</td>\n", | |
| " <td>Thx buddy π€π¦</td>\n", | |
| " <td>2025-04-17 17:01:47</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>35</th>\n", | |
| " <td>1325309</td>\n", | |
| " <td>0x49faf7e14e205145eaec807b0d6c3e33d83fbcf6</td>\n", | |
| " <td>How in the world did a midfielder manage to be...</td>\n", | |
| " <td>2025-09-09 20:47:57</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>36</th>\n", | |
| " <td>309819</td>\n", | |
| " <td>0x07d87b19f20ffb307307f7aec2db5f11c4706963</td>\n", | |
| " <td>You too dear π«</td>\n", | |
| " <td>2025-07-10 12:39:01</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>37</th>\n", | |
| " <td>441026</td>\n", | |
| " <td>0xd57e7f9efb915c6d81f355a2a87489eb32b197b6</td>\n", | |
| " <td>I just claimed $EGGS for eggs on</td>\n", | |
| " <td>2025-08-06 02:39:56</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>38</th>\n", | |
| " <td>710182</td>\n", | |
| " <td>0xad6870506014e401a548bfc3309fd9505abac7db</td>\n", | |
| " <td>Seriously</td>\n", | |
| " <td>2025-09-04 18:37:57</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>39</th>\n", | |
| " <td>268608</td>\n", | |
| " <td>0x815126e870038b569da708e7898d1925adc1155a</td>\n", | |
| " <td>Good fay to u 100 $degen</td>\n", | |
| " <td>2025-04-05 05:57:37</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>40</th>\n", | |
| " <td>1085163</td>\n", | |
| " <td>0xcc68de18ad02a1c008d2544a5717240a3ecd41df</td>\n", | |
| " <td>Investors are betting heavily on these two com...</td>\n", | |
| " <td>2025-09-27 17:04:28</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>41</th>\n", | |
| " <td>1114466</td>\n", | |
| " <td>0x4c47039699c7cf90b0fc7784f935e73d790718ae</td>\n", | |
| " <td>Nothing is funny</td>\n", | |
| " <td>2025-10-03 03:29:41</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>42</th>\n", | |
| " <td>809473</td>\n", | |
| " <td>0xd5a3b838646e510517304d2020b76830bbcc7f08</td>\n", | |
| " <td>Absolutely true! Mastering derivatives can sig...</td>\n", | |
| " <td>2025-04-10 22:02:00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>43</th>\n", | |
| " <td>21717</td>\n", | |
| " <td>0xa94f4ca1843e25a042b8e92ab42649cac266f089</td>\n", | |
| " <td>The flowers are beautiful. Happy monday, my fr...</td>\n", | |
| " <td>2025-04-14 03:58:47</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>44</th>\n", | |
| " <td>1283989</td>\n", | |
| " <td>0x67d23b172a993da7879ee059a88aac4ba572ce47</td>\n", | |
| " <td>Absolutely incredible π―</td>\n", | |
| " <td>2025-09-05 18:41:10</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>45</th>\n", | |
| " <td>1230116</td>\n", | |
| " <td>0xc73f51c91dfd1c71b883c655e754826c64365920</td>\n", | |
| " <td>On trust especially</td>\n", | |
| " <td>2025-08-25 13:05:44</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>46</th>\n", | |
| " <td>1025420</td>\n", | |
| " <td>0xd9ed8356ddbfbb8aff617a7b4db9f88a27633bbb</td>\n", | |
| " <td>I don't go with the list. I vibe shop. Anythin...</td>\n", | |
| " <td>2025-07-23 09:59:21</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>47</th>\n", | |
| " <td>256931</td>\n", | |
| " <td>0xf4a8648c79b0242387b6bdc8f963873cbc6840f9</td>\n", | |
| " <td>it is entertaining and can be educational</td>\n", | |
| " <td>2025-07-05 22:06:33</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>48</th>\n", | |
| " <td>401035</td>\n", | |
| " <td>0xf3bf12462472828f3edd3a66e897eb456333525b</td>\n", | |
| " <td>ok banger</td>\n", | |
| " <td>2025-06-06 22:25:26</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>49</th>\n", | |
| " <td>523582</td>\n", | |
| " <td>0x8ca7d3f2f644ea748441b7825071c2b27d242660</td>\n", | |
| " <td>This will</td>\n", | |
| " <td>2025-09-08 18:49:00</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " Fid Hash \\\n", | |
| "0 1088459 0xa9fecd6da5ef8a6a502aa1923364a8b15bf0a485 \n", | |
| "1 984202 0x9bb19f17559c0d1b52fa1ad09f1606036553683d \n", | |
| "2 1065265 0x3b99e3d6946594d2c296678326094b797c1f3a0f \n", | |
| "3 511348 0x3ef593ec5dfb589e3885ab6d0dbd15f7ae424162 \n", | |
| "4 504676 0x0814c74769f420cdce328bfd135d39aece43ff34 \n", | |
| "5 1043747 0xa64f32a37c7b0c47cda18c97ffe24f9ecd475df5 \n", | |
| "6 518127 0x1c8282b47df5756da29ea5aa90b52d500af8ff3b \n", | |
| "7 822634 0xd8a00812c8ca66dc5b76964d511003fe07c22389 \n", | |
| "8 279434 0x0e1be58c2a16d1486f789a3bf05b9210e82e155f \n", | |
| "9 1163345 0xcdfbbd66bb9ec752bc8ca3807d88d36b51dfe382 \n", | |
| "10 836504 0x070fe7365114f6d0d4d1f718276bd95fbb8d24c1 \n", | |
| "11 5406 0x864995ef916f6ff53939607d826e5e55d545b547 \n", | |
| "12 879654 0x0c94176607615edeba72dd0f6b10c2cb628f8190 \n", | |
| "13 489775 0x655138819dd89f4190c30258e3f1e2f488aeaeab \n", | |
| "14 5494 0x50032cc3001a714dc3bd087c6e0bfc345726fa9a \n", | |
| "15 502107 0xe450652c0388120be63d440d88c49cc323ab17d1 \n", | |
| "16 898320 0x5c313ff3aea0a3d4f2635790af57f8dd0b7e3da1 \n", | |
| "17 2210 0x4e7005f97957c0b82f81546aa87a8205a2c16ecb \n", | |
| "18 790522 0xd9b1877883ca365cb203ca4cba8c327c6e1cfc54 \n", | |
| "19 1176368 0x6201411f2e0a7cce225cd97a4f00653e5e7ae820 \n", | |
| "20 1060048 0x7ce38085ecba3aaa0d98be1468ecb7ad23ccfd60 \n", | |
| "21 870424 0x17a1fb96619ca8f6d316f8550829473ce0b31d14 \n", | |
| "22 311446 0x7f4e7a101c73a9d892f3207fbce530fe512871ce \n", | |
| "23 960565 0xdbd8397254e8bac81979487600513d3405df9606 \n", | |
| "24 1112278 0x490ae5f117d3c3e01f4c0d030ef04d5597a4275a \n", | |
| "25 873707 0x0c017db514a3ea74cd23e6bbfb88be270763399b \n", | |
| "26 246458 0xe05fa130511de1776d90b420d3d6c8cf026a944e \n", | |
| "27 500808 0x0a38df44e18cd51d5ccbaba621297ea82ddc5918 \n", | |
| "28 419545 0x425534fd892225f120e638b7d63be38d8c1c2a6a \n", | |
| "29 18570 0x67ba837a3d059cf4725b1cf01f90a8d2e3042d30 \n", | |
| "30 310531 0xf8c81a2dc0dfde6d891dc65cc42880bebf0086aa \n", | |
| "31 499092 0xc7714ce72b21cc320e186caf1a243463d4a2d46c \n", | |
| "32 681148 0xbde6b8e2e9c91daeb0f0190b618783090b418752 \n", | |
| "33 548316 0xfb669f01c5c3bbeb3a69e2decb7951189960f1e9 \n", | |
| "34 1007759 0xf4258b8e17249e7374cc62ea4d64f1d2758fb966 \n", | |
| "35 1325309 0x49faf7e14e205145eaec807b0d6c3e33d83fbcf6 \n", | |
| "36 309819 0x07d87b19f20ffb307307f7aec2db5f11c4706963 \n", | |
| "37 441026 0xd57e7f9efb915c6d81f355a2a87489eb32b197b6 \n", | |
| "38 710182 0xad6870506014e401a548bfc3309fd9505abac7db \n", | |
| "39 268608 0x815126e870038b569da708e7898d1925adc1155a \n", | |
| "40 1085163 0xcc68de18ad02a1c008d2544a5717240a3ecd41df \n", | |
| "41 1114466 0x4c47039699c7cf90b0fc7784f935e73d790718ae \n", | |
| "42 809473 0xd5a3b838646e510517304d2020b76830bbcc7f08 \n", | |
| "43 21717 0xa94f4ca1843e25a042b8e92ab42649cac266f089 \n", | |
| "44 1283989 0x67d23b172a993da7879ee059a88aac4ba572ce47 \n", | |
| "45 1230116 0xc73f51c91dfd1c71b883c655e754826c64365920 \n", | |
| "46 1025420 0xd9ed8356ddbfbb8aff617a7b4db9f88a27633bbb \n", | |
| "47 256931 0xf4a8648c79b0242387b6bdc8f963873cbc6840f9 \n", | |
| "48 401035 0xf3bf12462472828f3edd3a66e897eb456333525b \n", | |
| "49 523582 0x8ca7d3f2f644ea748441b7825071c2b27d242660 \n", | |
| "\n", | |
| " Text Timestamp \n", | |
| "0 Happy Tuesday!! 2025-07-22 08:41:52 \n", | |
| "1 Eclipse attacks isolate nodes, manipulating th... 2025-06-01 16:03:20 \n", | |
| "2 ya π₯π₯ 2025-09-17 01:12:37 \n", | |
| "3 Wow 2025-04-23 10:51:54 \n", | |
| "4 Next-level 2025-09-07 17:32:23 \n", | |
| "5 Step into this channel as into a hall of echoe... 2025-08-30 09:58:12 \n", | |
| "6 Good afternoon dear friend 2025-10-01 13:19:43 \n", | |
| "7 have a good day my fren 2025-09-13 10:42:56 \n", | |
| "8 We didnβt invent the Game β We just play it be... 2025-05-31 01:22:32 \n", | |
| "9 GM 2025-08-13 16:05:43 \n", | |
| "10 pm famnn x 100 $degen 2025-04-14 23:48:54 \n", | |
| "11 great! 2025-09-06 14:58:34 \n", | |
| "12 @HUNT 2025-06-26 05:22:41 \n", | |
| "13 Efficient 2025-07-31 17:24:02 \n", | |
| "14 I will open my doors when I stop spilling it a... 2025-08-30 15:33:44 \n", | |
| "15 Clever 2025-07-17 17:46:43 \n", | |
| "16 Good job friend ππΌ 2025-07-31 04:53:06 \n", | |
| "17 checking in on Ryan 2025-05-07 01:04:34 \n", | |
| "18 γγπrenγγγγγγ¨γγγγγΎγπε¬γγγπ 2025-07-30 14:00:17 \n", | |
| "19 Lol 2025-09-24 13:23:00 \n", | |
| "20 Just painted some pixels on Monad Lisa! π¨β¨\\n\\n... 2025-08-31 04:18:47 \n", | |
| "21 Gm dear ashis 2025-08-31 07:52:39 \n", | |
| "22 GM Maryam! 2025-06-12 06:37:03 \n", | |
| "23 I love this message! It's so inspiring. 2025-09-17 05:56:34 \n", | |
| "24 Amen 2025-09-17 00:15:07 \n", | |
| "25 ChΓ©o Δi mn Ζ‘i 2025-05-28 13:00:11 \n", | |
| "26 π\\n\\nD H A N U S H K O D I\\n\\nβAt the edge of ... 2025-05-23 09:07:55 \n", | |
| "27 Marvelous 2025-07-17 19:39:23 \n", | |
| "28 so pretty buddy 2025-09-11 18:57:44 \n", | |
| "29 AI'd it up 2025-08-19 21:49:21 \n", | |
| "30 feels like decades ago in crypto years 2025-04-16 22:04:43 \n", | |
| "31 Slightly before our time. Had a 2 week job one... 2025-09-05 17:53:19 \n", | |
| "32 yo thatβs a red surya 2025-05-31 08:36:37 \n", | |
| "33 Just right 2025-06-25 17:48:29 \n", | |
| "34 Thx buddy π€π¦ 2025-04-17 17:01:47 \n", | |
| "35 How in the world did a midfielder manage to be... 2025-09-09 20:47:57 \n", | |
| "36 You too dear π« 2025-07-10 12:39:01 \n", | |
| "37 I just claimed $EGGS for eggs on 2025-08-06 02:39:56 \n", | |
| "38 Seriously 2025-09-04 18:37:57 \n", | |
| "39 Good fay to u 100 $degen 2025-04-05 05:57:37 \n", | |
| "40 Investors are betting heavily on these two com... 2025-09-27 17:04:28 \n", | |
| "41 Nothing is funny 2025-10-03 03:29:41 \n", | |
| "42 Absolutely true! Mastering derivatives can sig... 2025-04-10 22:02:00 \n", | |
| "43 The flowers are beautiful. Happy monday, my fr... 2025-04-14 03:58:47 \n", | |
| "44 Absolutely incredible π― 2025-09-05 18:41:10 \n", | |
| "45 On trust especially 2025-08-25 13:05:44 \n", | |
| "46 I don't go with the list. I vibe shop. Anythin... 2025-07-23 09:59:21 \n", | |
| "47 it is entertaining and can be educational 2025-07-05 22:06:33 \n", | |
| "48 ok banger 2025-06-06 22:25:26 \n", | |
| "49 This will 2025-09-08 18:49:00 " | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Sample 50 random rows from the filtered data\n", | |
| "sample_df = duckdb.sql(\"\"\"\n", | |
| "SELECT *\n", | |
| "FROM df\n", | |
| "ORDER BY random()\n", | |
| "LIMIT 50\n", | |
| "\"\"\").df()\n", | |
| "\n", | |
| "sample_df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 19, | |
| "id": "3l2y4n3buko", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Save the filtered dataframe to JSON\n", | |
| "output_file = 'data/casts_filtered.json'\n", | |
| "\n", | |
| "# Convert to JSON with proper datetime handling\n", | |
| "df.to_json(output_file, orient='records', date_format='iso', lines=True)" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3 (ipykernel)", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.10.12" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment