Data visualization#
# # для установки библиотек
# ! pip3 install seaborn
# ! pip3 install plotly
# ! pip3 install ggplot
# ! pip3 install matplotlib
# ! pip3 install matplotlib==3.0.0
#графики в svg выглядят более четкими
%config InlineBackend.figure_format = 'svg'
#увеличим дефолтный размер графиков
from pylab import rcParams
rcParams['figure.figsize'] = 10,5
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[2], line 8
6 rcParams['figure.figsize'] = 10,5
7 import numpy as np
----> 8 import pandas as pd
9 import matplotlib.pyplot as plt
10 import seaborn as sns
ModuleNotFoundError: No module named 'pandas'
Matplotlib#
xs = np.linspace(0, 2*np.pi, num=10)
plt.scatter(xs, np.sin(xs), c='r')
plt.axhline(c='k', alpha=0.75)
plt.axvline(c='k', alpha=0.75);
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[3], line 2
1 xs = np.linspace(0, 2*np.pi, num=10)
----> 2 plt.scatter(xs, np.sin(xs), c='r')
3 plt.axhline(c='k', alpha=0.75)
4 plt.axvline(c='k', alpha=0.75);
NameError: name 'plt' is not defined
We’ll use Kaggle Video Games Dataset for visualizations.
df = pd.read_csv('Video_Games_Sales.csv.zip')
print(df.shape)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[4], line 1
----> 1 df = pd.read_csv('Video_Games_Sales.csv.zip')
2 print(df.shape)
NameError: name 'pd' is not defined
df.head()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[5], line 1
----> 1 df.head()
NameError: name 'df' is not defined
df.info()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[6], line 1
----> 1 df.info()
NameError: name 'df' is not defined
df = df.dropna()
print(df.shape)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[7], line 1
----> 1 df = df.dropna()
2 print(df.shape)
NameError: name 'df' is not defined
df.head()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[8], line 1
----> 1 df.head()
NameError: name 'df' is not defined
df['User_Score'] = df.User_Score.astype('float64')
df['Year_of_Release'] = df.Year_of_Release.astype('int64')
df['User_Count'] = df.User_Count.astype('int64')
df['Critic_Count'] = df.Critic_Count.astype('int64')
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[9], line 1
----> 1 df['User_Score'] = df.User_Score.astype('float64')
2 df['Year_of_Release'] = df.Year_of_Release.astype('int64')
3 df['User_Count'] = df.User_Count.astype('int64')
NameError: name 'df' is not defined
useful_cols = ['Name', 'Platform', 'Year_of_Release', 'Genre',
'Global_Sales', 'Critic_Score', 'Critic_Count',
'User_Score', 'User_Count', 'Rating'
]
df[useful_cols].head(10)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[10], line 5
1 useful_cols = ['Name', 'Platform', 'Year_of_Release', 'Genre',
2 'Global_Sales', 'Critic_Score', 'Critic_Count',
3 'User_Score', 'User_Count', 'Rating'
4 ]
----> 5 df[useful_cols].head(10)
NameError: name 'df' is not defined
Начнем с самого простого и зачастую удобного способа визуализировать данные из pandas dataframe
— это воспользоваться функцией plot.
Для примера построим график продаж видео игр в различных странах в зависимости от года. Для начала отфильтруем только нужные нам столбцы, затем посчитаем суммарные продажи по годам и у получившегося dataframe
вызовем функцию plot
без параметров.
В библиотеку pandas
встроен wrapper для matplotlib
.
[x for x in df.columns if 'Sales' in x]
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[11], line 1
----> 1 [x for x in df.columns if 'Sales' in x]
NameError: name 'df' is not defined
df1 = df[[x for x in df.columns if 'Sales' in x] + ['Year_of_Release']]\
.groupby('Year_of_Release').sum()
df1.head()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[12], line 1
----> 1 df1 = df[[x for x in df.columns if 'Sales' in x] + ['Year_of_Release']]\
2 .groupby('Year_of_Release').sum()
3 df1.head()
NameError: name 'df' is not defined
df1.plot();
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[13], line 1
----> 1 df1.plot();
NameError: name 'df1' is not defined
В этом случае мы сконцентрировались на отображении трендов продаж в разных регионах.
C помощью параметра kind можно изменить тип графика, например, на bar chart. Matplotlib позволяет очень гибко настраивать графики. На графике можно изменить почти все, что угодно, но потребуется порыться в документации и найти нужные параметры. Например, параметра rot отвечает за угол наклона подписей к оси x.
df1.plot(kind='bar', rot=45, stacked=True);
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[14], line 1
----> 1 df1.plot(kind='bar', rot=45, stacked=True);
NameError: name 'df1' is not defined
Или можем сделать stacked bar chart, чтобы показать и динамику продаж и их разбиение по рынкам.
df1[list(filter(lambda x: x != 'Global_Sales', df1.columns))]\
.plot(kind='bar', rot=45, stacked=True);
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[15], line 1
----> 1 df1[list(filter(lambda x: x != 'Global_Sales', df1.columns))]\
2 .plot(kind='bar', rot=45, stacked=True);
NameError: name 'df1' is not defined
df1[list(filter(lambda x: x != 'Global_Sales', df1.columns))]\
.plot(kind='area', rot=45);
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[16], line 1
----> 1 df1[list(filter(lambda x: x != 'Global_Sales', df1.columns))]\
2 .plot(kind='area', rot=45);
NameError: name 'df1' is not defined
Еще один часто встречающийся тип графиков - это гистограммы. Посмотрим на распределение оценок критиков.
df.Critic_Score.hist(bins=40);
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[17], line 1
----> 1 df.Critic_Score.hist(bins=40);
NameError: name 'df' is not defined
ax = df.Critic_Score.hist()
ax.set_title('Critic Score distribution')
ax.set_xlabel('critic score')
ax.set_ylabel('games');
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[18], line 1
----> 1 ax = df.Critic_Score.hist()
2 ax.set_title('Critic Score distribution')
3 ax.set_xlabel('critic score')
NameError: name 'df' is not defined
У гистограмм можно контролировать, на сколько групп мы разбиваем распределение с помощью параметра bins
.
ax = df.Critic_Score.hist(bins=20)
ax.set_title('Critic Score distribution')
ax.set_xlabel('critic score')
ax.set_ylabel('games');
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[19], line 1
----> 1 ax = df.Critic_Score.hist(bins=20)
2 ax.set_title('Critic Score distribution')
3 ax.set_xlabel('critic score')
NameError: name 'df' is not defined
Еще немного познакомимся с тем, как в pandas можно стилизовать таблицы.
top_developers_df = df.groupby('Developer')[['Global_Sales']].sum()\
.sort_values('Global_Sales', ascending=False).head(10)
top_developers_df
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[20], line 1
----> 1 top_developers_df = df.groupby('Developer')[['Global_Sales']].sum()\
2 .sort_values('Global_Sales', ascending=False).head(10)
4 top_developers_df
NameError: name 'df' is not defined
# ! pip3 install jinja2
top_developers_df.style.bar()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[22], line 1
----> 1 top_developers_df.style.bar()
NameError: name 'top_developers_df' is not defined
with open('developers_rend.html', 'w') as f:
f.write(top_developers_df.style.bar().render())
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[23], line 2
1 with open('developers_rend.html', 'w') as f:
----> 2 f.write(top_developers_df.style.bar().render())
NameError: name 'top_developers_df' is not defined
Полезные ссылки#
Seaborn#
Теперь давайте перейдем к библиотеке seaborn. Seaborn — это по сути более высокоуровневое API на базе библиотеки matplotlib. Seaborn содержит более адекватные дефолтные настройки оформления графиков. Если просто добавить в код import seaborn, то картинки станут гораздо симпатичнее. Также в библиотеке есть достаточно сложные типы визуализации, которые в matplotlib потребовали бы большого количество кода.
Познакомимся с первым таким “сложным” типом графиков pair plot (scatter plot matrix). Эта визуализация поможет нам посмотреть на одной картинке, как связаны между собой различные признаки.
import seaborn as sns
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[24], line 1
----> 1 import seaborn as sns
ModuleNotFoundError: No module named 'seaborn'
# c svg pairplot браузер начинает тормозить
%config InlineBackend.figure_format = 'png'
sns_plot = sns.pairplot(
df[['Global_Sales', 'Critic_Score', 'User_Score']]);
sns_plot.savefig('pairplot.png')
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[25], line 3
1 # c svg pairplot браузер начинает тормозить
2 get_ipython().run_line_magic('config', "InlineBackend.figure_format = 'png'")
----> 3 sns_plot = sns.pairplot(
4 df[['Global_Sales', 'Critic_Score', 'User_Score']]);
5 sns_plot.savefig('pairplot.png')
NameError: name 'sns' is not defined
Также с помощью seaborn
можно построить распределение, для примера посмотрим на распределение оценок критиков Critic_Score
. Для этого построим distplot
. По default’у на графике отображается гистограмма и kernel density estimation.
%config InlineBackend.figure_format = 'svg'
sns.distplot(df.Critic_Score);
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[26], line 2
1 get_ipython().run_line_magic('config', "InlineBackend.figure_format = 'svg'")
----> 2 sns.distplot(df.Critic_Score);
NameError: name 'sns' is not defined
Для того чтобы подробнее посмотреть на взаимосвязь двух численных признаков, есть еще и joint_plot
– это гибрид scatter plot
и histogram
(отображаются также гистограммы распределений признаков). Посмотрим на то, как связаны между собой оценка критиков Critic_Score
и оценка пользователя User_Score
.
sns.jointplot(x='Critic_Score', y='User_Score',
data=df, kind='scatter');
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[27], line 1
----> 1 sns.jointplot(x='Critic_Score', y='User_Score',
2 data=df, kind='scatter');
NameError: name 'sns' is not defined
sns.jointplot(x='Critic_Score', y='User_Score',
data=df, kind='reg');
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[28], line 1
----> 1 sns.jointplot(x='Critic_Score', y='User_Score',
2 data=df, kind='reg');
NameError: name 'sns' is not defined
Box-and-Wisker Plot#
Еще один полезный тип графиков - это box plot
. Давайте сравним пользовательские оценки игр для топ-5 крупнейших игровых платформ.
top_platforms = df.Platform.value_counts().sort_values(ascending = False).head(5)
top_platforms
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[29], line 1
----> 1 top_platforms = df.Platform.value_counts().sort_values(ascending = False).head(5)
2 top_platforms
NameError: name 'df' is not defined
sns.boxplot(x="Platform", y="Critic_Score",
data=df[df.Platform.isin(top_platforms.index.values)]);
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[30], line 1
----> 1 sns.boxplot(x="Platform", y="Critic_Score",
2 data=df[df.Platform.isin(top_platforms.index.values)]);
NameError: name 'sns' is not defined
Box plot
состоит из коробки (поэтому он и называется box plot
), усиков и точек. Коробка показывает интерквантильный размах распределения, то есть соответственно 25% (Q1
) и 75% (Q3
) процентили. Черта внутри коробки обозначает медиану распределения.
С коробкой разобрались, перейдем к усам. Усы отображают весь разброс точек кроме выбросов, то есть минимальные и максимальные значения, которые попадают в промежуток (Q1 - 1.5*IQR, Q3 + 1.5*IQR)
, где IQR = Q3 - Q1
- интерквантильный размах. Точками на графике обозначаются выбросы (outliers
) - те значения, которые не вписываются в промежуток значений, заданный усами графика.

И еще один тип графиков (последний из тех, которые мы рассмотрим в этой части) - это heat map
. Heat map
позволяет посмотреть на распределение какого-то численного признака по двум категориальным. Визуализируем суммарные продажи игр по жанрам и игровым платформам.
platform_genre_sales = df.pivot_table(
index='Platform',
columns='Genre',
values='Global_Sales',
aggfunc=sum).fillna(0).applymap(float)
platform_genre_sales
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[31], line 1
----> 1 platform_genre_sales = df.pivot_table(
2 index='Platform',
3 columns='Genre',
4 values='Global_Sales',
5 aggfunc=sum).fillna(0).applymap(float)
7 platform_genre_sales
NameError: name 'df' is not defined
sns.heatmap(platform_genre_sales, annot=False, fmt=".1f", center = True);
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[32], line 1
----> 1 sns.heatmap(platform_genre_sales, annot=False, fmt=".1f", center = True);
NameError: name 'sns' is not defined
Полезные ссылки#
Plotly#
Мы рассмотрели визуализации на базе библиотеки matplotlib
. Однако, это не единственная опция для построения графиков на языке python
. Познакомимся также с библиотекой plotly
. Plotly
- это open-source библиотека, которая позволяет строить интерактивные графики в jupyter.notebook’e без необходимости зарываться в javascript код.
Прелесть интерактивных графиков заключается в том, что можно посмотреть точное численное значение при наведении мыши, скрыть неинтересные ряды в визуализации, приблизить определенный участок графика и т.д.
Перед началом работы импортируем все необходимые модули и инициализируем plotly
с помощью команды init_notebook_mode
.
from plotly.offline import init_notebook_mode, iplot
import plotly.graph_objects as go
import plotly
import plotly.graph_objs as go
init_notebook_mode(connected=True)
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[33], line 1
----> 1 from plotly.offline import init_notebook_mode, iplot
2 import plotly.graph_objects as go
3 import plotly
ModuleNotFoundError: No module named 'plotly'
Для начала построим line plot
с динамикой числа вышедших игр и их продаж по годам.
global_sales_years_df = df.groupby('Year_of_Release')[['Global_Sales']].sum()
global_sales_years_df.head()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[34], line 1
----> 1 global_sales_years_df = df.groupby('Year_of_Release')[['Global_Sales']].sum()
2 global_sales_years_df.head()
NameError: name 'df' is not defined
released_years_df = df.groupby('Year_of_Release')[['Name']].count()
released_years_df.head()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[35], line 1
----> 1 released_years_df = df.groupby('Year_of_Release')[['Name']].count()
2 released_years_df.head()
NameError: name 'df' is not defined
years_df = global_sales_years_df.join(released_years_df)
years_df.head()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[36], line 1
----> 1 years_df = global_sales_years_df.join(released_years_df)
2 years_df.head()
NameError: name 'global_sales_years_df' is not defined
years_df.columns = ['Global_Sales', 'Number_of_Games']
years_df.head()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[37], line 1
----> 1 years_df.columns = ['Global_Sales', 'Number_of_Games']
2 years_df.head()
NameError: name 'years_df' is not defined
В plotly
строится визуализация объекта Figure
, который состоит из данных (массив линий, которые в библиотеке называются traces
) и оформления/стиля, за который отвечает объект layout
. В простых случаях можно вызывать функцию iplot
и просто от массива traces
.
trace0 = go.Scatter(
x=years_df.index,
y=years_df.Global_Sales,
name='Global Sales'
)
trace1 = go.Scatter(
x=years_df.index,
y=years_df.Number_of_Games,
name='Number of games released'
)
data = [trace0, trace1]
layout = {'title': 'Statistics of video games'}
fig = go.Figure(data=data, layout=layout)
#fig.show()
iplot(fig, show_link = False)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[38], line 1
----> 1 trace0 = go.Scatter(
2 x=years_df.index,
3 y=years_df.Global_Sales,
4 name='Global Sales'
5 )
7 trace1 = go.Scatter(
8 x=years_df.index,
9 y=years_df.Number_of_Games,
10 name='Number of games released'
11 )
13 data = [trace0, trace1]
NameError: name 'go' is not defined
Также можно сразу сохранить график в виде html-файла.
# plotly.offline.plot(fig, filename='years_stats.html', show_link=False);
Посмотрим также на рыночную долю игровых платформ, расчитанную по количеству выпущенных игр и по суммарной выручке. Для этого построим bar chart
.
global_sales_platforms_df = df.groupby('Platform')[['Global_Sales']].sum()
released_platforms_df = df.groupby('Platform')[['Name']].count()
platforms_df = global_sales_platforms_df.join(released_platforms_df)
platforms_df.columns = ['Global_Sales', 'Number_of_Games']
platforms_df.sort_values('Global_Sales', inplace=True)
platforms_df = platforms_df.apply(lambda x: 100*x/platforms_df.sum(), axis = 1)
platforms_df.head()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[40], line 1
----> 1 global_sales_platforms_df = df.groupby('Platform')[['Global_Sales']].sum()
2 released_platforms_df = df.groupby('Platform')[['Name']].count()
3 platforms_df = global_sales_platforms_df.join(released_platforms_df)
NameError: name 'df' is not defined
trace0 = go.Bar(
x=platforms_df.index,
y=platforms_df.Global_Sales,
name='Global Sales',
orientation = 'v'
)
trace1 = go.Bar(
x=platforms_df.index,
y=platforms_df.Number_of_Games,
name='Number of games released',
orientation = 'v'
)
data = [trace0, trace1]
layout = {'title': 'Platforms share', 'xaxis': {'title': 'platform'}}
fig = go.Figure(data=data, layout=layout)
iplot(fig, show_link=False)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[41], line 1
----> 1 trace0 = go.Bar(
2 x=platforms_df.index,
3 y=platforms_df.Global_Sales,
4 name='Global Sales',
5 orientation = 'v'
6 )
8 trace1 = go.Bar(
9 x=platforms_df.index,
10 y=platforms_df.Number_of_Games,
11 name='Number of games released',
12 orientation = 'v'
13 )
15 data = [trace0, trace1]
NameError: name 'go' is not defined
В plotly
можно построить и box plot
. Рассмотрим различия оценок критиков в зависимости от жанра игры.
df.Genre.unique()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[42], line 1
----> 1 df.Genre.unique()
NameError: name 'df' is not defined
data = []
for genre in df.Genre.unique():
data.append(
go.Box(y=df[df.Genre==genre].Critic_Score,
name=genre)
)
iplot(data, show_link = False)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[43], line 3
1 data = []
----> 3 for genre in df.Genre.unique():
4 data.append(
5 go.Box(y=df[df.Genre==genre].Critic_Score,
6 name=genre)
7 )
8 iplot(data, show_link = False)
NameError: name 'df' is not defined
Давайте посмотрим на график зависимости средней оценки пользователей и оценки критиков по жанрам. Это будет обычный scatter plot.
scores_genres_df = df.groupby('Genre')[['Critic_Score', 'User_Score']].mean()
sales_genres_df = df.groupby('Genre')[['Global_Sales']].sum()
genres_df = scores_genres_df.join(sales_genres_df)
genres_df.head()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[44], line 1
----> 1 scores_genres_df = df.groupby('Genre')[['Critic_Score', 'User_Score']].mean()
2 sales_genres_df = df.groupby('Genre')[['Global_Sales']].sum()
4 genres_df = scores_genres_df.join(sales_genres_df)
NameError: name 'df' is not defined
trace0 = go.Scatter(
x=genres_df.Critic_Score,
y=genres_df.User_Score,
mode = 'markers'
)
data = [trace0]
layout = {'title': 'Statistics of video games genres', 'yaxis': {'title': 'user score'},
'xaxis': {'title': 'critic score'}}
fig = go.Figure(data=data, layout=layout)
iplot(fig, show_link=False)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[45], line 1
----> 1 trace0 = go.Scatter(
2 x=genres_df.Critic_Score,
3 y=genres_df.User_Score,
4 mode = 'markers'
5 )
7 data = [trace0]
8 layout = {'title': 'Statistics of video games genres', 'yaxis': {'title': 'user score'},
9 'xaxis': {'title': 'critic score'}}
NameError: name 'go' is not defined
Пока что ничего непонятно, давайте добавим к точкам подписи.
trace0 = go.Scatter(
x=genres_df.Critic_Score,
y=genres_df.User_Score,
mode = 'markers+text',
text = genres_df.index,
textposition='bottom center'
)
data = [trace0]
layout = {'title': 'Statistics of video games genres'}
fig = go.Figure(data=data, layout=layout)
iplot(fig, show_link=False)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[46], line 1
----> 1 trace0 = go.Scatter(
2 x=genres_df.Critic_Score,
3 y=genres_df.User_Score,
4 mode = 'markers+text',
5 text = genres_df.index,
6 textposition='bottom center'
7 )
9 data = [trace0]
10 layout = {'title': 'Statistics of video games genres'}
NameError: name 'go' is not defined
Далее добавим на график еще одно измерение - размер жанра (суммарный объем продаж, который мы заранее посчитали) и получим bubble chart.
genres_df.index
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[47], line 1
----> 1 genres_df.index
NameError: name 'genres_df' is not defined
trace0 = go.Scatter(
x=genres_df.Critic_Score,
y=genres_df.User_Score,
mode = 'markers+text',
text = genres_df.index,
#textposition='bottom',
marker = dict(
size = 1/10*genres_df.Global_Sales,
color = [
'aqua', 'azure', 'beige', 'lightgreen',
'lavender', 'lightblue', 'pink', 'salmon',
'wheat', 'ivory', 'silver'
]
)
)
data = [trace0]
layout = {
'title': 'Statistics of video games genres',
'xaxis': {'title': 'Critic Score'},
'yaxis': {'title': 'User Score'}
}
fig = go.Figure(data=data, layout=layout)
iplot(fig, show_link=False)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[48], line 1
----> 1 trace0 = go.Scatter(
2 x=genres_df.Critic_Score,
3 y=genres_df.User_Score,
4 mode = 'markers+text',
5 text = genres_df.index,
6 #textposition='bottom',
7 marker = dict(
8 size = 1/10*genres_df.Global_Sales,
9 color = [
10 'aqua', 'azure', 'beige', 'lightgreen',
11 'lavender', 'lightblue', 'pink', 'salmon',
12 'wheat', 'ivory', 'silver'
13 ]
14 )
15 )
17 data = [trace0]
18 layout = {
19 'title': 'Statistics of video games genres',
20 'xaxis': {'title': 'Critic Score'},
21 'yaxis': {'title': 'User Score'}
22 }
NameError: name 'go' is not defined
В plotly есть возможность делать графики в drop down menus, когда в зависимости от выбранного среза будут отображаться различные графики. Давайте построим гистораммы распределений оценок пользователей по жанрам.
traces = []
for genre in ['Racing', 'Shooter', 'Sports', 'Action']:
traces.append(
go.Histogram(
x=df[df.Genre == genre].User_Score,
histnorm='probability',
name = genre,
visible = (genre == 'Racing'))
)
layout = go.Layout(
title='User Score Distribution',
updatemenus=list([
dict(
x=-0.05,
y=1,
yanchor='top',
buttons=list([
dict(
args=['visible', [True] + [False]*3],
label='Racing',
method='restyle'
),
dict(
args=['visible', [False] + [True] + [False]*2],
label='Shooter',
method='restyle'
),
dict(
args=['visible', [False]*2 + [True] + [False]],
label='Sports',
method='restyle'
),
dict(
args=['visible', [False]*3 + [True]],
label='Action',
method='restyle'
)
]),
)
]),
)
fig = {'data': traces, 'layout': layout}
iplot(fig, show_link=False)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[49], line 4
1 traces = []
2 for genre in ['Racing', 'Shooter', 'Sports', 'Action']:
3 traces.append(
----> 4 go.Histogram(
5 x=df[df.Genre == genre].User_Score,
6 histnorm='probability',
7 name = genre,
8 visible = (genre == 'Racing'))
9 )
11 layout = go.Layout(
12 title='User Score Distribution',
13 updatemenus=list([
(...)
41 ]),
42 )
44 fig = {'data': traces, 'layout': layout}
NameError: name 'go' is not defined
Полезные ссылки#
Plotly express#
Это обертка над plotly.graph_objects
, которая позволяет строить графики проще.
import plotly.express as px
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[50], line 1
----> 1 import plotly.express as px
ModuleNotFoundError: No module named 'plotly'
px.scatter(df, x= 'User_Score', y = 'Critic_Score')
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[51], line 1
----> 1 px.scatter(df, x= 'User_Score', y = 'Critic_Score')
NameError: name 'px' is not defined
px.scatter(df, x= 'User_Score', y = 'Critic_Score', color = 'Genre')
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[52], line 1
----> 1 px.scatter(df, x= 'User_Score', y = 'Critic_Score', color = 'Genre')
NameError: name 'px' is not defined
px.scatter(df, x= 'User_Score', y = 'Critic_Score',
marginal_y = 'histogram', marginal_x = 'histogram', trendline="ols")
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[53], line 1
----> 1 px.scatter(df, x= 'User_Score', y = 'Critic_Score',
2 marginal_y = 'histogram', marginal_x = 'histogram', trendline="ols")
NameError: name 'px' is not defined
px.scatter(df[df.Platform.isin(top_platforms)], x= 'User_Score', y = 'Critic_Score',
marginal_y = 'histogram', marginal_x = 'histogram', trendline="ols", facet_col = 'Platform')
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[54], line 1
----> 1 px.scatter(df[df.Platform.isin(top_platforms)], x= 'User_Score', y = 'Critic_Score',
2 marginal_y = 'histogram', marginal_x = 'histogram', trendline="ols", facet_col = 'Platform')
NameError: name 'px' is not defined
px.scatter_matrix(df[['Global_Sales', 'Critic_Score', 'User_Score']])
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[55], line 1
----> 1 px.scatter_matrix(df[['Global_Sales', 'Critic_Score', 'User_Score']])
NameError: name 'px' is not defined