Skip to content

Commit 5439bd5

Browse files
committed
homework finished by chems
1 parent a18c91e commit 5439bd5

File tree

1 file changed

+35
-10
lines changed

1 file changed

+35
-10
lines changed

pandas_questions.py

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@
1515

1616
def load_data():
1717
"""Load data from the CSV files referundum/regions/departments."""
18-
referendum = pd.DataFrame({})
19-
regions = pd.DataFrame({})
20-
departments = pd.DataFrame({})
18+
19+
referendum = pd.read_csv('./data/referendum.csv', sep=';')
20+
regions = pd.read_csv('./data/regions.csv', sep=',')
21+
departments = pd.read_csv('./data/departments.csv', sep=',')
2122

2223
return referendum, regions, departments
2324

@@ -27,9 +28,15 @@ def merge_regions_and_departments(regions, departments):
2728
2829
The columns in the final DataFrame should be:
2930
['code_reg', 'name_reg', 'code_dep', 'name_dep']
30-
"""
31+
"""
32+
# target name code reg
33+
34+
merged = departments.merge(regions, left_on='region_code', right_on='code', suffixes=('_dep', '_reg'))
35+
result = merged[['code_reg', 'name_reg', 'code_dep', 'name_dep']]
36+
result.columns = ['code_reg', 'name_reg', 'code_dep', 'name_dep']
37+
3138

32-
return pd.DataFrame({})
39+
return result
3340

3441

3542
def merge_referendum_and_areas(referendum, regions_and_departments):
@@ -38,8 +45,13 @@ def merge_referendum_and_areas(referendum, regions_and_departments):
3845
You can drop the lines relative to DOM-TOM-COM departments, and the
3946
french living abroad.
4047
"""
41-
42-
return pd.DataFrame({})
48+
referendum['Department code'] = referendum['Department code'].str.zfill(2)
49+
merged_referendum = referendum.merge(
50+
regions_and_departments,
51+
left_on='Department code',
52+
right_on='code_dep'
53+
)
54+
return merged_referendum
4355

4456

4557
def compute_referendum_result_by_regions(referendum_and_areas):
@@ -48,8 +60,10 @@ def compute_referendum_result_by_regions(referendum_and_areas):
4860
The return DataFrame should be indexed by `code_reg` and have columns:
4961
['name_reg', 'Registered', 'Abstentions', 'Null', 'Choice A', 'Choice B']
5062
"""
51-
52-
return pd.DataFrame({})
63+
print('refrenduma nd areas : ', referendum_and_areas.shape)
64+
grouped = referendum_and_areas.groupby(by=['code_reg', 'name_reg']).sum(numeric_only=True).reset_index()
65+
result = grouped[['code_reg', 'name_reg', 'Registered', 'Abstentions', 'Null', 'Choice A', 'Choice B']]
66+
return result.set_index('code_reg')
5367

5468

5569
def plot_referendum_map(referendum_result_by_regions):
@@ -61,8 +75,18 @@ def plot_referendum_map(referendum_result_by_regions):
6175
should display the rate of 'Choice A' over all expressed ballots.
6276
* Return a gpd.GeoDataFrame with a column 'ratio' containing the results.
6377
"""
78+
79+
geo_data = gpd.read_file('data/regions.geojson')
80+
81+
total_votes = referendum_result_by_regions['Choice A']+ referendum_result_by_regions['Choice B']
82+
referendum_result_by_regions['ratio'] = referendum_result_by_regions['Choice A']/total_votes
83+
84+
geo_merged = geo_data.merge(referendum_result_by_regions, left_on='code', right_on='code_reg')
85+
86+
geo_merged.plot(column='ratio', legend=True, cmap ='coolwarm')
87+
6488

65-
return gpd.GeoDataFrame({})
89+
return geo_merged
6690

6791

6892
if __name__ == "__main__":
@@ -81,3 +105,4 @@ def plot_referendum_map(referendum_result_by_regions):
81105

82106
plot_referendum_map(referendum_results)
83107
plt.show()
108+
plt.savefig('referendum_result')

0 commit comments

Comments
 (0)