DjangoCongress JP 2018の企画としてDjangoの利用状況のアンケートを実施しています。( https://goo.gl/forms/BVVgBGtebHNW8aGu1 )
アンケートの3/18時点での途中結果としてレポートとして公開します。 イベント当日までまだまだアンケートは実施していますので、まだ回答していない方いらっしゃればぜひお願いいたします!
import re
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
plt.rcParams['font.family'] = 'IPAPGothic'
def flatmap_series(series, func):
values = []
for value in series:
new_values = func(value)
for v in new_values:
values.append(v)
return pd.Series(values)
def multiple_choices(series):
return flatmap_series(series.dropna(), lambda s: [v.strip() for v in re.split(',', s)])
df = pd.read_csv("DjangoCongress JP 2018 事前アンケート(回答) - フォームの回答 1.csv",
header=0,
names=['company_name', 'product_kind', 'why_django', 'experience', 'django_version', 'python_version', 'os', 'db_backend', 'problem', 'recommend_library'])
# df
for company_name in df['company_name'].replace('Castalia', 'キャスタリア株式会社').dropna().sort_values().unique():
print(company_name)
default_kind = 'WEBアプリケーション'
kinds = dict((re.compile(k), v) for k, v in ({
'.*(教育|MOOC|学習|勉強).*': '教育',
'.*社内.*': '社内システム',
'.*受託.*': '受託',
'.*(ウェブサイト|ブログ).*': 'ウェブサイト',
'.*個人.*': '個人',
'.*API.*': 'APIサービス',
'.*メディア.*': 'ウェブメディア',
'.*(分析|集計).*': '分析',
'.*業務.*': '業務',
}).items())
def product_kind(value):
for pattern, label in kinds.items():
if pattern.match(value):
return label
else:
return default_kind
product_kinds = flatmap_series(df['product_kind'].dropna(),
lambda s: [label.replace('* ', '') for label in re.split('[\n,、,・]', s) if label != '']).map(product_kind)
product_kinds.groupby(product_kinds).count().plot('pie', label='').axis('equal')
for why in df['why_django'].dropna():
print(why)
df['experience'].groupby(df.experience).count().plot('pie', label='').axis('equal')
django_versions = multiple_choices(df['django_version'])
django_versions.groupby(django_versions).count().plot('pie', label='').axis('equal')
python_versions = multiple_choices(df['python_version'])
python_versions.groupby(python_versions).count().plot('pie', label='').axis('equal')
oses = multiple_choices(df['os'])
oses.groupby(oses).count().plot('pie', label='').axis('equal')
二大OSSデータベースであるMySQLとPostgreSQLの利用が大半を占めていますね。 珍しいところでMongoDBを使われているところもあるようですが、これはdjango-mongodb-engine( https://django-mongodb-engine.readthedocs.io/en/latest/ )のようなカスタムのバックエンドを使っているのでしょうか。
db_backends = multiple_choices(df['db_backend'].replace("Aurora, Amazon Redshift", "Aurora、Amazon Redshift", regex=True)) # 選択肢の設定上で","が含まれてた
db_backends.groupby(db_backends).count().plot('pie', label='').axis('equal')
最新の情報が日本語で少ないというのが目立ちますね。 個人的には性能について困っている人がいることが気になりました。 Djangoに限らず大きなフレームワークはどうしてもオーバーヘッドがかかってしまうので金の弾丸含めて包括的に検討されることをおすすめします。
for problem in df['problem'].dropna():
print(problem)
やはりDjango REST Frameworkが人気のようです。
for recommend_library in df['recommend_library'].dropna():
print(recommend_library)