По сравнению с 《Использование Python для анализа данных》, основной особенностью этой книги является то, что все операции были разбиты на отдельные действия, и каждое из них подробно объясняется. Однако текст немного многословен, а в Jupyter Notebook есть некоторые ошибки. Я объединил и обобщил их.
После первого редактирования всё ещё остаётся много недостатков, которые необходимо исправить.
Автор Theodore Petrou, основатель Dunder Data
Сайт компании: http://www.dunderdata.com (dunder — это жидкость, которая остаётся после дистилляции рома, название выбрано по аналогии с процессом анализа данных). Адрес GitHub: https://github.com/tdpetrou. Личная страница на LinkedIn: https://www.linkedin.com/in/tedpetrou. Твиттер: https://twitter.com/tedpetrou?lang=en. Блог на Medium: https://medium.com/@petrou.theodore.
# Импорт pandas и numpy по соглашению
in[1]: import pandas as pd
import numpy as np
# Установка максимального количества столбцов и строк
in[2]: pd.set_option('max_columns', 8, 'max_rows', 10)
# Чтение csv-файла с помощью метода read_csv()
# Метод head() позволяет просмотреть первые пять строк, head(n) — первые n строк
in[3]: movie = pd.read_csv('data/movie.csv')
movie.head()
out[3]:
in[4]: # Извлечение индекса столбцов
columns = movie.columns
# Извлечение индекса строк
index = movie.index
# Извлечение данных
data = movie.values
in[5]: columns
out[5]: Index(['color', 'director_name', 'num_critic_for_reviews', 'duration',
'director_facebook_likes', 'actor_3_facebook_likes', 'actor_2_name',
'actor_1_facebook_likes', 'gross', 'genres', 'actor_1_name',
'movie_title', 'num_voted_users', 'cast_total_facebook_likes',
'actor_3_name', 'facenumber_in_poster', 'plot_keywords',
'movie_imdb_link', 'num_user_for_reviews', 'language', 'country',
'content_rating', 'budget', 'title_year', 'actor_2_facebook_likes',
'imdb_score', 'aspect_ratio', 'movie_facebook_likes'],
dtype='object')
in[6]: index
out[6]: RangeIndex(start=0, stop=4916, step=1)
in[7]: data
out[7]: array([['Color', 'James Cameron', 723.0, ..., 7.9, 1.78, 33000],
['Color', 'Gore Verbinski', 302.0, ..., 7.1, 2.35, 0],
['Color', 'Sam Mendes', 602.0, ..., 6.8, 2.35, 85000],
...,
['Color', 'Benjamin Roberds', 13.0, ..., 6.3, nan, 16],
['Color', 'Daniel Hsia', 14.0, ..., 6.3, 2.35, 660],
['Color', 'Jon Gunn', 43.0, ..., 6.6, 1.85, 456]], dtype=object)
in[8]: # Тип индекса
type(index) # pandas.core.indexes.range.RangeIndex
out[8]: pandas.core.indexes.range.RangeIndex
in[9]: # Тип столбцов
type(columns) # pandas.core.indexes.base.Index
out[9]: pandas.core.indexes.base.Index
in[10]: # Тип данных
type(data) # numpy.ndarray
out[10]: numpy.ndarray
in[11]: # Проверка на подтип
issubclass(pd.RangeIndex, pd.Index) # True
out[11]: True
in[12]: # Доступ к значениям индекса
index.values
# Значения индекса представляют собой список, поэтому можно индексировать или нарезать
index.values[0]
out[12]: array([ 0, 1, 2, ..., 4913, 4914, 4915])
in[13]: # Доступ к значениям столбцов
columns.values
out[13]: array(['color', 'director_name', 'num_critic_for_reviews', 'duration',
'director_facebook_likes', 'actor_3_facebook_likes', 'actor_2_name',
'actor_1_facebook_likes', 'gross', 'genres', 'actor_1_name',
'movie_title', 'num_voted_users', 'cast_total_facebook_likes',
'actor_3_name', 'facenumber_in_poster', 'plot_keywords',
'movie_imdb_link', 'num_user_for_reviews', 'language', 'country',
'content_rating', 'budget', 'title_year', 'actor_2_facebook_likes',
'imdb_score', 'aspect_ratio', 'movie_facebook_likes'], dtype=object)
in[14]: movie = pd.read_csv('data/movie.csv')
# Типы каждой колонки
in[15]: movie.dtypes
out[15]: color object
director_name object
num_critic_for_reviews float64
duration float64
director_facebook_likes float64
...
title_year float64 ```
actor_2_facebook_likes float64
imdb_score float64
aspect_ratio float64
movie_facebook_likes int64
Length: 28, dtype: object
in[17]: movie = pd.read_csv('data/movie.csv')
in[18]: # выбор director_name этой колонки
movie['director_name']
out[18]: 0 James Cameron
1 Gore Verbinski
2 Sam Mendes
3 Christopher Nolan
4 Doug Walker
...
4911 Scott Smith
4912 NaN
4913 Benjamin Roberds
4914 Daniel Hsia
4915 Jon Gunn
Name: director_name, Length: 4916, dtype: object
in[19]: # также можно выбрать через атрибут
movie.director_name
out[19]: 0 James Cameron
1 Gore Verbinski
2 Sam Mendes
3 Christopher Nolan
4 Doug Walker
...
4911 Scott Smith
4912 NaN
4913 Benjamin Roberds
4914 Daniel Hsia
4915 Jon Gunn
Name: director_name, Length: 4916, dtype: object
# просмотр типа
in[20]: type(movie['director_name'])
out[20]: pandas.core.series.Series
in[21]: director = movie['director_name']
# просмотр имени выбранной колонки
director.name
out[21]: 'director_name'
in[22]: # преобразование одноколоночной Series в DataFrame
director.to_frame().head()
out[22]:
director_name
0 James Cameron
1 Gore Verbinski
2 Sam Mendes
3 Christopher Nolan
4 Doug Walker
in[23]: # просмотр всех уникальных методов Series
s_attr_methods = set(dir(pd.Series))
# размер этого множества
len(s_attr_methods)
out[23]: 442
in[24]: # просмотр всех уникальных методов DataFrame
df_attr_methods = set(dir(pd.DataFrame))
len(df_attr_methods)
out[24]: 445
in[25]: # сколько общих методов у этих двух множеств
len(s_attr_methods & df_attr_methods)
out[25]: 376
in[26]: # выбрать director и actor_1_fb_likes две колонки
movie = pd.read_csv('data/movie.csv')
director = movie['director_name']
actor_1_fb_likes = movie['actor_1_facebook_likes']
# просмотр заголовка
in[27]: director.head()
out[27]: 0 James Cameron
1 Gore Verbinski
2 Sam Mendes
3 Christopher Nolan
4 Doug Walker
Name: director_name, dtype: object
in[28]: actor_1_fb_likes.head()
out[28]: 0 1000.0
1 40000.0
2 11000.0
3 27000.0
4 131.0
Name: actor_1_facebook_likes, dtype: float64
in[29]: # подсчёт отдельно
pd.set_option('max_rows', 8)
director.value_counts()
out[29]: Steven Spielberg 26
Woody Allen 22
Clint Eastwood 20
Martin Scorsese 20
..
James Nunn 1
Gerard Johnstone 1
Ethan Maniquis 1
Antony Hoffman 1
Name: director_name, Length: 2397, dtype: int64
in[30]: actor_1_fb_likes.value_counts()
out[30]: 1000.0 436
11000.0 206
2000.0 189
3000.0 150
...
216.0 1
859.0 1
225.0 1
334.0 1
Name: actor_1_facebook_likes, Length: 877, dtype: int64
in[31]: director.size
out[31]: 4916
in[32]: director.shape
out[33]: (4916,)
in[33]: len(director)
out[33]: 4916
in[34]: # сколько непустых значений у director
director.count()
out[34]: 4814 # это означает, что есть 102 пропущенных значения
in[35]: # сколько непустых значений у actor_1_fb_likes
actor_1_fb_likes.count()
out[35]: 4909
in[36]: # медиана actor_1_fb_likes
actor_1_fb_likes.quantile()
out[36]: 982.0 ```
(0.0, 640000.0, 6494.488490527602, 982.0, 15106.986883848309, 31881444.0)
count 4909.000000
mean 6494.488491
std 15106.986884
min 0.000000
25% 607.000000
50% 982.000000
75% 11000.000000
max 640000.000000
Name: actor_1_facebook_likes, dtype: float64
count 4814
unique 2397
top Steven Spielberg
freq 26
Name: director_name, dtype: object
510.0
0.1 240.0
0.2 510.0
0.3 694.0
0.4 854.0
...
0.6 1000.0
0.7 8000.0
0.8 13000.0
0.9 18000.0
Name: actor_1_facebook_likes, Length: 9, dtype: float64
0 False
1 False
2 False
3 False
...
4912 True
4913 False
4914 False
4915 False
Name: director_name, Length: 4916, dtype: bool
4916
4909
Steven Spielberg 0.005401
Woody Allen 0.004570
Clint Eastwood 0.004155
Martin Scorsese 0.004155
...
James Nunn 0.000208
Gerard Johnstone 0.000208
Ethan Maniquis 0.000208
Antony Hoffman 0.000208
Name: director_name, Length: 2397, dtype: float64
True
0 True
1 True
2 True
3 True
...
4912 False
4913 True
4914 True
4915 True
Name: director_name, Length: 4916, dtype: bool
5 + 9 = 14
4 ** 2 = 16
a = 10
5 <= 9 # Истина
'abcde' + 'fg' = 'abcdefg'
not (5 <= 9) # Ложно
7 in [1, 2, 6] # Ложно
set([1,2,3]) & set([2,3,4]) = {2, 3}
[1, 2, 3] - 3 # Ошибка
а = set([1,2,3]); а[0] # Ошибка
imdb_score = movie['imdb_score']
imdb_score
``` **imdb_score + 1**
| | imdb_score |
|:--:|:----------:|
|0 | 8.9 |
|1 | 8.1 |
|2 | 7.8 |
|...| ... |
|4913| 7.3 |
|4914| 7.3 |
|4915| 7.6 |
**每列值乘以2.5**
| | imdb_score * 2.5 |
|:--:|:----------------:|
|0 | 19.75 |
|1 | 17.75 |
|2 | 17 |
|...| ... |
|4913| 15.75 |
|4914| 15.75 |
|4915| 16.50 |
**每列值除以7的余数**
| | imdb_score // 7 |
|:--:|:--------------:|
|0 | 1 |
|1 | 1 |
|2 | 0 |
|...| ... |
|4913| 0 |
|4914| 0 |
|4915| 0 |
**判断是否大于7**
| | imdb_score > 7 |
|:--:|:-------------:|
|0 | True |
|1 | True |
|2 | False |
|...| ... |
|4913| False |
|4914| False |
|4915| False |
**判断是否等于字符串**
| | director == 'James Cameron' |
|:--:|:----------------------------:|
|0 | True |
|1 | False |
|2 | False |
|...| ... |
|4913| False |
|4914| False |
|4915| False |
*И так далее.*
В запросе представлен код на языке Python, который выполняет различные операции с данными. В результате выводятся значения переменных и результаты вычислений.
Текст запроса не содержит контекста или дополнительной информации, поэтому перевод выполнен без изменений. ### Больше
actor_1_fb_likes.isnull().mean()
```0.0014239218877135883```
(actor_1_fb_likes.fillna(0) .astype(int) .head())
0 1000 1 40000 2 11000 3 27000 4 131 Name: actor_1_facebook_likes, dtype: int64
## 8. Придание смысла индексу
In[83]: movie = pd.read_csv('data/movie.csv') In[84]: movie.shape Out[84]: (4916, 28) In[85]: movie2 = movie.set_index('movie_title') movie2 Out[85]:

In[86]: pd.read_csv('data/movie.csv', index_col='movie_title') Out[86]:

### Больше
In[87]: movie2.reset_index()
## 9. Переименование строк и столбцов
In[88]: movie = pd.read_csv('data/movie.csv', index_col='movie_title') In[89]: idx_rename = {'Avatar':'Ratava', 'Spectre': 'Ertceps'} col_rename = {'director_name':'Director Name', 'num_critic_for_reviews': 'Critical Reviews'} In[90]: movie.rename(index=idx_rename, columns=col_rename).head() Out[90]:

### Больше
In[91]: movie = pd.read_csv('data/movie.csv', index_col='movie_title') index = movie.index columns = movie.columns
index_list = index.tolist()
column_list = columns.tolist()
index_list[0] = 'Ratava'
index_list[2] = 'Ertceps'
column_list[1] = 'Director Name'
column_list[2] = 'Critical Reviews'
In[92]: print(index_list[:5]) ['Ratava', "Pirates of the Caribbean: At World's End", 'Ertceps', 'The Dark Knight Rises', 'Star Wars: Episode VII - The Force Awakens']
In[93]: print(column_list) ['color', 'Director Name', 'Critical Reviews', 'duration', 'director_facebook_likes', 'actor_3_facebook_likes', 'actor_2_name', 'actor_1_facebook_likes', 'gross', 'genres', 'actor_1_name', 'num_voted_users', 'cast_total_facebook_likes', 'actor_3_name', 'facenumber_in_poster', 'plot_keywords', 'movie_imdb_link', 'num_user_for_reviews', 'language', 'country', 'content_rating', 'budget', 'title_year', 'actor_2_facebook_likes', 'imdb_score', 'aspect_ratio', 'movie_facebook_likes']
In[94]: movie.index = index_list movie.columns = column_list
In[95]: movie.head() Out[95]:

## 10. Создание и удаление столбцов
In[96]: movie = pd.read_csv('data/movie.csv') In[97]: movie['has_seen'] = 0 In[98]: movie.columns Out[98]: Index(['color', 'director_name', 'num_critic_for_reviews', 'duration', 'director_facebook_likes', 'actor_3_facebook_likes', 'actor_2_name', 'actor_1_facebook_likes', 'gross', 'genres', 'actor_1_name', 'movie_title', 'num_voted_users', 'cast_total_facebook_likes', 'actor_3_name', 'facenumber_in_poster', 'plot_keywords', 'movie_imdb_link', 'num_user_for_reviews', 'language', 'country', 'content_rating', 'budget', 'title_year', 'actor_2_facebook_likes', 'imdb_score', 'aspect_ratio', 'movie_facebook_likes', 'has_seen'], dtype='object')
In[99]: movie['actor_director_facebook_likes'] = (movie['actor_1_facebook_likes'] + movie['actor_2_facebook_likes'] + movie['actor_3_facebook_likes'] + movie['director_facebook_likes']) In[100]: movie['actor_director_facebook_likes'].isnull().sum() Out[100]: 122
In[101]: movie['actor_director_facebook_likes'] = movie['actor_director_facebook_likes'].fillna(0)
In[102]: movie['is_cast_likes_more'] = (movie['cast_total_facebook_likes'] >=
movie['actor_director_facebook_likes'])
In[103]:
movie['is_cast_likes_more'].all()
Out[103]: False
In[104]: movie = movie.drop('actor_director_facebook_likes', axis='columns')
In[105]: movie['actor_total_facebook_likes'] = (movie['actor_1_facebook_likes'] + movie['actor_2_facebook_likes'] + movie['actor_3_facebook_likes'])
movie['actor_total_facebook_likes'] = movie['actor_total_facebook_likes'].fillna(0)
In[106]: movie['is_cast_likes_more'] = movie['cast_total_facebook_likes'] >=
movie['actor_total_facebook_likes']
movie['is_cast_likes_more'].all()
Out[106]: True
```py
In[107]: movie['pct_actor_cast_like'] = (movie['actor_total_facebook_likes'] /
movie['cast_total_facebook_likes'])
In[108]: movie['pct_actor_cast_like'].min(), movie['pct_actor_cast_like'].max()
Out[108]: (0.0, 1.0)
In[109]: movie.set_index('movie_title')['pct_actor_cast_like'].head()
Out[109]:
movie_title
Avatar 0.577369
Pirates of the Caribbean: At World's End 0.951396
Spectre 0.987521
The Dark Knight Rises 0.683783
Star Wars: Episode VII - The Force Awakens 0.000000
Name: pct_actor_cast_like, dtype: float64
# Использование метода insert() для вставки столбца на месте
In[110]: profit_index = movie.columns.get_loc('gross') + 1
profit_index
In[111]: movie.insert(loc=profit_index,
column='profit',
value=movie['gross'] - movie['budget'])
In[112]: movie.head()
Out[112]:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )