

ISS_Tracking/
│
└── iss_tracking.py

pip install requests pandas matplotlib

iss_tracking.py

import requests
import pandas as pd
import matplotlib.pyplot as plt
import time
from datetime import datetime
import csv

# ISS API URL
url = "http://api.open-notify.org/iss-now.json"

# CSV file name
filename = "iss_location.csv"

# Store 100 records
records = []

print("ISS Location Tracking Started")

while len(records) < 100:

    try:

        # Send request to API
        response = requests.get(url, timeout=15)

        # Check response
        response.raise_for_status()

        data = response.json()

        if data["message"] != "success":
            print("API request unsuccessful")
            time.sleep(5)
            continue

        # Extract latitude and longitude
        latitude = float(data["iss_position"]["latitude"])
        longitude = float(data["iss_position"]["longitude"])

        # Convert timestamp into readable time
        timestamp = datetime.fromtimestamp(
            data["timestamp"]
        )

        # Store record
        record = {
            "Time": timestamp,
            "Latitude": latitude,
            "Longitude": longitude
        }

        records.append(record)

        print("\nRecord:", len(records))
        print("Time:", timestamp)
        print("Latitude:", latitude)
        print("Longitude:", longitude)

        # Wait for 5 seconds
        if len(records) < 100:
            time.sleep(5)

    except requests.exceptions.RequestException as e:
        print("Connection Error:", e)
        time.sleep(5)

    except (KeyError, ValueError) as e:
        print("Invalid API data:", e)
        time.sleep(5)


# Convert records into DataFrame
df = pd.DataFrame(records)

# Save data into CSV file
df.to_csv(filename, index=False)

print("\n100 ISS location records saved successfully!")

# Display first five records
print("\nFirst 5 Records:")
print(df.head())

# Analyze latitude and longitude
print("\nLatitude Analysis:")
print(df["Latitude"].describe())

print("\nLongitude Analysis:")
print(df["Longitude"].describe())

# Additional analysis
print("\nAverage Latitude:", df["Latitude"].mean())
print("Average Longitude:", df["Longitude"].mean())

print("Maximum Latitude:", df["Latitude"].max())
print("Minimum Latitude:", df["Latitude"].min())

print("Maximum Longitude:", df["Longitude"].max())
print("Minimum Longitude:", df["Longitude"].min())


# Plot Latitude vs Time
plt.figure(figsize=(10, 5))

plt.plot(
    df["Time"],
    df["Latitude"],
    marker="o"
)

plt.title("ISS Latitude vs Time")
plt.xlabel("Time")
plt.ylabel("Latitude")
plt.xticks(rotation=45)
plt.grid(True)
plt.tight_layout()
plt.show()


# Plot Longitude vs Time
plt.figure(figsize=(10, 5))

plt.plot(
    df["Time"],
    df["Longitude"],
    marker="o"
)

plt.title("ISS Longitude vs Time")
plt.xlabel("Time")
plt.ylabel("Longitude")
plt.xticks(rotation=45)
plt.grid(True)
plt.tight_layout()
plt.show()

print("\nISS Tracking Completed!")
