198 KiB
Raw Permalink Blame History

Использованный датасет - Заработная плата рабочих мест в области Data Science - https://www.kaggle.com/datasets/henryshan/2023-data-scientists-salary?resource=download

In [2]:
import pandas as pd
import matplotlib.pyplot as plt

# Загрузка данных
file_path = 'data/Diamonds Prices2022.csv'
data = pd.read_csv(file_path)

# 1.1 Загрузка и сохранение данных
print("Загруженные данные:")
print(data.head())

# Сохранение данных в новый файл
output_file = 'data/Diamonds_Prices2022_processed.csv'
data.to_csv(output_file, index=False)
print(f"Данные сохранены в {output_file}")

# 1.2 Получение сведений о датафрейме
print("\nИнформация о датафрейме:")
data.info()

# 1.3 Получение сведений о колонках
print("\nНазвания колонок:", data.columns.tolist())

# 1.4 Вывод отдельных строк и столбцов
print("\nВывод первых 5 строк столбца 'cut':")
print(data['cut'].head())

print("\nВывод строк с 10 по 15:")
print(data.iloc[10:15])

# 1.5 Группировка и агрегация данных
print("\nСредняя цена по качеству огранки (cut):")
print(data.groupby("cut")["price"].mean())

# 1.6 Сортировка данных
print("\nСортировка данных по цене:")
sorted_data = data.sort_values(by='price', ascending=False)
print(sorted_data.head())

# 1.7 Удаление строк/столбцов
print("\nУдаление столбца 'x' (если он не нужен):")
# Убедитесь, что столбец 'x' существует в данных
if 'x' in data.columns:
    data_without_x = data.drop(columns=['x'], errors='ignore')
    print(data_without_x.head())
else:
    print("Столбец 'x' не найден в данных.")

# 1.8 Создание новых столбцов
print("\nДобавление нового столбца 'volume' (объем):")
# Убедитесь, что столбцы 'x', 'y' и 'z' существуют
if {'x', 'y', 'z'}.issubset(data.columns):
    data['volume'] = data['x'] * data['y'] * data['z']
    print(data.head())
else:
    print("Не все столбцы для вычисления объема ('x', 'y', 'z') присутствуют в данных.")

# 1.9 Удаление строк с пустыми значениями
print("\nУдаление строк с пустыми значениями:")
cleaned_data = data.dropna()
print(cleaned_data.head())

# 1.10 Заполнение пустых значений медианой
print("\nЗаполнение пустых значений медианой:")
data_filled = data.fillna(data.median(numeric_only=True))
print(data_filled.head())
Загруженные данные:
   Unnamed: 0  carat      cut color clarity  depth  table  price     x     y  \
0           1   0.23    Ideal     E     SI2   61.5   55.0    326  3.95  3.98   
1           2   0.21  Premium     E     SI1   59.8   61.0    326  3.89  3.84   
2           3   0.23     Good     E     VS1   56.9   65.0    327  4.05  4.07   
3           4   0.29  Premium     I     VS2   62.4   58.0    334  4.20  4.23   
4           5   0.31     Good     J     SI2   63.3   58.0    335  4.34  4.35   

      z  
0  2.43  
1  2.31  
2  2.31  
3  2.63  
4  2.75  
Данные сохранены в data/Diamonds_Prices2022_processed.csv

Информация о датафрейме:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 53943 entries, 0 to 53942
Data columns (total 11 columns):
 #   Column      Non-Null Count  Dtype  
---  ------      --------------  -----  
 0   Unnamed: 0  53943 non-null  int64  
 1   carat       53943 non-null  float64
 2   cut         53943 non-null  object 
 3   color       53943 non-null  object 
 4   clarity     53943 non-null  object 
 5   depth       53943 non-null  float64
 6   table       53943 non-null  float64
 7   price       53943 non-null  int64  
 8   x           53943 non-null  float64
 9   y           53943 non-null  float64
 10  z           53943 non-null  float64
dtypes: float64(6), int64(2), object(3)
memory usage: 4.5+ MB

Названия колонок: ['Unnamed: 0', 'carat', 'cut', 'color', 'clarity', 'depth', 'table', 'price', 'x', 'y', 'z']

Вывод первых 5 строк столбца 'cut':
0      Ideal
1    Premium
2       Good
3    Premium
4       Good
Name: cut, dtype: object

Вывод строк с 10 по 15:
    Unnamed: 0  carat      cut color clarity  depth  table  price     x     y  \
