Auteur : Florian Gauthier
Date: 21/12/2016
Data: https://www.data.gouv.fr/fr/datasets/lieux-de-tournage-de-films-long-metrage-prs/
In [1]:
import pandas as pd
import datetime
from matplotlib import pyplot as plt, gridspec
import seaborn as sns
%matplotlib inline
In [2]:
tournages = pd.read_csv('../../DATA/tournagesdefilmsparis2011.csv', sep=';')
tournages.head(2)
Out[2]:
In [3]:
tournages['date_debut_evenement'] = pd.to_datetime(tournages['date_debut_evenement'])
tournages['date_fin_evenement'] = pd.to_datetime(tournages['date_fin_evenement'])
tournages['annee_evenement'] = tournages['date_debut_evenement'].dt.year
tournages['mois_evenement'] = tournages['date_debut_evenement'].dt.month
In [4]:
def compute_duree_tournage(row):
day_range = pd.date_range(row['date_debut_evenement'], row['date_fin_evenement'], freq='D')
return len(day_range)
In [5]:
tournages['n_days'] = tournages.apply(compute_duree_tournage, axis=1)
In [6]:
tournages.annee_evenement.value_counts().plot(kind='bar')
Out[6]:
In [7]:
tournages.mois_evenement.value_counts().plot(kind='bar')
Out[7]:
In [8]:
# On ne compte qu'une fois un (film x arrondissement)
tournages_arrondissement = tournages.drop_duplicates(subset=['titre', 'arrondissement'])
tournages_arrondissement.arrondissement.value_counts().plot(kind='bar', figsize=(10, 5))
Out[8]:
In [9]:
season_dict = {
1:'hiver',
2:'hiver',
3:'hiver',
4:'printemps',
5:'printemps',
6:'printemps',
7:'été',
8:'été',
9:'été',
10:'automne',
11:'automne',
12:'automne'}
tournages['saisons'] = tournages.mois_evenement.map(season_dict)
In [10]:
# On ne compte qu'une fois les (titre x saison)
tournages_saisons = tournages.drop_duplicates(subset=['titre', 'saisons'])
tournages_saisons.saisons.value_counts().plot(kind='bar')
Out[10]:
In [11]:
def compare_seasons_plot(df, serie_name, max_values=10, kind='bar'):
plt.figure(figsize=(10, 6))
gs = gridspec.GridSpec(2, 2)
col_as_list = ['blue', 'red', 'green', 'black', 'orange']
plot_num = 0
for saison in df.saisons.unique():
df_saison = df.loc[df.saisons == saison].copy()
ax = plt.subplot(gs[plot_num])
total_days_year = df_saison.groupby(serie_name)['n_days'].sum().reset_index(
name='total_days').sort_values('total_days', ascending=False)
total_days_year.iloc[:10].plot(
x=serie_name, y='total_days', kind=kind, ax=ax, color=col_as_list[plot_num])
plot_num += 1
plt.title('%s' % saison)
if kind == 'barh':
plt.gca().invert_yaxis()
gs.update(wspace=1.5, hspace=0.9)
def compare_years_plot(df, serie_name, max_values=10, kind='bar'):
plt.figure(figsize=(10, 15))
gs = gridspec.GridSpec(5, 2)
col_as_list = ['blue', 'red', 'green', 'black', 'orange', 'yellow', 'grey', 'purple', 'lightblue']
plot_num = 0
for year in df.annee_evenement.value_counts().sort_index().index:
df_year = df.loc[df.annee_evenement == year].copy()
ax = plt.subplot(gs[plot_num])
total_days_year = df_year.groupby(serie_name)['n_days'].sum().reset_index(
name='total_days').sort_values('total_days', ascending=False)
total_days_year.iloc[:10].plot(
x=serie_name, y='total_days', kind=kind, ax=ax, color=col_as_list[plot_num])
plot_num += 1
plt.title('%s' % year)
if kind == 'barh':
plt.gca().invert_yaxis()
gs.update(wspace=1.0, hspace=0.9)
def plot_2_series(df, serie_x, serie_hue, plot_size=5):
df_count = df.groupby([serie_x, serie_hue])['n_days'].sum().reset_index(name='n_tournages')
sns.factorplot(
x=serie_x, y="n_tournages", hue=serie_hue, data=df_count, size=plot_size, kind="bar", palette="muted")
In [12]:
plot_2_series(tournages, "annee_evenement", serie_hue="saisons", plot_size=6)
In [13]:
n_jours_tournages = tournages.groupby('titre')['n_days'].sum().reset_index(name='total_days').sort_values('total_days', ascending=False)
n_jours_tournages.iloc[:10].plot(x='titre', y='total_days', kind='barh')
plt.gca().invert_yaxis()
In [14]:
compare_years_plot(tournages, 'titre', max_values=5, kind='barh')
In [15]:
compare_seasons_plot(tournages, 'titre', max_values=10, kind='barh')
In [16]:
tournages.titre.nunique()
Out[16]:
In [17]:
tournages.groupby('titre')['saisons'].nunique().sort_values(ascending=False).value_counts() / tournages.titre.nunique()
Out[17]:
10% des films se sont étalés sur 4 saisons, POLISSE en fait parti !
In [18]:
tournages.groupby('titre')['saisons'].nunique().sort_values(ascending=False).head(5)
Out[18]: