Einführung in die Datenanalyse mit Python P32-P43 [ch02 3.US Babynamen 1880-2010]

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


# __Versuchen Sie zunächst, eine Datei in den Frame zu importieren__________________________
names1880=pd.read_csv('yob1880.txt',names=['name', 'sex', 'births'])
names1880.groupby('sex').births.sum()


# __Alles yob nantoka.Wenn Sie txt in einen Frame integrieren möchten__________________________
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)   #Index ignorieren Wenn dieser Wert auf True gesetzt ist, wird der Index in der linken Textspalte entsprechend geändert.
					 #Ein riesiger Rahmen von 1690783 Zeilen wird erstellt. Die Suche ist immer noch schnell


# __Veränderungen in der Anzahl der Geburten__________________________
total_births=names.pivot_table(names, index='year', columns='sex', aggfunc=sum)
'''
Im Buch
 total_births = names.pivot_table('births', rows='year',cols='sex', aggfunc=sum)
Aber das ist alt
 rows=>index
 cols=>columns
Gewechselt zu
Sie müssen einen Datenrahmen in das erste Argument einfügen
 (Im zweiten Argument'birth'Ich dachte, ich müsste es hineinstecken, aber es wurde abgestoßen ...?)
'''
total_births.tail()
total_births.plot(title='Total births by sex and year')
'''Versuchen Sie, die Anzahl der Geburten jedes Namens für die Gesamtzahl der Geburten pro Requisite herauszufinden'''
#Datenjahr,Nach Geschlecht gruppieren und in eine neue Spalte einfügen





def add_prop(group):
	'''Fügen Sie der Gruppe eine Spalte hinzu, in der das Verhältnis der Anzahl der Geburten für jeden Namen zur Gesamtzahl der Geburten angegeben ist'''
	births = group.births.astype(float)   # Integer division floors
	group['prop'] = births / births.sum()   #Ergebnis zur Spalte namens prop hinzufügen
	return group

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

np.allclose(names.groupby(['year','sex']).prop.sum(),1)   #1, wenn alle Requisiten hinzugefügt wurden(100%)Bestätige das
	#Überprüfen Sie durch allclose Namen.groupby(['year','sex']).prop.sum()Überprüfen Sie, ob 1 und 1 gleich sind










#__Analyzing Naming Trends__________________________ 
def get_top1000(group):
	'''
Top1000 Namen für jedes Geschlecht/Auszug aus dem Jahr. Bilden Sie eine andere Gruppe
	<Altes 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(Datenkonvertierung)Fix mit Pivot-Tabelle zu tun
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)   #Drehen Sie das Verhältnis, um die Vielfalt der Namen zu untersuchen_Versuche einen Tisch zu machen
table.plot(title='Sum of table1000.prop by year and sex',yticks=np.linspace(0,1.2,13),xticks=range(1880,2020,10))

# __Sortieren Sie die Datenprozentsätze für 2010__________________________ 
df=boys[boys.year==2010]
prop_cumsum=df.sort_values(by='prop',ascending=False).prop.cumsum()   #Kumulative Summe kumulative Summe`cumsum`Verwenden Sie Verhältnis Prop=0.Holen Sie sich einen Namen, der 5 erreicht
prop_cumsum[:10]
prop_cumsum.searchsorted(0.5)   #Der Index zu diesem Zeitpunkt wird mithilfe der suchsortierten Funktion ermittelt, und in der sortierten Spalte wird 0 angezeigt..5 Cumsum einfügen

# __Ähnlich im Jahr 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,Mach das, was du 2010 für alle Jahre getan hast__________________________
def get_quantile_count(group, q=0.5):
	'''
0 der sortierten und kumulierten Requisitensumme.Gibt einen Index von 5 zurück
	<Altes 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) +Auf 1 Werte umschreiben Verhindert, dass die hinzugefügten Werte in einem Array angezeigt werden

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

diversity.head()
diversity.plot(title="Number of popular names in top 50%")   #Es stellt sich heraus, dass Frauen in allen Jahren mehr Namensvielfalt haben



# __The "Last letter" Revolution__________________________ 
get_last_letter=lambda x:x[-1]   #Extrahieren Sie nur die letzte Zeichenfolge aus den Namensspalten
last_letters=names.name.map(get_last_letter)   #Formel zum Extrahieren der letzten Zeichenfolge für alle Namen in Namen(get_last_letter)Anwenden
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()   #Gesamtzahl der Geburten
letter_prop=subtable/subtable.sum().astype(float)   #String-Verhältnis abrufen

fig,axes=plt.subplots(2,1,figsize=(10,8))   #Wird in einer zweistufigen Nebenhandlung angezeigt
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)

#Das Verhältnis der männlichen Namen, die mit n enden, ist extrem hoch
#Jährlicher Übergang des letzten unten'n'Schau dir den Namen an

