Advertisement
SportyScripter

Iris_Species

Mar 24th, 2024
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.64 KB | None | 0 0
  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. import seaborn as sns
  4.  
  5. iris_setosa_colour = "blue"
  6. iris_virginica_colour = "red"
  7. iris_versicolor_colour = "green"
  8.  
  9. df = pd.read_csv('Iris.csv')
  10.  
  11. duplicate =df.duplicated()
  12. print(duplicate)
  13.  
  14. unique = df.nunique()
  15. print(unique)
  16. # podział na grupy
  17. groups = df.groupby('Species')
  18.  
  19. # wyodrębnienie danych dla każdej grupy
  20. data = groups.get_group('Iris-setosa'), groups.get_group('Iris-versicolor'), groups.get_group('Iris-virginica')
  21. Iris_setosa_data = data[0]
  22. Iris_versicolor_data = data[1]
  23. Iris_virginica_data = data[2]
  24.  
  25. var = "Iris setosa"
  26. print(f'{var:*^100}')
  27. print(Iris_setosa_data.describe())
  28.  
  29. var = "Iris_versicolor"
  30. print(f'{var:*^100}')
  31. print(Iris_versicolor_data.describe())
  32.  
  33. var = "Iris_virginica"
  34. print(f'{var:*^100}')
  35. print(Iris_virginica_data.describe())
  36.  
  37. Iris_setosa = Iris_setosa_data.drop(columns=['Id' , 'Species'])
  38. Iris_versicolor = Iris_versicolor_data.drop(columns=['Id' , 'Species'])
  39. Iris_virginica = Iris_virginica_data.drop(columns=['Id' , 'Species'])
  40. # obliczanie korelacji
  41.  
  42. setosa_corr = Iris_setosa.corr()
  43. versicolor_corr = Iris_versicolor.corr()
  44. virginica_corr = Iris_virginica.corr()
  45.  
  46.  
  47.  
  48. # Wykresy korelacji
  49. fig, axes = plt.subplots(1, 3, figsize=(15, 5))
  50.  
  51. # Wykres korelacji dla Setosa
  52. sns.heatmap(setosa_corr, ax=axes[0], cmap='viridis', annot=True)
  53. axes[0].set_title('Setosa Correlation')
  54.  
  55. # Wykres korelacji dla Versicolor
  56. sns.heatmap(versicolor_corr, ax=axes[1], cmap='viridis', annot=True)
  57. axes[1].set_title('Versicolor Correlation')
  58.  
  59. # Wykres korelacji dla Virginica
  60. sns.heatmap(virginica_corr, ax=axes[2], cmap='viridis', annot=True)
  61. axes[2].set_title('Virginica Correlation')
  62.  
  63. plt.tight_layout()
  64. plt.show()
  65.  
  66. plt.figure(figsize=(12, 6))
  67. plt.subplot(1, 2, 1)
  68. plt.scatter(Iris_setosa['PetalLengthCm'], Iris_setosa['PetalWidthCm'], color=iris_versicolor_colour, label='Iris Versicolor')
  69. plt.scatter(Iris_versicolor['PetalLengthCm'], Iris_versicolor['PetalWidthCm'], color=iris_virginica_colour, label='Iris Virginica')
  70. plt.scatter(Iris_virginica['PetalLengthCm'], Iris_virginica['PetalWidthCm'], color=iris_setosa_colour, label='Iris Setosa')
  71. plt.xlabel('Petal Length (cm)')
  72. plt.ylabel('Petal Width (cm)')
  73. plt.title('Petal Length vs Petal Width')
  74. plt.legend()
  75.  
  76. plt.subplot(1, 2, 2)
  77. plt.scatter(Iris_setosa['SepalLengthCm'], Iris_setosa['SepalWidthCm'], color=iris_versicolor_colour, label='Iris Versicolor')
  78. plt.scatter(Iris_versicolor['SepalLengthCm'], Iris_versicolor['SepalWidthCm'], color=iris_virginica_colour, label='Iris Virginica')
  79. plt.scatter(Iris_virginica['SepalLengthCm'], Iris_virginica['SepalWidthCm'], color=iris_setosa_colour, label='Iris Setosa')
  80. plt.xlabel('Sepal Length (cm)')
  81. plt.ylabel('Sepal Width (cm)')
  82. plt.title('Sepal Length vs Sepal Width')
  83. plt.legend()
  84. plt.show()
  85.  
  86.  
  87. plt.figure(figsize=(12, 6))
  88.  
  89. # Petal Length
  90. plt.subplot(1, 2, 1)
  91. plt.hist(x=Iris_versicolor['PetalLengthCm'], bins=10, label='Iris Versicolor', color='blue', alpha=0.5, density=True, orientation='vertical')
  92. plt.hist(x=Iris_setosa['PetalLengthCm'], bins=10, label='Iris Setosa', color='green', alpha=0.5, density=True, orientation='vertical')
  93. plt.hist(x=Iris_virginica['PetalLengthCm'], bins=10, label='Iris Virginica', color='red', alpha=0.5, density=True, orientation='vertical')
  94. plt.xlabel('Petal Length (cm)')
  95. plt.ylabel('Density')
  96. plt.title('Petal Length Distribution')
  97. plt.legend()
  98.  
  99. # Petal Width
  100. plt.subplot(1, 2, 2)
  101. plt.hist(Iris_versicolor['PetalWidthCm'], bins=10, label='Iris Versicolor', color='blue', alpha=0.5, density=True, orientation='vertical')
  102. plt.hist(Iris_setosa['PetalWidthCm'], bins=10, label='Iris Setosa', color='green', alpha=0.5, density=True, orientation='vertical')
  103. plt.hist(Iris_virginica['PetalWidthCm'], bins=10, label='Iris Virginica', color='red', alpha=0.5, density=True, orientation='vertical')
  104. plt.xlabel('Petal Width (cm)')
  105. plt.ylabel('Density')
  106. plt.title('Petal Width Distribution')
  107. plt.legend()
  108.  
  109.  
  110. plt.tight_layout()
  111. plt.show()
  112.  
  113. plt.figure(figsize=(12, 6))
  114. # Petal Width
  115. plt.subplot(1, 2, 2)
  116. plt.hist(Iris_versicolor['SepalWidthCm'], bins=10, label='Iris Versicolor', color='blue', alpha=0.5, density=True)
  117. plt.hist(Iris_setosa['SepalWidthCm'], bins=10, label='Iris Setosa', color='green', alpha=0.5, density=True)
  118. plt.hist(Iris_virginica['SepalWidthCm'], bins=10, label='Iris Virginica', color='red', alpha=0.5, density=True)
  119. plt.xlabel('Sepal Width (cm)')
  120. plt.ylabel('Density')
  121. plt.title('Sepal Width Distribution')
  122. plt.legend()
  123.  
  124. # Petal Length
  125. plt.subplot(1, 2, 1)
  126. plt.hist(Iris_versicolor['SepalLengthCm'], bins=10, label='Iris Versicolor', color='blue', alpha=0.5, density=True)
  127. plt.hist(Iris_setosa['SepalLengthCm'], bins=10, label='Iris Setosa', color='green', alpha=0.5, density=True)
  128. plt.hist(Iris_virginica['SepalLengthCm'], bins=10, label='Iris Virginica', color='red', alpha=0.5, density=True)
  129. plt.xlabel('Sepal Length (cm)')
  130. plt.ylabel('Density')
  131. plt.title('Sepal Length Distribution')
  132. plt.legend()
  133.  
  134.  
  135.  
  136. plt.tight_layout()
  137. plt.show()
  138.  
  139. # Box plots
  140. plt.figure(figsize=(15, 5))
  141. plt.subplot(1, 3, 1)
  142. sns.boxplot(x='Species', y='PetalWidthCm', data=df)
  143. plt.title('Petal Width')
  144.  
  145. plt.subplot(1, 3, 2)
  146. sns.boxplot(x='Species', y='SepalLengthCm', data=df)
  147. plt.title('Sepal Length')
  148.  
  149. plt.subplot(1, 3, 3)
  150. sns.boxplot(x='Species', y='SepalWidthCm', data=df)
  151. plt.title('Sepal Width')
  152.  
  153. plt.tight_layout()
  154. plt.show()
  155.  
  156. # sepal - kielich
  157. # petal - płatek
  158. # Wnioski:
  159. # Iris Setosa:
  160. # - Najmniniejsze kielichy ale za to najszersze
  161. # - średnia długości kielicha : 5.0 cm
  162. # - średnia szerokości kielicha : 3.4 cm
  163. # - średnia długości płatka : 1.46 cm
  164. # - średnia szerokości płatka : 0.24 cm
  165. #
  166. # Iris Versicolor:
  167. # - średnia długości kielicha : 5.9 cm
  168. # - średnia szerokości kielicha : 2.77 cm
  169. # - średnia długości płatka : 4.26 cm
  170. # - średnia szerokości płatka : 1.33 cm
  171.  
  172. # Iris Virginica:
  173. # - Największe kielichy
  174. # - średnia długości kielicha : 6.6 cm
  175. # - średnia szerokości kielicha : 2.97 cm
  176. # Najdłuższe płatki
  177. # - średnia długości płatka : 5.55 cm
  178. # - średnia szerokości płatka : 2.03 cm
  179. #
  180. # Corellation:
  181. # Iris Setosa: Największa korrelacja występuje pomiędzy szerokościa kielicha a długością kielicha (0,75)
  182. # Iris Vesicolor: Najwieksza korrelacja występuje pomiędzy dlugościa płatka a szerokością płatka (0,79),
  183. # oraz pomiędzy dlugością płatka a długością kielicha (0,75)
  184. # Iris Virginica: Największa korrelacja występuje pomiędzy długością płatka a długością kielicha (0,86)
  185. #
  186. # Scatter plot:
  187. # Petal Lenght vs Petal Width: Dla każdego gatunku można zauważyć wyrażne podziały pomiędzy poszczególnymi gatunkami dane są w miarę dobrze oddzielone
  188. # Sepal Lenght vs Sepal Width: Dla gatunku Iris Setosa i Iris Virginica można zauważyć wyraźne podobieństwo, ich dane są wmiare zgrupowane i wymieszane ze sobą
  189.  
  190. # Histogram:
  191. # Petal Lenght: Dla każdego gatunku można zauważyć wyraźne podziały pomiędzy poszczególnymi gatunkami dane są w miarę dobrze oddzielone
  192. # Petal Width: Dla każdego gatunku można zauważyć wyraźne podziały pomiędzy poszczególnymi gatunkami dane są w miarę dobrze oddzielone
  193. # Spepal Lenght: Widać znaczne podobieństwo pomiędzy Iris Virginica a Iris Versicolor
  194. # Sepal Width: Irisi Versicolor i Iris Setosa znacznie sie różnią od siebie, natomiast Iris Virginica jest zbliżona do obydwu gatunków ale najbardziej do Iris Vesicolor
  195.  
  196.  
  197. # Test and Learn
  198.  
  199. # Dla każdego gatunku wyodrębniamy dane do nauki i testowania
  200. from sklearn.model_selection import train_test_split
  201.  
  202. # Podział dla Iris setosa
  203. X_setosa = Iris_setosa_data.drop(columns=['Species'])
  204. y_setosa = Iris_setosa_data['Species']
  205. X_train_setosa, X_test_setosa, y_train_setosa, y_test_setosa = train_test_split(X_setosa, y_setosa, test_size=0.2, random_state=42)
  206.  
  207. # Podział dla Iris versicolor
  208. X_versicolor = Iris_versicolor_data.drop(columns=['Species'])
  209. y_versicolor = Iris_versicolor_data['Species']
  210. X_train_versicolor, X_test_versicolor, y_train_versicolor, y_test_versicolor = train_test_split(X_versicolor, y_versicolor, test_size=0.2, random_state=42)
  211.  
  212. # Podział dla Iris virginica
  213. X_virginica = Iris_virginica_data.drop(columns=['Species'])
  214. y_virginica = Iris_virginica_data['Species']
  215. X_train_virginica, X_test_virginica, y_train_virginica, y_test_virginica = train_test_split(X_virginica, y_virginica, test_size=0.2, random_state=42)
  216.  
  217.  
  218.  
  219.  
  220.  
  221. # Podział na cechy (X) i etykiety (y)
  222. X_all = df.drop(columns=['Species'])
  223. y_all = df['Species']
  224.  
  225. # Podział danych na zbiory uczące i testujące
  226. X_train_all, X_test_all, y_train_all, y_test_all = train_test_split(X_all, y_all, test_size=0.2, random_state=42)
  227.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement