Introduction à l'analyse de données avec Python P32-P43 [ch02 3.US Baby Names 1880-2010]

# %load ipython_log.py
# IPython log file
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


# __Tout d'abord, essayez d'importer un fichier dans le cadre__________________________
names1880=pd.read_csv('yob1880.txt',names=['name', 'sex', 'births'])
names1880.groupby('sex').births.sum()


# __Tout yob nantoka.Lorsque vous souhaitez incorporer du txt dans un cadre__________________________
pieces=[]
columns=['name', 'sex', 'births']
years=range(1880,2011)
for year in years:
	path='yob%d.txt' % year
	frame=pd.read_csv(path,names=columns)
	frame['year']=year
	pieces.append(frame)
	names=pd.concat(pieces,ignore_index=True)   #Ignorer l'index Si défini sur True, l'index dans la colonne de gauche du texte sera modifié de manière appropriée.
					 #Un énorme cadre de 1690783 lignes est créé. La recherche toujours est rapide


# __Changements dans le nombre de naissances__________________________
total_births=names.pivot_table(names, index='year', columns='sex', aggfunc=sum)
'''
Dans le livre
 total_births = names.pivot_table('births', rows='year',cols='sex', aggfunc=sum)
Mais c'est vieux
 rows=>index
 cols=>columns
Changé en
Vous devez mettre un bloc de données dans le premier argument
 (Dans le deuxième argument'birth'Je pensais que je devais le mettre dedans, mais il a été repoussé ...?)
'''
total_births.tail()
total_births.plot(title='Total births by sex and year')
'''Essayez de faire apparaître le nombre de naissances de chaque nom pour le nombre total de naissances par accessoire'''
#année de données,Regrouper par sexe et mettre dans une nouvelle colonne





def add_prop(group):
	'''Ajoutez une colonne au groupe, indiquant le rapport entre le nombre de naissances pour chaque nom et le nombre total de naissances'''
	births = group.births.astype(float)   # Integer division floors
	group['prop'] = births / births.sum()   #Ajouter le résultat à la colonne appelée prop
	return group

names = names.groupby(['year', 'sex']).apply(add_prop)

np.allclose(names.groupby(['year','sex']).prop.sum(),1)   #1 lorsque tous les accessoires sont ajoutés(100%)Confirmez que
	#Vérifier par tous les noms fermés.groupby(['year','sex']).prop.sum()Vérifiez si 1 et 1 sont égaux










#__Analyzing Naming Trends__________________________ 
def get_top1000(group):
	'''
Top1000 noms pour chaque sexe/Extrait de l'année. Créer un autre groupe
	<Ancien format>
	return group.sort_index(by='births', ascending=False)[:1000]
	'''
	return group.sort_values(by='births', ascending=False)[:1000]

grouped=names.groupby(['year','sex'])
top1000=grouped.apply(get_top1000)
'''
__top1000 Another Way__________________________ 
pieces = []
for year, group in names.groupby(['year', 'sex']):
	pieces.append(group.sort_index(by='births', ascending=False)[:1000])
top1000 = pd.concat(pieces, ignore_index=True)
'''

boys=top1000[top1000.sex=='M']
girls=top1000[top1000.sex=='F']

total_births=top1000.pivot_table('births',index='year',columns='name',aggfunc=sum)   #data munging(Conversion de données)Correction avec le tableau croisé dynamique à faire
subset=total_births[['John', 'Harry', 'Mary', 'Marilyn']]
subset.plot(subplots=True, figsize=(12,10),grid=False, title="Number of births per year")








# __Measuring the increase in naming diversity__________________________
table=top1000.pivot_table('prop',index='year',columns='sex',aggfunc=sum)   #Faites pivoter le ratio pour examiner la variété des noms_Essayez de faire une table
table.plot(title='Sum of table1000.prop by year and sex',yticks=np.linspace(0,1.2,13),xticks=range(1880,2020,10))

# __Trier les pourcentages de données 2010__________________________ 
df=boys[boys.year==2010]
prop_cumsum=df.sort_values(by='prop',ascending=False).prop.cumsum()   #Somme cumulée Somme cumulée`cumsum`Utiliser un accessoire de ratio=0.Obtenez un nom qui atteint 5
prop_cumsum[:10]
prop_cumsum.searchsorted(0.5)   #L'index à ce moment-là est obtenu à l'aide de la fonction searchsorted et 0 s'affiche dans la colonne triée..Insérer 5 sperme

# __De même en 1990__________________________
df=boys[boys.year==1900]
in1900=df.sort_values(by='prop',ascending=False).prop.cumsum()
in1900.searchsorted(0.5)+1
prop_cumsum[:10]
prop_cumsum=df.sort_values(by='prop',ascending=False).prop.cumsum()

# __1990,Faites ce que vous avez fait en 2010 pendant toutes les années__________________________
def get_quantile_count(group, q=0.5):
	'''
0 des accessoires triés et somme cumulée.Renvoie un indice de 5
	<Ancien format>
		group = group.sort_index(by='prop', ascending=False)
		return group.prop.cumsum().searchsorted(q) + 1
	'''
	group = group.sort_values(by='prop', ascending=False)
	return group.prop.cumsum().values.searchsorted(q) + 1   #return group.prop.cumsum().values.searchsorted(q) +Réécrire à 1 valeurs Empêche les valeurs ajoutées d'être affichées dans un tableau

diversity=top1000.groupby(['year','sex']).apply(get_quantile_count)
diversity=diversity.unstack('sex')   #Par sexe

diversity.head()
diversity.plot(title="Number of popular names in top 50%")   #Il s'avère que les femmes ont plus de diversité de noms toutes les années



# __The "Last letter" Revolution__________________________ 
get_last_letter=lambda x:x[-1]   #Extraire uniquement la dernière chaîne de caractères des colonnes de nom
last_letters=names.name.map(get_last_letter)   #Formule d'extraction de la dernière chaîne pour tous les noms dans les noms(get_last_letter)Appliquer
last_letters.name='last_letter'
table=names.pivot_table('births',index=last_letters,columns=['sex','year'],aggfunc=sum)

subtable=table.reindex(columns=[1910,1960,2010],level='year')
subtable.head()


subtable.sum()   #Nombre total de naissances
letter_prop=subtable/subtable.sum().astype(float)   #Obtenir le ratio de chaîne

fig,axes=plt.subplots(2,1,figsize=(10,8))   #Affiché dans une sous-parcelle à 2 étapes
letter_prop['M'].plot(kind='bar',rot=0,ax=axes[0],title='Male')
letter_prop['F'].plot(kind='bar',rot=0,ax=axes[1],title='Female',legend=False)

#Le ratio de prénoms masculins se terminant par n est extrêmement élevé
#Transition annuelle du dernier ci-dessous'n'Regardez le nom

letter_prop=table/table.sum().astype(float)   #last_rapport au nombre total de chaque lettre
dny_ts=letter_prop.ix[['d','n','y'],'M'].T   #d,n,Essayez de tracer seulement y
																				#'M'Seulement pour les hommes
																				# .Faire une matrice transposée de trames de données avec T
# dny_ts.head()
# dny_ts.plot()
# plt.show()













#__Boy names that became girl names (and vice versa)__________________________ 
all_names=top1000.name.unique()   #Énumération de tous les noms
mask=np.array(['lesl' in x.lower() for x in all_names])   #lower()Méthode de conversion en minuscules
															#'lesl'Renvoie True s'il contient les caractères
#[In]# mask
#[Out]# array([False, False, False, ..., False, False, False], dtype=bool)




lesley_like=all_names[mask]   #all_Dans les noms'lesl'Seulement ceux qui contiennent lesley_Stocker comme
#[In]# lesley_like
#[Out]# array(['Leslie', 'Lesley', 'Leslee', 'Lesli', 'Lesly'], dtype=object)





filtered=top1000[top1000.name.isin(lesley_like)]   #Extraire uniquement les gars comme lesley de top1000
#[In]# filtered
#[Out]#                     name sex  births  year      prop
#[Out]# year sex                                            
#[Out]# 1880 F   654      Leslie   F       8  1880  0.000088
#[Out]#      M   1108     Leslie   M      79  1880  0.000715
#[Out]# 1881 F   2523     Leslie   F      11  1881  0.000120
#[Out]#      M   3072     Leslie   M      92  1881  0.000913
#[Out]# 1882 F   4593     Leslie   F       9  1882  0.000083
#[Out]#      M   5081     Leslie   M     122  1882  0.001073
#[Out]#          5865     Lesley   M       6  1882  0.000053
#[Out]# 1883 F   6850     Leslie   F       7  1883  0.000062
#[Out]#      M   7225     Leslie   M     120  1883  0.001147
#[Out]#          8093     Lesley   M       5  1883  0.000048
#[Out]# 1884 F   8697     Leslie   F      15  1884  0.000116
#[Out]#      M   9432     Leslie   M     125  1884  0.001092
#[Out]# 1885 F   11161    Leslie   F      10  1885  0.000075
#[Out]#      M   11751    Leslie   M     122  1885  0.001132
#[Out]# 1886 F   13601    Leslie   F       8  1886  0.000055
#[Out]#      M   14132    Leslie   M     136  1886  0.001228
#[Out]# 1887 F   15806    Leslie   F      12  1887  0.000082
#[Out]#      M   16524    Leslie   M     166  1887  0.001637
#[Out]# 1888 F   18030    Leslie   F      23  1888  0.000129
#[Out]#      M   19074    Leslie   M     175  1888  0.001448
#[Out]# 1889 F   20690    Leslie   F      23  1889  0.000129
#[Out]#      M   21737    Leslie   M     155  1889  0.001402
#[Out]# 1890 F   23332    Leslie   F      20  1890  0.000105
#[Out]#      M   24372    Leslie   M     181  1890  0.001630
#[Out]# 1891 F   25928    Leslie   F      28  1891  0.000151
#[Out]#      M   27068    Leslie   M     164  1891  0.001621
#[Out]# 1892 F   28704    Leslie   F      22  1892  0.000104
#[Out]#      M   29851    Leslie   M     207  1892  0.001696
#[Out]# 1893 F   31576    Leslie   F      26  1893  0.000122
#[Out]#      M   32765    Leslie   M     185  1893  0.001647
#[Out]# ...                  ...  ..     ...   ...       ...
#[Out]# 2000 F   1332261  Leslie   F    3619  2000  0.001995
#[Out]#          1332560   Lesly   F     742  2000  0.000409
#[Out]#          1332601  Lesley   F     658  2000  0.000363
#[Out]# 2001 F   1362012  Leslie   F    3610  2001  0.002007
#[Out]#          1362300   Lesly   F     801  2001  0.000445
#[Out]#          1362452  Lesley   F     509  2001  0.000283
#[Out]# 2002 F   1392272  Leslie   F    3520  2002  0.001962
#[Out]#          1392586   Lesly   F     717  2002  0.000400
#[Out]#          1392743  Lesley   F     471  2002  0.000262
#[Out]# 2003 F   1422818  Leslie   F    3635  2003  0.001992
#[Out]#          1423091   Lesly   F     838  2003  0.000459
#[Out]#          1423330  Lesley   F     451  2003  0.000247
#[Out]# 2004 F   1453982  Leslie   F    3497  2004  0.001908
#[Out]#          1454295   Lesly   F     747  2004  0.000408
#[Out]#          1454500  Lesley   F     450  2004  0.000245
#[Out]# 2005 F   1486010  Leslie   F    3120  2005  0.001692
#[Out]#          1486308   Lesly   F     783  2005  0.000425
#[Out]#          1486623  Lesley   F     381  2005  0.000207
#[Out]# 2006 F   1518523  Leslie   F    3035  2006  0.001600
#[Out]#          1518834   Lesly   F     761  2006  0.000401
#[Out]#          1519161  Lesley   F     370  2006  0.000195
#[Out]# 2007 F   1552581  Leslie   F    2689  2007  0.001403
#[Out]#          1552882   Lesly   F     765  2007  0.000399
#[Out]#          1553271  Lesley   F     351  2007  0.000183
#[Out]# 2008 F   1587484  Leslie   F    2323  2008  0.001233
#[Out]#          1587788   Lesly   F     699  2008  0.000371
#[Out]# 2009 F   1622503  Leslie   F    1975  2009  0.001081
#[Out]#          1622845   Lesly   F     598  2009  0.000327
#[Out]# 2010 F   1657142  Leslie   F    1558  2010  0.000886
#[Out]#          1657525   Lesly   F     502  2010  0.000285
#[Out]# 
#[Out]# [400 rows x 5 columns]











filtered.groupby('name').births.sum()   #Regrouper par nom et additionner le nombre de naissances
#[Out]# name
#[Out]# Leslee      1082
#[Out]# Lesley     35022
#[Out]# Lesli        929
#[Out]# Leslie    370429
#[Out]# Lesly      10067
#[Out]# Name: births, dtype: int64







table=filtered.pivot_table('births',index='year',columns='sex',aggfunc=sum)   # sex,Agréger par année
#[Out]# sex        F      M
#[Out]# year               
#[Out]# 1880     8.0   79.0
#[Out]# 1881    11.0   92.0
#[Out]# 1882     9.0  128.0
#[Out]# 1883     7.0  125.0
#[Out]# 1884    15.0  125.0
#[Out]# 1885    10.0  122.0
#[Out]# 1886     8.0  136.0
#[Out]# 1887    12.0  166.0
#[Out]# 1888    23.0  175.0
#[Out]# 1889    23.0  155.0
#[Out]# 1890    20.0  181.0
#[Out]# 1891    28.0  164.0
#[Out]# 1892    22.0  207.0
#[Out]# 1893    26.0  185.0
#[Out]# 1894    36.0  223.0
#[Out]# 1895    22.0  235.0
#[Out]# 1896    27.0  237.0
#[Out]# 1897    34.0  222.0
#[Out]# 1898    24.0  236.0
#[Out]# 1899    18.0  181.0
#[Out]# 1900    30.0  285.0
#[Out]# 1901    29.0  204.0
#[Out]# 1902    37.0  251.0
#[Out]# 1903    24.0  244.0
#[Out]# 1904    30.0  243.0
#[Out]# 1905    35.0  247.0
#[Out]# 1906    29.0  263.0
#[Out]# 1907    34.0  273.0
#[Out]# 1908    41.0  290.0
#[Out]# 1909    35.0  292.0
#[Out]# ...      ...    ...
#[Out]# 1981  5796.0  500.0
#[Out]# 1982  5814.0  430.0
#[Out]# 1983  4975.0  414.0
#[Out]# 1984  4419.0  367.0
#[Out]# 1985  4168.0  331.0
#[Out]# 1986  3741.0  379.0
#[Out]# 1987  3666.0  290.0
#[Out]# 1988  3555.0  318.0
#[Out]# 1989  3259.0  327.0
#[Out]# 1990  3268.0  295.0
#[Out]# 1991  2920.0  277.0
#[Out]# 1992  2836.0  216.0
#[Out]# 1993  2607.0  201.0
#[Out]# 1994  2685.0  207.0
#[Out]# 1995  2782.0  186.0
#[Out]# 1996  3584.0  176.0
#[Out]# 1997  3847.0  158.0
#[Out]# 1998  4289.0    NaN
#[Out]# 1999  4693.0    NaN
#[Out]# 2000  5019.0    NaN
#[Out]# 2001  4920.0    NaN
#[Out]# 2002  4708.0    NaN
#[Out]# 2003  4924.0    NaN
#[Out]# 2004  4694.0    NaN
#[Out]# 2005  4284.0    NaN
#[Out]# 2006  4166.0    NaN
#[Out]# 2007  3805.0    NaN
#[Out]# 2008  3022.0    NaN
#[Out]# 2009  2573.0    NaN
#[Out]# 2010  2060.0    NaN
#[Out]# 
#[Out]# [131 rows x 2 columns]



table=table.div(table.sum(1),axis=0)   #Normalisation
# table.tail()
#[Out]# sex     F   M
#[Out]# year         
#[Out]# 2006  1.0 NaN
#[Out]# 2007  1.0 NaN
#[Out]# 2008  1.0 NaN
#[Out]# 2009  1.0 NaN
#[Out]# 2010  1.0 NaN
# table.head()
#[Out]# sex          F         M
#[Out]# year                    
#[Out]# 1880  0.091954  0.908046
#[Out]# 1881  0.106796  0.893204
#[Out]# 1882  0.065693  0.934307
#[Out]# 1883  0.053030  0.946970
#[Out]# 1884  0.107143  0.892857



table.plot(style={'M':'k-','F':'k--'})
#[Out]# <matplotlib.axes._subplots.AxesSubplot at 0x227b78e6400>

Recommended Posts

Introduction à l'analyse de données avec Python P32-P43 [ch02 3.US Baby Names 1880-2010]
Introduction à l'analyse de données par Python P17-P26 [ch02 1.usa.gov données de bit.ly]
Note de lecture: Introduction à l'analyse de données avec Python
20200329_Introduction à l'analyse de données avec Python 2nd Edition Personal Summary
Analyse de données avec python 2
Analyse de données avec Python
[Introduction à minimiser] Analyse des données avec le modèle SEIR ♬
J'ai essayé l'analyse de données IRMf avec python (Introduction au décodage des informations cérébrales)
[Livre technique] Introduction à l'analyse de données avec Python -1 Chapitre Introduction-
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Analyse de données à partir de python (visualisation de données 1)
Introduction à l'analyse d'image opencv python
Analyse de données à partir de python (visualisation de données 2)
Liens vers des personnes qui commencent tout juste l'analyse de données avec python
De l'introduction de JUMAN ++ à l'analyse morphologique du japonais avec Python
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.1-8.2.5)
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.3-8.3.6.1)
Convertir des données Excel en JSON avec python
[Introduction à Python] Utilisons foreach avec Python
[Introduction à Python3 Jour 19] Chapitre 8 Destinations de données (8.4-8.5)
Convertissez des données FX 1 minute en données 5 minutes avec Python
[Introduction à Python3 Day 18] Chapitre 8 Destinations de données (8.3.6.2 à 8.3.6.3)
Analyse de données à partir de python (pré-traitement des données-apprentissage automatique)
"Introduction à l'analyse de données par modélisation statistique bayésienne à partir de R et Stan" implémenté en Python
[Introduction au Data Scientist] Bases de Python ♬
Analyse de données python
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Introduction à l'intelligence artificielle avec Python 1 «Théorie des algorithmes génétiques»
Markov Chain Artificial Brainless avec Python + Janome (1) Introduction à Janome
Chaîne de Markov artificielle sans cervelle avec Python + Janome (2) Introduction à la chaîne de Markov
Introduction à l'intelligence artificielle avec Python 2 «Pratique de l'algorithme génétique»
Introduction à Tornado (1): Framework Web Python démarré avec Tornado
J'ai essayé d'obtenir des données CloudWatch avec Python
Introduction à la modélisation statistique pour l'analyse des données
[Introduction à Python] Comment gérer les données au format JSON
Introduction au vol en formation avec Tello edu (Python)
[Python] Flux du scraping Web à l'analyse des données
Introduction à Python avec Atom (en route)
Écrire des données CSV sur AWS-S3 avec AWS-Lambda + Python
Introduction au modèle linéaire généralisé (GLM) par Python
[Introduction à l'application Udemy Python3 +] 9. Tout d'abord, imprimez avec print
[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 2: importer des données dans SQL Server à l'aide de PowerShell
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Analyse de données pour améliorer POG 1 ~ Web scraping avec Python ~
[Pour les débutants] Comment étudier le test d'analyse de données Python3
Comment récupérer des données d'image de Flickr avec Python
[Introduction à Python] Comment itérer avec la fonction range?
Présentation de l'analyse de données python
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
Analyse vocale par python
Introduction au traitement parallèle distribué Python par Ray
Introduction aux mathématiques à partir du mémo d'étude Python Vol.1
Introduction au langage Python
Construction d'un environnement d'analyse de données avec Python (notebook IPython + Pandas)
Introduction à OpenCV (python) - (2)
Défiez l'analyse des composants principaux des données textuelles avec Python
[Impression] [Analyse de données à partir de zéro] Introduction à la science des données Python apprise dans des analyses de rentabilisation