letter_prop=table/table.sum().astype(float)   #last_Verhältnis zur Gesamtzahl jedes Buchstabens
dny_ts=letter_prop.ix[['d','n','y'],'M'].T   #d,n,Versuchen Sie, nur y zu zeichnen
																				#'M'Nur für Männer
																				# .Erstellen Sie mit T eine transponierte Matrix von Datenrahmen
# dny_ts.head()
# dny_ts.plot()
# plt.show()













#__Boy names that became girl names (and vice versa)__________________________ 
all_names=top1000.name.unique()   #Aufzählung aller Namen
mask=np.array(['lesl' in x.lower() for x in all_names])   #lower()Konvertierungsmethode in Kleinbuchstaben
															#'lesl'Gibt True zurück, wenn es die Zeichen enthält
#[In]# mask
#[Out]# array([False, False, False, ..., False, False, False], dtype=bool)




lesley_like=all_names[mask]   #all_In Namen'lesl'Nur diejenigen, die Lesley enthalten_In wie speichern
#[In]# lesley_like
#[Out]# array(['Leslie', 'Lesley', 'Leslee', 'Lesli', 'Lesly'], dtype=object)





filtered=top1000[top1000.name.isin(lesley_like)]   #Extrahieren Sie nur lesley-ähnliche Typen aus 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()   #Gruppieren Sie nach Namen und summieren Sie die Anzahl der Geburten
#[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,Nach Jahr aggregieren
#[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)   #Normalisierung
# 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

Einführung in die Datenanalyse mit Python P32-P43 [ch02 3.US Babynamen 1880-2010]
Einführung in die Datenanalyse mit Python P17-P26 [ch02 1.usa.gov Daten von bit.ly]
Lesehinweis: Einführung in die Datenanalyse mit Python
20200329_Einführung in die Datenanalyse mit Python 2nd Edition Personal Summary
Datenanalyse mit Python 2
Datenanalyse mit Python
[Einführung zur Minimierung] Datenanalyse mit SEIR-Modell ♬
Ich habe versucht, fMRI-Daten mit Python zu analysieren (Einführung in die Dekodierung von Gehirninformationen)
[Technisches Buch] Einführung in die Datenanalyse mit Python -1 Kapitel Einführung-
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Einführung in die Bildanalyse opencv python
Datenanalyse beginnend mit Python (Datenvisualisierung 2)
Links zu Personen, die gerade mit der Datenanalyse mit Python beginnen
Von der Einführung von JUMAN ++ bis zur morphologischen Analyse von Japanisch mit Python
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.1-8.2.5)
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.3-8.3.6.1)
Konvertieren Sie Excel-Daten mit Python in JSON
[Einführung in Python] Verwenden wir foreach mit Python
[Einführung in Python3 Tag 19] Kapitel 8 Datenziele (8.4-8.5)
[Einführung in Python3 Tag 18] Kapitel 8 Datenziele (8.3.6.2 bis 8.3.6.3)
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
"Einführung in die Datenanalyse durch statistische Bayes'sche Modellierung beginnend mit R und Stan" in Python implementiert
[Einführung in Data Scientist] Grundlagen von Python ♬
Datenanalyse Python
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
Einführung in die künstliche Intelligenz mit Python 1 "Genetic Algorithm-Theory-"
Markov Chain Artificial Brainless mit Python + Janome (1) Einführung in Janome
Markov-Kette Künstlich Gehirnlos mit Python + Janome (2) Einführung in die Markov-Kette
Einführung in die künstliche Intelligenz mit Python 2 "Genetic Algorithm-Practice-"
Einführung in Tornado (1): Python Web Framework mit Tornado gestartet
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Eine Einführung in die statistische Modellierung für die Datenanalyse
[Einführung in Python] Umgang mit Daten im JSON-Format
Einführung in den Formationsflug mit Tello edu (Python)
[Python] Fluss vom Web-Scraping zur Datenanalyse
Einführung in Python mit Atom (unterwegs)
Schreiben Sie CSV-Daten mit AWS-Lambda + Python in AWS-S3
Einführung in das Generalized Linear Model (GLM) von Python
[Einführung in die Udemy Python3 + -Anwendung] 9. Drucken Sie zunächst mit print
[In-Database Python Analysis-Lernprogramm mit SQL Server 2017] Schritt 2: Importieren Sie Daten mit PowerShell in SQL Server
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
Datenanalyse zur Verbesserung von POG 1 ~ Web Scraping mit Python ~
[Für Anfänger] So studieren Sie den Python3-Datenanalysetest
So kratzen Sie Bilddaten von Flickr mit Python
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
Datenanalyse Übersicht Python
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Sprachanalyse mit Python
Einführung in die verteilte Parallelverarbeitung von Python durch Ray
Einführung in die Mathematik ab Python Study Memo Vol.1
Einführung in die Python-Sprache
Aufbau einer Datenanalyseumgebung mit Python (IPython Notebook + Pandas)
Einführung in OpenCV (Python) - (2)
Fordern Sie die Hauptkomponentenanalyse von Textdaten mit Python heraus
[Impression] [Datenanalyse ab Null] Einführung in die Python-Datenwissenschaft in Geschäftsfällen