10          11   0.30     Good     J     SI1   64.0   55.0    339  4.25  4.28   
11          12   0.23    Ideal     J     VS1   62.8   56.0    340  3.93  3.90   
12          13   0.22  Premium     F     SI1   60.4   61.0    342  3.88  3.84   
13          14   0.31    Ideal     J     SI2   62.2   54.0    344  4.35  4.37   
14          15   0.20  Premium     E     SI2   60.2   62.0    345  3.79  3.75   

       z  
10  2.73  
11  2.46  
12  2.33  
13  2.71  
14  2.27  

Средняя цена по качеству огранки (cut):
cut
Fair         4358.757764
Good         3928.864452
Ideal        3457.541970
Premium      4583.992605
Very Good    3981.658529
Name: price, dtype: float64

Сортировка данных по цене:
       Unnamed: 0  carat        cut color clarity  depth  table  price     x  \
27749       27750   2.29    Premium     I     VS2   60.8   60.0  18823  8.50   
27748       27749   2.00  Very Good     G     SI1   63.5   56.0  18818  7.90   
27747       27748   1.51      Ideal     G      IF   61.7   55.0  18806  7.37   
27746       27747   2.07      Ideal     G     SI2   62.5   55.0  18804  8.20   
27745       27746   2.00  Very Good     H     SI1   62.8   57.0  18803  7.95   

          y     z  
27749  8.47  5.16  
27748  7.97  5.04  
27747  7.41  4.56  
27746  8.13  5.11  
27745  8.00  5.01  

Удаление столбца 'x' (если он не нужен):
   Unnamed: 0  carat      cut color clarity  depth  table  price     y     z
0           1   0.23    Ideal     E     SI2   61.5   55.0    326  3.98  2.43
1           2   0.21  Premium     E     SI1   59.8   61.0    326  3.84  2.31
2           3   0.23     Good     E     VS1   56.9   65.0    327  4.07  2.31
3           4   0.29  Premium     I     VS2   62.4   58.0    334  4.23  2.63
4           5   0.31     Good     J     SI2   63.3   58.0    335  4.35  2.75

Добавление нового столбца 'volume' (объем):
   Unnamed: 0  carat      cut color clarity  depth  table  price     x     y  \
0           1   0.23    Ideal     E     SI2   61.5   55.0    326  3.95  3.98   
1           2   0.21  Premium     E     SI1   59.8   61.0    326  3.89  3.84   
2           3   0.23     Good     E     VS1   56.9   65.0    327  4.05  4.07   
3           4   0.29  Premium     I     VS2   62.4   58.0    334  4.20  4.23   
4           5   0.31     Good     J     SI2   63.3   58.0    335  4.34  4.35   

      z     volume  
0  2.43  38.202030  
1  2.31  34.505856  
2  2.31  38.076885  
3  2.63  46.724580  
4  2.75  51.917250  

Удаление строк с пустыми значениями:
   Unnamed: 0  carat      cut color clarity  depth  table  price     x     y  \
0           1   0.23    Ideal     E     SI2   61.5   55.0    326  3.95  3.98   
1           2   0.21  Premium     E     SI1   59.8   61.0    326  3.89  3.84   
2           3   0.23     Good     E     VS1   56.9   65.0    327  4.05  4.07   
3           4   0.29  Premium     I     VS2   62.4   58.0    334  4.20  4.23   
4           5   0.31     Good     J     SI2   63.3   58.0    335  4.34  4.35   

      z     volume  
0  2.43  38.202030  
1  2.31  34.505856  
2  2.31  38.076885  
3  2.63  46.724580  
4  2.75  51.917250  

Заполнение пустых значений медианой:
   Unnamed: 0  carat      cut color clarity  depth  table  price     x     y  \
0           1   0.23    Ideal     E     SI2   61.5   55.0    326  3.95  3.98   
1           2   0.21  Premium     E     SI1   59.8   61.0    326  3.89  3.84   
2           3   0.23     Good     E     VS1   56.9   65.0    327  4.05  4.07   
3           4   0.29  Premium     I     VS2   62.4   58.0    334  4.20  4.23   
4           5   0.31     Good     J     SI2   63.3   58.0    335  4.34  4.35   

      z     volume  
0  2.43  38.202030  
1  2.31  34.505856  
2  2.31  38.076885  
3  2.63  46.724580  
4  2.75  51.917250  
In [4]:
import pandas as pd
import matplotlib.pyplot as plt

# Загрузка данных
file_path = 'data/Diamonds Prices2022.csv'
data = pd.read_csv(file_path)

# 2.1 Линейная диаграмма (Средняя цена по качеству огранки)
plt.figure(figsize=(10, 5))
data.groupby("cut")["price"].mean().plot(
    kind="line", title="Средняя цена по качеству огранки"
)
plt.ylabel("Средняя цена")
plt.show()

# 2.2 Столбчатая диаграмма (Количество бриллиантов по качеству огранки)
plt.figure(figsize=(10, 5))
data["cut"].value_counts().plot(
    kind="bar", title="Количество бриллиантов по качеству огранки"
)
plt.ylabel("Количество бриллиантов")
plt.show()

# 2.3 Гистограмма (Распределение цен)
plt.figure(figsize=(10, 5))
data["price"].plot(kind="hist", bins=20, title="Распределение цен на бриллианты")
plt.xlabel("Цена")
plt.show()

# 2.4 Ящик с усами (Распределение цен по качеству огранки)
plt.figure(figsize=(10, 5))
data.boxplot(column="price", by="cut", grid=False, rot=90)
plt.title("Распределение цен по качеству огранки")
plt.suptitle("")
plt.ylabel("Цена")
plt.show()

# 2.5 Диаграмма с областями (Средняя цена по качеству огранки)
plt.figure(figsize=(10, 5))
data.groupby("cut")["price"].mean().plot(
    kind="area", title="Средняя цена по качеству огранки"
)
plt.ylabel("Средняя цена")
plt.show()

# 2.6 Диаграмма рассеяния (Цена vs. Объем)
plt.figure(figsize=(10, 5))
plt.scatter(data['price'], data['volume'], alpha=0.5)
plt.title('Диаграмма рассеяния: Цена vs Объем')
plt.xlabel('Цена')
plt.ylabel('Объем (x * y * z)')
plt.show()

# 2.7 Круговая диаграмма (Распределение огранок)
plt.figure(figsize=(10, 5))
data["cut"].value_counts().plot(
    kind="pie", title="Распределение огранок", autopct="%1.1f%%"
)
plt.ylabel("")
plt.show()
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
<Figure size 1000x500 with 0 Axes>
No description has been provided for this image
No description has been provided for this image
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\pandas\core\indexes\base.py:3805, in Index.get_loc(self, key)
   3804 try:
-> 3805     return self._engine.get_loc(casted_key)
   3806 except KeyError as err:

File index.pyx:167, in pandas._libs.index.IndexEngine.get_loc()

File index.pyx:196, in pandas._libs.index.IndexEngine.get_loc()

File pandas\\_libs\\hashtable_class_helper.pxi:7081, in pandas._libs.hashtable.PyObjectHashTable.get_item()

File pandas\\_libs\\hashtable_class_helper.pxi:7089, in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'volume'

The above exception was the direct cause of the following exception:

KeyError                                  Traceback (most recent call last)
Cell In[4], line 48
     46 # 2.6 Диаграмма рассеяния (Цена vs. Объем)
     47 plt.figure(figsize=(10, 5))
---> 48 plt.scatter(data['price'], data['volume'], alpha=0.5)
     49 plt.title('Диаграмма рассеяния: Цена vs Объем')
     50 plt.xlabel('Цена')

File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\pandas\core\frame.py:4090, in DataFrame.__getitem__(self, key)
   4088 if self.columns.nlevels > 1:
   4089     return self._getitem_multilevel(key)
-> 4090 indexer = self.columns.get_loc(key)
   4091 if is_integer(indexer):
   4092     indexer = [indexer]

File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\pandas\core\indexes\base.py:3812, in Index.get_loc(self, key)
   3807     if isinstance(casted_key, slice) or (
   3808         isinstance(casted_key, abc.Iterable)
   3809         and any(isinstance(x, slice) for x in casted_key)
   3810     ):
   3811         raise InvalidIndexError(key)
-> 3812     raise KeyError(key) from err
   3813 except TypeError:
   3814     # If we have a listlike key, _check_indexing_error will raise
   3815     #  InvalidIndexError. Otherwise we fall through and re-raise
   3816     #  the TypeError.
   3817     self._check_indexing_error(key)

KeyError: 'volume'
<Figure size 1000x500 with 0 Axes>
In [ ]: