θα προχωρήσουμε σε στατιστική ανάλυση των δεδομένων.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import norm
from sklearn.decomposition import PCA
# Τα δεδομένα
data = [
[7, 9, 15, 27, 35],
[6, 7, 11, 20, 31],
[11, 22, 27, 32, 34],
[2, 5, 16, 21, 35],
[1, 10, 11, 18, 23],
[9, 17, 22, 23, 29],
[11, 15, 16, 20, 25],
[6, 14, 15, 29, 33],
[2, 3, 5, 8, 24],
[3, 10, 13, 16, 18],
[4, 5, 9, 11, 13],
[6, 11, 12, 29, 34],
[12, 15, 23, 24, 35],
[2, 25, 27, 29, 35],
[4, 23, 25, 31, 35],
]
# Δημιουργία DataFrame
df = pd.DataFrame(data, columns=["A", "B", "C", "D", "E"])
# Υπολογισμός στατιστικών για κάθε γραμμή
stats = df.apply(
lambda row: pd.Series({
"Mean": row.mean(),
"Median": row.median(),
"Standard Deviation": row.std(),
"Range": row.max() - row.min(),
"Minimum": row.min(),
"Maximum": row.max()
}),
axis=1
)
# Εκτύπωση αποτελεσμάτων στατιστικών
print("Στατιστικά στοιχεία για κάθε γραμμή:")
print(stats)
# Λειτουργία για την εύρεση κοινών αριθμών μεταξύ δύο γραμμών
def common_numbers_count(row1, row2):
return len(set(row1).intersection(set(row2)))
# Υπολογισμός του αριθμού κοινών αριθμών για κάθε ζεύγος γραμμών
max_common_count = 0
pairs_with_max_common = []
for i in range(len(data)):
for j in range(i + 1, len(data)):
common_count = common_numbers_count(data[i], data[j])
if common_count > max_common_count:
max_common_count = common_count
pairs_with_max_common = [(i, j)]
elif common_count == max_common_count:
pairs_with_max_common.append((i, j))
# Εκτύπωση αποτελεσμάτων κοινών αριθμών
print(f"\nΠλήθος γραμμών: {len(data)}")
print(f"\nΖεύγη γραμμών με τον μέγιστο αριθμό κοινών αριθμών ({max_common_count}):")
for pair in pairs_with_max_common:
print(f"Γραμμή {pair[0] + 1} και Γραμμή {pair[1] + 1}")
# Δημιουργία DataFrame
df = pd.DataFrame(data, columns=["A", "B", "C", "D", "E"])
# Λειτουργία για τον υπολογισμό του Runs Test
def runs_test(arr):
n1 = n2 = runs = 0
n = len(arr)
median = np.median(arr)
for i in range(n):
if arr.iloc[i] > median:
n1 += 1
else:
n2 += 1
runs = 1
for i in range(1, n):
if (arr.iloc[i] > median) != (arr.iloc[i - 1] > median):
runs += 1
expected_runs = ((2 * n1 * n2) / n) + 1
std_runs = np.sqrt((2 * n1 * n2 * (2 * n1 * n2 - n)) / (n ** 2 * (n - 1)))
z = (runs - expected_runs) / std_runs
return z, norm.cdf(z)
# Ανάλυση τυχαιότητας για κάθε γραμμή
randomness_results = df.apply(runs_test, axis=1)
# Δημιουργία DataFrame για την παρουσίαση των αποτελεσμάτων
randomness_df = pd.DataFrame(randomness_results.tolist(), columns=["Z-score", "P-value"])
# Αναλυτική εκτύπωση των αποτελεσμάτων τυχαιότητας
print("\nΑποτελέσματα Τεστ Τυχαιότητας:")
for index, row in randomness_df.iterrows():
print(f"Γραμμή {index + 1}:")
print(f" Z-score: {row['Z-score']}")
print(f" P-value: {row['P-value']}")
if row['P-value'] < 0.05:
print(f" Συμπέρασμα: Απορρίπτουμε την υπόθεση της τυχαιότητας (P-value < 0.05)")
else:
print(f" Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)")
print("")
# Συνολική ανάλυση των αποτελεσμάτων
non_random_lines = randomness_df[randomness_df['P-value'] < 0.05]
if non_random_lines.empty:
print("Συμπέρασμα: Όλες οι γραμμές φαίνεται να είναι τυχαίες.")
else:
print("Συμπέρασμα: Οι παρακάτω γραμμές δεν είναι τυχαίες (P-value < 0.05):")
for index, row in non_random_lines.iterrows():
print(f" Γραμμή {index + 1} με P-value: {row['P-value']}")
# Δημιουργία DataFrame
df = pd.DataFrame(data, columns=["A", "B", "C", "D", "E"])
# Εφαρμογή PCA
pca = PCA(n_components=2)
principal_components = pca.fit_transform(df)
# Δημιουργία DataFrame για τα κύρια συστατικά
principal_df = pd.DataFrame(data=principal_components, columns=["Principal Component 1", "Principal Component 2"])
# Οπτικοποίηση αποτελεσμάτων
plt.figure(figsize=(8, 6))
plt.scatter(principal_df["Principal Component 1"], principal_df["Principal Component 2"], c='blue')
plt.title('PCA των Δεδομένων')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.grid()
plt.show()
# Εκτύπωση εξήγησης διακύμανσης
explained_variance = pca.explained_variance_ratio_
print("Εξήγηση Διακύμανσης από τα κύρια συστατικά:")
print(f"Principal Component 1: {explained_variance[0] * 100:.2f}%")
print(f"Principal Component 2: {explained_variance[1] * 100:.2f}%")
import matplotlib.pyplot as plt
import seaborn as sns
# Scatter Plot των Πρώτων Δύο Κυρίων Συνιστωσών
plt.figure(figsize=(8, 6))
plt.scatter(principal_df["Principal Component 1"], principal_df["Principal Component 2"], c='blue')
plt.title('PCA των Δεδομένων')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.grid()
plt.show()
# Box Plot για Κάθε Μεταβλητή
plt.figure(figsize=(10, 6))
sns.boxplot(data=df)
plt.title('Box Plot των Μεταβλητών')
plt.show()
# Υπολογισμός Συντελεστών Συσχέτισης
correlation_matrix = df.corr()
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('Πίνακας Συσχέτισης των Μεταβλητών')
plt.show()
ΑΠΟΤΕΛΕΣΜΑΤΑ
Στατιστικά στοιχεία για κάθε γραμμή:
Mean Median Standard Deviation Range Minimum Maximum
0 18.6 15.0 12.033287 28.0 7.0 35.0
1 15.0 11.0 10.511898 25.0 6.0 31.0
2 25.2 27.0 9.203260 23.0 11.0 34.0
3 15.8 16.0 13.255188 33.0 2.0 35.0
4 12.6 11.0 8.384510 22.0 1.0 23.0
5 20.0 22.0 7.483315 20.0 9.0 29.0
6 17.4 16.0 5.319774 14.0 11.0 25.0
7 19.4 15.0 11.238327 27.0 6.0 33.0
8 8.4 5.0 9.016651 22.0 2.0 24.0
9 12.0 13.0 5.873670 15.0 3.0 18.0
10 8.4 9.0 3.847077 9.0 4.0 13.0
11 18.4 12.0 12.300406 28.0 6.0 34.0
12 21.8 23.0 8.983318 23.0 12.0 35.0
13 23.6 27.0 12.641202 33.0 2.0 35.0
14 23.6 25.0 11.949895 31.0 4.0 35.0
Πλήθος γραμμών: 15
Ζεύγη γραμμών με τον μέγιστο αριθμό κοινών αριθμών (2):
Γραμμή 1 και Γραμμή 13
Γραμμή 1 και Γραμμή 14
Γραμμή 2 και Γραμμή 7
Γραμμή 2 και Γραμμή 12
Γραμμή 3 και Γραμμή 12
Γραμμή 4 και Γραμμή 9
Γραμμή 4 και Γραμμή 14
Γραμμή 5 και Γραμμή 10
Γραμμή 8 και Γραμμή 12
Γραμμή 13 και Γραμμή 15
Γραμμή 14 και Γραμμή 15
Αποτελέσματα Τεστ Τυχαιότητας:
Γραμμή 1:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 2:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 3:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 4:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 5:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 6:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 7:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 8:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 9:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 10:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 11:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 12:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 13:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 14:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Γραμμή 15:
Z-score: -1.5275252316519465
P-value: 0.06331522897380863
Συμπέρασμα: Δεν απορρίπτουμε την υπόθεση της τυχαιότητας (P-value >= 0.05)
Συμπέρασμα: Όλες οι γραμμές φαίνεται να είναι τυχαίες.
Εξήγηση Διακύμανσης από τα κύρια συστατικά:
Principal Component 1: 75.17%
Principal Component 2: 14.66%